ZGlmZiAtLWdpdCBhL0xJQ0VOU0UgYi9MSUNFTlNFCmluZGV4IGRkZDMwMTIuLmMwYWUxYWQgMTAwNjQ0Ci0tLSBhL0xJQ0VOU0UKKysrIGIvTElDRU5TRQpAQCAtMjEyLDUyICsyMTIsNiBAQAogY29kZSBmb3IgdGhlIHRoZXNlIHN1YmNvbXBvbmVudHMgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kCiBjb25kaXRpb25zIG9mIHRoZSBmb2xsb3dpbmcgbGljZW5zZXMuCiAKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgbW9kdWxlIGl0ZXN0L2RhdGFiaW5kaW5ncy9jb21tb24gaW5jbHVkZXMgdGhlIHRlc3Qgc2NoZW1hOyBkYXRhZ3JhcGgueHNkLCBzZG9KYXZhLnhzZCwgYW5kIHNkb01vZGVsLnhzZAotdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgotCi1MaWNlbnNlIGZvciB0aGUgU2VydmljZSBEYXRhIE9iamVjdHMgSmF2YURvYywgSW50ZXJmYWNlIERlZmluaXRpb24gZmlsZXMKLWFuZCBYU0QgZmlsZXMuCi0KLVRoZSBTZXJ2aWNlIERhdGEgT2JqZWN0cyBKYXZhRG9jLCBJbnRlcmZhY2UgRGVmaW5pdGlvbiBmaWxlcyBhbmQgWFNEIGZpbGVzIAotYXJlIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UuIAotQnkgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCAKLXVuZGVyc3Rvb2QgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9uczoKLQotUGVybWlzc2lvbiB0byBjb3B5LCBkaXNwbGF5LCBtYWtlIGRlcml2YXRpdmUgd29ya3Mgb2YgYW5kIGRpc3RyaWJ1dGUgCi10aGUgU2VydmljZSBEYXRhIE9iamVjdHMgSmF2YURvYywgSW50ZXJmYWNlIERlZmluaXRpb24gZmlsZXMgYW5kIFhTRCBmaWxlcwotKHRoZSAiQXJ0aWZhY3RzIikgaW4gYW55IG1lZGl1bSB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCAKLXByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBBcnRpZmFjdHMsIAotb3IgcG9ydGlvbnMgdGhlcmVvZiwgdGhhdCB5b3UgbWFrZToKLQotMS4JQSBsaW5rIG9yIFVSTCB0byB0aGUgQXJ0aWZhY3RzIGF0IHRoaXMgbG9jYXRpb246Ci1odHRwOi8vd3d3Lm9zb2Eub3JnL2Rpc3BsYXkvTWFpbi9TZXJ2aWNlK0RhdGErT2JqZWN0cytTcGVjaWZpY2F0aW9ucwotCi0yLglUaGUgZnVsbCB0ZXh0IG9mIHRoaXMgY29weXJpZ2h0IG5vdGljZSBhcyBzaG93biBpbiB0aGUgQXJ0aWZhY3RzLgotCi0KLQotVEhFIEFSVElGQUNUUyBBUkUgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUlMgTUFLRSBOTyAKLVJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIFJFR0FSRElORyBUSEUgCi1BUlRJRkFDVFMgQU5EIFRIRSBJTVBMRU1FTlRBVElPTiBPRiBUSEVJUiBDT05URU5UUywgCi1JTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgCi1GT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTi1JTkZSSU5HRU1FTlQgT1IgVElUTEUuIAotCi1USEUgQVVUSE9SUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCAKLUlOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIEFOWSAKLVVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIEFSVElGQUNUUy4KLQotVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgdGhlIEF1dGhvcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFueSBtYW5uZXIsIAotaW5jbHVkaW5nIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBTZXJ2aWNlIERhdGEgCi1PYmplY3RzIFNwZWNpZmljYXRpb24gb3IgaXRzIGNvbnRlbnRzIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgCi1wZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhlIFNlcnZpY2UgRGF0YSBPYmplY3RzIAotU3BlY2lmaWNhdGlvbiB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCB0aGUgQXV0aG9ycy4KLQotTm8gb3RoZXIgcmlnaHRzIGFyZSBncmFudGVkIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuCi0KLVJldmlzaW9uIGxldmVsIDEuMTEsIGxhc3QgdXBkYXRlZCBvbiAyMDA3LzEyLzIxCi0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIFRoZSBtb2R1bGUgaW1wbGVtZW50YXRpb24tc2NyaXB0IHRlbXBvcmFyaWx5IGluY2x1ZGVzIG9uZSBmaWxlIHVuZGVyIHRoZSBmb2xsb3dpbmcgQlNEIGxpY2Vuc2U6CkBAIC0yOTcsNTIgKzI1MSw3IEBACiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBtb2R1bGUgYXNzZW1ibHkteHNkIGluY2x1ZGVzIFhTRCBmaWxlcyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6Ci0KLUxpY2Vuc2UgZm9yIHRoZSBTZXJ2aWNlIENvbXBvbmVudCBBcmNoaXRlY3R1cmUgSmF2YURvYywgSW50ZXJmYWNlIAotRGVmaW5pdGlvbiBmaWxlcyBhbmQgWFNEIGZpbGVzLgotCi1UaGUgU2VydmljZSBDb21wb25lbnQgQXJjaGl0ZWN0dXJlIEphdmFEb2MsIEludGVyZmFjZSBEZWZpbml0aW9uIGZpbGVzLCAKLWFuZCBYU0QgZmlsZXMgYXJlIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgCi1mb2xsb3dpbmcgbGljZW5zZS4gQnkgdXNpbmcgYW5kL29yIGNvcHlpbmcgdGhpcyB3b3JrLCB5b3UgYWdyZWUgdGhhdCAKLXlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgCi1jb25kaXRpb25zOgotCi1QZXJtaXNzaW9uIHRvIGNvcHksIGRpc3BsYXksIG1ha2UgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgYW5kIGRpc3RyaWJ1dGUgCi10aGUgU2VydmljZSBDb21wb25lbnQgQXJjaGl0ZWN0dXJlIEphdmFEb2MsIEludGVyZmFjZSBEZWZpbml0aW9uIEZpbGVzIAotYW5kIFhTRCBmaWxlcyAodGhlICJBcnRpZmFjdHMiKSBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgZmVlIG9yIHJveWFsdHkgaXMgCi1oZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgCi1vZiB0aGUgQXJ0aWZhY3RzLCBvciBwb3J0aW9ucyB0aGVyZW9mLCB0aGF0IHlvdSBtYWtlOiAKLQotMS4gQSBsaW5rIG9yIFVSTCB0byB0aGUgQXJ0aWZhY3RzIGF0IHRoaXMgbG9jYXRpb246Ci1odHRwOi8vd3d3Lm9zb2Eub3JnL2Rpc3BsYXkvTWFpbi9TZXJ2aWNlK0NvbXBvbmVudCtBcmNoaXRlY3R1cmUrU3BlY2lmaWNhdGlvbnMgCi0KLTIuIFRoZSBmdWxsIHRleHQgb2YgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGFzIHNob3duIGluIHRoZSBBcnRpZmFjdHMuCi0KLVRIRSBBUlRJRkFDVFMgQVJFIFBST1ZJREVEICJBUyBJUywiIEFORCBUSEUgQVVUSE9SUyBNQUtFIE5PIAotUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgUkVHQVJESU5HIFRIRSAKLUFSVElGQUNUUyBBTkQgVEhFIElNUExFTUVOVEFUSU9OIE9GIFRIRUlSIENPTlRFTlRTLCBJTkNMVURJTkcsIEJVVCBOT1QgCi1MSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIAotUFVSUE9TRSwgTk9OLUlORlJJTkdFTUVOVCBPUiBUSVRMRS4gIAotCi1USEUgQVVUSE9SUyBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCAKLUlOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIEFOWSAKLVVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIEFSVElGQUNUUy4KLQotVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgdGhlIEF1dGhvcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFueSBtYW5uZXIsIAotaW5jbHVkaW5nIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBTZXJ2aWNlIENvbXBvbmVudCAKLUFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uIG9yIGl0cyBjb250ZW50cyB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIAotcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoZSBTZXJ2aWNlIENvbXBvbmVudCAKLUFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uIGFuZCB0aGUgSmF2YURvYywgSW50ZXJmYWNlIERlZmluaXRpb24gRmlsZXMgCi1hbmQgWFNEIEZpbGVzIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIHRoZSBBdXRob3JzLgotCi1ObyBvdGhlciByaWdodHMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4KLQotUmV2aXNpb24gbGV2ZWwgMS4xLCBsYXN0IHVwZGF0ZWQgb24gMjAwNy8xMS8xOQotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGUgbW9kdWxlcyBhc3NlbWJseS14c2QgYW5kIGRlZmluaXRpb25zLXhtbCBpbmNsdWRlcyBYU0QgYW5kIFhNTCBmaWxlcyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CitUaGUgbW9kdWxlIGFzc2VtYmx5LXhzZCBpbmNsdWRlcyBYU0QgYW5kIFhNTCBmaWxlcyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CiAKIENvcHlyaWdodCBPQVNJUyAyMDA1LCAyMDA5LiBBbGwgUmlnaHRzIFJlc2VydmVkLgogQWxsIGNhcGl0YWxpemVkIHRlcm1zIGluIHRoZSBmb2xsb3dpbmcgdGV4dCBoYXZlIHRoZSBtZWFuaW5ncyBhc3NpZ25lZCB0byB0aGVtIGluIHRoZSBPQVNJUyBJbnRlbGxlY3R1YWwgCkBAIC00MjcsMjUgKzMzNiwyMyBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgbW9kdWxlIGFzc2VtYmx5LXhzZCBpbmNsdWRlcyBYU0QgZmlsZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgotCiBUaGUgbW9kdWxlcyAKIAotYmluZGluZy13cy14bWwKK2JpbmRpbmctd3MKIGRhdGFiaW5kaW5nCiBkYXRhYmluZGluZy1heGlvbQogZGF0YWJpbmRpbmctamF4YgorZGF0YWJpbmRpbmctamF4Yi1heGlvbQogZGF0YWJpbmRpbmctanNvbgogZGF0YWJpbmRpbmctc2RvCiBkYXRhYmluZGluZy1zZG8tYXhpb20KLWRhdGFiaW5kaW5nLXhtbGJlYW5zCi1pbnRlcmZhY2Utd3NkbC14bWwKK2ludGVyZmFjZS13c2RsCiAKIEluY2x1ZGUgdGhlIGlwby54c2QgYW5kIGFkZHJlc3MueHNkIGluZm9ybWF0aW9uIGZyb20gdGhlIFhNTCBTY2hlbWEgUHJpbWVyIAogKGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDQvUEVSLXhtbHNjaGVtYS0wLTIwMDQwMzE4LykgY29tYmluZWQgaW50byB0aGUgCiBmaWxlIGlwby54c2QgYW5kIGV4dGVuZGVkIHdpdGggVUsgcG9zdGNvZGUgc3RydWN0dXJlcy4KIAotVGhlIGlwby54c2QgZmlsZSBpcyBhbHNvIGluY2x1ZGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcgbGljZW5zZToKK1RoZSBpcG8ueHNkIGFuZCBhZGRyZXNzLnhtbCBpbmZvcm1hdGlvbiBpbmNsdWRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CiAKIFczQyhjKSBTT0ZUV0FSRSBOT1RJQ0UgQU5EIExJQ0VOU0UKIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtc29mdHdhcmUtMjAwMjEyMzEKQEAgLTQ4MywzICszOTAsNTkgQEAKIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIAogVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgc29mdHdhcmUgYW5kIGFueSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gd2lsbCBhdCBhbGwgCiB0aW1lcyByZW1haW4gd2l0aCBjb3B5cmlnaHQgaG9sZGVycy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIG1vZHVsZSBpbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZSBpbmNsdWRlcyBmaWxlcyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisKK0NvcHlyaWdodCAoYykgRGphbmdvIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIGluZGl2aWR1YWwgY29udHJpYnV0b3JzLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKK2FyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgCisgICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgRGphbmdvIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICAgIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICAgICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIG1vZHVsZSBiaW5kaW5nLWNvbWV0LXJ1bnRpbWUgaW5jbHVkZXMgZmlsZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlOgorCitDb3B5cmlnaHQgKGMpIDx5ZWFyPiA8Y29weXJpZ2h0IGhvbGRlcnM+CisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCitpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKK2Z1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCithbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9jb250cmlidXRpb24tamFyL3BvbS54bWwgYi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE3OTYzNi4uMDAwMDAwMAotLS0gYS9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbnRyaWJ1dGlvbi1qYXI8L2FydGlmYWN0SWQ+Ci0gICAgPHBhY2thZ2luZz5tYXZlbi1hcmNoZXR5cGU8L3BhY2thZ2luZz4KLSAgICA8bmFtZT5DcmVhdGUgYW4gU0NBIEpBUiBjb250cmlidXRpb24gcHJvamVjdDwvbmFtZT4KLQotICAgIDxidWlsZD4KLSAgICA8ZXh0ZW5zaW9ucz4KLSAgICAgIDxleHRlbnNpb24+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uYXJjaGV0eXBlPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD5hcmNoZXR5cGUtcGFja2FnaW5nPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtMzwvdmVyc2lvbj4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvZXh0ZW5zaW9ucz4KLSAgICA8cGx1Z2lucz4KLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFyY2hldHlwZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS0zPC92ZXJzaW9uPgotICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgotICAgICAgPC9wbHVnaW4+Ci0gICAgPC9wbHVnaW5zPgotICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbCBiL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGNjNmFiLi4wMDAwMDAwCi0tLSBhL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPgotCi0JPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotCTxncm91cElkPiR7Z3JvdXBJZH08L2dyb3VwSWQ+Ci0JPGFydGlmYWN0SWQ+JHthcnRpZmFjdElkfTwvYXJ0aWZhY3RJZD4KLQk8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPgotCTx2ZXJzaW9uPiR7dmVyc2lvbn08L3ZlcnNpb24+Ci0JI2xpdGVyYWwoKTwhLS0gVE9ETyBwcm9qZWN0IG5hbWUgIC0tPgotCTxuYW1lPnF1aWNrc3RhcnQ8L25hbWU+Ci0JPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+Ci0KLQk8ZGVwZW5kZW5jaWVzPgotCQk8IS0tICBUVVNDQU5ZIERFUEVOREVOQ0lFUyAtLT4KLSAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7dHVzY2FueS52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLQkJPCEtLSAgSlVOSVQgREVQRU5ERU5DWSBGT1IgVEVTVElORyAtLT4KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+Ci0JCQk8c2NvcGU+dGVzdDwvc2NvcGU+Ci0JCTwvZGVwZW5kZW5jeT4KLQotCTwvZGVwZW5kZW5jaWVzPgotCTxidWlsZD4KLSAgICAgICAgICAgIDxkZWZhdWx0R29hbD5pbnN0YWxsPC9kZWZhdWx0R29hbD4KLSAgICAgICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgotCQk8cmVzb3VyY2VzPgotCQkJPHJlc291cmNlPgotCQkJCTxmaWx0ZXJpbmc+ZmFsc2U8L2ZpbHRlcmluZz4KLQkJCQk8ZGlyZWN0b3J5PnNyYy9tYWluL3Jlc291cmNlczwvZGlyZWN0b3J5PgotCQkJPC9yZXNvdXJjZT4KLQkJCTxyZXNvdXJjZT4KLQkJCQk8ZmlsdGVyaW5nPmZhbHNlPC9maWx0ZXJpbmc+Ci0JCQkJPGRpcmVjdG9yeT5zcmMvbWFpbi9qYXZhPC9kaXJlY3Rvcnk+Ci0JCQkJPGluY2x1ZGVzPgotCQkJCQk8aW5jbHVkZT4qKjwvaW5jbHVkZT4KLQkJCQk8L2luY2x1ZGVzPgotCQkJCTxleGNsdWRlcz4KLQkJCQkJPGV4Y2x1ZGU+KiovKi5qYXZhPC9leGNsdWRlPgotCQkJCTwvZXhjbHVkZXM+Ci0JCQk8L3Jlc291cmNlPgotCQk8L3Jlc291cmNlcz4KLQkJPHRlc3RSZXNvdXJjZXM+Ci0JCQk8dGVzdFJlc291cmNlPgotCQkJCTxmaWx0ZXJpbmc+ZmFsc2U8L2ZpbHRlcmluZz4KLQkJCQk8ZGlyZWN0b3J5PnNyYy90ZXN0L2phdmE8L2RpcmVjdG9yeT4KLQkJCQk8aW5jbHVkZXM+Ci0JCQkJCTxpbmNsdWRlPioqPC9pbmNsdWRlPgotCQkJCTwvaW5jbHVkZXM+Ci0JCQkJPGV4Y2x1ZGVzPgotCQkJCQk8ZXhjbHVkZT4qKi8qLmphdmE8L2V4Y2x1ZGU+Ci0JCQkJPC9leGNsdWRlcz4KLQkJCTwvdGVzdFJlc291cmNlPgotCQk8L3Rlc3RSZXNvdXJjZXM+Ci0JCTxwbHVnaW5zPgotCQkJPHBsdWdpbj4KLQkJCQk8aW5oZXJpdGVkPnRydWU8L2luaGVyaXRlZD4KLQkJCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+bWF2ZW4tY29tcGlsZXItcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8c291cmNlPjEuNTwvc291cmNlPgotCQkJCQk8dGFyZ2V0PjEuNTwvdGFyZ2V0PgotCQkJCQk8b3B0aW1pc2U+dHJ1ZTwvb3B0aW1pc2U+Ci0JCQkJCTxkZWJ1Zz50cnVlPC9kZWJ1Zz4KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4KLQkJCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotCQkJCTxhcnRpZmFjdElkPm1hdmVuLWVjbGlwc2UtcGx1Z2luPC9hcnRpZmFjdElkPgotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8ZG93bmxvYWRTb3VyY2VzPnRydWU8L2Rvd25sb2FkU291cmNlcz4KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4KLQkJCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+bWF2ZW4tdHVzY2FueS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0JCQk8L3BsdWdpbj4KLQkJPC9wbHVnaW5zPgotCTwvYnVpbGQ+Ci0JPHByb3BlcnRpZXM+Ci0JCTx0dXNjYW55LnZlcnNpb24+Mi4wLUJldGExPC90dXNjYW55LnZlcnNpb24+Ci0JPC9wcm9wZXJ0aWVzPgotCSNlbmQKLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9wb20ueG1sIGIvYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZDFjMTkuLjAwMDAwMDAKLS0tIGEvYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb250cmlidXRpb24temlwPC9hcnRpZmFjdElkPgotICAgIDxwYWNrYWdpbmc+bWF2ZW4tYXJjaGV0eXBlPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+Q3JlYXRlIGFuIFNDQSBaSVAgY29udHJpYnV0aW9uIHByb2plY3Q8L25hbWU+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgPGV4dGVuc2lvbnM+Ci0gICAgICA8ZXh0ZW5zaW9uPgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLmFyY2hldHlwZTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+YXJjaGV0eXBlLXBhY2thZ2luZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLWFscGhhLTM8L3ZlcnNpb24+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2V4dGVuc2lvbnM+Ci0gICAgPHBsdWdpbnM+Ci0gICAgICA8cGx1Z2luPgotICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtMzwvdmVyc2lvbj4KLSAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KLSAgICAgIDwvcGx1Z2luPgotICAgIDwvcGx1Z2lucz4KLSAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9wb20ueG1sIGIvYXJjaGV0eXBlcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzFhNzI2Li4wMDAwMDAwCi0tLSBhL2FyY2hldHlwZXMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1hcmNoZXR5cGU8L2FydGlmYWN0SWQ+Ci0gICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgTWF2ZW4gQXJjaGV0eXBlczwvbmFtZT4KLQotICAgIDxwcm9maWxlcz4KLSAgICAgICAgPHByb2ZpbGU+Ci0gICAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+Ci0gICAgICAgICAgICA8YWN0aXZhdGlvbj4KLSAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KLSAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KLQotICAgICAgICAgICAgPG1vZHVsZXM+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24tamFyPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24temlwPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24temlwLWRpc2NyaXB0b3I8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPnF1aWNrc3RhcnQ8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPnF1aWNrc3RhcnQtanNmPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5xdWlja3N0YXJ0LXN0cmlwZXM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPnF1aWNrc3RhcnQtYnBlbDwvbW9kdWxlPgotICAgICAgICAgICAgPC9tb2R1bGVzPgotICAgICAgICA8L3Byb2ZpbGU+Ci0gICAgPC9wcm9maWxlcz4gICAgCi0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3BvbS54bWwgYi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2FlZmQwLi4wMDAwMDAwCi0tLSBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1xdWlja3N0YXJ0LWJwZWw8L2FydGlmYWN0SWQ+Ci0gICAgPHBhY2thZ2luZz5tYXZlbi1hcmNoZXR5cGU8L3BhY2thZ2luZz4KLSAgICA8bmFtZT5DcmVhdGUgYW4gU0NBIFdlYmFwcCBwcm9qZWN0IHVzaW5nIEJQRUw8L25hbWU+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgPGV4dGVuc2lvbnM+Ci0gICAgICA8ZXh0ZW5zaW9uPgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLmFyY2hldHlwZTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+YXJjaGV0eXBlLXBhY2thZ2luZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLWFscGhhLTM8L3ZlcnNpb24+Ci0gICAgICA8L2V4dGVuc2lvbj4KLSAgICA8L2V4dGVuc2lvbnM+Ci0gICAgPHBsdWdpbnM+Ci0gICAgICA8cGx1Z2luPgotICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtMzwvdmVyc2lvbj4KLSAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KLSAgICAgIDwvcGx1Z2luPgotICAgIDwvcGx1Z2lucz4KLSAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9wb20ueG1sIGIvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODk0MDBlLi4wMDAwMDAwCi0tLSBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2YvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXF1aWNrc3RhcnQtanNmPC9hcnRpZmFjdElkPgotICAgIDxwYWNrYWdpbmc+bWF2ZW4tYXJjaGV0eXBlPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+Q3JlYXRlIGEgVHVzY2FueSBTQ0EgYW5kIEpTRiBwcm9qZWN0PC9uYW1lPgotCi0gICAgPGJ1aWxkPgotICAgICAgIDxleHRlbnNpb25zPgotICAgICAgICAgIDxleHRlbnNpb24+Ci0gICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5hcmNoZXR5cGU8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXJjaGV0eXBlLXBhY2thZ2luZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtNDwvdmVyc2lvbj4KLSAgICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICA8L2V4dGVuc2lvbnM+Ci0gICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS00PC92ZXJzaW9uPgotICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+Ci0gICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9wb20ueG1sIGIvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5MDQyYmQuLjAwMDAwMDAKLS0tIGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktcXVpY2tzdGFydC1qc29ucDwvYXJ0aWZhY3RJZD4NCi0gICAgPHBhY2thZ2luZz5tYXZlbi1hcmNoZXR5cGU8L3BhY2thZ2luZz4NCi0gICAgPG5hbWU+Q3JlYXRlIGEgVHVzY2FueSBTQ0Egd2ViYXBwIHByb2plY3QgdXNpbmcgdGhlIEpTT05QIGJpbmRpbmc8L25hbWU+DQotDQotICAgIDxidWlsZD4NCi0gICAgPGV4dGVuc2lvbnM+DQotICAgICAgPGV4dGVuc2lvbj4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uYXJjaGV0eXBlPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+YXJjaGV0eXBlLXBhY2thZ2luZzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS00PC92ZXJzaW9uPg0KLSAgICAgIDwvZXh0ZW5zaW9uPg0KLSAgICA8L2V4dGVuc2lvbnM+DQotICAgIDxwbHVnaW5zPg0KLSAgICAgIDxwbHVnaW4+DQotICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLWFscGhhLTQ8L3ZlcnNpb24+DQotICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPg0KLSAgICAgIDwvcGx1Z2luPg0KLSAgICA8L3BsdWdpbnM+DQotICA8L2J1aWxkPg0KLQ0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9wb20ueG1sIGIvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjJmNDU0ZS4uMDAwMDAwMAotLS0gYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktcXVpY2tzdGFydC1zdHJpcGVzPC9hcnRpZmFjdElkPgotICAgIDxwYWNrYWdpbmc+bWF2ZW4tYXJjaGV0eXBlPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+Q3JlYXRlIGEgc2ltcGxlIEFwYWNoZSBUdXNjYW55IFNDQSB3ZWJhcHAgcHJvamVjdCB1c2luZyB0aGUgU3RyaXBlcyBXZWIgRnJhbWV3b3JrPC9uYW1lPgotCi0gICAgPGJ1aWxkPgotICAgICAgIDxleHRlbnNpb25zPgotICAgICAgICAgIDxleHRlbnNpb24+Ci0gICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5hcmNoZXR5cGU8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXJjaGV0eXBlLXBhY2thZ2luZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtNDwvdmVyc2lvbj4KLSAgICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgICA8L2V4dGVuc2lvbnM+Ci0gICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS00PC92ZXJzaW9uPgotICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+Ci0gICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC9wb20ueG1sIGIvYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjNGY0YmYuLjAwMDAwMDAKLS0tIGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1xdWlja3N0YXJ0PC9hcnRpZmFjdElkPgotICAgIDxwYWNrYWdpbmc+bWF2ZW4tYXJjaGV0eXBlPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+Q3JlYXRlIGEgc2ltcGxlIEFwYWNoZSBUdXNjYW55IFNDQSB3ZWJhcHAgcHJvamVjdDwvbmFtZT4KLQotICAgIDxidWlsZD4KLSAgICA8ZXh0ZW5zaW9ucz4KLSAgICAgIDxleHRlbnNpb24+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uYXJjaGV0eXBlPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD5hcmNoZXR5cGUtcGFja2FnaW5nPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtNDwvdmVyc2lvbj4KLSAgICAgIDwvZXh0ZW5zaW9uPgotICAgIDwvZXh0ZW5zaW9ucz4KLSAgICA8cGx1Z2lucz4KLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFyY2hldHlwZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS00PC92ZXJzaW9uPgotICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgotICAgICAgPC9wbHVnaW4+Ci0gICAgPC9wbHVnaW5zPgotICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9jb21wbGlhbmNlLXRlc3RzL2Fzc2VtYmx5L3BvbS54bWwgYi9jb21wbGlhbmNlLXRlc3RzL2Fzc2VtYmx5L3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyZjJkMTIuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9hc3NlbWJseS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbXBsaWFuY2UtdGVzdHM8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0LWFzc2VtYmx5PC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU3BlY2lmaWNhdGlvbiBDb21wbGlhbmNlIFRlc3RzIEFzc2VtYmx5PC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPCEtLSBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGdldCB0aGUgbW9kdWxlIHdvcmtpbmcgaW4gRWNsaXBzZSB3aGljaCBkb2Vzbid0IHBpY2sgaXQgdXAgZnJvbSB0aGUgZGVwZW5kZW5jeSBwbHVnaW4gdW5wYWNrIC0tPg0KLSAgICAgICAgICAgIDwhLS0gVGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayBpcyBuZWVkZWQgYXMgcHJlc2VudGx5IHRoZSBzdXJlZmlyZSBwbHVnaW4gd29udCBydW4gdGVzdHMgaW4gYSBkZXBlbmRlbmN5IGphciAtLT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLWFzc2VtYmx5LXRlc3QtcnVubmVyPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8IS0tIFRoaXMgaXMgbmVlZCB3aGVuIHJ1bm5pbmcgd2l0aCBTdW4gSkRLIHdoaWNoIGdldHMgYW4gdW5zdXBwb3J0ZWQgb3BlcmF0aW9uIGV4Y2VwdGlvbiBjcmVhdGluZyBhbiBYTUxTdHJlYW1SZWFkZXIgZnJvbSBhIERPTVNvdXJjZQ0KLSAgICAgICAgICAgICB3aGVuIFR1c2NhbnkgaXMgd3JpdGluZyBhIHByb3BlcnR5IHZhbHVlICAtLT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy53b29kc3RveDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3R4LWFzbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4zLjIuNDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zdGF4PC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RheC1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuNTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgPGJ1aWxkPg0KLSAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgICAgICAgICAgICAgDQotICAgICAgPHBsdWdpbj4NCi0gICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQotICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgPGV4Y2x1ZGVzPg0KLSAgICAgICAgICAgICAgPCEtLSBSZWFsIG90ZXN0L1R1c2NhbnkgcHJvYmxlbXMgLS0+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9BU01fMTAwMDJfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tICBzZWUgVFVTQ0FOWS0zNTAzIC0tPg0KLQ0KLSAgICAgICAgICAgICAgPCEtLSBhY3R1YWxseSBpcyB3b3JraW5nIGJ1dCB0aGUgZXJyIG1zZ3MgY29tZSBvdXQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgc28gdGhlIG1zZyB0ZXh0IHRlc3QgZmFpbHMgLS0+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9BU01fMTMwMDRfVGVzdENhc2UuamF2YTwvZXhjbHVkZT4NCi0NCi0NCi0gICAgICAgICAgIDwvZXhjbHVkZXM+DQotICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgIDwvcGx1Z2luPg0KLQ0KLSAgICAgIDxwbHVnaW4+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBlbmRlbmN5LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDxleGVjdXRpb25zPg0KLSAgICAgICAgICA8ZXhlY3V0aW9uPg0KLSAgICAgICAgICAgIDxpZD51bnBhY2s8L2lkPg0KLSAgICAgICAgICAgIDxwaGFzZT50ZXN0LWNvbXBpbGU8L3BoYXNlPg0KLSAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgIDxnb2FsPnVucGFjazwvZ29hbD4NCi0gICAgICAgICAgICA8L2dvYWxzPg0KLSAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW1zPg0KLSAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4NCi0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b2FzaXMtYXNzZW1ibHktY29udHJpYnV0aW9uczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+DQotICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vb2FzaXMtY29udHJpYnV0aW9uczwvb3V0cHV0RGlyZWN0b3J5Pg0KLSAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQotICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vYXNpcy1hc3NlbWJseS10ZXN0LXJ1bm5lcjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8dHlwZT5qYXI8L3R5cGU+DQotICAgICAgICAgICAgICAgICAgIDxleGNsdWRlcz5jb21tb25zLWxvZ2dpbmcucHJvcGVydGllcyxvYXNpcy1zY2EtdGVzdHMucHJvcGVydGllczwvZXhjbHVkZXM+DQotICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vdGVzdC1jbGFzc2VzPC9vdXRwdXREaXJlY3Rvcnk+DQotICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4NCi0gICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbXM+DQotICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgIDwvZXhlY3V0aW9ucz4NCi0gICAgICA8L3BsdWdpbj4NCi0NCi0gICAgPC9wbHVnaW5zPg0KLSAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvY29tcGxpYW5jZS10ZXN0cy9hc3NlbWJseS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL2NvbXBsaWFuY2UtdGVzdHMvYXNzZW1ibHkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL290ZXN0L1R1c2NhbnlSdW50aW1lQnJpZGdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzODI5YWYuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9hc3NlbWJseS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzNiArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0Ow0KLQ0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7DQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7DQotDQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7DQotaW1wb3J0IGphdmEuaW8uRmlsZTsNCi1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOw0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb247DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZTIuTm9kZTsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlMi5Ob2RlRmFjdG9yeTsNCi0NCi1pbXBvcnQgY2xpZW50LlJ1bnRpbWVCcmlkZ2U7DQotaW1wb3J0IGNsaWVudC5UZXN0Q29uZmlndXJhdGlvbjsNCi0NCi0vKioNCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVudGltZSBCcmlkZ2UgZm9yIHRoZSBBcGFjaGUgVHVzY2FueSBTQ0EgcnVudGltZSAodmVyc2lvbiAyLngpDQotICoNCi0gKi8NCi1wdWJsaWMgY2xhc3MgVHVzY2FueVJ1bnRpbWVCcmlkZ2UgaW1wbGVtZW50cyBSdW50aW1lQnJpZGdlIHsNCi0NCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT05UUklCVVRJT05fTE9DQVRJT05fUFJPUEtFWSA9ICJPQVNJU19URVNURU5WX0NPTlRSSUJVVElPTl9MT0NBVElPTiI7DQotDQotICAgIHByb3RlY3RlZCBOb2RlRmFjdG9yeSBsYXVuY2hlcjsNCi0gICAgcHJvdGVjdGVkIE5vZGUgbm9kZTsNCi0gICAgcHJvdGVjdGVkIFByb3BlcnRpZXMgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzOw0KLSAgICANCi0gICAgVGVzdENvbmZpZ3VyYXRpb24gdGVzdENvbmZpZ3VyYXRpb24gPSBudWxsOw0KLQ0KLSAgICBwdWJsaWMgVHVzY2FueVJ1bnRpbWVCcmlkZ2UoKSB7DQotICAgICAgICAvLyByZWFkIHRlc3QgZXJyb3IgbWFwcGluZw0KLSAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzID0gbmV3IFByb3BlcnRpZXMoKTsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgSW5wdXRTdHJlYW0gcHJvcGVydGllc1N0cmVhbSA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCIvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMiKTsNCi0gICAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZXMubG9hZChwcm9wZXJ0aWVzU3RyZWFtKTsNCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgICANCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byByZWFkIG9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyBmaWxlIik7DQotICAgICAgICB9IA0KLSAgICB9DQotDQotICAgIHB1YmxpYyBUZXN0Q29uZmlndXJhdGlvbiBnZXRUZXN0Q29uZmlndXJhdGlvbigpIHsNCi0gICAgICAgIHJldHVybiB0ZXN0Q29uZmlndXJhdGlvbjsNCi0gICAgfQ0KLQ0KLSAgICBwdWJsaWMgdm9pZCBzZXRUZXN0Q29uZmlndXJhdGlvbihUZXN0Q29uZmlndXJhdGlvbiB0ZXN0Q29uZmlndXJhdGlvbikgew0KLSAgICAgICAgdGhpcy50ZXN0Q29uZmlndXJhdGlvbiA9IHRlc3RDb25maWd1cmF0aW9uOw0KLSAgICB9DQotDQotICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0Q29udHJpYnV0aW9uKFN0cmluZyBjb250cmlidXRpb25Mb2NhdGlvbiwgU3RyaW5nW10gY29udHJpYnV0aW9uTmFtZXMpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICAvLyBUdXNjYW55IHNwZWNpZmljIGNvZGUgd2hpY2ggc3RhcnRzIHRoZSBjb250cmlidXRpb24ocykgaG9sZGluZyB0aGUgdGVzdA0KLSAgICAgICAgICAgIFByb3BlcnRpZXMgcHMgPSBuZXcgUHJvcGVydGllcygpOw0KLSAgICAgICAgICAgIHBzLnNldFByb3BlcnR5KCJkZWZhdWx0U2NoZW1lIiwgInZtIik7DQotICAgICAgICAgICAgcHMuc2V0UHJvcGVydHkoIm9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5yaS5KQVhXU0JpbmRpbmdQcm92aWRlckZhY3RvcnkuZGVmYXVsdFBvcnQiLCAiODA4MCIpOw0KLSAgICAgICAgICAgIGxhdW5jaGVyID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UocHMpOw0KLSAgICAgICAgICAgIG5vZGUgPSBsYXVuY2hlci5jcmVhdGVOb2RlKCJkZWZhdWx0Iik7DQotDQotLy8gICAgICAgICAgICBDb250cmlidXRpb25bXSBjb250cmlidXRpb25zID0gbmV3IENvbnRyaWJ1dGlvbltjb250cmlidXRpb25OYW1lcy5sZW5ndGhdOw0KLSAgICAgICAgICAgIFN0cmluZ1tdIGNvbnRyaWJ1dGlvblVSSXMgPSBnZXRDb250cmlidXRpb25VUklzKGNvbnRyaWJ1dGlvbkxvY2F0aW9uKTsNCi0vLyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykgew0KLS8vICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbnNbaV0gPSBuZXcgQ29udHJpYnV0aW9uKGNvbnRyaWJ1dGlvbk5hbWVzW2ldLCBjb250cmlidXRpb25VUklzW2ldKTsNCi0vLyAgICAgICAgICAgIH0gLy8gZW5kIGZvcg0KLSAgICAgICAgICAgIA0KLSAgICAgICAgICAgIGZvciAoaW50IGk9Y29udHJpYnV0aW9uVVJJcy5sZW5ndGgtMTsgaSA+IC0xOyBpLS0pIHsNCi0gICAgICAgICAgICAgICAgbm9kZS5pbnN0YWxsQ29udHJpYnV0aW9uKGNvbnRyaWJ1dGlvbk5hbWVzW2ldLCBjb250cmlidXRpb25VUklzW2ldLCBudWxsLCBudWxsLCBmYWxzZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIA0KLSAgICAgICAgICAgIG5vZGUuYWRkVG9Eb21haW5MZXZlbENvbXBvc2l0ZShjb250cmlidXRpb25OYW1lc1swXSArICIvIiArIHRlc3RDb25maWd1cmF0aW9uLmdldENvbXBvc2l0ZSgpKTsNCi0NCi0vLyAgICAgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5jcmVhdGVOb2RlKHRlc3RDb25maWd1cmF0aW9uLmdldENvbXBvc2l0ZSgpLCBjb250cmlidXRpb25VUklzKTsNCi0gICAgICAgICAgICAvLyBTdGFydCB0aGUgbm9kZQ0KLS8vICAgICAgICAgICAgbm9kZS5zdGFydCgpOw0KLSAgICAgICAgICAgIA0KLSAgICAgICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgDQotICAgICAgICAgICAgLy8gcHJpbnQgb3V0IHRoZSBjb21wb3NpdGVzIHRoYXQgaGF2ZSBiZWVuIHJlYWQgaW4gc3VjY2VzcyBjYXNlcw0KLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigoKE5vZGVJbXBsKW5vZGUpLmR1bXBEb21haW5Db21wb3NpdGUoKSk7DQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlLmdldE1lc3NhZ2UoKSk7DQotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgICAgICANCi0gICAgICAgICAgICB0aHJvdyBlOw0KLSAgICAgICAgfSAvLyBlbmQgdHJ5DQotDQotICAgICAgICByZXR1cm4gdHJ1ZTsNCi0gICAgfSAvLyBlbmQgbWV0aG9kIHN0YXJ0Q29udHJpYnV0aW9uDQotDQotICAgIC8qKg0KLSAgICAgKiBHZXRzIHRoZSBsb2NhdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9ucyBhcyBVUklzDQotICAgICAqIEBwYXJhbSBjb250cmlidXRpb25Mb2NhdGlvbiAtIGEgbG9jYXRpb24gcGF0dGVybiBVUkksIHdoaWNoIGNvbnRhaW5zIG9uZSBvciBtb3JlICIlMSINCi0gICAgICogc3Vic3RyaW5ncywgd2hpY2ggYXJlIHN1YnN0aXR1dGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNvbnRyaWJ1dGlvbiB0byBnZXQgdGhlIFVSSSBvZg0KLSAgICAgKiB0aGUgY29udHJpYnV0aW9uDQotICAgICAqIEByZXR1cm4gdGhlIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbnMgYXMgYW4gYXJyYXkgb2YgU3RyaW5ncw0KLSAgICAgKi8NCi0gICAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldENvbnRyaWJ1dGlvblVSSXMoU3RyaW5nIGNvbnRyaWJ1dGlvbkxvY2F0aW9uKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgICAgIFN0cmluZ1tdIGxvY2F0aW9uczsNCi0gICAgICAgIGxvY2F0aW9ucyA9IHRlc3RDb25maWd1cmF0aW9uLmdldENvbnRyaWJ1dGlvbk5hbWVzKCk7DQotDQotICAgICAgICBpZiAobG9jYXRpb25zICE9IG51bGwgJiYgY29udHJpYnV0aW9uTG9jYXRpb24gIT0gbnVsbCkgew0KLQ0KLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7DQotICAgICAgICAgICAgICAgIFN0cmluZyBhTG9jYXRpb24gPSBjb250cmlidXRpb25Mb2NhdGlvbi5yZXBsYWNlQWxsKCIlMSIsIGxvY2F0aW9uc1tpXSk7DQotICAgICAgICAgICAgICAgIC8vIExvb2tzIGxpa2UgYnVncyBpbiB0aGUgb2FzaXMgY29kZSB0aGF0IHNvbWV0aW1lcyBzdGlsbCB1c2VzIGphcnMgZm9yIHNvbWUNCi0gICAgICAgICAgICAgICAgaWYgKGFMb2NhdGlvbi5lbmRzV2l0aCgiX0phdmEtMS4wLnppcCIpICYmICFhTG9jYXRpb24uZW5kc1dpdGgoIkFTTV84MDA1X0phdmEtMS4wLnppcCIpKSB7DQotICAgICAgICAgICAgICAgICAgICBhTG9jYXRpb24gPSBhTG9jYXRpb24uc3Vic3RyaW5nKDAsIGFMb2NhdGlvbi5sZW5ndGgoKS0zKSArICJqYXIiOyAgICAgICAgICAgICAgICAJDQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKCEobmV3IEZpbGUoYUxvY2F0aW9uKSkuZXhpc3RzKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgIGFMb2NhdGlvbiA9IGFMb2NhdGlvbi5yZXBsYWNlKCIuemlwIiwgIi5qYXIiKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsb2NhdGlvbnNbaV0gPSBhTG9jYXRpb247DQotICAgICAgICAgICAgfSAvLyBlbmQgZm9yICAgIAkgIAkNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKGxvY2F0aW9ucyA9PSBudWxsKSB7DQotICAgICAgICAgICAgICAgIC8vIE5vIGNvbnRyaWJ1dGlvbiBzcGVjaWZpZWQgLSB0aHJvdyBhbiBFeGNlcHRpb24NCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIHN0YXJ0IFNDQSBydW50aW1lIC0gbm8gY29udHJpYnV0aW9uIHN1cHBsaWVkIC0gZXJyb3IiKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAvLyBObyBjb250cmlidXRpb24gbG9jYXRpb24gc3VwcGxpZWQgLSB0aHJvdyBhbiBFeGNlcHRpb24NCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIHN0YXJ0IFNDQSBydW50aW1lIC0gbm8gY29udHJpYnV0aW9uIGxvY2F0aW9uIHN1cHBsaWVkIC0gZXJyb3IiKTsNCi0gICAgICAgICAgICB9IC8vIGVuZCBpZiANCi0gICAgICAgIH0gLy8gZW5kIGlmDQotDQotICAgICAgICByZXR1cm4gbG9jYXRpb25zOw0KLSAgICB9IC8vIGVuZCBnZXRDb250cmlidXRpb25VUkkNCi0NCi0gICAgcHVibGljIHZvaWQgc3RvcENvbnRyaWJ1dGlvbigpIHsNCi0gICAgICAgIGlmIChub2RlICE9IG51bGwpIHsNCi0gICAgICAgICAgICBub2RlLnN0b3AoKTsNCi0gICAgICAgIH0gLy8gZW5kIGlmDQotICAgICAgICBpZiAobGF1bmNoZXIgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGxhdW5jaGVyLnN0b3AoKTsNCi0gICAgICAgIH0gLy8gZW5kIGlmDQotICAgIH0gLy8gZW5kIG1ldGhvZCBzdG9wQ29udHJpYnV0aW9uDQotDQotICAgIHB1YmxpYyB2b2lkIGNoZWNrRXJyb3IoU3RyaW5nIHRlc3ROYW1lLCBUaHJvd2FibGUgZXgpIHRocm93cyBUaHJvd2FibGUgeyANCi0gICAgICAgICAgICAgIA0KLSAgICAgICAgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZSA9IGV4cGVjdGVkRXJyb3JNZXNzYWdlcy5nZXRQcm9wZXJ0eSh0ZXN0TmFtZSk7DQotICAgICAgICBTdHJpbmcgcmVjZWl2ZWRNZXNzYWdlID0gZXguZ2V0TWVzc2FnZSgpOw0KLSAgICAgICAgaWYgKGV4IGluc3RhbmNlb2YgVmFsaWRhdGlvbkV4Y2VwdGlvbiAmJiBleC5nZXRDYXVzZSgpID09IG51bGwpIHsNCi0gICAgICAgICAgICByZWNlaXZlZE1lc3NhZ2UgPSAib3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246ICIgKyByZWNlaXZlZE1lc3NhZ2U7DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIGlmIChleHBlY3RlZE1lc3NhZ2UgPT0gbnVsbCl7DQotICAgICAgICAgICAgd3JpdGVNaXNzaW5nTWVzc2FnZSh0ZXN0TmFtZSwgZXgpOw0KLSAgICAgICAgICAgIGZhaWwoIk51bGwgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSBmb3IgdGVzdCAiICsgdGVzdE5hbWUgKyANCi0gICAgICAgICAgICAgICAgICJQbGVhc2UgYWRkIG1lc3NhZ2UgdG8gb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIik7DQotICAgICAgICB9IC8vIGVuZCBpZg0KLSAgICAgICAgDQotICAgICAgICBpZiAocmVjZWl2ZWRNZXNzYWdlID09IG51bGwpew0KLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOw0KLSAgICAgICAgICAgIGZhaWwoIk51bGwgcmVjZWl2ZWQgZXJyb3IgbWVzc2FnZSBmb3IgdGVzdCAiICsgdGVzdE5hbWUpOw0KLSAgICAgICAgfSAvLyBlbmQgaWYNCi0NCi0gICAgICAgIGlmIChleHBlY3RlZE1lc3NhZ2Uuc3RhcnRzV2l0aCgiKiIpKSB7DQotICAgICAgICAgICAgLy8gYWxsb3cgdXNpbmcgKiB0byBpZ25vcmUgYSBtZXNzYWdlIGNvbXBhcmlzb24NCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIC8vIERlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgbWVzc2FnZSBoYXMgdmFyaWFibGUgcGFydHMgd2l0aGluIGl0DQotICAgICAgICAvLyBtYXJrZWQgd2l0aCB0aGUgY2hhcmFjdGVycyAqKiouIEhlcmUgd2UgdG9rZW5pemUgdGhlIGVwZWN0ZWQgc3RyaW5nIA0KLSAgICAgICAgLy8gYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIGluZGl2aWR1YWwgcGFydHMgYXJlIHByZXNlbnQgaW4gdGhlIHJlc3VsdHMgc3RyaW5nDQotICAgICAgICBTdHJpbmcgZXhwZWN0ZWRNZXNzYWdlUGFydHNbXSA9IGV4cGVjdGVkTWVzc2FnZS5zcGxpdCgiXFwqXFwqXFwqIik7DQotICAgICAgICANCi0gICAgICAgIGlmIChleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGggPiAxKXsNCi0gICAgICAgICAgICBpbnQgZm91bmRQYXJ0cyA9IDA7DQotICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGV4cGVjdGVkTWVzc2FnZVBhcnRzLmxlbmd0aDsgaSsrKXsNCi0gICAgICAgICAgICAgICAgaWYgKHJlY2VpdmVkTWVzc2FnZS5pbmRleE9mKGV4cGVjdGVkTWVzc2FnZVBhcnRzW2ldKSA+IC0xICl7DQotICAgICAgICAgICAgICAgICAgICBmb3VuZFBhcnRzKys7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgDQotICAgICAgICAgICAgaWYgKGZvdW5kUGFydHMgPT0gZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoKXsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0NCi0gICAgICAgIA0KLSAgICAgICAgLy8gRGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2UgaXMgdmFyaWFibGUgKGVnIGNvbnRhaW5zIGFic29sdXRlIGZpbGVuYW1lcykgDQotICAgICAgICAvLyBhbmQgd2hlcmUgdGhlIG9ubHkgcmVsZXZhbnQgcGFydCBpcyB0aGUgc3RhcnQgb2YgdGhlIG1lc3NhZ2UgLSBpbiB0aGlzIGNhc2UgdGhlIGV4cGVjdGVkDQotICAgICAgICAvLyBtZXNzYWdlIG9ubHkgY29udGFpbnMgdGhlIHN0ZW0gc2VjdGlvbiB3aGljaCBpcyB1bmNoYW5naW5nLi4uDQotICAgICAgICBpZiggcmVjZWl2ZWRNZXNzYWdlLmxlbmd0aCgpID4gZXhwZWN0ZWRNZXNzYWdlLmxlbmd0aCgpICkgew0KLSAgICAgICAgICAgIC8vIFRydW5jYXRlIHRoZSByZWNlaXZlZCBtZXNzYWdlIHRvIHRoZSBsZW5ndGggb2YgdGhlIGV4cGVjdGVkIG1lc3NhZ2UNCi0gICAgICAgICAgICByZWNlaXZlZE1lc3NhZ2UgPSByZWNlaXZlZE1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGV4cGVjdGVkTWVzc2FnZS5sZW5ndGgoKSApOw0KLSAgICAgICAgfSAvLyBlbmQgaWYNCi0NCi0gICAgICAgIGlmICghZXhwZWN0ZWRNZXNzYWdlLmVxdWFscyhyZWNlaXZlZE1lc3NhZ2UpKSB7DQotICAgICAgICAgICAgd3JpdGVJbmNvcnJlY3RNZXNzYWdlKHRlc3ROYW1lLCBleHBlY3RlZE1lc3NhZ2UsIHJlY2VpdmVkTWVzc2FnZSk7DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIGFzc2VydEVxdWFscyggZXhwZWN0ZWRNZXNzYWdlLCByZWNlaXZlZE1lc3NhZ2UgKTsNCi0gICAgICAgIA0KLSAgICAgICAgcmV0dXJuOw0KLSAgICAgICANCi0gICAgfQ0KLQ0KLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZU1pc3NpbmdNZXNzYWdlKFN0cmluZyB0ZXN0TmFtZSwgVGhyb3dhYmxlIGV4KSB7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIG91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigidGFyZ2V0L09UZXN0TWlzc2luZ01zZ3MudHh0IiwgdHJ1ZSkpOw0KLSAgICAgICAgICAgIG91dC53cml0ZSh0ZXN0TmFtZSArICI9KiIpOw0KLSAgICAgICAgICAgIG91dC5uZXdMaW5lKCk7DQotICAgICAgICAgICAgb3V0LmNsb3NlKCk7DQotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQotICAgICAgICB9IA0KLSAgICB9DQotDQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlSW5jb3JyZWN0TWVzc2FnZShTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIHJlY2VpdmVkKSB7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIG91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigidGFyZ2V0L09UZXN0SW5jb3JyZWN0TXNncy50eHQiLCB0cnVlKSk7DQotICAgICAgICAgICAgb3V0LndyaXRlKHRlc3ROYW1lKTsgb3V0Lm5ld0xpbmUoKTsNCi0gICAgICAgICAgICBvdXQud3JpdGUoIiAgICAiICsgZXhwZWN0ZWQpOyBvdXQubmV3TGluZSgpOw0KLSAgICAgICAgICAgIG91dC53cml0ZSgiICAgICIgKyByZWNlaXZlZCk7IG91dC5uZXdMaW5lKCk7DQotICAgICAgICAgICAgb3V0LmNsb3NlKCk7DQotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQotICAgICAgICB9IA0KLSAgICB9DQotDQotfSAvLyBlbmQgY2xhc3MgVHVzY2FueVJ1bnRpbWVCcmlkZ2UNCmRpZmYgLS1naXQgYS9jb21wbGlhbmNlLXRlc3RzL2Fzc2VtYmx5L3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcyBiL2NvbXBsaWFuY2UtdGVzdHMvYXNzZW1ibHkvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDhjYzI3Li4wMDAwMDAwCi0tLSBhL2NvbXBsaWFuY2UtdGVzdHMvYXNzZW1ibHkvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotIyANCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotIyANCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KLQ0KLSMgT0FTSVMgU0NBIEFzc2VtYmx5IHRlc3QgcHJvcGVydGllcw0KLSMgVGhlIGltcGxlbWVudGF0aW9uIHR5cGUgdG8gdXNlIGZvciBBc3NlbWJseSB0ZXN0IHN1aXRlDQotIyBvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5Lmxhbmc9QlBFTA0KLW9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1KYXZhDQotDQotIyBUaGUgY2xhc3MgdG8gdXNlIGFzIHRoZSBSdW50aW1lIEJyaWRnZSBmb3IgdGhlIFNDQSBydW50aW1lIHVuZGVyIHRlc3QNCi0jb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlPU0dpUnVudGltZUJyaWRnZQ0KLW9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkucnVudGltZV9icmlkZ2U9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdC5UdXNjYW55UnVudGltZUJyaWRnZQ0KLQ0KLSMgVGhlIGxvY2F0aW9uIG9mIHRoZSBjb250cmlidXRpb25zIGZvciB0aGUgdGVzdCBzdWl0ZQ0KLSMgJTEgcmVwcmVzZW50cyB0aGUgcGxhY2VtZW50IG9mIHRoZSBuYW1lIG9mIGVhY2ggY29udHJpYnV0aW9uIGludG8gdGhlIGxvY2F0aW9uIFVSSQ0KLW9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkuY29udHJpYnV0aW9uLmxvY2F0aW9uPXRhcmdldC9vYXNpcy1jb250cmlidXRpb25zLyUxLnppcA0KLQ0KZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvYXNzZW1ibHkvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIGIvY29tcGxpYW5jZS10ZXN0cy9hc3NlbWJseS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyYThmZTQuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9hc3NlbWJseS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0jIA0KLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0jIA0KLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotIyB1bmRlciB0aGUgTGljZW5zZS4gDQotDQotQVNNXzQwMDI9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIFtBU000MDAwMyxBU002MDAwMyxKQ0E5MDA0NV0gRHVwbGljYXRlIGltcGxlbWVudGF0aW9uIHNlcnZpY2UgbmFtZTogQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDEgU2VydmljZSA9IFNlcnZpY2UxDQotQVNNXzQwMDM9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIFtBU000MDAwNCxBU001MDAwNyxBU002MDAwNl0gRHVwbGljYXRlIGltcGxlbWVudGF0aW9uIHJlZmVyZW5jZSBuYW1lOiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBSZWZlcmVuY2UgPSBSZWZlcmVuY2UxDQotQVNNXzQwMDQ9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIFtBU000MDAwNSxBU002MDAxNF0gRHVwbGljYXRlIGltcGxlbWVudGF0aW9uIHByb3BlcnR5IG5hbWU6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFByb3BlcnR5ID0gcHJvcGVydHlOYW1lDQotQVNNXzQwMDc9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb246IFtBU000MDAxMCxBU002MDA0MF0gRXJyb3I6IHByb3BlcnR5IGhhcyBib3RoIEB0eXBlIGFuZCBAZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWVzIC0gcHJvcGVydHlOYW1lDQotQVNNXzQwMDg9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIFtBU000MDAxMSxBU002MDAzNF0gTm8gdmFsdWUgY29uZmlndXJlZCBvbiBhIG11c3RTdXBwbHkgcHJvcGVydHk6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFByb3BlcnR5ID0gcHJvcGVydHlOYW1lDQotQVNNXzUwMDQ9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDbGllbnRdIC0gW0FTTTUwMDIyXSBUb28gbWFueSB0YXJnZXRzIG9uIHJlZmVyZW5jZTogcmVmZXJlbmNlMQ0KLUFTTV81MDA1PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0X0FTTV81MDA1Q29tcG9uZW50MV0gLSBbQVNNNDAwMDMsQVNNNjAwMDMsSkNBOTAwNDVdIER1cGxpY2F0ZSBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlIG5hbWU6IENvbXBvbmVudCA9IFRlc3RfQVNNXzUwMDVDb21wb25lbnQxIFNlcnZpY2UgPSBTZXJ2aWNlMQ0KLUFTTV81MDA2PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBDb21wb25lbnQgdHlwZSBzZXJ2aWNlIG5vdCBmb3VuZCBmb3IgY29tcG9uZW50IHNlcnZpY2UgKG1pc3NpbmcgQFJlbW90YWJsZSBhbm5vdGF0aW9uPyk6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFNlcnZpY2UgPSBJbnZhbGlkTmFtZQ0KLUFTTV81MDA3PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0X0FTTV81MDA3Q29tcG9uZW50MV0gLSBbQVNNNDAwMDQsQVNNNTAwMDcsQVNNNjAwMDZdIER1cGxpY2F0ZSBpbXBsZW1lbnRhdGlvbiByZWZlcmVuY2UgbmFtZTogQ29tcG9uZW50ID0gVGVzdF9BU01fNTAwN0NvbXBvbmVudDEgUmVmZXJlbmNlID0gUmVmZXJlbmNlMQ0KLUFTTV81MDA4PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNTAwMDhdIENvbXBvbmVudCB0eXBlIHJlZmVyZW5jZSBub3QgZm91bmQgZm9yIGNvbXBvbmVudCByZWZlcmVuY2U6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFJlZmVyZW5jZSA9IEludmFsaWROYW1lDQotQVNNXzUwMDk9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9XSAtIFtBU001MDAwMV0gRHVwbGljYXRlIGNvbXBvbmVudCBuYW1lOiBDb21wb3NpdGUgPSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MQ0KLUFTTV81MDEwPW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNTAwMDQsSkNBMzAwMDIsSkNJODAwMDFdIENvbXBvbmVudCBzZXJ2aWNlIGludGVyZmFjZSBpbmNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlIGludGVyZmFjZTogQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDEgU2VydmljZSA9IFNlcnZpY2UxDQotQVNNXzUwMTQ9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIFtBU001MDAwOV0gQ29tcG9uZW50IHJlZmVyZW5jZSBtdWx0aXBsaWNpdHkgaW5jb21wYXRpYmxlIHdpdGggcmVmZXJlbmNlIG11bHRpcGxpY2l0eTogQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDEgUmVmZXJlbmNlID0gUmVmZXJlbmNlMQ0KLUFTTV81MDIzPW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTExLCBDb21wb25lbnQ6IENvbXBvc2l0ZTExQ29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTQsIENvbXBvbmVudDogQ29tcG9zaXRlNENvbXBvbmVudDFdIC0gW0FTTTUwMDIyXSBUb28gbWFueSB0YXJnZXRzIG9uIHJlZmVyZW5jZTogcmVmZXJlbmNlMQ0KLUFTTV81MDI0PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgUmVmZXJlbmNlOiBSZWZlcmVuY2UxXSAtIFtBU001MDAyNl0gQ29tcG9zaXRlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9IENvbXBvbmVudCBUZXN0Q29tcG9uZW50MSBSZWZlcmVuY2UgUmVmZXJlbmNlMSBtdXN0IG5vdCBzcGVjaWZ5IGVuZHBvaW50cyB1c2luZyBib3RoIHRhcmdldCBhdHRyaWJ1dGUgYW5kIHdpdGggYSBiaW5kaW5nIGNoaWxkIGVsZW1lbnQNCi1BU01fNTAyNz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gRHVwbGljYXRlIGNvbXBvbmVudCBwcm9wZXJ0eSBuYW1lOiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBQcm9wZXJ0eSA9IHNlcnZpY2VOYW1lDQotQVNNXzUwMjg9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIFtBU001MDAzMV0gUHJvcGVydHkgbm90IGZvdW5kIGZvciBjb21wb25lbnQgcHJvcGVydHk6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFByb3BlcnR5ID0gcmFuZG9tTmFtZQ0KLUFTTV81MDI5PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNTAwMzJdIFRoZSBwcm9wZXJ0eSBjb21wb25lbnQgVGVzdENvbXBvbmVudDEgcHJvcGVydHkgY29tcGxleFR5cGUgaGFzIG1hbnkgdmFsdWVzIGJ1dCBpdHMgIm1hbnkiIGF0dHJpYnV0ZSBpcyBzZXQgdG8gZmFsc2UNCi1BU01fNTAzMD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQVNNXzUwMzAsIEFydGlmYWN0OiBUZXN0X0FTTV81MDMwLmNvbXBvc2l0ZV0gLSBBU001MDAzMzogdmFsdWUgYXR0cmlidXRlIGV4aXN0cyBmb3IgdGhlIHByb3BlcnR5IGVsZW1lbnQNCi1BU01fNTAzNT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjogW0FTTTQwMDEwLEFTTTYwMDQwXSBFcnJvcjogcHJvcGVydHkgaGFzIGJvdGggQHR5cGUgYW5kIEBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZXMgLSBjb21wbGV4VHlwZQ0KLUFTTV81MDM2PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV81MDM2Q29tcG9uZW50MV0gLSBbQVNNXzUwMzZdIFRoZSBwcm9wZXJ0eSBjb21wb25lbnQgVEVTVF9BU01fNTAzNkNvbXBvbmVudDEgcHJvcGVydHkgY29tcGxleFR5cGUgaGFzIFhTRCB0eXBlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31Db21wbGV4VHlwZTIgd2hpbGUgaXRzIGNvbXBvbmVudCB0eXBlIHByb3BlcnR5IGhhcyB0aGUgWFNEIHR5cGUge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfUNvbXBsZXhUeXBlMQ0KLUFTTV81MDM3PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV81MDM3Q29tcG9uZW50MV0gLSBbQVNNNTAwMzFdIFByb3BlcnR5IG5vdCBmb3VuZCBmb3IgY29tcG9uZW50IHByb3BlcnR5OiBDb21wb25lbnQgPSBURVNUX0FTTV81MDM3Q29tcG9uZW50MSBQcm9wZXJ0eSA9IGJvZ3VzTmFtZQ0KLUFTTV81MDM4PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV81MDM4Q29tcG9uZW50MV0gLSBbQVNNNTAwMjddIFRoZSBwcm9wZXJ0eSBzZXJ2aWNlRGF0YTEgb24gY29tcG9uZW50IFRFU1RfQVNNXzUwMzhDb21wb25lbnQxIGhhcyBhIHZhbHVlIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBzaW1wbGUgdHlwZSB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9ZmxvYXQgd2l0aCB3aGljaCBpdCBpcyBhc3NvY2lhdGVkDQotQVNNXzUwMzk9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfQVNNXzUwMzlDb21wb25lbnQxXSAtIFtBU001MDAzOF0gVGhlIHByb3BlcnR5IGNvbXBsZXhUeXBlIG9uIGNvbXBvbmVudCBURVNUX0FTTV81MDM5Q29tcG9uZW50MSBoYXMgYSB2YWx1ZSB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgY29tcGxleCB0eXBlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31Db21wbGV4VHlwZTEgd2l0aCB3aGljaCBpdCBpcyBhc3NvY2lhdGVkLiBWYWxpZGF0aW9uIHJlcG9ydGVkIGN2Yy1jb21wbGV4LXR5cGUuMi40LmQ6IEludmFsaWQgY29udGVudCB3YXMgZm91bmQgc3RhcnRpbmcgd2l0aCBlbGVtZW50ICd0ZXN0OnRoaXJkRGF0YScuIE5vIGNoaWxkIGVsZW1lbnQgaXMgZXhwZWN0ZWQgYXQgdGhpcyBwb2ludC4NCi1BU01fNTA0MD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9BU01fNTA0MENvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGU3NF0gLSBbQVNNNTAwNDJdIENvbXBvc2l0ZSByZWZlcmVuY2UgcHJvbW90ZXMgY29tcG9uZW50IHJlZmVyZW5jZSB3aXRoIDEuLjEgbXVsdGlwbGljaXR5IGFuZCBub25PdmVycmlkYWJsZSBmbGFnIHNldCB0cnVlOiBDb21wb3NpdGUgPSBUZXN0Q29tcG9zaXRlNzQuY29tcG9zaXRlIENvbXBvc2l0ZSByZWZlcmVuY2UgPSBSZWZlcmVuY2UxIENvbXBvbmVudCByZWZlcmVuY2UgPSBSZWZlcmVuY2UxDQotQVNNXzYwMDE9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb250cmlidXRpb246IEFTTV82MDAxLCBBcnRpZmFjdDogVGVzdER1cGxpY2F0ZTEuY29tcG9zaXRlXSAtIFtBU01fNjAwMV0gTW9yZSB0aGFuIG9uZSBjb21wb3NpdGUgd2l0aCB0aGUgc2FtZSBuYW1lIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31EdXBsaWNhdGVDb21wb3NpdGUgZm91bmQgaW4gY29udHJpYnV0aW9uDQotQVNNXzYwMDI9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIFtBU000MDAwMyxBU002MDAwMyxKQ0E5MDA0NV0gRHVwbGljYXRlIGltcGxlbWVudGF0aW9uIHNlcnZpY2UgbmFtZTogQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDEgU2VydmljZSA9IFNlcnZpY2UxDQotQVNNXzYwMDM9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlMTddIC0gW0FTTTYwMDA0LEFTTTYwMDMyXSBQcm9tb3RlZCBjb21wb25lbnQgc2VydmljZSBub3QgZm91bmQ6IENvbXBvc2l0ZSA9IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlMTcgU2VydmljZSA9IFNwdXJpb3VzQ29tcG9uZW50L1NwdXJpb3VzU2VydmljZQ0KLUFTTV82MDA1PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNDAwMDQsQVNNNTAwMDcsQVNNNjAwMDZdIER1cGxpY2F0ZSBpbXBsZW1lbnRhdGlvbiByZWZlcmVuY2UgbmFtZTogQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDEgUmVmZXJlbmNlID0gUmVmZXJlbmNlMQ0KLUFTTV82MDA2PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTIwXSAtIFtBU002MDAwN10gUHJvbW90ZWQgY29tcG9uZW50IHJlZmVyZW5jZSBub3QgZm91bmQ6IENvbXBvc2l0ZSA9IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlMjAgUmVmZXJlbmNlID0gQ29tcG9zaXRlMjBDb21wb25lbnR6L1JlZmVyZW5jZTENCi1BU01fNjAwOD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9BU01fNjAwOENvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGUyMl0gLSBbQVNNNjAwMDgsQVNNNjAwMTNdIEludGVyZmFjZSBvZiBjb21wb3NpdGUgcmVmZXJlbmNlIFJlZmVyZW5jZTEgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGludGVyZmFjZSBkZWNsYXJlZCBieSBwcm9tb3RlZCBjb21wb25lbnQgcmVmZXJlbmNlLiBPcGVyYXRpb24gb3BlcmF0aW9uMiBub3QgZm91bmQgb24gdGFyZ2V0DQotQVNNXzYwMTI9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfQVNNXzYwMTJUZXN0Q29tcG9uZW50MV0gLSBbQVNNNDAwMDUsQVNNNjAwMTRdIER1cGxpY2F0ZSBpbXBsZW1lbnRhdGlvbiBwcm9wZXJ0eSBuYW1lOiBDb21wb25lbnQgPSBURVNUX0FTTV82MDEyVGVzdENvbXBvbmVudDEgUHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUNCi1BU01fNjAxNj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGUzMCwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgUmVmZXJlbmNlOiBSZWZlcmVuY2UxXSAtIFtBU002MDAyOF0gTm8gdGFyZ2V0IHNlcnZpY2VzIGZvdW5kIGZvciB0aGUgY29tcG9uZW50IHJlZmVyZW5jZSB0byBiZSBhdXRvd2lyZWQ6IFJlZmVyZW5jZTENCi1BU01fNjAyMD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDEsIFJlZmVyZW5jZTogUmVmZXJlbmNlMV0gLSBbQVNNNjAwMjhdIE5vIHRhcmdldCBzZXJ2aWNlcyBmb3VuZCBmb3IgdGhlIGNvbXBvbmVudCByZWZlcmVuY2UgdG8gYmUgYXV0b3dpcmVkOiBSZWZlcmVuY2UxDQotQVNNXzYwMjE9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfQVNNXzYwMjFUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTMxXSAtIFtBU002MDAwNCxBU002MDAzMl0gUHJvbW90ZWQgY29tcG9uZW50IHNlcnZpY2Ugbm90IGZvdW5kOiBDb21wb3NpdGUgPSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTMxIFNlcnZpY2UgPSBOb3RfQV9VUklfb2ZfYV9Db21wb25lbnQNCi1BU01fNjAyMj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGUzMiwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNjAwMzNdIE5vIHRhcmdldHMgZm9yIHJlZmVyZW5jZTogQ29tcG9zaXRlID0ge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGUzMiBSZWZlcmVuY2UgPSBSZWZlcmVuY2UxDQotQVNNXzYwMjM9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIFtBU000MDAxMSxBU002MDAzNF0gTm8gdmFsdWUgY29uZmlndXJlZCBvbiBhIG11c3RTdXBwbHkgcHJvcGVydHk6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFByb3BlcnR5ID0gc2ltcGxlVHlwZQ0KLUFTTV82MDI0PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNjAwMzAsSkNJNTAwMDQsSkNJODAwMDFdIENvbXBvbmVudCBpbXBsZW1lbnRhdGlvbiBub3QgcmVzb2x2ZWQ6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFVyaSA9IFRlc3RDb21wb25lbnQxDQotQVNNXzYwMjU9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9XSAtIFtBU001MDAwMV0gRHVwbGljYXRlIGNvbXBvbmVudCBuYW1lOiBDb21wb3NpdGUgPSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MQ0KLUFTTV82MDI4PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOiBbQVNNNDAwMTAsQVNNNjAwNDBdIEVycm9yOiBwcm9wZXJ0eSBoYXMgYm90aCBAdHlwZSBhbmQgQGVsZW1lbnQgYXR0cmlidXRlIHZhbHVlcyAtIEludmFsaWRQcm9wZXJ0eQ0KLUFTTV82MDI5PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBbQVNNNjAwNDFdIEVycm9yOiBDb21wb3NpdGUge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfQVNNXzYwMjkgY2FuIG9ubHkgaW5jbHVkZSBhbm90aGVyIGNvbXBvc2l0ZSB3aXRoIHRoZSBpZGVudGljYWwgQGxvY2FsIGF0dHJpYnV0ZSB2YWx1ZQ0KLUFTTV82MDMwPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBbQVNNNjAwNDJdIEVycm9yOiBDb21wb3NpdGUge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfUludmFsaWRfY29tcG9zaXRlX25hbWUgaXMgbm90IGEgdmFsaWQgY29tcG9zaXRlIHdpdGhpbiB0aGUgZG9tYWluDQotQVNNXzYwMzE9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlMzldIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1zdXNwZW5kc1RyYW5zYWN0aW9uIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfXByb3BhZ2F0ZXNUcmFuc2FjdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlDQotQVNNXzYwMzI9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlNDBdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1zdXNwZW5kc1RyYW5zYWN0aW9uIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfXByb3BhZ2F0ZXNUcmFuc2FjdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlDQotQVNNXzYwMzM9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlNDFdIC0gW0FTTTYwMDExXSBDb21wb3NpdGUgcmVmZXJlbmNlIG11bHRpcGxpY2l0eSBpbmNvbXBhdGlibGUgd2l0aCBjb21wb25lbnQgcmVmZXJlbmNlIG11bHRpcGxpY2l0eTogQ29tcG9zaXRlID0gVGVzdENvbXBvc2l0ZTQxLmNvbXBvc2l0ZSBDb21wb3NpdGUgcmVmZXJlbmNlID0gUmVmZXJlbmNlMSBDb21wb25lbnQgcmVmZXJlbmNlID0gUmVmZXJlbmNlMQ0KLUFTTV82MDM2PVRlc3Qgc2VydmljZSBnb3QgYW4gZXhjZXB0aW9uIGR1cmluZyBleGVjdXRpb246IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uIFVuYWJsZSB0byBiaW5kIFtdIC0gTm8gZW5kcG9pbnRzIGZvdW5kIGluIHRoZSBkb21haW4gdGhhdCBtYXRjaCB0aGUgcmVmZXJlbmNlIChAKioqKUVuZHBvaW50UmVmZXJlbmNlOiAgVVJJID0gVGVzdENsaWVudCNyZWZlcmVuY2UocmVmZXJlbmNlMSkgV0lSRURfVEFSR0VUX05PVF9GT1VORCBUYXJnZXQgPSAoQCoqKilFbmRwb2ludDogIFVSSSA9IFRFU1RfQVNNXzYwMzZDb21wb25lbnQxI3NlcnZpY2UoU2VydmljZVopIFtVbnJlc29sdmVkXQ0KLUFTTV82MDM5PVRlc3Qgc2VydmljZSBnb3QgYW4gZXhjZXB0aW9uIGR1cmluZyBleGVjdXRpb246IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uIFVuYWJsZSB0byBiaW5kIFtdIC0gTm8gZW5kcG9pbnRzIGZvdW5kIGluIHRoZSBkb21haW4gdGhhdCBtYXRjaCB0aGUgcmVmZXJlbmNlIChAKioqKUVuZHBvaW50UmVmZXJlbmNlOiAgVVJJID0gVGVzdENsaWVudCNyZWZlcmVuY2UocmVmZXJlbmNlMSkgV0lSRURfVEFSR0VUX05PVF9GT1VORCBUYXJnZXQgPSAoQCoqKilFbmRwb2ludDogIFVSSSA9IFRFU1RfQVNNXzYwMzlDb21wb25lbnQxI3NlcnZpY2UtYmluZGluZyhTZXJ2aWNlMS9oYXJyeSkgW1VucmVzb2x2ZWRdIA0KLUFTTV84MDAxPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk92ZXJsb2FkZWRPcGVyYXRpb25FeGNlcHRpb246IFtKQ0EyMDAwMV0gQ2Fubm90IG92ZXJsb2FkIG9wZXJhdGlvbiBvcGVyYXRpb24xIG9uIG9yZy5vYXNpc29wZW4uc2NhLnRlc3QuU2VydmljZTMgYXMgaXQgaXMgYSBAUmVtb3RhYmxlIGludGVyZmFjZQ0KLUFTTV84MDA0PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludmFsaWRDYWxsYmFja0V4Y2VwdGlvbjogQ2FsbGJhY2sgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5TZXJ2aWNlNkNhbGxiYWNrIG11c3QgYmUgcmVtb3RhYmxlIG9uIHJlbW90YWJsZSBpbnRlcmZhY2Ugb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5TZXJ2aWNlNg0KLUFTTV84MDA1PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludmFsaWRDYWxsYmFja0V4Y2VwdGlvbjogQ2FsbGJhY2tvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2U3Q2FsbGJhY2sgbXVzdCBub3QgYmUgcmVtb3RhYmxlIG9uIGxvY2FsIGludGVyZmFjZSBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2U3DQotQVNNXzgwMDY9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb250cmlidXRpb246IEFTTV84MDA2LCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0FTTV84MDA2XSAtIFRoZSBpbnRlcmZhY2Uud3NkbCBlbGVtZW50IGhhcyBhIGZvcndhcmQgaW50ZXJmYWNlIHdpdGggYSBjYWxsYmFjayBkZWNsYXJlZCBpbiB0aGUgV1NETCB7aHR0cDovL3Rlc3Quc2NhLm9hc2lzb3Blbi5vcmcvfVNlcnZpY2U5Q2FsbGJhY2sgYW5kIGEgY2FsbGJhY2sgaW50ZXJmYWNlIGFsc28gZGVjbGFyZWQgdXNpbmcgdGhlIGNhbGxiYWNrSW50ZXJmYWNlIGF0dHJpYnV0ZSB7aHR0cDovL3Rlc3Quc2NhLm9hc2lzb3Blbi5vcmcvfVNlcnZpY2U4Q2FsbGJhY2sgYnV0IHRoZSBjYWxsYmFjayBpbnRlcmZhY2VzIGFyZSBub3QgZXF1YWwuDQotQVNNXzgwMDc9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQyXSAtIFtBU001MDAwNCxKQ0EzMDAwMixKQ0k4MDAwMV0gQ29tcG9uZW50IHNlcnZpY2UgaW50ZXJmYWNlIGluY29tcGF0aWJsZSB3aXRoIGltcGxlbWVudGF0aW9uIHNlcnZpY2UgaW50ZXJmYWNlOiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MiBTZXJ2aWNlID0gU2VydmljZTENCi1BU01fODAwOD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gW0pDQTMwMDAxLEpDQTMwMDAyLEpDQTMwMDAzLEpDQTkwMDQ2XSBDb21wb25lbnQgcmVmZXJlbmNlIGludGVyZmFjZSBpbmNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiByZWZlcmVuY2UgaW50ZXJmYWNlOiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBSZWZlcmVuY2UgPSBSZWZlcmVuY2UxDQotQVNNXzgwMDk9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfQVNNXzgwMDlDb21wb25lbnQxXSAtIFtKQ0EzMDAwMSxKQ0EzMDAwMixKQ0EzMDAwMyxKQ0E5MDA0Nl0gQ29tcG9uZW50IHJlZmVyZW5jZSBpbnRlcmZhY2UgaW5jb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gcmVmZXJlbmNlIGludGVyZmFjZTogQ29tcG9uZW50ID0gVEVTVF9BU01fODAwOUNvbXBvbmVudDEgUmVmZXJlbmNlID0gUmVmZXJlbmNlMQ0KLUFTTV84MDEwPW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV84MDEwQ29tcG9uZW50MiwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTYzXSAtIEludGVyZmFjZSBvZiBjb21wb3NpdGUgc2VydmljZSBTZXJ2aWNlMSBtdXN0IGJlIHN1YnNldCBvZiB0aGUgaW50ZXJmYWNlIGRlY2xhcmVkIGJ5IHByb21vdGVkIGNvbXBvbmVudCBzZXJ2aWNlLiBDYWxsYmFjayBvcGVyYXRpb24gbm90IGZvdW5kIG9uIHRhcmdldA0KLUFTTV84MDExPW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTYyXSAtIFtBU002MDAwOCxBU002MDAxM10gSW50ZXJmYWNlIG9mIGNvbXBvc2l0ZSByZWZlcmVuY2UgUmVmZXJlbmNlMSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgaW50ZXJmYWNlIGRlY2xhcmVkIGJ5IHByb21vdGVkIGNvbXBvbmVudCByZWZlcmVuY2UuIENhbGxiYWNrIG9wZXJhdGlvbiBub3QgZm91bmQgb24gdGFyZ2V0DQotQVNNXzgwMTI9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfQVNNXzgwMTJDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlNjRdIC0gW0FTTTYwMDA4LEFTTTYwMDEzXSBJbnRlcmZhY2Ugb2YgY29tcG9zaXRlIHJlZmVyZW5jZSBSZWZlcmVuY2UxIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnRlcmZhY2UgZGVjbGFyZWQgYnkgcHJvbW90ZWQgY29tcG9uZW50IHJlZmVyZW5jZS4NCi1BU01fODAxNz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9BU01fODAxN0NvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGU3Ml0gLSBJbnRlcmZhY2Ugb2YgY29tcG9zaXRlIHNlcnZpY2UgU2VydmljZTFhIG11c3QgYmUgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UgZGVjbGFyZWQgYnkgcHJvbW90ZWQgY29tcG9uZW50IHNlcnZpY2UuIENhbGxiYWNrIGludGVyZmFjZSBkb2Vzbid0IG1hdGNoDQotQVNNXzgwMTg9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDbGllbnRdIC0gW0FTTTUwMDA0LEpDQTMwMDAyLEpDSTgwMDAxXSBDb21wb25lbnQgc2VydmljZSBpbnRlcmZhY2UgaW5jb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gc2VydmljZSBpbnRlcmZhY2U6IENvbXBvbmVudCA9IFRlc3RDbGllbnQgU2VydmljZSA9IFRlc3RJbnZvY2F0aW9uDQotQVNNXzgwMTk9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb250cmlidXRpb246IEFTTV84MDE5LCBBcnRpZmFjdDogVGVzdF9BU01fODAxOS5jb21wb3NpdGVdIC0gVGhlIGludGVyZmFjZS53c2RsIGludGVyZmFjZSB7aHR0cDovL3Rlc3Quc2NhLm9hc2lzb3Blbi5vcmcvfVNlcnZpY2UxIGVsZW1lbnQgY2FuIG9ubHkgaGF2ZSBhIHJlbW90YWJsZSBhdHRyaWJ1dGUgd2l0aCB0aGUgdmFsdWUgInRydWUiIGFzIFdTREwgaW50ZXJmYWNlIGFyZSBhc3N1bWVkIHRvIGJlIHJlbW90YWJsZSBieSBkZWZhdWx0LiBUaGUgdmFsdWUgdGhhdCB3YXMgZm91bmQgaXM6IGZhbHNlLg0KLUFTTV85MDAyPW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBNdWx0aXBsZSBiaW5kaW5ncyB3aXRoIHRoZSBzYW1lIG5hbWUgZm9yIGEgc2VydmljZTogU2VydmljZSA9IFNlcnZpY2UxIEJpbmRpbmcgbmFtZSA9IEZyZWQNCi1BU01fOTAwNT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9BU01fOTAwNUNvbXBvbmVudDFdIC0gW0FTTTkwMDA1XSBUaGUgU0NBIGJpbmRpbmcgU2VydmljZTEgb24gY29tcG9uZW50IFRFU1RfQVNNXzkwMDVDb21wb25lbnQxIHNlcnZpY2UgU2VydmljZTEgc2hvdWxkIG5vdCBoYXZlIGEgVVJJIGFuZCB0aGUgVVJJIGlzIGN1cnJlbnRseSBzZXQgdG8gaHR0cDovL2V4YW1wbGUvYmFyDQotQVNNXzEwMDAxPW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTAwMDEsIEFydGlmYWN0OiBNRVRBLUlORi9kZWZpbml0aW9ucy54bWwsIERlZmluaXRpb25zOiBqYXI6ZmlsZToqKipBU01fMTAwMDEqKiouemlwIS9NRVRBLUlORi9kZWZpbml0aW9ucy54bWxdIC0gW0FTTTEwMDAxLFBPTDMwMDAyXSBEdXBsaWNhdGUgaW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31GcmVkIGZvdW5kIGluIGRvbWFpbg0KLUFTTV8xMDAwMz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQVNNXzEwMDAzLCBBcnRpZmFjdDogTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sLCBEZWZpbml0aW9uczogamFyOmZpbGU6KioqQVNNXzEwMDAzKioqLnppcCEvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sXSAtIFhNTFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yIG9jY3VyZWQgaW46IFRlc3RfQVNNXzEwMDAzLmNvbXBvc2l0ZSAsbGluZSA9ICoqKiwgY29sdW1uID0gKioqLCBNZXNzYWdlID0gY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYTogSW52YWxpZCBjb250ZW50IHdhcyBmb3VuZCBzdGFydGluZyB3aXRoIGVsZW1lbnQgJ2NvbXBvbmVudCcuIE9uZSBvZiAneyJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmRvY3VtZW50YXRpb24sICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmludGVudCwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6cG9saWN5U2V0LCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpiaW5kaW5nVHlwZSwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6aW1wbGVtZW50YXRpb25UeXBlLCBXQ1sjI290aGVyOiJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiXX0nIGlzIGV4cGVjdGVkLg0KLUFTTV8xMjAwMz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogSW52YWxpZCBpbnRlcmZhY2Ugd2hlbiByZXNvbHZpbmcNCi1BU01fMTIwMDc9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwMzJ9VGVzdENvbXBvc2l0ZTUsIENvbXBvbmVudDogVGVzdENvbXBvc2l0ZTVUZXN0Q29tcG9uZW50MV0gLSBbQVNNNTAwMDQsSkNBMzAwMDIsSkNJODAwMDFdIENvbXBvbmVudCBzZXJ2aWNlIGludGVyZmFjZSBpbmNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlIGludGVyZmFjZTogQ29tcG9uZW50ID0gVGVzdENvbXBvc2l0ZTVUZXN0Q29tcG9uZW50MSBTZXJ2aWNlID0gU2VydmljZTEgT3BlcmF0aW9ucyBjYWxsZWQgb3BlcmF0aW9uMiBhcmUgbm90IGNvbXBhdGlibGUgT3BlcmF0aW9uIGFyZ3VtZW50IHR5cGVzIHNvdXJjZSA9IHtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYX1pbnQgdGFyZ2V0ID0ge2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hfXN0cmluZyBkb24ndCBtYXRjaCBmb3Igb3V0cHV0IHR5cGVzDQotQVNNXzEyMDA4PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV8xMjAwOFRlc3RDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwMzJ9VGVzdENvbXBvc2l0ZTUsIENvbXBvbmVudDogVGVzdENvbXBvc2l0ZTVUZXN0Q29tcG9uZW50MV0gLSBbQVNNNTAwMDQsSkNBMzAwMDIsSkNJODAwMDFdIENvbXBvbmVudCBzZXJ2aWNlIGludGVyZmFjZSBpbmNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlIGludGVyZmFjZTogQ29tcG9uZW50ID0gVGVzdENvbXBvc2l0ZTVUZXN0Q29tcG9uZW50MSBTZXJ2aWNlID0gU2VydmljZTEgT3BlcmF0aW9ucyBjYWxsZWQgb3BlcmF0aW9uMiBhcmUgbm90IGNvbXBhdGlibGUgT3BlcmF0aW9uIGFyZ3VtZW50IHR5cGVzIHNvdXJjZSA9IHtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYX1pbnQgdGFyZ2V0ID0ge2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hfXN0cmluZyBkb24ndCBtYXRjaCBmb3Igb3V0cHV0IHR5cGVzDQotQVNNXzEyMDExPW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNjAwMzAsSkNJNTAwMDQsSkNJODAwMDFdIENvbXBvbmVudCBpbXBsZW1lbnRhdGlvbiBub3QgcmVzb2x2ZWQ6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFVyaSA9IFRlc3RDb21wb25lbnQxDQotQVNNXzEyMDEyPW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTIwMTIsIEFydGlmYWN0OiBNRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbF0gLSBYTUxTY2hlbWEgdmFsaWRhdGlvbiBlcnJvciBvY2N1cmVkIGluOiBqYXI6ZmlsZToqKipBU01fMTIwMTIqKiouemlwIS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCAsbGluZSA9ICoqKiwgY29sdW1uID0gKioqLCBNZXNzYWdlID0gY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYTogSW52YWxpZCBjb250ZW50IHdhcyBmb3VuZCBzdGFydGluZyB3aXRoIGVsZW1lbnQgJ2NvbXBvbmVudCcuIE9uZSBvZiAneyJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmRvY3VtZW50YXRpb24sICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmRlcGxveWFibGUsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmltcG9ydEJhc2UsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmV4cG9ydEJhc2UsIFdDWyMjb3RoZXI6Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiJdfScgaXMgZXhwZWN0ZWQuDQotQVNNXzEzMDAxPW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTMwMDEsIEFydGlmYWN0OiBUZXN0X0FTTV8xMzAwMS5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9BU01fMTMwMDEuY29tcG9zaXRlICxsaW5lID0gKioqLCBjb2x1bW4gPSAqKiosIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjIuNC5hOiBJbnZhbGlkIGNvbnRlbnQgd2FzIGZvdW5kIHN0YXJ0aW5nIHdpdGggZWxlbWVudCAnc2V2cmljZScuIE9uZSBvZiAneyJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnNlcnZpY2UsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnJlZmVyZW5jZSwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6cHJvcGVydHksICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnJlcXVpcmVzLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpwb2xpY3lTZXRBdHRhY2htZW50LCBXQ1sjI290aGVyOiJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiXX0nIGlzIGV4cGVjdGVkLg0KLUFTTV8xMzAwMj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQVNNXzEzMDAyLCBBcnRpZmFjdDogVGVzdF9BU01fMTMwMDIuY29tcG9zaXRlXSAtIFhNTFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yIG9jY3VyZWQgaW46IFRlc3RfQVNNXzEzMDAyLmNvbXBvc2l0ZSAsbGluZSA9ICoqKiwgY29sdW1uID0gKioqLCBNZXNzYWdlID0gY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYTogSW52YWxpZCBjb250ZW50IHdhcyBmb3VuZCBzdGFydGluZyB3aXRoIGVsZW1lbnQgJ29wZXJhdGlvbicuIE9uZSBvZiAneyJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmJpbmRpbmcsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmNhbGxiYWNrLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpyZXF1aXJlcywgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6cG9saWN5U2V0QXR0YWNobWVudCwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6ZXh0ZW5zaW9uc30nIGlzIGV4cGVjdGVkLg0KLUFTTV8xMzAwMz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQVNNXzEzMDAzLCBBcnRpZmFjdDogVGVzdF9BU01fMTMwMDMuY29tcG9zaXRlXSAtIFhNTFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yIG9jY3VyZWQgaW46IFRlc3RfQVNNXzEzMDAzLmNvbXBvc2l0ZSAsbGluZSA9ICoqKiwgY29sdW1uID0gKioqLCBNZXNzYWdlID0gY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYTogSW52YWxpZCBjb250ZW50IHdhcyBmb3VuZCBzdGFydGluZyB3aXRoIGVsZW1lbnQgJ2JpbmRpbmcud3MnLiBPbmUgb2YgJ3siaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpkb2N1bWVudGF0aW9uLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjppbmNsdWRlLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpyZXF1aXJlcywgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6cG9saWN5U2V0QXR0YWNobWVudCwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6c2VydmljZSwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6cHJvcGVydHksICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmNvbXBvbmVudCwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6cmVmZXJlbmNlLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjp3aXJlLCBXQ1sjI290aGVyOiJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiXX0nIGlzIGV4cGVjdGVkLg0KLUFTTV8xMzAwND1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENsaWVudCwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENsaWVudF8wMDAyLCBDb21wb25lbnQ6IFRlc3RDbGllbnRfMDAwMlRlc3RDbGllbnRdIC0gW0FTTTQwMDExLEFTTTYwMDM0XSBObyB2YWx1ZSBjb25maWd1cmVkIG9uIGEgbXVzdFN1cHBseSBwcm9wZXJ0eQ0KLUFTTV8xMzAwNT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQVNNXzEzMDA1LCBBcnRpZmFjdDogVGVzdF9BU01fMTMwMDUuY29tcG9zaXRlXSAtIFhNTFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yIG9jY3VyZWQgaW46IFRlc3RfQVNNXzEzMDA1LmNvbXBvc2l0ZSAsbGluZSA9ICoqKiwgY29sdW1uID0gKioqLCBNZXNzYWdlID0gY3ZjLWVsdC4yOiBUaGUgdmFsdWUgb2Yge2Fic3RyYWN0fSBpbiB0aGUgZWxlbWVudCBkZWNsYXJhdGlvbiBmb3IgJ2ltcGxlbWVudGF0aW9uJyBtdXN0IGJlIGZhbHNlLg0KLUFTTV8xMzAwNj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuVmFsaWRhdGlvbkV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQVNNXzEzMDA2LCBBcnRpZmFjdDogVGVzdF9BU01fMTMwMDYuY29tcG9zaXRlXSAtIFhNTFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yIG9jY3VyZWQgaW46IFRlc3RfQVNNXzEzMDA2LmNvbXBvc2l0ZSAsbGluZSA9ICoqKiwgY29sdW1uID0gKioqLCBNZXNzYWdlID0gY3ZjLWNvbXBsZXgtdHlwZS4zLjIuMjogQXR0cmlidXRlICdjYWxsYmFjaycgaXMgbm90IGFsbG93ZWQgdG8gYXBwZWFyIGluIGVsZW1lbnQgJ2ludGVyZmFjZS5qYXZhJy4NCi1BU01fMTMwMDc9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb246IFtDb250cmlidXRpb246IEFTTV8xMzAwNywgQXJ0aWZhY3Q6IFRlc3RfQVNNXzEzMDA3LmNvbXBvc2l0ZV0gLSBYTUxTY2hlbWEgdmFsaWRhdGlvbiBlcnJvciBvY2N1cmVkIGluOiBUZXN0X0FTTV8xMzAwNy5jb21wb3NpdGUgLGxpbmUgPSAqKiosIGNvbHVtbiA9ICoqKiwgTWVzc2FnZSA9IGN2Yy1jb21wbGV4LXR5cGUuMy4yLjI6IEF0dHJpYnV0ZSAnbXVscGxpY2l0eScgaXMgbm90IGFsbG93ZWQgdG8gYXBwZWFyIGluIGVsZW1lbnQgJ3JlZmVyZW5jZScuDQotQVNNXzEzMDA4PW9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTMwMDgsIEFydGlmYWN0OiBUZXN0X0FTTV8xMzAwOC5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9BU01fMTMwMDguY29tcG9zaXRlICxsaW5lID0gKioqLCBjb2x1bW4gPSAqKiosIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjIuNC5hOiBJbnZhbGlkIGNvbnRlbnQgd2FzIGZvdW5kIHN0YXJ0aW5nIHdpdGggZWxlbWVudCAnb3BlcmF0aW9uJy4gT25lIG9mICd7Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6ZG9jdW1lbnRhdGlvbiwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6d2lyZUZvcm1hdCwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6b3BlcmF0aW9uU2VsZWN0b3IsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnJlcXVpcmVzLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpwb2xpY3lTZXRBdHRhY2htZW50fScgaXMgZXhwZWN0ZWQuDQpkaWZmIC0tZ2l0IGEvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9wb20ueG1sIGIvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWFkNTYwLi4wMDAwMDAwCi0tLSBhL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy1qbXMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0czwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbXBsaWFuY2UtdGVzdC1iaW5kaW5nLWptczwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU3BlY2lmaWNhdGlvbiBDb21wbGlhbmNlIFRlc3RzIEJpbmRpbmcgSk1TPC9uYW1lPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDwhLS0gVGhpcyBpcyBvbmx5IG5lZWRlZCB0byBnZXQgdGhlIG1vZHVsZSB3b3JraW5nIGluIEVjbGlwc2Ugd2hpY2ggZG9lc24ndCBwaWNrIGl0IHVwIGZyb20gdGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayAtLT4KLSAgICAgICAgICAgIDwhLS0gVGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayBpcyBuZWVkZWQgYXMgcHJlc2VudGx5IHRoZSBzdXJlZmlyZSBwbHVnaW4gd29udCBydW4gdGVzdHMgaW4gYSBkZXBlbmRlbmN5IGphciAtLT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5vYXNpcy1iaW5kaW5nLWptcy10ZXN0LXJ1bm5lcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2U8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1qbXM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICAgPCEtLSBUaGlzIGlzIG5lZWQgd2hlbiBydW5uaW5nIHdpdGggU3VuIEpESyB3aGljaCBnZXRzIGFuIHVuc3VwcG9ydGVkIG9wZXJhdGlvbiBleGNlcHRpb24gY3JlYXRpbmcgYW4gWE1MU3RyZWFtUmVhZGVyIGZyb20gYSBET01Tb3VyY2UKLSAgICAgICAgICAgICB3aGVuIFR1c2NhbnkgaXMgd3JpdGluZyBhIHByb3BlcnR5IHZhbHVlICAtLT4KLSAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3N0eC1hc2w8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjIuNDwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgICAgIDxleGNsdXNpb25zPgotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPnN0YXg8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0YXgtYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgPC9leGNsdXNpb25zPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC41PC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICA8YnVpbGQ+Ci0gICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+Ci0gICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgPGV4Y2x1ZGVzPgotICAgICAgICAgICAgICA8IS0tIGV4Y2x1ZGU+KiovUE9KT184MDExX1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGUgLS0+Ci0gICAgICAgICAgIDwvZXhjbHVkZXM+Ci0gICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICA8L3BsdWdpbj4KLQotICAgICAgPHBsdWdpbj4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBlbmRlbmN5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgIDxpZD51bnBhY2s8L2lkPgotICAgICAgICAgICAgPHBoYXNlPnRlc3QtY29tcGlsZTwvcGhhc2U+Ci0gICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgIDxnb2FsPnVucGFjazwvZ29hbD4KLSAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW1zPgotICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPgotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b2FzaXMtYmluZGluZy1qbXMtY29udHJpYnV0aW9uczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgPHR5cGU+emlwPC90eXBlPgotICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vb2FzaXMtY29udHJpYnV0aW9uczwvb3V0cHV0RGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4KLSAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLWJpbmRpbmctam1zLXRlc3QtcnVubmVyPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1TTkFQU0hPVDwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICA8dHlwZT5qYXI8L3R5cGU+Ci0gICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPmNvbW1vbnMtbG9nZ2luZy5wcm9wZXJ0aWVzLG9hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzLHR1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzPC9leGNsdWRlcz4KLSAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3Rlc3QtY2xhc3Nlczwvb3V0cHV0RGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4KLSAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtcz4KLSAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgPC9wbHVnaW4+Ci0KLSAgICA8L3BsdWdpbnM+Ci0gIDwvYnVpbGQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9jb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctam1zL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcyBiL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy1qbXMvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzE5MmM0Li4wMDAwMDAwCi0tLSBhL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy1qbXMvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jIAotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSMgdW5kZXIgdGhlIExpY2Vuc2UuIAotCi0jIE9BU0lTIFNDQSBBc3NlbWJseSB0ZXN0IHByb3BlcnRpZXMKLSMgVGhlIGltcGxlbWVudGF0aW9uIHR5cGUgdG8gdXNlIGZvciBBc3NlbWJseSB0ZXN0IHN1aXRlCi0jIG9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1CUEVMCi1vcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5Lmxhbmc9SmF2YQotCi0jIFRoZSBjbGFzcyB0byB1c2UgYXMgdGhlIFJ1bnRpbWUgQnJpZGdlIGZvciB0aGUgU0NBIHJ1bnRpbWUgdW5kZXIgdGVzdAotI29yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkucnVudGltZV9icmlkZ2U9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdC5UdXNjYW55T1NHaVJ1bnRpbWVCcmlkZ2UKLW9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkucnVudGltZV9icmlkZ2U9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdC5UdXNjYW55UnVudGltZUJyaWRnZQotCi0jIFRoZSBsb2NhdGlvbiBvZiB0aGUgY29udHJpYnV0aW9ucyBmb3IgdGhlIHRlc3Qgc3VpdGUKLSMgJTEgcmVwcmVzZW50cyB0aGUgcGxhY2VtZW50IG9mIHRoZSBuYW1lIG9mIGVhY2ggY29udHJpYnV0aW9uIGludG8gdGhlIGxvY2F0aW9uIFVSSQotb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5jb250cmlidXRpb24ubG9jYXRpb249dGFyZ2V0L29hc2lzLWNvbnRyaWJ1dGlvbnMvJTEuemlwCi0KZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy1qbXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIGIvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3ODhjMWYuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMgCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jIAotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotIyB1bmRlciB0aGUgTGljZW5zZS4gCi1CSk1fMzAwMT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQkpNXzMwMDEsIEFydGlmYWN0OiBUZXN0X0JKTV8zMDAxLmNvbXBvc2l0ZV0gLSBVUkkgbXVzdCBzdGFydCB3aXRoIHRoZSBzY2hlbWUgam1zOiBmb3IgdXJpOiBodHRwOi8vdGVzdC5zY2Eub2FzaXNvcGVuLm9yZy8KLUJKTV8zMDAyPVRlc3Qgc2VydmljZSBnb3QgYW4gZXhjZXB0aW9uIGR1cmluZyBleGVjdXRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbiBKTVMgRGVzdGluYXRpb24gam5kaTpCSk1fMzAwMl9RdWV1ZSBub3QgZm91bmQgd2l0aCBjcmVhdGUgbW9kZSBvZiAiaWZub3RleGlzdCIgd2hpbGUgcmVnaXN0ZXJpbmcgYmluZGluZyBSZWZlcmVuY2UxIGludm9rZXIKLUJKTV8zMDAzPU5vIGVycm9yIGV4cGVjdGVkCi1CSk1fMzAwND1ObyBlcnJvciBleHBlY3RlZAotQkpNXzMwMDU9Tm8gZXJyb3IgZXhwZWN0ZWQKLUJKTV8zMDEwPSoqdGVzdGNhc2UgaW5jb21wbGV0ZSoqCi1CSk1fMzAxMT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdFeGNlcHRpb246IEVycm9yIHN0YXJ0aW5nIEpNU1NlcnZpY2VCaW5kaW5nCi1CSk1fMzAxMj0qKnRlc3RjYXNlIGluY29tcGxldGUqKgotQkpNXzMwMTM9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nRXhjZXB0aW9uOiBFcnJvciBzdGFydGluZyBKTVNTZXJ2aWNlQmluZGluZwotQkpNXzMwMTQ9Kip0ZXN0Y2FzZSBpbmNvbXBsZXRlKioKLUJKTV8zMDE1PSoqdGVzdGNhc2UgaW5jb21wbGV0ZSoqCi1CSk1fMzAxNz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQkpNXzMwMTcsIEFydGlmYWN0OiBUZXN0X0JKTV8zMDE3LmNvbXBvc2l0ZV0gLSBYTUxTY2hlbWEgdmFsaWRhdGlvbiBlcnJvciBvY2N1cmVkIGluOiBUZXN0X0JKTV8zMDE3LmNvbXBvc2l0ZSAsbGluZSA9IDM2LCBjb2x1bW4gPSAxNywgTWVzc2FnZSA9IGN2Yy1jb21wbGV4LXR5cGUuMi40LmE6IEludmFsaWQgY29udGVudCB3YXMgZm91bmQgc3RhcnRpbmcgd2l0aCBlbGVtZW50ICdhY3RpdmF0aW9uU3BlYycuIE9uZSBvZiAneyJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnJlc3BvbnNlLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpoZWFkZXJzLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjptZXNzYWdlU2VsZWN0aW9uLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpyZXNvdXJjZUFkYXB0ZXIsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOm9wZXJhdGlvblByb3BlcnRpZXN9JyBpcyBleHBlY3RlZC4KLUJKTV8zMDE4PSoqdGVzdGNhc2UgaW5jb21wbGV0ZSoqCi1CSk1fMzAxOT0qKnRlc3RjYXNlIGluY29tcGxldGUqKgotQkpNXzMwMjA9Kip0ZXN0Y2FzZSBpbmNvbXBsZXRlKioKLUJKTV8zMDIxPSoqdGVzdGNhc2UgaW5jb21wbGV0ZSoqCi1CSk1fMzAyMj0qKnRlc3RjYXNlIGluY29tcGxldGUqKgotQkpNXzMwMjM9Kip0ZXN0Y2FzZSBpbmNvbXBsZXRlKioKLUJKTV8zMDI0PSoqdGVzdGNhc2UgaW5jb21wbGV0ZSoqCi1CSk1fMzAyNT0qKnRlc3RjYXNlIGluY29tcGxldGUqKgotQkpNXzMwMjY9Kip0ZXN0Y2FzZSBpbmNvbXBsZXRlKioKLUJKTV8zMDI5PSoqdGVzdGNhc2UgaW5jb21wbGV0ZSoqCi1CSk1fMzAzND0qKnRlc3RjYXNlIGluY29tcGxldGUqKgotQkpNXzMwMzc9Kip0ZXN0Y2FzZSBpbmNvbXBsZXRlKioKLUJKTV80MDExPSoKLQotCmRpZmYgLS1naXQgYS9jb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctd3MvcG9tLnhtbCBiL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjYzMDVkLi4wMDAwMDAwCi0tLSBhL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb21wbGlhbmNlLXRlc3RzPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0LWJpbmRpbmctd3M8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNwZWNpZmljYXRpb24gQ29tcGxpYW5jZSBUZXN0cyBCaW5kaW5nIFdTPC9uYW1lPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDwhLS0gVGhpcyBpcyBvbmx5IG5lZWRlZCB0byBnZXQgdGhlIG1vZHVsZSB3b3JraW5nIGluIEVjbGlwc2Ugd2hpY2ggZG9lc24ndCBwaWNrIGl0IHVwIGZyb20gdGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayAtLT4KLSAgICAgICAgICAgIDwhLS0gVGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayBpcyBuZWVkZWQgYXMgcHJlc2VudGx5IHRoZSBzdXJlZmlyZSBwbHVnaW4gd29udCBydW4gdGVzdHMgaW4gYSBkZXBlbmRlbmN5IGphciAtLT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5vYXNpcy1iaW5kaW5nLXdzLXRlc3QtcnVubmVyPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgICA8IS0tIFRoaXMgaXMgbmVlZCB3aGVuIHJ1bm5pbmcgd2l0aCBTdW4gSkRLIHdoaWNoIGdldHMgYW4gdW5zdXBwb3J0ZWQgb3BlcmF0aW9uIGV4Y2VwdGlvbiBjcmVhdGluZyBhbiBYTUxTdHJlYW1SZWFkZXIgZnJvbSBhIERPTVNvdXJjZQotICAgICAgICAgICAgIHdoZW4gVHVzY2FueSBpcyB3cml0aW5nIGEgcHJvcGVydHkgdmFsdWUgIC0tPgotICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3R4LWFzbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICAgICAgPGV4Y2x1c2lvbnM+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+c3RheDwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RheC1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgICA8L2V4Y2x1c2lvbnM+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjU8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgIDwvZGVwZW5kZW5jaWVzPgotCi0gIDxidWlsZD4KLSAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KLSAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgPHBsdWdpbj4KLSAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICA8ZXhjbHVkZXM+Ci0gICAgICAgICAgICAgIDwhLS0gZXhjbHVkZT4qKi9CV1NfMjAwM19UZXN0Q2FzZS5qYXZhPC9leGNsdWRlIC0tPgotICAgICAgICAgICAgICA8IS0tIGV4Y2x1ZGU+KiovQldTXzIwMDZfVGVzdENhc2UuamF2YTwvZXhjbHVkZSAtLT4KLSAgICAgICAgICAgICAgPCEtLSBleGNsdWRlPioqL0JXU18yMDA4X1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGUgLS0+Ci0gICAgICAgICAgICAgIDwhLS0gZXhjbHVkZT4qKi9CV1NfMjAwOV9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlIC0tPgotICAgICAgICAgICAgICA8IS0tIGV4Y2x1ZGU+KiovQldTXzIwMTFfVGVzdENhc2UuamF2YTwvZXhjbHVkZSAtLT4KLSAgICAgICAgICAgICAgPCEtLSBleGNsdWRlPioqL0JXU18yMDEzX1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGUgLS0+Ci0gICAgICAgICAgICAgIDwhLS0gZXhjbHVkZT4qKi9CV1NfMjAxNl9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlIC0tPgotICAgICAgICAgICAgICA8IS0tIGV4Y2x1ZGU+KiovQldTXzIwMTdfVGVzdENhc2UuamF2YTwvZXhjbHVkZSAtLT4KLSAgICAgICAgICAgICAgPCEtLSBleGNsdWRlPioqL0JXU180MDA3X1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGUgLS0+Ci0gICAgICAgICAgICAgIDwhLS0gZXhjbHVkZT4qKi9CV1NfNTAwMV9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlIC0tPgotICAgICAgICAgICA8L2V4Y2x1ZGVzPgotICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgIDxwbHVnaW4+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICA8aWQ+dW5wYWNrPC9pZD4KLSAgICAgICAgICAgIDxwaGFzZT50ZXN0LWNvbXBpbGU8L3BoYXNlPgotICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICA8Z29hbD51bnBhY2s8L2dvYWw+Ci0gICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4KLSAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLWJpbmRpbmctd3MtY29udHJpYnV0aW9uczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjAtU05BUFNIT1Q8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgPHR5cGU+emlwPC90eXBlPgotICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vb2FzaXMtY29udHJpYnV0aW9uczwvb3V0cHV0RGlyZWN0b3J5PgotICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4KLSAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLWJpbmRpbmctd3MtdGVzdC1ydW5uZXI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgICAgIDx0eXBlPmphcjwvdHlwZT4KLSAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+Y29tbW9ucy1sb2dnaW5nLnByb3BlcnRpZXMsb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXM8L2V4Y2x1ZGVzPgotICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vdGVzdC1jbGFzc2VzPC9vdXRwdXREaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtPgotICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPgotICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICA8L3BsdWdpbj4KLQotICAgIDwvcGx1Z2lucz4KLSAgPC9idWlsZD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY0YWE4ZS4uMDAwMDAwMAotLS0gYS9jb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctd3Mvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL290ZXN0L1R1c2NhbnlSdW50aW1lQnJpZGdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKLQotaW1wb3J0IGNsaWVudC5SdW50aW1lQnJpZGdlOwotaW1wb3J0IGNsaWVudC5UZXN0Q29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVudGltZSBCcmlkZ2UgZm9yIHRoZSBBcGFjaGUgVHVzY2FueSBTQ0EgcnVudGltZSAodmVyc2lvbiAyLngpCi0gKgotICovCi1wdWJsaWMgY2xhc3MgVHVzY2FueVJ1bnRpbWVCcmlkZ2UgaW1wbGVtZW50cyBSdW50aW1lQnJpZGdlIHsKLQotICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVFJJQlVUSU9OX0xPQ0FUSU9OX1BST1BLRVkgPSAiT0FTSVNfVEVTVEVOVl9DT05UUklCVVRJT05fTE9DQVRJT04iOwotCi0gICAgcHJvdGVjdGVkIE5vZGVGYWN0b3J5IGxhdW5jaGVyOwotICAgIHByb3RlY3RlZCBOb2RlIG5vZGU7Ci0gICAgcHJvdGVjdGVkIFByb3BlcnRpZXMgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzOwotICAgIAotICAgIFRlc3RDb25maWd1cmF0aW9uIHRlc3RDb25maWd1cmF0aW9uID0gbnVsbDsKLQotICAgIHB1YmxpYyBUdXNjYW55UnVudGltZUJyaWRnZSgpIHsKLSAgICAgICAgLy8gcmVhZCB0ZXN0IGVycm9yIG1hcHBpbmcKLSAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzID0gbmV3IFByb3BlcnRpZXMoKTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIElucHV0U3RyZWFtIHByb3BlcnRpZXNTdHJlYW0gPSB0aGlzLmdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIik7Ci0gICAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZXMubG9hZChwcm9wZXJ0aWVzU3RyZWFtKTsKLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyAgIAotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gcmVhZCBvYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMgZmlsZSIpOwotICAgICAgICB9IAotICAgIH0KLQotICAgIHB1YmxpYyBUZXN0Q29uZmlndXJhdGlvbiBnZXRUZXN0Q29uZmlndXJhdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIHRlc3RDb25maWd1cmF0aW9uOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldFRlc3RDb25maWd1cmF0aW9uKFRlc3RDb25maWd1cmF0aW9uIHRlc3RDb25maWd1cmF0aW9uKSB7Ci0gICAgICAgIHRoaXMudGVzdENvbmZpZ3VyYXRpb24gPSB0ZXN0Q29uZmlndXJhdGlvbjsKLSAgICB9Ci0KLQlwdWJsaWMgYm9vbGVhbiBzdGFydENvbnRyaWJ1dGlvbihTdHJpbmcgY29tcG9zaXRlTmFtZSwKLQkJCVN0cmluZyBjb250cmlidXRpb25Mb2NhdGlvbiwgU3RyaW5nW10gY29udHJpYnV0aW9uTmFtZXMpCi0JCQl0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy9UT0RPOgotCQlyZXR1cm4gc3RhcnRDb250cmlidXRpb24oY29udHJpYnV0aW9uTG9jYXRpb24sIGNvbnRyaWJ1dGlvbk5hbWVzKTsKLQl9Ci0JCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRDb250cmlidXRpb24oU3RyaW5nIGNvbnRyaWJ1dGlvbkxvY2F0aW9uLCBTdHJpbmdbXSBjb250cmlidXRpb25OYW1lcykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAvLyBUdXNjYW55IHNwZWNpZmljIGNvZGUgd2hpY2ggc3RhcnRzIHRoZSBjb250cmlidXRpb24ocykgaG9sZGluZyB0aGUgdGVzdAotICAgICAgICAgICAgUHJvcGVydGllcyBwcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBwcy5zZXRQcm9wZXJ0eSgiZGVmYXVsdFNjaGVtZSIsICJ2bSIpOwotICAgICAgICAgICAgcHMuc2V0UHJvcGVydHkoIm9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5yaS5KQVhXU0JpbmRpbmdQcm92aWRlckZhY3RvcnkuZGVmYXVsdFBvcnQiLCAiODA4MCIpOwotICAgICAgICAgICAgbGF1bmNoZXIgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZShwcyk7Ci0KLSAgICAgICAgICAgIENvbnRyaWJ1dGlvbltdIGNvbnRyaWJ1dGlvbnMgPSBuZXcgQ29udHJpYnV0aW9uW2NvbnRyaWJ1dGlvbk5hbWVzLmxlbmd0aF07Ci0gICAgICAgICAgICBTdHJpbmdbXSBjb250cmlidXRpb25VUklzID0gZ2V0Q29udHJpYnV0aW9uVVJJcyhjb250cmlidXRpb25Mb2NhdGlvbik7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHsKLSAgICAgICAgICAgICAgICBjb250cmlidXRpb25zW2ldID0gbmV3IENvbnRyaWJ1dGlvbihjb250cmlidXRpb25OYW1lc1tpXSwgY29udHJpYnV0aW9uVVJJc1tpXSk7Ci0gICAgICAgICAgICB9IC8vIGVuZCBmb3IKLQotICAgICAgICAgICAgbm9kZSA9IGxhdW5jaGVyLmNyZWF0ZU5vZGUodGVzdENvbmZpZ3VyYXRpb24uZ2V0Q29tcG9zaXRlKCksIGNvbnRyaWJ1dGlvbnMpOwotICAgICAgICAgICAgLy8gU3RhcnQgdGhlIG5vZGUKLSAgICAgICAgICAgIG5vZGUuc3RhcnQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRm9yIGRlYnVnZ2luZyAKLSAgICAgICAgICAgIC8vIHByaW50IG91dCB0aGUgY29tcG9zaXRlcyB0aGF0IGhhdmUgYmVlbiByZWFkIGluIHN1Y2Nlc3MgY2FzZXMKLSAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigoKE5vZGVJbXBsKW5vZGUpLmR1bXBEb21haW5Db21wb3NpdGUoKSk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOwotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgICAgICAKLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0gLy8gZW5kIHRyeQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gLy8gZW5kIG1ldGhvZCBzdGFydENvbnRyaWJ1dGlvbgotCi0gICAgLyoqCi0gICAgICogR2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbnMgYXMgVVJJcwotICAgICAqIEBwYXJhbSBjb250cmlidXRpb25Mb2NhdGlvbiAtIGEgbG9jYXRpb24gcGF0dGVybiBVUkksIHdoaWNoIGNvbnRhaW5zIG9uZSBvciBtb3JlICIlMSIKLSAgICAgKiBzdWJzdHJpbmdzLCB3aGljaCBhcmUgc3Vic3RpdHV0ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29udHJpYnV0aW9uIHRvIGdldCB0aGUgVVJJIG9mCi0gICAgICogdGhlIGNvbnRyaWJ1dGlvbgotICAgICAqIEByZXR1cm4gdGhlIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbnMgYXMgYW4gYXJyYXkgb2YgU3RyaW5ncwotICAgICAqLwotICAgIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRDb250cmlidXRpb25VUklzKFN0cmluZyBjb250cmlidXRpb25Mb2NhdGlvbikgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZ1tdIGxvY2F0aW9uczsKLSAgICAgICAgbG9jYXRpb25zID0gdGVzdENvbmZpZ3VyYXRpb24uZ2V0Q29udHJpYnV0aW9uTmFtZXMoKTsKLQotICAgICAgICBpZiAobG9jYXRpb25zICE9IG51bGwgJiYgY29udHJpYnV0aW9uTG9jYXRpb24gIT0gbnVsbCkgewotCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIFN0cmluZyBhTG9jYXRpb24gPSBjb250cmlidXRpb25Mb2NhdGlvbi5yZXBsYWNlQWxsKCIlMSIsIGxvY2F0aW9uc1tpXSk7Ci0gICAgICAgICAgICAgICAgLy8gTG9va3MgbGlrZSBidWdzIGluIHRoZSBvYXNpcyBjb2RlIHRoYXQgc29tZXRpbWVzIHN0aWxsIHVzZXMgamFycyBmb3Igc29tZQotICAgICAgICAgICAgICAgIGlmIChhTG9jYXRpb24uZW5kc1dpdGgoIl9QT0pPLnppcCIpICYmICFhTG9jYXRpb24uZW5kc1dpdGgoIkFTTV84MDA1X0phdmEtMS4wLnppcCIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFMb2NhdGlvbiA9IGFMb2NhdGlvbi5zdWJzdHJpbmcoMCwgYUxvY2F0aW9uLmxlbmd0aCgpLTMpICsgImphciI7ICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKCEobmV3IEZpbGUoYUxvY2F0aW9uKSkuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgICAgICAJYUxvY2F0aW9uID0gYUxvY2F0aW9uLnJlcGxhY2UoIi56aXAiLCAiLmphciIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsb2NhdGlvbnNbaV0gPSBhTG9jYXRpb247Ci0gICAgICAgICAgICB9IC8vIGVuZCBmb3IgICAgCSAgCQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGxvY2F0aW9ucyA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgLy8gTm8gY29udHJpYnV0aW9uIHNwZWNpZmllZCAtIHRocm93IGFuIEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBTQ0EgcnVudGltZSAtIG5vIGNvbnRyaWJ1dGlvbiBzdXBwbGllZCAtIGVycm9yIik7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIE5vIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbiBzdXBwbGllZCAtIHRocm93IGFuIEV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBTQ0EgcnVudGltZSAtIG5vIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbiBzdXBwbGllZCAtIGVycm9yIik7Ci0gICAgICAgICAgICB9IC8vIGVuZCBpZiAKLSAgICAgICAgfSAvLyBlbmQgaWYKLQotICAgICAgICByZXR1cm4gbG9jYXRpb25zOwotICAgIH0gLy8gZW5kIGdldENvbnRyaWJ1dGlvblVSSQotCi0gICAgcHVibGljIHZvaWQgc3RvcENvbnRyaWJ1dGlvbigpIHsKLSAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgewotICAgICAgICAgICAgbm9kZS5zdG9wKCk7Ci0gICAgICAgIH0gLy8gZW5kIGlmCi0gICAgICAgIGlmIChsYXVuY2hlciAhPSBudWxsKSB7Ci0gICAgICAgICAgICBsYXVuY2hlci5kZXN0cm95KCk7Ci0gICAgICAgIH0gLy8gZW5kIGlmCi0gICAgfSAvLyBlbmQgbWV0aG9kIHN0b3BDb250cmlidXRpb24KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udHJpYnV0aW9uTG9jYXRpb24oQ2xhc3M8Pz4gdGVzdENsYXNzKSB7Ci0gICAgICAgIHJldHVybiBDb250cmlidXRpb25Mb2NhdGlvbkhlbHBlci5nZXRDb250cmlidXRpb25Mb2NhdGlvbih0ZXN0Q29uZmlndXJhdGlvbi5nZXRUZXN0Q2xhc3MoKSk7Ci0gICAgfSAvLyBlbmQgbWV0aG9kIGdldENvbnRyaWJ1dGlvbkxvY2F0aW9uCi0gICAgCi0gICAgcHVibGljIHZvaWQgY2hlY2tFcnJvcihTdHJpbmcgdGVzdE5hbWUsIFRocm93YWJsZSBleCkgdGhyb3dzIFRocm93YWJsZSB7IAotICAgICAgICAgICAgICAKLSAgICAgICAgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZSA9IGV4cGVjdGVkRXJyb3JNZXNzYWdlcy5nZXRQcm9wZXJ0eSh0ZXN0TmFtZSk7Ci0gICAgICAgIFN0cmluZyByZWNlaXZlZE1lc3NhZ2UgPSBleC5nZXRNZXNzYWdlKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlID09IG51bGwpewotICAgICAgICAgICAgd3JpdGVNaXNzaW5nTWVzc2FnZSh0ZXN0TmFtZSwgZXgpOwotICAgICAgICAgICAgZmFpbCgiTnVsbCBleHBlY3RlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSArIAotICAgICAgICAgICAgICAgICAiUGxlYXNlIGFkZCBtZXNzYWdlIHRvIG9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyIpOwotICAgICAgICB9IC8vIGVuZCBpZgotICAgICAgICAKLSAgICAgICAgaWYgKHJlY2VpdmVkTWVzc2FnZSA9PSBudWxsKXsKLSAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgZmFpbCgiTnVsbCByZWNlaXZlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSk7Ci0gICAgICAgIH0gLy8gZW5kIGlmCi0KLSAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZS5zdGFydHNXaXRoKCIqIikpIHsKLSAgICAgICAgICAgIC8vIGFsbG93IHVzaW5nICogdG8gaWdub3JlIGEgbWVzc2FnZSBjb21wYXJpc29uCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIERlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgbWVzc2FnZSBoYXMgdmFyaWFibGUgcGFydHMgd2l0aGluIGl0Ci0gICAgICAgIC8vIG1hcmtlZCB3aXRoIHRoZSBjaGFyYWN0ZXJzICoqKi4gSGVyZSB3ZSB0b2tlbml6ZSB0aGUgZXBlY3RlZCBzdHJpbmcgCi0gICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBpbmRpdmlkdWFsIHBhcnRzIGFyZSBwcmVzZW50IGluIHRoZSByZXN1bHRzIHN0cmluZwotICAgICAgICBTdHJpbmcgZXhwZWN0ZWRNZXNzYWdlUGFydHNbXSA9IGV4cGVjdGVkTWVzc2FnZS5zcGxpdCgiXFwqXFwqXFwqIik7Ci0gICAgICAgIAotICAgICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoID4gMSl7Ci0gICAgICAgICAgICBpbnQgZm91bmRQYXJ0cyA9IDA7Ci0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoOyBpKyspewotICAgICAgICAgICAgICAgIGlmIChyZWNlaXZlZE1lc3NhZ2UuaW5kZXhPZihleHBlY3RlZE1lc3NhZ2VQYXJ0c1tpXSkgPiAtMSApewotICAgICAgICAgICAgICAgICAgICBmb3VuZFBhcnRzKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoZm91bmRQYXJ0cyA9PSBleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGgpewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIAotICAgICAgICAvLyBEZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSBpcyB2YXJpYWJsZSAoZWcgY29udGFpbnMgYWJzb2x1dGUgZmlsZW5hbWVzKSAKLSAgICAgICAgLy8gYW5kIHdoZXJlIHRoZSBvbmx5IHJlbGV2YW50IHBhcnQgaXMgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlIC0gaW4gdGhpcyBjYXNlIHRoZSBleHBlY3RlZAotICAgICAgICAvLyBtZXNzYWdlIG9ubHkgY29udGFpbnMgdGhlIHN0ZW0gc2VjdGlvbiB3aGljaCBpcyB1bmNoYW5naW5nLi4uCi0gICAgICAgIGlmKCByZWNlaXZlZE1lc3NhZ2UubGVuZ3RoKCkgPiBleHBlY3RlZE1lc3NhZ2UubGVuZ3RoKCkgKSB7Ci0gICAgICAgICAgICAvLyBUcnVuY2F0ZSB0aGUgcmVjZWl2ZWQgbWVzc2FnZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBleHBlY3RlZCBtZXNzYWdlCi0gICAgICAgICAgICByZWNlaXZlZE1lc3NhZ2UgPSByZWNlaXZlZE1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGV4cGVjdGVkTWVzc2FnZS5sZW5ndGgoKSApOwotICAgICAgICB9IC8vIGVuZCBpZgotCi0gICAgICAgIGlmICghZXhwZWN0ZWRNZXNzYWdlLmVxdWFscyhyZWNlaXZlZE1lc3NhZ2UpKSB7Ci0gICAgICAgICAgICB3cml0ZUluY29ycmVjdE1lc3NhZ2UodGVzdE5hbWUsIGV4cGVjdGVkTWVzc2FnZSwgcmVjZWl2ZWRNZXNzYWdlKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCBleHBlY3RlZE1lc3NhZ2UsIHJlY2VpdmVkTWVzc2FnZSApOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuOwotICAgICAgIAotICAgIH0KLQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlTWlzc2luZ01lc3NhZ2UoU3RyaW5nIHRlc3ROYW1lLCBUaHJvd2FibGUgZXgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIG91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigidGFyZ2V0L09UZXN0TWlzc2luZ01zZ3MudHh0IiwgdHJ1ZSkpOwotICAgICAgICAgICAgb3V0LndyaXRlKHRlc3ROYW1lICsgIj0qIik7Ci0gICAgICAgICAgICBvdXQubmV3TGluZSgpOwotICAgICAgICAgICAgb3V0LmNsb3NlKCk7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgfSAKLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZUluY29ycmVjdE1lc3NhZ2UoU3RyaW5nIHRlc3ROYW1lLCBTdHJpbmcgZXhwZWN0ZWQsIFN0cmluZyByZWNlaXZlZCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIgb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKCJ0YXJnZXQvT1Rlc3RJbmNvcnJlY3RNc2dzLnR4dCIsIHRydWUpKTsKLSAgICAgICAgICAgIG91dC53cml0ZSh0ZXN0TmFtZSk7IG91dC5uZXdMaW5lKCk7Ci0gICAgICAgICAgICBvdXQud3JpdGUoIiAgICAiICsgZXhwZWN0ZWQpOyBvdXQubmV3TGluZSgpOwotICAgICAgICAgICAgb3V0LndyaXRlKCIgICAgIiArIHJlY2VpdmVkKTsgb3V0Lm5ld0xpbmUoKTsKLSAgICAgICAgICAgIG91dC5jbG9zZSgpOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIH0gCi0gICAgfQotCi19IC8vIGVuZCBjbGFzcyBUdXNjYW55UnVudGltZUJyaWRnZQpkaWZmIC0tZ2l0IGEvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcyBiL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zcmMvdGVzdC9yZXNvdXJjZXMvb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTkyYzQuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIyAKLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMgCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLiAKLQotIyBPQVNJUyBTQ0EgQXNzZW1ibHkgdGVzdCBwcm9wZXJ0aWVzCi0jIFRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlIHRvIHVzZSBmb3IgQXNzZW1ibHkgdGVzdCBzdWl0ZQotIyBvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5Lmxhbmc9QlBFTAotb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5sYW5nPUphdmEKLQotIyBUaGUgY2xhc3MgdG8gdXNlIGFzIHRoZSBSdW50aW1lIEJyaWRnZSBmb3IgdGhlIFNDQSBydW50aW1lIHVuZGVyIHRlc3QKLSNvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LnJ1bnRpbWVfYnJpZGdlPW9yZy5hcGFjaGUudHVzY2FueS5zY2Eub3Rlc3QuVHVzY2FueU9TR2lSdW50aW1lQnJpZGdlCi1vcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LnJ1bnRpbWVfYnJpZGdlPW9yZy5hcGFjaGUudHVzY2FueS5zY2Eub3Rlc3QuVHVzY2FueVJ1bnRpbWVCcmlkZ2UKLQotIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgZm9yIHRoZSB0ZXN0IHN1aXRlCi0jICUxIHJlcHJlc2VudHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgbmFtZSBvZiBlYWNoIGNvbnRyaWJ1dGlvbiBpbnRvIHRoZSBsb2NhdGlvbiBVUkkKLW9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkuY29udHJpYnV0aW9uLmxvY2F0aW9uPXRhcmdldC9vYXNpcy1jb250cmlidXRpb25zLyUxLnppcAotCmRpZmYgLS1naXQgYS9jb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctd3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIGIvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGU4YjRlNS4uMDAwMDAwMAotLS0gYS9jb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctd3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jIAotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSMgdW5kZXIgdGhlIExpY2Vuc2UuIAotQldTXzIwMjA9KgotQldTXzMwMDE9KgotQldTXzQwMDg9KgotQldTXzIwMDc9KgotQldTXzIwMTg9KgotQldTXzIwMDU9KgotQldTXzIwMDE9KgotQldTXzIwMjI9KgotQldTXzIwMDI9KgotQldTXzIwMTk9KgotCmRpZmYgLS1naXQgYS9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3BvbS54bWwgYi9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjNjY5ZTQuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNhYS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbXBsaWFuY2UtdGVzdHM8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0LWphdmEtY2FhPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU3BlY2lmaWNhdGlvbiBDb21wbGlhbmNlIFRlc3RzIEphdmEgQ0FBPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPCEtLSBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGdldCB0aGUgbW9kdWxlIHdvcmtpbmcgaW4gRWNsaXBzZSB3aGljaCBkb2Vzbid0IHBpY2sgaXQgdXAgZnJvbSB0aGUgZGVwZW5kZW5jeSBwbHVnaW4gdW5wYWNrIC0tPg0KLSAgICAgICAgICAgIDwhLS0gVGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayBpcyBuZWVkZWQgYXMgcHJlc2VudGx5IHRoZSBzdXJlZmlyZSBwbHVnaW4gd29udCBydW4gdGVzdHMgaW4gYSBkZXBlbmRlbmN5IGphciAtLT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLWphdmFjYWEtdGVzdC1ydW5uZXI8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDwhLS0gVGhpcyBpcyBuZWVkIHdoZW4gcnVubmluZyB3aXRoIFN1biBKREsgd2hpY2ggZ2V0cyBhbiB1bnN1cHBvcnRlZCBvcGVyYXRpb24gZXhjZXB0aW9uIGNyZWF0aW5nIGFuIFhNTFN0cmVhbVJlYWRlciBmcm9tIGEgRE9NU291cmNlDQotICAgICAgICAgICAgIHdoZW4gVHVzY2FueSBpcyB3cml0aW5nIGEgcHJvcGVydHkgdmFsdWUgIC0tPg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPndzdHgtYXNsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPnN0YXg8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGF4LWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NC41PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotDQotDQotICA8YnVpbGQ+DQotICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8cGx1Z2lucz4NCi0NCi0gICAgICA8cGx1Z2luPg0KLSAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICA8ZXhjbHVkZXM+DQotICAgICAgICAgICAgPGV4Y2x1ZGU+KiovSkNBXzExMDA4X1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGU+PCEtLSAgY291bGQgYmUgZHVlIHRvIG91dCBvZiBkYXRlIGNvbXBsaWFuY2UgYXJ0aWZhY3RzIC0tPg0KLSAgICAgICAgICAgPC9leGNsdWRlcz4NCi0gICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgPC9wbHVnaW4+DQotDQotICAgICAgPHBsdWdpbj4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgPGlkPnVucGFjazwvaWQ+DQotICAgICAgICAgICAgPHBoYXNlPnRlc3QtY29tcGlsZTwvcGhhc2U+DQotICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgPGdvYWw+dW5wYWNrPC9nb2FsPg0KLSAgICAgICAgICAgIDwvZ29hbHM+DQotICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbXM+DQotICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vYXNpcy1qYXZhY2FhLWNvbnRyaWJ1dGlvbnM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPHR5cGU+emlwPC90eXBlPg0KLSAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L29hc2lzLWNvbnRyaWJ1dGlvbnM8L291dHB1dERpcmVjdG9yeT4NCi0gICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtPg0KLSAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4NCi0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b2FzaXMtamF2YWNhYS10ZXN0LXJ1bm5lcjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8dHlwZT5qYXI8L3R5cGU+DQotICAgICAgICAgICAgICAgICAgIDxleGNsdWRlcz5jb21tb25zLWxvZ2dpbmcucHJvcGVydGllcyxvYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcyx0dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllczwvZXhjbHVkZXM+DQotICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vdGVzdC1jbGFzc2VzPC9vdXRwdXREaXJlY3Rvcnk+DQotICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4NCi0gICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbXM+DQotICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgIDwvZXhlY3V0aW9ucz4NCi0gICAgICA8L3BsdWdpbj4NCi0NCi0gICAgPC9wbHVnaW5zPg0KLSAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNhYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jYWEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL290ZXN0L1R1c2NhbnlSdW50aW1lQnJpZGdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNmU1NjYuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNhYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzOCArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0Ow0KLQ0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7DQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7DQotDQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7DQotaW1wb3J0IGphdmEuaW8uRmlsZTsNCi1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOw0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5Ow0KLQ0KLWltcG9ydCBjbGllbnQuUnVudGltZUJyaWRnZTsNCi1pbXBvcnQgY2xpZW50LlRlc3RDb25maWd1cmF0aW9uOw0KLQ0KLS8qKg0KLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdW50aW1lIEJyaWRnZSBmb3IgdGhlIEFwYWNoZSBUdXNjYW55IFNDQSBydW50aW1lICh2ZXJzaW9uIDIueCkNCi0gKg0KLSAqLw0KLXB1YmxpYyBjbGFzcyBUdXNjYW55UnVudGltZUJyaWRnZSBpbXBsZW1lbnRzIFJ1bnRpbWVCcmlkZ2Ugew0KLQ0KLSAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRSSUJVVElPTl9MT0NBVElPTl9QUk9QS0VZID0gIk9BU0lTX1RFU1RFTlZfQ09OVFJJQlVUSU9OX0xPQ0FUSU9OIjsNCi0NCi0gICAgcHJvdGVjdGVkIE5vZGVGYWN0b3J5IGxhdW5jaGVyOw0KLSAgICBwcm90ZWN0ZWQgTm9kZSBub2RlOw0KLSAgICBwcm90ZWN0ZWQgUHJvcGVydGllcyBleHBlY3RlZEVycm9yTWVzc2FnZXM7DQotICAgIA0KLSAgICBUZXN0Q29uZmlndXJhdGlvbiB0ZXN0Q29uZmlndXJhdGlvbiA9IG51bGw7DQotDQotICAgIHB1YmxpYyBUdXNjYW55UnVudGltZUJyaWRnZSgpIHsNCi0gICAgICAgIC8vIHJlYWQgdGVzdCBlcnJvciBtYXBwaW5nDQotICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZXMgPSBuZXcgUHJvcGVydGllcygpOw0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBJbnB1dFN0cmVhbSBwcm9wZXJ0aWVzU3RyZWFtID0gdGhpcy5nZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oIi90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyIpOw0KLSAgICAgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlcy5sb2FkKHByb3BlcnRpZXNTdHJlYW0pOw0KLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyAgIA0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIHJlYWQgb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIGZpbGUiKTsNCi0gICAgICAgIH0gDQotICAgIH0NCi0NCi0gICAgcHVibGljIFRlc3RDb25maWd1cmF0aW9uIGdldFRlc3RDb25maWd1cmF0aW9uKCkgew0KLSAgICAgICAgcmV0dXJuIHRlc3RDb25maWd1cmF0aW9uOw0KLSAgICB9DQotDQotICAgIHB1YmxpYyB2b2lkIHNldFRlc3RDb25maWd1cmF0aW9uKFRlc3RDb25maWd1cmF0aW9uIHRlc3RDb25maWd1cmF0aW9uKSB7DQotICAgICAgICB0aGlzLnRlc3RDb25maWd1cmF0aW9uID0gdGVzdENvbmZpZ3VyYXRpb247DQotICAgIH0NCi0NCi0JcHVibGljIGJvb2xlYW4gc3RhcnRDb250cmlidXRpb24oU3RyaW5nIGNvbXBvc2l0ZU5hbWUsDQotCQkJU3RyaW5nIGNvbnRyaWJ1dGlvbkxvY2F0aW9uLCBTdHJpbmdbXSBjb250cmlidXRpb25OYW1lcykNCi0JCQl0aHJvd3MgRXhjZXB0aW9uIHsNCi0JCS8vVE9ETzoNCi0JCXJldHVybiBzdGFydENvbnRyaWJ1dGlvbihjb250cmlidXRpb25Mb2NhdGlvbiwgY29udHJpYnV0aW9uTmFtZXMpOw0KLQl9DQotCQ0KLSAgICBwdWJsaWMgYm9vbGVhbiBzdGFydENvbnRyaWJ1dGlvbihTdHJpbmcgY29udHJpYnV0aW9uTG9jYXRpb24sIFN0cmluZ1tdIGNvbnRyaWJ1dGlvbk5hbWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgLy8gVHVzY2FueSBzcGVjaWZpYyBjb2RlIHdoaWNoIHN0YXJ0cyB0aGUgY29udHJpYnV0aW9uKHMpIGhvbGRpbmcgdGhlIHRlc3QNCi0gICAgICAgICAgICBQcm9wZXJ0aWVzIHBzID0gbmV3IFByb3BlcnRpZXMoKTsNCi0gICAgICAgICAgICBwcy5zZXRQcm9wZXJ0eSgiZGVmYXVsdFNjaGVtZSIsICJ2bSIpOw0KLSAgICAgICAgICAgIHBzLnNldFByb3BlcnR5KCJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3MucmkuSkFYV1NCaW5kaW5nUHJvdmlkZXJGYWN0b3J5LmRlZmF1bHRQb3J0IiwgIjgwODAiKTsNCi0gICAgICAgICAgICBsYXVuY2hlciA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKHBzKTsNCi0NCi0gICAgICAgICAgICBDb250cmlidXRpb25bXSBjb250cmlidXRpb25zID0gbmV3IENvbnRyaWJ1dGlvbltjb250cmlidXRpb25OYW1lcy5sZW5ndGhdOw0KLSAgICAgICAgICAgIFN0cmluZ1tdIGNvbnRyaWJ1dGlvblVSSXMgPSBnZXRDb250cmlidXRpb25VUklzKGNvbnRyaWJ1dGlvbkxvY2F0aW9uKTsNCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHsNCi0gICAgICAgICAgICAgICAgY29udHJpYnV0aW9uc1tpXSA9IG5ldyBDb250cmlidXRpb24oY29udHJpYnV0aW9uTmFtZXNbaV0sIGNvbnRyaWJ1dGlvblVSSXNbaV0pOw0KLSAgICAgICAgICAgIH0gLy8gZW5kIGZvcg0KLQ0KLSAgICAgICAgICAgIG5vZGUgPSBsYXVuY2hlci5jcmVhdGVOb2RlKHRlc3RDb25maWd1cmF0aW9uLmdldENvbXBvc2l0ZSgpLCBjb250cmlidXRpb25zKTsNCi0gICAgICAgICAgICAvLyBTdGFydCB0aGUgbm9kZQ0KLSAgICAgICAgICAgIG5vZGUuc3RhcnQoKTsNCi0gICAgICAgICAgICANCi0gICAgICAgICAgICAvLyBGb3IgZGVidWdnaW5nIA0KLSAgICAgICAgICAgIC8vIHByaW50IG91dCB0aGUgY29tcG9zaXRlcyB0aGF0IGhhdmUgYmVlbiByZWFkIGluIHN1Y2Nlc3MgY2FzZXMNCi0gICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oKChOb2RlSW1wbClub2RlKS5kdW1wRG9tYWluQ29tcG9zaXRlKCkpOw0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOw0KLSAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAgICAgDQotICAgICAgICAgICAgdGhyb3cgZTsNCi0gICAgICAgIH0gLy8gZW5kIHRyeQ0KLQ0KLSAgICAgICAgcmV0dXJuIHRydWU7DQotICAgIH0gLy8gZW5kIG1ldGhvZCBzdGFydENvbnRyaWJ1dGlvbg0KLQ0KLSAgICAvKioNCi0gICAgICogR2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbnMgYXMgVVJJcw0KLSAgICAgKiBAcGFyYW0gY29udHJpYnV0aW9uTG9jYXRpb24gLSBhIGxvY2F0aW9uIHBhdHRlcm4gVVJJLCB3aGljaCBjb250YWlucyBvbmUgb3IgbW9yZSAiJTEiDQotICAgICAqIHN1YnN0cmluZ3MsIHdoaWNoIGFyZSBzdWJzdGl0dXRlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjb250cmlidXRpb24gdG8gZ2V0IHRoZSBVUkkgb2YNCi0gICAgICogdGhlIGNvbnRyaWJ1dGlvbg0KLSAgICAgKiBAcmV0dXJuIHRoZSBjb250cmlidXRpb24gbG9jYXRpb25zIGFzIGFuIGFycmF5IG9mIFN0cmluZ3MNCi0gICAgICovDQotICAgIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRDb250cmlidXRpb25VUklzKFN0cmluZyBjb250cmlidXRpb25Mb2NhdGlvbikgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICBTdHJpbmdbXSBsb2NhdGlvbnM7DQotICAgICAgICBsb2NhdGlvbnMgPSB0ZXN0Q29uZmlndXJhdGlvbi5nZXRDb250cmlidXRpb25OYW1lcygpOw0KLQ0KLSAgICAgICAgaWYgKGxvY2F0aW9ucyAhPSBudWxsICYmIGNvbnRyaWJ1dGlvbkxvY2F0aW9uICE9IG51bGwpIHsNCi0NCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGg7IGkrKykgew0KLSAgICAgICAgICAgICAgICBTdHJpbmcgYUxvY2F0aW9uID0gY29udHJpYnV0aW9uTG9jYXRpb24ucmVwbGFjZUFsbCgiJTEiLCBsb2NhdGlvbnNbaV0pOw0KLSAgICAgICAgICAgICAgICAvLyBMb29rcyBsaWtlIGJ1Z3MgaW4gdGhlIG9hc2lzIGNvZGUgdGhhdCBzb21ldGltZXMgc3RpbGwgdXNlcyBqYXJzIGZvciBzb21lDQotICAgICAgICAgICAgICAgIGlmIChhTG9jYXRpb24uZW5kc1dpdGgoIl9QT0pPLnppcCIpICYmICFhTG9jYXRpb24uZW5kc1dpdGgoIkFTTV84MDA1X0phdmEtMS4wLnppcCIpKSB7DQotICAgICAgICAgICAgICAgICAgICBhTG9jYXRpb24gPSBhTG9jYXRpb24uc3Vic3RyaW5nKDAsIGFMb2NhdGlvbi5sZW5ndGgoKS0zKSArICJqYXIiOyAgICAgICAgICAgICAgICAJDQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKCEobmV3IEZpbGUoYUxvY2F0aW9uKSkuZXhpc3RzKCkpIHsNCi0gICAgICAgICAgICAgICAgCWFMb2NhdGlvbiA9IGFMb2NhdGlvbi5yZXBsYWNlKCIuemlwIiwgIi5qYXIiKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBsb2NhdGlvbnNbaV0gPSBhTG9jYXRpb247DQotICAgICAgICAgICAgfSAvLyBlbmQgZm9yICAgIAkgIAkNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgaWYgKGxvY2F0aW9ucyA9PSBudWxsKSB7DQotICAgICAgICAgICAgICAgIC8vIE5vIGNvbnRyaWJ1dGlvbiBzcGVjaWZpZWQgLSB0aHJvdyBhbiBFeGNlcHRpb24NCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIHN0YXJ0IFNDQSBydW50aW1lIC0gbm8gY29udHJpYnV0aW9uIHN1cHBsaWVkIC0gZXJyb3IiKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICAvLyBObyBjb250cmlidXRpb24gbG9jYXRpb24gc3VwcGxpZWQgLSB0aHJvdyBhbiBFeGNlcHRpb24NCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIHN0YXJ0IFNDQSBydW50aW1lIC0gbm8gY29udHJpYnV0aW9uIGxvY2F0aW9uIHN1cHBsaWVkIC0gZXJyb3IiKTsNCi0gICAgICAgICAgICB9IC8vIGVuZCBpZiANCi0gICAgICAgIH0gLy8gZW5kIGlmDQotDQotICAgICAgICByZXR1cm4gbG9jYXRpb25zOw0KLSAgICB9IC8vIGVuZCBnZXRDb250cmlidXRpb25VUkkNCi0NCi0gICAgcHVibGljIHZvaWQgc3RvcENvbnRyaWJ1dGlvbigpIHsNCi0gICAgICAgIGlmIChub2RlICE9IG51bGwpIHsNCi0gICAgICAgICAgICBub2RlLnN0b3AoKTsNCi0gICAgICAgIH0gLy8gZW5kIGlmDQotICAgICAgICBpZiAobGF1bmNoZXIgIT0gbnVsbCkgew0KLSAgICAgICAgICAgIGxhdW5jaGVyLmRlc3Ryb3koKTsNCi0gICAgICAgIH0gLy8gZW5kIGlmDQotICAgIH0gLy8gZW5kIG1ldGhvZCBzdG9wQ29udHJpYnV0aW9uDQotDQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udHJpYnV0aW9uTG9jYXRpb24oQ2xhc3M8Pz4gdGVzdENsYXNzKSB7DQotICAgICAgICByZXR1cm4gQ29udHJpYnV0aW9uTG9jYXRpb25IZWxwZXIuZ2V0Q29udHJpYnV0aW9uTG9jYXRpb24odGVzdENvbmZpZ3VyYXRpb24uZ2V0VGVzdENsYXNzKCkpOw0KLSAgICB9IC8vIGVuZCBtZXRob2QgZ2V0Q29udHJpYnV0aW9uTG9jYXRpb24NCi0gICAgDQotICAgIHB1YmxpYyB2b2lkIGNoZWNrRXJyb3IoU3RyaW5nIHRlc3ROYW1lLCBUaHJvd2FibGUgZXgpIHRocm93cyBUaHJvd2FibGUgeyANCi0gICAgICAgICAgICAgIA0KLSAgICAgICAgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZSA9IGV4cGVjdGVkRXJyb3JNZXNzYWdlcy5nZXRQcm9wZXJ0eSh0ZXN0TmFtZSk7DQotICAgICAgICBTdHJpbmcgcmVjZWl2ZWRNZXNzYWdlID0gZXguZ2V0TWVzc2FnZSgpOw0KLSAgICAgICAgDQotICAgICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlID09IG51bGwpew0KLSAgICAgICAgICAgIHdyaXRlTWlzc2luZ01lc3NhZ2UodGVzdE5hbWUsIGV4KTsNCi0gICAgICAgICAgICBmYWlsKCJOdWxsIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2UgZm9yIHRlc3QgIiArIHRlc3ROYW1lICsgDQotICAgICAgICAgICAgICAgICAiUGxlYXNlIGFkZCBtZXNzYWdlIHRvIG9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyIpOw0KLSAgICAgICAgfSAvLyBlbmQgaWYNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKHJlY2VpdmVkTWVzc2FnZSA9PSBudWxsKXsNCi0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsNCi0gICAgICAgICAgICBmYWlsKCJOdWxsIHJlY2VpdmVkIGVycm9yIG1lc3NhZ2UgZm9yIHRlc3QgIiArIHRlc3ROYW1lKTsNCi0gICAgICAgIH0gLy8gZW5kIGlmDQotDQotICAgICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlLnN0YXJ0c1dpdGgoIioiKSkgew0KLSAgICAgICAgICAgIC8vIGFsbG93IHVzaW5nICogdG8gaWdub3JlIGEgbWVzc2FnZSBjb21wYXJpc29uDQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICAvLyBEZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIG1lc3NhZ2UgaGFzIHZhcmlhYmxlIHBhcnRzIHdpdGhpbiBpdA0KLSAgICAgICAgLy8gbWFya2VkIHdpdGggdGhlIGNoYXJhY3RlcnMgKioqLiBIZXJlIHdlIHRva2VuaXplIHRoZSBlcGVjdGVkIHN0cmluZyANCi0gICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBpbmRpdmlkdWFsIHBhcnRzIGFyZSBwcmVzZW50IGluIHRoZSByZXN1bHRzIHN0cmluZw0KLSAgICAgICAgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZVBhcnRzW10gPSBleHBlY3RlZE1lc3NhZ2Uuc3BsaXQoIlxcKlxcKlxcKiIpOw0KLSAgICAgICAgDQotICAgICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoID4gMSl7DQotICAgICAgICAgICAgaW50IGZvdW5kUGFydHMgPSAwOw0KLSAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGg7IGkrKyl7DQotICAgICAgICAgICAgICAgIGlmIChyZWNlaXZlZE1lc3NhZ2UuaW5kZXhPZihleHBlY3RlZE1lc3NhZ2VQYXJ0c1tpXSkgPiAtMSApew0KLSAgICAgICAgICAgICAgICAgICAgZm91bmRQYXJ0cysrOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIA0KLSAgICAgICAgICAgIGlmIChmb3VuZFBhcnRzID09IGV4cGVjdGVkTWVzc2FnZVBhcnRzLmxlbmd0aCl7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICANCi0gICAgICAgIC8vIERlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlIGlzIHZhcmlhYmxlIChlZyBjb250YWlucyBhYnNvbHV0ZSBmaWxlbmFtZXMpIA0KLSAgICAgICAgLy8gYW5kIHdoZXJlIHRoZSBvbmx5IHJlbGV2YW50IHBhcnQgaXMgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlIC0gaW4gdGhpcyBjYXNlIHRoZSBleHBlY3RlZA0KLSAgICAgICAgLy8gbWVzc2FnZSBvbmx5IGNvbnRhaW5zIHRoZSBzdGVtIHNlY3Rpb24gd2hpY2ggaXMgdW5jaGFuZ2luZy4uLg0KLSAgICAgICAgaWYoIHJlY2VpdmVkTWVzc2FnZS5sZW5ndGgoKSA+IGV4cGVjdGVkTWVzc2FnZS5sZW5ndGgoKSApIHsNCi0gICAgICAgICAgICAvLyBUcnVuY2F0ZSB0aGUgcmVjZWl2ZWQgbWVzc2FnZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBleHBlY3RlZCBtZXNzYWdlDQotICAgICAgICAgICAgcmVjZWl2ZWRNZXNzYWdlID0gcmVjZWl2ZWRNZXNzYWdlLnN1YnN0cmluZygwLCBleHBlY3RlZE1lc3NhZ2UubGVuZ3RoKCkgKTsNCi0gICAgICAgIH0gLy8gZW5kIGlmDQotDQotICAgICAgICBpZiAoIWV4cGVjdGVkTWVzc2FnZS5lcXVhbHMocmVjZWl2ZWRNZXNzYWdlKSkgew0KLSAgICAgICAgICAgIHdyaXRlSW5jb3JyZWN0TWVzc2FnZSh0ZXN0TmFtZSwgZXhwZWN0ZWRNZXNzYWdlLCByZWNlaXZlZE1lc3NhZ2UpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICBhc3NlcnRFcXVhbHMoIGV4cGVjdGVkTWVzc2FnZSwgcmVjZWl2ZWRNZXNzYWdlICk7DQotICAgICAgICANCi0gICAgICAgIHJldHVybjsNCi0gICAgICAgDQotICAgIH0NCi0NCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVNaXNzaW5nTWVzc2FnZShTdHJpbmcgdGVzdE5hbWUsIFRocm93YWJsZSBleCkgew0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBCdWZmZXJlZFdyaXRlciBvdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoInRhcmdldC9PVGVzdE1pc3NpbmdNc2dzLnR4dCIsIHRydWUpKTsNCi0gICAgICAgICAgICBvdXQud3JpdGUodGVzdE5hbWUgKyAiPSoiKTsNCi0gICAgICAgICAgICBvdXQubmV3TGluZSgpOw0KLSAgICAgICAgICAgIG91dC5jbG9zZSgpOw0KLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KLSAgICAgICAgfSANCi0gICAgfQ0KLQ0KLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZUluY29ycmVjdE1lc3NhZ2UoU3RyaW5nIHRlc3ROYW1lLCBTdHJpbmcgZXhwZWN0ZWQsIFN0cmluZyByZWNlaXZlZCkgew0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBCdWZmZXJlZFdyaXRlciBvdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoInRhcmdldC9PVGVzdEluY29ycmVjdE1zZ3MudHh0IiwgdHJ1ZSkpOw0KLSAgICAgICAgICAgIG91dC53cml0ZSh0ZXN0TmFtZSk7IG91dC5uZXdMaW5lKCk7DQotICAgICAgICAgICAgb3V0LndyaXRlKCIgICAgIiArIGV4cGVjdGVkKTsgb3V0Lm5ld0xpbmUoKTsNCi0gICAgICAgICAgICBvdXQud3JpdGUoIiAgICAiICsgcmVjZWl2ZWQpOyBvdXQubmV3TGluZSgpOw0KLSAgICAgICAgICAgIG91dC5jbG9zZSgpOw0KLSAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KLSAgICAgICAgfSANCi0gICAgfQ0KLQ0KLX0gLy8gZW5kIGNsYXNzIFR1c2NhbnlSdW50aW1lQnJpZGdlDQpkaWZmIC0tZ2l0IGEvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNhYS9zcmMvdGVzdC9yZXNvdXJjZXMvb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMgYi9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhlMWUwMS4uMDAwMDAwMAotLS0gYS9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMgDQotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMgDQotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0jIHVuZGVyIHRoZSBMaWNlbnNlLiANCi0NCi0jIE9BU0lTIFNDQSBBc3NlbWJseSB0ZXN0IHByb3BlcnRpZXMNCi0jIFRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlIHRvIHVzZSBmb3IgQXNzZW1ibHkgdGVzdCBzdWl0ZQ0KLSMgb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5sYW5nPUJQRUwNCi1vcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5Lmxhbmc9UE9KTw0KLQ0KLSMgVGhlIGNsYXNzIHRvIHVzZSBhcyB0aGUgUnVudGltZSBCcmlkZ2UgZm9yIHRoZSBTQ0EgcnVudGltZSB1bmRlciB0ZXN0DQotI29yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkucnVudGltZV9icmlkZ2U9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdC5UdXNjYW55T1NHaVJ1bnRpbWVCcmlkZ2UNCi1vcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LnJ1bnRpbWVfYnJpZGdlPW9yZy5hcGFjaGUudHVzY2FueS5zY2Eub3Rlc3QuVHVzY2FueVJ1bnRpbWVCcmlkZ2UNCi0NCi0jIFRoZSBsb2NhdGlvbiBvZiB0aGUgY29udHJpYnV0aW9ucyBmb3IgdGhlIHRlc3Qgc3VpdGUNCi0jICUxIHJlcHJlc2VudHMgdGhlIHBsYWNlbWVudCBvZiB0aGUgbmFtZSBvZiBlYWNoIGNvbnRyaWJ1dGlvbiBpbnRvIHRoZSBsb2NhdGlvbiBVUkkNCi1vcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LmNvbnRyaWJ1dGlvbi5sb2NhdGlvbj10YXJnZXQvb2FzaXMtY29udHJpYnV0aW9ucy8lMS56aXANCi0NCmRpZmYgLS1naXQgYS9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyBiL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jYWEvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTAwMTcyLi4wMDAwMDAwCi0tLSBhL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jYWEvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotIyANCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotIyANCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KLUpDQV8yMDAxPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk92ZXJsb2FkZWRPcGVyYXRpb25FeGNlcHRpb246IFtKQ0EyMDAwMV0gQ2Fubm90IG92ZXJsb2FkIG9wZXJhdGlvbiBvcGVyYXRpb24xIG9uIG9yZy5vYXNpc29wZW4uc2NhLnRlc3QuU2VydmljZTFPdmVybG9hZCBhcyBpdCBpcyBhIEBSZW1vdGFibGUgaW50ZXJmYWNlDQotSkNBXzMwMDE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEpDQV8zMDAxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV8zMDAxXSAtIENsYXNzIE5vdCBGb3VuZCBFeGNlcHRpb246IFNlcnZpY2UxDQotSkNBXzMwMDI9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEpDQV8zMDAyLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV8zMDAyXSAtIENsYXNzIE5vdCBGb3VuZCBFeGNlcHRpb246IFNlcnZpY2UxDQotSkNBXzMwMDM9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEpDQV8zMDAzLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV8zMDAzXSAtIENsYXNzIE5vdCBGb3VuZCBFeGNlcHRpb246IFNlcnZpY2UzQ2FsbGJhY2sNCi1KQ0FfMzAwND1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogSkNBXzMwMDQsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfSkNBXzMwMDRdIC0gQ2xhc3MgTm90IEZvdW5kIEV4Y2VwdGlvbjogU2VydmljZTNDYWxsYmFjaw0KLUpDQV8zMDA2PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0pDQV8zMDA2Q29tcG9uZW50Ml0gLSBbQVNNNTAwMDQsSkNBMzAwMDIsSkNJODAwMDFdIENvbXBvbmVudCBzZXJ2aWNlIGludGVyZmFjZSBpbmNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlIGludGVyZmFjZTogQ29tcG9uZW50ID0gVEVTVF9KQ0FfMzAwNkNvbXBvbmVudDIgU2VydmljZSA9IFNlcnZpY2UzV2l0aENhbGxiYWNrIENhbGxiYWNrIG9wZXJhdGlvbiBub3QgZm91bmQgb24gdGFyZ2V0DQotSkNBXzMwMDc9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfSkNBXzMwMDdDb21wb25lbnQxXSAtIFtKQ0EzMDAwMSxKQ0EzMDAwMixKQ0EzMDAwMyxKQ0E5MDA0Nl0gQ29tcG9uZW50IHJlZmVyZW5jZSBpbnRlcmZhY2UgaW5jb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gcmVmZXJlbmNlIGludGVyZmFjZTogQ29tcG9uZW50ID0gVEVTVF9KQ0FfMzAwN0NvbXBvbmVudDEgUmVmZXJlbmNlID0gcmVmZXJlbmNlMSANCi1KQ0FfMzAwOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogSkNBXzMwMDgsIEFydGlmYWN0OiBUZXN0X0pDQV8zMDA4LmNvbXBvc2l0ZV0gLSBYTUxTY2hlbWEgdmFsaWRhdGlvbiBlcnJvciBvY2N1cmVkIGluOiBUZXN0X0pDQV8zMDA4LmNvbXBvc2l0ZSAsbGluZSA9ICoqKiwgY29sdW1uID0gKioqLCBNZXNzYWdlID0gY3ZjLWNvbXBsZXgtdHlwZS4zLjIuMjogQXR0cmlidXRlICdvb3BzJyBpcyBub3QgYWxsb3dlZCB0byBhcHBlYXIgaW4gZWxlbWVudCAnaW50ZXJmYWNlLmphdmEnLg0KLUpDQV8zMDA5PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludmFsaWRBbm5vdGF0aW9uRXhjZXB0aW9uOiBbSkNBMzAwMDVdIEBSZW1vdGFibGUgYW5ub3RhdGlvbiBwcmVzZW50IGluIGEgaW50ZXJmYWNlIG1hcmtlZCBhcyBub3QgcmVtb3RhYmxlIGluIHRoZSBTQ0RMDQotSkNBXzMwMTE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEpDQV8zMDExLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV8zMDExXSAtIFtKQ0EzMDAwNl0gRm9yYmlkZGVuIGFubm90YXRpb24gaW50ZXJmYWNlIG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUHJvcGVydHkgZm91bmQgb24gc2VydmljZSBpbnRlcmZhY2UgaW4gY2xhc3Mgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5KQ0EzMDExU2VydmljZQ0KLUpDQV8zMDEyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBKQ0FfMzAxMiwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9KQ0FfMzAxMl0gLSBbSkNBMzAwMDddIEZvcmJpZGRlbiBhbm5vdGF0aW9uIGludGVyZmFjZSBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlByb3BlcnR5IGZvdW5kIG9uIGNhbGxiYWNrIGludGVyZmFjZSBpbiBjbGFzcyBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LkpDQTMwMTJTZXJ2aWNlM0NhbGxiYWNrDQotSkNBXzEwMDAxPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLklsbGVnYWxQcm9wZXJ0eUV4Y2VwdGlvbjogW0pDQTkwMDAxXSBBcmd1bWVudCAxIG9mIG1ldGhvZCBvcGVyYXRpb24xIGluIGNsYXNzIGNsYXNzIG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRBbm5vdGF0aW9uIGNhbiBub3QgYmUgYSBQcm9wZXJ0eQ0KLUpDQV8xMDAwMj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogSkNBXzEwMDAyLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV8xMDAwMl0gLSBbSkNBOTAwMl0gU0NBIGFubm90YXRpb25zIGFyZSBub3QgcGVybWl0dGVkIG9uIHN0YXRpYyBtZW1iZXJzOiBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxU3RhDQotSkNBXzEwMDAzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBKQ0FfMTAwMDMsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfSkNBXzEwMDAzXSAtIFtKQ0E5MDAyXSBTQ0EgYW5ub3RhdGlvbnMgYXJlIG5vdCBwZXJtaXR0ZWQgb24gc3RhdGljIG1lbWJlcnM6IG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFTdGENCi1KQ0FfMTAwMDQ9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuSWxsZWdhbENhbGxiYWNrUmVmZXJlbmNlRXhjZXB0aW9uOiBbSkNBOTAwNDZdIEBDYWxsYmFjayBvbiBmaWVsZCBvZiBtZXRob2QgbXVzdCBub3QgaGF2ZSBhbnkgcGFyYW1ldGVycw0KLUpDQV8xMDAwNj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5JbnZhbGlkQ29uc3RydWN0b3JFeGNlcHRpb246IEpDQTkwMDAzIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZm9yIGNsYXNzICoqKiBtdXN0IGhhdmUgQFByb3BlcnR5IG9yIEBSZWZlcmVuY2UgYW5ub3RhdGlvbg0KLUpDQV8xMDAwNz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5JbGxlZ2FsRGVzdHJ1Y3RvckV4Y2VwdGlvbjogW0pDQTkwMDA0XSBEZXN0cnVjdG9yIG11c3Qgbm90IGhhdmUgYXJndW1lbnRzDQotSkNBXzEwMDA4PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLklsbGVnYWxJbml0RXhjZXB0aW9uOiBbSkNBOTAwMDhdIEluaXRpYWxpemVyIG11c3Qgbm90IGhhdmUgYXJnbWVudHMNCi1KQ0FfMTAwMDk9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuSWxsZWdhbFByb3BlcnR5RXhjZXB0aW9uOiBbSkNBOTAwMTFdIEZpbmFsIGZpZWxkIHNlcnZpY2VOYW1lIGluIGNsYXNzIG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRQcm9wSW1wbCBjYW4gbm90IGJlIGFubm90YXRlZCBhcyBhIFByb3BlcnR5DQotSkNBXzEwMDEwPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLkludmFsaWRQcm9wZXJ0eUV4Y2VwdGlvbjogW0pDQTkwMDEzXSBNaXNzaW5nIHByb3BlcnR5IG5hbWU6IHB1YmxpYyBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxQ29uc3RyQmFkUHJvcEltcGwoamF2YS5sYW5nLlN0cmluZylbMF0NCi1KQ0FfMTAwMTE9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuSW52YWxpZFByb3BlcnR5RXhjZXB0aW9uOiBbSkNBOTAwMTRdIENvbnN0cnVjdG9yIHByb3BlcnR5IG11c3Qgbm90IGhhdmUgcmVxdWlyZWQ9ZmFsc2U6IG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFDb25zdHJCYWRQcm9wSW1wbA0KLUpDQV8xMDAxND1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5JbnZhbGlkUmVmZXJlbmNlRXhjZXB0aW9uOiBbSkNBOTAwMThdIEBSZWZlcmVuY2UgaW4gYSBDb25zdHJ1Y3RvciBtdXN0IGhhdmUgYSBuYW1lIGF0dHJpYnV0ZW9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFDb25zdHJCYWQNCi1KQ0FfMTAwMTU9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuSW52YWxpZFJlZmVyZW5jZQ0KLUpDQV8xMDA0Nj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW10gLSBbSkNBOTAwNDBdIEV4Y2VwdGlvbiB3aGlsZSBnZW5lcmF0aW5nIFdTREwgZm9yIFRFU1RfSkNBXzEwMDQ2Q29tcG9uZW50MS9Vbm1hcHBhYmxlIGV4Y2VwdGlvbiB3YXM6IA0KLUpDQV8xMDA0Nz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkludHJvc3BlY3Rpb25FeGNlcHRpb246IFtKQ0E5MDA0MV0gQFNjb3BlIGFubm90YXRpb24gbm90IGFsbG93ZWQgb24gc2VydmljZSBpbnRlcmZhY2UNCi1KQ0FfMTAwNDg9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5JbnRyb3NwZWN0aW9uRXhjZXB0aW9uOiBbSkNBOTAwNDIsSkNJMjAwMDJdIEltcGxlbWVudGF0aW9uIG1pc3Npbmcgc2VydmljZSBtZXRob2Qgb3BlcmF0aW9uMiBzZXJ2aWNlIGludGVyZmFjZSBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2UxU3VwZXJzZXQNCi1KQ0FfMTAwNDk9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5JbnRyb3NwZWN0aW9uRXhjZXB0aW9uOiBbSkNBOTAwNTBdIFRoZSBudW1iZXIgb2YgU3RyaW5ncyBpbiB0aGUgbmFtZXMgYXR0cmlidXRlIGFycmF5IG9mIHRoZSBAU2VydmljZSBhbm5vdGF0aW9uIE1VU1QgbWF0Y2ggdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdmFsdWUgYXR0cmlidXRlIGFycmF5DQotSkNBXzEwMDUwPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0pDQV8xMDA1MENvbXBvbmVudDFdIC0gW0FTTTQwMDAzLEFTTTYwMDAzLEpDQTkwMDQ1XSBEdXBsaWNhdGUgaW1wbGVtZW50YXRpb24gc2VydmljZSBuYW1lOiBDb21wb25lbnQgPSBURVNUX0pDQV8xMDA1MENvbXBvbmVudDEgU2VydmljZSA9IFNlcnZpY2UxDQotSkNBXzEwMDUxPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuSW50cm9zcGVjdGlvbkV4Y2VwdGlvbjogW0pDQTkwMDU5XSBUaGUgYXJyYXkgb2YgaW50ZXJmYWNlcyBvciBjbGFzc2VzIHNwZWNpZmllZCBieSB0aGUgdmFsdWUgYXR0cmlidXRlIG9mIHRoZSBAU2VydmljZSBhbm5vdGF0aW9uIA0KLUpDQV8xMDA1Mj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkludHJvc3BlY3Rpb25FeGNlcHRpb246IFtKQ0E5MDA2MF0gVGhlIHZhbHVlIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgQFNlcnZpY2UgbmFtZXMgYXJyYXkgTVVTVCBiZSB1bmlxdWUgYW1vbmdzdCBhbGwgdGhlIG90aGVyIGVsZW1lbnQgdmFsdWVzIGluIHRoZSBhcnJheQ0KLUpDQV8xMTAwNT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvbmVudDogVEVTVF9KQ0FfMTEwMDVDb21wb25lbnQxLCBTZXJ2aWNlOiBTZXJ2aWNlMV0gLSBbSkNBMTAwMDA2XSBKQVgtV1MgY2xpZW50LXNpZGUgYXN5bmNocm9ub3VzIHBvbGxpbmcgYW5kIGNhbGxiYWNrIG1ldGhvZHMgYXJlIG5vdCBhbGxvd2VkIGluIHNlcnZpY2UgaW50ZXJmYWNlcw0KLSMgSW50ZW50IGFuZCBQb2xpY3lTZXQgcmVsYXRlZCB0ZXN0cw0KLUpDQV84MDAxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0pDQV84MDAxQ29tcG9uZW50MSwgU2VydmljZTogU2VydmljZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXRlc3RJbnRlbnQyIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9dGVzdEludGVudDEgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KLUpDQV84MDAyPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogUHJvY2Vzc2luZyBjb21wb3NpdGUge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfSkNBXzgwMDI6IFJlc29sdmluZyBKYXZhIGltcGxlbWVudGF0aW9uOiBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxQmFkSW50ZW50LCBbSkNBNzAwMDIsSkNBNzAwMDVdIE1ldGhvZCB0aGF0IGlzIG5vdCBhbiBTQ0EgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIHBvbGljeVNldC9pbnRlbnQgYW5ub3RhdGlvbnM6IHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRJbnRlbnQub3BlcmF0aW9uMShqYXZhLmxhbmcuU3RyaW5nKQ0KLUpDQV84MDAzPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogUHJvY2Vzc2luZyBjb21wb3NpdGUge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfSkNBXzgwMDM6IFJlc29sdmluZyBKYXZhIGltcGxlbWVudGF0aW9uOiBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxQmFkSW50ZW50LCBbSkNBNzAwMDIsSkNBNzAwMDVdIEZpZWxkIHRoYXQgaXMgbm90IGFuIFNDQSByZWZlcmVuY2UgY2Fubm90IGhhdmUgcG9saWN5U2V0L2ludGVudCBhbm5vdGF0aW9uczogcHVibGljIGphdmEubGFuZy5TdHJpbmcgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZEludGVudC5zb21lRmllbGQNCi1KQ0FfODAwND1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IFByb2Nlc3NpbmcgY29tcG9zaXRlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV84MDA0OiBSZXNvbHZpbmcgSmF2YSBpbXBsZW1lbnRhdGlvbjogb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZEludGVudCwgW0pDQTcwMDAyLEpDQTcwMDA1XSBDb25zdHJ1Y3RvciBwYXJhbWV0ZXIgdGhhdCBpcyBub3QgYW4gU0NBIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBwb2xpY3lTZXQvaW50ZW50IGFubm90YXRpb25zOiBwdWJsaWMgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZEludGVudChqYXZhLmxhbmcuU3RyaW5nKVswXQ0KLUpDQV84MDA2PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0pDQV84MDA2Q29tcG9uZW50MSwgU2VydmljZTogU2VydmljZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXRlc3RJbnRlbnQyIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9dGVzdEludGVudDEgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KLUpDQV84MDA4PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogUHJvY2Vzc2luZyBjb21wb3NpdGUge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfSkNBXzgwMDg6IFJlc29sdmluZyBKYXZhIGltcGxlbWVudGF0aW9uOiBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxQmFkUG9saWN5U2V0LCBbSkNBNzAwMDIsSkNBNzAwMDVdIE1ldGhvZCB0aGF0IGlzIG5vdCBhbiBTQ0EgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIHBvbGljeVNldC9pbnRlbnQgYW5ub3RhdGlvbnM6IHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRQb2xpY3lTZXQub3BlcmF0aW9uMShqYXZhLmxhbmcuU3RyaW5nKQ0KLUpDQV84MDA5PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogUHJvY2Vzc2luZyBjb21wb3NpdGUge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfSkNBXzgwMDk6IFJlc29sdmluZyBKYXZhIGltcGxlbWVudGF0aW9uOiBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxQmFkUG9saWN5U2V0LCBbSkNBNzAwMDIsSkNBNzAwMDVdIEZpZWxkIHRoYXQgaXMgbm90IGFuIFNDQSByZWZlcmVuY2UgY2Fubm90IGhhdmUgcG9saWN5U2V0L2ludGVudCBhbm5vdGF0aW9uczogcHVibGljIGphdmEubGFuZy5TdHJpbmcgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZFBvbGljeVNldC5zb21lRmllbGQNCi1KQ0FfODAxMD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IFByb2Nlc3NpbmcgY29tcG9zaXRlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV84MDEwOiBSZXNvbHZpbmcgSmF2YSBpbXBsZW1lbnRhdGlvbjogb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZFBvbGljeVNldCwgW0pDQTcwMDAyLEpDQTcwMDA1XSBDb25zdHJ1Y3RvciBwYXJhbWV0ZXIgdGhhdCBpcyBub3QgYW4gU0NBIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBwb2xpY3lTZXQvaW50ZW50IGFubm90YXRpb25zOiBwdWJsaWMgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZFBvbGljeVNldChqYXZhLmxhbmcuU3RyaW5nKVswXQ0KLQ0KZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9wb20ueG1sIGIvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNpL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYTYxZDUuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNpL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0czwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb21wbGlhbmNlLXRlc3QtamF2YS1jaTwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNwZWNpZmljYXRpb24gQ29tcGxpYW5jZSBUZXN0cyBKYXZhIENJPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPCEtLSBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGdldCB0aGUgbW9kdWxlIHdvcmtpbmcgaW4gRWNsaXBzZSB3aGljaCBkb2Vzbid0IHBpY2sgaXQgdXAgZnJvbSB0aGUgZGVwZW5kZW5jeSBwbHVnaW4gdW5wYWNrIC0tPg0KLSAgICAgICAgICAgIDwhLS0gVGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayBpcyBuZWVkZWQgYXMgcHJlc2VudGx5IHRoZSBzdXJlZmlyZSBwbHVnaW4gd29udCBydW4gdGVzdHMgaW4gYSBkZXBlbmRlbmN5IGphciAtLT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLWphdmFjaS10ZXN0LXJ1bm5lcjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4xLjAtU05BUFNIT1Q8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2U8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgIDwhLS0gVGhpcyBpcyBuZWVkIHdoZW4gcnVubmluZyB3aXRoIFN1biBKREsgd2hpY2ggZ2V0cyBhbiB1bnN1cHBvcnRlZCBvcGVyYXRpb24gZXhjZXB0aW9uIGNyZWF0aW5nIGFuIFhNTFN0cmVhbVJlYWRlciBmcm9tIGEgRE9NU291cmNlDQotICAgICAgICAgICAgIHdoZW4gVHVzY2FueSBpcyB3cml0aW5nIGEgcHJvcGVydHkgdmFsdWUgIC0tPg0KLSAgICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy53b29kc3RveDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3R4LWFzbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4zLjIuNDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zdGF4PC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RheC1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuNTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgPGJ1aWxkPg0KLSAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgICAgICAgICAgICAgDQotICAgICAgPHBsdWdpbj4NCi0gICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQotICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgPGV4Y2x1ZGVzPg0KLSAgICAgICAgICAgPC9leGNsdWRlcz4NCi0gICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgPC9wbHVnaW4+DQotDQotICAgICAgPHBsdWdpbj4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgPGlkPnVucGFjazwvaWQ+DQotICAgICAgICAgICAgPHBoYXNlPnRlc3QtY29tcGlsZTwvcGhhc2U+DQotICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgPGdvYWw+dW5wYWNrPC9nb2FsPg0KLSAgICAgICAgICAgIDwvZ29hbHM+DQotICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbXM+DQotICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vYXNpcy1qYXZhY2ktY29udHJpYnV0aW9uczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+DQotICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vb2FzaXMtY29udHJpYnV0aW9uczwvb3V0cHV0RGlyZWN0b3J5Pg0KLSAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQotICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vYXNpcy1qYXZhY2ktdGVzdC1ydW5uZXI8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPHR5cGU+amFyPC90eXBlPg0KLSAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+Y29tbW9ucy1sb2dnaW5nLnByb3BlcnRpZXMsb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMsdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXM8L2V4Y2x1ZGVzPg0KLSAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3Rlc3QtY2xhc3Nlczwvb3V0cHV0RGlyZWN0b3J5Pg0KLSAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQotICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPg0KLSAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPC9leGVjdXRpb24+DQotICAgICAgICA8L2V4ZWN1dGlvbnM+DQotICAgICAgPC9wbHVnaW4+DQotDQotICAgIDwvcGx1Z2lucz4NCi0gIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM2ZTU2Ni4uMDAwMDAwMAotLS0gYS9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2kvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL290ZXN0L1R1c2NhbnlSdW50aW1lQnJpZGdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLSAqLw0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdDsNCi0NCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOw0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOw0KLQ0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOw0KLWltcG9ydCBqYXZhLmlvLkZpbGU7DQotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCi1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb25Mb2NhdGlvbkhlbHBlcjsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCi0NCi1pbXBvcnQgY2xpZW50LlJ1bnRpbWVCcmlkZ2U7DQotaW1wb3J0IGNsaWVudC5UZXN0Q29uZmlndXJhdGlvbjsNCi0NCi0vKioNCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVudGltZSBCcmlkZ2UgZm9yIHRoZSBBcGFjaGUgVHVzY2FueSBTQ0EgcnVudGltZSAodmVyc2lvbiAyLngpDQotICoNCi0gKi8NCi1wdWJsaWMgY2xhc3MgVHVzY2FueVJ1bnRpbWVCcmlkZ2UgaW1wbGVtZW50cyBSdW50aW1lQnJpZGdlIHsNCi0NCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT05UUklCVVRJT05fTE9DQVRJT05fUFJPUEtFWSA9ICJPQVNJU19URVNURU5WX0NPTlRSSUJVVElPTl9MT0NBVElPTiI7DQotDQotICAgIHByb3RlY3RlZCBOb2RlRmFjdG9yeSBsYXVuY2hlcjsNCi0gICAgcHJvdGVjdGVkIE5vZGUgbm9kZTsNCi0gICAgcHJvdGVjdGVkIFByb3BlcnRpZXMgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzOw0KLSAgICANCi0gICAgVGVzdENvbmZpZ3VyYXRpb24gdGVzdENvbmZpZ3VyYXRpb24gPSBudWxsOw0KLQ0KLSAgICBwdWJsaWMgVHVzY2FueVJ1bnRpbWVCcmlkZ2UoKSB7DQotICAgICAgICAvLyByZWFkIHRlc3QgZXJyb3IgbWFwcGluZw0KLSAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzID0gbmV3IFByb3BlcnRpZXMoKTsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgSW5wdXRTdHJlYW0gcHJvcGVydGllc1N0cmVhbSA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCIvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMiKTsNCi0gICAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZXMubG9hZChwcm9wZXJ0aWVzU3RyZWFtKTsNCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgICANCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byByZWFkIG9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyBmaWxlIik7DQotICAgICAgICB9IA0KLSAgICB9DQotDQotICAgIHB1YmxpYyBUZXN0Q29uZmlndXJhdGlvbiBnZXRUZXN0Q29uZmlndXJhdGlvbigpIHsNCi0gICAgICAgIHJldHVybiB0ZXN0Q29uZmlndXJhdGlvbjsNCi0gICAgfQ0KLQ0KLSAgICBwdWJsaWMgdm9pZCBzZXRUZXN0Q29uZmlndXJhdGlvbihUZXN0Q29uZmlndXJhdGlvbiB0ZXN0Q29uZmlndXJhdGlvbikgew0KLSAgICAgICAgdGhpcy50ZXN0Q29uZmlndXJhdGlvbiA9IHRlc3RDb25maWd1cmF0aW9uOw0KLSAgICB9DQotDQotCXB1YmxpYyBib29sZWFuIHN0YXJ0Q29udHJpYnV0aW9uKFN0cmluZyBjb21wb3NpdGVOYW1lLA0KLQkJCVN0cmluZyBjb250cmlidXRpb25Mb2NhdGlvbiwgU3RyaW5nW10gY29udHJpYnV0aW9uTmFtZXMpDQotCQkJdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQkvL1RPRE86DQotCQlyZXR1cm4gc3RhcnRDb250cmlidXRpb24oY29udHJpYnV0aW9uTG9jYXRpb24sIGNvbnRyaWJ1dGlvbk5hbWVzKTsNCi0JfQ0KLQkNCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRDb250cmlidXRpb24oU3RyaW5nIGNvbnRyaWJ1dGlvbkxvY2F0aW9uLCBTdHJpbmdbXSBjb250cmlidXRpb25OYW1lcykgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIC8vIFR1c2Nhbnkgc3BlY2lmaWMgY29kZSB3aGljaCBzdGFydHMgdGhlIGNvbnRyaWJ1dGlvbihzKSBob2xkaW5nIHRoZSB0ZXN0DQotICAgICAgICAgICAgUHJvcGVydGllcyBwcyA9IG5ldyBQcm9wZXJ0aWVzKCk7DQotICAgICAgICAgICAgcHMuc2V0UHJvcGVydHkoImRlZmF1bHRTY2hlbWUiLCAidm0iKTsNCi0gICAgICAgICAgICBwcy5zZXRQcm9wZXJ0eSgib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLnJpLkpBWFdTQmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5kZWZhdWx0UG9ydCIsICI4MDgwIik7DQotICAgICAgICAgICAgbGF1bmNoZXIgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZShwcyk7DQotDQotICAgICAgICAgICAgQ29udHJpYnV0aW9uW10gY29udHJpYnV0aW9ucyA9IG5ldyBDb250cmlidXRpb25bY29udHJpYnV0aW9uTmFtZXMubGVuZ3RoXTsNCi0gICAgICAgICAgICBTdHJpbmdbXSBjb250cmlidXRpb25VUklzID0gZ2V0Q29udHJpYnV0aW9uVVJJcyhjb250cmlidXRpb25Mb2NhdGlvbik7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250cmlidXRpb25zLmxlbmd0aDsgaSsrKSB7DQotICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbnNbaV0gPSBuZXcgQ29udHJpYnV0aW9uKGNvbnRyaWJ1dGlvbk5hbWVzW2ldLCBjb250cmlidXRpb25VUklzW2ldKTsNCi0gICAgICAgICAgICB9IC8vIGVuZCBmb3INCi0NCi0gICAgICAgICAgICBub2RlID0gbGF1bmNoZXIuY3JlYXRlTm9kZSh0ZXN0Q29uZmlndXJhdGlvbi5nZXRDb21wb3NpdGUoKSwgY29udHJpYnV0aW9ucyk7DQotICAgICAgICAgICAgLy8gU3RhcnQgdGhlIG5vZGUNCi0gICAgICAgICAgICBub2RlLnN0YXJ0KCk7DQotICAgICAgICAgICAgDQotICAgICAgICAgICAgLy8gRm9yIGRlYnVnZ2luZyANCi0gICAgICAgICAgICAvLyBwcmludCBvdXQgdGhlIGNvbXBvc2l0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZCBpbiBzdWNjZXNzIGNhc2VzDQotICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCgoTm9kZUltcGwpbm9kZSkuZHVtcERvbWFpbkNvbXBvc2l0ZSgpKTsNCi0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsNCi0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgICAgIA0KLSAgICAgICAgICAgIHRocm93IGU7DQotICAgICAgICB9IC8vIGVuZCB0cnkNCi0NCi0gICAgICAgIHJldHVybiB0cnVlOw0KLSAgICB9IC8vIGVuZCBtZXRob2Qgc3RhcnRDb250cmlidXRpb24NCi0NCi0gICAgLyoqDQotICAgICAqIEdldHMgdGhlIGxvY2F0aW9uIG9mIHRoZSBDb250cmlidXRpb25zIGFzIFVSSXMNCi0gICAgICogQHBhcmFtIGNvbnRyaWJ1dGlvbkxvY2F0aW9uIC0gYSBsb2NhdGlvbiBwYXR0ZXJuIFVSSSwgd2hpY2ggY29udGFpbnMgb25lIG9yIG1vcmUgIiUxIg0KLSAgICAgKiBzdWJzdHJpbmdzLCB3aGljaCBhcmUgc3Vic3RpdHV0ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29udHJpYnV0aW9uIHRvIGdldCB0aGUgVVJJIG9mDQotICAgICAqIHRoZSBjb250cmlidXRpb24NCi0gICAgICogQHJldHVybiB0aGUgY29udHJpYnV0aW9uIGxvY2F0aW9ucyBhcyBhbiBhcnJheSBvZiBTdHJpbmdzDQotICAgICAqLw0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0Q29udHJpYnV0aW9uVVJJcyhTdHJpbmcgY29udHJpYnV0aW9uTG9jYXRpb24pIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgU3RyaW5nW10gbG9jYXRpb25zOw0KLSAgICAgICAgbG9jYXRpb25zID0gdGVzdENvbmZpZ3VyYXRpb24uZ2V0Q29udHJpYnV0aW9uTmFtZXMoKTsNCi0NCi0gICAgICAgIGlmIChsb2NhdGlvbnMgIT0gbnVsbCAmJiBjb250cmlidXRpb25Mb2NhdGlvbiAhPSBudWxsKSB7DQotDQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhdGlvbnMubGVuZ3RoOyBpKyspIHsNCi0gICAgICAgICAgICAgICAgU3RyaW5nIGFMb2NhdGlvbiA9IGNvbnRyaWJ1dGlvbkxvY2F0aW9uLnJlcGxhY2VBbGwoIiUxIiwgbG9jYXRpb25zW2ldKTsNCi0gICAgICAgICAgICAgICAgLy8gTG9va3MgbGlrZSBidWdzIGluIHRoZSBvYXNpcyBjb2RlIHRoYXQgc29tZXRpbWVzIHN0aWxsIHVzZXMgamFycyBmb3Igc29tZQ0KLSAgICAgICAgICAgICAgICBpZiAoYUxvY2F0aW9uLmVuZHNXaXRoKCJfUE9KTy56aXAiKSAmJiAhYUxvY2F0aW9uLmVuZHNXaXRoKCJBU01fODAwNV9KYXZhLTEuMC56aXAiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgYUxvY2F0aW9uID0gYUxvY2F0aW9uLnN1YnN0cmluZygwLCBhTG9jYXRpb24ubGVuZ3RoKCktMykgKyAiamFyIjsgICAgICAgICAgICAgICAgCQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICghKG5ldyBGaWxlKGFMb2NhdGlvbikpLmV4aXN0cygpKSB7DQotICAgICAgICAgICAgICAgIAlhTG9jYXRpb24gPSBhTG9jYXRpb24ucmVwbGFjZSgiLnppcCIsICIuamFyIik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbG9jYXRpb25zW2ldID0gYUxvY2F0aW9uOw0KLSAgICAgICAgICAgIH0gLy8gZW5kIGZvciAgICAJICAJDQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChsb2NhdGlvbnMgPT0gbnVsbCkgew0KLSAgICAgICAgICAgICAgICAvLyBObyBjb250cmlidXRpb24gc3BlY2lmaWVkIC0gdGhyb3cgYW4gRXhjZXB0aW9uDQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBTQ0EgcnVudGltZSAtIG5vIGNvbnRyaWJ1dGlvbiBzdXBwbGllZCAtIGVycm9yIik7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgLy8gTm8gY29udHJpYnV0aW9uIGxvY2F0aW9uIHN1cHBsaWVkIC0gdGhyb3cgYW4gRXhjZXB0aW9uDQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBTQ0EgcnVudGltZSAtIG5vIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbiBzdXBwbGllZCAtIGVycm9yIik7DQotICAgICAgICAgICAgfSAvLyBlbmQgaWYgDQotICAgICAgICB9IC8vIGVuZCBpZg0KLQ0KLSAgICAgICAgcmV0dXJuIGxvY2F0aW9uczsNCi0gICAgfSAvLyBlbmQgZ2V0Q29udHJpYnV0aW9uVVJJDQotDQotICAgIHB1YmxpYyB2b2lkIHN0b3BDb250cmlidXRpb24oKSB7DQotICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7DQotICAgICAgICAgICAgbm9kZS5zdG9wKCk7DQotICAgICAgICB9IC8vIGVuZCBpZg0KLSAgICAgICAgaWYgKGxhdW5jaGVyICE9IG51bGwpIHsNCi0gICAgICAgICAgICBsYXVuY2hlci5kZXN0cm95KCk7DQotICAgICAgICB9IC8vIGVuZCBpZg0KLSAgICB9IC8vIGVuZCBtZXRob2Qgc3RvcENvbnRyaWJ1dGlvbg0KLQ0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbnRyaWJ1dGlvbkxvY2F0aW9uKENsYXNzPD8+IHRlc3RDbGFzcykgew0KLSAgICAgICAgcmV0dXJuIENvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyLmdldENvbnRyaWJ1dGlvbkxvY2F0aW9uKHRlc3RDb25maWd1cmF0aW9uLmdldFRlc3RDbGFzcygpKTsNCi0gICAgfSAvLyBlbmQgbWV0aG9kIGdldENvbnRyaWJ1dGlvbkxvY2F0aW9uDQotICAgIA0KLSAgICBwdWJsaWMgdm9pZCBjaGVja0Vycm9yKFN0cmluZyB0ZXN0TmFtZSwgVGhyb3dhYmxlIGV4KSB0aHJvd3MgVGhyb3dhYmxlIHsgDQotICAgICAgICAgICAgICANCi0gICAgICAgIFN0cmluZyBleHBlY3RlZE1lc3NhZ2UgPSBleHBlY3RlZEVycm9yTWVzc2FnZXMuZ2V0UHJvcGVydHkodGVzdE5hbWUpOw0KLSAgICAgICAgU3RyaW5nIHJlY2VpdmVkTWVzc2FnZSA9IGV4LmdldE1lc3NhZ2UoKTsNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZSA9PSBudWxsKXsNCi0gICAgICAgICAgICB3cml0ZU1pc3NpbmdNZXNzYWdlKHRlc3ROYW1lLCBleCk7DQotICAgICAgICAgICAgZmFpbCgiTnVsbCBleHBlY3RlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSArIA0KLSAgICAgICAgICAgICAgICAgIlBsZWFzZSBhZGQgbWVzc2FnZSB0byBvYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMiKTsNCi0gICAgICAgIH0gLy8gZW5kIGlmDQotICAgICAgICANCi0gICAgICAgIGlmIChyZWNlaXZlZE1lc3NhZ2UgPT0gbnVsbCl7DQotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7DQotICAgICAgICAgICAgZmFpbCgiTnVsbCByZWNlaXZlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSk7DQotICAgICAgICB9IC8vIGVuZCBpZg0KLQ0KLSAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZS5zdGFydHNXaXRoKCIqIikpIHsNCi0gICAgICAgICAgICAvLyBhbGxvdyB1c2luZyAqIHRvIGlnbm9yZSBhIG1lc3NhZ2UgY29tcGFyaXNvbg0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgLy8gRGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBtZXNzYWdlIGhhcyB2YXJpYWJsZSBwYXJ0cyB3aXRoaW4gaXQNCi0gICAgICAgIC8vIG1hcmtlZCB3aXRoIHRoZSBjaGFyYWN0ZXJzICoqKi4gSGVyZSB3ZSB0b2tlbml6ZSB0aGUgZXBlY3RlZCBzdHJpbmcgDQotICAgICAgICAvLyBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgaW5kaXZpZHVhbCBwYXJ0cyBhcmUgcHJlc2VudCBpbiB0aGUgcmVzdWx0cyBzdHJpbmcNCi0gICAgICAgIFN0cmluZyBleHBlY3RlZE1lc3NhZ2VQYXJ0c1tdID0gZXhwZWN0ZWRNZXNzYWdlLnNwbGl0KCJcXCpcXCpcXCoiKTsNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZVBhcnRzLmxlbmd0aCA+IDEpew0KLSAgICAgICAgICAgIGludCBmb3VuZFBhcnRzID0gMDsNCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoOyBpKyspew0KLSAgICAgICAgICAgICAgICBpZiAocmVjZWl2ZWRNZXNzYWdlLmluZGV4T2YoZXhwZWN0ZWRNZXNzYWdlUGFydHNbaV0pID4gLTEgKXsNCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kUGFydHMrKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICANCi0gICAgICAgICAgICBpZiAoZm91bmRQYXJ0cyA9PSBleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGgpew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgDQotICAgICAgICAvLyBEZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSBpcyB2YXJpYWJsZSAoZWcgY29udGFpbnMgYWJzb2x1dGUgZmlsZW5hbWVzKSANCi0gICAgICAgIC8vIGFuZCB3aGVyZSB0aGUgb25seSByZWxldmFudCBwYXJ0IGlzIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZSAtIGluIHRoaXMgY2FzZSB0aGUgZXhwZWN0ZWQNCi0gICAgICAgIC8vIG1lc3NhZ2Ugb25seSBjb250YWlucyB0aGUgc3RlbSBzZWN0aW9uIHdoaWNoIGlzIHVuY2hhbmdpbmcuLi4NCi0gICAgICAgIGlmKCByZWNlaXZlZE1lc3NhZ2UubGVuZ3RoKCkgPiBleHBlY3RlZE1lc3NhZ2UubGVuZ3RoKCkgKSB7DQotICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdGhlIHJlY2VpdmVkIG1lc3NhZ2UgdG8gdGhlIGxlbmd0aCBvZiB0aGUgZXhwZWN0ZWQgbWVzc2FnZQ0KLSAgICAgICAgICAgIHJlY2VpdmVkTWVzc2FnZSA9IHJlY2VpdmVkTWVzc2FnZS5zdWJzdHJpbmcoMCwgZXhwZWN0ZWRNZXNzYWdlLmxlbmd0aCgpICk7DQotICAgICAgICB9IC8vIGVuZCBpZg0KLQ0KLSAgICAgICAgaWYgKCFleHBlY3RlZE1lc3NhZ2UuZXF1YWxzKHJlY2VpdmVkTWVzc2FnZSkpIHsNCi0gICAgICAgICAgICB3cml0ZUluY29ycmVjdE1lc3NhZ2UodGVzdE5hbWUsIGV4cGVjdGVkTWVzc2FnZSwgcmVjZWl2ZWRNZXNzYWdlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCBleHBlY3RlZE1lc3NhZ2UsIHJlY2VpdmVkTWVzc2FnZSApOw0KLSAgICAgICAgDQotICAgICAgICByZXR1cm47DQotICAgICAgIA0KLSAgICB9DQotDQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlTWlzc2luZ01lc3NhZ2UoU3RyaW5nIHRlc3ROYW1lLCBUaHJvd2FibGUgZXgpIHsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIgb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKCJ0YXJnZXQvT1Rlc3RNaXNzaW5nTXNncy50eHQiLCB0cnVlKSk7DQotICAgICAgICAgICAgb3V0LndyaXRlKHRlc3ROYW1lICsgIj0qIik7DQotICAgICAgICAgICAgb3V0Lm5ld0xpbmUoKTsNCi0gICAgICAgICAgICBvdXQuY2xvc2UoKTsNCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgIH0gDQotICAgIH0NCi0NCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVJbmNvcnJlY3RNZXNzYWdlKFN0cmluZyB0ZXN0TmFtZSwgU3RyaW5nIGV4cGVjdGVkLCBTdHJpbmcgcmVjZWl2ZWQpIHsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIgb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKCJ0YXJnZXQvT1Rlc3RJbmNvcnJlY3RNc2dzLnR4dCIsIHRydWUpKTsNCi0gICAgICAgICAgICBvdXQud3JpdGUodGVzdE5hbWUpOyBvdXQubmV3TGluZSgpOw0KLSAgICAgICAgICAgIG91dC53cml0ZSgiICAgICIgKyBleHBlY3RlZCk7IG91dC5uZXdMaW5lKCk7DQotICAgICAgICAgICAgb3V0LndyaXRlKCIgICAgIiArIHJlY2VpdmVkKTsgb3V0Lm5ld0xpbmUoKTsNCi0gICAgICAgICAgICBvdXQuY2xvc2UoKTsNCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgIH0gDQotICAgIH0NCi0NCi19IC8vIGVuZCBjbGFzcyBUdXNjYW55UnVudGltZUJyaWRnZQ0KZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9yZXNvdXJjZXMvb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMgYi9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2kvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGUxZTAxLi4wMDAwMDAwCi0tLSBhL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9yZXNvdXJjZXMvb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0jIA0KLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0jIA0KLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotIyB1bmRlciB0aGUgTGljZW5zZS4gDQotDQotIyBPQVNJUyBTQ0EgQXNzZW1ibHkgdGVzdCBwcm9wZXJ0aWVzDQotIyBUaGUgaW1wbGVtZW50YXRpb24gdHlwZSB0byB1c2UgZm9yIEFzc2VtYmx5IHRlc3Qgc3VpdGUNCi0jIG9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1CUEVMDQotb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5sYW5nPVBPSk8NCi0NCi0jIFRoZSBjbGFzcyB0byB1c2UgYXMgdGhlIFJ1bnRpbWUgQnJpZGdlIGZvciB0aGUgU0NBIHJ1bnRpbWUgdW5kZXIgdGVzdA0KLSNvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LnJ1bnRpbWVfYnJpZGdlPW9yZy5hcGFjaGUudHVzY2FueS5zY2Eub3Rlc3QuVHVzY2FueU9TR2lSdW50aW1lQnJpZGdlDQotb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlSdW50aW1lQnJpZGdlDQotDQotIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgZm9yIHRoZSB0ZXN0IHN1aXRlDQotIyAlMSByZXByZXNlbnRzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5hbWUgb2YgZWFjaCBjb250cmlidXRpb24gaW50byB0aGUgbG9jYXRpb24gVVJJDQotb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5jb250cmlidXRpb24ubG9jYXRpb249dGFyZ2V0L29hc2lzLWNvbnRyaWJ1dGlvbnMvJTEuemlwDQotDQpkaWZmIC0tZ2l0IGEvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNpL3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyBiL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYmQ0OWMuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNpL3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMgDQotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMgDQotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0jIHVuZGVyIHRoZSBMaWNlbnNlLiANCi1QT0pPXzIwMDM9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5JbnRyb3NwZWN0aW9uRXhjZXB0aW9uOiBbSkNBOTAwNDIsSkNJMjAwMDJdIEltcGxlbWVudGF0aW9uIG1pc3Npbmcgc2VydmljZSBtZXRob2Qgb3BlcmF0aW9uMiBzZXJ2aWNlIGludGVyZmFjZSBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2UxU3VwZXJzZXQNCi1QT0pPXzUwMDE9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuTm9Db25zdHJ1Y3RvckV4Y2VwdGlvbjogW0pDSTUwMDAxXSBObyBwdWJsaWMgY29uc3RydWN0b3IgZm9yIGNsYXNzDQotUE9KT181MDA1PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLkFtYmlndW91c0NvbnN0cnVjdG9yRXhjZXB0aW9uOg0KLVBPSk9fNTAwNj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5EdXBsaWNhdGVDb25zdHJ1Y3RvckV4Y2VwdGlvbjogW0pDSTUwMDAyXSBNdWx0aXBsZSBjb25zdHJ1Y3RvcnMgbWFya2VkIHdpdGggQENvbnN0cnVjdG9yDQotUE9KT181MDA3PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLkludmFsaWRDb25zdHJ1Y3RvckV4Y2VwdGlvbjogW0pDSTUwMDA1XSBNdWx0aXBsZSBhbm5vdGF0ZWQgY29uc3RydWN0b3JzDQotUE9KT184MDAyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX1BPSk9fODAwMkNvbXBvbmVudDFdIC0gW0FTTTUwMDA0LEpDQTMwMDAyLEpDSTgwMDAxXSBDb21wb25lbnQgc2VydmljZSBpbnRlcmZhY2UgaW5jb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gc2VydmljZSBpbnRlcmZhY2U6IENvbXBvbmVudCA9IFRFU1RfUE9KT184MDAyQ29tcG9uZW50MSBTZXJ2aWNlID0gU2VydmljZTFTdXBlcnNldCBPcGVyYXRpb24gb3BlcmF0aW9uYiBub3QgZm91bmQgb24gdGFyZ2V0DQotUE9KT184MDAzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX1BPSk9fODAwM0NvbXBvbmVudDEsIFNlcnZpY2U6IFNlcnZpY2UxXSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9c3VzcGVuZHNUcmFuc2FjdGlvbiBhbmQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1wcm9wYWdhdGVzVHJhbnNhY3Rpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KLVBPSk9fODAwOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9QT0pPXzgwMDhDb21wb25lbnQxLCBTZXJ2aWNlOiBTZXJ2aWNlMV0gLSBbUE9MNDAwMDksQVNNNjAwMDksQVNNNjAwMTAsSkNBNzAwMDEsSkNBNzAwMDNdIEludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfXN1c3BlbmRzVHJhbnNhY3Rpb24gYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9cHJvcGFnYXRlc1RyYW5zYWN0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCi1QT0pPXzgwMTI9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfUE9KT184MDEyQ29tcG9uZW50MSwgU2VydmljZTogU2VydmljZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1tYW5hZ2VkVHJhbnNhY3Rpb24uZ2xvYmFsIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfW5vTWFuYWdlZFRyYW5zYWN0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCi1QT0pPXzgwMTM9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuRHVwbGljYXRlUHJvcGVydHlFeGNlcHRpb246IGR1cGxpY2F0ZVByb3BlcnR5DQotUE9KT184MDE0PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLkR1cGxpY2F0ZVJlZmVyZW5jZUV4Y2VwdGlvbjogZHVwbGljYXRlUmVmZXJlbmNlDQotUE9KT185MDAxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBQT0pPXzkwMDEsIEFydGlmYWN0OiBUZXN0X1BPSk9fOTAwMS5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9QT0pPXzkwMDEuY29tcG9zaXRlICxsaW5lID0gKioqLCBjb2x1bW4gPSAqKiosIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjMuMi4yOiBBdHRyaWJ1dGUgJ2ludGVyZmFjZScgaXMgbm90IGFsbG93ZWQgdG8gYXBwZWFyIGluIGVsZW1lbnQgJ2ltcGxlbWVudGF0aW9uLmphdmEnLg0KLVBPSk9fMTAwMDE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IFBPSk9fMTAwMDEsIEFydGlmYWN0OiBNRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbF0gLSBbSkNJMTAwMDFdIFRoZSB2YWx1ZSBvZiB0aGUgQHBhY2thZ2UgYXR0cmlidXRlIG9uIHRoZSA8aW1wb3J0LmphdmEvPiBlbGVtZW50IGlzIG5vdCB1bmlxdWUgYWNyb3NzIGFsbCBvdGhlciA8aW1wb3J0LmphdmEvPiBlbGVtZW50cyB3aXRoaW4gdGhlIGNvbnRyaWJ1dGlvbi4NCi1QT0pPXzEwMDA0PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBbSkNJMTAwMDA3XSBBIEphdmEgcGFja2FnZSBvcmcub2FzaXNvcGVuLnNjYS50ZXN0O3ZlcnNpb249MS4wLjAgdGhhdCBpcyBzcGVjaWZpZWQgb24gYW4gZXhwb3J0IGVsZW1lbnQgTVVTVCBiZSBjb250YWluZWQgd2l0aGluIHRoZSBjb250cmlidXRpb24gY29udGFpbmluZyB0aGUgZXhwb3J0IGVsZW1lbnQuDQotUE9KT18xMDAwNT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUE9KT18xMDAwNSwgQXJ0aWZhY3Q6IE1FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sXSAtIFtKQ0kxMDAwNF0gVGhlIHZhbHVlIG9mIHRoZSBAcGFja2FnZSBhdHRyaWJ1dGUgb24gdGhlIDxleHBvcnQuamF2YS8+IGVsZW1lbnQgaXMgbm90IHVuaXF1ZSBhY3Jvc3MgYWxsIG90aGVyIDxleHBvcnQuamF2YS8+IGVsZW1lbnRzIHdpdGhpbiB0aGUgY29udHJpYnV0aW9uLg0KLVBPSk9fMTAwMDY9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IFtKQ0kxMDAwMDddIEEgSmF2YSBwYWNrYWdlIG9yZy5vYXNpc29wZW4uc2NhLnRlc3QueSB0aGF0IGlzIHNwZWNpZmllZCBvbiBhbiBleHBvcnQgZWxlbWVudCBNVVNUIGJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGNvbnRyaWJ1dGlvbiBjb250YWluaW5nIHRoZSBleHBvcnQgZWxlbWVudC4NCi0NCmRpZmYgLS1naXQgYS9jb21wbGlhbmNlLXRlc3RzL3BvbGljeS9wb20ueG1sIGIvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNjOTYyMi4uMDAwMDAwMAotLS0gYS9jb21wbGlhbmNlLXRlc3RzL3BvbGljeS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTM2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbXBsaWFuY2UtdGVzdHM8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0LXBvbGljeTwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNwZWNpZmljYXRpb24gQ29tcGxpYW5jZSBUZXN0cyBQb2xpY3k8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8IS0tIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gZ2V0IHRoZSBtb2R1bGUgd29ya2luZyBpbiBFY2xpcHNlIHdoaWNoIGRvZXNuJ3QgcGljayBpdCB1cCBmcm9tIHRoZSBkZXBlbmRlbmN5IHBsdWdpbiB1bnBhY2sgLS0+DQotICAgICAgICAgICAgPCEtLSBUaGUgZGVwZW5kZW5jeSBwbHVnaW4gdW5wYWNrIGlzIG5lZWRlZCBhcyBwcmVzZW50bHkgdGhlIHN1cmVmaXJlIHBsdWdpbiB3b250IHJ1biB0ZXN0cyBpbiBhIGRlcGVuZGVuY3kgamFyIC0tPg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+b2FzaXMtcG9saWN5LXRlc3QtcnVubmVyPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8IS0tIFRoaXMgaXMgbmVlZCBmb3IgUE9MXzQwMTMgYW5kIFBPTF80MDI4IHdoZW4gcnVubmluZyB3aXRoIFN1biBKREsgd2hpY2ggDQotICAgICAgICAgICAgZ2V0cyBhbiB1bnN1cHBvcnRlZCBvcGVyYXRpb24gZXhjZXB0aW9uIGNyZWF0aW5nIGFuIFhNTFN0cmVhbVJlYWRlciBmcm9tIGEgRE9NU291cmNlDQotICAgICAgICAgICAgd2hlbiBUdXNjYW55IGlzIHdyaXRpbmcgYSBwcm9wZXJ0eSB2YWx1ZSAgLS0+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPndzdHgtYXNsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPnN0YXg8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGF4LWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NC41PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICA8YnVpbGQ+DQotICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8cGx1Z2lucz4NCi0gICAgICAgICAgICAgICAgICAgICAgICANCi0gICAgICA8cGx1Z2luPg0KLSAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICA8ZXhjbHVkZXM+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfMzAwMV9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlPjwhLS0gIHNlZSBUVVNDQU5ZLTMzNzAgLS0+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfMzAwMl9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlPjwhLS0gIHNlZSBUVVNDQU5ZLTMzNzAgLS0+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfNDAwM19UZXN0Q2FzZS5qYXZhPC9leGNsdWRlPjwhLS0gIHNlZSBUVVNDQU5ZLTM0ODggLS0+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfNDAyOF9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlPjwhLS0gIHNlZSBUVVNDQU5ZLXh4eHggLSBQYXNzZXMgaW4gb3Rlc3QgbW9kdWxlIC0tPg0KLSAgICAgICAgICAgICAgPCEtLSB0cmFuc2FjdGlvbiBpbnRlbnRzIC0tPg0KLSAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovUE9MXzkwMDZfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tICBzZWUgVFVTQ0FOWS0zNDg3LS0+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfOTAwOV9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlPjwhLS0gIHNlZSBUVVNDQU5ZLTM0ODctLT4NCi0gICAgICAgICAgICAgIDxleGNsdWRlPioqL1BPTF85MDE1X1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGU+PCEtLSAgc2VlIFRVU0NBTlktMzQ4Ny0tPg0KLSAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovUE9MXzkwMTZfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tICBzZWUgVFVTQ0FOWS0zNDg3LS0+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfOTAxN19UZXN0Q2FzZS5qYXZhPC9leGNsdWRlPjwhLS0gIHNlZSBUVVNDQU5ZLTM0ODctLT4NCi0gICAgICAgICAgICAgIDxleGNsdWRlPioqL1BPTF85MDE4X1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGU+PCEtLSAgc2VlIFRVU0NBTlktMzQ4Ny0tPg0KLSAgICAgICAgICAgICAgPCEtLSBub0xpc3RlbmVyIGludGVudHMgLS0+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfMTAwMDFfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tICBzZWUgVFVTQ0FOWS0zNDkxLS0+DQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfMTAwMDJfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tICBzZWUgVFVTQ0FOWS0zNDkxLS0+DQotDQotICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfMTEwMDFfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tICBzZWUgVFVTQ0FOWS14eHh4IC0tPg0KLSAgICAgICAgICAgPC9leGNsdWRlcz4NCi0gICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgPC9wbHVnaW4+DQotDQotICAgICAgPHBsdWdpbj4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgPGlkPnVucGFjazwvaWQ+DQotICAgICAgICAgICAgPHBoYXNlPnRlc3QtY29tcGlsZTwvcGhhc2U+DQotICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgPGdvYWw+dW5wYWNrPC9nb2FsPg0KLSAgICAgICAgICAgIDwvZ29hbHM+DQotICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbXM+DQotICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vYXNpcy1wb2xpY3ktY29udHJpYnV0aW9uczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+DQotICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vb2FzaXMtY29udHJpYnV0aW9uczwvb3V0cHV0RGlyZWN0b3J5Pg0KLSAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQotICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vYXNpcy1wb2xpY3ktdGVzdC1ydW5uZXI8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPHR5cGU+amFyPC90eXBlPg0KLSAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+Y29tbW9ucy1sb2dnaW5nLnByb3BlcnRpZXMsb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMsdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXM8L2V4Y2x1ZGVzPg0KLSAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3Rlc3QtY2xhc3Nlczwvb3V0cHV0RGlyZWN0b3J5Pg0KLSAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQotICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPg0KLSAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgPC9leGVjdXRpb24+DQotICAgICAgICA8L2V4ZWN1dGlvbnM+DQotICAgICAgPC9wbHVnaW4+DQotDQotICAgIDwvcGx1Z2lucz4NCi0gIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvcG9saWN5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9vdGVzdC9UdXNjYW55UnVudGltZUJyaWRnZS5qYXZhIGIvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL290ZXN0L1R1c2NhbnlSdW50aW1lQnJpZGdlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEzNmU1NjYuLjAwMDAwMDAKLS0tIGEvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL290ZXN0L1R1c2NhbnlSdW50aW1lQnJpZGdlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLSAqLw0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdDsNCi0NCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOw0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOw0KLQ0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOw0KLWltcG9ydCBqYXZhLmlvLkZpbGU7DQotaW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCi1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb25Mb2NhdGlvbkhlbHBlcjsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCi0NCi1pbXBvcnQgY2xpZW50LlJ1bnRpbWVCcmlkZ2U7DQotaW1wb3J0IGNsaWVudC5UZXN0Q29uZmlndXJhdGlvbjsNCi0NCi0vKioNCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVudGltZSBCcmlkZ2UgZm9yIHRoZSBBcGFjaGUgVHVzY2FueSBTQ0EgcnVudGltZSAodmVyc2lvbiAyLngpDQotICoNCi0gKi8NCi1wdWJsaWMgY2xhc3MgVHVzY2FueVJ1bnRpbWVCcmlkZ2UgaW1wbGVtZW50cyBSdW50aW1lQnJpZGdlIHsNCi0NCi0gICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT05UUklCVVRJT05fTE9DQVRJT05fUFJPUEtFWSA9ICJPQVNJU19URVNURU5WX0NPTlRSSUJVVElPTl9MT0NBVElPTiI7DQotDQotICAgIHByb3RlY3RlZCBOb2RlRmFjdG9yeSBsYXVuY2hlcjsNCi0gICAgcHJvdGVjdGVkIE5vZGUgbm9kZTsNCi0gICAgcHJvdGVjdGVkIFByb3BlcnRpZXMgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzOw0KLSAgICANCi0gICAgVGVzdENvbmZpZ3VyYXRpb24gdGVzdENvbmZpZ3VyYXRpb24gPSBudWxsOw0KLQ0KLSAgICBwdWJsaWMgVHVzY2FueVJ1bnRpbWVCcmlkZ2UoKSB7DQotICAgICAgICAvLyByZWFkIHRlc3QgZXJyb3IgbWFwcGluZw0KLSAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzID0gbmV3IFByb3BlcnRpZXMoKTsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgSW5wdXRTdHJlYW0gcHJvcGVydGllc1N0cmVhbSA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCIvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMiKTsNCi0gICAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZXMubG9hZChwcm9wZXJ0aWVzU3RyZWFtKTsNCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgICANCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byByZWFkIG9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyBmaWxlIik7DQotICAgICAgICB9IA0KLSAgICB9DQotDQotICAgIHB1YmxpYyBUZXN0Q29uZmlndXJhdGlvbiBnZXRUZXN0Q29uZmlndXJhdGlvbigpIHsNCi0gICAgICAgIHJldHVybiB0ZXN0Q29uZmlndXJhdGlvbjsNCi0gICAgfQ0KLQ0KLSAgICBwdWJsaWMgdm9pZCBzZXRUZXN0Q29uZmlndXJhdGlvbihUZXN0Q29uZmlndXJhdGlvbiB0ZXN0Q29uZmlndXJhdGlvbikgew0KLSAgICAgICAgdGhpcy50ZXN0Q29uZmlndXJhdGlvbiA9IHRlc3RDb25maWd1cmF0aW9uOw0KLSAgICB9DQotDQotCXB1YmxpYyBib29sZWFuIHN0YXJ0Q29udHJpYnV0aW9uKFN0cmluZyBjb21wb3NpdGVOYW1lLA0KLQkJCVN0cmluZyBjb250cmlidXRpb25Mb2NhdGlvbiwgU3RyaW5nW10gY29udHJpYnV0aW9uTmFtZXMpDQotCQkJdGhyb3dzIEV4Y2VwdGlvbiB7DQotCQkvL1RPRE86DQotCQlyZXR1cm4gc3RhcnRDb250cmlidXRpb24oY29udHJpYnV0aW9uTG9jYXRpb24sIGNvbnRyaWJ1dGlvbk5hbWVzKTsNCi0JfQ0KLQkNCi0gICAgcHVibGljIGJvb2xlYW4gc3RhcnRDb250cmlidXRpb24oU3RyaW5nIGNvbnRyaWJ1dGlvbkxvY2F0aW9uLCBTdHJpbmdbXSBjb250cmlidXRpb25OYW1lcykgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIC8vIFR1c2Nhbnkgc3BlY2lmaWMgY29kZSB3aGljaCBzdGFydHMgdGhlIGNvbnRyaWJ1dGlvbihzKSBob2xkaW5nIHRoZSB0ZXN0DQotICAgICAgICAgICAgUHJvcGVydGllcyBwcyA9IG5ldyBQcm9wZXJ0aWVzKCk7DQotICAgICAgICAgICAgcHMuc2V0UHJvcGVydHkoImRlZmF1bHRTY2hlbWUiLCAidm0iKTsNCi0gICAgICAgICAgICBwcy5zZXRQcm9wZXJ0eSgib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLnJpLkpBWFdTQmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5kZWZhdWx0UG9ydCIsICI4MDgwIik7DQotICAgICAgICAgICAgbGF1bmNoZXIgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZShwcyk7DQotDQotICAgICAgICAgICAgQ29udHJpYnV0aW9uW10gY29udHJpYnV0aW9ucyA9IG5ldyBDb250cmlidXRpb25bY29udHJpYnV0aW9uTmFtZXMubGVuZ3RoXTsNCi0gICAgICAgICAgICBTdHJpbmdbXSBjb250cmlidXRpb25VUklzID0gZ2V0Q29udHJpYnV0aW9uVVJJcyhjb250cmlidXRpb25Mb2NhdGlvbik7DQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250cmlidXRpb25zLmxlbmd0aDsgaSsrKSB7DQotICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbnNbaV0gPSBuZXcgQ29udHJpYnV0aW9uKGNvbnRyaWJ1dGlvbk5hbWVzW2ldLCBjb250cmlidXRpb25VUklzW2ldKTsNCi0gICAgICAgICAgICB9IC8vIGVuZCBmb3INCi0NCi0gICAgICAgICAgICBub2RlID0gbGF1bmNoZXIuY3JlYXRlTm9kZSh0ZXN0Q29uZmlndXJhdGlvbi5nZXRDb21wb3NpdGUoKSwgY29udHJpYnV0aW9ucyk7DQotICAgICAgICAgICAgLy8gU3RhcnQgdGhlIG5vZGUNCi0gICAgICAgICAgICBub2RlLnN0YXJ0KCk7DQotICAgICAgICAgICAgDQotICAgICAgICAgICAgLy8gRm9yIGRlYnVnZ2luZyANCi0gICAgICAgICAgICAvLyBwcmludCBvdXQgdGhlIGNvbXBvc2l0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZCBpbiBzdWNjZXNzIGNhc2VzDQotICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCgoTm9kZUltcGwpbm9kZSkuZHVtcERvbWFpbkNvbXBvc2l0ZSgpKTsNCi0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsNCi0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgICAgIA0KLSAgICAgICAgICAgIHRocm93IGU7DQotICAgICAgICB9IC8vIGVuZCB0cnkNCi0NCi0gICAgICAgIHJldHVybiB0cnVlOw0KLSAgICB9IC8vIGVuZCBtZXRob2Qgc3RhcnRDb250cmlidXRpb24NCi0NCi0gICAgLyoqDQotICAgICAqIEdldHMgdGhlIGxvY2F0aW9uIG9mIHRoZSBDb250cmlidXRpb25zIGFzIFVSSXMNCi0gICAgICogQHBhcmFtIGNvbnRyaWJ1dGlvbkxvY2F0aW9uIC0gYSBsb2NhdGlvbiBwYXR0ZXJuIFVSSSwgd2hpY2ggY29udGFpbnMgb25lIG9yIG1vcmUgIiUxIg0KLSAgICAgKiBzdWJzdHJpbmdzLCB3aGljaCBhcmUgc3Vic3RpdHV0ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29udHJpYnV0aW9uIHRvIGdldCB0aGUgVVJJIG9mDQotICAgICAqIHRoZSBjb250cmlidXRpb24NCi0gICAgICogQHJldHVybiB0aGUgY29udHJpYnV0aW9uIGxvY2F0aW9ucyBhcyBhbiBhcnJheSBvZiBTdHJpbmdzDQotICAgICAqLw0KLSAgICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0Q29udHJpYnV0aW9uVVJJcyhTdHJpbmcgY29udHJpYnV0aW9uTG9jYXRpb24pIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgU3RyaW5nW10gbG9jYXRpb25zOw0KLSAgICAgICAgbG9jYXRpb25zID0gdGVzdENvbmZpZ3VyYXRpb24uZ2V0Q29udHJpYnV0aW9uTmFtZXMoKTsNCi0NCi0gICAgICAgIGlmIChsb2NhdGlvbnMgIT0gbnVsbCAmJiBjb250cmlidXRpb25Mb2NhdGlvbiAhPSBudWxsKSB7DQotDQotICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhdGlvbnMubGVuZ3RoOyBpKyspIHsNCi0gICAgICAgICAgICAgICAgU3RyaW5nIGFMb2NhdGlvbiA9IGNvbnRyaWJ1dGlvbkxvY2F0aW9uLnJlcGxhY2VBbGwoIiUxIiwgbG9jYXRpb25zW2ldKTsNCi0gICAgICAgICAgICAgICAgLy8gTG9va3MgbGlrZSBidWdzIGluIHRoZSBvYXNpcyBjb2RlIHRoYXQgc29tZXRpbWVzIHN0aWxsIHVzZXMgamFycyBmb3Igc29tZQ0KLSAgICAgICAgICAgICAgICBpZiAoYUxvY2F0aW9uLmVuZHNXaXRoKCJfUE9KTy56aXAiKSAmJiAhYUxvY2F0aW9uLmVuZHNXaXRoKCJBU01fODAwNV9KYXZhLTEuMC56aXAiKSkgew0KLSAgICAgICAgICAgICAgICAgICAgYUxvY2F0aW9uID0gYUxvY2F0aW9uLnN1YnN0cmluZygwLCBhTG9jYXRpb24ubGVuZ3RoKCktMykgKyAiamFyIjsgICAgICAgICAgICAgICAgCQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmICghKG5ldyBGaWxlKGFMb2NhdGlvbikpLmV4aXN0cygpKSB7DQotICAgICAgICAgICAgICAgIAlhTG9jYXRpb24gPSBhTG9jYXRpb24ucmVwbGFjZSgiLnppcCIsICIuamFyIik7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgbG9jYXRpb25zW2ldID0gYUxvY2F0aW9uOw0KLSAgICAgICAgICAgIH0gLy8gZW5kIGZvciAgICAJICAJDQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGlmIChsb2NhdGlvbnMgPT0gbnVsbCkgew0KLSAgICAgICAgICAgICAgICAvLyBObyBjb250cmlidXRpb24gc3BlY2lmaWVkIC0gdGhyb3cgYW4gRXhjZXB0aW9uDQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBTQ0EgcnVudGltZSAtIG5vIGNvbnRyaWJ1dGlvbiBzdXBwbGllZCAtIGVycm9yIik7DQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgLy8gTm8gY29udHJpYnV0aW9uIGxvY2F0aW9uIHN1cHBsaWVkIC0gdGhyb3cgYW4gRXhjZXB0aW9uDQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBTQ0EgcnVudGltZSAtIG5vIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbiBzdXBwbGllZCAtIGVycm9yIik7DQotICAgICAgICAgICAgfSAvLyBlbmQgaWYgDQotICAgICAgICB9IC8vIGVuZCBpZg0KLQ0KLSAgICAgICAgcmV0dXJuIGxvY2F0aW9uczsNCi0gICAgfSAvLyBlbmQgZ2V0Q29udHJpYnV0aW9uVVJJDQotDQotICAgIHB1YmxpYyB2b2lkIHN0b3BDb250cmlidXRpb24oKSB7DQotICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7DQotICAgICAgICAgICAgbm9kZS5zdG9wKCk7DQotICAgICAgICB9IC8vIGVuZCBpZg0KLSAgICAgICAgaWYgKGxhdW5jaGVyICE9IG51bGwpIHsNCi0gICAgICAgICAgICBsYXVuY2hlci5kZXN0cm95KCk7DQotICAgICAgICB9IC8vIGVuZCBpZg0KLSAgICB9IC8vIGVuZCBtZXRob2Qgc3RvcENvbnRyaWJ1dGlvbg0KLQ0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbnRyaWJ1dGlvbkxvY2F0aW9uKENsYXNzPD8+IHRlc3RDbGFzcykgew0KLSAgICAgICAgcmV0dXJuIENvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyLmdldENvbnRyaWJ1dGlvbkxvY2F0aW9uKHRlc3RDb25maWd1cmF0aW9uLmdldFRlc3RDbGFzcygpKTsNCi0gICAgfSAvLyBlbmQgbWV0aG9kIGdldENvbnRyaWJ1dGlvbkxvY2F0aW9uDQotICAgIA0KLSAgICBwdWJsaWMgdm9pZCBjaGVja0Vycm9yKFN0cmluZyB0ZXN0TmFtZSwgVGhyb3dhYmxlIGV4KSB0aHJvd3MgVGhyb3dhYmxlIHsgDQotICAgICAgICAgICAgICANCi0gICAgICAgIFN0cmluZyBleHBlY3RlZE1lc3NhZ2UgPSBleHBlY3RlZEVycm9yTWVzc2FnZXMuZ2V0UHJvcGVydHkodGVzdE5hbWUpOw0KLSAgICAgICAgU3RyaW5nIHJlY2VpdmVkTWVzc2FnZSA9IGV4LmdldE1lc3NhZ2UoKTsNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZSA9PSBudWxsKXsNCi0gICAgICAgICAgICB3cml0ZU1pc3NpbmdNZXNzYWdlKHRlc3ROYW1lLCBleCk7DQotICAgICAgICAgICAgZmFpbCgiTnVsbCBleHBlY3RlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSArIA0KLSAgICAgICAgICAgICAgICAgIlBsZWFzZSBhZGQgbWVzc2FnZSB0byBvYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMiKTsNCi0gICAgICAgIH0gLy8gZW5kIGlmDQotICAgICAgICANCi0gICAgICAgIGlmIChyZWNlaXZlZE1lc3NhZ2UgPT0gbnVsbCl7DQotICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7DQotICAgICAgICAgICAgZmFpbCgiTnVsbCByZWNlaXZlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSk7DQotICAgICAgICB9IC8vIGVuZCBpZg0KLQ0KLSAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZS5zdGFydHNXaXRoKCIqIikpIHsNCi0gICAgICAgICAgICAvLyBhbGxvdyB1c2luZyAqIHRvIGlnbm9yZSBhIG1lc3NhZ2UgY29tcGFyaXNvbg0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgLy8gRGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBtZXNzYWdlIGhhcyB2YXJpYWJsZSBwYXJ0cyB3aXRoaW4gaXQNCi0gICAgICAgIC8vIG1hcmtlZCB3aXRoIHRoZSBjaGFyYWN0ZXJzICoqKi4gSGVyZSB3ZSB0b2tlbml6ZSB0aGUgZXBlY3RlZCBzdHJpbmcgDQotICAgICAgICAvLyBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgaW5kaXZpZHVhbCBwYXJ0cyBhcmUgcHJlc2VudCBpbiB0aGUgcmVzdWx0cyBzdHJpbmcNCi0gICAgICAgIFN0cmluZyBleHBlY3RlZE1lc3NhZ2VQYXJ0c1tdID0gZXhwZWN0ZWRNZXNzYWdlLnNwbGl0KCJcXCpcXCpcXCoiKTsNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZVBhcnRzLmxlbmd0aCA+IDEpew0KLSAgICAgICAgICAgIGludCBmb3VuZFBhcnRzID0gMDsNCi0gICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoOyBpKyspew0KLSAgICAgICAgICAgICAgICBpZiAocmVjZWl2ZWRNZXNzYWdlLmluZGV4T2YoZXhwZWN0ZWRNZXNzYWdlUGFydHNbaV0pID4gLTEgKXsNCi0gICAgICAgICAgICAgICAgICAgIGZvdW5kUGFydHMrKzsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICANCi0gICAgICAgICAgICBpZiAoZm91bmRQYXJ0cyA9PSBleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGgpew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgDQotICAgICAgICAvLyBEZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSBpcyB2YXJpYWJsZSAoZWcgY29udGFpbnMgYWJzb2x1dGUgZmlsZW5hbWVzKSANCi0gICAgICAgIC8vIGFuZCB3aGVyZSB0aGUgb25seSByZWxldmFudCBwYXJ0IGlzIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZSAtIGluIHRoaXMgY2FzZSB0aGUgZXhwZWN0ZWQNCi0gICAgICAgIC8vIG1lc3NhZ2Ugb25seSBjb250YWlucyB0aGUgc3RlbSBzZWN0aW9uIHdoaWNoIGlzIHVuY2hhbmdpbmcuLi4NCi0gICAgICAgIGlmKCByZWNlaXZlZE1lc3NhZ2UubGVuZ3RoKCkgPiBleHBlY3RlZE1lc3NhZ2UubGVuZ3RoKCkgKSB7DQotICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdGhlIHJlY2VpdmVkIG1lc3NhZ2UgdG8gdGhlIGxlbmd0aCBvZiB0aGUgZXhwZWN0ZWQgbWVzc2FnZQ0KLSAgICAgICAgICAgIHJlY2VpdmVkTWVzc2FnZSA9IHJlY2VpdmVkTWVzc2FnZS5zdWJzdHJpbmcoMCwgZXhwZWN0ZWRNZXNzYWdlLmxlbmd0aCgpICk7DQotICAgICAgICB9IC8vIGVuZCBpZg0KLQ0KLSAgICAgICAgaWYgKCFleHBlY3RlZE1lc3NhZ2UuZXF1YWxzKHJlY2VpdmVkTWVzc2FnZSkpIHsNCi0gICAgICAgICAgICB3cml0ZUluY29ycmVjdE1lc3NhZ2UodGVzdE5hbWUsIGV4cGVjdGVkTWVzc2FnZSwgcmVjZWl2ZWRNZXNzYWdlKTsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCBleHBlY3RlZE1lc3NhZ2UsIHJlY2VpdmVkTWVzc2FnZSApOw0KLSAgICAgICAgDQotICAgICAgICByZXR1cm47DQotICAgICAgIA0KLSAgICB9DQotDQotICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlTWlzc2luZ01lc3NhZ2UoU3RyaW5nIHRlc3ROYW1lLCBUaHJvd2FibGUgZXgpIHsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIgb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKCJ0YXJnZXQvT1Rlc3RNaXNzaW5nTXNncy50eHQiLCB0cnVlKSk7DQotICAgICAgICAgICAgb3V0LndyaXRlKHRlc3ROYW1lICsgIj0qIik7DQotICAgICAgICAgICAgb3V0Lm5ld0xpbmUoKTsNCi0gICAgICAgICAgICBvdXQuY2xvc2UoKTsNCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgIH0gDQotICAgIH0NCi0NCi0gICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVJbmNvcnJlY3RNZXNzYWdlKFN0cmluZyB0ZXN0TmFtZSwgU3RyaW5nIGV4cGVjdGVkLCBTdHJpbmcgcmVjZWl2ZWQpIHsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIgb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKCJ0YXJnZXQvT1Rlc3RJbmNvcnJlY3RNc2dzLnR4dCIsIHRydWUpKTsNCi0gICAgICAgICAgICBvdXQud3JpdGUodGVzdE5hbWUpOyBvdXQubmV3TGluZSgpOw0KLSAgICAgICAgICAgIG91dC53cml0ZSgiICAgICIgKyBleHBlY3RlZCk7IG91dC5uZXdMaW5lKCk7DQotICAgICAgICAgICAgb3V0LndyaXRlKCIgICAgIiArIHJlY2VpdmVkKTsgb3V0Lm5ld0xpbmUoKTsNCi0gICAgICAgICAgICBvdXQuY2xvc2UoKTsNCi0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgIH0gDQotICAgIH0NCi0NCi19IC8vIGVuZCBjbGFzcyBUdXNjYW55UnVudGltZUJyaWRnZQ0KZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvcG9saWN5L3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcyBiL2NvbXBsaWFuY2UtdGVzdHMvcG9saWN5L3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ4Y2MyNy4uMDAwMDAwMAotLS0gYS9jb21wbGlhbmNlLXRlc3RzL3BvbGljeS9zcmMvdGVzdC9yZXNvdXJjZXMvb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0jIA0KLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0jIA0KLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotIyB1bmRlciB0aGUgTGljZW5zZS4gDQotDQotIyBPQVNJUyBTQ0EgQXNzZW1ibHkgdGVzdCBwcm9wZXJ0aWVzDQotIyBUaGUgaW1wbGVtZW50YXRpb24gdHlwZSB0byB1c2UgZm9yIEFzc2VtYmx5IHRlc3Qgc3VpdGUNCi0jIG9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1CUEVMDQotb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5sYW5nPUphdmENCi0NCi0jIFRoZSBjbGFzcyB0byB1c2UgYXMgdGhlIFJ1bnRpbWUgQnJpZGdlIGZvciB0aGUgU0NBIHJ1bnRpbWUgdW5kZXIgdGVzdA0KLSNvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LnJ1bnRpbWVfYnJpZGdlPW9yZy5hcGFjaGUudHVzY2FueS5zY2Eub3Rlc3QuVHVzY2FueU9TR2lSdW50aW1lQnJpZGdlDQotb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlSdW50aW1lQnJpZGdlDQotDQotIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgZm9yIHRoZSB0ZXN0IHN1aXRlDQotIyAlMSByZXByZXNlbnRzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5hbWUgb2YgZWFjaCBjb250cmlidXRpb24gaW50byB0aGUgbG9jYXRpb24gVVJJDQotb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5jb250cmlidXRpb24ubG9jYXRpb249dGFyZ2V0L29hc2lzLWNvbnRyaWJ1dGlvbnMvJTEuemlwDQotDQpkaWZmIC0tZ2l0IGEvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIGIvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTE3YjI0Li4wMDAwMDAwCi0tLSBhL2NvbXBsaWFuY2UtdGVzdHMvcG9saWN5L3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMgDQotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMgDQotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0jIHVuZGVyIHRoZSBMaWNlbnNlLiANCi0NCi1QT0xfMzAwMT1UVVNDQU5ZLTMzNzANCi1QT0xfMzAwMj1UVVNDQU5ZLTMzNzANCi1QT0xfMzAwMz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUE9MXzMwMDMsIEFydGlmYWN0OiBNRVRBLUlORi9kZWZpbml0aW9ucy54bWwsIERlZmluaXRpb25zOiBqYXI6ZmlsZToqKiovUE9MXzMwMDMuemlwIS9NRVRBLUlORi9kZWZpbml0aW9ucy54bWxdIC0gW0FTTTEwMDAxLFBPTDMwMDAyXSBEdXBsaWNhdGUgaW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31kdXBJbnRlbnQgZm91bmQgaW4gZG9tYWluDQotUE9MXzMwMDQ9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IFBPTF8zMDA0LCBBcnRpZmFjdDogTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sLCBEZWZpbml0aW9uczogamFyOmZpbGU6KioqL1BPTF8zMDA0LnppcCEvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sXSAtIFtQT0wzMDAwNF0gSW50ZW50IHR3b0RlZmF1bHRzIGhhcyBtb3JlIHRoYW4gb25lIHF1YWxpZmllciBtYXJrZWQgYXMgdGhlIGRlZmF1bHQgcXVhbGlmaWVyDQotUE9MXzMwMDU9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IFBPTF8zMDA1LCBBcnRpZmFjdDogTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sLCBEZWZpbml0aW9uczogamFyOmZpbGU6KioqL1BPTF8zMDA1LnppcCEvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sXSAtIFtQT0wzMDAwNV0gVGhlIGludGVudCBkdXBRdWFsaWZpZXJzIGhhcyBtb3JlIHRoYW4gb25lIHF1YWxpZmllciB3aXRoIHRoZSBuYW1lIHF1YWwxDQotUE9MXzMwMDY9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IFBPTF8zMDA2LCBBcnRpZmFjdDogTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sLCBEZWZpbml0aW9uczogamFyOmZpbGU6KioqL1BPTF8zMDA2LnppcCEvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sXSAtIFtQT0wzMDAwNl0gVGhlIHByb2ZpbGUgaW50ZW50IG5hbWUgYmFkLlByb2ZpbGVJbnRlbnQgbXVzdCBub3QgaGF2ZSB0aGUgY2hhcmFjdGVyICIuIiBpbiBpdA0KLVBPTF8zMDA5PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBQT0xfMzAwOSwgQXJ0aWZhY3Q6IE1FVEEtSU5GL2RlZmluaXRpb25zLnhtbCwgRGVmaW5pdGlvbnM6IGphcjpmaWxlOioqKi9QT0xfMzAwOS56aXAhL01FVEEtSU5GL2RlZmluaXRpb25zLnhtbF0gLSBbUE9MMzAwMTBdIFRoZSBwb2xpY3kgc2V0IFR3b0ludGVudE1hcFBvbGljeVNldCBoYXMgbW9yZSB0aGFuIG9uZSBpbnRlbnQgbWFwIHdpdGggdGhlIG5hbWUgdGVzdEludGVudDYNCi1QT0xfMzAxMj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9TeXN0ZW1Db250cmlidXRpb25dIC0gW1BPTDMwMDE1XSBSZXF1aXJlZCBJbnRlbnQgLSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9dW5kZWZpbmVkSW50ZW50MiBub3QgZm91bmQgZm9yIFByb2ZpbGVJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfWJhZFByb2ZpbGVJbnRlbnQNCi1QT0xfMzAxMz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9TeXN0ZW1Db250cmlidXRpb25dIC0gW1BPTDMwMDE2XSBFeGNsdWRlZCBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXVuZGVmaW5lZEludGVudCBub3QgZm91bmQgZm9yIGludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9bm9NdXhJbnRlbnQNCi1QT0xfMzAxND1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUG9saWN5X0dlbmVyYWwsIERlZmluaXRpb25zOiBqYXI6ZmlsZToqKiovUG9saWN5X0dlbmVyYWwuemlwIS9NRVRBLUlORi9kZWZpbml0aW9ucy54bWxdIC0gRHVwbGljYXRlUG9saWN5U2V0DQotUE9MXzMwMTU9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb246IGphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb25FeGNlcHRpb24NCi1QT0xfMzAxNj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjogamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbg0KLVBPTF8zMDE3PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL1N5c3RlbUNvbnRyaWJ1dGlvbl0gLSBbUE9MMzAwMjBdIFRoZSBwb2xpY3kgc2V0IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31CYWRJbnRlbnRNYXBQb2xpY3lTZXQgaW50ZW50IG1hcCB0ZXN0SW50ZW50NiBoYXMgbWlzc2luZyBxdWFsaWZpZXJzOiB0ZXN0SW50ZW50Ni5xdWFsMiAgVGhlIGludGVudCBtYXAgcXVhbGlmaWVycyBtdXN0IG1hdGNoIHRoZSBwcm92aWRlZCBpbnRlbnQgcXVhbGlmaWVycy4NCi1QT0xfMzAxOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUE9MXzMwMTgsIEFydGlmYWN0OiBNRVRBLUlORi9kZWZpbml0aW9ucy54bWwsIERlZmluaXRpb25zOiBqYXI6ZmlsZToqKiovUE9MXzMwMTguemlwIS9NRVRBLUlORi9kZWZpbml0aW9ucy54bWxdIC0gW1BPTDMwMDIxXSBJbnRlbnQgTWFwIHByb3ZpZGVzIGZvciBJbnRlbnQgbm90IHNwZWNpZmllZCBhcyBwcm92aWRlZCBieSBwYXJlbnQgUG9saWN5U2V0IC0gQmFkSW50ZW50TWFwUG9saWN5U2V0DQotUE9MXzMwMjA9VFVTQ0FOWS0zMzcxDQotUE9MXzQwMTI9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDbGllbnQsIFNlcnZpY2U6IFRlc3RJbnZvY2F0aW9uXSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM310ZXN0SW50ZW50MyBhbmQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXRlc3RJbnRlbnQ0IGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCi1QT0xfNDAyNz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUE9MXzQwMjcsIEFydGlmYWN0OiBNRVRBLUlORi9kZWZpbml0aW9ucy54bWwsIERlZmluaXRpb25zOiBqYXI6ZmlsZToqKiovUE9MXzQwMjcuemlwIS9NRVRBLUlORi9kZWZpbml0aW9ucy54bWxdIC0gW1BPTDQwMDIwXSBEdXBsaWNhdGUgYmluZGluZyB0eXBlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9ZHVwQmluZGluZy50eXBlIGZvdW5kIGluIGRvbWFpbg0KLVBPTF80MDI4PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfV0gLSBbUE9MNDAwMDJdIFRoZSBwb2xpY3kge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVBvbGljeVNldEV4dEF0dGFjaFByb3AgaGFzIGJlZW4gYXR0YWNoZWQgdG8gYSBwcm9wZXJ0eSBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLiBUaGlzIGlzIG5vdCBhbGxvd2VkLg0KLVBPTF81MDAxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL1N5c3RlbUNvbnRyaWJ1dGlvbl0gLSBbUE9MNTAwMDFdIEFuIGV4dGVuc2lvbiB0byBzdXBwb3J0IHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9dW5rbm93bi50eXBlIGNhbnQgYmUgZm91bmQgaW4gdGhlIGRvbWFpbg0KLVBPTF85MDA2PVRVU0NBTlktMTY0OQ0KLVBPTF85MDA5PVRVU0NBTlktMTY0OQ0KLVBPTF85MDE1PVRVU0NBTlktMTY0OQ0KLVBPTF85MDE2PVRVU0NBTlktMTY0OQ0KLVBPTF85MDE3PVRVU0NBTlktMTY0OQ0KLVBPTF85MDE4PVRVU0NBTlktMTY0OQ0KLVBPTF8xMDAwMT1UVVNDQU5ZLTMzODENCi1QT0xfMTEwMDE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IFBPTF8xMTAwMSwgQXJ0aWZhY3Q6IFRlc3RfUE9MXzExMDAxLmNvbXBvc2l0ZV0gLSBYTUxTY2hlbWEgdmFsaWRhdGlvbiBlcnJvciBvY2N1cmVkIGluOiBUZXN0X1BPTF8xMTAwMS5jb21wb3NpdGUgLGxpbmUgPSAqKiosIGNvbHVtbiA9ICoqKiwgTWVzc2FnZSA9IGN2Yy1jb21wbGV4LXR5cGUuMi40LmE6IEludmFsaWQgY29udGVudCB3YXMgZm91bmQgc3RhcnRpbmcgd2l0aCBlbGVtZW50ICdwb2xpY3lTZXRBdHRhY2htZW50Jy4gT25lIG9mICd7Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6ZG9jdW1lbnRhdGlvbiwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6aW50ZXJmYWNlLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpiaW5kaW5nLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpjYWxsYmFjaywgV0NbIyNvdGhlcjoiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIl19JyBpcyBleHBlY3RlZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvcG9tLnhtbCBiL2NvbXBsaWFuY2UtdGVzdHMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWViMTkxMS4uMDAwMDAwMAotLS0gYS9jb21wbGlhbmNlLXRlc3RzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0czwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIENvbXBsaWFuY2UgVGVzdHM8L25hbWU+DQotDQotICAgIDxyZXBvc2l0b3JpZXM+DQotICAgICAgICA8cmVwb3NpdG9yeT4NCi0gICAgICAgICAgICA8IS0tIE9BU0lTIHdpbGwgZXZlbnR1YWxseSBwdWJsaXNoIHRoZXNlIHRoZW1zZWx2ZXMgYnV0IGZvciBub3cgdGhleSdyZSBhdCBteSBwZW9wbGUgcGxhY2UgLS0+DQotICAgICAgICAgICAgPGlkPm9hc2lzLmNvbnRyaWJ1dGlvbnM8L2lkPg0KLSAgICAgICAgICAgIDx1cmw+aHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35hbnRlbGRlci90dXNjYW55L290ZXN0cy9tYXZlbjwvdXJsPg0KLSAgICAgICAgPC9yZXBvc2l0b3J5Pg0KLSAgICA8L3JlcG9zaXRvcmllcz4NCi0NCi0gICAgPG1vZHVsZXM+DQotICAgICAgIDxtb2R1bGU+YXNzZW1ibHk8L21vZHVsZT4NCi0gICAgICAgPG1vZHVsZT5wb2xpY3k8L21vZHVsZT4NCi0gICAgICAgPG1vZHVsZT5qYXZhLWNhYTwvbW9kdWxlPg0KLSAgICAgICA8bW9kdWxlPmphdmEtY2k8L21vZHVsZT4NCi0gICAgPC9tb2R1bGVzPg0KLQ0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9kaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS1hZ2dyZWdhdGlvbi9wb20ueG1sIGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUtYWdncmVnYXRpb24vcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTE0OTU0Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUtYWdncmVnYXRpb24vcG9tLnhtbApAQCAtMCwwICsxLDE3MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGlzdHJpYnV0aW9uPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFnZ3JlZ2F0aW9uPC9ncm91cElkPg0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1hZ2dyZWdhdGlvbjwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIEJhc2UgUnVudGltZSBBZ2dyZWdhdGlvbjwvbmFtZT4NCisNCisgICAgPHByb3BlcnRpZXM+DQorICAgICAgPGJ1bmRsZS1zeW1ib2xpYy1uYW1lPiR7cHJvamVjdC5ncm91cElkfS4ke2FydGlmYWN0SWR9PC9idW5kbGUtc3ltYm9saWMtbmFtZT4NCisgICAgPC9wcm9wZXJ0aWVzPg0KKw0KKw0KKyAgICA8IS0tIA0KKyAgICAgICAgIFRoZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgdG8gcnVuIHRoZSBBc3NlbWJseSBvdGVzdHMgbWludXMgdGhlIHdlYiBzZXJ2aWNlIA0KKyAgICAgICAgIGJpbmRpbmcgKHdoaWNoIGlzIG9ubHkgcmVxdWlyZWQgYnkgdGhlIG90ZXN0IGZyYW1ld29yaykuIFByb3ZpZGVzIGEgbWluaW11bQ0KKyAgICAgICAgIHNldCBvZiBmdW5jdGlvbiBmb3IgcnVubmluZyBjb21wb3NpdGVzIHVzaW5nIGltcGxlbWVudGF0aW9uLmphdmEgYW5kIGxvY2FsIA0KKyAgICAgICAgIHdpcmluZy4gT3RoZXIgZXh0ZW5zaW9ucyBjYW4gYmUgYWRkZWQgdG8gdGhpcyBiYXNlIHdoZW4gcmVxdWlyZWQgDQorICAgIC0tPg0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1wb208L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgIDxvcHRpb25hbD50cnVlPC9vcHRpb25hbD4NCisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQorICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICAgPHBsdWdpbnM+DQorDQorPCEtLSBzaGFkZXMgcGx1Z2luIGJ1dCBub3Qgd29ycnlpbmcgYWJvdXQgbWFuaWZlc3RzIGZvciB0aGUgdGltZSBiZWluZyAtLT4NCisNCisgICAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNoYWRlLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4zLjI8L3ZlcnNpb24+DQorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zaGFkZTwvZ29hbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjcmVhdGVTb3VyY2VzSmFyPnRydWU8L2NyZWF0ZVNvdXJjZXNKYXI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVycz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb249Im9yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy5zaGFkZS5yZXNvdXJjZS5TZXJ2aWNlc1Jlc291cmNlVHJhbnNmb3JtZXIiLz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KKyAgICAgICAgICAgIDwvcGx1Z2luPg0KKw0KKzwhLS0gDQorICAgdmFyaW91cyBkaWZmZXJlbnQgYXBwcm9hY2hlcyB0byB0aGUgcHJvYmxlbSBvZiBidWlsZGluZyBhZ2dyZWdhdGUgamFycw0KKyAgIGxlYXZpbmcgaGVyZSBmb3IgcmVmZXJlbmNlIHdoaWxlIHRoZSBidWlsZCBzZXR0bGVzIGRvd24NCistLT4NCisNCis8IS0tIE91ciBidW5kbGUgcGx1Z2luIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9uDQorICAgICAxLyBpdCByZWxpZXMgb24gZ2VuZXJhdGluZyB0aGUgbW9kdWxlcyBkaXJlY3RvcnkgKHdoaWNoIGlzIG5vdCBzdWNoIGEgYmlnIGRlYWwpDQorICAgICAyLyBpdCBnZW5lcmF0ZXMgYSBidW5kbGUgd2l0aCBjb250YWlucyBqYXJzIGFuZCBhIGJ1bmRsZSBjbGFzc3BhdGggc28gaXMgbm90IGpzZSBmcmllbmRseS4gDQorICAgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+IA0KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1idW5kbGUtcGx1Z2luPC9hcnRpZmFjdElkPiANCisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wLjctU05BUFNIT1Q8L3ZlcnNpb24+DQorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+ZGlzdHJpYnV0aW9uLW1vZHVsZXM8L2lkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1yZXNvdXJjZXM8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmdlbmVyYXRlLW1vZHVsZXM8L2dvYWw+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YXJnZXREaXJlY3Rvcnk+dGFyZ2V0L21vZHVsZXM8L3RhcmdldERpcmVjdG9yeT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmFnZ3JlZ2F0ZTwvaWQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtcmVzb3VyY2VzPC9waGFzZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5hZ2dyZWdhdGUtbW9kdWxlczwvZ29hbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICAgICAgIDwvcGx1Z2luPg0KKy0tPg0KKw0KKzwhLS0gVXNpbmcgdGhlIGJ1bmRsZSBwbHVnaW4gZXRjLg0KKyAgICAgVW5wYWNrIGRvZXNuJ3Qgd29yayB3aXRoIHBvbSBkZXBlbmRlbmNpZXMNCisgICAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCisNCisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPnVucGFjay1kZXBlbmRlbmNpZXM8L2lkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+dW5wYWNrLWRlcGVuZGVuY2llczwvZ29hbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L2NsYXNzZXM8L291dHB1dERpcmVjdG9yeT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG92ZXJXcml0ZVJlbGVhc2VzPmZhbHNlPC9vdmVyV3JpdGVSZWxlYXNlcz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG92ZXJXcml0ZVNuYXBzaG90cz50cnVlPC9vdmVyV3JpdGVTbmFwc2hvdHM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICAgICAgICA8L3BsdWdpbj4NCisgICAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgIDxhcmNoaXZlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtYW5pZmVzdEZpbGU+JHtwcm9qZWN0LmJ1aWxkLm91dHB1dERpcmVjdG9yeX0vTUVUQS1JTkYvTUFOSUZFU1QuTUY8L21hbmlmZXN0RmlsZT4NCisgICAgICAgICAgICAgICAgICAgIDwvYXJjaGl2ZT4NCisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgIDwvcGx1Z2luPg0KKyAgICAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+DQorDQorICAgICAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+DQorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+YnVuZGxlLW1hbmlmZXN0PC9pZD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJvY2Vzcy1jbGFzc2VzPC9waGFzZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPm1hbmlmZXN0PC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgIDxpbnN0cnVjdGlvbnM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50PkoyU0UtMS42PC9CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudD4NCisgICAgICAgICAgICAgICAgICAgIDwvaW5zdHJ1Y3Rpb25zPg0KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgPC9wbHVnaW4+DQorLS0+DQorICAgICAgICA8L3BsdWdpbnM+DQorICAgIDwvYnVpbGQ+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFIGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUtYWdncmVnYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzaGFkZXMvYmFzZS1ub2RlcC9zcmMvbWFpbi9yZXNvdXJjZXMvTElDRU5TRQpjb3B5IHRvIGRpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lLWFnZ3JlZ2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFCmRpZmYgLS1naXQgYS9zaGFkZXMvYmFzZS1ub2RlcC9zcmMvbWFpbi9yZXNvdXJjZXMvTk9USUNFIGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUtYWdncmVnYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL05PVElDRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UKY29weSB0byBkaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS1hZ2dyZWdhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTk9USUNFCmRpZmYgLS1naXQgYS9zaGFkZXMvYmFzZS9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dCBiL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lLWFnZ3JlZ2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2hhZGVzL2Jhc2Uvc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQKY29weSB0byBkaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS1hZ2dyZWdhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUtbm9kZXAvcG9tLnhtbCBiL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lLW5vZGVwL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhNTliMgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lLW5vZGVwL3BvbS54bWwKQEAgLTAsMCArMSwxMjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRpc3RyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtbm9kZXA8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBCYXNlIFJ1bnRpbWUgSmFyIGluY2x1ZGluZyBkZXBlbmRlbmNpZXM8L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+amxpbmU8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amxpbmU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+MC45Ljk0PC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxleGNsdXNpb25zPg0KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQorICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPCEtLSBUdXNjYW55IHVzZXMgamF2YS51dGlsLmxvZ2dpbmcgYnV0IGV4dGVuc2lvbnMgYW5kIGRlcGVuZGVuY2llcyBtYXkgdXNlIA0KKyAgICAgICAgICAgICBsb2c0aiwgY29tbW9ucy1sb2dnaW5nLCBzbGY0aiwgb3IgamF2YS51dGlsLmxvZ2dpbmcuIFNvIGlubGN1ZGUgc2xmNGogDQorICAgICAgICAgICAgIG1vZHVsZXMgZm9yIGFsbCBvZiB0aG9zZSB0aGF0IGRlbGVnYXRlIHRvIGphdmEudXRpbC5sb2dnaW5nLiBUaGlzIHNob3VsZA0KKyAgICAgICAgICAgICBtZWFuIHRoZXJlJ3Mgbm8gbmVlZCBmb3IgYW55IG90aGVyIGxvZ2dpbmcgamFycyBhbmQgbm8gY29uZmxpY3RzIG9uDQorICAgICAgICAgICAgIGxvZ2dpbmcgdmVyaXNvbnMgYXMgdGhvc2UgYXJlIGhhbmRsZWQgdHJhbnNwYXJlbnRseSBieSBzbGY0aiwgYW5kLCANCisgICAgICAgICAgICAgZXZlcnl0aGluZyB1c2VzIGFuZCBjYW4gYmUgY29uZmlndXJlZCBqdXN0IHdpdGggamF2YS51dGlsLmxvZ2dpbmcuDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2xmNGo8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2xmNGotYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpjbC1vdmVyLXNsZjRqPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmxvZzRqLW92ZXItc2xmNGo8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+MS42LjA8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2xmNGo8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2xmNGotamRrMTQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+MS42LjA8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICAtLT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm9zZ2k8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+My41LjAtdjIwMDkwNTIwPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgICA8cGx1Z2lucz4NCisgICAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICA8YXJjaGl2ZT4NCisgICAgICAgICAgICAgICAgICAgIDxtYW5pZmVzdEZpbGU+c3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL01BTklGRVNULk1GPC9tYW5pZmVzdEZpbGU+DQorICAgICAgICAgICAgICAgICA8L2FyY2hpdmU+DQorICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgPC9wbHVnaW4+DQorICAgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaGFkZS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4yPC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2hhZGU8L2dvYWw+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3JlYXRlU291cmNlc0phcj50cnVlPC9jcmVhdGVTb3VyY2VzSmFyPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lcnM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVyIGltcGxlbWVudGF0aW9uPSJvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMuc2hhZGUucmVzb3VyY2UuU2VydmljZXNSZXNvdXJjZVRyYW5zZm9ybWVyIi8+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cmFuc2Zvcm1lcnM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICAgICAgICA8L3BsdWdpbj4NCisgICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Jhc2UvQWdncmVnYXRlZEJ1bmRsZUFjdGl2YXRvci5qYXZhIGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUtbm9kZXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Jhc2UvQWdncmVnYXRlZEJ1bmRsZUFjdGl2YXRvci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzaGFkZXMvYmFzZS1ub2RlcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmFzZS9BZ2dyZWdhdGVkQnVuZGxlQWN0aXZhdG9yLmphdmEKcmVuYW1lIHRvIGRpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lLW5vZGVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iYXNlL0FnZ3JlZ2F0ZWRCdW5kbGVBY3RpdmF0b3IuamF2YQpkaWZmIC0tZ2l0IGEvc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UgYi9kaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS1ub2RlcC9zcmMvbWFpbi9yZXNvdXJjZXMvTElDRU5TRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFCmNvcHkgdG8gZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUtbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL01BTklGRVNULk1GCnJlbmFtZSB0byBkaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS1ub2RlcC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UgYi9kaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS1ub2RlcC9zcmMvbWFpbi9yZXNvdXJjZXMvTk9USUNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL05PVElDRQpjb3B5IHRvIGRpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0IGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUtbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0CnJlbmFtZSB0byBkaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS1ub2RlcC9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUvcG9tLnhtbCBiL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzYmRlNAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lL3BvbS54bWwKQEAgLTAsMCArMSwzMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRpc3RyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBCYXNlIFJ1bnRpbWUgSmFyPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1ub2RlPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXdlYi1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWxhdW5jaGVyPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1jbGllbnQtaW1wbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxleGNsdXNpb25zPg0KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1zcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qZXR0eTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpldHR5LXV0aWw8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2hlbGw8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc3RyaXBlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCisgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+bmV0LnNvdXJjZWZvcmdlLnN0cmlwZXM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0cmlwZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS13aW5rPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3MtcnVudGltZS1qYXh3cy1yaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1wb2xpY3ktc2VjdXJpdHk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorPCEtLSBBbGwgdGhlIHNjZGwgbW9kdWxlcyAgLS0+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1hdG9tPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctY29tZXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1jb3JiYTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWVqYjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWh0dHA8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qc29ucDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWpzb25ycGM8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1yZXN0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcm1pPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3M8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tYnBlbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPCEtLSBkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXhyczwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeSAtLT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zY3JpcHQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tc3ByaW5nPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXdlYjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi13aWRnZXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorPCEtLSB0aGVzZSByZW1haW5pbmcgZGVwZW5kZW5jaWVzIGFyZSBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyBKREs2LCBzbyB1c2UgYSBzY29wZSBvZiBwcm92aWRlZCAgLS0+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLXN0YXgtYXBpXzEuMF9zcGVjPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3N0eC1hc2w8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+My4yLjQ8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPnN0YXg8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGF4LWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQorICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLmJpbmQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4Yi1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5hY3RpdmF0aW9uPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2YXRpb248L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uc3VuLnhtbC5iaW5kPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheGItaW1wbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjEuMTI8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmphdmF4LnhtbC53czwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXh3cy1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC54bWwuc29hcDwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNhYWotYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5hbm5vdGF0aW9uPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjI1MC1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5qd3M8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anNyMTgxLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4xLjAtTVIxPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC54bWwuc3RyZWFtPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0YXgtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC0yPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgICA8cGx1Z2lucz4NCisgICAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNoYWRlLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4zLjI8L3ZlcnNpb24+DQorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zaGFkZTwvZ29hbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjcmVhdGVTb3VyY2VzSmFyPnRydWU8L2NyZWF0ZVNvdXJjZXNKYXI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb21vdGVUcmFuc2l0aXZlRGVwZW5kZW5jaWVzPnRydWU8L3Byb21vdGVUcmFuc2l0aXZlRGVwZW5kZW5jaWVzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdFNldD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS50dXNjYW55LnNjYToqPC9pbmNsdWRlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdFNldD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXJzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbj0ib3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zLnNoYWRlLnJlc291cmNlLlNlcnZpY2VzUmVzb3VyY2VUcmFuc2Zvcm1lciIvPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbj0ib3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zLnNoYWRlLnJlc291cmNlLk1hbmlmZXN0UmVzb3VyY2VUcmFuc2Zvcm1lciI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hbmlmZXN0RW50cmllcz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbi1DbGFzcz5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmxhdW5jaGVyLkxhdW5jaGVyTWFpbjwvTWFpbi1DbGFzcz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hbmlmZXN0RW50cmllcz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVyPiANCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KKyAgICAgICAgICAgIDwvcGx1Z2luPg0KKyAgICAgICAgPC9wbHVnaW5zPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCisNCmRpZmYgLS1naXQgYS9zaGFkZXMvYmFzZS9zcmMvbWFpbi9yZXNvdXJjZXMvTElDRU5TRSBiL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzaGFkZXMvYmFzZS9zcmMvbWFpbi9yZXNvdXJjZXMvTElDRU5TRQpyZW5hbWUgdG8gZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UgYi9kaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTk9USUNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzaGFkZXMvYmFzZS9zcmMvbWFpbi9yZXNvdXJjZXMvTk9USUNFCnJlbmFtZSB0byBkaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTk9USUNFCmRpZmYgLS1naXQgYS9zaGFkZXMvYmFzZS9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dCBiL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2hhZGVzL2Jhc2Uvc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQKY29weSB0byBkaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iaW5kaW5nLXJtaS1ydW50aW1lLWFnZ3JlZ2F0aW9uL3BvbS54bWwgYi9kaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2JpbmRpbmctcm1pLXJ1bnRpbWUtYWdncmVnYXRpb24vcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDQyNjljCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iaW5kaW5nLXJtaS1ydW50aW1lLWFnZ3JlZ2F0aW9uL3BvbS54bWwKQEAgLTAsMCArMSw3MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGlzdHJpYnV0aW9uPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFnZ3JlZ2F0aW9uPC9ncm91cElkPg0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcm1pLXJ1bnRpbWUtYWdncmVnYXRpb248L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBCaW5kaW5nIFJNSSBSdW50aW1lIEFnZ3JlZ2F0aW9uPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcm1pLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICAgICAgPG9wdGlvbmFsPnRydWU8L29wdGlvbmFsPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICAgPHBsdWdpbnM+DQorDQorPCEtLSBzaGFkZXMgcGx1Z2luIGJ1dCBub3Qgd29ycnlpbmcgYWJvdXQgbWFuaWZlc3RzIGZvciB0aGUgdGltZSBiZWluZyAtLT4NCisNCisgICAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNoYWRlLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4zLjI8L3ZlcnNpb24+DQorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zaGFkZTwvZ29hbD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjcmVhdGVTb3VyY2VzSmFyPnRydWU8L2NyZWF0ZVNvdXJjZXNKYXI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVycz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb249Im9yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy5zaGFkZS5yZXNvdXJjZS5TZXJ2aWNlc1Jlc291cmNlVHJhbnNmb3JtZXIiLz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KKyAgICAgICAgICAgIDwvcGx1Z2luPg0KKw0KKyAgICAgICAgPC9wbHVnaW5zPg0KKyAgICA8L2J1aWxkPg0KKw0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zaGFkZXMvYmFzZS1ub2RlcC9zcmMvbWFpbi9yZXNvdXJjZXMvTElDRU5TRSBiL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmluZGluZy1ybWktcnVudGltZS1hZ2dyZWdhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTElDRU5TRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFCmNvcHkgdG8gZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iaW5kaW5nLXJtaS1ydW50aW1lLWFnZ3JlZ2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFCmRpZmYgLS1naXQgYS9zaGFkZXMvYmFzZS1ub2RlcC9zcmMvbWFpbi9yZXNvdXJjZXMvTk9USUNFIGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iaW5kaW5nLXJtaS1ydW50aW1lLWFnZ3JlZ2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzaGFkZXMvYmFzZS1ub2RlcC9zcmMvbWFpbi9yZXNvdXJjZXMvTk9USUNFCmNvcHkgdG8gZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iaW5kaW5nLXJtaS1ydW50aW1lLWFnZ3JlZ2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0IGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iaW5kaW5nLXJtaS1ydW50aW1lLWFnZ3JlZ2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2hhZGVzL2Jhc2Uvc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQKY29weSB0byBkaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2JpbmRpbmctcm1pLXJ1bnRpbWUtYWdncmVnYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQKZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyLWFnZ3JlZ2F0aW9uL3BvbS54bWwgYi9kaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2JpbmRpbmctd3MtcnVudGltZS1heGlzMi1hZ2dyZWdhdGlvbi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYmYzMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2JpbmRpbmctd3MtcnVudGltZS1heGlzMi1hZ2dyZWdhdGlvbi9wb20ueG1sCkBAIC0wLDAgKzEsNzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRpc3RyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5hZ2dyZWdhdGlvbjwvZ3JvdXBJZD4NCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczItYWdncmVnYXRpb248L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBCaW5kaW5nIFdTIFJ1bnRpbWUgQXhpczIgQWdncmVnYXRpb248L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxvcHRpb25hbD50cnVlPC9vcHRpb25hbD4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgIDxwbHVnaW5zPg0KKw0KKzwhLS0gc2hhZGVzIHBsdWdpbiBidXQgbm90IHdvcnJ5aW5nIGFib3V0IG1hbmlmZXN0cyBmb3IgdGhlIHRpbWUgYmVpbmcgLS0+DQorDQorICAgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaGFkZS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4yPC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2hhZGU8L2dvYWw+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3JlYXRlU291cmNlc0phcj50cnVlPC9jcmVhdGVTb3VyY2VzSmFyPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lcnM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVyIGltcGxlbWVudGF0aW9uPSJvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMuc2hhZGUucmVzb3VyY2UuU2VydmljZXNSZXNvdXJjZVRyYW5zZm9ybWVyIi8+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cmFuc2Zvcm1lcnM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICAgICAgICA8L3BsdWdpbj4NCisNCisgICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCisNCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UgYi9kaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2JpbmRpbmctd3MtcnVudGltZS1heGlzMi1hZ2dyZWdhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTElDRU5TRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFCmNvcHkgdG8gZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczItYWdncmVnYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UgYi9kaXN0cmlidXRpb24vYWdncmVnYXRpb25zL2JpbmRpbmctd3MtcnVudGltZS1heGlzMi1hZ2dyZWdhdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTk9USUNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL05PVElDRQpjb3B5IHRvIGRpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyLWFnZ3JlZ2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0IGIvZGlzdHJpYnV0aW9uL2FnZ3JlZ2F0aW9ucy9iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczItYWdncmVnYXRpb24vc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzaGFkZXMvYmFzZS9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dApjb3B5IHRvIGRpc3RyaWJ1dGlvbi9hZ2dyZWdhdGlvbnMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyLWFnZ3JlZ2F0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0CmRpZmYgLS1naXQgYS9kaXN0cmlidXRpb24vYWxsL3BvbS54bWwgYi9kaXN0cmlidXRpb24vYWxsL3BvbS54bWwKaW5kZXggN2Q5ZjY2Yy4uY2JiZWU1YiAxMDA2NDQKLS0tIGEvZGlzdHJpYnV0aW9uL2FsbC9wb20ueG1sCisrKyBiL2Rpc3RyaWJ1dGlvbi9hbGwvcG9tLnhtbApAQCAtMzEsNTYgKzMxLDMzIEBACiAgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KIAogICAgIDxkZXBlbmRlbmNpZXM+CisKKyAgICAgICAgPCEtLSBtb2R1bGUgamFycyBmb3IgbW9kdWxlcyBkaXJlY3RvcnkgLS0+CisKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWFsbDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDwhLS0gYWdncmVnYXRpb24gamFycyBmb3IgbGliIGRpcmVjdG9yeSAtLT4KKwogICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1ub2RlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5hZ2dyZWdhdGlvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lLWFnZ3JlZ2F0aW9uPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1lamItcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24td2ViLWNsaWVudDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS10cmFjaW5nLWFzcGVjdGo8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXNwZWN0ajwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFzcGVjdGp3ZWF2ZXI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjYuODwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgogCiAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2U8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFnZ3JlZ2F0aW9uPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXJtaS1ydW50aW1lLWFnZ3JlZ2F0aW9uPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CisKICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc3ByaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5hZ2dyZWdhdGlvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyLWFnZ3JlZ2F0aW9uPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKQEAgLTE4NCw3ICsxNjEsMTAgQEAKICAgICAgICAgICAgIDxwbHVnaW4+CiAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+IAogICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWJ1bmRsZS1wbHVnaW48L2FydGlmYWN0SWQ+IAotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC42PC92ZXJzaW9uPgorPCEtLSBUVVNDQU5ZLTM2NzQgCisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wLjY8L3ZlcnNpb24+ICAgICAgICAgIAorLS0+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wLjctU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CiAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+ZGlzdHJpYnV0aW9uLW1vZHVsZXM8L2lkPgpAQCAtMTk3LDggKzE3Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1c2VEaXN0cmlidXRpb25OYW1lPiR7dXNlRGlzdHJpYnV0aW9uTmFtZX08L3VzZURpc3RyaWJ1dGlvbk5hbWU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnZW5lcmF0ZUFnZ3JlZ2F0ZWRCdW5kbGU+JHtnZW5lcmF0ZUFnZ3JlZ2F0ZWRCdW5kbGV9PC9nZW5lcmF0ZUFnZ3JlZ2F0ZWRCdW5kbGU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnZW5lcmF0ZU1hbmlmZXN0SmFyPnRydWU8L2dlbmVyYXRlTWFuaWZlc3RKYXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlc05hbWU+ZmVhdHVyZXM8L2ZlYXR1cmVzTmFtZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVHcm91cElkcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5hZ2dyZWdhdGlvbjwvZ3JvdXBJZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGNsdWRlR3JvdXBJZHM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdE1hbmlmZXN0cz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdE1hbmlmZXN0PgpAQCAtMjU0LDYgKzIzNSwxNzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RBZ2dyZWdhdGlvbnMtLT4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Cis8IS0tIFRVU0NBTlktMzY3NCAKKyAgICAgdW5jb21tZW50IHdoZW4gdXNpbmcgbWF2ZW4tYnVuZGxlLXBsdWdpbiB2MS4wLjctU05BUFNIT1QKKy0tPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmV4dGVuc2lvbnMtYnVpbGQ8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtcmVzb3VyY2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Z2VuZXJhdGUtbWV0YS1kYXRhPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z2VuZXJhdGVNb2R1bGVzPmZhbHNlPC9nZW5lcmF0ZU1vZHVsZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1c2VEaXN0cmlidXRpb25OYW1lPmZhbHNlPC91c2VEaXN0cmlidXRpb25OYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z2VuZXJhdGVNYW5pZmVzdEphcj50cnVlPC9nZW5lcmF0ZU1hbmlmZXN0SmFyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z2VuZXJhdGVDb25maWc+ZmFsc2U8L2dlbmVyYXRlQ29uZmlnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z2VuZXJhdGVBbnRTY3JpcHQ+dHJ1ZTwvZ2VuZXJhdGVBbnRTY3JpcHQ+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z2VuZXJhdGVUYXJnZXRQbGF0Zm9ybT5mYWxzZTwvZ2VuZXJhdGVUYXJnZXRQbGF0Zm9ybT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdlbmVyYXRlQWdncmVnYXRlZEJ1bmRsZT5mYWxzZTwvZ2VuZXJhdGVBZ2dyZWdhdGVkQnVuZGxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVhdHVyZXNOYW1lPmZlYXR1cmVzPC9mZWF0dXJlc05hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZWF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmVhdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZWF0dXJlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dGVuc2lvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWF0b20tcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctY29tbWV0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWNvcmJhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWVqYi1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1oYXplbGNhc2UtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWpzb25wLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWpzb25ycGMtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcmVzdC1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1ybWktcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcnNzLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRlbnNpb24+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWJwZWwtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWpheGVzLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1vc2dpLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXNjcmlwdC1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi13ZWItcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXdpZGdldC1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4dGVuc2lvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0TWFuaWZlc3RzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0TWFuaWZlc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS53cy5jb21tb25zLmF4aW9tPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmF4aW9tLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjIuODwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7YmFzZWRpcn0vbWFuaWZlc3RzL2F4aW9tLWFwaS0xLjIuOC5NRjwvbWFuaWZlc3RGaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdE1hbmlmZXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0TWFuaWZlc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS53b2RlbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53b2Rlbi1pbXBsLWRvbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjBNODwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7YmFzZWRpcn0vbWFuaWZlc3RzL3dvZGVuLWltcGwtZG9tLTEuME04Lk1GPC9tYW5pZmVzdEZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FydGlmYWN0TWFuaWZlc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RNYW5pZmVzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmF4aXMyPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmF4aXMyLWtlcm5lbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjUuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7YmFzZWRpcn0vbWFuaWZlc3RzL2F4aXMyLWtlcm5lbC0xLjUuMS5NRjwvbWFuaWZlc3RGaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdE1hbmlmZXN0PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0TWFuaWZlc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5heGlzMjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5heGlzMi10cmFuc3BvcnQtaHR0cDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjUuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7YmFzZWRpcn0vbWFuaWZlc3RzL2F4aXMyLXRyYW5zcG9ydC1odHRwLTEuNS4xLk1GPC9tYW5pZmVzdEZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FydGlmYWN0TWFuaWZlc3Q+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RNYW5pZmVzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmF4aXMyPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPio8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+KjwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RNYW5pZmVzdD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdE1hbmlmZXN0cz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisKIDwhLS0KICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5kaXN0cmlidXRpb24tc2luZ2xlYnVuZGxlPC9pZD4KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGlvbi9hbGwvc3JjL21haW4vYXNzZW1ibHkvc3JjLnhtbCBiL2Rpc3RyaWJ1dGlvbi9hbGwvc3JjL21haW4vYXNzZW1ibHkvc3JjLnhtbAppbmRleCA4OWQ1MGE3Li5lNjAzYjk4IDEwMDY0NAotLS0gYS9kaXN0cmlidXRpb24vYWxsL3NyYy9tYWluL2Fzc2VtYmx5L3NyYy54bWwKKysrIGIvZGlzdHJpYnV0aW9uL2FsbC9zcmMvbWFpbi9hc3NlbWJseS9zcmMueG1sCkBAIC0zOCw4ICszOCwxMSBAQAogICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldDwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvKiovKjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9tYXZlbi1lY2xpcHNlLnhtbDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9kZXBlbmRlbmN5LXJlZHVjZWQtcG9tLnhtbDwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT5tb2R1bGVzL3dlYi1qYXZhc2NyaXB0LWRvam8vc3JjL21haW4vcmVzb3VyY2VzL2Rvam8vKio8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgPGV4Y2x1ZGU+c2hhZGVzLyoqL2RlcGVuZGVuY3ktcmVkdWNlZC1wb20ueG1sPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPnNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL2Rvam8vKio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+dW5yZWxlYXNlZDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT51bnJlbGVhc2VkLyoqPC9leGNsdWRlPgogICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgPC9maWxlU2V0PgogICAgIDwvZmlsZVNldHM+CmRpZmYgLS1naXQgYS9kaXN0cmlidXRpb24vYWxsL3NyYy9tYWluL2NvbXBvbmVudHMvYmluLWxpYi54bWwgYi9kaXN0cmlidXRpb24vYWxsL3NyYy9tYWluL2NvbXBvbmVudHMvYmluLWxpYi54bWwKaW5kZXggMWRhNmJlYi4uNjg2MGQwYyAxMDA2NDQKLS0tIGEvZGlzdHJpYnV0aW9uL2FsbC9zcmMvbWFpbi9jb21wb25lbnRzL2Jpbi1saWIueG1sCisrKyBiL2Rpc3RyaWJ1dGlvbi9hbGwvc3JjL21haW4vY29tcG9uZW50cy9iaW4tbGliLnhtbApAQCAtMjQsNiArMjQsMjAgQEAKICAgICAgICAgICAgIDx1c2VUcmFuc2l0aXZlRGVwZW5kZW5jaWVzPnRydWU8L3VzZVRyYW5zaXRpdmVEZXBlbmRlbmNpZXM+DQogICAgICAgICAgICAgPHVucGFjaz5mYWxzZTwvdW5wYWNrPg0KICAgICAgICAgICAgIDxpbmNsdWRlcz4NCisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5hZ2dyZWdhdGlvbjp0dXNjYW55LWJhc2UtcnVudGltZS1hZ2dyZWdhdGlvbjwvaW5jbHVkZT4NCisgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5hZ2dyZWdhdGlvbjp0dXNjYW55LWJpbmRpbmctcm1pLXJ1bnRpbWUtYWdncmVnYXRpb248L2luY2x1ZGU+DQorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUudHVzY2FueS5zY2EuYWdncmVnYXRpb246dHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczItYWdncmVnYXRpb248L2luY2x1ZGU+DQorICAgICAgICAgICAgICAgIDwhLS0gbmVlZGVkIGJ5IHNvbWUgb2YgdGhlIHNhbXBsZSBidWlsZCBzY3JpcHRzIGJ1dCBkb24ndCB0aGluayB3ZSBhY3R1YWxseSBuZWVkIHRvIHB1dCB0aGlzIGhlcmUgLS0+DQorICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUudHVzY2FueS5zY2E6dHVzY2FueS1zY2EtYXBpPC9pbmNsdWRlPg0KKyAgICAgICAgICAgIDwvaW5jbHVkZXM+DQorICAgICAgICA8L2RlcGVuZGVuY3lTZXQ+DQorDQorPCEtLSBkZXBlbmRlbmNpZXMgcmVmZXJyaW5nIHRvIHRoZSBzaGFkZSBqYXJzLCBkaXNhYmxpbmcgZm9yIHRoZSB0aW1lIGJlaW5nDQorICAgICAgICA8ZGVwZW5kZW5jeVNldD4NCisgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PmxpYjwvb3V0cHV0RGlyZWN0b3J5Pg0KKyAgICAgICAgICAgIDx1c2VUcmFuc2l0aXZlRGVwZW5kZW5jaWVzPnRydWU8L3VzZVRyYW5zaXRpdmVEZXBlbmRlbmNpZXM+DQorICAgICAgICAgICAgPHVucGFjaz5mYWxzZTwvdW5wYWNrPg0KKyAgICAgICAgICAgIDxpbmNsdWRlcz4NCiAgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM6dHVzY2FueS1iYXNlPC9pbmNsdWRlPg0KICAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLndzLmNvbW1vbnMuc2NoZW1hOlhtbFNjaGVtYTwvaW5jbHVkZT4NCiAgICAgICAgICAgICAgICAgPGluY2x1ZGU+Y2dsaWI6Y2dsaWI8L2luY2x1ZGU+DQpAQCAtNDIsNiArNTYsNyBAQAogICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5zcHJpbmdmcmFtZXdvcms6KjwvaW5jbHVkZT4NCiAgICAgICAgICAgICA8L2luY2x1ZGVzPg0KICAgICAgICAgPC9kZXBlbmRlbmN5U2V0Pg0KKy0tPg0KICAgICA8L2RlcGVuZGVuY3lTZXRzPg0KICAgICA8ZmlsZVNldHM+DQogCTxmaWxlU2V0Pg0KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGlvbi9hbGwvc3JjL21haW4vY29tcG9uZW50cy9iaW4tc2FtcGxlcy54bWwgYi9kaXN0cmlidXRpb24vYWxsL3NyYy9tYWluL2NvbXBvbmVudHMvYmluLXNhbXBsZXMueG1sCmluZGV4IDVmZTljNTUuLjkwZTVkMjUgMTAwNjQ0Ci0tLSBhL2Rpc3RyaWJ1dGlvbi9hbGwvc3JjL21haW4vY29tcG9uZW50cy9iaW4tc2FtcGxlcy54bWwKKysrIGIvZGlzdHJpYnV0aW9uL2FsbC9zcmMvbWFpbi9jb21wb25lbnRzL2Jpbi1zYW1wbGVzLnhtbApAQCAtMzksOCArMzksMTIgQEAKICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvZGVwZW5kZW5jeS1tYXZlbi1wbHVnaW4tbWFya2Vycy8qKi8qPC9leGNsdWRlPgogICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldC8uZmVsaXg8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovdGFyZ2V0Ly5mZWxpeC8qKi8qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldC9nZW5lcmF0ZWQtc291cmNlczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvZ2VuZXJhdGVkLXNvdXJjZXMvKiovKjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvbWF2ZW4tYXJjaGl2ZXI8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovdGFyZ2V0L21hdmVuLWFyY2hpdmVyLyoqLyo8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovdGFyZ2V0L21hdmVuLXNoYXJlZC1hcmNoaXZlLXJlc291cmNlczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvbWF2ZW4tc2hhcmVkLWFyY2hpdmUtcmVzb3VyY2VzLyoqLyo8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovdGFyZ2V0L3Rlc3QtY2xhc3NlczwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvdGVzdC1jbGFzc2VzLyoqLyo8L2V4Y2x1ZGU+CiAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovdGFyZ2V0L3Nkby1zb3VyY2U8L2V4Y2x1ZGU+CkBAIC01MSw4ICs1NSwxMSBAQAogICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldC9zdXJlZmlyZS1vc2dpLXJlcG9ydHMvKiovKjwvZXhjbHVkZT4KICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvd2FyPC9leGNsdWRlPgogICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL3RhcmdldC93YXIvKiovKjwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICA8ZXhjbHVkZT53ZWJhcHBzLyovdGFyZ2V0PC9leGNsdWRlPgotICAgICAgICAgICAgICAgIDxleGNsdWRlPndlYmFwcHMvKi90YXJnZXQvKiovKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvd29yazwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvd29yay8qKi8qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyotd2ViYXBwL3RhcmdldDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLXdlYmFwcC90YXJnZXQvKiovKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvZG9qby8qKi8qPC9leGNsdWRlPgogICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgPC9maWxlU2V0PgogICAgIDwvZmlsZVNldHM+CmRpZmYgLS1naXQgYS9kaXN0cmlidXRpb24vYWxsL3NyYy9tYWluL3JlbGVhc2UvYmluL0xJQ0VOU0UgYi9kaXN0cmlidXRpb24vYWxsL3NyYy9tYWluL3JlbGVhc2UvYmluL0xJQ0VOU0UKaW5kZXggOTQxZGMwNC4uN2JmODI3ZiAxMDA2NDQKLS0tIGEvZGlzdHJpYnV0aW9uL2FsbC9zcmMvbWFpbi9yZWxlYXNlL2Jpbi9MSUNFTlNFCisrKyBiL2Rpc3RyaWJ1dGlvbi9hbGwvc3JjL21haW4vcmVsZWFzZS9iaW4vTElDRU5TRQpAQCAtMjU3LDE5ICsyNTcsMTcgQEAKICBkZXJieS0xMC40LjEuMy5qYXINCiAgZHdyLTIuMC4zLmphcg0KICBnZXJvbmltby1hY3RpdmF0aW9uXzEuMV9zcGVjLTEuMC4xLmphcg0KLSBnZXJvbmltby1jb25uZWN0b3ItMi4xLjMuamFyDQorIGdlcm9uaW1vLWNvbm5lY3Rvci0yLjEuNC5qYXINCiAgZ2Vyb25pbW8tZWpiXzMuMF9zcGVjLTEuMC4xLmphcg0KLSBnZXJvbmltby1lbF8xLjBfc3BlYy0xLjAuMS5qYXINCiAgZ2Vyb25pbW8tamF2YW1haWxfMS40X3NwZWMtMS42Lmphcg0KICBnZXJvbmltby1qbXNfMS4xX3NwZWMtMS4xLjEuamFyDQogIGdlcm9uaW1vLWpwYV8zLjBfc3BlYy0xLjEuMS5qYXINCi0gZ2Vyb25pbW8tanNwXzIuMV9zcGVjLTEuMC4xLmphcg0KICBnZXJvbmltby1qdGFfMS4wLjFCX3NwZWMtMS4wLmphcg0KICBnZXJvbmltby1qdGFfMS4xX3NwZWMtMS4xLjEuamFyDQogIGdlcm9uaW1vLWoyZWUtY29ubmVjdG9yXzEuNV9zcGVjLTIuMC4wLmphcg0KICBnZXJvbmltby1rZXJuZWwtMi4wLjEuamFyDQogIGdlcm9uaW1vLXN0YXgtYXBpXzEuMF9zcGVjLTEuMC4xLmphcg0KLSBnZXJvbmltby10cmFuc2FjdGlvbi0yLjEuMy5qYXINCisgZ2Vyb25pbW8tdHJhbnNhY3Rpb24tMi4xLjQuamFyDQogIGdlcm9uaW1vLXdzLW1ldGFkYXRhXzIuMF9zcGVjLTEuMS4yLmphcg0KICBncm9vdnktYWxsLTEuNy4xLmphcg0KICBoYXplbGNhc3QtMS44LjMuamFyDQpAQCAtMjc4LDkgKzI3Niw5IEBACiAgaHR0cGNvcmUtNC4wLjEuamFyDQogIGh0dHBjb3JlLW5pby00LjAuMS5qYXINCiAgamFic29yYi0xLjMuMS5qYXINCi0gamFja3Nvbi1jb3JlLWFzbC0xLjUuNC5qYXINCi0gamFja3Nvbi1tYXBwZXItYXNsLTEuNS40Lmphcg0KLSBqYWNrc29uLXhjLTEuNS40Lmphcg0KKyBqYWNrc29uLWNvcmUtYXNsLTEuNi4wLmphcg0KKyBqYWNrc29uLW1hcHBlci1hc2wtMS42LjAuamFyDQorIGphY2tzb24teGMtMS42LjAuamFyDQogIGpldHRpc29uLTEuMi5qYXINCiAgamV0dHktNi4xLjE5Lmphcg0KICBqZXR0eS11dGlsLTYuMS4xOS5qYXINCkBAIC0zMTAsMTQgKzMwOCwxMiBAQAogIHJhbXBhcnQtcG9saWN5LTEuNC5qYXINCiAgcmFtcGFydC10cnVzdC0xLjQuamFyDQogIHJlZ2V4cC0xLjMuamFyDQotIHJvbWUtMS4wLmphcg0KLSBzcHJpbmctYW9wLTMuMC4yLlJFTEVBU0UuamFyCi0gc3ByaW5nLWFzbS0zLjAuMi5SRUxFQVNFLmphcgorIHNwcmluZy1hb3AtMy4wLjIuUkVMRUFTRS5qYXINCisgc3ByaW5nLWFzbS0zLjAuMi5SRUxFQVNFLmphcg0KICBzcHJpbmctYmVhbnMtMy4wLjIuUkVMRUFTRS5qYXINCiAgc3ByaW5nLWNvbnRleHQtMy4wLjIuUkVMRUFTRS5qYXINCi0gc3ByaW5nLWNvcmUtMy4wLjIuUkVMRUFTRS5qYXIKKyBzcHJpbmctY29yZS0zLjAuMi5SRUxFQVNFLmphcg0KICBzcHJpbmctZXhwcmVzc2lvbi0zLjAuMi5SRUxFQVNFLmphcg0KLSBzdHJpcGVzLTEuNS4yLmphcg0KICB0cmFucWwtY29ubmVjdG9yLTEuMS5qYXINCiAgdHJpYmVzLTYuMC4yNi5qYXINCiAgd2luay1jb21tb24tMS4xLjEtaW5jdWJhdGluZy5qYXINCkBAIC0zMjcsNyArMzIzLDYgQEAKICB3b2Rlbi1pbXBsLWRvbS0xLjBNOC5qYXINCiAgd3NzNGotMS41LjQuamFyDQogIHdzdHgtYXNsLTMuMi40Lmphcg0KLSB3c3R4LWFzbC0zLjIuNi5qYXINCiAgeGFsYW4tMi43LjAuamFyDQogIHhlcmNlc0ltcGwtMi44LjEuamFyDQogIHhtbC1hcGlzLTEuMy4wNC5qYXINCkBAIC0xNjEzLDUzICsxNjA4LDYgQEAKIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4NCiBUSEUgU09GVFdBUkUuDQogDQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotDQotDQotVGhlIHR1c2NhbnktYXNzZW1ibHkteHNkLW9zb2EgamFyIGluY2x1ZGVzIFhTRCBmaWxlcyB1bmRlciB0aGUgZm9sbG93aW5nIFNDQSBDb2xsYWJvcmF0aW9uIGxpY2Vuc2U6DQotDQotTGljZW5zZSBmb3IgdGhlIFNlcnZpY2UgQ29tcG9uZW50IEFyY2hpdGVjdHVyZSBKYXZhRG9jLCBJbnRlcmZhY2UgDQotRGVmaW5pdGlvbiBmaWxlcyBhbmQgWFNEIGZpbGVzLg0KLQ0KLVRoZSBTZXJ2aWNlIENvbXBvbmVudCBBcmNoaXRlY3R1cmUgSmF2YURvYywgSW50ZXJmYWNlIERlZmluaXRpb24gZmlsZXMsIA0KLWFuZCBYU0QgZmlsZXMgYXJlIGJlaW5nIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyB1bmRlciB0aGUgDQotZm9sbG93aW5nIGxpY2Vuc2UuIEJ5IHVzaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgd29yaywgeW91IGFncmVlIHRoYXQgDQoteW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCANCi1jb25kaXRpb25zOg0KLQ0KLVBlcm1pc3Npb24gdG8gY29weSwgZGlzcGxheSwgbWFrZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBhbmQgZGlzdHJpYnV0ZSANCi10aGUgU2VydmljZSBDb21wb25lbnQgQXJjaGl0ZWN0dXJlIEphdmFEb2MsIEludGVyZmFjZSBEZWZpbml0aW9uIEZpbGVzIA0KLWFuZCBYU0QgZmlsZXMgKHRoZSAiQXJ0aWZhY3RzIikgaW4gYW55IG1lZGl1bSB3aXRob3V0IGZlZSBvciByb3lhbHR5IGlzIA0KLWhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgb24gQUxMIGNvcGllcyANCi1vZiB0aGUgQXJ0aWZhY3RzLCBvciBwb3J0aW9ucyB0aGVyZW9mLCB0aGF0IHlvdSBtYWtlOiANCi0NCi0xLiBBIGxpbmsgb3IgVVJMIHRvIHRoZSBBcnRpZmFjdHMgYXQgdGhpcyBsb2NhdGlvbjoNCi1odHRwOi8vd3d3Lm9zb2Eub3JnL2Rpc3BsYXkvTWFpbi9TZXJ2aWNlK0NvbXBvbmVudCtBcmNoaXRlY3R1cmUrU3BlY2lmaWNhdGlvbnMgDQotDQotMi4gVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIGNvcHlyaWdodCBub3RpY2UgYXMgc2hvd24gaW4gdGhlIEFydGlmYWN0cy4NCi0NCi1USEUgQVJUSUZBQ1RTIEFSRSBQUk9WSURFRCAiQVMgSVMsIiBBTkQgVEhFIEFVVEhPUlMgTUFLRSBOTyANCi1SRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBSRUdBUkRJTkcgVEhFIA0KLUFSVElGQUNUUyBBTkQgVEhFIElNUExFTUVOVEFUSU9OIE9GIFRIRUlSIENPTlRFTlRTLCBJTkNMVURJTkcsIEJVVCBOT1QgDQotTElNSVRFRCBUTywgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiANCi1QVVJQT1NFLCBOT04tSU5GUklOR0VNRU5UIE9SIFRJVExFLiAgDQotDQotVEhFIEFVVEhPUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgDQotSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gQU5ZIA0KLVVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIEFSVElGQUNUUy4NCi0NCi1UaGUgbmFtZSBhbmQgdHJhZGVtYXJrcyBvZiB0aGUgQXV0aG9ycyBtYXkgTk9UIGJlIHVzZWQgaW4gYW55IG1hbm5lciwgDQotaW5jbHVkaW5nIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoZSBTZXJ2aWNlIENvbXBvbmVudCANCi1BcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbiBvciBpdHMgY29udGVudHMgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiANCi1wcmlvciBwZXJtaXNzaW9uLiBUaXRsZSB0byBjb3B5cmlnaHQgaW4gdGhlIFNlcnZpY2UgQ29tcG9uZW50IA0KLUFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uIGFuZCB0aGUgSmF2YURvYywgSW50ZXJmYWNlIERlZmluaXRpb24gRmlsZXMgDQotYW5kIFhTRCBGaWxlcyB3aWxsIGF0IGFsbCB0aW1lcyByZW1haW4gd2l0aCB0aGUgQXV0aG9ycy4NCi0NCi1ObyBvdGhlciByaWdodHMgYXJlIGdyYW50ZWQgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4NCi0NCi1SZXZpc2lvbiBsZXZlbCAxLjEsIGxhc3QgdXBkYXRlZCBvbiAyMDA3LzExLzE5DQotDQotDQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiANCiBUaGUgdHVzY2FueS1hc3NlbWJseS14c2QuamFyIGFuZCB0dXNjYW55LXNjYS1hcGkuamFyIGluY2x1ZGUgZmlsZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBPQVNJUyBsaWNlbnNlOg0KQEAgLTIyNzUsNyArMjIyMyw3IEBACiAgICAgIE9yaWdpbmFsIENvZGUgU291cmNlIENvZGUgZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dDQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiANCi1UaGUganl0aG9uLTIuMi4xLmphciBpbmNsdWRlcyBmaWxlcyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2VzOiANCitUaGUganl0aG9uLTIuNS4yLWJldGExLmphciBpbmNsdWRlcyBmaWxlcyB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2VzOiANCiANCiBUaGUgSnl0aG9uIExpY2Vuc2UNCiBBLiBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQUNDRVNTSU5HIE9SIE9USEVSV0lTRSBVU0lORyBKWVRIT04NCmRpZmYgLS1naXQgYS9kaXN0cmlidXRpb24vYWxsL3NyYy9tYWluL3JlbGVhc2UvbGF1bmNoZXIvZGVmYXVsdC5jb25maWcgYi9kaXN0cmlidXRpb24vYWxsL3NyYy9tYWluL3JlbGVhc2UvbGF1bmNoZXIvZGVmYXVsdC5jb25maWcKaW5kZXggZDBmNjhkZS4uN2NhNjBhYyAxMDA2NDQKLS0tIGEvZGlzdHJpYnV0aW9uL2FsbC9zcmMvbWFpbi9yZWxlYXNlL2xhdW5jaGVyL2RlZmF1bHQuY29uZmlnCisrKyBiL2Rpc3RyaWJ1dGlvbi9hbGwvc3JjL21haW4vcmVsZWFzZS9sYXVuY2hlci9kZWZhdWx0LmNvbmZpZwpAQCAtMTYsNyArMTYsNyBAQAogIw0KIA0KIGNsYXNzcGF0aD1tb2R1bGVzLyoqDQotbWFpbkNsYXNzPVtmaXJzdEFyZ0phck1hbmlmZXN0TWFpbkNsYXNzXXxvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRvbWFpbi5ub2RlLkRvbWFpbk5vZGVNYWluDQorbWFpbkNsYXNzPVtmaXJzdEFyZ0phck1hbmlmZXN0TWFpbkNsYXNzXXxvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoZWxsLlNoZWxsDQogLURqYXZhLnV0aWwubG9nZ2luZy5jb25maWcuZmlsZT17VFVTQ0FOWV9IT01FfS9zYW1wbGVzL2xvZ2dpbmcucHJvcGVydGllcw0KIA0KIA0KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGlvbi9hbGwvc3JjL21haW4vcmVsZWFzZS9sYXVuY2hlci90dXNjYW55LmJhdCBiL2Rpc3RyaWJ1dGlvbi9hbGwvc3JjL21haW4vcmVsZWFzZS9sYXVuY2hlci90dXNjYW55LmJhdAppbmRleCBjYmY2OTYyLi4xOTFiMDJjIDEwMDY0NAotLS0gYS9kaXN0cmlidXRpb24vYWxsL3NyYy9tYWluL3JlbGVhc2UvbGF1bmNoZXIvdHVzY2FueS5iYXQKKysrIGIvZGlzdHJpYnV0aW9uL2FsbC9zcmMvbWFpbi9yZWxlYXNlL2xhdW5jaGVyL3R1c2NhbnkuYmF0CkBAIC0xOCw4ICsxOCw5IEBACiBSRU0gIyB1bmRlciB0aGUgTGljZW5zZS4gDQogDQogUkVNIFRPRE86IGNhbid0IGdldCB0aGVzZSB0byB3b3JrIHlldCB3aGVuIHVzaW5nIHRoZSB0cmliZXMgZG9tYWltIFVSSSBpbiBxdW90ZXMNCi1SRU0gaWYgIiUxIi49PSIvPyIuIGdvdG8gaGVscA0KLVJFTSBpZiAiJTEiLj09Ii1oZWxwIi4gZ290byBoZWxwDQoraWYgIiUxIi49PSIvPyIuIGdvdG8gaGVscA0KK2lmICIlMSIuPT0iLWhlbHAiLiBnb3RvIGhlbHANCitpZiAiJTEiLj09Ii1oZWxwIi4gZ290byBoZWxwDQogDQogaWYgbm90ICIlVFVTQ0FOWV9IT01FJSI9PSIiIGdvdG8gZ290SG9tZQ0KIFNFVCBUVVNDQU5ZX0hPTUU9JX5kcDBcLi4NCkBAIC0zMiwxMyArMzMsMTMgQEAKIA0KIA0KIHNldCBfWERFQlVHPQ0KLWlmIG5vdCAlMT09ZGVidWcgZ290byBza2lwRGVidWcNCitpZiBub3QgIiUxIj09ImRlYnVnIiBnb3RvIHNraXBEZWJ1Zw0KIHNldCBfWERFQlVHPS1YZGVidWcgLVhydW5qZHdwOnRyYW5zcG9ydD1kdF9zb2NrZXQsYWRkcmVzcz04MDAwLHNlcnZlcj15LHN1c3BlbmQ9eQ0KIHNoaWZ0DQogOnNraXBEZWJ1Zw0KIA0KIHNldCBfRk9SSz0NCi1pZiBub3QgJTE9PWZvcmsgZ290byBza2lwRm9yaw0KK2lmIG5vdCAiJTEiPT0iZm9yayIgZ290byBza2lwRm9yaw0KIHNldCBfRk9SSz1zdGFydA0KIHNoaWZ0DQogOnNraXBGT1JLDQpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0aW9uL3BvbS54bWwgYi9kaXN0cmlidXRpb24vcG9tLnhtbAppbmRleCBhMzVkNWE0Li4xMTUzZDhkIDEwMDY0NAotLS0gYS9kaXN0cmlidXRpb24vcG9tLnhtbAorKysgYi9kaXN0cmlidXRpb24vcG9tLnhtbApAQCAtMzEsNiArMzEsMTIgQEAKICAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgRGlzdHJpYnV0aW9uczwvbmFtZT4KIAogICAgIDxtb2R1bGVzPgorICAgICAgICA8bW9kdWxlPmFnZ3JlZ2F0aW9ucy9iYXNlLXJ1bnRpbWU8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5hZ2dyZWdhdGlvbnMvYmFzZS1ydW50aW1lLW5vZGVwPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+YWdncmVnYXRpb25zL2Jhc2UtcnVudGltZS1hZ2dyZWdhdGlvbjwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmFnZ3JlZ2F0aW9ucy9iaW5kaW5nLXJtaS1ydW50aW1lLWFnZ3JlZ2F0aW9uPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+YWdncmVnYXRpb25zL2JpbmRpbmctd3MtcnVudGltZS1heGlzMi1hZ2dyZWdhdGlvbjwvbW9kdWxlPgorCiAgICAgICAgIDxtb2R1bGU+YWxsPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+dG9tY2F0PC9tb2R1bGU+CiAgICAgPC9tb2R1bGVzPgpkaWZmIC0tZ2l0IGEvZGlzdHJpYnV0aW9uL3RvbWNhdC90ZXN0aW5nL2xlZ2FsLWNoZWNrcy9wb20ueG1sIGIvZGlzdHJpYnV0aW9uL3RvbWNhdC90ZXN0aW5nL2xlZ2FsLWNoZWNrcy9wb20ueG1sCmluZGV4IDM0YmEwZmEuLjRiZmZjZjMgMTAwNjQ0Ci0tLSBhL2Rpc3RyaWJ1dGlvbi90b21jYXQvdGVzdGluZy9sZWdhbC1jaGVja3MvcG9tLnhtbAorKysgYi9kaXN0cmlidXRpb24vdG9tY2F0L3Rlc3RpbmcvbGVnYWwtY2hlY2tzL3BvbS54bWwKQEAgLTIxLDcgKzIxLDcgQEAKICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAgICAgPHBhcmVudD4KICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3QtZGlzdHJpYnV0aW9uPC9hcnRpZmFjdElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRpc3RyaWJ1dGlvbi10b21jYXQtdGVzdGluZzwvYXJ0aWZhY3RJZD4KICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KICAgICA8L3BhcmVudD4KQEAgLTI5LDYgKzI5LDEyIEBACiAgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFdBUiBEaXN0cmlidXRpb24gTGVnYWwgQ2hlY2tzPC9uYW1lPgogCiAgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAKICAgICA8YnVpbGQ+CmRpZmYgLS1naXQgYS9kaXN0cmlidXRpb24vdG9tY2F0L3RvbWNhdC13YXIvcG9tLnhtbCBiL2Rpc3RyaWJ1dGlvbi90b21jYXQvdG9tY2F0LXdhci9wb20ueG1sCmluZGV4IDI3NTZkYTIuLjcyNzQzYjEgMTAwNjQ0Ci0tLSBhL2Rpc3RyaWJ1dGlvbi90b21jYXQvdG9tY2F0LXdhci9wb20ueG1sCisrKyBiL2Rpc3RyaWJ1dGlvbi90b21jYXQvdG9tY2F0LXdhci9wb20ueG1sCkBAIC00NywzMyArNDcsMTAgQEAKICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci08IS0tCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXdlYnNlcnZpY2VzPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qc29ucC1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotLS0+Ci0KICAgICA8L2RlcGVuZGVuY2llcz4KIAogICAgIDxidWlsZD4KZGlmZiAtLWdpdCBhL2Rpc3RyaWJ1dGlvbi90b21jYXQvdG9tY2F0LXdhci9zcmMvbWFpbi93ZWJhcHAvTElDRU5TRSBiL2Rpc3RyaWJ1dGlvbi90b21jYXQvdG9tY2F0LXdhci9zcmMvbWFpbi93ZWJhcHAvTElDRU5TRQppbmRleCBmNGY4OGRhLi42MmE4NzcyIDEwMDY0NAotLS0gYS9kaXN0cmlidXRpb24vdG9tY2F0L3RvbWNhdC13YXIvc3JjL21haW4vd2ViYXBwL0xJQ0VOU0UKKysrIGIvZGlzdHJpYnV0aW9uL3RvbWNhdC90b21jYXQtd2FyL3NyYy9tYWluL3dlYmFwcC9MSUNFTlNFCkBAIC0yMTYsOCArMjE2LDYgQEAKIFRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBjb21lIHVuZGVyIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlIDIuMA0KIA0KICBjZ2xpYi0yLjIuamFyDQotIGhhemVsY2FzdC0xLjguMy5qYXINCi0gaGF6ZWxjYXN0LWNsaWVudC0xLjguMy5qYXINCiAgc3dpenpsZS1zdHJlYW0tMS4wLjIuamFyDQogIFhtbFNjaGVtYS0xLjQuMy5qYXINCiANCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9hbGwvcG9tLnhtbCBiL2ZlYXR1cmVzL2FsbC9wb20ueG1sCmluZGV4IGZiZWQ0NGMuLmJhMWJkMWIgMTAwNjQ0Ci0tLSBhL2ZlYXR1cmVzL2FsbC9wb20ueG1sCisrKyBiL2ZlYXR1cmVzL2FsbC9wb20ueG1sCkBAIC0zMiw2ICszMiwxMiBAQAogCiAgICAgPGRlcGVuZGVuY2llcz4KIAorCis8IS0tIENoYW5nZSB0byBleHBsaWNpdCBkZXBlbmRlbmNpZXMgdG8gCisgICAgIDEvIGJlIGFic29sdXRlbHkgdHJhbnNwYXJlbnQgYWJvdXQgd2hhdCdzIGluY2x1ZGVkCisgICAgIDIvIGluc3RhbGwgYSBjb21tb24gYXBwcm9hY2ggZm9yIGZlYXR1cmVzIGZvbGxvd2luZyB0aGUgYmFzZSArIGV4dGVuc2lvbnMgaWRlYQorICAgICAzLyBjdXJyZW50bHkgaXQncyBhIHN0cmFuZ2UgbWl4IG9mIGZlYXR1cmVzIGFuZCBhcnRpZmFjdHMuIAorCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1hcGk8L2FydGlmYWN0SWQ+CkBAIC0xMDYsNiArMTEyLDI5MCBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS10cmFjaW5nLWFzcGVjdGo8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKy0tPgorCisgICAgICAgIDwhLS0gYmFzZSBydW50aW1lcyAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1vc2dpLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPCEtLSBiaW5kaW5nIGV4dGVuc2lvbnMgLS0+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWF0b20tcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctYXRvbS1qcy1kb2pvPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKzwhLS0gbm90IGluIGRpc3RybyB1bnRpbCBidWlsZCBzZXR0bGVzIGRvd24KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWNvbWV0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKy0tPgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1jb3JiYS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWVqYi1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWh0dHAtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPCEtLSBmb3Igbm93IHRpbCB0aGUgYmFzZSBjb250ZW50cyBpcyBzb3J0ZWQgLS0+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctanNvbnAtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qc29ucnBjLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWpzb25ycGMtanMtZG9qbzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1yZXN0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcm1pLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3MtcnVudGltZS1heGlzMjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDwhLS0gaW1wbGVtZW50YXRpb24gZXh0ZW5zaW9ucyAtLT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWJwZWwtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF4cnMtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tb3NnaS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tc2NyaXB0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi13ZWItY2xpZW50PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi13ZWItcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24td2lkZ2V0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi13aWRnZXQtcnVudGltZS1kb2pvPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPCEtLSBwb2xpY3kgZXh0ZW5zaW9ucyAtLT4KKworPCEtLSBub3QgaW4gZGlzdHJvIHVudGlsIGJ1aWxkIHNldHRsZXMgZG93bgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXBvbGljeS1sb2dnaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CistLT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXBvbGljeS10cmFuc2FjdGlvbi1ydW50aW1lLWdlcm9uaW1vPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPCEtLSBkYXRhYmluZGluZyBleHRlbnNpb25zIC0tPgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YWJpbmRpbmctc2RvPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZy1zZG8tYXhpb208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8IS0tIGhvc3QgZXh0ZW5zaW9ucyAtLT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtY29yYmEtamVlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWNvcmJhLWpzZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1jb3JiYS1qc2UtdG5zPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPCEtLSByZWdpc3RyeSBleHRlbnNpb25zIC0tPgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZG9tYWluLWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZW5kcG9pbnQtdHJpYmVzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPCEtLSB1dGlsaXRpZXMgLS0+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1sYXVuY2hlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZG9tYWluLW5vZGU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW15ZmFjZXM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNoZWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zdHJpcGVzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS10cmFjaW5nLWFzcGVjdGo8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPCEtLSB0ZXN0IGRlcGVuZGVuY3kgb2YgdHVzY2FueS10cmFjaW5nLWFzcGVjdGogYnV0IHByZXZpb3VzbHkgaW5jbHVkZWQgaW4gdGhlIGRpc3Rybz8gLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFzcGVjdGo8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hc3BlY3Rqd2VhdmVyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS42Ljg8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgIDwvZGVwZW5kZW5jaWVzPgogCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9iaW5kaW5nLXdzL3BvbS54bWwgYi9mZWF0dXJlcy9iaW5kaW5nLXdzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYTU2ODUuLjAwMDAwMDAKLS0tIGEvZmVhdHVyZXMvYmluZGluZy13cy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmU8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1iaW5kaW5nLXdzPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgYmluZGluZy53cyBGZWF0dXJlPC9uYW1lPg0KLSAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICAgICAgPCEtLSBDb3JlIGRpc3RyaWJ1dGlvbiAtLT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDwhLS0gQmluZGluZ3MgLS0+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13czwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYW50PC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YW50LW5vZGVwczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmF4aXMyPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWRkcmVzc2luZzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmF4aXMyPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXhpczIteG1sYmVhbnM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5heGlzMjwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmF4aXMyLWFkYi1jb2RlZ2VuPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmJvdW5jeWNhc3RsZTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmJjcHJvdi1qZGsxNTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcGVuc2FtbDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9wZW5zYW1sPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy13c2RsZ2VuPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDwhLS0gRGF0YWJpbmRpbmdzIC0tPg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nLWF4aW9tPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZy1qYXhiLWF4aW9tPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDwhLS0gSG9zdHMgLS0+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1qZXR0eTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9mZWF0dXJlcy9jb3JlL3BvbS54bWwgYi9mZWF0dXJlcy9jb3JlL3BvbS54bWwKaW5kZXggM2IyNzUwMS4uMzExMTUyNyAxMDA2NDQKLS0tIGEvZmVhdHVyZXMvY29yZS9wb20ueG1sCisrKyBiL2ZlYXR1cmVzL2NvcmUvcG9tLnhtbApAQCAtMjMwLDYgKzIzMCwxMyBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS14c2Q8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNoZWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKICAgICA8L2RlcGVuZGVuY2llcz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvZWphdmEvcG9tLnhtbCBiL2ZlYXR1cmVzL2VqYXZhL3BvbS54bWwKaW5kZXggMmNiODI1Yi4uOWJjMWUwMiAxMDA2NDQKLS0tIGEvZmVhdHVyZXMvZWphdmEvcG9tLnhtbAorKysgYi9mZWF0dXJlcy9lamF2YS9wb20ueG1sCkBAIC0xNjIsMTIgKzE2Miw3IEBACiAgICAgICAgIDwhLS0gSGF6ZWxjYXN0IHJlZ2lzdHJ5IC0tPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdC1jbGllbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1oYXplbGNhc3Q8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIApkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvcG9tLnhtbCBiL2ZlYXR1cmVzL3BvbS54bWwKaW5kZXggMjNlYmJjYi4uYjEzYjkxOCAxMDA2NDQKLS0tIGEvZmVhdHVyZXMvcG9tLnhtbAorKysgYi9mZWF0dXJlcy9wb20ueG1sCkBAIC0zMSw2ICszMSwxNCBAQAogICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBGZWF0dXJlczwvbmFtZT4KIAogICAgIDxtb2R1bGVzPgorCisgICAgICAgIDwhLS0gCisgICAgICAgICAgICBGZWF0dXJlcyAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgU29tZXdoYXQgYXJiaXRyYXJ5IGFuZCBuZWNlc3NhcmlseSBvdmVybGFwcGluZyBjb2xsZWN0aW9ucyBvZiBUdXNjYW55CisgICAgICAgICAgICBtb2R1bGVzIHRhcmdldHRlZCBhdCBzdXBwb3J0aW5nIHNwZWNpZmljIHR5cGVzIG9mIGFwcGxpY2F0aW9uIHdpdGggCisgICAgICAgICAgICBhcHByb3ByaWF0ZSBncm91cHMgb2YgZnVuY3Rpb24KKyAgICAgICAgLS0+CiAgICAgICAgIDxtb2R1bGU+YWxsPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+YXBpPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+Y29yZTwvbW9kdWxlPgpAQCAtNDQsOCArNTIsNyBAQAogPCEtLQogICAgICAgICA8bW9kdWxlPm1hbmFnZXI8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5yZXBvc2l0b3J5PC9tb2R1bGU+Ci0tLT4KLSAgICAgICAgPG1vZHVsZT5iaW5kaW5nLXdzPC9tb2R1bGU+CistLT4gICAgIAogICAgIDwvbW9kdWxlcz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvZmVhdHVyZXMvd2ViMjAvcG9tLnhtbCBiL2ZlYXR1cmVzL3dlYjIwL3BvbS54bWwKaW5kZXggN2ViNzA5Zi4uNzA1NjdhOSAxMDA2NDQKLS0tIGEvZmVhdHVyZXMvd2ViMjAvcG9tLnhtbAorKysgYi9mZWF0dXJlcy93ZWIyMC9wb20ueG1sCkBAIC0xMTUsMTIgKzExNSw2IEBACiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcnNzLXJ1bnRpbWU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICAgICAgICAgCi0KICAgICAgICAgPCEtLSBEb2pvIGFuZCBEb2pvIEV4dGVuc2lvbnMgLS0+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL2l0ZXN0L1QzNTU4L3BvbS54bWwgYi9pdGVzdC9UMzU1OC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjA1OTFlLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L1QzNTU4L3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3QtdDM1NTg8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBUMzU1ODwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0gICAgDQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2Jhc2UvZGVwZW5kZW5jaWVzL3BvbS54bWwgYi9pdGVzdC9iYXNlL2RlcGVuZGVuY2llcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZjEwYzA5Li4wMDAwMDAwCi0tLSBhL2l0ZXN0L2Jhc2UvZGVwZW5kZW5jaWVzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3QtYmFzZS1kZXBlbmRlbmNpZXM8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBCYXNlIERlcGVuZGVuY2llczwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLSAgICANCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8cGx1Z2lucz4NCi0gICAgICAgICAgPCEtLSBDb3B5IGFsbCB0aGUgZGVwZW5kZW5jaWVzIHNvIHRoZSB0ZXN0IGNhbiB2ZXJpZnkgb25seSB0aGUgZXhwZWN0ZWQgb25lcyBnZXQgZHJhZ2dlZCBpbiAtLT4NCi0gICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBlbmRlbmN5LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgIDxpZD5jb3B5PC9pZD4NCi0gICAgICAgICAgICAgICAgICAgPHBoYXNlPmNvbXBpbGU8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmNvcHktZGVwZW5kZW5jaWVzPC9nb2FsPg0KLSAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KLSAgICAgICAgICA8L3BsdWdpbj4NCi0gICAgICAgPC9wbHVnaW5zPg0KLSAgPC9idWlsZD4NCi0NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3QvYmFzZS9kZXBlbmRlbmNpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2Jhc2UvZGVwZW5kZW5jaWVzL1ZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2UuamF2YSBiL2l0ZXN0L2Jhc2UvZGVwZW5kZW5jaWVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iYXNlL2RlcGVuZGVuY2llcy9WYWxpZGF0ZURlcGVuZGVuY2llc1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NjkxY2IuLjAwMDAwMDAKLS0tIGEvaXRlc3QvYmFzZS9kZXBlbmRlbmNpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2Jhc2UvZGVwZW5kZW5jaWVzL1ZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi0NCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaXRlc3QuYmFzZS5kZXBlbmRlbmNpZXM7DQotDQotaW1wb3J0IGphdmEuaW8uRmlsZTsNCi0NCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsNCi0NCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQotDQotLyoqDQotICogVGVzdCBjYXNlIGZvciB2ZXJpZnlpbmcgdGhlIGV4cGVjdGVkIGRlcGVuZGVuY2llcyBvZiB0aGUgYmFzZSBqYXINCi0gKiAoVXNlcyBtYXZlbi1kZXBlbmRlbmN5LXBsdWdpbiBjb25maWcgaW4gdGhlIHBvbS54bWwgdG8gZ2VuZXJhdGUgdGhlIGRlcGVuZGVuY3kgbGlzdCkNCi0gKg0KLSAqICoqKiBOT1RFOiB0aGlzIGlzIGFuIEFQSSEgSWYgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2UgdGhlIEFQSSBpcyBjaGFuZ2VkIGFuZCB1c2VycyB3aWxsIGJlIGJyb2tlbi4NCi0gKiAgICAgICAgICAgRG9uJ3QganVzdCBjaGFuZ2UgdGhlIGxpc3Qgd2l0aG91dCB0aGlua2luZyBhYm91dCB0aGUgY29uc2VxdWVuY2llcw0KLSAqIA0KLSAqIEN1cnJlbnQgcmVxdWlyZWQgamFycyBhcmU6DQotICogICAgYXNtLTMuMS5qYXINCi0gKiAgICBjZ2xpYi0yLjIuamFyDQotICogICAgaGF6ZWxjYXN0LTEuOC4zLmphcg0KLSAqICAgIGhhemVsY2FzdC1jbGllbnQtMS44LjMuamFyDQotICogICAgdHVzY2FueS1iYXNlLTIuMC1TTkFQU0hPVC5qYXINCi0gKiAgICB3c2RsNGotMS42LjIuamFyDQotICogICAgWG1sU2NoZW1hLTEuNC4zLmphciAgDQotICoNCi0gKiAgICBqdW5pdC00LjguMS5qYXIgKG9ubHkgZnJvbSB0aGlzIHRlc3RjYXNlKQ0KLSAqDQotICovDQotcHVibGljIGNsYXNzIFZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2Ugew0KLQ0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCBjb3VudERlcGVuZGVuY2llcygpIHsNCi0NCi0gICAgICAgIEZpbGUgZGVwZW5kZW5jaWVzRGlyID0gbmV3IEZpbGUoInRhcmdldC9kZXBlbmRlbmN5Iik7DQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZXBlbmRlbmNpZXNEaXIuZXhpc3RzKCkpOw0KLSAgICAgICAgDQotICAgICAgICBGaWxlW10gZGVwZW5kZW5jeUZpbGVzID0gZGVwZW5kZW5jaWVzRGlyLmxpc3RGaWxlcygpOw0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg4LCBkZXBlbmRlbmN5RmlsZXMubGVuZ3RoKTsNCi0gICAgfQ0KLX0NCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhIGIvaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlNmU0ZS4uMDAwMDAwMAotLS0gYS9pdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBoZWxsb3dvcmxkOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5pbXBsZW1lbnRhdGlvbi5icGVsLmV4YW1wbGUuaGVsbG93b3JsZC5IZWxsb1BvcnRUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLS8qKgotICogVGVzdHMgdGhlIEJQRUwgSGVsbG93b3JsZCBTZXJ2aWNlCi0gKiAKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIE5vZGUgbm9kZTsKLSAgICAKLSAgICAvKioKLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KLSAgICAgKi8KLSAgICBAQmVmb3JlQ2xhc3MKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAJU3RyaW5nIGxvY2F0aW9uID0gQ29udHJpYnV0aW9uTG9jYXRpb25IZWxwZXIuZ2V0Q29udHJpYnV0aW9uTG9jYXRpb24oImhlbGxvd29ybGQvaGVsbG93b3JsZC5jb21wb3NpdGUiKTsKLQkJbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgiaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oImMxIiwgbG9jYXRpb24pKTsKLSAgICAgICAgbm9kZS5zdGFydCgpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgotICAgICAqLwotICAgIEBBZnRlckNsYXNzCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgCW5vZGUuc3RvcCgpOwotICAgIH0KLSAgICAKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RTZXJ2aWNlSW52b2NhdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBIZWxsb1BvcnRUeXBlIGJwZWxTZXJ2aWNlID0gbm9kZS5nZXRTZXJ2aWNlKEhlbGxvUG9ydFR5cGUuY2xhc3MsICJCUEVMSGVsbG9Xb3JsZFNlcnZpY2UiKTsKLSAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gYnBlbFNlcnZpY2UuaGVsbG8oIkhlbGxvIik7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkhlbGxvIFdvcmxkIiwgcmVzcG9uc2UpOwotICAgIH0KLSAgICAKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RSZWZlcmVuY2VJbnZvY2F0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEhlbGxvV29ybGQgYnBlbFNlcnZpY2UgPSBub2RlLmdldFNlcnZpY2UoSGVsbG9Xb3JsZC5jbGFzcywgIkJQRUxIZWxsb1dvcmxkIik7Ci0gICAgICAgIFN0cmluZyByZXNwb25zZSA9IGJwZWxTZXJ2aWNlLmhlbGxvKCJIZWxsbyIpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJIZWxsbyBXb3JsZCIsIHJlc3BvbnNlKTsgICAgICAgIAotICAgIH0KLX0KZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvcG9tLnhtbCBiL2l0ZXN0L2J1aWxkZXIvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5ODNiNC4uMDAwMDAwMAotLS0gYS9pdGVzdC9idWlsZGVyL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPml0ZXN0LWJ1aWxkZXI8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEJ1aWxkZXI8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1tb25pdG9yPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3MtcnVudGltZS1heGlzMjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgCi0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctc2NhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4gIAotICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1hc3NlbWJseTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1kYXRhYmluZGluZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPnhlcmNlczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnhlcmNlc0ltcGw8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjguMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgICAKLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICAgIDxidWlsZD4KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KLSAgICA8L2J1aWxkPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9CdWlsZGVyVGVzdENhc2UuamF2YSBiL2l0ZXN0L2J1aWxkZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvQnVpbGRlclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUyZmRhMGUuLjAwMDAwMDAKLS0tIGEvaXRlc3QvYnVpbGRlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9CdWlsZGVyVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgxNCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLml0ZXN0LmJ1aWxkZXI7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb25lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb25lbnRTZXJ2aWNlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5XZWJTZXJ2aWNlQmluZGluZzsKLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotLyoqCi0gKiBMb2FkIGFuZCBidWlsZCBzb21lIGNvbXBvc2l0ZXMgYW5kIGluc3BlY3QgdGhlIHJlc3VsdHMuCi0gKiAKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgQnVpbGRlclRlc3RDYXNlIHsKLSAgICBwcml2YXRlIEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIgY3VzdG9tQnVpbGRlcjsKLSAgICAKLSAgICBAQmVmb3JlCi0gICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICB9Ci0KLSAgICBAQWZ0ZXIKLSAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgIH0KLQotIC8qIE9BU0lTIGRvZXNuJ3QgdGFrZSBub3RpY2Ugb2YgdG9wIGxldmVsIGNvbXBvc2l0ZSBzZXJ2aWNlcwotICAqIAotICAgIC8vIFNjZW5hcmlvIDE6IDxiaW5kaW5nLndzPiBvbiBvdXRlciBjb21wb3NpdGUgc2VydmljZSBDb21wb3NpdGVBL1NlcnZpY2UxCi0gICAgQElnbm9yZQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMSgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8xIik7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcihmYWxzZSk7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW8xLmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEvIik7Ci0gICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIGNoZWNrU2NlbmFyaW8xUmVzdWx0cyhmYWxzZSk7Ci0gICAgfQotCi0gICAgQElnbm9yZQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMU5vbldpcmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8xTm9uV2lyaW5nIik7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcih0cnVlKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzEuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMS8iKTsKLSAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgY2hlY2tTY2VuYXJpbzFSZXN1bHRzKHRydWUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjaGVja1NjZW5hcmlvMVJlc3VsdHMoYm9vbGVhbiBub25XaXJpbmcpIHsKLSAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEQgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEQiKTsKLSAgICAgICAgaWYgKCFub25XaXJpbmcpIHsKLSAgICAgICAgICAgIC8vIFNob3VsZCBjcmVhdGUgY29tcG9uZW50IHNlcnZpY2UgJHByb21vdGVkJFNlcnZpY2UxIG9uIGlubmVybW9zdCBjb21wb25lbnQKLSAgICAgICAgICAgIC8vICBDb21wb25lbnRELCB3aXRoIDxiaW5kaW5nLndzPiBhbmQgdXJpPSIvU2VydmljZTEiCi0gICAgICAgICAgICAvLyBObyBvdGhlciBzZXJ2aWNlcyBvbiBDb21wb25lbnREIHNob3VsZCBoYXZlIDxiaW5kaW5nLndzPgotICAgICAgICAgICAgV2ViU2VydmljZUJpbmRpbmcgd3NCaW5kaW5nID0gbnVsbDsKLSAgICAgICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlIDogY29tcG9uZW50RC5nZXRTZXJ2aWNlcygpKSB7Ci0gICAgICAgICAgICAgICAgV2ViU2VydmljZUJpbmRpbmcgd3NiID0gc2VydmljZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKTsKLSAgICAgICAgICAgICAgICBpZiAoIiRwcm9tb3RlZCRTZXJ2aWNlMSIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSB3c2I7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHdzYiA9PSBudWxsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydCAiL1NlcnZpY2UxIi5lcXVhbHMod3NCaW5kaW5nLmdldFVSSSgpKTsKLQotICAgICAgICAgICAgLy8gU2hvdWxkIGNyZWF0ZSBXU0RMIGRvY3VtZW50IGZvciBDb21wb25lbnRELyRwcm9tb3RlZCRTZXJ2aWNlMSB3aXRoIGVuZHBvaW50IHVyaT0iL1NlcnZpY2UxIgotICAgICAgICAgICAgRGVmaW5pdGlvbiBkZWYgPSB3c0JpbmRpbmcuZ2V0V1NETERvY3VtZW50KCk7Ci0gICAgICAgICAgICBqYXZheC53c2RsLlNlcnZpY2Ugc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vYnVpbGRlci5pdGVzdC5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIsICJTZXJ2aWNlM1NlcnZpY2UiKSk7IAotICAgICAgICAgICAgUG9ydCBwb3J0ID0gc3ZjLmdldFBvcnQoIlNlcnZpY2UzUG9ydCIpOwotICAgICAgICAgICAgYXNzZXJ0ICIvU2VydmljZTEiLmVxdWFscyhUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBjcmVhdGUgY29tcG9uZW50IHNlcnZpY2UgJHByb21vdGVkJFNlcnZpY2UxIG9uIGlubmVybW9zdCBjb21wb25lbnQgQ29tcG9uZW50RAotICAgICAgICAgICAgLy8gTm8gY29tcG9uZW50IHNlcnZpY2VzIG9uIENvbXBvbmVudEQgc2hvdWxkIGhhdmUgPGJpbmRpbmcud3M+Ci0gICAgICAgICAgICBmb3IgKENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSA6IGNvbXBvbmVudEQuZ2V0U2VydmljZXMoKSkgewotICAgICAgICAgICAgICAgIGFzc2VydCAhIiRwcm9tb3RlZCRTZXJ2aWNlMSIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQgc2VydmljZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKSA9PSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm8gc2VydmljZXMgb24gQ29tcG9uZW50QiBzaG91bGQgaGF2ZSA8YmluZGluZy53cz4KLSAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEIgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEIiKTsKLSAgICAgICAgZm9yIChDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnRCLmdldFNlcnZpY2VzKCkpIHsKLSAgICAgICAgICAgIGFzc2VydCBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpID09IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBObyBzZXJ2aWNlcyBvbiBDb21wb3NpdGVDIHNob3VsZCBoYXZlIDxiaW5kaW5nLndzPgotICAgICAgICBDb21wb3NpdGUgY29tcG9zaXRlQyA9IFRlc3RVdGlscy5nZXRDb21wb3NpdGUoZG9tYWluQ29tcG9zaXRlLCBuZXcgUU5hbWUoImh0dHA6Ly9zY2VuYXJpbzEiLCAiQ29tcG9zaXRlQyIpKTsKLSAgICAgICAgZm9yIChTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb3NpdGVDLmdldFNlcnZpY2VzKCkpIHsKLSAgICAgICAgICAgIGFzc2VydCBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpID09IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobm9uV2lyaW5nKSB7Ci0gICAgICAgICAgICAvLyBTaG91bGQgbm90IGFkZCBhIFdTREwgZG9jdW1lbnQgdG8gZG9tYWluIGNvbXBvc2l0ZSBzZXJ2aWNlIFNlcnZpY2UxCi0gICAgICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c0JpbmRpbmcgPSBudWxsOwotICAgICAgICAgICAgZm9yIChTZXJ2aWNlIHNlcnZpY2UgOiBkb21haW5Db21wb3NpdGUuZ2V0U2VydmljZXMoKSkgewotICAgICAgICAgICAgICAgIGlmICgiU2VydmljZTEiLmVxdWFscyhzZXJ2aWNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgd3NCaW5kaW5nID0gc2VydmljZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpID09IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBleHBlY3RlZEVuZHBvaW50cyA9ICAiQ29tcG9uZW50IC0gQ29tcG9uZW50QlxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlcnZpY2UgLSBTZXJ2aWNlMlxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVuZHBvaW50IC0gU2VydmljZTJcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2aWNlIC0gU2VydmljZTJhXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW5kcG9pbnQgLSBTZXJ2aWNlMmFcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgLSByZWZlcmVuY2UyXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcG9uZW50IC0gQ29tcG9uZW50QiBoYXMgY29tcG9zaXRlIGltcGxcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBDb21wb25lbnQgLSBDb21wb25lbnREXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgU2VydmljZSAtIFNlcnZpY2UzXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgRW5kcG9pbnQgLSBTZXJ2aWNlM1xuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIFNlcnZpY2UgLSBTZXJ2aWNlM2FcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBFbmRwb2ludCAtIFNlcnZpY2UzYVxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIFJlZmVyZW5jZSAtIHJlZmVyZW5jZTMiOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGFjdHVhbEVuZHBvaW50cyA9IFRlc3RVdGlscy5wcmludEVuZHBvaW50cyhkb21haW5Db21wb3NpdGUpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYWN0dWFsRW5kcG9pbnRzKTsKLSAgICAgICAgCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRFbmRwb2ludHMsIGFjdHVhbEVuZHBvaW50cyk7Ci0gICAgfQotKi8KLQotICAgIC8vIFNjZW5hcmlvIDI6IDxiaW5kaW5nLndzPiBvbiBvdXRlciBjb21wb25lbnQgc2VydmljZSBDb21wb25lbnRCL1NlcnZpY2UyCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW8yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT5SdW5uaW5nIHRlc3RTY2VuYXJpbzIiKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKGZhbHNlKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzIuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMi8iKTsKLSAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgY2hlY2tTY2VuYXJpbzJhbmQzUmVzdWx0cygiaHR0cDovL3NjZW5hcmlvMiIsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW8yTm9uV2lyaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT5SdW5uaW5nIHRlc3RTY2VuYXJpbzJOb25XaXJpbmciKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKHRydWUpOwotICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvMi5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8yLyIpOwotICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBjaGVja1NjZW5hcmlvMmFuZDNSZXN1bHRzKCJodHRwOi8vc2NlbmFyaW8yIiwgdHJ1ZSk7Ci0gICAgfQotICAgIAotICAgIHByaXZhdGUgdm9pZCBjaGVja1NjZW5hcmlvMmFuZDNSZXN1bHRzKFN0cmluZyBuYW1lc3BhY2UsIGJvb2xlYW4gbm9uV2lyaW5nKSB7Ci0gICAgICAgIENvbXBvc2l0ZSBkb21haW5Db21wb3NpdGUgPSBjdXN0b21CdWlsZGVyLmdldERvbWFpbkNvbXBvc2l0ZSgpOwotICAgICAgICAKLSAgICAgICAgLy8gVGVzdCB0aGF0IGVuZHBvaW50IHN0cnVjdHVyZSBtYXRjaGVzIGV4cGVjdGVkCi0gICAgICAgIFN0cmluZyBzdHJ1Y3R1cmUgPSBUZXN0VXRpbHMucHJpbnRTdHJ1Y3R1cmUoZG9tYWluQ29tcG9zaXRlLCAiIik7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihzdHJ1Y3R1cmUpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGV4cGVjdGVkU3RydWN0dXJlID0gIkNvbXBvbmVudCBVUkkgLSBDb21wb25lbnRCXG4iICsKLSAgICAgICAgIiAgQ29tcG9uZW50IFVSSSAtIENvbXBvbmVudEIvQ29tcG9uZW50RFxuIiArCi0gICAgICAgICIgIEVuZHBvaW50OiAgVVJJID0gQ29tcG9uZW50Qi9Db21wb25lbnREI3NlcnZpY2UtYmluZGluZyhTZXJ2aWNlMy9TZXJ2aWNlMykgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5pbXBsLlNDQUJpbmRpbmdJbXBsXG4iICsKLSAgICAgICAgIiAgRW5kcG9pbnQ6ICBVUkkgPSBDb21wb25lbnRCL0NvbXBvbmVudEQjc2VydmljZS1iaW5kaW5nKFNlcnZpY2UzYS9TZXJ2aWNlM2EpIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuaW1wbC5TQ0FCaW5kaW5nSW1wbFxuIiArCi0gICAgICAgICJFbmRwb2ludDogIFVSSSA9IENvbXBvbmVudEIjc2VydmljZS1iaW5kaW5nKFNlcnZpY2UyL1NlcnZpY2UyKSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuaW1wbC5XZWJTZXJ2aWNlQmluZGluZ0ltcGxcbiIgKwotICAgICAgICAiRW5kcG9pbnQ6ICBVUkkgPSBDb21wb25lbnRCI3NlcnZpY2UtYmluZGluZyhTZXJ2aWNlMmEvU2VydmljZTNhKSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGwuU0NBQmluZGluZ0ltcGxcbiI7Ci0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhleHBlY3RlZFN0cnVjdHVyZSwgc3RydWN0dXJlKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRlc3QgdGhhdCBnZW5lcmF0ZWQgV1NETCBtYXRjaGVzIGV4cGVjdGVkCi0gICAgICAgIC8vIFNob3VsZCBjcmVhdGUgV1NETCBkb2N1bWVudCBmb3IgQ29tcG9uZW50Qi9TZXJ2aWNlMiB3aXRoIGVuZHBvaW50IHVyaT0iL0NvbXBvbmVudEIvU2VydmljZTIiCi0gICAgICAgIC8vIE5vIG90aGVyIHNlcnZpY2VzIG9uIENvbXBvbmVudEIgc2hvdWxkIGhhdmUgPGJpbmRpbmcud3M+Ci0gICAgICAgIENvbXBvbmVudCBjb21wb25lbnRCID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnRCIik7Ci0gICAgICAgIFdlYlNlcnZpY2VCaW5kaW5nIHdzQmluZGluZyA9IG51bGw7Ci0gICAgCi0gICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlIDogY29tcG9uZW50Qi5nZXRTZXJ2aWNlcygpKSB7Ci0gICAgICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c2IgPSBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOwotICAgICAgICAgICAgaWYgKCJTZXJ2aWNlMiIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHdzYjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHdzYiA9PSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgCi0gICAgICAgIERlZmluaXRpb24gZGVmID0gd3NCaW5kaW5nLmdldEdlbmVyYXRlZFdTRExEb2N1bWVudCgpOwotICAgICAgICBUZXN0VXRpbHMud3JpdGVXU0RMKGRlZik7Ci0gICAgICAgIAotICAgICAgICBqYXZheC53c2RsLlNlcnZpY2Ugc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vYnVpbGRlci5pdGVzdC5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIsICJTZXJ2aWNlM1NlcnZpY2UiKSk7IAotICAgICAgICBQb3J0IHBvcnQgPSBzdmMuZ2V0UG9ydCgiU2VydmljZTNQb3J0Iik7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIi9Db21wb25lbnRCL1NlcnZpY2UyIixUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOwotICAgICAKLSAgICB9Ci0vKgotICAgIC8vIFNjZW5hcmlvIDM6IDxiaW5kaW5nLndzPiBvbiBpbm5lciBjb21wb3NpdGUgc2VydmljZSBDb21wb3NpdGVDL1NlcnZpY2UyCi0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8zIik7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcihmYWxzZSk7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW8zLmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzMvIik7Ci0gICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIGNoZWNrU2NlbmFyaW8yYW5kM1Jlc3VsdHMoImh0dHA6Ly9zY2VuYXJpbzMiLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvM05vbldpcmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8zTm9uV2lyaW5nIik7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcih0cnVlKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzMuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMy8iKTsKLSAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgY2hlY2tTY2VuYXJpbzJhbmQzUmVzdWx0cygiaHR0cDovL3NjZW5hcmlvMyIsIHRydWUpOwotICAgIH0KLQotICAgIC8vIFNjZW5hcmlvIDQ6IDxiaW5kaW5nLndzPiBvbiBpbm5lciBjb21wb25lbnQgc2VydmljZSBDb21wb25lbnREL1NlcnZpY2UzCi0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvNCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW80Iik7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcihmYWxzZSk7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW80LmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzQvIik7Ci0gICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIGNoZWNrU2NlbmFyaW80UmVzdWx0cyhmYWxzZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvNE5vbldpcmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW80Tm9uV2lyaW5nIik7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcih0cnVlKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzQuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNC8iKTsKLSAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgY2hlY2tTY2VuYXJpbzRSZXN1bHRzKHRydWUpOwotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBjaGVja1NjZW5hcmlvNFJlc3VsdHMoYm9vbGVhbiBub25XaXJpbmcpIHsKLSAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgLy8gU2hvdWxkIGNyZWF0ZSBXU0RMIGRvY3VtZW50IGZvciBDb21wb25lbnREL1NlcnZpY2UzIHdpdGggZW5kcG9pbnQgdXJpPSIvQ29tcG9uZW50RC9TZXJ2aWNlMyIKLSAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEQgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEQiKTsKLSAgICAgICAgV2ViU2VydmljZUJpbmRpbmcgd3NCaW5kaW5nID0gbnVsbDsKLSAgICAgICAgZm9yIChDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnRELmdldFNlcnZpY2VzKCkpIHsKLSAgICAgICAgICAgIGlmICgiU2VydmljZTMiLmVxdWFscyhzZXJ2aWNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIERlZmluaXRpb24gZGVmID0gd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpOwotICAgICAgICBqYXZheC53c2RsLlNlcnZpY2Ugc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vYnVpbGRlci5pdGVzdC5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIsICJTZXJ2aWNlM1NlcnZpY2UiKSk7IAotICAgICAgICBQb3J0IHBvcnQgPSBzdmMuZ2V0UG9ydCgiU2VydmljZTNQb3J0Iik7Ci0gICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvQ29tcG9uZW50RC9TZXJ2aWNlMyIuZXF1YWxzKFRlc3RVdGlscy5nZXRQb3J0QWRkcmVzcyhwb3J0KSk7Ci0KLSAgICAgICAgLy8gU2hvdWxkIGFkZCA8YmluZGluZy53cz4gdG8gaW5uZXIgY29tcG9zaXRlIHNlcnZpY2UgQ29tcG9zaXRlQy9TZXJ2aWNlMiAKLSAgICAgICAgLy8gTm8gb3RoZXIgc2VydmljZXMgb24gQ29tcG9zaXRlQyBzaG91bGQgaGF2ZSA8YmluZGluZy53cz4KLSAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZUMgPSBUZXN0VXRpbHMuZ2V0Q29tcG9zaXRlKGRvbWFpbkNvbXBvc2l0ZSwgbmV3IFFOYW1lKCJodHRwOi8vc2NlbmFyaW80IiwgIkNvbXBvc2l0ZUMiKSk7Ci0gICAgICAgIHdzQmluZGluZyA9IG51bGw7Ci0gICAgICAgIGZvciAoU2VydmljZSBzZXJ2aWNlIDogY29tcG9zaXRlQy5nZXRTZXJ2aWNlcygpKSB7Ci0gICAgICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c2IgPSBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOwotICAgICAgICAgICAgaWYgKCJTZXJ2aWNlMiIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHdzYjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHdzYiA9PSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvU2VydmljZTIiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOwotCi0gICAgICAgIC8vIFNob3VsZCBhZGQgPGJpbmRpbmcud3M+IHRvIG91dGVyIGNvbXBvbmVudCBzZXJ2aWNlIENvbXBvbmVudEIvU2VydmljZTIgCi0gICAgICAgIC8vIFNob3VsZCBjcmVhdGUgV1NETCBkb2N1bWVudCBmb3IgQ29tcG9uZW50Qi9TZXJ2aWNlMiB3aXRoIGVuZHBvaW50IHVyaT0iL0NvbXBvbmVudEIvU2VydmljZTIiCi0gICAgICAgIC8vIE5vIG90aGVyIHNlcnZpY2VzIG9uIENvbXBvbmVudEIgc2hvdWxkIGhhdmUgPGJpbmRpbmcud3M+Ci0gICAgICAgIENvbXBvbmVudCBjb21wb25lbnRCID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnRCIik7Ci0gICAgICAgIHdzQmluZGluZyA9IG51bGw7Ci0gICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlIDogY29tcG9uZW50Qi5nZXRTZXJ2aWNlcygpKSB7Ci0gICAgICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c2IgPSBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOwotICAgICAgICAgICAgaWYgKCJTZXJ2aWNlMiIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHdzYjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHdzYiA9PSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvU2VydmljZTIiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOwotICAgICAgICBkZWYgPSB3c0JpbmRpbmcuZ2V0V1NETERvY3VtZW50KCk7Ci0gICAgICAgIHN2YyA9IGRlZi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL2J1aWxkZXIuaXRlc3Quc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iLCAiU2VydmljZTNTZXJ2aWNlIikpOyAKLSAgICAgICAgcG9ydCA9IHN2Yy5nZXRQb3J0KCJTZXJ2aWNlM1BvcnQiKTsKLSAgICAgICAgYXNzZXJ0ICIvQ29tcG9uZW50Qi9TZXJ2aWNlMiIuZXF1YWxzKFRlc3RVdGlscy5nZXRQb3J0QWRkcmVzcyhwb3J0KSk7Ci0KLSAgICAgICAgaWYgKCFub25XaXJpbmcpIHsKLSAgICAgICAgICAgIC8vIFNob3VsZCBjcmVhdGUgY29tcG9uZW50IHNlcnZpY2UgJHByb21vdGVkJENvbXBvbmVudEIkc2xhc2gkU2VydmljZTIgb24gaW5uZXJtb3N0IGNvbXBvbmVudAotICAgICAgICAgICAgLy8gIENvbXBvbmVudEQsIHdpdGggPGJpbmRpbmcud3M+IGFuZCB1cmk9Ii9Db21wb25lbnRCL1NlcnZpY2UyIgotICAgICAgICAgICAgd3NCaW5kaW5nID0gbnVsbDsKLSAgICAgICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlIDogY29tcG9uZW50RC5nZXRTZXJ2aWNlcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCIkcHJvbW90ZWQkQ29tcG9uZW50QiRzbGFzaCRTZXJ2aWNlMiIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvU2VydmljZTIiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOwotCi0gICAgICAgICAgICAvLyBTaG91bGQgY3JlYXRlIFdTREwgZG9jdW1lbnQgZm9yIENvbXBvbmVudEQvJHByb21vdGVkJENvbXBvbmVudEIkc2xhc2gkU2VydmljZTIgd2l0aCBlbmRwb2ludCB1cmk9Ii9Db21wb25lbnRCL1NlcnZpY2UyIgotICAgICAgICAgICAgZGVmID0gd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpOwotICAgICAgICAgICAgc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vYnVpbGRlci5pdGVzdC5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIsICJTZXJ2aWNlM1NlcnZpY2UiKSk7IAotICAgICAgICAgICAgcG9ydCA9IHN2Yy5nZXRQb3J0KCJTZXJ2aWNlM1BvcnQiKTsKLSAgICAgICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvU2VydmljZTIiLmVxdWFscyhUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBjcmVhdGUgY29tcG9uZW50IHNlcnZpY2UgJHByb21vdGVkJENvbXBvbmVudEIkc2xhc2gkU2VydmljZTIgb24gaW5uZXJtb3N0IGNvbXBvbmVudCBDb21wb25lbnRECi0gICAgICAgICAgICBmb3IgKENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSA6IGNvbXBvbmVudEQuZ2V0U2VydmljZXMoKSkgewotICAgICAgICAgICAgICAgIGFzc2VydCAhIiRwcm9tb3RlZCRDb21wb25lbnRCJHNsYXNoJFNlcnZpY2UyIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2hvdWxkIGFkZCA8YmluZGluZy53cz4gdG8gb3V0ZXIgY29tcG9zaXRlIHNlcnZpY2UgQ29tcG9zaXRlQS9TZXJ2aWNlMSAKLSAgICAgICAgd3NCaW5kaW5nID0gbnVsbDsKLSAgICAgICAgZm9yIChTZXJ2aWNlIHNlcnZpY2UgOiBkb21haW5Db21wb3NpdGUuZ2V0U2VydmljZXMoKSkgewotICAgICAgICAgICAgaWYgKCJTZXJ2aWNlMSIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHNlcnZpY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0IHdzQmluZGluZyAhPSBudWxsOwotICAgICAgICBpZiAobm9uV2lyaW5nKSB7Ci0gICAgICAgICAgICAvLyBTaG91bGQgbm90IGFkZCBhIFdTREwgZG9jdW1lbnQgdG8gZG9tYWluIGNvbXBvc2l0ZSBzZXJ2aWNlIFNlcnZpY2UxCi0gICAgICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpID09IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIW5vbldpcmluZykgewotICAgICAgICAgICAgLy8gU2hvdWxkIGNyZWF0ZSBjb21wb25lbnQgc2VydmljZSAkcHJvbW90ZWQkU2VydmljZTEgb24gaW5uZXJtb3N0IGNvbXBvbmVudAotICAgICAgICAgICAgLy8gIENvbXBvbmVudEQsIHdpdGggPGJpbmRpbmcud3M+IGFuZCB1cmk9Ii9TZXJ2aWNlMSIKLSAgICAgICAgICAgIHdzQmluZGluZyA9IG51bGw7Ci0gICAgICAgICAgICBmb3IgKENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSA6IGNvbXBvbmVudEQuZ2V0U2VydmljZXMoKSkgewotICAgICAgICAgICAgICAgIGlmICgiJHByb21vdGVkJFNlcnZpY2UxIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHNlcnZpY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0ICIvU2VydmljZTEiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOwotCi0gICAgICAgICAgICAvLyBTaG91bGQgY3JlYXRlIFdTREwgZG9jdW1lbnQgZm9yIENvbXBvbmVudEQvJHByb21vdGVkJFNlcnZpY2UxIHdpdGggZW5kcG9pbnQgdXJpPSIvU2VydmljZTEiCi0gICAgICAgICAgICBkZWYgPSB3c0JpbmRpbmcuZ2V0V1NETERvY3VtZW50KCk7Ci0gICAgICAgICAgICBzdmMgPSBkZWYuZ2V0U2VydmljZShuZXcgUU5hbWUoImh0dHA6Ly9idWlsZGVyLml0ZXN0LnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiwgIlNlcnZpY2UzU2VydmljZSIpKTsgCi0gICAgICAgICAgICBwb3J0ID0gc3ZjLmdldFBvcnQoIlNlcnZpY2UzUG9ydCIpOwotICAgICAgICAgICAgYXNzZXJ0ICIvU2VydmljZTEiLmVxdWFscyhUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBjcmVhdGUgY29tcG9uZW50IHNlcnZpY2UgJHByb21vdGVkJC5TZXJ2aWNlMSBvbiBpbm5lcm1vc3QgY29tcG9uZW50IENvbXBvbmVudEQKLSAgICAgICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlIDogY29tcG9uZW50RC5nZXRTZXJ2aWNlcygpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0ICEiJHByb21vdGVkJFNlcnZpY2UxIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm8gc2VydmljZXMgb24gQ29tcG9uZW50RCBzaG91bGQgaGF2ZSA8YmluZGluZy53cz4sIGV4Y2VwdCBmb3IgU2VydmljZTMsCi0gICAgICAgIC8vICAkcHJvbW90ZWQkLlNlcnZpY2UxIGFuZCAkcHJvbW90ZWQkLkNvbXBvbmVudEIuU2VydmljZTIKLSAgICAgICAgZm9yIChDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnRELmdldFNlcnZpY2VzKCkpIHsKLSAgICAgICAgICAgIGlmICghIlNlcnZpY2UzIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpICYmCi0gICAgICAgICAgICAgICAgISIkcHJvbW90ZWQkU2VydmljZTEiLmVxdWFscyhzZXJ2aWNlLmdldE5hbWUoKSkgJiYKLSAgICAgICAgICAgICAgICAhIiRwcm9tb3RlZCRDb21wb25lbnRCJHNsYXNoJFNlcnZpY2UyIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHNlcnZpY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcykgPT0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBTY2VuYXJpbyA1OiA8YmluZGluZy53cz4gYW5kIDxpbnRlcmZhY2Uud3NkbD4gb24gb3V0ZXIgY29tcG9zaXRlIHJlZmVyZW5jZSBDb21wb3NpdGVBL3JlZmVyZW5jZTEKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvNSIpOwotICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOwotICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvNS5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW81LyIpOwotICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBjaGVja1NjZW5hcmlvNVJlc3VsdHMoZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzVOb25XaXJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvNU5vbldpcmluZyIpOwotICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIodHJ1ZSk7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW81LmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzUvIik7Ci0gICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIGNoZWNrU2NlbmFyaW81UmVzdWx0cyh0cnVlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzVSZXN1bHRzKGJvb2xlYW4gbm9uV2lyaW5nKSB7Ci0gICAgICAgIENvbXBvc2l0ZSBkb21haW5Db21wb3NpdGUgPSBjdXN0b21CdWlsZGVyLmdldERvbWFpbkNvbXBvc2l0ZSgpOwotCi0gICAgICAgIC8vIFNob3VsZCBub3QgYWRkIDxiaW5kaW5nLndzPiB0byBhbnkgb3V0ZXIgY29tcG9uZW50IHJlZmVyZW5jZXMgCi0gICAgICAgIENvbXBvbmVudCBjb21wb25lbnRCID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnRCIik7Ci0gICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEIuZ2V0UmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpID09IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBEZWZpbml0aW9uIGRlZjsKLSAgICAgICAgamF2YXgud3NkbC5TZXJ2aWNlIHN2YzsKLSAgICAgICAgUG9ydCBwb3J0OwotICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c0JpbmRpbmc7Ci0gICAgICAgIENvbXBvbmVudCBjb21wb25lbnREID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnREIik7Ci0gICAgICAgIGlmICghbm9uV2lyaW5nKSB7Ci0gICAgICAgICAgICAvLyBTaG91bGQgYWRkIDxiaW5kaW5nLndzPiB0byBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMyB3aXRoIHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIiAKLSAgICAgICAgICAgIC8vIFNob3VsZCBzZXQgPGludGVyZmFjZS53c2RsPiBvbiBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMyAKLSAgICAgICAgICAgIHdzQmluZGluZyA9IG51bGw7Ci0gICAgICAgICAgICBmb3IgKENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnRELmdldFJlZmVyZW5jZXMoKSkgewotICAgICAgICAgICAgICAgIGlmICgicmVmZXJlbmNlMyIuZXF1YWxzKHJlZmVyZW5jZS5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHJlZmVyZW5jZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdCh3c0JpbmRpbmcpIGluc3RhbmNlb2YgV1NETEludGVyZmFjZUNvbnRyYWN0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzc2VydCAiaHR0cDovL2Zvby5jb20vYmFyIi5lcXVhbHMod3NCaW5kaW5nLmdldFVSSSgpKTsKLQotICAgICAgICAgICAgLy8gU2hvdWxkIGNyZWF0ZSBXU0RMIGRvY3VtZW50IGZvciBDb21wb25lbnREL3JlZmVyZW5jZTMgd2l0aCBlbmRwb2ludCB1cmk9Imh0dHA6Ly9mb28uY29tL2JhciIKLSAgICAgICAgICAgIGRlZiA9IHdzQmluZGluZy5nZXRXU0RMRG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHN2YyA9IGRlZi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL3NjZW5hcmlvcy9Db21wb25lbnREL3JlZmVyZW5jZTMiLCAiU2VydmljZTNhU2VydmljZSIpKTsgCi0gICAgICAgICAgICBwb3J0ID0gc3ZjLmdldFBvcnQoIlNlcnZpY2UzYVBvcnQiKTsKLSAgICAgICAgICAgIGFzc2VydCAiaHR0cDovL2Zvby5jb20vYmFyIi5lcXVhbHMoVGVzdFV0aWxzLmdldFBvcnRBZGRyZXNzKHBvcnQpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFNob3VsZCBub3QgYWRkIDxiaW5kaW5nLndzPiB0byBhbnkgaW5uZXIgY29tcG9uZW50IHJlZmVyZW5jZXMgCi0gICAgICAgICAgICBmb3IgKENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnRELmdldFJlZmVyZW5jZXMoKSkgewotICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcykgPT0gbnVsbDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIFNob3VsZCBub3QgYWRkIDxiaW5kaW5nLndzPiBvciA8aW50ZXJmYWNlLndzZGw+IHRvIGlubmVyIGNvbXBvc2l0ZSByZWZlcmVuY2UgQ29tcG9zaXRlQy9yZWZlcmVuY2UyIAotICAgICAgICBDb21wb3NpdGUgY29tcG9zaXRlQyA9IFRlc3RVdGlscy5nZXRDb21wb3NpdGUoZG9tYWluQ29tcG9zaXRlLCBuZXcgUU5hbWUoImh0dHA6Ly9zY2VuYXJpbzUiLCAiQ29tcG9zaXRlQyIpKTsKLSAgICAgICAgZm9yIChSZWZlcmVuY2UgcmVmZXJlbmNlIDogY29tcG9zaXRlQy5nZXRSZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcykgPT0gbnVsbDsKLSAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSBpbnN0YW5jZW9mIEphdmFJbnRlcmZhY2VDb250cmFjdDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGV4cGVjdGVkRW5kcG9pbnRzID0gICJDb21wb25lbnQgLSBDb21wb25lbnRCXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VydmljZSAtIFNlcnZpY2UyXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW5kcG9pbnQgLSBTZXJ2aWNlMlxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlcnZpY2UgLSBTZXJ2aWNlMmFcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbmRwb2ludCAtIFNlcnZpY2UyYVxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZmVyZW5jZSAtIHJlZmVyZW5jZTJcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wb25lbnQgLSBDb21wb25lbnRCIGhhcyBjb21wb3NpdGUgaW1wbFxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIENvbXBvbmVudCAtIENvbXBvbmVudERcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBTZXJ2aWNlIC0gU2VydmljZTNcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBFbmRwb2ludCAtIFNlcnZpY2UzXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgU2VydmljZSAtIFNlcnZpY2UzYVxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIEVuZHBvaW50IC0gU2VydmljZTNhXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgUmVmZXJlbmNlIC0gcmVmZXJlbmNlMyI7Ci0KLSAgICAgICAgU3RyaW5nIGFjdHVhbEVuZHBvaW50cyA9IFRlc3RVdGlscy5wcmludEVuZHBvaW50cyhkb21haW5Db21wb3NpdGUpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYWN0dWFsRW5kcG9pbnRzKTsKLSAgICAgICAgCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRFbmRwb2ludHMsIGFjdHVhbEVuZHBvaW50cyk7ICAgICAgICAKLSAgICB9Ci0KLSAgICAKLSAgICAvLyBTY2VuYXJpbyA2OiA8YmluZGluZy53cz4gYW5kIDxpbnRlcmZhY2Uud3NkbD4gb24gb3V0ZXIgY29tcG9uZW50IHJlZmVyZW5jZSBDb21wb25lbnRCL3JlZmVyZW5jZTIKLSAgICBASWdub3JlCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW82KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT5SdW5uaW5nIHRlc3RTY2VuYXJpbzYiKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKGZhbHNlKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzYuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNi8iKTsKLSAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgY2hlY2tTY2VuYXJpbzZhbmQ3UmVzdWx0cygiaHR0cDovL3NjZW5hcmlvNiIsIGZhbHNlKTsKLSAgICB9Ci0KLSAgICBASWdub3JlCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW82Tm9uV2lyaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT5SdW5uaW5nIHRlc3RTY2VuYXJpbzZOb25XaXJpbmciKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKHRydWUpOwotICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvNi5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW82LyIpOwotICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBjaGVja1NjZW5hcmlvNmFuZDdSZXN1bHRzKCJodHRwOi8vc2NlbmFyaW82IiwgdHJ1ZSk7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGNoZWNrU2NlbmFyaW82YW5kN1Jlc3VsdHMoU3RyaW5nIG5hbWVzcGFjZSwgYm9vbGVhbiBub25XaXJpbmcpIHsKLSAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgLy8gU2hvdWxkIHJlbW92ZSB0YXJnZXQ9IG9uIENvbXBvbmVudEIvcmVmZXJlbmNlMiAoZm9yIFNjZW5hcmlvIDYpIG9yCi0gICAgICAgIC8vICBDb21wb3NpdGVDL3JlZmVyZW5jZTIgKGZvciBTY2VuYXJpbyA3KSwgYW5kIGFkZCB1cmk9Imh0dHA6Ly9mb28uY29tL2JhciIKLSAgICAgICAgLy8gIHRvIHRoZSA8YmluZGluZy53cz4gZWxlbWVudCBvbiBDb21wb25lbnRCL3JlZmVyZW5jZTIKLSAgICAgICAgLy8gRm9yIG5vbldpcmluZywgQ29tcG9uZW50Qi9yZWZlcmVuY2UyIHNob3VsZCBoYXZlIHRhcmdldD0KLSAgICAgICAgLy8gIGFuZCBubyB1cmk9IHNob3VsZCBiZSBhZGRlZAotICAgICAgICBDb21wb25lbnQgY29tcG9uZW50QiA9IFRlc3RVdGlscy5nZXRDb21wb25lbnQoZG9tYWluQ29tcG9zaXRlLCAiQ29tcG9uZW50QiIpOwotICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c0JpbmRpbmcgPSBudWxsOwotICAgICAgICBmb3IgKENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnRCLmdldFJlZmVyZW5jZXMoKSkgewotICAgICAgICAgICAgaWYgKCJyZWZlcmVuY2UyIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIW5vbldpcmluZykgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldFRhcmdldHMoKS5zaXplKCkgPT0gMDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldFRhcmdldHMoKS5zaXplKCkgPT0gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgd3NCaW5kaW5nID0gcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmICghbm9uV2lyaW5nKSB7Ci0gICAgICAgICAgICBhc3NlcnQgImh0dHA6Ly9mb28uY29tL2JhciIuZXF1YWxzKHdzQmluZGluZy5nZXRVUkkoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFVSSSgpID09IG51bGw7Ci0gICAgICAgIH0KLQotICAgICAgICBEZWZpbml0aW9uIGRlZjsKLSAgICAgICAgamF2YXgud3NkbC5TZXJ2aWNlIHN2YzsKLSAgICAgICAgUG9ydCBwb3J0OwotICAgICAgICBpZiAoIW5vbldpcmluZykgewotICAgICAgICAgICAgLy8gU2hvdWxkIGNyZWF0ZSBXU0RMIGRvY3VtZW50IGZvciBDb21wb25lbnRCL3JlZmVyZW5jZTIgd2l0aCBlbmRwb2ludCB1cmk9Imh0dHA6Ly9mb28uY29tL2JhciIKLSAgICAgICAgICAgIGRlZiA9IHdzQmluZGluZy5nZXRXU0RMRG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHN2YyA9IGRlZi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL3NjZW5hcmlvcy9Db21wb25lbnRCL3JlZmVyZW5jZTIiLCAiU2VydmljZTNhU2VydmljZSIpKTsgCi0gICAgICAgICAgICBwb3J0ID0gc3ZjLmdldFBvcnQoIlNlcnZpY2UzYVBvcnQiKTsKLSAgICAgICAgICAgIGFzc2VydCAiaHR0cDovL2Zvby5jb20vYmFyIi5lcXVhbHMoVGVzdFV0aWxzLmdldFBvcnRBZGRyZXNzKHBvcnQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIENvbXBvbmVudCBjb21wb25lbnREID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnREIik7Ci0gICAgICAgIGlmICghbm9uV2lyaW5nKSB7Ci0gICAgICAgICAgICAvLyBTaG91bGQgYWRkIDxiaW5kaW5nLndzPiB0byBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMyB3aXRoIHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIiAKLSAgICAgICAgICAgIC8vIFNob3VsZCBzZXQgPGludGVyZmFjZS53c2RsPiBvbiBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMyAKLSAgICAgICAgICAgIHdzQmluZGluZyA9IG51bGw7Ci0gICAgICAgICAgICBmb3IgKENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnRELmdldFJlZmVyZW5jZXMoKSkgewotICAgICAgICAgICAgICAgIGlmICgicmVmZXJlbmNlMyIuZXF1YWxzKHJlZmVyZW5jZS5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHJlZmVyZW5jZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRCaW5kaW5ncygpLnNpemUoKSA9PSAxOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KHdzQmluZGluZykgaW5zdGFuY2VvZiBXU0RMSW50ZXJmYWNlQ29udHJhY3Q7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXNzZXJ0ICJodHRwOi8vZm9vLmNvbS9iYXIiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOwotCi0gICAgICAgICAgICAvLyBTaG91bGQgY3JlYXRlIFdTREwgZG9jdW1lbnQgZm9yIENvbXBvbmVudEQvcmVmZXJlbmNlMyB3aXRoIGVuZHBvaW50IHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIgotICAgICAgICAgICAgZGVmID0gd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpOwotICAgICAgICAgICAgc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vc2NlbmFyaW9zL0NvbXBvbmVudEIvcmVmZXJlbmNlMiIsICJTZXJ2aWNlM2FTZXJ2aWNlIikpOyAKLSAgICAgICAgICAgIHBvcnQgPSBzdmMuZ2V0UG9ydCgiU2VydmljZTNhUG9ydCIpOwotICAgICAgICAgICAgYXNzZXJ0ICJodHRwOi8vZm9vLmNvbS9iYXIiLmVxdWFscyhUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBhZGQgPGJpbmRpbmcud3M+IHRvIGFueSBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlcyAKLSAgICAgICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKSA9PSBudWxsOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gTm8gcmVmZXJlbmNlcyBvbiBDb21wb3NpdGVDIHNob3VsZCBoYXZlIDxiaW5kaW5nLndzPiBvciA8aW50ZXJmYWNlLndzZGw+LCBleGNlcHQgZm9yCi0gICAgICAgIC8vICByZWZlcmVuY2UyIGluIFNjZW5hcmlvIDcKLSAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZUMgPSBUZXN0VXRpbHMuZ2V0Q29tcG9zaXRlKGRvbWFpbkNvbXBvc2l0ZSwgbmV3IFFOYW1lKG5hbWVzcGFjZSwgIkNvbXBvc2l0ZUMiKSk7Ci0gICAgICAgIGZvciAoUmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvc2l0ZUMuZ2V0UmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICBpZiAoImh0dHA6Ly9zY2VuYXJpbzciLmVxdWFscyhuYW1lc3BhY2UpICYmICJyZWZlcmVuY2UyIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpIT0gbnVsbDsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkgaW5zdGFuY2VvZiBXU0RMSW50ZXJmYWNlQ29udHJhY3Q7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcykgPT0gbnVsbDsKLSAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkgaW5zdGFuY2VvZiBKYXZhSW50ZXJmYWNlQ29udHJhY3Q7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTaG91bGQgYWRkIDxiaW5kaW5nLndzPiBhbmQgPGludGVyZmFjZS53c2RsPiB0byBvdXRlciBjb21wb3NpdGUgcmVmZXJlbmNlIENvbXBvc2l0ZUEvcmVmZXJlbmNlMSAKLSAgICAgICAgd3NCaW5kaW5nID0gbnVsbDsKLSAgICAgICAgZm9yIChSZWZlcmVuY2UgcmVmZXJlbmNlIDogZG9tYWluQ29tcG9zaXRlLmdldFJlZmVyZW5jZXMoKSkgewotICAgICAgICAgICAgaWYgKCJyZWZlcmVuY2UxIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpIGluc3RhbmNlb2YgV1NETEludGVyZmFjZUNvbnRyYWN0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydCB3c0JpbmRpbmcuZ2V0VVJJKCkgPT0gbnVsbDsKLQotICAgICAgICAvLyBTaG91bGQgbm90IGFkZCBhIFdTREwgZG9jdW1lbnQgdG8gZG9tYWluIGNvbXBvc2l0ZSByZWZlcmVuY2UgcmVmZXJlbmNlMQotICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpID09IG51bGw7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgZXhwZWN0ZWRFbmRwb2ludHMgPSAgIkNvbXBvbmVudCAtIENvbXBvbmVudEJcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2aWNlIC0gU2VydmljZTJcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbmRwb2ludCAtIFNlcnZpY2UyXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VydmljZSAtIFNlcnZpY2UyYVxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVuZHBvaW50IC0gU2VydmljZTJhXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVmZXJlbmNlIC0gcmVmZXJlbmNlMlxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBvbmVudCAtIENvbXBvbmVudEIgaGFzIGNvbXBvc2l0ZSBpbXBsXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgQ29tcG9uZW50IC0gQ29tcG9uZW50RFxuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIFNlcnZpY2UgLSBTZXJ2aWNlM1xuIiArIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIEVuZHBvaW50IC0gU2VydmljZTNcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBTZXJ2aWNlIC0gU2VydmljZTNhXG4iICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgRW5kcG9pbnQgLSBTZXJ2aWNlM2FcbiIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBSZWZlcmVuY2UgLSByZWZlcmVuY2UzIjsKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBhY3R1YWxFbmRwb2ludHMgPSBUZXN0VXRpbHMucHJpbnRFbmRwb2ludHMoZG9tYWluQ29tcG9zaXRlKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFjdHVhbEVuZHBvaW50cyk7Ci0gICAgICAgIAotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkRW5kcG9pbnRzLCBhY3R1YWxFbmRwb2ludHMpOyAgICAgICAgCi0gICAgfQotCi0gICAgLy8gU2NlbmFyaW8gNzogPGJpbmRpbmcud3M+IGFuZCA8aW50ZXJmYWNlLndzZGw+IG9uIGlubmVyIGNvbXBvc2l0ZSByZWZlcmVuY2UgQ29tcG9zaXRlQy9yZWZlcmVuY2UyCi0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvNygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW83Iik7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcihmYWxzZSk7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW83LmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzcvIik7Ci0gICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIGNoZWNrU2NlbmFyaW82YW5kN1Jlc3VsdHMoImh0dHA6Ly9zY2VuYXJpbzciLCBmYWxzZSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvN05vbldpcmluZygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW83Tm9uV2lyaW5nIik7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcih0cnVlKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzcuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNy8iKTsKLSAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgY2hlY2tTY2VuYXJpbzZhbmQ3UmVzdWx0cygiaHR0cDovL3NjZW5hcmlvNyIsIHRydWUpOwotICAgIH0KLQotICAgIC8vIFNjZW5hcmlvIDg6IDxiaW5kaW5nLndzPiBhbmQgPGludGVyZmFjZS53c2RsPiBvbiBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMwotICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvOCIpOwotICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOwotICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvOC5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW84LyIpOwotICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBjaGVja1NjZW5hcmlvOFJlc3VsdHMoZmFsc2UpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzhOb25XaXJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvOE5vbldpcmluZyIpOwotICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIodHJ1ZSk7Ci0gICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW84LmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzgvIik7Ci0gICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIGNoZWNrU2NlbmFyaW84UmVzdWx0cyh0cnVlKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzhSZXN1bHRzKGJvb2xlYW4gbm9uV2lyaW5nKSB7Ci0gICAgICAgIENvbXBvc2l0ZSBkb21haW5Db21wb3NpdGUgPSBjdXN0b21CdWlsZGVyLmdldERvbWFpbkNvbXBvc2l0ZSgpOwotCi0gICAgICAgIC8vIFNob3VsZCByZXBsYWNlIHRhcmdldD0gb24gQ29tcG9uZW50RC9yZWZlcmVuY2UzIGJ5IHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIiBvbiA8YmluZGluZy53cz4KLSAgICAgICAgLy8gRm9yIG5vbldpcmluZywgdGhlIG9yaWdpbmFsIHRhcmdldD0gaXMgcHJlc2VydmVkIGFuZCB0aGVyZSBpcyBubyB1cmk9Ci0gICAgICAgIENvbXBvbmVudCBjb21wb25lbnREID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnREIik7Ci0gICAgICAgIFdlYlNlcnZpY2VCaW5kaW5nIHdzQmluZGluZyA9IG51bGw7Ci0gICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICBpZiAoInJlZmVyZW5jZTMiLmVxdWFscyhyZWZlcmVuY2UuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgIGlmICghbm9uV2lyaW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0VGFyZ2V0cygpLnNpemUoKSA9PSAwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0VGFyZ2V0cygpLnNpemUoKSA9PSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFub25XaXJpbmcpIHsKLSAgICAgICAgICAgIGFzc2VydCAiaHR0cDovL2Zvby5jb20vYmFyIi5lcXVhbHMod3NCaW5kaW5nLmdldFVSSSgpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydCB3c0JpbmRpbmcuZ2V0VVJJKCkgPT0gbnVsbDsKLSAgICAgICAgfQotCi0gICAgICAgIERlZmluaXRpb24gZGVmOwotICAgICAgICBqYXZheC53c2RsLlNlcnZpY2Ugc3ZjOwotICAgICAgICBQb3J0IHBvcnQ7Ci0gICAgICAgIGlmICghbm9uV2lyaW5nKSB7Ci0gICAgICAgICAgICAvLyBTaG91bGQgY3JlYXRlIFdTREwgZG9jdW1lbnQgZm9yIENvbXBvbmVudEQvcmVmZXJlbmNlMyB3aXRoIGVuZHBvaW50IHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIgotICAgICAgICAgICAgZGVmID0gd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpOwotICAgICAgICAgICAgc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vc2NlbmFyaW9zL0NvbXBvbmVudEQvcmVmZXJlbmNlMyIsICJTZXJ2aWNlM2FTZXJ2aWNlIikpOyAKLSAgICAgICAgICAgIHBvcnQgPSBzdmMuZ2V0UG9ydCgiU2VydmljZTNhUG9ydCIpOwotICAgICAgICAgICAgYXNzZXJ0ICJodHRwOi8vZm9vLmNvbS9iYXIiLmVxdWFscyhUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gU2hvdWxkIGFkZCA8YmluZGluZy53cz4gYW5kIDxpbnRlcmZhY2Uud3NkbD4gdG8gaW5uZXIgY29tcG9zaXRlIHJlZmVyZW5jZSBDb21wb3NpdGVDL3JlZmVyZW5jZTIgCi0gICAgICAgIENvbXBvc2l0ZSBjb21wb3NpdGVDID0gVGVzdFV0aWxzLmdldENvbXBvc2l0ZShkb21haW5Db21wb3NpdGUsIG5ldyBRTmFtZSgiaHR0cDovL3NjZW5hcmlvOCIsICJDb21wb3NpdGVDIikpOwotICAgICAgICB3c0JpbmRpbmcgPSBudWxsOwotICAgICAgICBmb3IgKFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb3NpdGVDLmdldFJlZmVyZW5jZXMoKSkgewotICAgICAgICAgICAgaWYgKCJyZWZlcmVuY2UyIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpIGluc3RhbmNlb2YgV1NETEludGVyZmFjZUNvbnRyYWN0OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydCB3c0JpbmRpbmcuZ2V0VVJJKCkgPT0gbnVsbDsKLQotICAgICAgICAvLyBTaG91bGQgYWRkIDxiaW5kaW5nLndzPiBhbmQgPGludGVyZmFjZS53c2RsPiB0byBvdXRlciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEIvcmVmZXJlbmNlMiAKLSAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEIgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEIiKTsKLSAgICAgICAgd3NCaW5kaW5nID0gbnVsbDsKLSAgICAgICAgZm9yIChDb21wb25lbnRSZWZlcmVuY2UgcmVmZXJlbmNlIDogY29tcG9uZW50Qi5nZXRSZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgIGlmICgicmVmZXJlbmNlMiIuZXF1YWxzKHJlZmVyZW5jZS5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgd3NCaW5kaW5nID0gcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOwotICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSBpbnN0YW5jZW9mIFdTRExJbnRlcmZhY2VDb250cmFjdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFVSSSgpID09IG51bGw7Ci0KLSAgICAgICAgLy8gU2hvdWxkIGFkZCA8YmluZGluZy53cz4gYW5kIDxpbnRlcmZhY2Uud3NkbD4gdG8gb3V0ZXIgY29tcG9zaXRlIHJlZmVyZW5jZSBDb21wb3NpdGVBL3JlZmVyZW5jZTEgCi0gICAgICAgIHdzQmluZGluZyA9IG51bGw7Ci0gICAgICAgIGZvciAoUmVmZXJlbmNlIHJlZmVyZW5jZSA6IGRvbWFpbkNvbXBvc2l0ZS5nZXRSZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgIGlmICgicmVmZXJlbmNlMSIuZXF1YWxzKHJlZmVyZW5jZS5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgd3NCaW5kaW5nID0gcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOwotICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSBpbnN0YW5jZW9mIFdTRExJbnRlcmZhY2VDb250cmFjdDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFVSSSgpID09IG51bGw7Ci0KLSAgICAgICAgLy8gU2hvdWxkIG5vdCBhZGQgYSBXU0RMIGRvY3VtZW50IHRvIGRvbWFpbiBjb21wb3NpdGUgcmVmZXJlbmNlIHJlZmVyZW5jZTEKLSAgICAgICAgYXNzZXJ0IHdzQmluZGluZy5nZXRXU0RMRG9jdW1lbnQoKSA9PSBudWxsOwotICAgIH0KLQotICAgIC8vIFNjZW5hcmlvIDk6IHRhcmdldCBpbiByZWZlcmVuY2UgQ0RSM0EgYW5kIGJpbmRpbmcud3MgdXJpPSBhdCBDQVIxQQotICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvOSIpOwotICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOwotICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvOS5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW85LyIpOwotICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBjaGVja1NjZW5hcmlvOVJlc3VsdHMoKTsKLSAgICB9ICAgIAotCi0gICAgcHJpdmF0ZSB2b2lkIGNoZWNrU2NlbmFyaW85UmVzdWx0cygpIHsKLSAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEQgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEQiKTsKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlIGNvbXBvbmVudFJlZiA9IG51bGw7Ci0gICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICBpZiAoInJlZmVyZW5jZTNhIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYgPSByZWZlcmVuY2U7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMCkgaW5zdGFuY2VvZiBTQ0FCaW5kaW5nKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJlZmVyZW5jZS5nZXRCaW5kaW5ncygpLmdldCgxKSBpbnN0YW5jZW9mIFdlYlNlcnZpY2VCaW5kaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBhc3NlcnRUcnVlKGNvbXBvbmVudFJlZiAhPSBudWxsKTsKLSAgICB9ICAgIAotICAgIAotICAgIC8vIFNjZW5hcmlvIDEwOiB0YXJnZXRzIGluIHJlZmVyZW5jZXMgQ0JSMkEgYW5kIENEUjNBIGFuZCBiaW5kaW5nLndzIGF0IENCUjJBCi0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvMTAiKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKGZhbHNlKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzEwLmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEwLyIpOwotICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBjaGVja1NjZW5hcmlvMTBBbmQxMVJlc3VsdHMoKTsKLSAgICB9ICAgIAotICAgIAotICAgIC8vIFNjZW5hcmlvIDExOiB0YXJnZXRzIGluIHJlZmVyZW5jZXMgQ0JSMkEgYW5kIENEUjNBIGFuZCBiaW5kaW5nLndzIGF0IENDUjJBCi0gICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvMTEiKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKGZhbHNlKTsKLSAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzExLmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzExLyIpOwotICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOwotICAgICAgICBjaGVja1NjZW5hcmlvMTBBbmQxMVJlc3VsdHMoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzEwQW5kMTFSZXN1bHRzKCkgewotICAgICAgICBDb21wb3NpdGUgZG9tYWluQ29tcG9zaXRlID0gY3VzdG9tQnVpbGRlci5nZXREb21haW5Db21wb3NpdGUoKTsKLQotICAgICAgICBDb21wb25lbnQgY29tcG9uZW50RCA9IFRlc3RVdGlscy5nZXRDb21wb25lbnQoZG9tYWluQ29tcG9zaXRlLCAiQ29tcG9uZW50RCIpOwotICAgICAgICBDb21wb25lbnRSZWZlcmVuY2UgY29tcG9uZW50UmVmID0gbnVsbDsKLSAgICAgICAgZm9yIChDb21wb25lbnRSZWZlcmVuY2UgcmVmZXJlbmNlIDogY29tcG9uZW50RC5nZXRSZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgIGlmICgicmVmZXJlbmNlM2EiLmVxdWFscyhyZWZlcmVuY2UuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZiA9IHJlZmVyZW5jZTsKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJlZmVyZW5jZS5nZXRCaW5kaW5ncygpLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgICAgICBCaW5kaW5nIGJpbmRpbmcxID0gcmVmZXJlbmNlLmdldEJpbmRpbmdzKCkuZ2V0KDApOwotICAgICAgICAgICAgICAgIGFzc2VydFRydWUoYmluZGluZzEgaW5zdGFuY2VvZiBTQ0FCaW5kaW5nKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdChiaW5kaW5nMSkgaW5zdGFuY2VvZiBKYXZhSW50ZXJmYWNlQ29udHJhY3QpOwotICAgICAgICAgICAgICAgIEJpbmRpbmcgYmluZGluZzIgPSByZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShiaW5kaW5nMiBpbnN0YW5jZW9mIFdlYlNlcnZpY2VCaW5kaW5nKTsKLSAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdChiaW5kaW5nMikgaW5zdGFuY2VvZiBXU0RMSW50ZXJmYWNlQ29udHJhY3QpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGFzc2VydFRydWUoY29tcG9uZW50UmVmICE9IG51bGwpOwotICAgIH0gIAotCi0gICAgLy8gU2NlbmFyaW8gMTI6IHRhcmdldHMgaW4gcmVmZXJlbmNlcyBDQlIyQSBhbmQgQ0RSM0EgYW5kIGJpbmRpbmcud3MgYXQgQ0RSM0EKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW8xMigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8xMiIpOwotICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOwotICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvMTIuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTIvIik7Ci0gICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIGNoZWNrU2NlbmFyaW8xMlJlc3VsdHMoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzEyUmVzdWx0cygpIHsKLSAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEQgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEQiKTsKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlIGNvbXBvbmVudFJlZiA9IG51bGw7Ci0gICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICBpZiAoInJlZmVyZW5jZTNhIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYgPSByZWZlcmVuY2U7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMCkgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlQmluZGluZyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMSkgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlQmluZGluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0VHJ1ZShjb21wb25lbnRSZWYgIT0gbnVsbCk7Ci0gICAgfQotCi0gICAgLy8gU2NlbmFyaW8gMTM6IHRhcmdldCBpbiByZWZlcmVuY2UgQ0RSM0EKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW8xMygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8xMyIpOwotICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOwotICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvMTMuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTMvIik7Ci0gICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKLSAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7Ci0gICAgICAgIGNoZWNrU2NlbmFyaW8xM1Jlc3VsdHMoKTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzEzUmVzdWx0cygpIHsKLSAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7Ci0KLSAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEQgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEQiKTsKLSAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlIGNvbXBvbmVudFJlZiA9IG51bGw7Ci0gICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICBpZiAoInJlZmVyZW5jZTNhIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYgPSByZWZlcmVuY2U7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5zaXplKCkgPT0gMSk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMCkgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlQmluZGluZyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgYXNzZXJ0VHJ1ZShjb21wb25lbnRSZWYgIT0gbnVsbCk7Ci0gICAgfQotKi8KLX0KZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9wb20ueG1sIGIvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYzhjY2MuLjAwMDAwMDAKLS0tIGEvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICAgICogCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAgICogCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+aXRlc3QtY2FsbGJhY2stdHdvLW5vZGVzPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBDYWxsYmFjayBUd28gTm9kZXM8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1odHRwPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICAgIDxwcm9wZXJ0aWVzPgotICAgICAgICA8d2FzLmFudC5zY3JpcHQ+JHtiYXNlZGlyfS8uLi9idWlsZC13YXMtaW50ZWdyYXRpb24ueG1sPC93YXMuYW50LnNjcmlwdD4KLSAgICAgICAgPHdhcy5weXRob24uc2NyaXB0PiR7YmFzZWRpcn0vLi4vd2FzQWRtaW4ucHk8L3dhcy5weXRob24uc2NyaXB0PgotICAgIDwvcHJvcGVydGllcz4gICAgCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vYmluLWRpc3Ryby11bnppcC9idWlsZC54bWwgYi9pdGVzdC9kaXN0cmlidXRpb24vYmluLWRpc3Ryby11bnppcC9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNGIxZmQuLjAwMDAwMDAKLS0tIGEvaXRlc3QvZGlzdHJpYnV0aW9uL2Jpbi1kaXN0cm8tdW56aXAvYnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3QgbmFtZT0iaXRlc3QtdW56aXAiIGRlZmF1bHQ9InVuemlwIj4gCi0KLSAgICA8dGFyZ2V0IG5hbWU9InVuemlwIj4gCi0gICAgICAgIDxkZWxldGUgZGlyPSIuLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS5kaXIiLz4KLSAgICAgICAgPHVuemlwIHNyYz0iLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0ke3R1c2NhbnkudmVyc2lvbn0uemlwIiAKLSAgICAgICAgICAgICAgIGRlc3Q9Ii4uLy4uLy4uL2Rpc3RyaWJ1dGlvbi9hbGwvdGFyZ2V0L2FwYWNoZS10dXNjYW55LXNjYS1hbGwtJHt0dXNjYW55LnZlcnNpb259LmRpciIvPgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3IvYnVpbGQueG1sIGIvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXJtaS1jYWxjdWxhdG9yL2J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZhZmI3YS4uMDAwMDAwMAotLS0gYS9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3IvYnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3QgbmFtZT0iaXRlc3Qtc2FtcGxlcyIgZGVmYXVsdD0icnVuIj4gCi0JCi0JPCEtLSAKLQkgICAgY29tcGlsZSBhbmQgcnVuIGVhY2ggc2FtcGxlIGFzIHRob3VnaCB0aGUgdXNlciB3ZXJlIHJ1bm5pbmcKLQkgICAgc2FtcGxlcyBmcm9tIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uLiBIZXJlIHdlIHVzZSBhbnQgdGFyZ2V0cwotCSAgICBpbiB0aGUgZmlyc3QgaW5zdGFuY2UgYnV0IGZvciBzb21lIHRlc3RzIHdlIG1heSB3YW50IHRvIHJ1biAKLQkgICAgamFycyBkaXJlY3RseSBvciBmaXJlIHVwIHdlYmFwcCBjb250YWluZXJzIGFuZCBkZXBsb3kgd2Fycy4gSW4gb3RoZXIgY2FzZXMKLQkgICAgd2UgbWF5IG5lZWQgdG8gcnVuIHR3byBzYW1wbGVzIHRvZ2V0aGVyIHRvIHByb3ZpZGUgcmVmZXJlbmNlIGFuZCAKLQkgICAgc2VydmljZSBzaWRlcyBvZiB0aGUgc2FtcGxlLgotCS0tPgotCi0gICAgPHByb3BlcnR5IG5hbWU9ImRpc3Ryby5yb290IiB2YWx1ZT0iLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0ke3R1c2NhbnkudmVyc2lvbn0uZGlyL3R1c2Nhbnktc2NhLSR7dHVzY2FueS52ZXJzaW9ufSIgLz4KLQotICAgIDx0YXJnZXQgbmFtZT0icnVuIj4gCi0gICAgICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIgotICAgICAgICAgICAgIGRpcj0iJHtkaXN0cm8ucm9vdH0vc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2UiLz4KLSAgICAgICAgPGFudCBhbnRmaWxlPSJidWlsZC54bWwiCi0gICAgICAgICAgICAgZGlyPSIke2Rpc3Ryby5yb290fS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2UiLz4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yL2J1aWxkLnhtbCBiL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvci9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNWYyNDcuLjAwMDAwMDAKLS0tIGEvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0IG5hbWU9Iml0ZXN0LXNhbXBsZXMiIGRlZmF1bHQ9InJ1biI+IAotCQotCTxlY2hvPiR7amF2YS5ob21lfTwvZWNobz4KLQk8IS0tIAotCSAgICBjb21waWxlIGFuZCBydW4gZWFjaCBzYW1wbGUgYXMgdGhvdWdoIHRoZSB1c2VyIHdlcmUgcnVubmluZwotCSAgICBzYW1wbGVzIGZyb20gdGhlIGJpbmFyeSBkaXN0cmlidXRpb24uIEhlcmUgd2UgdXNlIGFudCB0YXJnZXRzCi0JICAgIGluIHRoZSBmaXJzdCBpbnN0YW5jZSBidXQgZm9yIHNvbWUgdGVzdHMgd2UgbWF5IHdhbnQgdG8gcnVuIAotCSAgICBqYXJzIGRpcmVjdGx5IG9yIGZpcmUgdXAgd2ViYXBwIGNvbnRhaW5lcnMgYW5kIGRlcGxveSB3YXJzLiBJbiBvdGhlciBjYXNlcwotCSAgICB3ZSBtYXkgbmVlZCB0byBydW4gdHdvIHNhbXBsZXMgdG9nZXRoZXIgdG8gcHJvdmlkZSByZWZlcmVuY2UgYW5kIAotCSAgICBzZXJ2aWNlIHNpZGVzIG9mIHRoZSBzYW1wbGUuCi0JLS0+Ci0KLSAgICA8cHJvcGVydHkgbmFtZT0iZGlzdHJvLnJvb3QiIHZhbHVlPSIuLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS5kaXIvdHVzY2FueS1zY2EtJHt0dXNjYW55LnZlcnNpb259IiAvPgotCi0gICAgPHRhcmdldCBuYW1lPSJydW4iPiAKLSAgICAJCi0gICAgICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIgotICAgIAkgICAgIGRpcj0iJHtkaXN0cm8ucm9vdH0vc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvciIvPgotICAgIAkKLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IvYnVpbGQueG1sIGIvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZThlYTk3Li4wMDAwMDAwCi0tLSBhL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0IG5hbWU9Iml0ZXN0LXNhbXBsZXMiIGRlZmF1bHQ9InJ1biI+IAotCQotCTxlY2hvPiR7amF2YS5ob21lfTwvZWNobz4KLQk8IS0tIAotCSAgICBjb21waWxlIGFuZCBydW4gZWFjaCBzYW1wbGUgYXMgdGhvdWdoIHRoZSB1c2VyIHdlcmUgcnVubmluZwotCSAgICBzYW1wbGVzIGZyb20gdGhlIGJpbmFyeSBkaXN0cmlidXRpb24uIEhlcmUgd2UgdXNlIGFudCB0YXJnZXRzCi0JICAgIGluIHRoZSBmaXJzdCBpbnN0YW5jZSBidXQgZm9yIHNvbWUgdGVzdHMgd2UgbWF5IHdhbnQgdG8gcnVuIAotCSAgICBqYXJzIGRpcmVjdGx5IG9yIGZpcmUgdXAgd2ViYXBwIGNvbnRhaW5lcnMgYW5kIGRlcGxveSB3YXJzLiBJbiBvdGhlciBjYXNlcwotCSAgICB3ZSBtYXkgbmVlZCB0byBydW4gdHdvIHNhbXBsZXMgdG9nZXRoZXIgdG8gcHJvdmlkZSByZWZlcmVuY2UgYW5kIAotCSAgICBzZXJ2aWNlIHNpZGVzIG9mIHRoZSBzYW1wbGUuCi0JLS0+Ci0KLSAgICA8cHJvcGVydHkgbmFtZT0iZGlzdHJvLnJvb3QiIHZhbHVlPSIuLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS5kaXIvdHVzY2FueS1zY2EtJHt0dXNjYW55LnZlcnNpb259IiAvPgotCi0gICAgPHRhcmdldCBuYW1lPSJydW4iPiAKLSAgICAJCi0gICAgICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIgotICAgICAgICAgICAgIGRpcj0iJHtkaXN0cm8ucm9vdH0vc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yIi8+Ci0KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvYnVpbGQueG1sIGIvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjcwNGY0Li4wMDAwMDAwCi0tLSBhL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0IG5hbWU9Iml0ZXN0LXNhbXBsZXMiIGRlZmF1bHQ9InJ1biI+IAotCQotCTxlY2hvPiR7amF2YS5ob21lfTwvZWNobz4KLQk8IS0tIAotCSAgICBjb21waWxlIGFuZCBydW4gZWFjaCBzYW1wbGUgYXMgdGhvdWdoIHRoZSB1c2VyIHdlcmUgcnVubmluZwotCSAgICBzYW1wbGVzIGZyb20gdGhlIGJpbmFyeSBkaXN0cmlidXRpb24uIEhlcmUgd2UgdXNlIGFudCB0YXJnZXRzCi0JICAgIGluIHRoZSBmaXJzdCBpbnN0YW5jZSBidXQgZm9yIHNvbWUgdGVzdHMgd2UgbWF5IHdhbnQgdG8gcnVuIAotCSAgICBqYXJzIGRpcmVjdGx5IG9yIGZpcmUgdXAgd2ViYXBwIGNvbnRhaW5lcnMgYW5kIGRlcGxveSB3YXJzLiBJbiBvdGhlciBjYXNlcwotCSAgICB3ZSBtYXkgbmVlZCB0byBydW4gdHdvIHNhbXBsZXMgdG9nZXRoZXIgdG8gcHJvdmlkZSByZWZlcmVuY2UgYW5kIAotCSAgICBzZXJ2aWNlIHNpZGVzIG9mIHRoZSBzYW1wbGUuCi0JLS0+Ci0KLSAgICA8cHJvcGVydHkgbmFtZT0iZGlzdHJvLnJvb3QiIHZhbHVlPSIuLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS5kaXIvdHVzY2FueS1zY2EtJHt0dXNjYW55LnZlcnNpb259IiAvPgotCi0gICAgPHRhcmdldCBuYW1lPSJydW4iPiAKLSAgICAJCi0gICAgICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIgotICAgIAkgICAgIGRpcj0iJHtkaXN0cm8ucm9vdH0vc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yIi8+Ci0gICAgCQotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vbGF1bmNoZXItZW1iZWRkZWQtanNlL2J1aWxkLnhtbCBiL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9sYXVuY2hlci1lbWJlZGRlZC1qc2UvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDU2OWIzLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9sYXVuY2hlci1lbWJlZGRlZC1qc2UvYnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3QgbmFtZT0iaXRlc3Qtc2FtcGxlcyIgZGVmYXVsdD0icnVuIj4gCi0JCi0JPGVjaG8+JHtqYXZhLmhvbWV9PC9lY2hvPgotCTwhLS0gCi0JICAgIGNvbXBpbGUgYW5kIHJ1biBlYWNoIHNhbXBsZSBhcyB0aG91Z2ggdGhlIHVzZXIgd2VyZSBydW5uaW5nCi0JICAgIHNhbXBsZXMgZnJvbSB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbi4gSGVyZSB3ZSB1c2UgYW50IHRhcmdldHMKLQkgICAgaW4gdGhlIGZpcnN0IGluc3RhbmNlIGJ1dCBmb3Igc29tZSB0ZXN0cyB3ZSBtYXkgd2FudCB0byBydW4gCi0JICAgIGphcnMgZGlyZWN0bHkgb3IgZmlyZSB1cCB3ZWJhcHAgY29udGFpbmVycyBhbmQgZGVwbG95IHdhcnMuIEluIG90aGVyIGNhc2VzCi0JICAgIHdlIG1heSBuZWVkIHRvIHJ1biB0d28gc2FtcGxlcyB0b2dldGhlciB0byBwcm92aWRlIHJlZmVyZW5jZSBhbmQgCi0JICAgIHNlcnZpY2Ugc2lkZXMgb2YgdGhlIHNhbXBsZS4KLQktLT4KLQotICAgIDxwcm9wZXJ0eSBuYW1lPSJkaXN0cm8ucm9vdCIgdmFsdWU9Ii4uLy4uLy4uL2Rpc3RyaWJ1dGlvbi9hbGwvdGFyZ2V0L2FwYWNoZS10dXNjYW55LXNjYS1hbGwtJHt0dXNjYW55LnZlcnNpb259LmRpci90dXNjYW55LXNjYS0ke3R1c2NhbnkudmVyc2lvbn0iIC8+Ci0KLSAgICA8dGFyZ2V0IG5hbWU9InJ1biI+IAotICAgIAkKLSAgICAgICAgPGFudCBkaXI9IiR7ZGlzdHJvLnJvb3R9L3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtanNlIgotICAgICAgICAgICAgIHRhcmdldD0icnVuLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yIj4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvZGlzdHJpYnV0aW9uL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2kvYnVpbGQueG1sIGIvaXRlc3QvZGlzdHJpYnV0aW9uL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2kvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjg3NGVkLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0IG5hbWU9Iml0ZXN0LXNhbXBsZXMiIGRlZmF1bHQ9InJ1biI+IAotCQotCTxlY2hvPiR7amF2YS5ob21lfTwvZWNobz4KLQk8IS0tIAotCSAgICBjb21waWxlIGFuZCBydW4gZWFjaCBzYW1wbGUgYXMgdGhvdWdoIHRoZSB1c2VyIHdlcmUgcnVubmluZwotCSAgICBzYW1wbGVzIGZyb20gdGhlIGJpbmFyeSBkaXN0cmlidXRpb24uIEhlcmUgd2UgdXNlIGFudCB0YXJnZXRzCi0JICAgIGluIHRoZSBmaXJzdCBpbnN0YW5jZSBidXQgZm9yIHNvbWUgdGVzdHMgd2UgbWF5IHdhbnQgdG8gcnVuIAotCSAgICBqYXJzIGRpcmVjdGx5IG9yIGZpcmUgdXAgd2ViYXBwIGNvbnRhaW5lcnMgYW5kIGRlcGxveSB3YXJzLiBJbiBvdGhlciBjYXNlcwotCSAgICB3ZSBtYXkgbmVlZCB0byBydW4gdHdvIHNhbXBsZXMgdG9nZXRoZXIgdG8gcHJvdmlkZSByZWZlcmVuY2UgYW5kIAotCSAgICBzZXJ2aWNlIHNpZGVzIG9mIHRoZSBzYW1wbGUuCi0JLS0+Ci0KLSAgICA8cHJvcGVydHkgbmFtZT0iZGlzdHJvLnJvb3QiIHZhbHVlPSIuLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS5kaXIvdHVzY2FueS1zY2EtJHt0dXNjYW55LnZlcnNpb259IiAvPgotCi0gICAgPHRhcmdldCBuYW1lPSJydW4iPiAKLSAgICAJCi08IS0tIFNlZW1zIHRvIGJlIGhhbmdpbmcgaW4gdGhlIGNvbnNvbGUgYXQgdGhlIGVuZCBvZiB0aGUgT1NHaSBydW4KLSAgICAgY29uZmlndXJlIGl0IHRvIHJ1biBubyB0ZXN0cyBmb3Igbm93Ci0gICAgICAgIDxhbnQgZGlyPSIke2Rpc3Ryby5yb290fS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2kiCi0gICAgICAgICAgICAgdGFyZ2V0PSJydW4tY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IiLz4KLS0tPgotCi0gICAgICAgIDxhbnQgZGlyPSIke2Rpc3Ryby5yb290fS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2kiLz4KLQotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vbGVnYWwtY2hlY2tzL3BvbS54bWwgYi9pdGVzdC9kaXN0cmlidXRpb24vbGVnYWwtY2hlY2tzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxOTM3ZmUuLjAwMDAwMDAKLS0tIGEvaXRlc3QvZGlzdHJpYnV0aW9uL2xlZ2FsLWNoZWNrcy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1kaXN0cmlidXRpb248L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+aXRlc3QtZGlzdHJpYnV0aW9uLWxlZ2FsLWNoZWNrczwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgRGlzdHJpYnV0aW9uIExlZ2FsIENoZWNrczwvbmFtZT4KLQotICAgIDxwcm9maWxlcz4KLSAgICAgICAgPHByb2ZpbGU+Ci0gICAgICAgICAgICA8aWQ+ZGlzdHJpYnV0aW9uPC9pZD4KLSAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LWJpbi1kaXN0cm8tdW56aXA8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIAotICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgICAgIDwvcHJvZmlsZT4KLSAgICA8L3Byb2ZpbGVzPgotCi0gICAgPGJ1aWxkPgotICAgICAgICAgICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUucmF0PC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXBhY2hlLXJhdC1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4wLjY8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jaGVjazwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJhc2VkaXI+Li4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0yLjAtQmV0YTEuZGlyPC9iYXNlZGlyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVTdWJQcm9qZWN0cz5mYWxzZTwvZXhjbHVkZVN1YlByb2plY3RzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS9DSEFOR0VTPC9leGNsdWRlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovTUFOSUZFU1QuTUY8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi90YXJnZXQvKiovKi5sb2c8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEvZmVhdHVyZXMvY29uZmlndXJhdGlvbi9jb25maWcuaW5pPC9leGNsdWRlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vbGVnYWwtY2hlY2tzL3NyYy90ZXN0L2phdmEvaXRlc3QvSmFyc0luTElDRU5TRVRlc3RDYXNlLmphdmEgYi9pdGVzdC9kaXN0cmlidXRpb24vbGVnYWwtY2hlY2tzL3NyYy90ZXN0L2phdmEvaXRlc3QvSmFyc0luTElDRU5TRVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZGJmNjIuLjAwMDAwMDAKLS0tIGEvaXRlc3QvZGlzdHJpYnV0aW9uL2xlZ2FsLWNoZWNrcy9zcmMvdGVzdC9qYXZhL2l0ZXN0L0phcnNJbkxJQ0VOU0VUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2UgaXRlc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotLyoqCi0gKiBDaGVja3MgdGhhdCBhbGwgamFyIGZpbGVzIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gYXJlIG1lbnRpb25lZCBpbiB0aGUgTElDRU5TRSBmaWxlCi0gKiBhbmQgdGhhdCBhbGwgamFycyBtZW50aW9uZWQgaW4gdGhlIExJQ0VOU0UgYXJlIGluIHRoZSBkaXN0cmlidXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBKYXJzSW5MSUNFTlNFVGVzdENhc2UgewotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0SmFycygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBGaWxlIGRpc3Ryb1Jvb3QgPSBnZXRVbnppcGVkRGlzdHJvUm9vdCgpOwotCi0gICAgICAgIEZpbGUgbGljZW5zZUZpbGUgPSBuZXcgRmlsZShkaXN0cm9Sb290LCAiTElDRU5TRSIpOwotICAgICAgICBpZiAoIWxpY2Vuc2VGaWxlLmV4aXN0cygpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJjYW4ndCBmaW5kIExJQ0VOU0UgZmlsZSBhdDogIiArIGxpY2Vuc2VGaWxlLmdldEFic29sdXRlRmlsZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgRmlsZSBsaWJEaXJlY3RvcnkgPSBuZXcgRmlsZShkaXN0cm9Sb290LCAibW9kdWxlcyIpOwotICAgICAgICBpZiAoIWxpYkRpcmVjdG9yeS5leGlzdHMoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY2FuJ3QgZmluZCBtb2R1bGVzIGZvbGRlciBhdDogIiArIGxpYkRpcmVjdG9yeS5nZXRBYnNvbHV0ZUZpbGUoKS50b1N0cmluZygpKTsKLSAgICAgICAgfQotCi0gICAgICAgIExpc3Q8U3RyaW5nPiBqYXJzID0gZ2V0SmFyc0luRGlzdHJvKGxpYkRpcmVjdG9yeSk7Ci0KLSAgICAgICAgTGlzdDxTdHJpbmc+IGJhZDIgPSBnZXRMSUNFTlNFSmFyc05vdEluRGlzdHJvKGxpY2Vuc2VGaWxlLCBqYXJzKTsKLSAgICAgICAgaWYgKGJhZDIuc2l6ZSgpID4gMCkgewotICAgICAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJKYXJzIGluIExJQ0VOU0UgYnV0IG5vdCBpbiBEaXN0cmlidXRpb246ICIgKyBiYWQyKTsKLSAgICAgICAgfQotCi0gICAgICAgIExpc3Q8U3RyaW5nPiBiYWQxID0gZ2V0SmFyc05vdEluTElDRU5TRShqYXJzLCBsaWNlbnNlRmlsZSk7Ci0gICAgICAgIGlmIChiYWQxLnNpemUoKSA+IDApIHsKLSAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSmFycyBpbiBkaXN0cmlidXRpb24gYnV0IG5vdCBpbiBMSUNFTlNFOiAiICsgYmFkMSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChiYWQxLnNpemUoKSA+IDAgfHwgYmFkMi5zaXplKCkgPiAwKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJMSUNFTlNFIHByb2JsZW1zLCBjaGVjayBsb2ciKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGdldExJQ0VOU0VKYXJzTm90SW5EaXN0cm8oRmlsZSBsaWNlbnNlRmlsZSwgTGlzdDxTdHJpbmc+IGphcnMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIExpc3Q8U3RyaW5nPiBiYWRKYXJzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihsaWNlbnNlRmlsZSkpOwotICAgICAgICBTdHJpbmcgbGluZSA9IG51bGw7Ci0gICAgICAgIHdoaWxlICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBsaW5lID0gbGluZS50cmltKCk7Ci0gICAgICAgICAgICBpZiAobGluZS5jb250YWlucygiLmphciIpKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nVG9rZW5pemVyIHN0ID0gbmV3IFN0cmluZ1Rva2VuaXplcihsaW5lKTsKLSAgICAgICAgICAgICAgICB3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyBzID0gc3QubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzLmNvbnRhaW5zKCIuamFyIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLnN0YXJ0c1dpdGgoIigiKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZygxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzLmVuZHNXaXRoKCIsIikgfHwgcy5lbmRzV2l0aCgiOiIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMuc3Vic3RyaW5nKDAsIHMubGVuZ3RoKCktMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5lbmRzV2l0aCgiKSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHMuc3Vic3RyaW5nKDAsIHMubGVuZ3RoKCktMSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWphcnMuY29udGFpbnMocykgJiYgIXMuc3RhcnRzV2l0aCgidHVzY2FueS0iKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZEphcnMuYWRkKHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBiYWRKYXJzOwotICAgIH0KLQotICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGdldEphcnNOb3RJbkxJQ0VOU0UoTGlzdDxTdHJpbmc+IGphcnMsIEZpbGUgbGljZW5zZUZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIExpc3Q8U3RyaW5nPiBiYWRKYXJzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7Ci0gICAgICAgIFN0cmluZyBsaWNlbnNlVGV4dCA9IHJlYWRMSUNFTlNFKGxpY2Vuc2VGaWxlKTsKLSAgICAgICAgZm9yIChTdHJpbmcgamFyIDogamFycykgewotICAgICAgICAgICAgaWYgKCFsaWNlbnNlVGV4dC5jb250YWlucyhqYXIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGphci5zdGFydHNXaXRoKCJ0dXNjYW55LSIpIHx8IGphci5zdGFydHNXaXRoKCJzYW1wbGUtIikgfHwgamFyLnN0YXJ0c1dpdGgoInRlc3QtIikgfHwgamFyLnN0YXJ0c1dpdGgoIml0ZXN0LSIpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0dXNjYW55IGphcnMgYXMgdGhleSdyZSBub3QgbWVudGlvbmVkIGluIHRoZSBMSUNFTlNFIGZpbGUKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBiYWRKYXJzLmFkZChqYXIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYmFkSmFyczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBnZXRKYXJzSW5EaXN0cm8oRmlsZSBkaXJlY3RvcnkpIHsKLSAgICAgICAgTGlzdDxTdHJpbmc+IGphcnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKLSAgICAgICAgZm9yIChTdHJpbmcgZm4gOiBkaXJlY3RvcnkubGlzdCgpKXsKLSAgICAgICAgICAgIGlmIChmbi5lbmRzV2l0aCgiLmphciIpKSB7Ci0gICAgICAgICAgICAgICAgamFycy5hZGQoZm4pOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShkaXJlY3RvcnksIGZuKTsKLSAgICAgICAgICAgICAgICBpZiAoZi5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGphcnMuYWRkQWxsKGdldEphcnNJbkRpc3RybyhmKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBqYXJzOwotICAgIH0KLQotICAgIHByaXZhdGUgRmlsZSBnZXRVbnppcGVkRGlzdHJvUm9vdCgpIHsKLSAgICAgICAgRmlsZSBkaXN0cm9UYXJnZXQgPSBuZXcgRmlsZSgiLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQiKTsKLSAgICAgICAgRmlsZSByb290ID0gbnVsbDsKLSAgICAgICAgZm9yIChTdHJpbmcgZiA6IGRpc3Ryb1RhcmdldC5saXN0KCkpIHsKLSAgICAgICAgICAgIGlmIChmLmVuZHNXaXRoKCIuZGlyIikpIHsKLSAgICAgICAgICAgICAgICByb290ID0gIG5ldyBGaWxlKGRpc3Ryb1RhcmdldCwgZik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJvb3QgPT0gbnVsbCkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY2FuJ3QgZmluZCBkaXN0cm8gcm9vdCIpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChyb290Lmxpc3QoKS5sZW5ndGggIT0gMSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiZXhwZWN0aW5nIG9uZSBkaXJlY3RvcnkgaW4gZGlzdHJvIHJvb3QiKTsKLSAgICAgICAgfQotICAgICAgICByb290ID0gbmV3IEZpbGUocm9vdCwgcm9vdC5saXN0KClbMF0pOwotICAgICAgICByZXR1cm4gcm9vdDsKLSAgICB9Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVhZExJQ0VOU0UoRmlsZSBsaWNlbnNlRmlsZSkgdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24gewotICAgICAgICBTdHJpbmdCdWZmZXIgZmlsZURhdGEgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihsaWNlbnNlRmlsZSkpOwotICAgICAgICBjaGFyW10gYnVmID0gbmV3IGNoYXJbMTAyNF07Ci0gICAgICAgIGludCBudW1SZWFkID0gMDsKLSAgICAgICAgd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQoYnVmKSkgIT0gLTEpIHsKLSAgICAgICAgICAgIFN0cmluZyByZWFkRGF0YSA9IFN0cmluZy52YWx1ZU9mKGJ1ZiwgMCwgbnVtUmVhZCk7Ci0gICAgICAgICAgICBmaWxlRGF0YS5hcHBlbmQocmVhZERhdGEpOwotICAgICAgICAgICAgYnVmID0gbmV3IGNoYXJbMTAyNF07Ci0gICAgICAgIH0KLSAgICAgICAgcmVhZGVyLmNsb3NlKCk7Ci0gICAgICAgIHJldHVybiBmaWxlRGF0YS50b1N0cmluZygpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGlzdHJpYnV0aW9uL3BvbS54bWwgYi9pdGVzdC9kaXN0cmlidXRpb24vcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU1YTU1YS4uMDAwMDAwMAotLS0gYS9pdGVzdC9kaXN0cmlidXRpb24vcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLSAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgotICAgIDxhcnRpZmFjdElkPml0ZXN0LWRpc3RyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgRGlzdHJpYnV0aW9uPC9uYW1lPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kaXN0cmlidXRpb24tYWxsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLSAgICA8cHJvZmlsZXM+Ci0gICAgICA8cHJvZmlsZT4KLSAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+Ci0gICAgICAgICAgPGFjdGl2YXRpb24+Ci0gICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgotICAgICAgICAgIDwvYWN0aXZhdGlvbj4KLSAgICAgICAgICA8bW9kdWxlcz4KLSAgICAgICAgPG1vZHVsZT5sZWdhbC1jaGVja3M8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvcjwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3I8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24tYmluZGluZy1ybWktY2FsY3VsYXRvcjwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3I8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5sYXVuY2hlci1lbWJlZGRlZC1qc2U8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5sYXVuY2hlci1lbWJlZGRlZC1vc2dpPC9tb2R1bGU+Ci0gICAgICAgICAgPC9tb2R1bGVzPgotICAgICAgPC9wcm9maWxlPgotCi0gICAgICA8cHJvZmlsZT4KLSAgICAgICAgICA8aWQ+ZGlzdHJpYnV0aW9uPC9pZD4KLSAgICAgICAgICA8YWN0aXZhdGlvbj4KLSAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICA8bmFtZT5idWlsZFppcHM8L25hbWU+Ci0gICAgICAgICAgICAgICAgIDx2YWx1ZT50cnVlPC92YWx1ZT4KLSAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICA8L2FjdGl2YXRpb24+Ci0gICAgICAgICAgPG1vZHVsZXM+Ci0gICAgICAgICAgICAgIDxtb2R1bGU+c3JjLWRpc3Ryby11bnppcDwvbW9kdWxlPgotICAgICAgICAgICAgICA8bW9kdWxlPnNyYy1kaXN0cm8tcmF0PC9tb2R1bGU+Ci0gICAgICAgICAgICAgIDxtb2R1bGU+YmluLWRpc3Ryby11bnppcDwvbW9kdWxlPgotICAgICAgICAgICAgICA8bW9kdWxlPmxlZ2FsLWNoZWNrczwvbW9kdWxlPgotICAgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yPC9tb2R1bGU+Ci0gICAgICAgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvcjwvbW9kdWxlPgotICAgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1iaW5kaW5nLXJtaS1jYWxjdWxhdG9yPC9tb2R1bGU+Ci0gICAgICAgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvcjwvbW9kdWxlPgotICAgICAgICAgICAgICA8bW9kdWxlPmxhdW5jaGVyLWVtYmVkZGVkLWpzZTwvbW9kdWxlPgotICAgICAgICAgICAgICA8bW9kdWxlPmxhdW5jaGVyLWVtYmVkZGVkLW9zZ2k8L21vZHVsZT4KLSAgICAgICAgICA8L21vZHVsZXM+Ci0gICAgICA8L3Byb2ZpbGU+Ci0gICAgPC9wcm9maWxlcz4KLQotICAgIDxidWlsZD4KLQk8ZGVmYXVsdEdvYWw+aW5zdGFsbDwvZGVmYXVsdEdvYWw+Ci0gICAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvZGlzdHJpYnV0aW9uL3NyYy1kaXN0cm8tcmF0L3BvbS54bWwgYi9pdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby1yYXQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDA3MDNjYi4uMDAwMDAwMAotLS0gYS9pdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby1yYXQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3QtZGlzdHJpYnV0aW9uPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPml0ZXN0LWRpc3RyaWJ1dGlvbi1zcmMtZHNpdHJvLXJhdDwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgRGlzdHJpYnV0aW9uIFNyYyBEaXN0cm8gUkFUPC9uYW1lPgotCi0gICAgPHByb2ZpbGVzPgotICAgICAgICA8cHJvZmlsZT4KLSAgICAgICAgICAgIDxpZD5kaXN0cmlidXRpb248L2lkPgotICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtc3JjLWRpc3Ryby11bnppcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgotICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgCi0gICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KLSAgICAgICAgPC9wcm9maWxlPgotICAgIDwvcHJvZmlsZXM+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgICAgICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5yYXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGUtcmF0LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjAuNjwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmNoZWNrPC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFzZWRpcj4uLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLTIuMC1CZXRhMS1zcmMuZGlyPC9iYXNlZGlyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVTdWJQcm9qZWN0cz5mYWxzZTwvZXhjbHVkZVN1YlByb2plY3RzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvQ0hBTkdFUzwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqLyouTUY8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zY2FfdmFyaWFibGVzLmR0ZDwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9DYWxjdWxhdG9ySmFzcy5jb25maWc8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvZW5naW5lL3JlcG9zaXRvcnkvbW9kdWxlcy9tb2R1bGVzLmxpc3Q8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvZW5naW5lL3JlcG9zaXRvcnkvc2VydmljZXMvc2VydmljZXMubGlzdDwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nLmhhbmRsZXJzPC9leGNsdWRlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+dHVzY2FueS1zY2EtMi4wLUJldGExLXNyYy9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcuc2NoZW1hczwvZXhjbHVkZT4KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB0aGVzZSBvbmVzIHdlIG5lZWQgdG8gaW1wbGVtZW50IFJBVCBsaWNlbnNlIHByb2Nlc3NvcnMgdG8gaGFuZGxlIHRoZSBub24tQUwgaGVhZGVycywganVzdCBleGNsdWRlIGZvciBub3cgLS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL21vZHVsZXMvYXNzZW1ibHkteHNkLyoqLyouKjwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9zY2EtYXBpLyoqLyouKjwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi13ZWItcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLnRsZDwvZXhjbHVkZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1wb2xpY3ktMS4xLWludGVudHMtZGVmaW5pdGlvbnMtY2QwMy54bWw8L2V4Y2x1ZGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL21vZHVsZXMvc2NhLWNsaWVudC1pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jbGllbnQvaW1wbC9TQ0FDbGllbnRGYWN0b3J5RmluZGVySW1wbC5qYXZhPC9leGNsdWRlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgICAgICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby11bnppcC9idWlsZC54bWwgYi9pdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby11bnppcC9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5OGUxOWIuLjAwMDAwMDAKLS0tIGEvaXRlc3QvZGlzdHJpYnV0aW9uL3NyYy1kaXN0cm8tdW56aXAvYnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3QgbmFtZT0iaXRlc3QtdW56aXAiIGRlZmF1bHQ9InVuemlwIj4gCi0KLSAgICA8dGFyZ2V0IG5hbWU9InVuemlwIj4KLSAgICAgICAgPGRlbGV0ZSBkaXI9Ii4uLy4uLy4uL2Rpc3RyaWJ1dGlvbi9hbGwvdGFyZ2V0L2FwYWNoZS10dXNjYW55LXNjYS1hbGwtJHt0dXNjYW55LnZlcnNpb259LXNyYy5kaXIiLz4KLSAgICAgICAgPHVuemlwIHNyYz0iLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0ke3R1c2NhbnkudmVyc2lvbn0tc3JjLnppcCIgCi0gICAgICAgICAgICAgICBkZXN0PSIuLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS1zcmMuZGlyIi8+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2l0ZXN0L2RvbWFpbnMvZGlzdHJpYnV0ZWQvcG9tLnhtbCBiL2l0ZXN0L2RvbWFpbnMvZGlzdHJpYnV0ZWQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmI2YmU2NS4uMDAwMDAwMAotLS0gYS9pdGVzdC9kb21haW5zL2Rpc3RyaWJ1dGVkL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWRvbWFpbnMtZGlzdHJpYnV0ZWQ8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpdGVzdCBkb21haW4gZGlzdHJpYnV0ZWQ8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2Utbm9kZXA8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICA8L2J1aWxkPg0KLQ0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvcG9tLnhtbCBiL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGZmMzE3Li4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAgICoKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPml0ZXN0LWltcGxlbWVudGF0aW9uLXNwcmluZzwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgU3ByaW5nIEltcGxlbWVudGF0aW9uPC9uYW1lPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmc8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1wb2xpY3ktc2VjdXJpdHk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIAotCi0gICAgICAgIDwhLS0gU3ByaW5nIGRlcGVuZGVuY2llcy4uLiAtLT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjAuMi5SRUxFQVNFPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJlYW5zPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+My4wLjIuUkVMRUFTRTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy1jb250ZXh0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+My4wLjIuUkVMRUFTRTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2Evc2VydmljZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0V4cGxpY2l0U2VydmljZS1jb250ZXh0LnhtbCBiL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3NlcnZpY2VzL01FVEEtSU5GL3NwcmluZy9TcHJpbmdFeHBsaWNpdFNlcnZpY2UtY29udGV4dC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyZTBjZGIuLjAwMDAwMDAKLS0tIGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2Evc2VydmljZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0V4cGxpY2l0U2VydmljZS1jb250ZXh0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08IS0tIEFwcGxpY2F0aW9uIGNvbnRleHQgZm9yIHRoZSBTcHJpbmdFeHBsaWNpdEhlbGxvV29ybGQgdGVzdGNhc2UgCi1JbiB0aGlzIGNhc2UsIHRoZSBzZXJ2aWNlIG9mZmVyZWQgYnkgdGhlIFNwcmluZyBhcHBsaWNhdGlvbiBpcyBzcGVjaWZpZWQKLWV4cGxpY2l0bHkgdXNpbmcgYW4gc2NhOnNlcnZpY2UgZWxlbWVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4KLTxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyIKLSAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgotICAgICAgIHhtbG5zOnNjYT0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9zY2EiCi0gICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSIKLWh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMueHNkCi1odHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3NjYSBodHRwOi8vd3d3Lm9zb2Eub3JnL3htbG5zL3NjYS8xLjAvc3ByaW5nLXNjYS54c2QiPgotCi0gICAgPHNjYTpzZXJ2aWNlIG5hbWU9ImZvb1NlcnZpY2UiIAotICAgICAgICAgICAgICAgICB0eXBlPSJoZWxsb3dvcmxkLkhlbGxvV29ybGQiIAotICAgICAgICAgICAgICAgICB0YXJnZXQ9InRlc3RCZWFuIi8+Ci0KLSAgICA8YmVhbiBpZD0idGVzdEJlYW4iIAotICAgICAgICAgIGNsYXNzPSJtb2NrLlRlc3RIZWxsb1dvcmxkQmVhbiIgCi0gICAgICAgICAgbGF6eS1pbml0PSJ0cnVlIj4KLSAgICA8L2JlYW4+Ci0KLTwvYmVhbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wb3J0LWV4cG9ydC90ZXN0cy9wb20ueG1sIGIvaXRlc3QvaW1wb3J0LWV4cG9ydC90ZXN0cy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmZhNDFhLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ltcG9ydC1leHBvcnQvdGVzdHMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1pbXBvcnQtZXhwb3J0LXRlc3RzPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSW1wb3J0IEV4cG9ydCBUZXN0czwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLSAgICANCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvcG9tLnhtbCBiL2l0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkODlhYTIuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZHluYW1pYy1yZXBseXE8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgd2l0aCBkeW5hbWljIHJlcGx5cTwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICANCi0gICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvYXJncy9wb20ueG1sIGIvaXRlc3Qvam1zL2FyZ3MvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2NzNlMS4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvYXJncy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1hcmdzPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIEFyZ3M8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPCEtLSAgdXNlcyBBY3RpdmVNUSA1LjEgYXMgNC4xIFNlc3Npb24uY3JlYXRlUXVldWUgZG9lcyBub3Qgd29yayB1c2luZw0KLSAgICAgICAgICAgICAgYSB0ZW1wb3JhcnkgcXVldWUgbmFtZSAtLT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvaXRlc3Qvam1zL2FyZ3Mvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NlNDY4YS4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQotIyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQotIyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSMjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQotIyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCi0jIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMjIA0KLSMjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMjIA0KLSMjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0jIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSMjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSMjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0jIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0jIFNUQVJUIFNOSVBQRVQ6IGpuZGkNCi0NCi1qYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwgPSBvcmcuYXBhY2hlLmFjdGl2ZW1xLmpuZGkuQWN0aXZlTVFJbml0aWFsQ29udGV4dEZhY3RvcnkNCi0NCi0jIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBjb25uZWN0b3INCi1qYXZhLm5hbWluZy5wcm92aWRlci51cmwgPSB2bTovL2xvY2FsaG9zdD9icm9rZXIucGVyc2lzdGVudD1mYWxzZSZicm9rZXIudXNlSm14PWZhbHNlJmJyb2tlci51c2VTaHV0ZG93bkhvb2s9ZmFsc2UNCi0NCi0jIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEpOREkgbmFtZSB0aGUgY29ubmVjdGlvbiBmYWN0b3J5DQotIyBzaG91bGQgYXBwZWFyIGFzLiANCi0jY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IGNvbm5lY3Rpb25GYWN0b3J5LCBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LCB0b3BpY0Nvbm5lY3Rpb25GYWN0cnkNCi1jb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gQ29ubmVjdGlvbkZhY3RvcnksIENvbm5lY3Rpb25GYWN0b3J5Mg0KLQ0KLSMgcmVnaXN0ZXIgc29tZSBxdWV1ZXMgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KLSMgcXVldWUuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQotDQotIyByZWdpc3RlciBzb21lIHRvcGljcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQotIyB0b3BpYy5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCi0jdG9waWMuTXlUb3BpYyA9IGV4YW1wbGUuTXlUb3BpYw0KLXRvcGljLlNlcnZpY2VUb3BpYyA9IFNlcnZpY2VUb3BpYw0KLQ0KLSMgRU5EIFNOSVBQRVQ6IGpuZGkNCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9yZXNvdXJjZXMvc2VsZWN0b3JzL3NlbGVjdG9ycy5jb21wb3NpdGUgYi9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9yZXNvdXJjZXMvc2VsZWN0b3JzL3NlbGVjdG9ycy5jb21wb3NpdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyN2QzYTcuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2FyZ3Mvc3JjL21haW4vcmVzb3VyY2VzL3NlbGVjdG9ycy9zZWxlY3RvcnMuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gLS0+DQotPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KLSAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiDQotICAgICAgICAgICBuYW1lPSJEZWZpbml0aW9uc1Rlc3RzIj4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJDbGllbnQxIj4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkNsaWVudEltcGwiLz4NCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZUEiPg0KLSAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOk15U2VydmljZSIgLz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJTZXJ2aWNlMSI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5TZXJ2aWNlSW1wbCIvPg0KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iTXlTZXJ2aWNlIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXMgLz4NCi0gICAgICAgIDwvc2VydmljZT4gDQotICAgIDwvY29tcG9uZW50PiAgICAgICANCi0NCi08L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvY2FsbGJhY2tzL3BvbS54bWwgYi9pdGVzdC9qbXMvY2FsbGJhY2tzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkZWIwMmMuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2NhbGxiYWNrcy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1jYWxsYmFja3M8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgVGVzdHMgRm9yIENhbGxiYWNrczwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8IS0tICB1c2VzIEFjdGl2ZU1RIDUuMSBhcyA0LjEgU2Vzc2lvbi5jcmVhdGVRdWV1ZSBkb2VzIG5vdCB3b3JrIHVzaW5nDQotICAgICAgICAgICAgICBhIHRlbXBvcmFyeSBxdWV1ZSBuYW1lIC0tPg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMzYyYzUuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQotIyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQotIyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSMjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQotIyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCi0jIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMjIA0KLSMjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMjIA0KLSMjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0jIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSMjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSMjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0jIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0jIFNUQVJUIFNOSVBQRVQ6IGpuZGkNCi0NCi1qYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwgPSBvcmcuYXBhY2hlLmFjdGl2ZW1xLmpuZGkuQWN0aXZlTVFJbml0aWFsQ29udGV4dEZhY3RvcnkNCi0NCi0jIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBjb25uZWN0b3INCi1qYXZhLm5hbWluZy5wcm92aWRlci51cmwgPSB2bTovL2xvY2FsaG9zdD9icm9rZXIucGVyc2lzdGVudD1mYWxzZSZicm9rZXIudXNlSm14PWZhbHNlJmJyb2tlci51c2VTaHV0ZG93bkhvb2s9ZmFsc2UNCi0NCi0jIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEpOREkgbmFtZSB0aGUgY29ubmVjdGlvbiBmYWN0b3J5DQotIyBzaG91bGQgYXBwZWFyIGFzLiANCi0jY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IGNvbm5lY3Rpb25GYWN0b3J5LCBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LCB0b3BpY0Nvbm5lY3Rpb25GYWN0cnkNCi1jb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gQ29ubmVjdGlvbkZhY3RvcnkNCi0NCi0jIHJlZ2lzdGVyIHNvbWUgcXVldWVzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCi0jIHF1ZXVlLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KLXF1ZXVlLlNlcnZpY2VRdWV1ZSA9IFNlcnZpY2VRdWV1ZQ0KLXF1ZXVlLlNlcnZpY2VRdWV1ZSA9IFRRU2VydmljZVF1ZXVlDQotcXVldWUuQ2FsbGJhY2tRdWV1ZSA9IENhbGxiYWNrUXVldWUNCi0NCi0jIHJlZ2lzdGVyIHNvbWUgdG9waWNzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCi0jIHRvcGljLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KLSN0b3BpYy5NeVRvcGljID0gZXhhbXBsZS5NeVRvcGljDQotDQotIyBFTkQgU05JUFBFVDogam5kaQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS9jbGllbnQuY29tcG9zaXRlIGIvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL2NsaWVudC5jb21wb3NpdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MWZkZGEuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL2NsaWVudC5jb21wb3NpdGUKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLSAtLT4NCi08Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCINCi0gICAgICAgICAgIG5hbWU9IkNhbGxiYWNrQ2xpZW50Q29tcG9zaXRlIj4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJDbGllbnRDb21wb25lbnQiPg0KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQ2xpZW50SW1wbCIgLz4NCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ibXlTZXJ2aWNlIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6U2VydmljZVF1ZXVlIi8+DQotICAgICAgICAgICAgPGNhbGxiYWNrPg0KLSAgICAgICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6Q2FsbGJhY2tRdWV1ZSIvPg0KLSAgICAgICAgICAgIDwvY2FsbGJhY2s+DQotICAgICAgICA8L3JlZmVyZW5jZT4NCi0gICAgPC9jb21wb25lbnQ+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iU2VydmljZUNvbXBvbmVudCI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNTZXJ2aWNlSW1wbCIgLz4NCi0gICAgICAgIDxzZXJ2aWNlIG5hbWU9IkpNU1NlcnZpY2UiPg0KLSAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpTZXJ2aWNlUXVldWUiLz4NCi0gICAgICAgICAgICA8Y2FsbGJhY2s+DQotICAgICAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpDYWxsYmFja1F1ZXVlIi8+DQotICAgICAgICAgICAgPC9jYWxsYmFjaz4NCi0gICAgICAgIDwvc2VydmljZT4NCi0gICAgPC9jb21wb25lbnQ+DQotDQotPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3RlbXBxLmNvbXBvc2l0ZSBiL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS90ZW1wcS5jb21wb3NpdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxNDBiZGYuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3RlbXBxLmNvbXBvc2l0ZQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotIC0tPg0KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KLSAgICAgICAgICAgbmFtZT0iQ2FsbGJhY2tUZW1wUUNvbXBvc2l0ZSI+DQotDQotPCEtLSANCi0NCi1UaGUgY2xpZW50IGNvbXBvbmVudCBkb2VzIG5vdCBkZWZpbmUgdGhlIGNhbGxiYWNrIGRlc3RpbmF0aW9uIHNvIGEgdGVtcG9yYXJ5IHF1ZXVlIHNob3VsZCBiZSB1c2VkDQotDQotLS0+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iVFFDbGllbnRDb21wb25lbnQiPg0KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQ2xpZW50SW1wbCIgLz4NCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ibXlTZXJ2aWNlIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6VFFTZXJ2aWNlUXVldWUiLz4NCi0gICAgICAgICAgICA8Y2FsbGJhY2s+DQotICAgICAgICAgICAgICAgIDxiaW5kaW5nLmptcyAvPg0KLSAgICAgICAgICAgIDwvY2FsbGJhY2s+DQotICAgICAgICA8L3JlZmVyZW5jZT4NCi0gICAgPC9jb21wb25lbnQ+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iVFFTZXJ2aWNlQ29tcG9uZW50Ij4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU1NlcnZpY2VJbXBsIiAvPg0KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iSk1TU2VydmljZSI+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOlRRU2VydmljZVF1ZXVlIi8+DQotICAgICAgICAgICAgPGNhbGxiYWNrPg0KLSAgICAgICAgICAgICAgICA8YmluZGluZy5qbXMgLz4NCi0gICAgICAgICAgICA8L2NhbGxiYWNrPg0KLSAgICAgICAgPC9zZXJ2aWNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi08L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZGVmYXVsdHMvcG9tLnhtbCBiL2l0ZXN0L2ptcy9kZWZhdWx0cy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTM0NmFhLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9kZWZhdWx0cy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1kZWZhdWx0czwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyB3aXRoIERlZmF1bHRzPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+DQotICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgIA0KLSAgICAgICAgICAgICAgICANCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvZGVmYXVsdHMvY2xpZW50LmNvbXBvc2l0ZSBiL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvZGVmYXVsdHMvY2xpZW50LmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwMTA5NS4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmF1bHRzL2NsaWVudC5jb21wb3NpdGUKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLSAtLT4NCi08Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCINCi0gICAgICAgICAgIG5hbWU9IkRlZmF1bHRDbGllbnRDb21wb3NpdGUiPg0KLQ0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRDbGllbnQiPg0KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSGVsbG9Xb3JsZENsaWVudEltcGwiLz4NCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZUEiPg0KLSAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpIZWxsb1dvcmxkU2VydmljZSIgLz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi08L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDZhY2MwLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQotIyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQotIyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSMjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQotIyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCi0jIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMjIA0KLSMjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMjIA0KLSMjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0jIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSMjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSMjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0jIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0jIFNUQVJUIFNOSVBQRVQ6IGpuZGkNCi0NCi1qYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwgPSBvcmcuYXBhY2hlLmFjdGl2ZW1xLmpuZGkuQWN0aXZlTVFJbml0aWFsQ29udGV4dEZhY3RvcnkNCi0NCi0jIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBjb25uZWN0b3INCi1qYXZhLm5hbWluZy5wcm92aWRlci51cmwgPSB2bTovL2xvY2FsaG9zdD9icm9rZXIucGVyc2lzdGVudD1mYWxzZQ0KLQ0KLSMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgSk5ESSBuYW1lIHRoZSBjb25uZWN0aW9uIGZhY3RvcnkNCi0jIHNob3VsZCBhcHBlYXIgYXMuIA0KLSNjb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gY29ubmVjdGlvbkZhY3RvcnksIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnksIHRvcGljQ29ubmVjdGlvbkZhY3RyeQ0KLWNvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBDb25uZWN0aW9uRmFjdG9yeQ0KLQ0KLSMgcmVnaXN0ZXIgc29tZSBxdWV1ZXMgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KLSMgcXVldWUuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQotcXVldWUuUmVxdWVzdFF1ZXVlID0gUmVxdWVzdFF1ZXVlDQotcXVldWUuUmVzcG9uc2VRdWV1ZSA9IFJlc3BvbnNlUXVldWUNCi0NCi0jIHJlZ2lzdGVyIHNvbWUgdG9waWNzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCi0jIHRvcGljLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KLSN0b3BpYy5NeVRvcGljID0gZXhhbXBsZS5NeVRvcGljDQotDQotIyBFTkQgU05JUFBFVDogam5kaQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9wb20ueG1sIGIvaXRlc3Qvam1zL2RlZmluaXRpb25zL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYTk0MzQuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2RlZmluaXRpb25zL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLWRlZmluaXRpb25zPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIFRlc3RzIEZvciBQcm9wZXJ0aWVzPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDwhLS0gIHVzZXMgQWN0aXZlTVEgNS4xIGFzIDQuMSBTZXNzaW9uLmNyZWF0ZVF1ZXVlIGRvZXMgbm90IHdvcmsgdXNpbmcNCi0gICAgICAgICAgICAgIGEgdGVtcG9yYXJ5IHF1ZXVlIG5hbWUgLS0+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvcG9tLnhtbCBiL2l0ZXN0L2ptcy9leGNlcHRpb25zL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1ZTgyZmEuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtbm9uc2NhY2xpZW50LWV4Y2VwdGlvbnM8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTm9uU0NBIENsaWVudCBFeGNlcHRpb25zPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPnhtbHVuaXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+eG1sdW5pdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4xLjI8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgDQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvbnNUZXN0Q2FzZS5qYXZhIGIvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvbnNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWE2YzRhLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9FeGNlcHRpb25zVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIxMiArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zOw0KLQ0KLWltcG9ydCBzdGF0aWMgb3JnLmN1c3RvbW1vbmtleS54bWx1bml0LlhNTEFzc2VydC5hc3NlcnRYTUxFcXVhbDsNCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOw0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOw0KLQ0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KLWltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsNCi0NCi1pbXBvcnQgamF2YXguam1zLkNvbm5lY3Rpb247DQotaW1wb3J0IGphdmF4Lmptcy5Db25uZWN0aW9uRmFjdG9yeTsNCi1pbXBvcnQgamF2YXguam1zLkRlc3RpbmF0aW9uOw0KLWltcG9ydCBqYXZheC5qbXMuSk1TRXhjZXB0aW9uOw0KLWltcG9ydCBqYXZheC5qbXMuTWVzc2FnZTsNCi1pbXBvcnQgamF2YXguam1zLk1lc3NhZ2VDb25zdW1lcjsNCi1pbXBvcnQgamF2YXguam1zLk1lc3NhZ2VQcm9kdWNlcjsNCi1pbXBvcnQgamF2YXguam1zLk9iamVjdE1lc3NhZ2U7DQotaW1wb3J0IGphdmF4Lmptcy5TZXNzaW9uOw0KLWltcG9ydCBqYXZheC5qbXMuVGV4dE1lc3NhZ2U7DQotaW1wb3J0IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dDsNCi1pbXBvcnQgamF2YXgubmFtaW5nLk5hbWluZ0V4Y2VwdGlvbjsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCi1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOw0KLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOw0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsNCi1pbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOw0KLQ0KLS8qKg0KLSAqIFRoaXMgc2hvd3MgaG93IHRvIHRlc3QgdGhlIEpNUyBiaW5kaW5nIHVzaW5nIGEgc2ltcGxlIEhlbGxvV29ybGQgYXBwbGljYXRpb24uDQotICovDQotcHVibGljIGNsYXNzIEV4Y2VwdGlvbnNUZXN0Q2FzZSB7DQotDQotICAgIHByaXZhdGUgTm9kZSBub2RlOw0KLSAgICBwcml2YXRlIFNlc3Npb24gc2Vzc2lvbjsNCi0gICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBjb250ZXh0Ow0KLSAgICBwcml2YXRlIENvbm5lY3Rpb24gY29ubmVjdGlvbjsNCi0NCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLRURfWE1MID0NCi0gICAgICAgICI8bnMyOkNoZWNrZWRFeGNwZXRpb24geG1sbnM6bnMyPVwiaHR0cDovL2ptcy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvXCI+PG1lc3NhZ2U+Zm9vPC9tZXNzYWdlPjwvbnMyOkNoZWNrZWRFeGNwZXRpb24+IjsNCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLRURfTk9BUkdTX1hNTCA9ICI8bnMyOkNoZWNrZWRFeGNwZXRpb25Ob0FyZ3MgeG1sbnM6bnMyPVwiaHR0cDovL2ptcy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvXCIgLz4iOw0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hFQ0tFRF8yQVJHU19YTUwgPQ0KLSAgICAgICAgIjxuczI6Q2hlY2tlZEV4Y3BldGlvbjJBcmdzIHhtbG5zOm5zMj1cImh0dHA6Ly9qbXMuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnL1wiPjxtZXNzYWdlPmZvbzwvbWVzc2FnZT48L25zMjpDaGVja2VkRXhjcGV0aW9uMkFyZ3M+IjsNCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLRURfQ0hBSU5FRF9YTUwgPQ0KLSAgICAgICAgIjxuczI6Q2hlY2tlZEV4Y3BldGlvbkNoYWluZWQgeG1sbnM6bnMyPVwiaHR0cDovL2ptcy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvXCI+PG1lc3NhZ2U+amF2YS5sYW5nLkV4Y2VwdGlvbjogYmxhPC9tZXNzYWdlPjwvbnMyOkNoZWNrZWRFeGNwZXRpb25DaGFpbmVkPiI7DQotDQotICAgIEBCZWZvcmUNCi0gICAgcHVibGljIHZvaWQgaW5pdCgpIHsNCi0gICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoKS5zdGFydCgpOw0KLSAgICB9DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RUZXh0Q2hlY2tlZCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQotICAgICAgICBzZW5kSk1TVGV4dFJlcXVlc3QoInRocm93Q2hlY2tlZCIpOw0KLSAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZUpNU1Jlc3BvbnNlKCk7DQotICAgICAgICBhc3NlcnRYTUxFcXVhbChDSEVDS0VEX1hNTCwgKChUZXh0TWVzc2FnZSltKS5nZXRUZXh0KCkpOw0KLSAgICB9DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RUZXh0Q2hlY2tlZE5vQXJncygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQotICAgICAgICBzZW5kSk1TVGV4dFJlcXVlc3QoInRocm93Q2hlY2tlZE5vQXJncyIpOw0KLSAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZUpNU1Jlc3BvbnNlKCk7DQotICAgICAgICBhc3NlcnRYTUxFcXVhbChDSEVDS0VEX05PQVJHU19YTUwsICgoVGV4dE1lc3NhZ2UpbSkuZ2V0VGV4dCgpKTsNCi0gICAgfQ0KLQ0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0VGV4dENoZWNrZWQyQXJncygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQotICAgICAgICBzZW5kSk1TVGV4dFJlcXVlc3QoInRocm93Q2hlY2tlZDJBcmdzIik7DQotICAgICAgICBNZXNzYWdlIG0gPSByZWNlaXZlSk1TUmVzcG9uc2UoKTsNCi0gICAgICAgIGFzc2VydFhNTEVxdWFsKENIRUNLRURfMkFSR1NfWE1MLCAoKFRleHRNZXNzYWdlKW0pLmdldFRleHQoKSk7DQotICAgIH0NCi0NCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdFRleHRDaGVja2VkQ2hhaW5lZCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQotICAgICAgICBzZW5kSk1TVGV4dFJlcXVlc3QoInRocm93Q2hlY2tlZENoYWluZWQiKTsNCi0gICAgICAgIE1lc3NhZ2UgbSA9IHJlY2VpdmVKTVNSZXNwb25zZSgpOw0KLSAgICAgICAgYXNzZXJ0WE1MRXF1YWwoQ0hFQ0tFRF9DSEFJTkVEX1hNTCwgKChUZXh0TWVzc2FnZSltKS5nZXRUZXh0KCkpOw0KLSAgICB9DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RUZXh0VW5DaGVja2VkKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSk1TRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsNCi0gICAgICAgIHNlbmRKTVNUZXh0UmVxdWVzdCgidGhyb3dVbkNoZWNrZWQiKTsNCi0gICAgICAgIE1lc3NhZ2UgbSA9IHJlY2VpdmVKTVNSZXNwb25zZSgpOw0KLSAgICAgICAgDQotICAgICAgICAvLyBGSVhNRTogd2hhdCBzaG91bGQgdGhlIHJlc3BvbnNlIG1lc3NhZ2UgYmUgZm9yIHVuY2hlY2tlZCBleGNlcHRpb25zIHdpdGggd2lyZUZvcm1hdC50ZXh0WE1MPz8/DQotICAgICAgICBPYmplY3QgbyA9ICgoT2JqZWN0TWVzc2FnZSltKS5nZXRPYmplY3QoKTsNCi0gICAgICAgIGFzc2VydFRydWUobyBpbnN0YW5jZW9mIFJ1bnRpbWVFeGNlcHRpb24pOw0KLSAgICAgICAgYXNzZXJ0VHJ1ZSgiamF2YS5sYW5nLlJ1bnRpbWVFeGNlcHRpb24iLmVxdWFscyhvLmdldENsYXNzKCkuZ2V0TmFtZSgpKSk7DQotICAgICAgICBhc3NlcnRFcXVhbHMoImJsYSIsICgoUnVudGltZUV4Y2VwdGlvbilvKS5nZXRNZXNzYWdlKCkpOw0KLSAgICB9DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RPYmplY3RDaGVja2VkKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSk1TRXhjZXB0aW9uIHsNCi0gICAgICAgIHNlbmRKTVNPYmplY3RSZXF1ZXN0KCJ0aHJvd0NoZWNrZWQiKTsNCi0gICAgICAgIE1lc3NhZ2UgbSA9IHJlY2VpdmVKTVNSZXNwb25zZSgpOw0KLSAgICAgICAgT2JqZWN0IG8gPSAoKE9iamVjdE1lc3NhZ2UpbSkuZ2V0T2JqZWN0KCk7DQotICAgICAgICBhc3NlcnRUcnVlKG8gaW5zdGFuY2VvZiBDaGVja2VkRXhjcGV0aW9uKTsNCi0gICAgICAgIGFzc2VydEVxdWFscygiZm9vIiwgKChDaGVja2VkRXhjcGV0aW9uKW8pLmdldE1lc3NhZ2UoKSk7DQotICAgIH0NCi0NCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdE9iamVjdENoZWNrZWROb0FyZ3MoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uLCBKTVNFeGNlcHRpb24gew0KLSAgICAgICAgc2VuZEpNU09iamVjdFJlcXVlc3QoInRocm93Q2hlY2tlZE5vQXJncyIpOw0KLSAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZUpNU1Jlc3BvbnNlKCk7DQotICAgICAgICBPYmplY3QgbyA9ICgoT2JqZWN0TWVzc2FnZSltKS5nZXRPYmplY3QoKTsNCi0gICAgICAgIGFzc2VydFRydWUobyBpbnN0YW5jZW9mIENoZWNrZWRFeGNwZXRpb25Ob0FyZ3MpOw0KLSAgICB9DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RPYmplY3RDaGVja2VkMkFyZ3MoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uLCBKTVNFeGNlcHRpb24gew0KLSAgICAgICAgc2VuZEpNU09iamVjdFJlcXVlc3QoInRocm93Q2hlY2tlZDJBcmdzIik7DQotICAgICAgICBNZXNzYWdlIG0gPSByZWNlaXZlSk1TUmVzcG9uc2UoKTsNCi0gICAgICAgIE9iamVjdCBvID0gKChPYmplY3RNZXNzYWdlKW0pLmdldE9iamVjdCgpOw0KLSAgICAgICAgYXNzZXJ0VHJ1ZShvIGluc3RhbmNlb2YgQ2hlY2tlZEV4Y3BldGlvbjJBcmdzKTsNCi0gICAgICAgIGFzc2VydEVxdWFscygiZm9vIiwgKChDaGVja2VkRXhjcGV0aW9uMkFyZ3MpbykuZ2V0TWVzc2FnZSgpKTsNCi0gICAgICAgIGFzc2VydEVxdWFscygiYmxhIiwgKChDaGVja2VkRXhjcGV0aW9uMkFyZ3MpbykuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOw0KLSAgICB9DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RPYmplY3RDaGVja2VkQ2hhaW5lZCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiB7DQotICAgICAgICBzZW5kSk1TT2JqZWN0UmVxdWVzdCgidGhyb3dDaGVja2VkQ2hhaW5lZCIpOw0KLSAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZUpNU1Jlc3BvbnNlKCk7DQotICAgICAgICBPYmplY3QgbyA9ICgoT2JqZWN0TWVzc2FnZSltKS5nZXRPYmplY3QoKTsNCi0gICAgICAgIGFzc2VydFRydWUobyBpbnN0YW5jZW9mIENoZWNrZWRFeGNwZXRpb25DaGFpbmVkKTsNCi0gICAgICAgIGFzc2VydEVxdWFscygiYmxhIiwgKChDaGVja2VkRXhjcGV0aW9uQ2hhaW5lZClvKS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7DQotICAgIH0NCi0NCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdE9iamVjdFVuQ2hlY2tlZCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiB7DQotICAgICAgICBzZW5kSk1TT2JqZWN0UmVxdWVzdCgidGhyb3dVbkNoZWNrZWQiKTsNCi0gICAgICAgIE1lc3NhZ2UgbSA9IHJlY2VpdmVKTVNSZXNwb25zZSgpOw0KLSAgICAgICAgT2JqZWN0IG8gPSAoKE9iamVjdE1lc3NhZ2UpbSkuZ2V0T2JqZWN0KCk7DQotICAgICAgICBhc3NlcnRUcnVlKG8gaW5zdGFuY2VvZiBSdW50aW1lRXhjZXB0aW9uKTsNCi0gICAgICAgIGFzc2VydFRydWUoImphdmEubGFuZy5SdW50aW1lRXhjZXB0aW9uIi5lcXVhbHMoby5nZXRDbGFzcygpLmdldE5hbWUoKSkpOw0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJibGEiLCAoKFJ1bnRpbWVFeGNlcHRpb24pbykuZ2V0TWVzc2FnZSgpKTsNCi0gICAgfQ0KLQ0KLSAgICBAQWZ0ZXINCi0gICAgcHVibGljIHZvaWQgZW5kKCkgdGhyb3dzIEpNU0V4Y2VwdGlvbiB7DQotICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7DQotICAgICAgICAgICAgbm9kZS5zdG9wKCk7DQotICAgICAgICB9DQotICAgICAgICBpZiAoY29ubmVjdGlvbiAhPSBudWxsKSB7DQotICAgICAgICAgICAgY29ubmVjdGlvbi5jbG9zZSgpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIHByaXZhdGUgdm9pZCBzZW5kSk1TVGV4dFJlcXVlc3QoU3RyaW5nIG9wZXJhdGlvbk5hbWUpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiB7DQotICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KG5ldyBQcm9wZXJ0aWVzKCkpOw0KLSAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnkgY2YgPSAoQ29ubmVjdGlvbkZhY3RvcnkpY29udGV4dC5sb29rdXAoIkNvbm5lY3Rpb25GYWN0b3J5Iik7DQotICAgICAgICBjb25uZWN0aW9uID0gY2YuY3JlYXRlQ29ubmVjdGlvbigpOw0KLSAgICAgICAgY29ubmVjdGlvbi5zdGFydCgpOw0KLQ0KLSAgICAgICAgc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsNCi0gICAgICAgIERlc3RpbmF0aW9uIHRvRGVzdCA9IChEZXN0aW5hdGlvbiljb250ZXh0Lmxvb2t1cCgiVGV4dEV4Y2VwdGlvblNlcnZpY2UiKTsNCi0NCi0gICAgICAgIFRleHRNZXNzYWdlIG0gPSBzZXNzaW9uLmNyZWF0ZVRleHRNZXNzYWdlKCk7DQotICAgICAgICBtLnNldFN0cmluZ1Byb3BlcnR5KCJzY2FPcGVyYXRpb25OYW1lIiwgb3BlcmF0aW9uTmFtZSk7DQotICAgICAgICBtLnNldEpNU1JlcGx5VG8oKERlc3RpbmF0aW9uKWNvbnRleHQubG9va3VwKCJSZXNwb25zZVF1ZXVlIikpOw0KLSAgICAgICAgbS5zZXRUZXh0KCI8X25zXzoiICsgb3BlcmF0aW9uTmFtZSArICIgeG1sbnM6X25zXz1cImh0dHA6Ly9qbXMuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnL1wiIC8+Iik7DQotDQotICAgICAgICBNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIgPSBzZXNzaW9uLmNyZWF0ZVByb2R1Y2VyKHRvRGVzdCk7DQotICAgICAgICBwcm9kdWNlci5zZW5kKG0pOw0KLSAgICB9DQotDQotICAgIHByaXZhdGUgdm9pZCBzZW5kSk1TT2JqZWN0UmVxdWVzdChTdHJpbmcgb3BlcmF0aW9uTmFtZSkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSk1TRXhjZXB0aW9uIHsNCi0gICAgICAgIGNvbnRleHQgPSBuZXcgSW5pdGlhbENvbnRleHQobmV3IFByb3BlcnRpZXMoKSk7DQotICAgICAgICBDb25uZWN0aW9uRmFjdG9yeSBjZiA9IChDb25uZWN0aW9uRmFjdG9yeSljb250ZXh0Lmxvb2t1cCgiQ29ubmVjdGlvbkZhY3RvcnkiKTsNCi0gICAgICAgIGNvbm5lY3Rpb24gPSBjZi5jcmVhdGVDb25uZWN0aW9uKCk7DQotICAgICAgICBjb25uZWN0aW9uLnN0YXJ0KCk7DQotDQotICAgICAgICBzZXNzaW9uID0gY29ubmVjdGlvbi5jcmVhdGVTZXNzaW9uKGZhbHNlLCBTZXNzaW9uLkFVVE9fQUNLTk9XTEVER0UpOw0KLSAgICAgICAgRGVzdGluYXRpb24gdG9EZXN0ID0gKERlc3RpbmF0aW9uKWNvbnRleHQubG9va3VwKCJPYmplY3RFeGNlcHRpb25TZXJ2aWNlIik7DQotDQotICAgICAgICBPYmplY3RNZXNzYWdlIG0gPSBzZXNzaW9uLmNyZWF0ZU9iamVjdE1lc3NhZ2UoKTsNCi0gICAgICAgIG0uc2V0U3RyaW5nUHJvcGVydHkoInNjYU9wZXJhdGlvbk5hbWUiLCBvcGVyYXRpb25OYW1lKTsNCi0gICAgICAgIG0uc2V0Sk1TUmVwbHlUbygoRGVzdGluYXRpb24pY29udGV4dC5sb29rdXAoIlJlc3BvbnNlUXVldWUiKSk7DQotICAgICAgICBtLnNldE9iamVjdChuZXcgT2JqZWN0WzBdKTsNCi0NCi0gICAgICAgIE1lc3NhZ2VQcm9kdWNlciBwcm9kdWNlciA9IHNlc3Npb24uY3JlYXRlUHJvZHVjZXIodG9EZXN0KTsNCi0gICAgICAgIHByb2R1Y2VyLnNlbmQobSk7DQotICAgIH0NCi0NCi0gICAgcHJpdmF0ZSBNZXNzYWdlIHJlY2VpdmVKTVNSZXNwb25zZSgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiB7DQotICAgICAgICBEZXN0aW5hdGlvbiByZXBseURlc3QgPSAoRGVzdGluYXRpb24pY29udGV4dC5sb29rdXAoIlJlc3BvbnNlUXVldWUiKTsNCi0gICAgICAgIE1lc3NhZ2VDb25zdW1lciBjb25zdW1lciA9IHNlc3Npb24uY3JlYXRlQ29uc3VtZXIocmVwbHlEZXN0KTsNCi0gICAgICAgIE1lc3NhZ2UgbSA9IGNvbnN1bWVyLnJlY2VpdmUoNTAwMCk7DQotICAgICAgICBpZiAobSA9PSBudWxsKSB7DQotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIk5vIHJlcGx5IG1lc3NhZ2UgcmVjZWl2ZWQiKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBtOw0KLSAgICB9DQotfQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9wb20ueG1sIGIvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYzlkNDguLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLWV4Y2VwdGlvbnMxPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIHdpdGggRXhjZXB0aW9uczE8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgDQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL3Jlc291cmNlcy9leGNlcHRpb25zL2NsaWVudC5jb21wb3NpdGUgYi9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vcmVzb3VyY2VzL2V4Y2VwdGlvbnMvY2xpZW50LmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyZDdkNi4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vcmVzb3VyY2VzL2V4Y2VwdGlvbnMvY2xpZW50LmNvbXBvc2l0ZQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotIC0tPg0KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KLSAgICAgICAgICAgbmFtZT0iRXhjZXB0aW9uQ2xpZW50Q29tcG9zaXRlIj4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJFeGNlcHRpb25TZXJ2aWNlQ2xpZW50Ij4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkV4Y2VwdGlvblNlcnZpY2VDbGllbnQiLz4NCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZSI+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOkV4Y2VwdGlvblNlcnZpY2UiIC8+DQotICAgICAgICA8L3JlZmVyZW5jZT4NCi0gICAgPC9jb21wb25lbnQ+DQotDQotPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ2YWNjMC4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSMjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSMjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSMjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0jIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSMjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotIyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0jIyANCi0jIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0jIyANCi0jIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotIyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0jIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0jIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotIyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotIyBTVEFSVCBTTklQUEVUOiBqbmRpDQotDQotamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsID0gb3JnLmFwYWNoZS5hY3RpdmVtcS5qbmRpLkFjdGl2ZU1RSW5pdGlhbENvbnRleHRGYWN0b3J5DQotDQotIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgY29ubmVjdG9yDQotamF2YS5uYW1pbmcucHJvdmlkZXIudXJsID0gdm06Ly9sb2NhbGhvc3Q/YnJva2VyLnBlcnNpc3RlbnQ9ZmFsc2UNCi0NCi0jIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEpOREkgbmFtZSB0aGUgY29ubmVjdGlvbiBmYWN0b3J5DQotIyBzaG91bGQgYXBwZWFyIGFzLiANCi0jY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IGNvbm5lY3Rpb25GYWN0b3J5LCBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LCB0b3BpY0Nvbm5lY3Rpb25GYWN0cnkNCi1jb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gQ29ubmVjdGlvbkZhY3RvcnkNCi0NCi0jIHJlZ2lzdGVyIHNvbWUgcXVldWVzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCi0jIHF1ZXVlLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KLXF1ZXVlLlJlcXVlc3RRdWV1ZSA9IFJlcXVlc3RRdWV1ZQ0KLXF1ZXVlLlJlc3BvbnNlUXVldWUgPSBSZXNwb25zZVF1ZXVlDQotDQotIyByZWdpc3RlciBzb21lIHRvcGljcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQotIyB0b3BpYy5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCi0jdG9waWMuTXlUb3BpYyA9IGV4YW1wbGUuTXlUb3BpYw0KLQ0KLSMgRU5EIFNOSVBQRVQ6IGpuZGkNCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvbnNUZXN0Q2FzZS5qYXZhIGIvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9FeGNlcHRpb25zVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ4OTdkOC4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvbnNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXM7DQotDQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCi1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOw0KLWltcG9ydCBvcmcuanVuaXQuQmVmb3JlOw0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsNCi0NCi0vKioNCi0gKiBUaGlzIHNob3dzIGhvdyB0byB0ZXN0IHRoZSBKTVMgYmluZGluZyB1c2luZyBhIHNpbXBsZSBIZWxsb1dvcmxkIGFwcGxpY2F0aW9uLg0KLSAqLw0KLXB1YmxpYyBjbGFzcyBFeGNlcHRpb25zVGVzdENhc2Ugew0KLQ0KLSAgICBwcml2YXRlIHN0YXRpYyBOb2RlIG5vZGU7DQotDQotICAgIEBCZWZvcmUNCi0gICAgcHVibGljIHZvaWQgaW5pdCgpIHsNCi0gICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoKS5zdGFydCgpOw0KLSAgICB9DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RDaGVja2VkKCkgew0KLSAgICAgICAgRXhjZXB0aW9uU2VydmljZSBzZXJ2aWNlID0gbm9kZS5nZXRTZXJ2aWNlKEV4Y2VwdGlvblNlcnZpY2UuY2xhc3MsICJFeGNlcHRpb25TZXJ2aWNlQ2xpZW50Iik7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIHNlcnZpY2UudGhyb3dDaGVja2VkKCk7DQotICAgICAgICAgICAgZmFpbCgpOw0KLSAgICAgICAgfSBjYXRjaCAoQ2hlY2tlZEV4Y3BldGlvbiBlKSB7DQotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb28iLCBlLmdldE1lc3NhZ2UoKSk7DQotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgew0KLSAgICAgICAgICAgIGZhaWwoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tlZE5vQXJncygpIHsNCi0gICAgICAgIEV4Y2VwdGlvblNlcnZpY2Ugc2VydmljZSA9IG5vZGUuZ2V0U2VydmljZShFeGNlcHRpb25TZXJ2aWNlLmNsYXNzLCAiRXhjZXB0aW9uU2VydmljZUNsaWVudCIpOw0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBzZXJ2aWNlLnRocm93Q2hlY2tlZE5vQXJncygpOw0KLSAgICAgICAgICAgIGZhaWwoKTsNCi0gICAgICAgIH0gY2F0Y2ggKENoZWNrZWRFeGNwZXRpb25Ob0FyZ3MgZSkgew0KLSAgICAgICAgICAgIC8vIG9rDQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdENoZWNrZWQyQXJncygpIHsNCi0gICAgICAgIEV4Y2VwdGlvblNlcnZpY2Ugc2VydmljZSA9IG5vZGUuZ2V0U2VydmljZShFeGNlcHRpb25TZXJ2aWNlLmNsYXNzLCAiRXhjZXB0aW9uU2VydmljZUNsaWVudCIpOw0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBzZXJ2aWNlLnRocm93Q2hlY2tlZDJBcmdzKCk7DQotICAgICAgICAgICAgZmFpbCgpOw0KLSAgICAgICAgfSBjYXRjaCAoQ2hlY2tlZEV4Y3BldGlvbjJBcmdzIGUpIHsNCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImZvbyIsIGUuZ2V0TWVzc2FnZSgpKTsNCi0vLyBGSVhNRTogVFVTQ0FOWS0yODQ4OiBsb3N0IHRoZSBjYXVzZSEgICAgICAgICAgICANCi0vLyAgICAgICAgICAgIGFzc2VydE5vdE51bGwoZS5nZXRDYXVzZSgpKTsNCi0vLyAgICAgICAgICAgIGFzc2VydEVxdWFscygiYmxhIiwgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdENoZWNrZWRDaGFpbmVkKCkgew0KLSAgICAgICAgRXhjZXB0aW9uU2VydmljZSBzZXJ2aWNlID0gbm9kZS5nZXRTZXJ2aWNlKEV4Y2VwdGlvblNlcnZpY2UuY2xhc3MsICJFeGNlcHRpb25TZXJ2aWNlQ2xpZW50Iik7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIHNlcnZpY2UudGhyb3dDaGVja2VkQ2hhaW5lZCgpOw0KLSAgICAgICAgICAgIGZhaWwoKTsNCi0gICAgICAgIH0gY2F0Y2ggKENoZWNrZWRFeGNwZXRpb25DaGFpbmVkIGUpIHsNCi0gICAgICAgICAvLyBGSVhNRTogVFVTQ0FOWS0yODQ4OiBsb3N0IHRoZSBjYXVzZSEgICAgICAgICAgICANCi0vLyAgICAgICAgICAgIGFzc2VydE5vdE51bGwoZS5nZXRDYXVzZSgpKTsNCi0vLyAgICAgICAgICAgIGFzc2VydEVxdWFscygiYmxhIiwgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdFVuQ2hlY2tlZCgpIHsNCi0gICAgICAgIEV4Y2VwdGlvblNlcnZpY2Ugc2VydmljZSA9IG5vZGUuZ2V0U2VydmljZShFeGNlcHRpb25TZXJ2aWNlLmNsYXNzLCAiRXhjZXB0aW9uU2VydmljZUNsaWVudCIpOw0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBzZXJ2aWNlLnRocm93VW5DaGVja2VkKCk7DQotICAgICAgICAgICAgZmFpbCgpOw0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBhc3NlcnRFcXVhbHMoImJsYSIsIGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIEBBZnRlcg0KLSAgICBwdWJsaWMgdm9pZCBlbmQoKSB7DQotICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7DQotICAgICAgICAgICAgbm9kZS5zdG9wKCk7DQotICAgICAgICB9DQotICAgIH0NCi19DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3BvbS54bWwgYi9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJmOWMxNS4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZXh0ZXJuYWwtYnJva2VyPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIHdpdGggRXh0ZXJuYWwgSk1TIEJyb2tlcjwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICANCi0gICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3BvbS54bWwgYi9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NGVkYmQuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1mb3JtYXQtam1zYnl0ZXM8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTWVzc2FnZSBGb3JtYXQgam1zYnl0ZXM8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+DQotICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgIA0KLSAgICAgICAgICAgICAgICANCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvcG9tLnhtbCBiL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ4MmVlNC4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLWZvcm1hdC1qbXNieXRlc3htbDwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBNZXNzYWdlIEZvcm1hdCBqbXNieXRlc3htbDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgDQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3BvbS54bWwgYi9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGEzYzllMC4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZm9ybWF0LWptc2RlZmF1bHQ8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTWVzc2FnZSBGb3JtYXQgam1zZGVmYXVsdDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgDQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL3Jlc291cmNlcy9qbXNkZWZhdWx0L2hlbGxvd29ybGQuY29tcG9zaXRlIGIvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL3Jlc291cmNlcy9qbXNkZWZhdWx0L2hlbGxvd29ybGQuY29tcG9zaXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmZhOWFiLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zZGVmYXVsdC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCINCi0gICAgeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIg0KLSAgICB4bWxuczpodz0iaHR0cDovL2hlbGxvd29ybGQiDQotICAgIG5hbWU9ImhlbGxvd29ybGQiPg0KLQ0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRSZWZlcmVuY2VDb21wb25lbnQiPg0KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuZm9ybWF0Lmptc2RlZmF1bHQuaGVsbG93b3JsZC5IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbCIgLz4NCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iaGVsbG9Xb3JsZFNlcnZpY2UxIiA+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zPg0KLSAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlMSIvPg0KLSAgICAgICAgICAgIDwvYmluZGluZy5qbXM+DQotICAgICAgICA8L3JlZmVyZW5jZT4gIA0KLSAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJoZWxsb1dvcmxkU2VydmljZTIiID4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXM+DQotICAgICAgICAgICAgICAgIDx0dXNjYW55OndpcmVGb3JtYXQuam1zZGVmYXVsdC8+DQotICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UyIi8+DQotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPg0KLSAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJoZWxsb1dvcmxkU2VydmljZTMiID4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXM+DQotICAgICAgICAgICAgICAgIDx0dXNjYW55OndpcmVGb3JtYXQuam1zZGVmYXVsdC8+DQotICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UzIi8+DQotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPiANCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iaGVsbG9Xb3JsZFNlcnZpY2U0IiA+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zPg0KLSAgICAgICAgICAgICAgICA8dHVzY2FueTp3aXJlRm9ybWF0Lmptc2RlZmF1bHQgc2VuZEZvcm1hdD0idGV4dCIvPg0KLSAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlNCIvPg0KLSAgICAgICAgICAgIDwvYmluZGluZy5qbXM+DQotICAgICAgICA8L3JlZmVyZW5jZT4gDQotICAgIDwvY29tcG9uZW50Pg0KLSAgICANCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkU2VydmljZUNvbXBvbmVudDEiPg0KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuZm9ybWF0Lmptc2RlZmF1bHQuaGVsbG93b3JsZC5IZWxsb1dvcmxkU2VydmljZUltcGwiIC8+DQotICAgICAgICA8c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkU2VydmljZSI+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zPg0KLSAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlMSIvPg0KLSAgICAgICAgICAgIDwvYmluZGluZy5qbXM+DQotICAgICAgICA8L3NlcnZpY2U+DQotICAgIDwvY29tcG9uZW50PiANCi0gICAgDQotICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2VDb21wb25lbnQyIj4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdC5qbXNkZWZhdWx0LmhlbGxvd29ybGQuSGVsbG9Xb3JsZFNlcnZpY2VJbXBsIiAvPg0KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiPg0KLSAgICAgICAgICAgIDxpbnRlcmZhY2UuamF2YSBpbnRlcmZhY2U9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuZm9ybWF0Lmptc2RlZmF1bHQuaGVsbG93b3JsZC5IZWxsb1dvcmxkU2VydmljZSIgLz4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXM+DQotICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UyIi8+DQotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvc2VydmljZT4NCi0gICAgPC9jb21wb25lbnQ+ICAgIA0KLSAgICAgICAgDQotICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2VDb21wb25lbnQzIj4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdC5qbXNkZWZhdWx0LmhlbGxvd29ybGQuSGVsbG9Xb3JsZFNlcnZpY2VJbXBsIiAvPg0KLQkgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiPg0KLQkgICAgICAgIDwhLS1pbnRlcmZhY2Uud3NkbCBpbnRlcmZhY2U9Imh0dHA6Ly9oZWxsb3dvcmxkL3RleHR4bWwjd3NkbC5pbnRlcmZhY2UoSGVsbG9Xb3JsZCkiIC8tLT4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXM+DQotICAgICAgICAgICAgICAgIDx0dXNjYW55OndpcmVGb3JtYXQuam1zZGVmYXVsdCAvPg0KLSAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlMyIvPg0KLSAgICAgICAgICAgIDwvYmluZGluZy5qbXM+DQotCSAgICA8L3NlcnZpY2U+DQotICAgIDwvY29tcG9uZW50Pg0KLSAgICANCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkU2VydmljZUNvbXBvbmVudDQiPg0KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuZm9ybWF0Lmptc2RlZmF1bHQuaGVsbG93b3JsZC5IZWxsb1dvcmxkU2VydmljZUltcGwiIC8+DQotICAgICAgICA8c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkU2VydmljZSI+DQotICAgICAgICAgICAgPCEtLWludGVyZmFjZS53c2RsIGludGVyZmFjZT0iaHR0cDovL2hlbGxvd29ybGQvdGV4dHhtbCN3c2RsLmludGVyZmFjZShIZWxsb1dvcmxkKSIgLy0tPg0KLSAgICAgICAgICAgIDxiaW5kaW5nLmptcz4NCi0gICAgICAgICAgICAgICAgPHR1c2Nhbnk6d2lyZUZvcm1hdC5qbXNkZWZhdWx0IC8+DQotICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2U0Ii8+DQotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvc2VydmljZT4NCi0gICAgPC9jb21wb25lbnQ+ICAgIA0KLSAgICANCi08L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2UvcG9tLnhtbCBiL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTM0OGExLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1mb3JtYXQtam1zbWVzc2FnZTwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBNZXNzYWdlIEZvcm1hdCBqbXNtZXNzYWdlPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICANCi0gICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9wb20ueG1sIGIvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3QvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY0YWRlYy4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1mb3JtYXQtam1zb2JqZWN0PC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIE1lc3NhZ2UgRm9ybWF0IGptc29iamVjdDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgDQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDNkMmFhLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdC5qbXNvYmplY3QuaGVsbG93b3JsZDsNCi0NCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7DQotDQotDQotcHVibGljIGNsYXNzIEhlbGxvV29ybGRSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgSGVsbG9Xb3JsZFJlZmVyZW5jZSB7DQotICAgIA0KLSAgICBAUmVmZXJlbmNlDQotICAgIHByb3RlY3RlZCBIZWxsb1dvcmxkU2VydmljZSBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGU7DQotICAgIA0KLSAgICBAUmVmZXJlbmNlDQotICAgIHByb3RlY3RlZCBIZWxsb1dvcmxkU2VydmljZSBoZWxsb1dvcmxkU2VydmljZURvbnRXcmFwU2luZ2xlOw0KLSAgICANCi0gICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZ3NXcmFwU2luZ2xlKFN0cmluZyBmaXJzdE5hbWUsIFN0cmluZyBsYXN0TmFtZSl7IA0KLSAgICAJUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24oKTsNCi0gICAgCXBlcnNvbi5zZXRGaXJzdE5hbWUoZmlyc3ROYW1lKTsNCi0gICAgCXBlcnNvbi5zZXRMYXN0TmFtZShsYXN0TmFtZSk7DQotICAgIAkNCi0gICAgCVN0cmluZyByZXR1cm5TdHJpbmcgPSAiIjsNCi0gICAgCQ0KLSAgICAgICAgUGVyc29uIHJldHVyblBlcnNvbiA9ICBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGUuZ2V0UGVyc29uR3JlZXRpbmdzKHBlcnNvbik7DQotICAgICAgICByZXR1cm5TdHJpbmcgPSByZXR1cm5QZXJzb24uZ2V0Rmlyc3ROYW1lKCkgKyAiICIgKyByZXR1cm5QZXJzb24uZ2V0TGFzdE5hbWUoKTsNCi0gICAgICAgIA0KLSAgICAgICAgUGVyc29uIHJldHVybk51bGxQZXJzb24gPSBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGUuZ2V0TnVsbFJldHVybkdyZWV0aW5ncyhwZXJzb24pOyANCi0gICAgICAgIA0KLSAgICAgICAgaWYgKHJldHVybk51bGxQZXJzb24gPT0gbnVsbCl7DQotICAgICAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgSGVsbG8yIG51bGwiOw0KLSAgICAgICAgfQ0KLSAgICAgICAgDQotICAgICAgICBTdHJpbmcgcmV0dXJuR3JlZXRpbmcgPSBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGUuZ2V0QXJyYXlHcmVldGluZyhuZXcgU3RyaW5nW117Zmlyc3ROYW1lLCBsYXN0TmFtZX0pOw0KLSAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOw0KLSAgICAgICAgDQotICAgICAgICByZXR1cm5HcmVldGluZyA9IGhlbGxvV29ybGRTZXJ2aWNlV3JhcFNpbmdsZS5nZXRNdWx0aUFycmF5R3JlZXRpbmdzKG5ldyBTdHJpbmdbXXtmaXJzdE5hbWUsIGZpcnN0TmFtZX0sbmV3IFN0cmluZ1tde2xhc3ROYW1lLCBsYXN0TmFtZX0pOw0KLSAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOw0KLSAgICAgICAgDQotICAgICAgICByZXR1cm5HcmVldGluZyA9IGhlbGxvV29ybGRTZXJ2aWNlV3JhcFNpbmdsZS5nZXRNdWx0aUdyZWV0aW5ncyhmaXJzdE5hbWUsIGxhc3ROYW1lKTsNCi0gICAgICAgIHJldHVyblN0cmluZyArPSAiICIgKyByZXR1cm5HcmVldGluZzsgICAgICAgIA0KLQ0KLSAgICAgICAgcmV0dXJuR3JlZXRpbmcgPSBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGUuZ2V0T2JqZWN0R3JlZXRpbmcocGVyc29uKTsNCi0gICAgICAgIHJldHVyblN0cmluZyArPSAiICIgKyByZXR1cm5HcmVldGluZzsgDQotICAgICAgICANCi0gICAgICAgIHJldHVybkdyZWV0aW5nID0gaGVsbG9Xb3JsZFNlcnZpY2VXcmFwU2luZ2xlLmdldE9iamVjdEFycmF5R3JlZXRpbmcobmV3IE9iamVjdFtde3BlcnNvbn0pOw0KLSAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOyAgICAgIA0KLSAgICAgICAgDQotICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nOw0KLSAgICB9ICANCi0gICAgDQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JlZXRpbmdzRG9udFdyYXBTaW5nbGUoU3RyaW5nIGZpcnN0TmFtZSwgU3RyaW5nIGxhc3ROYW1lKXsgDQotICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbigpOw0KLSAgICAgICAgcGVyc29uLnNldEZpcnN0TmFtZShmaXJzdE5hbWUpOw0KLSAgICAgICAgcGVyc29uLnNldExhc3ROYW1lKGxhc3ROYW1lKTsNCi0gICAgICAgIA0KLSAgICAgICAgU3RyaW5nIHJldHVyblN0cmluZyA9ICIiOw0KLSAgICAgICAgDQotICAgICAgICBQZXJzb24gcmV0dXJuUGVyc29uID0gIGhlbGxvV29ybGRTZXJ2aWNlRG9udFdyYXBTaW5nbGUuZ2V0UGVyc29uR3JlZXRpbmdzKHBlcnNvbik7DQotICAgICAgICByZXR1cm5TdHJpbmcgPSByZXR1cm5QZXJzb24uZ2V0Rmlyc3ROYW1lKCkgKyAiICIgKyByZXR1cm5QZXJzb24uZ2V0TGFzdE5hbWUoKTsNCi0gICAgICAgIA0KLSAgICAgICAgUGVyc29uIHJldHVybk51bGxQZXJzb24gPSBoZWxsb1dvcmxkU2VydmljZURvbnRXcmFwU2luZ2xlLmdldE51bGxSZXR1cm5HcmVldGluZ3MocGVyc29uKTsgDQotICAgICAgICANCi0gICAgICAgIGlmIChyZXR1cm5OdWxsUGVyc29uID09IG51bGwpew0KLSAgICAgICAgICAgIHJldHVyblN0cmluZyArPSAiIEhlbGxvMiBudWxsIjsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgU3RyaW5nIHJldHVybkdyZWV0aW5nID0gaGVsbG9Xb3JsZFNlcnZpY2VEb250V3JhcFNpbmdsZS5nZXRBcnJheUdyZWV0aW5nKG5ldyBTdHJpbmdbXXtmaXJzdE5hbWUsIGxhc3ROYW1lfSk7DQotICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiAiICsgcmV0dXJuR3JlZXRpbmc7DQotICAgICAgICANCi0gICAgICAgIHJldHVybkdyZWV0aW5nID0gaGVsbG9Xb3JsZFNlcnZpY2VEb250V3JhcFNpbmdsZS5nZXRNdWx0aUFycmF5R3JlZXRpbmdzKG5ldyBTdHJpbmdbXXtmaXJzdE5hbWUsIGZpcnN0TmFtZX0sbmV3IFN0cmluZ1tde2xhc3ROYW1lLCBsYXN0TmFtZX0pOw0KLSAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOw0KLSAgICAgICAgDQotICAgICAgICByZXR1cm5HcmVldGluZyA9IGhlbGxvV29ybGRTZXJ2aWNlRG9udFdyYXBTaW5nbGUuZ2V0TXVsdGlHcmVldGluZ3MoZmlyc3ROYW1lLCBsYXN0TmFtZSk7DQotICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiAiICsgcmV0dXJuR3JlZXRpbmc7ICAgICAgICANCi0NCi0gICAgICAgIHJldHVybkdyZWV0aW5nID0gaGVsbG9Xb3JsZFNlcnZpY2VEb250V3JhcFNpbmdsZS5nZXRPYmplY3RHcmVldGluZyhwZXJzb24pOw0KLSAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOyANCi0gICAgICAgIA0KLSAgICAgICAgcmV0dXJuR3JlZXRpbmcgPSBoZWxsb1dvcmxkU2VydmljZURvbnRXcmFwU2luZ2xlLmdldE9iamVjdEFycmF5R3JlZXRpbmcobmV3IE9iamVjdFtde3BlcnNvbn0pOw0KLSAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOw0KLSAgICAgICAgDQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIGhlbGxvV29ybGRTZXJ2aWNlRG9udFdyYXBTaW5nbGUudGhyb3dDaGVja2VkKHBlcnNvbik7DQotICAgICAgICB9IGNhdGNoIChDaGVja2VkRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiAiICsgZS5nZXRNZXNzYWdlKCk7DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgaGVsbG9Xb3JsZFNlcnZpY2VEb250V3JhcFNpbmdsZS50aHJvd1VuQ2hlY2tlZChwZXJzb24pOw0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiAiICsgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKTsNCi0gICAgICAgIH0gICAgICAgICAgIA0KLSAgICAgICAgDQotICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nOw0KLSAgICB9ICAgICANCi19DQotDQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3BvbS54bWwgYi9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFmYzgwNS4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZm9ybWF0LWptc3RleHQ8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTWVzc2FnZSBGb3JtYXQgam1zdGV4dDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgDQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3BvbS54bWwgYi9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYwZDJlYy4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZm9ybWF0LWptc3RleHR4bWw8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTWVzc2FnZSBGb3JtYXQgam1zdGV4dHhtbDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgDQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvcG9tLnhtbCBiL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Y2Y5OTkuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dDwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBNZXNzYWdlIEZvcm1hdCBqbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQ8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+DQotICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgIA0KLSAgICAgICAgICAgICAgICANCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TVGV4dFhNTEluSk1TT2JqZWN0T3V0VGVzdENhc2UuamF2YSBiL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TVGV4dFhNTEluSk1TT2JqZWN0T3V0VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZjM2Q3Ny4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L0Zvcm1hdEpNU1RleHRYTUxJbkpNU09iamVjdE91dFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdDsNCi0NCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOw0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdC5qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQuaGVsbG93b3JsZC5IZWxsb1dvcmxkU2VydmljZTsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5mb3JtYXQuam1zdGV4dHhtbGluam1zb2JqZWN0b3V0LmhlbGxvd29ybGQuUGVyc29uOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5Ow0KLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7DQotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7DQotaW1wb3J0IG9yZy5qdW5pdC5UZXN0Ow0KLQ0KLQ0KLS8qKg0KLSAqIFRoaXMgc2hvd3MgaG93IHRvIHRlc3QgdGhlIEpNUyBiaW5kaW5nIHVzaW5nIGEgc2ltcGxlIEhlbGxvV29ybGQgYXBwbGljYXRpb24uDQotICovDQotcHVibGljIGNsYXNzIEZvcm1hdEpNU1RleHRYTUxJbkpNU09iamVjdE91dFRlc3RDYXNlIHsNCi0NCi0gICAgcHJpdmF0ZSBzdGF0aWMgTm9kZSBub2RlOw0KLQ0KLSAgICBAQmVmb3JlDQotICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7DQotICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCkuc3RhcnQoKTsNCi0gICAgfQ0KLQ0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0SGVsbG9Xb3JsZENyZWF0ZSgpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgSGVsbG9Xb3JsZFNlcnZpY2UgaGVsbG9Xb3JsZFNlcnZpY2UgPSBub2RlLmdldFNlcnZpY2UoSGVsbG9Xb3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb1dvcmxkUmVmZXJlbmNlQ29tcG9uZW50Iik7DQotICAgICAgICANCi0gICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gRnJlZCBCbG9nZ3MiLCBoZWxsb1dvcmxkU2VydmljZS5nZXRHcmVldGluZ3MoIkZyZWQgQmxvZ2dzIikpOw0KLSAgICAgICAgDQotICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbigpOw0KLSAgICAgICAgcGVyc29uLnNldEZpcnN0TmFtZSgiRnJlZCIpOw0KLSAgICAgICAgcGVyc29uLnNldExhc3ROYW1lKCJCbG9nZ3MiKTsNCi0gICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gRnJlZCBCbG9nZ3MiLCBoZWxsb1dvcmxkU2VydmljZS5nZXRQZXJzb25HcmVldGluZ3MocGVyc29uKSk7DQotICAgIH0NCi0NCi0gICAgQEFmdGVyDQotICAgIHB1YmxpYyB2b2lkIGVuZCgpIHsNCi0gICAgICAgIGlmIChub2RlICE9IG51bGwpIHsNCi0gICAgICAgICAgICBub2RlLnN0b3AoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLX0NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvcG9tLnhtbCBiL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTZjODQ0Li4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1ub24tc2NhLWNsaWVudC1icm9rZXI8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgd2l0aCBOb24gU0NBIENsaWVudDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICANCi0gICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDZhY2MwLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotIyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQotIyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQotIyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KLSMjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQotIyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCi0jIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMjIA0KLSMjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMjIA0KLSMjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCi0jIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KLSMjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KLSMjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCi0jIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0NCi0jIFNUQVJUIFNOSVBQRVQ6IGpuZGkNCi0NCi1qYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwgPSBvcmcuYXBhY2hlLmFjdGl2ZW1xLmpuZGkuQWN0aXZlTVFJbml0aWFsQ29udGV4dEZhY3RvcnkNCi0NCi0jIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBjb25uZWN0b3INCi1qYXZhLm5hbWluZy5wcm92aWRlci51cmwgPSB2bTovL2xvY2FsaG9zdD9icm9rZXIucGVyc2lzdGVudD1mYWxzZQ0KLQ0KLSMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgSk5ESSBuYW1lIHRoZSBjb25uZWN0aW9uIGZhY3RvcnkNCi0jIHNob3VsZCBhcHBlYXIgYXMuIA0KLSNjb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gY29ubmVjdGlvbkZhY3RvcnksIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnksIHRvcGljQ29ubmVjdGlvbkZhY3RyeQ0KLWNvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBDb25uZWN0aW9uRmFjdG9yeQ0KLQ0KLSMgcmVnaXN0ZXIgc29tZSBxdWV1ZXMgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KLSMgcXVldWUuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQotcXVldWUuUmVxdWVzdFF1ZXVlID0gUmVxdWVzdFF1ZXVlDQotcXVldWUuUmVzcG9uc2VRdWV1ZSA9IFJlc3BvbnNlUXVldWUNCi0NCi0jIHJlZ2lzdGVyIHNvbWUgdG9waWNzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCi0jIHRvcGljLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KLSN0b3BpYy5NeVRvcGljID0gZXhhbXBsZS5NeVRvcGljDQotDQotIyBFTkQgU05JUFBFVDogam5kaQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvbm9uU0NBY2xpZW50L3NlcnZpY2UuY29tcG9zaXRlIGIvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9ub25TQ0FjbGllbnQvc2VydmljZS5jb21wb3NpdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2NDc0ODYuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9ub25TQ0FjbGllbnQvc2VydmljZS5jb21wb3NpdGUKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICoNCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KLSAtLT4NCi08Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQotICAgICAgICAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiDQotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCINCi0gICAgICAgICAgIG5hbWU9IlNlcnZpY2VDb21wb3NpdGUiPg0KLQ0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkRlZmF1bHRTZXJ2aWNlIj4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLk9uZVdheVNlcnZpY2VJbXBsIi8+DQotICAgICAgICA8c2VydmljZSBuYW1lPSJPbmVXYXlTZXJ2aWNlIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXMgaW5pdGlhbENvbnRleHRGYWN0b3J5PSJvcmcuYXBhY2hlLmFjdGl2ZW1xLmpuZGkuQWN0aXZlTVFJbml0aWFsQ29udGV4dEZhY3RvcnkiIGpuZGlVUkw9InRjcDovL2xvY2FsaG9zdDo2MTYyMyI+DQotICAgICAgICAgICAgICAgIDx0dXNjYW55OndpcmVGb3JtYXQuam1zVGV4dFhNTC8+DQotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvc2VydmljZT4NCi0gICAgPC9jb21wb25lbnQ+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iVGV4dFNlcnZpY2UiPg0KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuT25lV2F5U2VydmljZUltcGwiLz4NCi0gICAgICAgIDxzZXJ2aWNlIG5hbWU9Ik9uZVdheVNlcnZpY2UiPg0KLSAgICAgICAgICAgIDxiaW5kaW5nLmptcyBpbml0aWFsQ29udGV4dEZhY3Rvcnk9Im9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeSIgam5kaVVSTD0idGNwOi8vbG9jYWxob3N0OjYxNjIzIg0KLSAgICAgICAgICAgICAgICAgICAgICAgICB1cmk9ImptczpUZXh0RGVzdCI+DQotICAgICAgICAgICAgICAgIDx0dXNjYW55OndpcmVGb3JtYXQuam1zVGV4dC8+DQotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvc2VydmljZT4NCi0gICAgPC9jb21wb25lbnQ+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iT2JqZWN0U2VydmljZSI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5PbmVXYXlPYmplY3RTZXJ2aWNlSW1wbCIvPg0KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iT25lV2F5T2JqZWN0U2VydmljZSI+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zIGluaXRpYWxDb250ZXh0RmFjdG9yeT0ib3JnLmFwYWNoZS5hY3RpdmVtcS5qbmRpLkFjdGl2ZU1RSW5pdGlhbENvbnRleHRGYWN0b3J5IiBqbmRpVVJMPSJ0Y3A6Ly9sb2NhbGhvc3Q6NjE2MjMiDQotICAgICAgICAgICAgICAgICAgICAgICAgIHVyaT0iam1zOk9iamVjdERlc3QiPg0KLSAgICAgICAgICAgICAgICA8dHVzY2FueTp3aXJlRm9ybWF0Lmptc09iamVjdCAvPiA8IS0tIHRlc3QgdGhhdCB3cmFwU2luZ2xlIGRlZmF1bHQgd29ya3MgLS0+DQotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvc2VydmljZT4NCi0gICAgPC9jb21wb25lbnQ+DQotDQotPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL25vcmVwbHl0by9wb20ueG1sIGIvaXRlc3Qvam1zL25vcmVwbHl0by9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTNlZDdiLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9ub3JlcGx5dG8vcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtbm9yZXBseXRvPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIE5vIHJlcGx5VG88L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+IA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICANCi0gICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvbnVsbHMvcG9tLnhtbCBiL2l0ZXN0L2ptcy9udWxscy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWRhYTliLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9udWxscy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1udWxsczwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBOdWxsczwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL251bGxzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2NlNDY4YS4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM4ICswLDAgQEAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSMjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSMjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSMjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0jIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSMjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotIyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0jIyANCi0jIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0jIyANCi0jIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotIyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0jIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0jIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotIyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotIyBTVEFSVCBTTklQUEVUOiBqbmRpDQotDQotamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsID0gb3JnLmFwYWNoZS5hY3RpdmVtcS5qbmRpLkFjdGl2ZU1RSW5pdGlhbENvbnRleHRGYWN0b3J5DQotDQotIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgY29ubmVjdG9yDQotamF2YS5uYW1pbmcucHJvdmlkZXIudXJsID0gdm06Ly9sb2NhbGhvc3Q/YnJva2VyLnBlcnNpc3RlbnQ9ZmFsc2UmYnJva2VyLnVzZUpteD1mYWxzZSZicm9rZXIudXNlU2h1dGRvd25Ib29rPWZhbHNlDQotDQotIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBKTkRJIG5hbWUgdGhlIGNvbm5lY3Rpb24gZmFjdG9yeQ0KLSMgc2hvdWxkIGFwcGVhciBhcy4gDQotI2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBjb25uZWN0aW9uRmFjdG9yeSwgcXVldWVDb25uZWN0aW9uRmFjdG9yeSwgdG9waWNDb25uZWN0aW9uRmFjdHJ5DQotY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IENvbm5lY3Rpb25GYWN0b3J5LCBDb25uZWN0aW9uRmFjdG9yeTINCi0NCi0jIHJlZ2lzdGVyIHNvbWUgcXVldWVzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCi0jIHF1ZXVlLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KLQ0KLSMgcmVnaXN0ZXIgc29tZSB0b3BpY3MgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KLSMgdG9waWMuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQotI3RvcGljLk15VG9waWMgPSBleGFtcGxlLk15VG9waWMNCi10b3BpYy5TZXJ2aWNlVG9waWMgPSBTZXJ2aWNlVG9waWMNCi0NCi0jIEVORCBTTklQUEVUOiBqbmRpDQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL251bGxzL3NyYy9tYWluL3Jlc291cmNlcy9udWxscy5jb21wb3NpdGUgYi9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vcmVzb3VyY2VzL251bGxzLmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmYzlmOS4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vcmVzb3VyY2VzL251bGxzLmNvbXBvc2l0ZQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotIC0tPg0KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCi0gICAgICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIgDQotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCINCi0gICAgICAgICAgIG5hbWU9Ik51bGxzIj4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJDbGllbnQxIj4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkNsaWVudEltcGwiLz4NCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZUEiPg0KLSAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOk15U2VydmljZSIgLz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJTZXJ2aWNlMSI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5TZXJ2aWNlSW1wbCIvPg0KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iTXlTZXJ2aWNlIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXMgLz4NCi0gICAgICAgIDwvc2VydmljZT4gDQotICAgIDwvY29tcG9uZW50PiAgICAgICANCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJDbGllbnQyIj4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkNsaWVudEltcGwiLz4NCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZUEiPg0KLSAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOk15U2VydmljZTIiPg0KLSAgICAgICAgICAgICAgPHR1c2Nhbnk6d2lyZUZvcm1hdC5qbXNPYmplY3QvPg0KLSAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJTZXJ2aWNlMiI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5TZXJ2aWNlSW1wbCIvPg0KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iTXlTZXJ2aWNlIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6TXlTZXJ2aWNlMiI+DQotICAgICAgICAgICAgICA8dHVzY2FueTp3aXJlRm9ybWF0Lmptc09iamVjdC8+DQotICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KLSAgICAgICAgPC9zZXJ2aWNlPiANCi0gICAgPC9jb21wb25lbnQ+ICAgICAgIA0KLQ0KLTwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9wb20ueG1sIGIvaXRlc3Qvam1zL29uZXdheS1ub2NmL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5ZjcyODQuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL29uZXdheS1ub2NmL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLW9uZXdheS1ub2NmPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIGZvciBhIG9uZXdheSBzZXJ2aWNlPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+DQotICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgIA0KLSAgICAgICAgICAgICAgICANCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9vbmV3YXkvcG9tLnhtbCBiL2l0ZXN0L2ptcy9vbmV3YXkvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE1NjUyMi4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvb25ld2F5L3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLW9uZXdheTwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyB3aXRoIE9uZXdheTwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICANCi0gICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvcG9tLnhtbCBiL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjEyZmI2Li4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1wb2xpY3ktaGVhZGVyczwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyB3aXRoIFBvbGljeSBIZWFkZXJzPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+DQotICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgIA0KLSAgICAgICAgICAgICAgICANCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNmFjYzAuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0jIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0jIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0jIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotIyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0jIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSMjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotIyMgDQotIyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotIyMgDQotIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KLSMjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQotIyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQotIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KLSMjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLSMgU1RBUlQgU05JUFBFVDogam5kaQ0KLQ0KLWphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCA9IG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeQ0KLQ0KLSMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGNvbm5lY3Rvcg0KLWphdmEubmFtaW5nLnByb3ZpZGVyLnVybCA9IHZtOi8vbG9jYWxob3N0P2Jyb2tlci5wZXJzaXN0ZW50PWZhbHNlDQotDQotIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBKTkRJIG5hbWUgdGhlIGNvbm5lY3Rpb24gZmFjdG9yeQ0KLSMgc2hvdWxkIGFwcGVhciBhcy4gDQotI2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBjb25uZWN0aW9uRmFjdG9yeSwgcXVldWVDb25uZWN0aW9uRmFjdG9yeSwgdG9waWNDb25uZWN0aW9uRmFjdHJ5DQotY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IENvbm5lY3Rpb25GYWN0b3J5DQotDQotIyByZWdpc3RlciBzb21lIHF1ZXVlcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQotIyBxdWV1ZS5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCi1xdWV1ZS5SZXF1ZXN0UXVldWUgPSBSZXF1ZXN0UXVldWUNCi1xdWV1ZS5SZXNwb25zZVF1ZXVlID0gUmVzcG9uc2VRdWV1ZQ0KLQ0KLSMgcmVnaXN0ZXIgc29tZSB0b3BpY3MgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KLSMgdG9waWMuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQotI3RvcGljLk15VG9waWMgPSBleGFtcGxlLk15VG9waWMNCi0NCi0jIEVORCBTTklQUEVUOiBqbmRpDQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9wb2xpY3lIZWFkZXJzL3BvbGljeUhlYWRlcnMuY29tcG9zaXRlIGIvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9wb2xpY3lIZWFkZXJzL3BvbGljeUhlYWRlcnMuY29tcG9zaXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmVhMDE1Li4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9yZXNvdXJjZXMvcG9saWN5SGVhZGVycy9wb2xpY3lIZWFkZXJzLmNvbXBvc2l0ZQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotIC0tPg0KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KLSAgICAgICAgICAgbmFtZT0iUHJvcGVydGllc0NsaWVudENvbXBvc2l0ZSI+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iQ2xpZW50Q29tcG9uZW50Ij4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLk1zZ0NsaWVudEltcGwiIC8+DQotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9Im15U2VydmljZSIgcmVxdWlyZXM9InByaW9yaXR5Lm1lZGl1bSI+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOlNlcnZpY2VRdWV1ZSI+DQotICAgICAgICAgICAgICAgPGhlYWRlcnMgdHlwZT0ibXlUeXBlIg0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5TW9kZT0icGVyc2lzdGVudCINCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lVG9MaXZlPSI0MzIxIgkNCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT0iNyI+DQotICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhlYWRQMSI+bXlIZWFkUDE8L3Byb3BlcnR5PiAgICANCi0gICAgICAgICAgICAgICA8L2hlYWRlcnM+DQotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJTZXJ2aWNlQ29tcG9uZW50Ij4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLk1zZ1NlcnZpY2VJbXBsIiAvPg0KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iTXNnU2VydmljZSI+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOlNlcnZpY2VRdWV1ZSIvPg0KLSAgICAgICAgPC9zZXJ2aWNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi08L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcG9tLnhtbCBiL2l0ZXN0L2ptcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGI3OGJmLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptczwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUzwvbmFtZT4NCi0gICAgDQotICA8bW9kdWxlcz4NCi0gICAgPG1vZHVsZT5hcmdzPC9tb2R1bGU+DQotICAgIDxtb2R1bGU+Y2FsbGJhY2tzPC9tb2R1bGU+DQotICAgIDxtb2R1bGU+ZGVmYXVsdHM8L21vZHVsZT4NCi0gICAgPG1vZHVsZT5EeW5hbWljUmVwbHlRPC9tb2R1bGU+DQotICAgIDxtb2R1bGU+ZXhjZXB0aW9uczwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPmV4Y2VwdGlvbnMxPC9tb2R1bGU+DQotICAgIDxtb2R1bGU+ZXh0ZXJuYWxCcm9rZXI8L21vZHVsZT4NCi0gICAgPG1vZHVsZT5mb3JtYXQtam1zYnl0ZXM8L21vZHVsZT4NCi0gICAgPG1vZHVsZT5mb3JtYXQtam1zYnl0ZXN4bWw8L21vZHVsZT4NCi0gICAgPG1vZHVsZT5mb3JtYXQtam1zZGVmYXVsdDwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPmZvcm1hdC1qbXNtZXNzYWdlPC9tb2R1bGU+DQotICAgIDxtb2R1bGU+Zm9ybWF0LWptc29iamVjdDwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPmZvcm1hdC1qbXN0ZXh0PC9tb2R1bGU+DQotICAgIDxtb2R1bGU+Zm9ybWF0LWptc3RleHR4bWw8L21vZHVsZT4NCi0gICAgPG1vZHVsZT5mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0PC9tb2R1bGU+DQotICAgIDxtb2R1bGU+bm9uLXNjYS1jbGllbnQ8L21vZHVsZT4NCi0gICAgPG1vZHVsZT5ub3JlcGx5dG88L21vZHVsZT4NCi0gICAgPG1vZHVsZT5udWxsczwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPm9uZXdheTwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPm9uZXdheS1ub2NmPC9tb2R1bGU+DQotICAgIDxtb2R1bGU+cG9saWN5LWhlYWRlcnM8L21vZHVsZT4NCi0gICAgPG1vZHVsZT5wcm9wZXJ0aWVzPC9tb2R1bGU+DQotICAgIDxtb2R1bGU+cmVzcG9uc2VjZjwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPnJwYzwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPnNlbGVjdG9yczwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPnRvcGljczwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPnR0bDwvbW9kdWxlPg0KLSAgICA8bW9kdWxlPnVyaS1ycGM8L21vZHVsZT4NCi0NCi08IS0tIHN0aWxsIHRvIGJyaW5nIHVwIGluIDIueA0KLSAgICA8bW9kdWxlPmRlZmluaXRpb25zPC9tb2R1bGU+DQotLS0+DQotDQotICA8L21vZHVsZXM+DQotDQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3BvbS54bWwgYi9pdGVzdC9qbXMvcHJvcGVydGllcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2NlNTkzLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLXByb3BlcnRpZXM8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgd2l0aCBQcm9wZXJ0aWVzPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+DQotICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgIA0KLSAgICAgICAgICAgICAgICANCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDZhY2MwLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi0jIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCi0jIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCi0jIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQotIyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCi0jIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KLSMjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotIyMgDQotIyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotIyMgDQotIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KLSMjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQotIyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQotIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KLSMjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLQ0KLSMgU1RBUlQgU05JUFBFVDogam5kaQ0KLQ0KLWphdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCA9IG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeQ0KLQ0KLSMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGNvbm5lY3Rvcg0KLWphdmEubmFtaW5nLnByb3ZpZGVyLnVybCA9IHZtOi8vbG9jYWxob3N0P2Jyb2tlci5wZXJzaXN0ZW50PWZhbHNlDQotDQotIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBKTkRJIG5hbWUgdGhlIGNvbm5lY3Rpb24gZmFjdG9yeQ0KLSMgc2hvdWxkIGFwcGVhciBhcy4gDQotI2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBjb25uZWN0aW9uRmFjdG9yeSwgcXVldWVDb25uZWN0aW9uRmFjdG9yeSwgdG9waWNDb25uZWN0aW9uRmFjdHJ5DQotY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IENvbm5lY3Rpb25GYWN0b3J5DQotDQotIyByZWdpc3RlciBzb21lIHF1ZXVlcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQotIyBxdWV1ZS5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCi1xdWV1ZS5SZXF1ZXN0UXVldWUgPSBSZXF1ZXN0UXVldWUNCi1xdWV1ZS5SZXNwb25zZVF1ZXVlID0gUmVzcG9uc2VRdWV1ZQ0KLQ0KLSMgcmVnaXN0ZXIgc29tZSB0b3BpY3MgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KLSMgdG9waWMuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQotI3RvcGljLk15VG9waWMgPSBleGFtcGxlLk15VG9waWMNCi0NCi0jIEVORCBTTklQUEVUOiBqbmRpDQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL3Byb3BlcnRpZXMvcHJvcGVydGllcy5jb21wb3NpdGUgYi9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvcHJvcGVydGllcy9wcm9wZXJ0aWVzLmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJjMjYxMy4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvcHJvcGVydGllcy9wcm9wZXJ0aWVzLmNvbXBvc2l0ZQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotIC0tPg0KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KLSAgICAgICAgICAgbmFtZT0iUHJvcGVydGllc0NsaWVudENvbXBvc2l0ZSI+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iQ2xpZW50Q29tcG9uZW50Ij4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLk1zZ0NsaWVudEltcGwiIC8+DQotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9Im15U2VydmljZSI+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOlNlcnZpY2VRdWV1ZSI+DQotICAgICAgICAgICAgICAgPGhlYWRlcnMgdHlwZT0ibXlUeXBlIg0KLSAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5TW9kZT0icGVyc2lzdGVudCINCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lVG9MaXZlPSI0MzIxIgkNCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT0iNyI+DQotICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhlYWRQMSI+bXlIZWFkUDE8L3Byb3BlcnR5PiAgICANCi0gICAgICAgICAgICAgICA8L2hlYWRlcnM+DQotICAgICAgICAgICAgICAgPG9wZXJhdGlvblByb3BlcnRpZXMgbmFtZT0ib3AyIiBuYXRpdmVPcGVyYXRpb249Im5hdGl2ZU9wMiI+DQotICAgICAgICAgICAgICAgICAgPGhlYWRlcnMgdHlwZT0ib3AyVHlwZSINCi0gICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeU1vZGU9Im5vbnBlcnNpc3RlbnQiDQotICAgICAgICAgICAgICAgICAgICAgdGltZVRvTGl2ZT0iNjAwMCINCi0gICAgICAgICAgICAgICAgICAgICBwcmlvcml0eT0iOCI+DQotICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im9wMlAyIj5mb288L3Byb3BlcnR5Pg0KLSAgICAgICAgICAgICAgICAgIDwvaGVhZGVycz4NCi0gICAgICAgICAgICAgICA8L29wZXJhdGlvblByb3BlcnRpZXM+DQotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJTZXJ2aWNlQ29tcG9uZW50Ij4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLk1zZ1NlcnZpY2VJbXBsIiAvPg0KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iTXNnU2VydmljZSI+DQotICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOlNlcnZpY2VRdWV1ZSIvPg0KLSAgICAgICAgPC9zZXJ2aWNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi08L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcmVzcG9uc2VjZi9wb20ueG1sIGIvaXRlc3Qvam1zL3Jlc3BvbnNlY2YvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTYwYzkyZS4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvcmVzcG9uc2VjZi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1yZXNwb25zZWNmPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIFJlc3BvbnNlIENvbm5lY3Rpb25GYWN0b3J5PC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgDQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3JwYy9wb20ueG1sIGIvaXRlc3Qvam1zL3JwYy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDU3OThlLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9ycGMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtcnBjPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIHdpdGggUlBDPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICA8dmVyc2lvbj4xLjE8L3ZlcnNpb24+DQotICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tam1zXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgIA0KLSAgICAgICAgICAgICAgICANCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9zZWxlY3RvcnMvcG9tLnhtbCBiL2l0ZXN0L2ptcy9zZWxlY3RvcnMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNlZTVjMS4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLXNlbGVjdG9yczwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBUZXN0cyBGb3IgU2VsZWN0b3JzPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9qbXNkZWZhdWx0L2hlbGxvd29ybGQuY29tcG9zaXRlIGIvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9yZXNvdXJjZXMvam1zZGVmYXVsdC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE4NTM0Yy4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9qbXNkZWZhdWx0L2hlbGxvd29ybGQuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCIKLSAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCi0gICAgeG1sbnM6aHc9Imh0dHA6Ly9oZWxsb3dvcmxkIgotICAgIG5hbWU9ImhlbGxvd29ybGQiPgotCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkUmVmZXJlbmNlQ29tcG9uZW50Ij4KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMub3BlcmF0aW9uc2VsZWN0b3Iuam1zZGVmYXVsdC5IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbCIgLz4KLSAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJoZWxsb1dvcmxkU2VydmljZTEiID4KLSAgICAgICAgICAgIDxiaW5kaW5nLmptcz4KLSAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlMSIvPgotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4KLSAgICAgICAgPC9yZWZlcmVuY2U+IAotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImhlbGxvV29ybGRTZXJ2aWNlMiIgPgotICAgICAgICAgICAgPGJpbmRpbmcuam1zPgotICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UyIi8+Ci0gICAgICAgICAgICAgICAgPG9wZXJhdGlvblByb3BlcnRpZXMgbmFtZT0iZ2V0R3JlZXRpbmdzT25lIiA+Ci0gICAgICAgICAgICAgICAgICA8aGVhZGVycz4KLSAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzY2FPcGVyYXRpb25OYW1lIj5nZXRHcmVldGluZ3NUaHJlZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICA8L2hlYWRlcnM+Ci0gICAgICAgICAgICAgICA8L29wZXJhdGlvblByb3BlcnRpZXM+Ci0gICAgICAgICAgICA8L2JpbmRpbmcuam1zPgotICAgICAgICA8L3JlZmVyZW5jZT4gCi0gICAgPC9jb21wb25lbnQ+Ci0gICAgCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkU2VydmljZUNvbXBvbmVudDEiPgotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5vcGVyYXRpb25zZWxlY3Rvci5qbXNkZWZhdWx0LkhlbGxvV29ybGRTZXJ2aWNlSW1wbCIgLz4KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiPgotICAgICAgICAgICAgPGJpbmRpbmcuam1zPgotICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UxIi8+Ci0gICAgICAgICAgICAgICAgPG9wZXJhdGlvblByb3BlcnRpZXMgbmFtZT0iZ2V0R3JlZXRpbmdzVGhyZWUiIG5hdGl2ZU9wZXJhdGlvbj0iZ2V0R3JlZXRpbmdzRm91ciI+Ci0gICAgICAgICAgICAgICAgICA8aGVhZGVycz4KLSAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJibGFOb3RVc2VkIj5nZXRHcmVldGluZ3NUaHJlZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICA8L2hlYWRlcnM+Ci0gICAgICAgICAgICAgICAgPC9vcGVyYXRpb25Qcm9wZXJ0aWVzPgotICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4KLSAgICAgICAgPC9zZXJ2aWNlPgotICAgIDwvY29tcG9uZW50PiAKLSAgICAKLSAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlQ29tcG9uZW50MiI+Ci0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLm9wZXJhdGlvbnNlbGVjdG9yLmptc2RlZmF1bHQuSGVsbG9Xb3JsZFNlcnZpY2VJbXBsIiAvPgotICAgICAgICA8c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkU2VydmljZSI+Ci0gICAgICAgICAgICA8YmluZGluZy5qbXM+Ci0gICAgICAgICAgICAgICAgPHR1c2Nhbnk6b3BlcmF0aW9uU2VsZWN0b3Iuam1zZGVmYXVsdC8+Ci0gICAgICAgICAgICAgICAgPGRlc3RpbmF0aW9uIGpuZGlOYW1lPSJIZWxsb1dvcmxkU2VydmljZTIiLz4KLSAgICAgICAgICAgIDwvYmluZGluZy5qbXM+Ci0gICAgICAgIDwvc2VydmljZT4KLSAgICA8L2NvbXBvbmVudD4gICAgIAotICAgIAotPC9jb21wb3NpdGU+CmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9qbXN1c2VycHJvcC9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vcmVzb3VyY2VzL2ptc3VzZXJwcm9wL2hlbGxvd29ybGQuY29tcG9zaXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yjg2NzY0Li4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vcmVzb3VyY2VzL2ptc3VzZXJwcm9wL2hlbGxvd29ybGQuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCIKLSAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCi0gICAgeG1sbnM6aHc9Imh0dHA6Ly9oZWxsb3dvcmxkIgotICAgIG5hbWU9ImhlbGxvd29ybGRVUCI+Ci0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRSZWZlcmVuY2VDb21wb25lbnQxIj4KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMub3BlcmF0aW9uc2VsZWN0b3Iuam1zdXNlcnByb3AuSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwiIC8+Ci0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iaGVsbG9Xb3JsZFNlcnZpY2UxIiA+Ci0gICAgICAgICAgICA8YmluZGluZy5qbXM+Ci0gICAgICAgICAgICAgICAgPGRlc3RpbmF0aW9uIGpuZGlOYW1lPSJIZWxsb1dvcmxkU2VydmljZTQiLz4KLSAgICAgICAgICAgICAgICA8b3BlcmF0aW9uUHJvcGVydGllcyBuYW1lPSJnZXRHcmVldGluZ3NPbmUiID4KLSAgICAgICAgICAgICAgICAgIDxoZWFkZXJzPgotICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9Im15UHJvcGVydHkiPmdldEdyZWV0aW5nc09uZTwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICA8L2hlYWRlcnM+Ci0gICAgICAgICAgICAgICAgPC9vcGVyYXRpb25Qcm9wZXJ0aWVzPgotICAgICAgICAgICAgICAgIDxvcGVyYXRpb25Qcm9wZXJ0aWVzIG5hbWU9ImdldEdyZWV0aW5nc1R3byIgPgotICAgICAgICAgICAgICAgICAgPGhlYWRlcnM+Ci0gICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibXlQcm9wZXJ0eSI+Z2V0R3JlZXRpbmdzVGhyZWU8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgPC9oZWFkZXJzPgotICAgICAgICAgICAgICAgIDwvb3BlcmF0aW9uUHJvcGVydGllcz4gICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8b3BlcmF0aW9uUHJvcGVydGllcyBuYW1lPSJnZXRHcmVldGluZ3NUaHJlZSIgPgotICAgICAgICAgICAgICAgICAgPGhlYWRlcnM+Ci0gICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibXlQcm9wZXJ0eSI+Z2V0R3JlZXRpbmdzVHdvPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgIDwvaGVhZGVycz4KLSAgICAgICAgICAgICAgICA8L29wZXJhdGlvblByb3BlcnRpZXM+Ci0gICAgICAgICAgICA8L2JpbmRpbmcuam1zPgotICAgICAgICA8L3JlZmVyZW5jZT4gCi0gICAgPC9jb21wb25lbnQ+Ci0gICAgCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkU2VydmljZUNvbXBvbmVudDMiPgotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5vcGVyYXRpb25zZWxlY3Rvci5qbXN1c2VycHJvcC5IZWxsb1dvcmxkU2VydmljZUltcGwiIC8+Ci0gICAgICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIj4KLSAgICAgICAgICAgIDxiaW5kaW5nLmptcz4KLQkJCQk8dHVzY2FueTpvcGVyYXRpb25TZWxlY3Rvci5qbXNVc2VyUHJvcCBwcm9wZXJ0eU5hbWU9Im15UHJvcGVydHkiLz4KLSAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlNCIvPgotICAgICAgICAgICAgICAgIDxvcGVyYXRpb25Qcm9wZXJ0aWVzIG5hbWU9ImdldEdyZWV0aW5nc1RocmVlIiBuYXRpdmVPcGVyYXRpb249ImdldEdyZWV0aW5nc0ZvdXIiPgotICAgICAgICAgICAgICAgICAgPGhlYWRlcnM+Ci0gICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iYmxhTm90VXNlZDIiPmdldEdyZWV0aW5nc1RocmVlPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgIDwvaGVhZGVycz4KLSAgICAgICAgICAgICAgICA8L29wZXJhdGlvblByb3BlcnRpZXM+Ci0gICAgICAgICAgICA8L2JpbmRpbmcuam1zPgotICAgICAgICA8L3NlcnZpY2U+Ci0gICAgPC9jb21wb25lbnQ+ICAgICAKLSAgICAKLTwvY29tcG9zaXRlPgpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9yZXNvdXJjZXMvc2VsZWN0b3JzL3NlbGVjdG9ycy5jb21wb3NpdGUgYi9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9zZWxlY3RvcnMvc2VsZWN0b3JzLmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxY2JlOC4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9zZWxlY3RvcnMvc2VsZWN0b3JzLmNvbXBvc2l0ZQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotIC0tPg0KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KLSAgICAgICAgICAgeG1sbnM6aXRlc3Q9Imh0dHA6Ly9qbXMiDQotICAgICAgICAgICBuYW1lPSJTZWxlY3RvcnMiPg0KLQ0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkNsaWVudDEiPg0KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuQ2xpZW50SW1wbCIvPg0KLSAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJzZXJ2aWNlQSI+DQotICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6U2VydmljZVRvcGljIiA+DQotICAgICAgICAgICAgICA8aGVhZGVycyB0eXBlPSJ0eXBlMSIgLz4NCi0gICAgICAgICAgIDwvYmluZGluZy5qbXM+DQotICAgICAgICA8L3JlZmVyZW5jZT4NCi0gICAgPC9jb21wb25lbnQ+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iQ2xpZW50MiI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5DbGllbnRJbXBsIi8+DQotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InNlcnZpY2VBIj4NCi0gICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpTZXJ2aWNlVG9waWMiID4NCi0gICAgICAgICAgICAgIDxoZWFkZXJzIHR5cGU9InR5cGUyIiAvPg0KLSAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJTZXJ2aWNlMSI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5TZWxlY3RvclNlcnZpY2VJbXBsMSIvPg0KLSAgICAgICAgPHNlcnZpY2UgbmFtZT0iU2VsZWN0b3JTZXJ2aWNlIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6U2VydmljZVRvcGljIiAvPg0KLSAgICAgICAgPC9zZXJ2aWNlPiANCi0gICAgPC9jb21wb25lbnQ+ICAgICAgIA0KLQ0KLSAgICA8Y29tcG9uZW50IG5hbWU9IlNlcnZpY2UyIj4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLlNlbGVjdG9yU2VydmljZUltcGwyIi8+DQotICAgICAgICA8c2VydmljZSBuYW1lPSJTZWxlY3RvclNlcnZpY2UiPg0KLSAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpTZXJ2aWNlVG9waWMiID4NCi0gICAgICAgICAgICAgICA8bWVzc2FnZVNlbGVjdGlvbiBzZWxlY3Rvcj0iSk1TVHlwZSA9ICd0eXBlMSciLz4NCi0gICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KLSAgICAgICAgPC9zZXJ2aWNlPiANCi0gICAgPC9jb21wb25lbnQ+ICAgICAgIA0KLQ0KLSAgICA8Y29tcG9uZW50IG5hbWU9IlNlcnZpY2UzIj4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLlNlbGVjdG9yU2VydmljZUltcGwzIi8+DQotICAgICAgICA8c2VydmljZSBuYW1lPSJTZWxlY3RvclNlcnZpY2UiPg0KLSAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpTZXJ2aWNlVG9waWMiID4NCi0gICAgICAgICAgICAgICA8bWVzc2FnZVNlbGVjdGlvbiBzZWxlY3Rvcj0iSk1TVHlwZSA9ICd0eXBlMiciLz4NCi0gICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KLSAgICAgICAgPC9zZXJ2aWNlPiANCi0gICAgPC9jb21wb25lbnQ+ICAgICAgIA0KLQ0KLTwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy90b3BpY3MvcG9tLnhtbCBiL2l0ZXN0L2ptcy90b3BpY3MvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGNhMTFmYy4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvdG9waWNzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLXRvcGljczwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBUZXN0cyBmb3IgdG9waWNzPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3R0bC9wb20ueG1sIGIvaXRlc3Qvam1zL3R0bC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA3YTM4Li4wMDAwMDAwCi0tLSBhL2l0ZXN0L2ptcy90dGwvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtdHRsPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIFRpbWUgVG8gTGl2ZTwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4yLjA8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3VyaS1ycGMvcG9tLnhtbCBiL2l0ZXN0L2ptcy91cmktcnBjL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0YWE4N2QuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL3VyaS1ycGMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtdXJpLXJwYzwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyB3aXRoIFVSSSBSUEM8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctam1zLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWptc18xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgDQotICAgICAgICAgICAgICAgIA0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL2l0ZXN0L2ptcy91cmktcnBjL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNmFjYzAuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KLSMjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KLSMjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KLSMjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCi0jIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KLSMjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQotIyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0jIyANCi0jIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0jIyANCi0jIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQotIyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCi0jIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCi0jIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQotIyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotDQotIyBTVEFSVCBTTklQUEVUOiBqbmRpDQotDQotamF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsID0gb3JnLmFwYWNoZS5hY3RpdmVtcS5qbmRpLkFjdGl2ZU1RSW5pdGlhbENvbnRleHRGYWN0b3J5DQotDQotIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgY29ubmVjdG9yDQotamF2YS5uYW1pbmcucHJvdmlkZXIudXJsID0gdm06Ly9sb2NhbGhvc3Q/YnJva2VyLnBlcnNpc3RlbnQ9ZmFsc2UNCi0NCi0jIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEpOREkgbmFtZSB0aGUgY29ubmVjdGlvbiBmYWN0b3J5DQotIyBzaG91bGQgYXBwZWFyIGFzLiANCi0jY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IGNvbm5lY3Rpb25GYWN0b3J5LCBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LCB0b3BpY0Nvbm5lY3Rpb25GYWN0cnkNCi1jb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gQ29ubmVjdGlvbkZhY3RvcnkNCi0NCi0jIHJlZ2lzdGVyIHNvbWUgcXVldWVzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCi0jIHF1ZXVlLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KLXF1ZXVlLlJlcXVlc3RRdWV1ZSA9IFJlcXVlc3RRdWV1ZQ0KLXF1ZXVlLlJlc3BvbnNlUXVldWUgPSBSZXNwb25zZVF1ZXVlDQotDQotIyByZWdpc3RlciBzb21lIHRvcGljcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQotIyB0b3BpYy5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCi0jdG9waWMuTXlUb3BpYyA9IGV4YW1wbGUuTXlUb3BpYw0KLQ0KLSMgRU5EIFNOSVBQRVQ6IGpuZGkNCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3NlcnZpY2UuY29tcG9zaXRlIGIvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS9zZXJ2aWNlLmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzMzNjRmNi4uMDAwMDAwMAotLS0gYS9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3NlcnZpY2UuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gLS0+DQotPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KLSAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiDQotICAgICAgICAgICBuYW1lPSJTaW1wbGVTZXJ2aWNlQ29tcG9zaXRlIj4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkU2VydmljZSI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5IZWxsb1dvcmxkU2VydmljZUltcGwiLz4NCi0gICAgICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXM+DQotICAgICAgICAgICAgICAgPGRlc3RpbmF0aW9uIGpuZGlOYW1lPSJEZXN0UXVldWVBIiBjcmVhdGU9ImFsd2F5cyI+IA0KLSAgICAgICAgICAgICAgIDwvZGVzdGluYXRpb24+DQotICAgICAgICAgICAgICAgPHJlc3BvbnNlPg0KLSAgICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iUmVzcFF1ZXVlQSIgY3JlYXRlPSJhbHdheXMiLz4NCi0gICAgICAgICAgICAgICA8L3Jlc3BvbnNlPg0KLSAgICAgICAgICAgIDwvYmluZGluZy5qbXM+ICANCi0gICAgICAgIDwvc2VydmljZT4gDQotICAgIDwvY29tcG9uZW50PiAgICAgICANCi0NCi08L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3VyaWNsaWVudC5jb21wb3NpdGUgYi9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3VyaWNsaWVudC5jb21wb3NpdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlNDcyODguLjAwMDAwMDAKLS0tIGEvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS91cmljbGllbnQuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gLS0+DQotPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KLSAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiDQotICAgICAgICAgICBuYW1lPSJVUklDbGllbnRDb21wb3NpdGUiPg0KLQ0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRDbGllbnQiPg0KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSGVsbG9Xb3JsZENsaWVudEltcGwiLz4NCi0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZUEiPg0KLSAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpEZXN0UXVldWVBIiAvPg0KLSAgICAgICAgPC9yZWZlcmVuY2U+DQotICAgIDwvY29tcG9uZW50Pg0KLQ0KLTwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9wb20ueG1sIGIvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMWJlYzQuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtbm9kZXMtYmluZGluZy1zY2EtaGF6ZWxjYXN0PC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgTm9kZXMgYmluZGluZy5zY2EgVXNpbmcgSGF6ZWxjYXN0IFJlZ2lzdHJ5PC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1jbGllbnQtaW1wbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZW5kcG9pbnQtaGF6ZWxjYXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1lbmRwb2ludC1oYXplbGNhc3QtY2xpZW50PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczI8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1qZXR0eTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgICAgIDxwbHVnaW5zPg0KLSAgICAgICAgICAgICAgICA8cGx1Z2luPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT4qKi8qVGVzdENhc2UuamF2YTwvaW5jbHVkZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxyZXBvcnRGb3JtYXQ+YnJpZWY8L3JlcG9ydEZvcm1hdD4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8dXNlRmlsZT50cnVlPC91c2VGaWxlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JrTW9kZT5vbmNlPC9mb3JrTW9kZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8YXJnTGluZT4tZWEgLVhteDI1Nm08L2FyZ0xpbmU+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHBhcmFsbGVsPm9mZjwvcGFyYWxsZWw+DQotICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICAgICAgIDwvcGx1Z2lucz4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3QtY2xpZW50L3BvbS54bWwgYi9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC1jbGllbnQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk4NDg0NC4uMDAwMDAwMAotLS0gYS9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC1jbGllbnQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1ub2Rlcy1vbmUtanZtLWhhemVsY2FzdC1jbGllbnQ8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBOb2RlcyBPbmUgSlZNIFVzaW5nIEhhemVsY2FzdCBhbmQgY2xpZW50PC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1ub2Rlcy1oZWxsb3dvcmxkLWlmYWNlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtY2xpZW50LWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1oYXplbGNhc3QtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLmhhemVsY2FzdDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5oYXplbGNhc3QtY2xpZW50PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuOC4zPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0gICAgPGJ1aWxkPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC9wb20ueG1sIGIvaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3QvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODMwNmE5ZS4uMDAwMDAwMAotLS0gYS9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPml0ZXN0LW5vZGVzLW9uZS1qdm0taGF6ZWxjYXN0PC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBOb2RlcyBPbmUgSlZNIFVzaW5nIEhhemVsY2FzdCBSZWdpc3RyeTwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LW5vZGVzLWhlbGxvd29ybGQtc2VydmljZS1hbmQtY2xpZW50PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1ub2Rlcy1oZWxsb3dvcmxkLWlmYWNlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWNsaWVudC1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZW5kcG9pbnQtaGF6ZWxjYXN0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1oYXplbGNhc3QtcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3BvbS54bWwgYi9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3QvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkyNWU4Yy4uMDAwMDAwMAotLS0gYS9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3QvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtbm9kZXMtdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0PC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgTm9kZXMgVHdvIE5vZGVzIFR3byBWTXMgVGVzdCB1c2luZyBIYXplbGNhc3QgcmVnaXN0cnk8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICA8IS0tZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZG9tYWluLW5vZGU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5LS0+ICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+IA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdC1jbGllbnQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1ub2Rlcy1oZWxsb3dvcmxkLWlmYWNlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXI8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWNsaWVudC1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctc2NhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXJtaS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gICANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLSAgICANCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hbnRydW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPnJ1bi1zYW1wbGVzPC9pZD4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dGVzdDwvcGhhc2U+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhc2tzIHVubGVzcz0ibWF2ZW4udGVzdC5za2lwIj4gDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS52ZXJzaW9uIiB2YWx1ZT0iJHt2ZXJzaW9ufSIgLz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJydW50aW1lX2NsYXNzcGF0aCIgcmVmaWQ9Im1hdmVuLnJ1bnRpbWUuY2xhc3NwYXRoIi8+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW50IGFudGZpbGU9Ii4vYnVpbGQueG1sIiB0YXJnZXQ9InJ1biIvPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rhc2tzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQotICAgICAgICAgICAgPC9wbHVnaW4+DQotICAgICAgICA8L3BsdWdpbnM+DQotICAgIDwvYnVpbGQ+ICAgIA0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sIGIvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL2RlZmluaXRpb25zLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5ZGViNS4uMDAwMDAwMAotLS0gYS9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQVNDSUkiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxkZWZpbml0aW9ucyB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgotICAgICAgICAgICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0gICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKLSAgICAgICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSI+Ci0KLSAgICA8cG9saWN5U2V0IG5hbWU9IkpES0xvZ2dpbmdQb2xpY3kiIAotICAgICAgICAgICAgICAgcHJvdmlkZXM9InR1c2Nhbnk6bG9nZ2luZyIgCi0gICAgICAgICAgICAgICBhcHBsaWVzVG89Ii8vYmluZGluZyB8IC8vaW1wbGVtZW50YXRpb24iPgotICAgICAgICA8dHVzY2FueTpqZGtMb2dnZXIgbmFtZT0idGVzdC5sb2dnZXIiPgotICAgICAgICAgICAgPHR1c2Nhbnk6bG9nTGV2ZWw+RklORTwvdHVzY2FueTpsb2dMZXZlbD4KLSAgICAgICAgICAgIDx0dXNjYW55OnJlc291cmNlQnVuZGxlPkxvZ2dpbmdNZXNzYWdlcy5wcm9wZXJ0aWVzPC90dXNjYW55OnJlc291cmNlQnVuZGxlPgotICAgICAgICA8L3R1c2Nhbnk6amRrTG9nZ2VyPgotCi0gICAgPC9wb2xpY3lTZXQ+Ci0gICAgCi0gICAgPHBvbGljeVNldCBuYW1lPSJKREtMb2dnaW5nSW1wbFBvbGljeSIgCi0gICAgICAgICAgICAgICBwcm92aWRlcz0idHVzY2FueTpsb2dnaW5nIiAKLSAgICAgICAgICAgICAgIGFwcGxpZXNUbz0iLy9pbXBsZW1lbnRhdGlvbi5qYXZhIgotICAgICAgICAgICAgICAgYXR0YWNoVG89Ii8vc2NhOmNvbXBvbmVudFtAbmFtZT0nQ3JlZGl0Q2FyZFBheW1lbnQnXSI+Ci0gICAgICAgIDx0dXNjYW55Ompka0xvZ2dlciBuYW1lPSJ0ZXN0LmxvZ2dlciI+Ci0gICAgICAgICAgICA8dHVzY2FueTpsb2dMZXZlbD5JTkZPPC90dXNjYW55OmxvZ0xldmVsPgotICAgICAgICAgICAgPHR1c2Nhbnk6cmVzb3VyY2VCdW5kbGU+TG9nZ2luZ01lc3NhZ2VzLnByb3BlcnRpZXM8L3R1c2Nhbnk6cmVzb3VyY2VCdW5kbGU+Ci0gICAgICAgIDwvdHVzY2FueTpqZGtMb2dnZXI+Ci0KLSAgICA8L3BvbGljeVNldD4KLSAgICAKLSAgICA8IS0tIEEgc2V0IG9mIHBvbGljeSBzZXRzIGludHJvZHVjZWQganVzdCB0byBlbnN1cmUgdGhhdCBpbnRlbnRzIGFyZSByZXNvbHZlZCAtLT4KLSAgICAKLSAgICA8cG9saWN5U2V0IG5hbWU9IlN1c3BlbmRzVHJhbnNhY3Rpb25Qb2xpY3kiIAotICAgICAgICAgICAgICAgcHJvdmlkZXM9InNjYTpzdXNwZW5kc1RyYW5zYWN0aW9uIiAKLSAgICAgICAgICAgICAgIGFwcGxpZXNUbz0iLy9iaW5kaW5nIHwgLy9pbXBsZW1lbnRhdGlvbiIKLSAgICAgICAgICAgICAgIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6c3VzcGVuZHNUcmFuc2FjdGlvbicpIi8+ICAgIAotICAgICAgICAgICAgICAgCi0gICAgPHBvbGljeVNldCBuYW1lPSJBdXRob3JpemF0aW9uRmluZUdyYWluUG9saWN5IiAKLSAgICAgICAgICAgICAgIHByb3ZpZGVzPSJzY2E6YXV0aG9yaXphdGlvbi5maW5lR3JhaW4iIAotICAgICAgICAgICAgICAgYXBwbGllc1RvPSIvL2JpbmRpbmcgfCAvL2ltcGxlbWVudGF0aW9uIiAKLSAgICAgICAgICAgICAgIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6YXV0aG9yaXphdGlvbicpIHwgSW50ZW50UmVmcygnc2NhOmF1dGhvcml6YXRpb24uZmluZUdyYWluJykiLz4gICAKLSAgICAgICAgICAgICAgIAotICAgIDxwb2xpY3lTZXQgbmFtZT0iQ29uZmlkZW50aWFsaXR5VHJhbnNwb3J0UG9saWN5IiAKLSAgICAgICAgICAgICAgIHByb3ZpZGVzPSJzY2E6Y29uZmlkZW50aWFsaXR5LnRyYW5zcG9ydCIgCi0gICAgICAgICAgICAgICBhcHBsaWVzVG89Ii8vYmluZGluZyB8IC8vaW1wbGVtZW50YXRpb24iCi0gICAgICAgICAgICAgICBhdHRhY2hUbz0iSW50ZW50UmVmcygnc2NhOmNvbmZpZGVudGlhbGl0eS50cmFuc3BvcnQnKSIvPiAgICAgICAgICAgICAgIAotCi0gICAgPHBvbGljeVNldCBuYW1lPSJDb25maWRlbnRpYWxpdHlNZXNzYWdlUG9saWN5IiAKLSAgICAgICAgICAgICAgIHByb3ZpZGVzPSJzY2E6Y29uZmlkZW50aWFsaXR5Lm1lc3NhZ2UiIAotICAgICAgICAgICAgICAgYXBwbGllc1RvPSIvL2JpbmRpbmcgfCAvL2ltcGxlbWVudGF0aW9uIgotICAgICAgICAgICAgICAgYXR0YWNoVG89IkludGVudFJlZnMoJ3NjYTpjb25maWRlbnRpYWxpdHkubWVzc2FnZScpIi8+ICAgCi0gICAgICAgICAgICAgICAKLSAgICA8cG9saWN5U2V0IG5hbWU9IkNsaWVudEF1dGhlbnRpY2F0aW9uVHJhbnNwb3J0UG9saWN5IiAKLSAgICAgICAgICAgICAgIHByb3ZpZGVzPSJzY2E6Y2xpZW50QXV0aGVudGljYXRpb24udHJhbnNwb3J0IiAKLSAgICAgICAgICAgICAgIGFwcGxpZXNUbz0iLy9iaW5kaW5nIHwgLy9pbXBsZW1lbnRhdGlvbiIKLSAgICAgICAgICAgICAgIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6Y2xpZW50QXV0aGVudGljYXRpb24udHJhbnNwb3J0JykiLz4gIAotICAgICAgICAgICAgICAgCi0gICAgPHBvbGljeVNldCBuYW1lPSJJbnRlZ3JpdHlUcmFuc3BvcnRQb2xpY3kiIAotICAgICAgICAgICAgICAgcHJvdmlkZXM9InNjYTppbnRlZ3JpdHkudHJhbnNwb3J0IiAKLSAgICAgICAgICAgICAgIGFwcGxpZXNUbz0iLy9iaW5kaW5nIHwgLy9pbXBsZW1lbnRhdGlvbiIKLSAgICAgICAgICAgICAgIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6aW50ZWdyaXR5LnRyYW5zcG9ydCcpIi8+ICAgICAgICAgICAgICAgIAotPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pdGVzdC9wb20ueG1sIGIvaXRlc3QvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzNmNWNhMy4uMDAwMDAwMAotLS0gYS9pdGVzdC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+PHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgSW50ZWdyYXRpb24gVGVzdHM8L25hbWU+Ci0gICAgCi0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICA8bW9kdWxlcz4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmJhc2U8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmJ1aWxkZXI8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmJwZWw8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNhbGxiYWNrLWFwaTwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsbGJhY2stYmFzaWM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNhbGxiYWNrLWNvbXBsZXgtdHlwZTwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsbGJhY2stbXVsdGlwbGUtd2lyZXM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNhbGxiYWNrLXNlcGFyYXRldGhyZWFkPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5jYWxsYmFjay10d28tY29tcG9zaXRlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsbGJhY2stdHdvLW5vZGVzPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5jb21wb25lbnQtdHlwZTwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uLWZvbGRlcjwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uLXppcDwvbW9kdWxlPgotPCEtLSB3aHkgY29tbWVudGVkIG91dD8gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIDxtb2R1bGU+ZGVmaW5pdGlvbnMtbXVsdGlwbGU8L21vZHVsZT4KLS0tPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+ZGF0YWJpbmRpbmdzPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5kaXN0cmlidXRpb248L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmV4Y2VwdGlvbnM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXNwcmluZzwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+aW1wb3J0LWV4cG9ydDwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+aW50ZXJmYWNlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+am1zPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5ub2RlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+bm9kZS1sYXVuY2hlci1lcXVpbm94PC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5vbmV3YXk8L21vZHVsZT4KLTwhLS0gd2h5IGNvbW1lbnRlZCBvdXQ/Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5vcGVyYXRpb24tb3ZlcmxvYWRpbmc8L21vZHVsZT4KLS0tPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+cG9saWN5PC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5wb2xpY2llczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+cG9saWN5LXRyYW5zYWN0aW9uPC9tb2R1bGU+ICAKLTwhLS0gd2FpdCB1bnRpbCBkYXRhYmluZGluZy1zZG8gaXMgaW4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPnByb3BlcnRpZXM8L21vZHVsZT4KLS0tPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+cmVjdXJzaXZlLW11bHRpLWxldmVsPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5yZWZlcmVuY2VzPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5zY2FjbGllbnQtYXBpPC9tb2R1bGU+Ci08IS0tIFRVU0NBTlktMzQyNCAtIFNDQUNsaWVudCBpbiBKU0Ugd2l0aCBPU0dpIHJ1bnRpbWUgbm90IHlldCBzdXBwb3J0ZWQKLSAgICAgICAgICAgICAgICA8bW9kdWxlPnNjYWNsaWVudC1hcGktanNlLW9zZ2k8L21vZHVsZT4KLS0tPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+c2NhY2xpZW50LWFwaS1vc2dpPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5zY2FjbGllbnQtYXBpLXJlbW90ZTwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+c2NvcGVzPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5zY2RsPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5zZXJ2aWNlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+c2VydmljZS1yZWZlcmVuY2U8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPndpcmVzPC9tb2R1bGU+ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8bW9kdWxlPndzPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT53cy1qYXh3czwvbW9kdWxlPgotICA8L21vZHVsZXM+Ci0KLSAgPCEtLSBXZSBkb24ndCB3YW50IHRvIGRlcGxveSBhbnkgb2YgdGhlIHRlc3QgbW9kdWxlcyAtLT4KLSAgPHByb3BlcnRpZXM+Ci0gICAgIDxtYXZlbi5kZXBsb3kuc2tpcD50cnVlPC9tYXZlbi5kZXBsb3kuc2tpcD4KLSAgPC9wcm9wZXJ0aWVzPgotCi0gIDxidWlsZD4KLSAgICAgPHBsdWdpbnM+Ci0gICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwbG95LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+Ci0gICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgPC9wbHVnaW4+Ci0gICAgIDwvcGx1Z2lucz4KLSAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1yZW1vdGUvcG9tLnhtbCBiL2l0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzMjA5MDMuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1yZW1vdGUvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC1zY2FjbGllbnQtYXBpLXJlbW90ZTwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IFNDQUNsaWVudCBBUEkgd2l0aCBIYXplbGNhc3QgY2xpZW50PC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1jbGllbnQtaW1wbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZW5kcG9pbnQtaGF6ZWxjYXN0LWNsaWVudDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy90ZXN0L2phdmEvdGVzdC9zY2FjbGllbnQvU0NBQ2xpZW50VGVzdENhc2UuamF2YSBiL2l0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy90ZXN0L2phdmEvdGVzdC9zY2FjbGllbnQvU0NBQ2xpZW50VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGFlNzBkNi4uMDAwMDAwMAotLS0gYS9pdGVzdC9zY2FjbGllbnQtYXBpLXJlbW90ZS9zcmMvdGVzdC9qYXZhL3Rlc3Qvc2NhY2xpZW50L1NDQUNsaWVudFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLSAqLw0KLQ0KLXBhY2thZ2UgdGVzdC5zY2FjbGllbnQ7DQotDQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsNCi1pbXBvcnQgaXRlc3QuSGVsbG93b3JsZFNlcnZpY2U7DQotDQotaW1wb3J0IGphdmEubmV0LlVSSTsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCi1pbXBvcnQgb3JnLmp1bml0LkFmdGVyOw0KLWltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsNCi1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOw0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsNCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuTm9TdWNoRG9tYWluRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5jbGllbnQuU0NBQ2xpZW50RmFjdG9yeTsNCi0NCi0vKioNCi0gKiBUZXN0IFNDQURvbWFpbi5uZXdJbnN0YW5jZSBhbmQgaW52b2NhdGlvbiBvZiBhIHNlcnZpY2UuDQotICoNCi0gKiBAdmVyc2lvbiAkUmV2OiA5MDQwNjQgJCAkRGF0ZTogMjAxMC0wMS0yOCAxMjozMTozNiArMDAwMCAoVGh1LCAyOCBKYW4gMjAxMCkgJA0KLSAqLw0KLXB1YmxpYyBjbGFzcyBTQ0FDbGllbnRUZXN0Q2FzZSB7DQotDQotICAgIHByaXZhdGUgTm9kZSBub2RlOw0KLSAgICANCi0gICAgQEJlZm9yZUNsYXNzDQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcEJlZm9yZUNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgIH0NCi0gICAgDQotICAgIEBBZnRlckNsYXNzDQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZWFyRG93bkFmdGVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgfQ0KLQ0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24gew0KLQ0KLSAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgoU3RyaW5nKW51bGwsIG5ldyBTdHJpbmdbXSB7InRhcmdldC9jbGFzc2VzIn0pOw0KLSAgICAgICAgbm9kZS5zdGFydCgpOw0KLQ0KLSAgICAgICAgSGVsbG93b3JsZFNlcnZpY2Ugc2VydmljZSA9IFNDQUNsaWVudEZhY3RvcnkubmV3SW5zdGFuY2UoVVJJLmNyZWF0ZSgiZGVmYXVsdCIpKS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOw0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJIZWxsbyBwZXRyYSIsIHNlcnZpY2Uuc2F5SGVsbG8oInBldHJhIikpOw0KLSAgICB9DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RVUkljb25maWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0NCi0gICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgidXJpOnNvbWVkb21haW4iKS5jcmVhdGVOb2RlKChTdHJpbmcpbnVsbCwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L2NsYXNzZXMifSk7DQotICAgICAgICBub2RlLnN0YXJ0KCk7DQotDQotICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gU0NBQ2xpZW50RmFjdG9yeS5uZXdJbnN0YW5jZShVUkkuY3JlYXRlKCJzb21lZG9tYWluIikpLmdldFNlcnZpY2UoSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50Iik7DQotICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgc2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIHNlcnZpY2UgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoIm5vc3VjaGRvbWFpbiIpKS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOw0KLSAgICAgICAgICAgIHNlcnZpY2Uuc2F5SGVsbG8oInBldHJhIik7DQotICAgICAgICAgICAgZmFpbCgpOw0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBpZiAoIShlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBOb1N1Y2hEb21haW5FeGNlcHRpb24pKSB7DQotICAgICAgICAgICAgICAgIHRocm93IGU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RFeHBsaWNpdCgpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZShVUkkuY3JlYXRlKCJteUZvb0RvbWFpbiIpLCBuZXcgU3RyaW5nW10geyJ0YXJnZXQvY2xhc3NlcyJ9KTsNCi0gICAgICAgIG5vZGUuc3RhcnQoKTsNCi0NCi0gICAgICAgIEhlbGxvd29ybGRTZXJ2aWNlIHNlcnZpY2UgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoIm15Rm9vRG9tYWluIikpLmdldFNlcnZpY2UoSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50Iik7DQotICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgc2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7DQotICAgIH0NCi0NCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0UmVtb3RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoInVyaTpteUZvb0RvbWFpbj9iaW5kPTEyNy4wLjAuMToxNDgyMSIpLmNyZWF0ZU5vZGUoKFN0cmluZyludWxsLCBuZXcgU3RyaW5nW10geyJ0YXJnZXQvY2xhc3NlcyJ9KTsNCi0gICAgICAgIG5vZGUuc3RhcnQoKTsNCi0NCi0gICAgICAgIEhlbGxvd29ybGRTZXJ2aWNlIHNlcnZpY2UgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoInVyaTpteUZvb0RvbWFpbj93a2E9MTI3LjAuMC4xOjE0ODIxIikpLmdldFNlcnZpY2UoSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50Iik7DQotICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgc2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7DQotICAgIH0NCi0NCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0UmVtb3RlMigpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCJ1cmk6bXlGb29Eb21haW4/YmluZD0xMjcuMC4wLjE6MTQ4MjEiKS5jcmVhdGVOb2RlKChTdHJpbmcpbnVsbCwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L2NsYXNzZXMifSk7DQotICAgICAgICBub2RlLnN0YXJ0KCk7DQotDQotICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gU0NBQ2xpZW50RmFjdG9yeS5uZXdJbnN0YW5jZShVUkkuY3JlYXRlKCJ1cmk6bXlGb29Eb21haW4/d2thPTEyNy4wLjAuMToxNDgyMSIpKS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOw0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJIZWxsbyBwZXRyYSIsIHNlcnZpY2Uuc2F5SGVsbG8oInBldHJhIikpOw0KLSAgICB9DQotDQotICAgIEBBZnRlcg0KLSAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgbm9kZS5zdG9wKCk7DQotICAgIH0NCi0NCi19DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvdGVzdC9qYXZhL3Rlc3Qvc2NhY2xpZW50L1NDQUNsaWVudFRlc3RDYXNlLmphdmEgYi9pdGVzdC9zY2FjbGllbnQtYXBpL3NyYy90ZXN0L2phdmEvdGVzdC9zY2FjbGllbnQvU0NBQ2xpZW50VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2Mzk2Ni4uMDAwMDAwMAotLS0gYS9pdGVzdC9zY2FjbGllbnQtYXBpL3NyYy90ZXN0L2phdmEvdGVzdC9zY2FjbGllbnQvU0NBQ2xpZW50VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIHRlc3Quc2NhY2xpZW50OwotCi1pbXBvcnQgaXRlc3QuSGVsbG93b3JsZFNlcnZpY2U7Ci1pbXBvcnQgaXRlc3QuUmVtb3RlSGVsbG93b3JsZFNlcnZpY2U7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkk7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuTm9TdWNoRG9tYWluRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLk5vU3VjaFNlcnZpY2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuY2xpZW50LlNDQUNsaWVudEZhY3Rvcnk7Ci0KLS8qKgotICogVGVzdCBTQ0FEb21haW4ubmV3SW5zdGFuY2UgYW5kIGludm9jYXRpb24gb2YgYSBzZXJ2aWNlLgotICoKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgU0NBQ2xpZW50VGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLSAgICBwcml2YXRlIE5vZGUgbm9kZTsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdERlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5jcmVhdGVOb2RlKChTdHJpbmcpbnVsbCwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L2NsYXNzZXMifSk7Ci0gICAgICAgIG5vZGUuc3RhcnQoKTsKLQotICAgICAgICBTQ0FDbGllbnRGYWN0b3J5IGNsaWVudEZhY3RvcnkgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoImRlZmF1bHQiKSk7Ci0gICAgICAgIEhlbGxvd29ybGRTZXJ2aWNlIHNlcnZpY2UgPSBjbGllbnRGYWN0b3J5LmdldFNlcnZpY2UoSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50L0hlbGxvd29ybGRTZXJ2aWNlIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBzZXJ2aWNlLnNheUhlbGxvKCJwZXRyYSIpKTsKLSAgICAgICAgCi0gICAgICAgIFJlbW90ZUhlbGxvd29ybGRTZXJ2aWNlIHJlbW90ZVNlcnZpY2UgPSBjbGllbnRGYWN0b3J5LmdldFNlcnZpY2UoUmVtb3RlSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50L1JlbW90ZUhlbGxvd29ybGRTZXJ2aWNlIik7Ci0gICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCByZW1vdGVTZXJ2aWNlLnNheUhlbGxvUmVtb3RlKCJwZXRyYSIpKTsKLQotICAgIH0KLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoVVJJLmNyZWF0ZSgibXlGb29Eb21haW4iKSwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L2NsYXNzZXMifSk7Ci0gICAgICAgIG5vZGUuc3RhcnQoKTsKLQotICAgICAgICBTQ0FDbGllbnRGYWN0b3J5IGNsaWVudEZhY3RvcnkgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoIm15Rm9vRG9tYWluIikpOwotICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gY2xpZW50RmFjdG9yeS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudC9IZWxsb3dvcmxkU2VydmljZSIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgc2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7Ci0gICAgICAgIAotICAgICAgICBSZW1vdGVIZWxsb3dvcmxkU2VydmljZSByZW1vdGVTZXJ2aWNlID0gY2xpZW50RmFjdG9yeS5nZXRTZXJ2aWNlKFJlbW90ZUhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudC9SZW1vdGVIZWxsb3dvcmxkU2VydmljZSIpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgcmVtb3RlU2VydmljZS5zYXlIZWxsb1JlbW90ZSgicGV0cmEiKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBzZXJ2aWNlLnNheUhlbGxvKCJwZXRyYSIpKTsKLSAgICB9Ci0KLS8vICAgIEBUZXN0Ci0vLyAgICBwdWJsaWMgdm9pZCB0ZXN0V2l0aG91dFNlcnZpY2VOYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0vLyAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5LmdldEluc3RhbmNlKCkuY3JlYXRlTm9kZShVUkkuY3JlYXRlKCJteUZvb0RvbWFpbiIpLCBuZXcgU3RyaW5nW10geyJ0YXJnZXQvY2xhc3NlcyJ9KTsKLS8vICAgICAgICBub2RlLnN0YXJ0KCk7Ci0vLwotLy8gICAgICAgIFNDQUNsaWVudEZhY3RvcnkgY2xpZW50RmFjdG9yeSA9IFNDQUNsaWVudEZhY3RvcnkubmV3SW5zdGFuY2UoVVJJLmNyZWF0ZSgibXlGb29Eb21haW4iKSk7Ci0vLyAgICAgICAgSGVsbG93b3JsZFNlcnZpY2Ugc2VydmljZSA9IGNsaWVudEZhY3RvcnkuZ2V0U2VydmljZShIZWxsb3dvcmxkU2VydmljZS5jbGFzcywgIkhlbGxvd29ybGRDb21wb25lbnQiKTsKLS8vICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgc2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7Ci0vLyAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RXaXRoQmFkU2VydmljZU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5LmdldEluc3RhbmNlKCkuY3JlYXRlTm9kZShVUkkuY3JlYXRlKCJteUZvb0RvbWFpbiIpLCBuZXcgU3RyaW5nW10geyJ0YXJnZXQvY2xhc3NlcyJ9KTsKLSAgICAgICAgbm9kZS5zdGFydCgpOwotCi0gICAgICAgIFNDQUNsaWVudEZhY3RvcnkgY2xpZW50RmFjdG9yeSA9IFNDQUNsaWVudEZhY3RvcnkubmV3SW5zdGFuY2UoVVJJLmNyZWF0ZSgibXlGb29Eb21haW4iKSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgIGNsaWVudEZhY3RvcnkuZ2V0U2VydmljZShIZWxsb3dvcmxkU2VydmljZS5jbGFzcywgIkhlbGxvd29ybGRDb21wb25lbnQvZm9vIik7Ci0gICAgICAgICAgIGZhaWwoKTsKLSAgICAgICAgfSBjYXRjaCAoTm9TdWNoU2VydmljZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAvLyBleHBlY3RlZAotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0V2l0aEJhZERvbWFpbk5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5LmdldEluc3RhbmNlKCkuY3JlYXRlTm9kZShVUkkuY3JlYXRlKCJteUZvb0RvbWFpbiIpLCBuZXcgU3RyaW5nW10geyJ0YXJnZXQvY2xhc3NlcyJ9KTsKLSAgICAgICAgbm9kZS5zdGFydCgpOwotCi0gICAgICAgIFNDQUNsaWVudEZhY3RvcnkgY2xpZW50RmFjdG9yeSA9IFNDQUNsaWVudEZhY3RvcnkubmV3SW5zdGFuY2UoVVJJLmNyZWF0ZSgic29tZUJhZERvbWFpbk5hbWUiKSk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gY2xpZW50RmFjdG9yeS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudC9mb28iKTsKLSAgICAgICAgICAgIHNlcnZpY2Uuc2F5SGVsbG8oInBldHJhIik7Ci0gICAgICAgICAgICBmYWlsKCk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBpZiAoIShlLmdldENhdXNlKCkgaW5zdGFuY2VvZiBOb1N1Y2hEb21haW5FeGNlcHRpb24pKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyAgICBAVGVzdCBASWdub3JlCi0vLyAgICBwdWJsaWMgdm9pZCB0ZXN0SFRUUFVSSSgpIHRocm93cyBFeGNlcHRpb24gewotLy8gICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoVVJJLmNyZWF0ZSgiaHR0cDovL2RlZmF1bHREb21haW4iKSwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L2NsYXNzZXMifSk7Ci0vLyAgICAgICAgbm9kZS5zdGFydCgpOwotLy8KLS8vICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gU0NBQ2xpZW50RmFjdG9yeS5uZXdJbnN0YW5jZShVUkkuY3JlYXRlKCJodHRwOi8vZGVmYXVsdERvbWFpbiIpKS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOwotLy8gICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBzZXJ2aWNlLnNheUhlbGxvKCJwZXRyYSIpKTsKLS8vICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG5vZGUuc3RvcCgpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2NkbC9Db250cmlidXRpb25UZXN0Q2FzZS5qYXZhIGIvaXRlc3Qvc2NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2NkbC9Db250cmlidXRpb25UZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2ZkYjUzLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L3NjZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NjZGwvQ29udHJpYnV0aW9uVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi0NCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaXRlc3Quc2NkbDsNCi0NCi1pbXBvcnQgamF2YS5pby5GaWxlOw0KLWltcG9ydCBqYXZhLm5ldC5VUkw7DQotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQotaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KLQ0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0Ow0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvbmVudDsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb3NpdGU7DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuSW1wbGVtZW50YXRpb247DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUmVmZXJlbmNlOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5Db250cmlidXRpb247DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVwbG95bWVudC5EZWZhdWx0RGVwbG95ZXI7DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVwbG95bWVudC5EZXBsb3llcjsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFJbXBsZW1lbnRhdGlvbjsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLk1vbml0b3I7DQotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsNCi1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsNCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQotDQotLyoqDQotICogVGVzdCBjYXNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFNDREwNCi0gKi8NCi1wdWJsaWMgY2xhc3MgQ29udHJpYnV0aW9uVGVzdENhc2Ugew0KLQ0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0UmVhZCgpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgRGVwbG95ZXIgZGVwbG95ZXIgPSBuZXcgRGVmYXVsdERlcGxveWVyKCk7DQotICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZSgiLi4vLi4vc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci90YXJnZXQvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yLmphciIpOw0KLSAgICAgICAgVVJMIHVybCA9IGZpbGUudG9VUkkoKS50b1VSTCgpOw0KLSAgICAgICAgTW9uaXRvciBtb25pdG9yID0gZGVwbG95ZXIuY3JlYXRlTW9uaXRvcigpOw0KLSAgICAgICAgQ29udHJpYnV0aW9uIGNvbnRyaWJ1dGlvbiA9IGRlcGxveWVyLmxvYWRDb250cmlidXRpb24odXJsLnRvVVJJKCksIHVybCwgbW9uaXRvcik7DQotICAgICAgICBkZXBsb3llci5idWlsZChBcnJheXMuYXNMaXN0KGNvbnRyaWJ1dGlvbiksIEFycmF5cy5hc0xpc3QoY29udHJpYnV0aW9uKSwgbnVsbCwgbW9uaXRvcik7DQotICAgICAgICANCi0gICAgICAgIC8vIEZlcmtsZSBhcm91bmQgaW4gdGhlIGNvbnRyaWJ1dGlvbiB2ZXJpZnlpbmcgaXQgbG9va3MgYXMgZXhwZWN0ZWQNCi0gICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGNvbnRyaWJ1dGlvbik7DQotICAgICAgICBMaXN0PENvbXBvc2l0ZT4gZGVwbG95YWJsZXMgPSBjb250cmlidXRpb24uZ2V0RGVwbG95YWJsZXMoKTsNCi0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMiwgZGVwbG95YWJsZXMuc2l6ZSgpKTsNCi0gICAgICAgIENvbXBvc2l0ZSBjYWxjdWxhdG9yQ29tcG9zdGUgPSBkZXBsb3lhYmxlcy5nZXQoMCk7DQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJDYWxjdWxhdG9yIiwgY2FsY3VsYXRvckNvbXBvc3RlLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7DQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDUsIGNhbGN1bGF0b3JDb21wb3N0ZS5nZXRDb21wb25lbnRzKCkuc2l6ZSgpKTsNCi0gICAgICAgIENvbXBvbmVudCBjYWxjQ29tcCA9IGNhbGN1bGF0b3JDb21wb3N0ZS5nZXRDb21wb25lbnQoIkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50Iik7DQotICAgICAgICBBc3NlcnQuYXNzZXJ0Tm90TnVsbChjYWxjQ29tcCk7DQotICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDQsIGNhbGNDb21wLmdldFJlZmVyZW5jZXMoKS5zaXplKCkpOw0KLSAgICAgICAgUmVmZXJlbmNlIHJlZiA9IGNhbGNDb21wLmdldFJlZmVyZW5jZSgiYWRkU2VydmljZSIpOw0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiQWRkU2VydmljZUNvbXBvbmVudCIsIHJlZi5nZXRUYXJnZXRzKCkuZ2V0KDApLmdldE5hbWUoKSk7DQotICAgICAgICBJbXBsZW1lbnRhdGlvbiBpbXBsID0gY2FsY0NvbXAuZ2V0SW1wbGVtZW50YXRpb24oKTsNCi0gICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKGltcGwgaW5zdGFuY2VvZiBKYXZhSW1wbGVtZW50YXRpb24pOw0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiY2FsY3VsYXRvci5DYWxjdWxhdG9yU2VydmljZUltcGwiLCAoKEphdmFJbXBsZW1lbnRhdGlvbilpbXBsKS5nZXRKYXZhQ2xhc3MoKS5nZXROYW1lKCkpOw0KLSAgICB9DQotDQotICAgIEBCZWZvcmUNCi0gICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgfQ0KLQ0KLSAgICBAQWZ0ZXINCi0gICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgfQ0KLX0NCmRpZmYgLS1naXQgYS9pdGVzdC9zY2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zY2RsL1ZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2UuamF2YSBiL2l0ZXN0L3NjZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NjZGwvVmFsaWRhdGVEZXBlbmRlbmNpZXNUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzU1ODZmLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L3NjZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NjZGwvVmFsaWRhdGVEZXBlbmRlbmNpZXNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLSAqLw0KLQ0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pdGVzdC5zY2RsOw0KLQ0KLWltcG9ydCBqYXZhLmlvLkZpbGU7DQotDQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7DQotDQotaW1wb3J0IG9yZy5qdW5pdC5UZXN0Ow0KLQ0KLS8qKg0KLSAqIFRlc3QgY2FzZSBmb3IgdmVyaWZ5aW5nIG9ubHkgU0NETCBqYXJzIGFyZSBuZWVkZWQNCi0gKiANCi0gKiBVc2VzIG1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luIGNvbmZpZyBpbiB0aGUgcG9tLnhtbA0KLSAqIA0KLSAqIEN1cnJlbnQgcmVxdWlyZWQgamFycyBhcmU6DQotICogZ2Vyb25pbW8tc3RheC1hcGlfMS4wX3NwZWMtMS4wLjEuamFyDQotICoganNyMTgxLWFwaS0xLjAtTVIxLmphcg0KLSAqIGp1bml0LTQuOC4xLmphcg0KLSAqIHR1c2NhbnktYXNzZW1ibHktMi4wLVNOQVBTSE9ULmphcg0KLSAqIHR1c2NhbnktYXNzZW1ibHkteG1sLTIuMC1TTkFQU0hPVC5qYXINCi0gKiB0dXNjYW55LWFzc2VtYmx5LXhzZC0yLjAtU05BUFNIT1QuamFyDQotICogdHVzY2FueS1iaW5kaW5nLWptcy0yLjAtU05BUFNIT1QuamFyDQotICogdHVzY2FueS1iaW5kaW5nLWpzb25wLTIuMC1TTkFQU0hPVC5qYXINCi0gKiB0dXNjYW55LWJpbmRpbmctcm1pLTIuMC1TTkFQU0hPVC5qYXINCi0gKiB0dXNjYW55LWJ1aWxkZXItMi4wLVNOQVBTSE9ULmphcg0KLSAqIHR1c2NhbnktY29tbW9uLWphdmEtMi4wLVNOQVBTSE9ULmphcg0KLSAqIHR1c2NhbnktY29tbW9uLXhtbC0yLjAtU05BUFNIT1QuamFyDQotICogdHVzY2FueS1jb250cmlidXRpb24tMi4wLVNOQVBTSE9ULmphcg0KLSAqIHR1c2NhbnktZGVwbG95bWVudC0yLjAtU05BUFNIT1QuamFyDQotICogdHVzY2FueS1leHRlbnNpYmlsaXR5LTIuMC1TTkFQU0hPVC5qYXINCi0gKiB0dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtMi4wLVNOQVBTSE9ULmphcg0KLSAqIHR1c2NhbnktaW50ZXJmYWNlLWphdmEtMi4wLVNOQVBTSE9ULmphcg0KLSAqIHR1c2NhbnktbW9uaXRvci0yLjAtU05BUFNIT1QuamFyDQotICogdHVzY2FueS1zY2EtYXBpLTIuMC1TTkFQU0hPVC5qYXINCi0gKiB3c3R4LWFzbC0zLjIuNC5qYXINCi0gKiANCi0gKiBUT0RPOiBXUyBiaW5kaW5nIGRyYWdzIGluIGFsbCBydW50aW1lDQotICovDQotcHVibGljIGNsYXNzIFZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2Ugew0KLQ0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCBjb3VudERlcGVuZGVuY2llcygpIHsNCi0NCi0gICAgICAgIEZpbGUgZGVwZW5kZW5jaWVzRGlyID0gbmV3IEZpbGUoInRhcmdldC9kZXBlbmRlbmN5Iik7DQotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZXBlbmRlbmNpZXNEaXIuZXhpc3RzKCkpOw0KLSAgICAgICAgDQotICAgICAgICBGaWxlW10gZGVwZW5kZW5jeUZpbGVzID0gZGVwZW5kZW5jaWVzRGlyLmxpc3RGaWxlcygpOw0KLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyOCwgZGVwZW5kZW5jeUZpbGVzLmxlbmd0aCk7DQotICAgIH0NCi19DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEgYi9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb3dvcmxkVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYzMDdmNS4uMDAwMDAwMAotLS0gYS9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb3dvcmxkVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmF4aXMyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmF4aXMyLmhlbGxvd29ybGQuSGVsbG9Xb3JsZDsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKLQotcHVibGljIGNsYXNzIEhlbGxvd29ybGRUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotICAgIHByaXZhdGUgTm9kZSBub2RlOwotICAgIHByaXZhdGUgSGVsbG9Xb3JsZCBoZWxsb1dvcmxkOwotCi0gICAgcHVibGljIHZvaWQgdGVzdENhbGN1bGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKCJIZWxsbyBmcmVkIG15bmFtZSIsIGhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzKCJmcmVkIikpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUobmV3IENvbnRyaWJ1dGlvbigidGVzdCIsICJ0YXJnZXQvY2xhc3NlcyIpKTsKLSAgICAgICAgbm9kZS5zdGFydCgpOwotICAgICAgICBoZWxsb1dvcmxkID0gbm9kZS5nZXRTZXJ2aWNlKEhlbGxvV29ybGQuY2xhc3MsICJIZWxsb1dvcmxkQ2xpZW50Iik7Ci0gICAgfQotICAgIAotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG5vZGUuc3RvcCgpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3QvcG9tLnhtbCBiL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwOGYyNzQuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3QvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGFydGlmYWN0SWQ+aXRlc3Qtd3MtY29udHJpYnV0aW9uLXdzZGwtZmlyc3Q8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBXUyBDb250cmlidXRpb24gV1NETCBGaXJzdDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICANCi0gICAgICAgICAgICAgICAgDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5hZGQtc291cmNlPC9pZD4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5hZGQtdGVzdC1zb3VyY2U8L2dvYWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZXM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlPnRhcmdldC9qYXh3cy1zb3VyY2U8L3NvdXJjZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2VzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQotICAgICAgICAgICAgPC9wbHVnaW4+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheHdzLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPHZlcnNpb24+MS4xMjwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICAgPCEtLSBFeHBsaWNpdGx5IGFkZCB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgZm9yIGpheHdzLWFwaQ0KLSAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9qaXJhLmNvZGVoYXVzLm9yZy9icm93c2UvTUVWLTQ5OA0KLSAgICAgICAgICAgICAgICAtLT4NCi0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmphdmF4Lmp3czwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qc3IxODEtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1NUjE8L3ZlcnNpb24+DQotICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5hbm5vdGF0aW9uPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjI1MC1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4NCi0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpZD53c2ltcG9ydDE8L2lkPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLXJlc291cmNlczwvcGhhc2U+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD53c2ltcG9ydDwvZ29hbD4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFja2FnZU5hbWU+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLnNjYTwvcGFja2FnZU5hbWU+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsRGlyZWN0b3J5PiR7YmFzZWRpcn0vdGFyZ2V0L2NsYXNzZXM8L3dzZGxEaXJlY3Rvcnk+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsRmlsZXM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbEZpbGU+SGVsbG9Xb3JsZEltcGxTZXJ2aWNlLndzZGw8L3dzZGxGaWxlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxGaWxlcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0YWxlRmlsZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9qYXh3cy9zdGFsZS8ud3NpbXBvcnQxU3RhbGVGbGFnPC9zdGFsZUZpbGU+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+ICANCi0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPndzaW1wb3J0MjwvaWQ+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtcmVzb3VyY2VzPC9waGFzZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPndzaW1wb3J0PC9nb2FsPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYWNrYWdlTmFtZT5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3MuZXh0ZXJuYWwuc2VydmljZS5pZmFjZTwvcGFja2FnZU5hbWU+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsRGlyZWN0b3J5PiR7YmFzZWRpcn0vdGFyZ2V0L2NsYXNzZXM8L3dzZGxEaXJlY3Rvcnk+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsRmlsZXM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbEZpbGU+aGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGw8L3dzZGxGaWxlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxGaWxlcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0YWxlRmlsZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9qYXh3cy9zdGFsZS8ud3NpbXBvcnQyU3RhbGVGbGFnPC9zdGFsZUZpbGU+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjIuMTwvdGFyZ2V0Pg0KLSAgICAgICAgICAgICAgICAgICAgPHNvdXJjZURlc3REaXI+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vamF4d3Mtc291cmNlPC9zb3VyY2VEZXN0RGlyPg0KLSAgICAgICAgICAgICAgICAgICAgPHZlcmJvc2U+dHJ1ZTwvdmVyYm9zZT4NCi0gICAgICAgICAgICAgICAgICAgIDx4bm9jb21waWxlPnRydWU8L3hub2NvbXBpbGU+DQotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICA8L3BsdWdpbj4gICAgICAgICAgICAgICAgICAgICANCi0gICAgICAgIDwvcGx1Z2lucz4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhIGIvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmM2N2RiLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi0NCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53czsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLmV4dGVybmFsLnNlcnZpY2UuaWZhY2UuRm9vOw0KLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7DQotDQotQFJlbW90YWJsZQ0KLXB1YmxpYyBpbnRlcmZhY2UgSGVsbG9Xb3JsZCB7DQotICAgIA0KLSAgICBTdHJpbmcgZ2V0R3JlZXRpbmdzKFN0cmluZyBzKTsNCi0gICAgU3RyaW5nIGdldEdyZWV0aW5nc0V4Y2VwdGlvbihTdHJpbmcgcykgdGhyb3dzIFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOw0KLSAgICBGb28gZ2V0R3JlZXRpbmdzQ29tcGxleChGb28gZm9vKTsNCi19DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YSBiL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNzllN2YuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi0NCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53czsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLmV4dGVybmFsLnNlcnZpY2UuaWZhY2UuSGVsbG9Xb3JsZFNlcnZpY2U7DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5leHRlcm5hbC5zZXJ2aWNlLmlmYWNlLkZvbzsNCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb247DQotaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOw0KLQ0KLXB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkSW1wbCBpbXBsZW1lbnRzIEhlbGxvV29ybGQgew0KLQ0KLSAgICBAUmVmZXJlbmNlDQotICAgIHB1YmxpYyBIZWxsb1dvcmxkU2VydmljZSBoZWxsb1dvcmxkRXh0ZXJuYWw7DQotICAgIA0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEdyZWV0aW5ncyhTdHJpbmcgcykgew0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlcmluZyBTQ0EgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3M6ICIgKyBzKTsNCi0gICAgICAgIFN0cmluZyByZXNwb25zZSA9IGhlbGxvV29ybGRFeHRlcm5hbC5nZXRHcmVldGluZ3Mocyk7DQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXZpbmcgU0NBIEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzOiAiICsgcmVzcG9uc2UpOw0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOw0KLSAgICB9DQotICAgIA0KLSAgICBwdWJsaWMgU3RyaW5nIGdldEdyZWV0aW5nc0V4Y2VwdGlvbihTdHJpbmcgcykgdGhyb3dzIFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uIHsNCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXJpbmcgU0NBIEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzRXhjZXB0aW9uOiAiICsgcyk7DQotICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSBoZWxsb1dvcmxkRXh0ZXJuYWwuZ2V0R3JlZXRpbmdzKHMpOw0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZWF2aW5nIFNDQSBIZWxsb1dvcmxkLmdldEdyZWV0aW5nczogIiArIHJlc3BvbnNlKTsNCi0gICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbihyZXNwb25zZSk7DQotICAgIH0gIA0KLQ0KLSAgICBwdWJsaWMgRm9vIGdldEdyZWV0aW5nc0NvbXBsZXgoRm9vIGZvbyl7DQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyaW5nIFNDQSBIZWxsb1dvcmxkLmdldEdyZWV0aW5nc0NvbXBsZXg6ICIgKyBmb28uZ2V0QmFycygpLmdldCgwKS5nZXRTKCkpOw0KLSAgICAgICAgRm9vIHJlc3BvbnNlID0gaGVsbG9Xb3JsZEV4dGVybmFsLmdldEdyZWV0aW5nc0NvbXBsZXgoZm9vKTsNCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGVhdmluZyBTQ0EgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3NDb21wbGV4OiAiICsgZm9vLmdldEJhcnMoKS5nZXQoMCkuZ2V0UygpKTsNCi0gICAgICAgIHJldHVybiByZXNwb25zZTsNCi0gICAgfSANCi0gICANCi19DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS53c2RsIGIvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS53c2RsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2U5MDgzLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Uud3NkbAorKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPGRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3dzLmJpbmRpbmcuc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iIA0KLSAgICAgICAgICAgICBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiIA0KLSAgICAgICAgICAgICB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIA0KLSAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiANCi0gICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgDQotICAgICAgICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPg0KLSAgPHR5cGVzPg0KLSAgICA8eHNkOnNjaGVtYT4NCi0gICAgICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiANCi0gICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTEueHNkIi8+DQotICAgIDwveHNkOnNjaGVtYT4NCi0gIDwvdHlwZXM+DQotICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3MiPg0KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzIi8+DQotICA8L21lc3NhZ2U+DQotICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NSZXNwb25zZSI+DQotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NSZXNwb25zZSIvPg0KLSAgPC9tZXNzYWdlPg0KLSAgPG1lc3NhZ2UgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIj4NCi0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvbiIvPg0KLSAgPC9tZXNzYWdlPg0KLSAgPG1lc3NhZ2UgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiPg0KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiLz4NCi0gIDwvbWVzc2FnZT4NCi0gIDxtZXNzYWdlIG5hbWU9IkV4Y2VwdGlvbiI+DQotICAgIDxwYXJ0IG5hbWU9ImZhdWx0IiBlbGVtZW50PSJ0bnM6RXhjZXB0aW9uIi8+DQotICA8L21lc3NhZ2U+DQotICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCi0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCi0gIDwvbWVzc2FnZT4NCi0gIDxtZXNzYWdlIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSI+DQotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCi0gIDwvbWVzc2FnZT4NCi0gIDxwb3J0VHlwZSBuYW1lPSJIZWxsb1dvcmxkSW1wbCI+DQotICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0R3JlZXRpbmdzIj4NCi0gICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5ncyIvPg0KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc1Jlc3BvbnNlIi8+DQotICAgIDwvb3BlcmF0aW9uPg0KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5nc0V4Y2VwdGlvbiI+DQotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NFeGNlcHRpb24iLz4NCi0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NFeGNlcHRpb25SZXNwb25zZSIvPg0KLSAgICAgIDxmYXVsdCBtZXNzYWdlPSJ0bnM6RXhjZXB0aW9uIiBuYW1lPSJFeGNlcHRpb24iLz4NCi0gICAgPC9vcGVyYXRpb24+DQotICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleCI+DQotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NDb21wbGV4Ii8+DQotICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6Z2V0R3JlZXRpbmdzQ29tcGxleFJlc3BvbnNlIi8+DQotICAgIDwvb3BlcmF0aW9uPg0KLSAgPC9wb3J0VHlwZT4NCi0gIDxiaW5kaW5nIG5hbWU9IkhlbGxvV29ybGRJbXBsUG9ydEJpbmRpbmciIHR5cGU9InRuczpIZWxsb1dvcmxkSW1wbCI+DQotICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJkb2N1bWVudCIvPg0KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5ncyI+DQotICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPg0KLSAgICAgIDxpbnB1dD4NCi0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgPC9pbnB1dD4NCi0gICAgICA8b3V0cHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L291dHB1dD4NCi0gICAgPC9vcGVyYXRpb24+DQotICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIj4NCi0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+DQotICAgICAgPGlucHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L2lucHV0Pg0KLSAgICAgIDxvdXRwdXQ+DQotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvb3V0cHV0Pg0KLSAgICAgIDxmYXVsdCBuYW1lPSJFeGNlcHRpb24iPg0KLSAgICAgICAgPHNvYXA6ZmF1bHQgbmFtZT0iRXhjZXB0aW9uIiB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L2ZhdWx0Pg0KLSAgICA8L29wZXJhdGlvbj4NCi0gICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCi0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+DQotICAgICAgPGlucHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L2lucHV0Pg0KLSAgICAgIDxvdXRwdXQ+DQotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvb3V0cHV0Pg0KLSAgICA8L29wZXJhdGlvbj4NCi0gIDwvYmluZGluZz4NCi0gIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRJbXBsU2VydmljZSI+DQotICAgIDxwb3J0IG5hbWU9IkhlbGxvV29ybGRJbXBsUG9ydCIgYmluZGluZz0idG5zOkhlbGxvV29ybGRJbXBsUG9ydEJpbmRpbmciPg0KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9IZWxsb1dvcmxkU2VydmljZS9IZWxsb1dvcmxkIi8+DQotICAgIDwvcG9ydD4NCi0gIDwvc2VydmljZT4NCi08L2RlZmluaXRpb25zPg0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Vfc2NoZW1hMS54c2QgYi9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWUxZmViLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Vfc2NoZW1hMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHhzOnNjaGVtYSB2ZXJzaW9uPSIxLjAiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3dzLmJpbmRpbmcuc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiANCi0gICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6dG5zMj0iaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiDQotICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQotICAgICAgICAgICAgICAgICAgICAgICAgIA0KLSAgPHhzOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9oZWxsb3dvcmxkL2V4dGVybmFsIiBzY2hlbWFMb2NhdGlvbj0iLi9IZWxsb1dvcmxkSW1wbFNlcnZpY2Vfc2NoZW1hMi54c2QiLz4gICAgICAgICAgICAgICAgICAgICAgICAgDQotDQotICA8eHM6ZWxlbWVudCBuYW1lPSJFeGNlcHRpb24iIHR5cGU9InRuczpFeGNlcHRpb24iLz4NCi0NCi0gIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5ncyIgdHlwZT0idG5zOmdldEdyZWV0aW5ncyIvPg0KLQ0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleCIgdHlwZT0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCi0NCi0gIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSIgdHlwZT0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSIvPg0KLQ0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIiB0eXBlPSJ0bnM6Z2V0R3JlZXRpbmdzRXhjZXB0aW9uIi8+DQotDQotICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb25SZXNwb25zZSIgdHlwZT0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvblJlc3BvbnNlIi8+DQotDQotICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NSZXNwb25zZSIgdHlwZT0idG5zOmdldEdyZWV0aW5nc1Jlc3BvbnNlIi8+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIj4NCi0gICAgPHhzOnNlcXVlbmNlPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImFyZzAiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQotICAgIDwveHM6c2VxdWVuY2U+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5nc0V4Y2VwdGlvblJlc3BvbnNlIj4NCi0gICAgPHhzOnNlcXVlbmNlPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InJldHVybiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4NCi0gICAgPC94czpzZXF1ZW5jZT4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iRXhjZXB0aW9uIj4NCi0gICAgPHhzOnNlcXVlbmNlPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9Im1lc3NhZ2UiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQotICAgIDwveHM6c2VxdWVuY2U+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5ncyI+DQotICAgIDx4czpzZXF1ZW5jZT4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhcmcwIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KLSAgICA8L3hzOnNlcXVlbmNlPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3NSZXNwb25zZSI+DQotICAgIDx4czpzZXF1ZW5jZT4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJyZXR1cm4iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQotICAgIDwveHM6c2VxdWVuY2U+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXgiPg0KLSAgICA8eHM6c2VxdWVuY2U+DQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYXJnMCIgdHlwZT0idG5zMjpmb28iIG1pbk9jY3Vycz0iMCIvPg0KLSAgICA8L3hzOnNlcXVlbmNlPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiPg0KLSAgICA8eHM6c2VxdWVuY2U+DQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ0bnMyOmZvbyIgbWluT2NjdXJzPSIwIi8+DQotICAgIDwveHM6c2VxdWVuY2U+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLTwveHM6c2NoZW1hPg0KLQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QgYi9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhY2RmY2FhLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHhzOnNjaGVtYSB2ZXJzaW9uPSIxLjAiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiIHhtbG5zOnRucz0iaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQotDQotICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3MiIHR5cGU9InRuczpnZXRHcmVldGluZ3MiLz4NCi0NCi0gIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXgiIHR5cGU9InRuczpnZXRHcmVldGluZ3NDb21wbGV4Ii8+DQotDQotICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiIHR5cGU9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCi0NCi0gIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6Z2V0R3JlZXRpbmdzUmVzcG9uc2UiLz4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3MiPg0KLSAgICA8eHM6c2VxdWVuY2U+DQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHM6c3RyaW5nIiBmb3JtPSJxdWFsaWZpZWQiIG1pbk9jY3Vycz0iMCIvPg0KLSAgICA8L3hzOnNlcXVlbmNlPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3NSZXNwb25zZSI+DQotICAgIDx4czpzZXF1ZW5jZT4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NSZXR1cm4iIHR5cGU9InhzOnN0cmluZyIgZm9ybT0icXVhbGlmaWVkIiBtaW5PY2N1cnM9IjAiLz4NCi0gICAgPC94czpzZXF1ZW5jZT4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleCI+DQotICAgIDx4czpzZXF1ZW5jZT4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhcmcwIiB0eXBlPSJ0bnM6Zm9vIiBtaW5PY2N1cnM9IjAiLz4NCi0gICAgPC94czpzZXF1ZW5jZT4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZm9vIj4NCi0gICAgPHhzOnNlcXVlbmNlPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImJhcnMiIHR5cGU9InRuczpiYXIiIG5pbGxhYmxlPSJ0cnVlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+DQotICAgIDwveHM6c2VxdWVuY2U+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImJhciI+DQotICAgIDx4czpzZXF1ZW5jZT4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJiIiB0eXBlPSJ4czpib29sZWFuIiBtaW5PY2N1cnM9IjAiLz4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJzIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9IngiIHR5cGU9InhzOmludCIvPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InkiIHR5cGU9InhzOmludCIgbWluT2NjdXJzPSIwIi8+DQotICAgIDwveHM6c2VxdWVuY2U+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSI+DQotICAgIDx4czpzZXF1ZW5jZT4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJyZXR1cm4iIHR5cGU9InRuczpmb28iIG1pbk9jY3Vycz0iMCIvPg0KLSAgICA8L3hzOnNlcXVlbmNlPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi08L3hzOnNjaGVtYT4NCi0NCi0NCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwgYi9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmODNmMWYuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTwhLS0gR2VuZXJhdGVkIGJ5IEpBWC1XUyBSSSBhdCBodHRwOi8vamF4LXdzLmRldi5qYXZhLm5ldC4gUkkncyB2ZXJzaW9uIGlzIEpBWC1XUyBSSSAyLjEuNy1iMDEtLiAtLT4NCi08ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaGVsbG93b3JsZC9leHRlcm5hbCIgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlIiB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIHhtbG5zOnRucz0iaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPg0KLSAgPHR5cGVzPg0KLSAgICA8eHNkOnNjaGVtYT4NCi0gICAgICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9oZWxsb3dvcmxkL2V4dGVybmFsIiBzY2hlbWFMb2NhdGlvbj0iSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkIi8+DQotICAgIDwveHNkOnNjaGVtYT4NCi0gIDwvdHlwZXM+DQotICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3MiPg0KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzIi8+DQotICA8L21lc3NhZ2U+DQotICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NSZXNwb25zZSI+DQotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NSZXNwb25zZSIvPg0KLSAgPC9tZXNzYWdlPg0KLSAgPG1lc3NhZ2UgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleCI+DQotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NDb21wbGV4Ii8+DQotICA8L21lc3NhZ2U+DQotICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiPg0KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzQ29tcGxleFJlc3BvbnNlIi8+DQotICA8L21lc3NhZ2U+DQotICA8cG9ydFR5cGUgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiPg0KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5ncyI+DQotICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3MiLz4NCi0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NSZXNwb25zZSIvPg0KLSAgICA8L29wZXJhdGlvbj4NCi0gICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCi0gICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCi0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCi0gICAgPC9vcGVyYXRpb24+DQotICA8L3BvcnRUeXBlPg0KLSAgPGJpbmRpbmcgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2VQb3J0QmluZGluZyIgdHlwZT0idG5zOkhlbGxvV29ybGRTZXJ2aWNlIj4NCi0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9ImRvY3VtZW50Ii8+DQotICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0R3JlZXRpbmdzIj4NCi0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+DQotICAgICAgPGlucHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L2lucHV0Pg0KLSAgICAgIDxvdXRwdXQ+DQotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvb3V0cHV0Pg0KLSAgICA8L29wZXJhdGlvbj4NCi0gICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCi0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+DQotICAgICAgPGlucHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L2lucHV0Pg0KLSAgICAgIDxvdXRwdXQ+DQotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvb3V0cHV0Pg0KLSAgICA8L29wZXJhdGlvbj4NCi0gIDwvYmluZGluZz4NCi0gIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlU2VydmljZSI+DQotICAgIDxwb3J0IG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlUG9ydCIgYmluZGluZz0idG5zOkhlbGxvV29ybGRTZXJ2aWNlUG9ydEJpbmRpbmciPg0KLSAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4Ni9FeHRlcm5hbC9IZWxsb1dvcmxkIi8+DQotICAgIDwvcG9ydD4NCi0gIDwvc2VydmljZT4NCi08L2RlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2V4dGVybmFsLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9jbGllbnQvSGVsbG9Xb3JsZENsaWVudExhdW5jaGVyLmphdmEgYi9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvY2xpZW50L0hlbGxvV29ybGRDbGllbnRMYXVuY2hlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzNhNzQwLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L3dzL2V4dGVybmFsLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9jbGllbnQvSGVsbG9Xb3JsZENsaWVudExhdW5jaGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NCArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKg0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICoNCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuDQotICovDQotDQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3MuZXh0ZXJuYWwuY2xpZW50Ow0KLQ0KLWltcG9ydCBqYXZhLmlvLkZpbGU7DQotaW1wb3J0IGphdmEubmV0LlVSTDsNCi0NCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsNCi1pbXBvcnQgamF2YXgueG1sLndzLlNlcnZpY2U7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5zY2EuRXhjZXB0aW9uX0V4Y2VwdGlvbjsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLnNjYS5Gb287DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5zY2EuSGVsbG9Xb3JsZEltcGw7DQotDQotcHVibGljIGNsYXNzIEhlbGxvV29ybGRDbGllbnRMYXVuY2hlciB7DQotICAgIA0KLSAgICBwdWJsaWMgSGVsbG9Xb3JsZEltcGwgd3NQcm94eTsNCi0gICAgDQotICAgIHB1YmxpYyBIZWxsb1dvcmxkQ2xpZW50TGF1bmNoZXIoKXsNCi0gICAgfQ0KLSAgICANCi0gICAgcHVibGljIHZvaWQgY3JlYXRlQ2xpZW50KCkgdGhyb3dzIEV4Y2VwdGlvbnsNCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IFN0YXJ0aW5nIGV4dGVybmFsIEpBWFdTIGNsaWVudCAiKTsNCi0gICAgICAgIA0KLSAgICAgICAgLy8gZGVmYXVsdCBKVk0gSkFYV1Mgc3VwcG9ydA0KLSAgICAgICAgUU5hbWUgc2VydmljZU5hbWUgPSBuZXcgUU5hbWUoImh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiwgIkhlbGxvV29ybGRJbXBsU2VydmljZSIpOw0KLSAgICAgICAgUU5hbWUgcG9ydE5hbWUgPSBuZXcgUU5hbWUoImh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiwgIkhlbGxvV29ybGRJbXBsUG9ydCIpOw0KLSAgICAgICAgLy9VUkwgd3NkbExvY2F0aW9uID0gbmV3IEZpbGUoIi4uL2V4dGVybmFsLWNsaWVudC90YXJnZXQvY2xhc3Nlcy9oZWxsb3dvcmxkLXNjYS53c2RsIikudG9VUkwoKTsNCi0gICAgICAgIFVSTCB3c2RsTG9jYXRpb24gPSBuZXcgRmlsZSgiLi4vZXh0ZXJuYWwtY2xpZW50L3RhcmdldC9jbGFzc2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS53c2RsIikudG9VUkwoKTsNCi0gICAgICAgIGphdmF4LnhtbC53cy5TZXJ2aWNlIHdlYlNlcnZpY2UgPSBTZXJ2aWNlLmNyZWF0ZSh3c2RsTG9jYXRpb24sIHNlcnZpY2VOYW1lKTsNCi0gICAgICAgIHdzUHJveHkgPSAoSGVsbG9Xb3JsZEltcGwpIHdlYlNlcnZpY2UuZ2V0UG9ydChwb3J0TmFtZSwgSGVsbG9Xb3JsZEltcGwuY2xhc3MpOw0KLSAgICB9DQotICAgIA0KLSAgICBwdWJsaWMgdm9pZCBkZXN0cm95Q2xpZW50KCl7DQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBTdG9wcGluZyBleHRlcm5hbCBKQVhXUyBjbGllbnQ6ICIpOw0KLSAgICAgICAgLy8gVE9ETyANCi0gICAgfQ0KLSAgICANCi0gICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZ3MoU3RyaW5nIG5hbWUpew0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlcmluZyBFeHRlcm5hbCBDbGllbnQgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3M6ICIgKyBuYW1lKTsNCi0gICAgICAgIFN0cmluZyByZXNwb25zZSA9IHdzUHJveHkuZ2V0R3JlZXRpbmdzKG5hbWUpOw0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZWF2aW5nIEV4dGVybmFsIENsaWVudCBIZWxsb1dvcmxkLmdldEdyZWV0aW5nczogIiArIHJlc3BvbnNlKTsNCi0gICAgICAgIHJldHVybiByZXNwb25zZTsNCi0gICAgfQ0KLSAgICANCi0gICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZ3NFeGNlcHRpb24oU3RyaW5nIG5hbWUpIHRocm93cyBFeGNlcHRpb25fRXhjZXB0aW9uIHsNCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXJpbmcgRXh0ZXJuYWwgQ2xpZW50IEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzRXhjZXB0aW9uOiAiICsgbmFtZSk7DQotICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSAgd3NQcm94eS5nZXRHcmVldGluZ3NFeGNlcHRpb24obmFtZSk7DQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXZpbmcgRXh0ZXJuYWwgQ2xpZW50IEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzRXhjZXB0aW9uOiAiICsgcmVzcG9uc2UpOw0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOw0KLSAgICB9ICANCi0gICAgDQotICAgIHB1YmxpYyBGb28gZ2V0R3JlZXRpbmdzQ29tcGxleChGb28gZikgdGhyb3dzIEV4Y2VwdGlvbl9FeGNlcHRpb24gew0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlcmluZyBFeHRlcm5hbCBDbGllbnQgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3NDb21wbGV4OiAiICsgZi5nZXRCYXJzKCkuZ2V0KDApLmdldFMoKSk7DQotICAgICAgICBGb28gcmVzcG9uc2UgPSAgd3NQcm94eS5nZXRHcmVldGluZ3NDb21wbGV4KGYpOw0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZWF2aW5nIEV4dGVybmFsIENsaWVudCBIZWxsb1dvcmxkLmdldEdyZWV0aW5nc0NvbXBsZXg6ICIgKyByZXNwb25zZS5nZXRCYXJzKCkuZ2V0KDApLmdldFMoKSk7DQotICAgICAgICByZXR1cm4gcmVzcG9uc2U7DQotICAgIH0gICAgIA0KLSAgICANCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICBIZWxsb1dvcmxkQ2xpZW50TGF1bmNoZXIgbGF1bmNoZXIgPSBuZXcgSGVsbG9Xb3JsZENsaWVudExhdW5jaGVyKCk7DQotICAgICAgICBsYXVuY2hlci5jcmVhdGVDbGllbnQoKTsNCi0gICAgICAgIGxhdW5jaGVyLmdldEdyZWV0aW5ncygiRnJlZCIpOw0KLSAgICAgICAgbGF1bmNoZXIuZGVzdHJveUNsaWVudCgpOw0KLSAgICB9DQotICAgIA0KLX0NCmRpZmYgLS1naXQgYS9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS53c2RsIGIvaXRlc3Qvd3MvZXh0ZXJuYWwtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Uud3NkbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlOTA4My4uMDAwMDAwMAotLS0gYS9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS53c2RsCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08ZGVmaW5pdGlvbnMgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3MuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIgDQotICAgICAgICAgICAgIG5hbWU9IkhlbGxvV29ybGRJbXBsU2VydmljZSIgDQotICAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgDQotICAgICAgICAgICAgIHhtbG5zOnRucz0iaHR0cDovL3dzLmJpbmRpbmcuc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iIA0KLSAgICAgICAgICAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiANCi0gICAgICAgICAgICAgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+DQotICA8dHlwZXM+DQotICAgIDx4c2Q6c2NoZW1hPg0KLSAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3dzLmJpbmRpbmcuc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iIA0KLSAgICAgICAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2Vfc2NoZW1hMS54c2QiLz4NCi0gICAgPC94c2Q6c2NoZW1hPg0KLSAgPC90eXBlcz4NCi0gIDxtZXNzYWdlIG5hbWU9ImdldEdyZWV0aW5ncyI+DQotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3MiLz4NCi0gIDwvbWVzc2FnZT4NCi0gIDxtZXNzYWdlIG5hbWU9ImdldEdyZWV0aW5nc1Jlc3BvbnNlIj4NCi0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc1Jlc3BvbnNlIi8+DQotICA8L21lc3NhZ2U+DQotICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb24iPg0KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzRXhjZXB0aW9uIi8+DQotICA8L21lc3NhZ2U+DQotICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb25SZXNwb25zZSI+DQotICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NFeGNlcHRpb25SZXNwb25zZSIvPg0KLSAgPC9tZXNzYWdlPg0KLSAgPG1lc3NhZ2UgbmFtZT0iRXhjZXB0aW9uIj4NCi0gICAgPHBhcnQgbmFtZT0iZmF1bHQiIGVsZW1lbnQ9InRuczpFeGNlcHRpb24iLz4NCi0gIDwvbWVzc2FnZT4NCi0gIDxtZXNzYWdlIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXgiPg0KLSAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzQ29tcGxleCIvPg0KLSAgPC9tZXNzYWdlPg0KLSAgPG1lc3NhZ2UgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleFJlc3BvbnNlIj4NCi0gICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSIvPg0KLSAgPC9tZXNzYWdlPg0KLSAgPHBvcnRUeXBlIG5hbWU9IkhlbGxvV29ybGRJbXBsIj4NCi0gICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3MiPg0KLSAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6Z2V0R3JlZXRpbmdzIi8+DQotICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6Z2V0R3JlZXRpbmdzUmVzcG9uc2UiLz4NCi0gICAgPC9vcGVyYXRpb24+DQotICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIj4NCi0gICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvbiIvPg0KLSAgICAgIDxvdXRwdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvblJlc3BvbnNlIi8+DQotICAgICAgPGZhdWx0IG1lc3NhZ2U9InRuczpFeGNlcHRpb24iIG5hbWU9IkV4Y2VwdGlvbiIvPg0KLSAgICA8L29wZXJhdGlvbj4NCi0gICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCi0gICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCi0gICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCi0gICAgPC9vcGVyYXRpb24+DQotICA8L3BvcnRUeXBlPg0KLSAgPGJpbmRpbmcgbmFtZT0iSGVsbG9Xb3JsZEltcGxQb3J0QmluZGluZyIgdHlwZT0idG5zOkhlbGxvV29ybGRJbXBsIj4NCi0gICAgPHNvYXA6YmluZGluZyB0cmFuc3BvcnQ9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvaHR0cCIgc3R5bGU9ImRvY3VtZW50Ii8+DQotICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0R3JlZXRpbmdzIj4NCi0gICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+DQotICAgICAgPGlucHV0Pg0KLSAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCi0gICAgICA8L2lucHV0Pg0KLSAgICAgIDxvdXRwdXQ+DQotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvb3V0cHV0Pg0KLSAgICA8L29wZXJhdGlvbj4NCi0gICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb24iPg0KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4NCi0gICAgICA8aW5wdXQ+DQotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvaW5wdXQ+DQotICAgICAgPG91dHB1dD4NCi0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgPC9vdXRwdXQ+DQotICAgICAgPGZhdWx0IG5hbWU9IkV4Y2VwdGlvbiI+DQotICAgICAgICA8c29hcDpmYXVsdCBuYW1lPSJFeGNlcHRpb24iIHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvZmF1bHQ+DQotICAgIDwvb3BlcmF0aW9uPg0KLSAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXgiPg0KLSAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4NCi0gICAgICA8aW5wdXQ+DQotICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KLSAgICAgIDwvaW5wdXQ+DQotICAgICAgPG91dHB1dD4NCi0gICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQotICAgICAgPC9vdXRwdXQ+DQotICAgIDwvb3BlcmF0aW9uPg0KLSAgPC9iaW5kaW5nPg0KLSAgPHNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZEltcGxTZXJ2aWNlIj4NCi0gICAgPHBvcnQgbmFtZT0iSGVsbG9Xb3JsZEltcGxQb3J0IiBiaW5kaW5nPSJ0bnM6SGVsbG9Xb3JsZEltcGxQb3J0QmluZGluZyI+DQotICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDg1L0hlbGxvV29ybGRTZXJ2aWNlL0hlbGxvV29ybGQiLz4NCi0gICAgPC9wb3J0Pg0KLSAgPC9zZXJ2aWNlPg0KLTwvZGVmaW5pdGlvbnM+DQotDQotDQotDQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZXh0ZXJuYWwtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Vfc2NoZW1hMS54c2QgYi9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZV9zY2hlbWExLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU3OTkwOS4uMDAwMDAwMAotLS0gYS9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZV9zY2hlbWExLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08eHM6c2NoZW1hIHZlcnNpb249IjEuMCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3MuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIgDQotICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnRucz0iaHR0cDovL3dzLmJpbmRpbmcuc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPg0KLQ0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iRXhjZXB0aW9uIiB0eXBlPSJ0bnM6RXhjZXB0aW9uIi8+DQotDQotICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3MiIHR5cGU9InRuczpnZXRHcmVldGluZ3MiLz4NCi0NCi0gIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXgiIHR5cGU9InRuczpnZXRHcmVldGluZ3NDb21wbGV4Ii8+DQotDQotICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiIHR5cGU9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCi0NCi0gIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc0V4Y2VwdGlvbiIgdHlwZT0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvbiIvPg0KLQ0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiIHR5cGU9InRuczpnZXRHcmVldGluZ3NFeGNlcHRpb25SZXNwb25zZSIvPg0KLQ0KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0R3JlZXRpbmdzUmVzcG9uc2UiIHR5cGU9InRuczpnZXRHcmVldGluZ3NSZXNwb25zZSIvPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5nc0V4Y2VwdGlvbiI+DQotICAgIDx4czpzZXF1ZW5jZT4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhcmcwIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KLSAgICA8L3hzOnNlcXVlbmNlPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb25SZXNwb25zZSI+DQotICAgIDx4czpzZXF1ZW5jZT4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJyZXR1cm4iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQotICAgIDwveHM6c2VxdWVuY2U+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLQ0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV4Y2VwdGlvbiI+DQotICAgIDx4czpzZXF1ZW5jZT4NCi0gICAgICA8eHM6ZWxlbWVudCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KLSAgICA8L3hzOnNlcXVlbmNlPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3MiPg0KLSAgICA8eHM6c2VxdWVuY2U+DQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYXJnMCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4NCi0gICAgPC94czpzZXF1ZW5jZT4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzUmVzcG9uc2UiPg0KLSAgICA8eHM6c2VxdWVuY2U+DQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KLSAgICA8L3hzOnNlcXVlbmNlPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCi0gICAgPHhzOnNlcXVlbmNlPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImFyZzAiIHR5cGU9InRuczpmb28iIG1pbk9jY3Vycz0iMCIvPg0KLSAgICA8L3hzOnNlcXVlbmNlPg0KLSAgPC94czpjb21wbGV4VHlwZT4NCi0NCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSJmb28iPg0KLSAgICA8eHM6c2VxdWVuY2U+DQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYmFycyIgdHlwZT0idG5zOmJhciIgbmlsbGFibGU9InRydWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4NCi0gICAgPC94czpzZXF1ZW5jZT4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYmFyIj4NCi0gICAgPHhzOnNlcXVlbmNlPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9ImIiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIvPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InMiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ieCIgdHlwZT0ieHM6aW50Ii8+DQotICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ieSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiLz4NCi0gICAgPC94czpzZXF1ZW5jZT4NCi0gIDwveHM6Y29tcGxleFR5cGU+DQotDQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleFJlc3BvbnNlIj4NCi0gICAgPHhzOnNlcXVlbmNlPg0KLSAgICAgIDx4czplbGVtZW50IG5hbWU9InJldHVybiIgdHlwZT0idG5zOmZvbyIgbWluT2NjdXJzPSIwIi8+DQotICAgIDwveHM6c2VxdWVuY2U+DQotICA8L3hzOmNvbXBsZXhUeXBlPg0KLTwveHM6c2NoZW1hPg0KLQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvaXRlc3Qvd3MvZXh0ZXJuYWwtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9zZXJ2aWNlL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNDRjZTcuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvd3MvZXh0ZXJuYWwtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9zZXJ2aWNlL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotDQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3MuZXh0ZXJuYWwuc2VydmljZTsNCi0NCi1pbXBvcnQgamF2YXguandzLldlYk1ldGhvZDsNCi1pbXBvcnQgamF2YXguandzLldlYlBhcmFtOw0KLWltcG9ydCBqYXZheC5qd3MuV2ViUmVzdWx0Ow0KLWltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsNCi1pbXBvcnQgamF2YXgueG1sLndzLlJlcXVlc3RXcmFwcGVyOw0KLWltcG9ydCBqYXZheC54bWwud3MuUmVzcG9uc2VXcmFwcGVyOw0KLQ0KLUBXZWJTZXJ2aWNlKG5hbWUgPSAiSGVsbG9Xb3JsZFNlcnZpY2UiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiKQ0KLXB1YmxpYyBjbGFzcyBIZWxsb1dvcmxkU2VydmljZSB7DQotDQotICAgIEBXZWJNZXRob2QNCi0gICAgQFdlYlJlc3VsdChuYW1lID0gImdldEdyZWV0aW5nc1JldHVybiIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vaGVsbG93b3JsZC9leHRlcm5hbCIpDQotICAgIEBSZXF1ZXN0V3JhcHBlcihsb2NhbE5hbWUgPSAiZ2V0R3JlZXRpbmdzIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9oZWxsb3dvcmxkL2V4dGVybmFsIiwgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5leHRlcm5hbC5zZXJ2aWNlLkdldEdyZWV0aW5ncyIpDQotICAgIEBSZXNwb25zZVdyYXBwZXIobG9jYWxOYW1lID0gImdldEdyZWV0aW5nc1Jlc3BvbnNlIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9oZWxsb3dvcmxkL2V4dGVybmFsIiwgY2xhc3NOYW1lID0gIm9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5leHRlcm5hbC5zZXJ2aWNlLkdldEdyZWV0aW5nc1Jlc3BvbnNlIikNCi0gICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZ3MoIEBXZWJQYXJhbShuYW1lID0gIm5hbWUiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUpIHsNCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXJpbmcgRXh0ZXJuYWwgU2VydmljZSBIZWxsb1dvcmxkLmdldEdyZWV0aW5nczogIiArIG5hbWUpOw0KLSAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gIkhlbGxvICIgKyBuYW1lOw0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZWF2aW5nIEV4dGVybmFsIFNlcnZpY2UgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3M6ICIgKyByZXNwb25zZSk7DQotICAgICAgICByZXR1cm4gcmVzcG9uc2U7DQotICAgIH0NCi0NCi0gICAgcHVibGljIEZvbyBnZXRHcmVldGluZ3NDb21wbGV4KEZvbyBmb28pew0KLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlcmluZyBFeHRlcm5hbCBTZXJ2aWNlIEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzQ29tcGxleDogIiArIGZvby5nZXRCYXJzKCkuZ2V0KDApLmdldFMoKSk7DQotICAgICAgICBGb28gcmVzcG9uc2UgPSBmb287DQotICAgICAgICBCYXIgYjMgPSBuZXcgQmFyKCk7DQotICAgICAgICBiMy5zZXRTKCJzaW1vbiIpOw0KLSAgICAgICAgYjMuc2V0WCg3KTsNCi0gICAgICAgIGIzLnNldFkobmV3IEludGVnZXIoOCkpOw0KLSAgICAgICAgYjMuc2V0QihCb29sZWFuLlRSVUUpOw0KLSAgICAgICAgcmVzcG9uc2UuZ2V0QmFycygpLmFkZChiMyk7DQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXZpbmcgRXh0ZXJuYWwgU2VydmljZSBIZWxsb1dvcmxkLmdldEdyZWV0aW5nc0NvbXBsZXg6ICIgKyBmb28uZ2V0QmFycygpLmdldCgwKS5nZXRTKCkpOw0KLSAgICAgICAgcmV0dXJuIHJlc3BvbnNlOw0KLSAgICB9ICAgIA0KLQ0KLX0NCmRpZmYgLS1naXQgYS9pdGVzdC93cy9odHRwLXNzbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IVFRQU1Rlc3RDYXNlLmphdmEgYi9pdGVzdC93cy9odHRwLXNzbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IVFRQU1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYzQ0OGEuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSFRUUFNUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuYXhpczI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuYXhpczIuaGVsbG93b3JsZC5IZWxsb1dvcmxkOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgSFRUUFNUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotICAgIHByaXZhdGUgTm9kZSBub2RlOwotICAgIHByaXZhdGUgSGVsbG9Xb3JsZCBoZWxsb1dvcmxkOwotICAgIHByaXZhdGUgSGVsbG9Xb3JsZCBoZWxsb1dvcmxkMjsKLSAgICBwcml2YXRlIEhlbGxvV29ybGQgaGVsbG9Xb3JsZDM7Ci0gICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZShuZXcgQ29udHJpYnV0aW9uKCJ0ZXN0IiwgInRhcmdldC9jbGFzc2VzIikpOwotICAgICAgICBub2RlLnN0YXJ0KCk7Ci0gICAgICAgIGhlbGxvV29ybGQgPSBub2RlLmdldFNlcnZpY2UoSGVsbG9Xb3JsZC5jbGFzcywgIkhlbGxvV29ybGRDbGllbnQiKTsKLSAgICAgICAgaGVsbG9Xb3JsZDIgPSBub2RlLmdldFNlcnZpY2UoSGVsbG9Xb3JsZC5jbGFzcywgIkhlbGxvV29ybGRDbGllbnQyIik7Ci0gICAgICAgIGhlbGxvV29ybGQzID0gbm9kZS5nZXRTZXJ2aWNlKEhlbGxvV29ybGQuY2xhc3MsICJIZWxsb1dvcmxkQ2xpZW50MyIpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgaGVsbG9Xb3JsZC5nZXRHcmVldGluZ3MoInBldHJhIikpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgaGVsbG9Xb3JsZDIuZ2V0R3JlZXRpbmdzKCJwZXRyYSIpKTsKLSAgICAgICAgLy8gVE9ETyAtIGNoZWNrIHBvbGljeSBtYXRjaGluZyBmb3IgdW5jb25maWd1cmUgcmVmZXJlbmNlIAotICAgICAgICAvL2Fzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBoZWxsb1dvcmxkMy5nZXRHcmVldGluZ3MoInBldHJhIikpOwotICAgIH0gICAgCi0gICAgCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgbm9kZS5zdG9wKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9XU0RMRmlyc3RUZXN0Q2FzZS5qYXZhIGIvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvV1NETEZpcnN0VGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODc2M2YwOC4uMDAwMDAwMAotLS0gYS9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9XU0RMRmlyc3RUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI1ICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi0NCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5sYXVuY2hlci5heGlzMjsNCi0NCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOw0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOw0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOw0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5leHRlcm5hbC5jbGllbnQuSGVsbG9Xb3JsZENsaWVudExhdW5jaGVyOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3MuZXh0ZXJuYWwuc2VydmljZS5IZWxsb1dvcmxkU2VydmljZUxhdW5jaGVyOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3Muc2NhLkJhcjsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLnNjYS5Gb287DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7DQotaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsNCi1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsNCi1pbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsNCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQotDQotcHVibGljIGNsYXNzIFdTRExGaXJzdFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2Ugew0KLQ0KLSAgICBwcml2YXRlIE5vZGUgbm9kZTsNCi0gICAgcHJpdmF0ZSBIZWxsb1dvcmxkU2VydmljZUxhdW5jaGVyIGV4dGVybmFsU2VydmljZTsNCi0gICAgcHJpdmF0ZSBIZWxsb1dvcmxkQ2xpZW50TGF1bmNoZXIgZXh0ZXJuYWxDbGllbnQ7DQotDQotICAgIEBCZWZvcmUNCi0gICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgICAgIC8vIFN0YXJ0IHRoZSBleHRlcm5hbCBzZXJ2aWNlDQotICAgICAgICBleHRlcm5hbFNlcnZpY2UgPSBuZXcgSGVsbG9Xb3JsZFNlcnZpY2VMYXVuY2hlcigpOw0KLSAgICAgICAgZXh0ZXJuYWxTZXJ2aWNlLmNyZWF0ZVNlcnZpY2UoKTsNCi0gICAgICAgDQotICAgICAgICAvLyBTdGFydCB0aGUgU0NBIGNvbnRyaWJ1dGlvbg0KLSAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZShuZXcgQ29udHJpYnV0aW9uKCJ3c2RsLWZpcnN0IiwgIi4uL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3RhcmdldC9pdGVzdC13cy1jb250cmlidXRpb24td3NkbC1maXJzdC5qYXIiKSk7DQotICAgICAgICBub2RlLnN0YXJ0KCk7DQotICAgICAgICANCi0gICAgICAgIC8vIHN0YXJ0IHRoZSBleHRlcm5hbCBjbGllbnQNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgZXh0ZXJuYWxDbGllbnQgPSBuZXcgSGVsbG9Xb3JsZENsaWVudExhdW5jaGVyKCk7DQotICAgICAgICAgICAgZXh0ZXJuYWxDbGllbnQuY3JlYXRlQ2xpZW50KCk7DQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsNCi0gICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsNCi0gICAgICAgICAgICB0aHJvdyBleDsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLS8qDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RXYWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByZXNzIGEga2V5Iik7DQotICAgICAgICBTeXN0ZW0uaW4ucmVhZCgpOw0KLSAgICB9DQotKi8NCi0gIA0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0R3JlZXRpbmdzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIEZyZWQiLCBleHRlcm5hbENsaWVudC5nZXRHcmVldGluZ3MoIkZyZWQiKSk7DQotICAgIH0NCi0gICAgDQotICAgIEBUZXN0DQotICAgIEBJZ25vcmUNCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEdyZWV0aW5nc0V4Y2VwdGlvbigpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBleHRlcm5hbENsaWVudC5nZXRHcmVldGluZ3NFeGNlcHRpb24oIkZyZWQiKTsNCi0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgZmFpbCgiZXhwZWN0aW5nIGV4Y2VwdGlvbiIpOw0KLSAgICB9DQotICAgIA0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0R3JlZXRpbmdzQ29tcGxleCgpIHRocm93cyBFeGNlcHRpb24geyAgICAgICAgDQotICAgICAgICBGb28gZiA9IG5ldyBGb28oKTsNCi0gICAgICAgIEJhciBiMSA9IG5ldyBCYXIoKTsNCi0gICAgICAgIGIxLnNldFMoInBldHJhIik7DQotICAgICAgICBiMS5zZXRYKDEpOw0KLSAgICAgICAgYjEuc2V0WShuZXcgSW50ZWdlcigyKSk7DQotICAgICAgICBiMS5zZXRCKEJvb2xlYW4uVFJVRSk7DQotICAgICAgICBCYXIgYjIgPSBuZXcgQmFyKCk7DQotICAgICAgICBiMi5zZXRTKCJiZWF0ZSIpOw0KLSAgICAgICAgYjIuc2V0WCgzKTsNCi0gICAgICAgIGIyLnNldFkobmV3IEludGVnZXIoNCkpOw0KLSAgICAgICAgYjIuc2V0QihCb29sZWFuLkZBTFNFKTsNCi0gICAgICAgIGYuZ2V0QmFycygpLmFkZChiMSk7DQotICAgICAgICBmLmdldEJhcnMoKS5hZGQoYjIpOw0KLSAgICAgICANCi0gICAgICAgIEZvbyBmMiA9IGV4dGVybmFsQ2xpZW50LmdldEdyZWV0aW5nc0NvbXBsZXgoZik7DQotDQotICAgICAgICBhc3NlcnRFcXVhbHMoInBldHJhIiwgZjIuZ2V0QmFycygpLmdldCgwKS5nZXRTKCkpOw0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGYyLmdldEJhcnMoKS5nZXQoMCkuZ2V0WCgpKTsNCi0gICAgICAgIGFzc2VydEVxdWFscygyLCBmMi5nZXRCYXJzKCkuZ2V0KDApLmdldFkoKS5pbnRWYWx1ZSgpKTsNCi0gICAgICAgIGFzc2VydFRydWUoZjIuZ2V0QmFycygpLmdldCgwKS5pc0IoKSk7DQotICAgICAgICBhc3NlcnRFcXVhbHMoInNpbW9uIiwgZjIuZ2V0QmFycygpLmdldCgyKS5nZXRTKCkpOw0KLSAgICAgICAgYXNzZXJ0RXF1YWxzKDcsIGYyLmdldEJhcnMoKS5nZXQoMikuZ2V0WCgpKTsNCi0gICAgICAgIGFzc2VydEVxdWFscyg4LCBmMi5nZXRCYXJzKCkuZ2V0KDIpLmdldFkoKS5pbnRWYWx1ZSgpKTsNCi0gICAgICAgIGFzc2VydFRydWUoZjIuZ2V0QmFycygpLmdldCgyKS5pc0IoKS5ib29sZWFuVmFsdWUoKSk7DQotICAgIH0gIA0KLSAgICANCi0gICAgQEFmdGVyDQotICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICBub2RlLnN0b3AoKTsNCi0gICAgICAgIGV4dGVybmFsQ2xpZW50LmRlc3Ryb3lDbGllbnQoKTsNCi0gICAgICAgIGV4dGVybmFsU2VydmljZS5kZXN0b3J5U2VydmljZSgpOw0KLSAgICB9DQotDQotfQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2UvcG9tLnhtbCBiL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2UvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE3NWYzOC4uMDAwMDAwMAotLS0gYS9pdGVzdC93cy9sYXVuY2hlci1iYXNlL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICAgICogCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAgICogCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD5pdGVzdC13cy1sYXVuY2hlci1iYXNlPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBXUyBMYXVuY2hlciBCYXNlPC9uYW1lPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPCEtLSBUZXN0IHJlc291cmNlcyAtLT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtd3MtZXh0ZXJuYWwtY2xpZW50PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC13cy1leHRlcm5hbC1zZXJ2aWNlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKLSAgICAgICAgICAgICAgICAKLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICAgIDxidWlsZD4KLSAgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+Ci0gICAgICAgIAotICAgIDwvYnVpbGQ+Ci0gICAgCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3BhY2thZ2UtaW5mby5qYXZhIGIvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9wYWNrYWdlLWluZm8uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzcwZjdiZC4uMDAwMDAwMAotLS0gYS9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3BhY2thZ2UtaW5mby5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1AamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbi5YbWxTY2hlbWEobmFtZXNwYWNlID0gImh0dHA6Ly9hY2NvdW50cyIpDQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuYXhpczI7DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9RdWVzdGlvbk1hcmtXU0RMSW1wb3J0VGVzdENhc2UuamF2YSBiL2l0ZXN0L3dzL3dzZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvUXVlc3Rpb25NYXJrV1NETEltcG9ydFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZWE1MzYuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvd3Mvd3NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9RdWVzdGlvbk1hcmtXU0RMSW1wb3J0VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmF4aXMyOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOwotaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKLWltcG9ydCBqYXZheC53c2RsLlNlcnZpY2U7Ci1pbXBvcnQgamF2YXgud3NkbC5leHRlbnNpb25zLnNvYXAuU09BUEFkZHJlc3M7Ci1pbXBvcnQgamF2YXgud3NkbC5mYWN0b3J5LldTRExGYWN0b3J5OwotaW1wb3J0IGphdmF4LndzZGwueG1sLldTRExSZWFkZXI7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OwotCi0vKioKLSAqIFRlc3QgP3dzZGwgd29ya3MgYW5kIHRoYXQgdGhlIHJldHVybmVkIFdTREwgaGFzIHRoZSBjb3JyZWN0IGVuZHBvaW50Ci0gKgotICogQHZlcnNpb24gJFJldiQgJERhdGUkCi0gKi8KLXB1YmxpYyBjbGFzcyBRdWVzdGlvbk1hcmtXU0RMSW1wb3J0VGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLSAgICBwcml2YXRlIE5vZGUgbm9kZTsKLQotICAgIC8qKgotICAgICAqIFRlc3RzID93c2RsIHdvcmtzIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IHBvcnQgZW5kcG9pbnQgZnJvbSB0aGUgV1NETAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHRlc3RXU0RMSW1wb3J0UG9ydEVuZHBvaW50KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIElucHV0U3RyZWFtIGlucCA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4Ni9BY2NvdW50U2VydmljZT93c2RsIikub3BlblN0cmVhbSgpOwotICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wKSk7Ci0gICAgICAgIFN0cmluZyBsaW5lOwotICAgICAgICB3aGlsZSgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKLSAgICAgICAgfQotICAgICAgICBici5jbG9zZSgpOwotCi0gICAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IFdTRExGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3V1NETFJlYWRlcigpOwotICAgICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoImphdmF4LndzZGwudmVyYm9zZSIsIGZhbHNlKTsKLSAgICAgICAgd3NkbFJlYWRlci5zZXRGZWF0dXJlKCJqYXZheC53c2RsLmltcG9ydERvY3VtZW50cyIsIHRydWUpOwotCi0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxSZWFkZXIucmVhZFdTREwoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4Ni9BY2NvdW50U2VydmljZT93c2RsIik7Ci0gICAgICAgIGFzc2VydE5vdE51bGwoZGVmaW5pdGlvbik7Ci0gICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IGRlZmluaXRpb24uZ2V0U2VydmljZShuZXcgUU5hbWUoImh0dHA6Ly9hY2NvdW50Mi9BY2NvdW50U2VydmljZS9BY2NvdW50IiwgIkFjY291bnRTZXJ2aWNlIikpOwotICAgICAgICBQb3J0IHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoIkFjY291bnRQb3J0Iik7Ci0KLSAgICAgICAgU3RyaW5nIGVuZHBvaW50ID0gZ2V0RW5kcG9pbnQocG9ydCk7Ci0gICAgICAgLy8gU3RyaW5nIGlwID0gSHR0cFV0aWxzLmdldElwQWRkcmVzcygpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4Ni9BY2NvdW50U2VydmljZSIsIGVuZHBvaW50KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBnZXRFbmRwb2ludChQb3J0IHBvcnQpIHsKLSAgICAgICAgTGlzdCB3c2RsUG9ydEV4dGVuc2lvbnMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBleHRlbnNpb24gOiB3c2RsUG9ydEV4dGVuc2lvbnMpIHsKLSAgICAgICAgICAgIGlmIChleHRlbnNpb24gaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykgewotICAgICAgICAgICAgICAgIHJldHVybiAoKFNPQVBBZGRyZXNzKSBleHRlbnNpb24pLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm5vIFNPQVBBZGRyZXNzIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3RyaW5nIGNvbnRyaWJ1dGlvbiA9ICJ0YXJnZXQvY2xhc3NlcyI7Ci0gICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoIm9yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstd3NkbC1pbXBvcnQuY29tcG9zaXRlIiwgbmV3IENvbnRyaWJ1dGlvbigidGVzdCIsIGNvbnRyaWJ1dGlvbikpOwotICAgICAgICBub2RlLnN0YXJ0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgbm9kZS5zdG9wKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9pdGVzdC93cy93c2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL1F1ZXN0aW9uTWFya1dTRExJbmNsdWRlVGVzdENhc2UuamF2YSBiL2l0ZXN0L3dzL3dzZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvUXVlc3Rpb25NYXJrV1NETEluY2x1ZGVUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGE0MGFmLi4wMDAwMDAwCi0tLSBhL2l0ZXN0L3dzL3dzZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvUXVlc3Rpb25NYXJrV1NETEluY2x1ZGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuYXhpczI7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247Ci1pbXBvcnQgamF2YXgud3NkbC5Qb3J0OwotaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKLWltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKLWltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7Ci0KLS8qKgotICogVGVzdCA/d3NkbCB3b3JrcyBhbmQgdGhhdCB0aGUgcmV0dXJuZWQgV1NETCBoYXMgdGhlIGNvcnJlY3QgZW5kcG9pbnQKLSAqCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotcHVibGljIGNsYXNzIFF1ZXN0aW9uTWFya1dTRExJbmNsdWRlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLSAgICBwcml2YXRlIE5vZGUgbm9kZTsKLQotICAgIC8qKgotICAgICAqIFRlc3RzID93c2RsIHdvcmtzIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IHBvcnQgZW5kcG9pbnQgZnJvbSB0aGUgV1NETAotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHRlc3RXU0RMSW5jbHVkZVBvcnRFbmRwb2ludCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBJbnB1dFN0cmVhbSBpbnAgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvQWNjb3VudFNlcnZpY2U/d3NkbCIpLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlucCkpOwotICAgICAgICBTdHJpbmcgbGluZTsKLSAgICAgICAgd2hpbGUoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnIuY2xvc2UoKTsKLQotICAgICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1dTRExSZWFkZXIoKTsKLSAgICAgICAgd3NkbFJlYWRlci5zZXRGZWF0dXJlKCJqYXZheC53c2RsLnZlcmJvc2UiLCBmYWxzZSk7Ci0gICAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZSgiamF2YXgud3NkbC5pbXBvcnREb2N1bWVudHMiLCB0cnVlKTsKLQotICAgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsUmVhZGVyLnJlYWRXU0RMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvQWNjb3VudFNlcnZpY2U/d3NkbCIpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGRlZmluaXRpb24pOwotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBkZWZpbml0aW9uLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vYWNjb3VudHMvQWNjb3VudFNlcnZpY2UvQWNjb3VudCIsICJBY2NvdW50U2VydmljZSIpKTsKLSAgICAgICAgUG9ydCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KCJBY2NvdW50UG9ydCIpOwotCi0gICAgICAgIFN0cmluZyBlbmRwb2ludCA9IGdldEVuZHBvaW50KHBvcnQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9BY2NvdW50U2VydmljZSIsIGVuZHBvaW50KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIFN0cmluZyBnZXRFbmRwb2ludChQb3J0IHBvcnQpIHsKLSAgICAgICAgTGlzdCB3c2RsUG9ydEV4dGVuc2lvbnMgPSBwb3J0LmdldEV4dGVuc2liaWxpdHlFbGVtZW50cygpOwotICAgICAgICBmb3IgKGZpbmFsIE9iamVjdCBleHRlbnNpb24gOiB3c2RsUG9ydEV4dGVuc2lvbnMpIHsKLSAgICAgICAgICAgIGlmIChleHRlbnNpb24gaW5zdGFuY2VvZiBTT0FQQWRkcmVzcykgewotICAgICAgICAgICAgICAgIHJldHVybiAoKFNPQVBBZGRyZXNzKSBleHRlbnNpb24pLmdldExvY2F0aW9uVVJJKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIm5vIFNPQVBBZGRyZXNzIik7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3RyaW5nIGNvbnRyaWJ1dGlvbiA9ICJ0YXJnZXQvY2xhc3NlcyI7Ci0gICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoIm9yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstd3NkbC1pbmNsdWRlLmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oInRlc3QiLCBjb250cmlidXRpb24pKTsKLSAgICAgICAgbm9kZS5zdGFydCgpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIG5vZGUuc3RvcCgpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9RdWVzdGlvbk1hcmtXU0RMVGVzdENhc2UuamF2YSBiL2l0ZXN0L3dzL3dzZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvUXVlc3Rpb25NYXJrV1NETFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxNDg0NjAuLjAwMDAwMDAKLS0tIGEvaXRlc3Qvd3Mvd3NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9RdWVzdGlvbk1hcmtXU0RMVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5heGlzMjsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGphdmF4LndzZGwuRGVmaW5pdGlvbjsKLWltcG9ydCBqYXZheC53c2RsLlBvcnQ7Ci1pbXBvcnQgamF2YXgud3NkbC5TZXJ2aWNlOwotaW1wb3J0IGphdmF4LndzZGwuZXh0ZW5zaW9ucy5zb2FwLlNPQVBBZGRyZXNzOwotaW1wb3J0IGphdmF4LndzZGwuZmFjdG9yeS5XU0RMRmFjdG9yeTsKLWltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKLQotLyoqCi0gKiBUZXN0ID93c2RsIHdvcmtzIGFuZCB0aGF0IHRoZSByZXR1cm5lZCBXU0RMIGhhcyB0aGUgY29ycmVjdCBlbmRwb2ludAotICoKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgUXVlc3Rpb25NYXJrV1NETFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCi0gICAgcHJpdmF0ZSBOb2RlIG5vZGU7Ci0KLSAgICAvKioKLSAgICAgKiBUZXN0cyA/d3NkbCB3b3JrcyBhbmQgcmV0dXJucyB0aGUgY29ycmVjdCBwb3J0IGVuZHBvaW50IGZyb20gdGhlIFdTREwKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0V1NETFBvcnRFbmRwb2ludCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBJbnB1dFN0cmVhbSBpbnAgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvc2VydmljZXMvSGVsbG9Xb3JsZFdlYlNlcnZpY2UyP3dzZGwiKS5vcGVuU3RyZWFtKCk7Ci0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnApKTsKLSAgICAgICAgU3RyaW5nIGxpbmU7Ci0gICAgICAgIHdoaWxlKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgewotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOwotICAgICAgICB9Ci0gICAgICAgIGJyLmNsb3NlKCk7Ci0KLSAgICAgICAgV1NETFJlYWRlciB3c2RsUmVhZGVyID0gV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdXU0RMUmVhZGVyKCk7Ci0gICAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZSgiamF2YXgud3NkbC52ZXJib3NlIixmYWxzZSk7Ci0gICAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZSgiamF2YXgud3NkbC5pbXBvcnREb2N1bWVudHMiLHRydWUpOwotCi0gICAgICAgIERlZmluaXRpb24gZGVmaW5pdGlvbiA9IHdzZGxSZWFkZXIucmVhZFdTREwoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9zZXJ2aWNlcy9IZWxsb1dvcmxkV2ViU2VydmljZTI/d3NkbCIpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGRlZmluaXRpb24pOwotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBkZWZpbml0aW9uLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS9IZWxsb1dvcmxkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG9Xb3JsZFNlcnZpY2UiKSk7ICAgICAgICAKLSAgICAgICAgUG9ydCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KCJIZWxsb1dvcmxkUG9ydCIpOwotCi0gICAgICAgIFN0cmluZyBlbmRwb2ludCA9IGdldEVuZHBvaW50KHBvcnQpOwotICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9zZXJ2aWNlcy9IZWxsb1dvcmxkV2ViU2VydmljZTIiLCBlbmRwb2ludCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogVGVzdHMgP3dzZGwgd29ya3MgYW5kIHJldHVybnMgdGhlIGNvcnJlY3QgcG9ydCBlbmRwb2ludCBmcm9tIGJpbmRpbmcud3Mgd2l0aCBhIGN1c3RvbSBVUkkKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q3VzdG9tRW5kcG9pbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgSW5wdXRTdHJlYW0gaW5wID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDg1L2Zvby9iYXI/d3NkbCIpLm9wZW5TdHJlYW0oKTsKLSAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlucCkpOwotICAgICAgICBTdHJpbmcgbGluZTsKLSAgICAgICAgd2hpbGUoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnIuY2xvc2UoKTsKLQotICAgICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1dTRExSZWFkZXIoKTsKLSAgICAgICAgd3NkbFJlYWRlci5zZXRGZWF0dXJlKCJqYXZheC53c2RsLnZlcmJvc2UiLGZhbHNlKTsKLSAgICAgICAgd3NkbFJlYWRlci5zZXRGZWF0dXJlKCJqYXZheC53c2RsLmltcG9ydERvY3VtZW50cyIsdHJ1ZSk7Ci0KLSAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETCgiaHR0cDovL2xvY2FsaG9zdDo4MDg1L2Zvby9iYXI/d3NkbCIpOwotICAgICAgICBhc3NlcnROb3ROdWxsKGRlZmluaXRpb24pOwotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBkZWZpbml0aW9uLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vYXhpczIud3MuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvV29ybGRTZXJ2aWNlIikpOwotICAgICAgICBQb3J0IHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoIkhlbGxvV29ybGRQb3J0Iik7Ci0KLSAgICAgICAgU3RyaW5nIGVuZHBvaW50ID0gZ2V0RW5kcG9pbnQocG9ydCk7Ci0gICAgICAgIC8vIFRPRE8gLSB1c2VkIHRvIGdldCB0aGUgcmVhbCBob3N0IGhlcmUgYnV0IFdTREwgc2VlbXMgdG8gaGF2ZSBsb2NhbGhvc3QgaW4gaXQgYXRtPwotICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9mb28vYmFyIiwgZW5kcG9pbnQpOwotICAgIH0KLQotICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0RW5kcG9pbnQoUG9ydCBwb3J0KSB7Ci0gICAgICAgIExpc3Qgd3NkbFBvcnRFeHRlbnNpb25zID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKLSAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgZXh0ZW5zaW9uIDogd3NkbFBvcnRFeHRlbnNpb25zKSB7Ci0gICAgICAgICAgICBpZiAoZXh0ZW5zaW9uIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKChTT0FQQWRkcmVzcykgZXh0ZW5zaW9uKS5nZXRMb2NhdGlvblVSSSgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJubyBTT0FQQWRkcmVzcyIpOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZyBjb250cmlidXRpb24gPSAidGFyZ2V0L2NsYXNzZXMiOwotICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJvcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLXdzZGwuY29tcG9zaXRlIiwgbmV3IENvbnRyaWJ1dGlvbigidGVzdCIsIGNvbnRyaWJ1dGlvbikpOwotICAgICAgICBub2RlLnN0YXJ0KCk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgbm9kZS5zdG9wKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvcG9tLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZjdiZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvcG9tLnhtbApAQCAtMCwwICsxLDU0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2QiPg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1hcmNoZXR5cGU8L2FydGlmYWN0SWQ+DQorICAgIDxwYWNrYWdpbmc+bWF2ZW4tYXJjaGV0eXBlPC9wYWNrYWdpbmc+DQorICAgIDxuYW1lPkNyZWF0ZSBhIFR1c2NhbnkgYmluZGluZyBleHRlbnNpb24gcHJvamVjdDwvbmFtZT4NCisgICAgPGRlc2NyaXB0aW9uPkNyZWF0ZSBhIFR1c2NhbnkgYmluZGluZyBleHRlbnNpb24gcHJvamVjdDwvZGVzY3JpcHRpb24+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGV4dGVuc2lvbnM+DQorICAgICAgICAgIDxleHRlbnNpb24+DQorICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uYXJjaGV0eXBlPC9ncm91cElkPg0KKyAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcmNoZXR5cGUtcGFja2FnaW5nPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtNTwvdmVyc2lvbj4NCisgICAgICAgICAgPC9leHRlbnNpb24+DQorICAgICAgIDwvZXh0ZW5zaW9ucz4NCisNCisgICAgICAgPHBsdWdpbk1hbmFnZW1lbnQ+DQorICAgICAgICAgIDxwbHVnaW5zPg0KKyAgICAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtNTwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPg0KKyAgICAgICAgICAgICA8L3BsdWdpbj4NCisgICAgICAgICAgPC9wbHVnaW5zPg0KKyAgICAgICA8L3BsdWdpbk1hbmFnZW1lbnQ+DQorICAgIDwvYnVpbGQ+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDM4MDM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sCkBAIC0wLDAgKzEsNjEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPGFyY2hldHlwZS1kZXNjcmlwdG9yIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvcGx1Z2lucy9tYXZlbi1hcmNoZXR5cGUtcGx1Z2luL2FyY2hldHlwZS1kZXNjcmlwdG9yLzEuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9hcmNoZXR5cGUtZGVzY3JpcHRvci0xLjAuMC54c2QiIG5hbWU9InR1c2NhbnktYmluZGluZy1mb28tcnVudGltZSINCisgICAgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3BsdWdpbnMvbWF2ZW4tYXJjaGV0eXBlLXBsdWdpbi9hcmNoZXR5cGUtZGVzY3JpcHRvci8xLjAuMCINCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSI+DQorDQorICA8cmVxdWlyZWRQcm9wZXJ0aWVzPg0KKyAgICA8cmVxdWlyZWRQcm9wZXJ0eSBrZXk9ImJpbmRpbmdOYW1lIj4NCisgICAgPC9yZXF1aXJlZFByb3BlcnR5Pg0KKyAgPC9yZXF1aXJlZFByb3BlcnRpZXM+DQorDQorICA8ZmlsZVNldHM+DQorICAgIDxmaWxlU2V0IGZpbHRlcmVkPSJ0cnVlIiBwYWNrYWdlZD0idHJ1ZSIgZW5jb2Rpbmc9IlVURi04Ij4NCisgICAgICA8ZGlyZWN0b3J5PnNyYy9tYWluL2phdmE8L2RpcmVjdG9yeT4NCisgICAgICA8aW5jbHVkZXM+DQorICAgICAgICA8aW5jbHVkZT4qKi8qLmphdmE8L2luY2x1ZGU+DQorICAgICAgPC9pbmNsdWRlcz4NCisgICAgPC9maWxlU2V0Pg0KKyAgICA8ZmlsZVNldCBmaWx0ZXJlZD0idHJ1ZSIgZW5jb2Rpbmc9IlVURi04Ij4NCisgICAgICA8ZGlyZWN0b3J5PnNyYy9tYWluL3Jlc291cmNlczwvZGlyZWN0b3J5Pg0KKyAgICAgIDxpbmNsdWRlcz4NCisgICAgICAgIDxpbmNsdWRlPioqLyouKjwvaW5jbHVkZT4NCisgICAgICA8L2luY2x1ZGVzPg0KKyAgICA8L2ZpbGVTZXQ+DQorICAgIDxmaWxlU2V0IGZpbHRlcmVkPSJ0cnVlIiBlbmNvZGluZz0iVVRGLTgiPg0KKyAgICAgIDxkaXJlY3Rvcnk+c3JjL3Rlc3QvamF2YTwvZGlyZWN0b3J5Pg0KKyAgICAgIDxpbmNsdWRlcz4NCisgICAgICAgIDxpbmNsdWRlPioqLyouamF2YTwvaW5jbHVkZT4NCisgICAgICA8L2luY2x1ZGVzPg0KKyAgICA8L2ZpbGVTZXQ+DQorICAgIDxmaWxlU2V0IGZpbHRlcmVkPSJ0cnVlIiBlbmNvZGluZz0iVVRGLTgiPg0KKyAgICAgIDxkaXJlY3Rvcnk+c3JjL3Rlc3QvcmVzb3VyY2VzPC9kaXJlY3Rvcnk+DQorICAgICAgPGluY2x1ZGVzPg0KKyAgICAgICAgPGluY2x1ZGU+KiovKi4qPC9pbmNsdWRlPg0KKyAgICAgIDwvaW5jbHVkZXM+DQorICAgIDwvZmlsZVNldD4NCisgICAgPGZpbGVTZXQgZmlsdGVyZWQ9InRydWUiIGVuY29kaW5nPSJVVEYtOCI+DQorICAgICAgPGRpcmVjdG9yeT5NRVRBLUlORjwvZGlyZWN0b3J5Pg0KKyAgICAgIDxpbmNsdWRlcz4NCisgICAgICAgIDxpbmNsdWRlPk1BTklGRVNULk1GPC9pbmNsdWRlPg0KKyAgICAgIDwvaW5jbHVkZXM+DQorICAgIDwvZmlsZVNldD4NCisgIDwvZmlsZVNldHM+DQorPC9hcmNoZXR5cGUtZGVzY3JpcHRvcj4NCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4NWI4YwotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDE3IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitTQ0EtVmVyc2lvbjogMS4xDQorQnVuZGxlLU5hbWU6IEFwYWNoZSBUdXNjYW55IFNDQSAke2JpbmRpbmdOYW1lfSBCaW5kaW5nDQorQnVuZGxlLVZlbmRvcjogVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQorQnVuZGxlLVZlcnNpb246IDIuMC4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1MaWNlbnNlOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0DQorQnVuZGxlLURlc2NyaXB0aW9uOiBBcGFjaGUgVHVzY2FueSBTQ0EgJHtiaW5kaW5nTmFtZX0gQmluZGluZw0KK0ltcG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWY7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb247dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lO3ZlcnNpb249IjIuMC4wIg0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy4ke2FydGlmYWN0SWR9DQorQnVuZGxlLURvY1VSTDogaHR0cDovL3d3dy5hcGFjaGUub3JnLw0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNSxKYXZhU0UtMS42DQpkaWZmIC0tZ2l0IGEvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJhOThiCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKQEAgLTAsMCArMSw5NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktbW9kdWxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+YmluZGluZy0ke2FydGlmYWN0SWR9PC9hcnRpZmFjdElkPg0KKyAgICA8Z3JvdXBJZD4ke2dyb3VwSWR9PC9ncm91cElkPg0KKyAgICA8dmVyc2lvbj4ke3ZlcnNpb259PC92ZXJzaW9uPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgJHtiaW5kaW5nTmFtZX0gQmluZGluZyBFeHRlbnNpb248L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHkteG1sPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtaHR0cDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gICANCisgICAgICAgICAgICAgICAgDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvX19iaW5kaW5nTmFtZV9fQmluZGluZy5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvX19iaW5kaW5nTmFtZV9fQmluZGluZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5Y2JkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9fX2JpbmRpbmdOYW1lX19CaW5kaW5nLmphdmEKQEAgLTAsMCArMSw1MiBAQAorI3NldCggJHN5bWJvbF9wb3VuZCA9ICcjJyApCisjc2V0KCAkc3ltYm9sX2RvbGxhciA9ICckJyApCisjc2V0KCAkc3ltYm9sX2VzY2FwZSA9ICdcJyApCisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorcGFja2FnZSAke3BhY2thZ2V9Ow0KKw0KK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJhc2VCaW5kaW5nSW1wbDsNCisNCisvKioNCisgKiBSZXByZXNlbnRzIGEgYmluZGluZyB0byBhICR7YmluZGluZ05hbWV9IHNlcnZpY2UuDQorICovDQorcHVibGljIGNsYXNzICR7YmluZGluZ05hbWV9QmluZGluZyBleHRlbmRzIEJhc2VCaW5kaW5nSW1wbCB7DQorDQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgVFlQRSA9IG5ldyBRTmFtZShTQ0ExMV9UVVNDQU5ZX05TLCAiYmluZGluZy4ke2FydGlmYWN0SWR9Iik7DQorDQorICAgIHByaXZhdGUgU3RyaW5nIHNvbWVBdHRyOw0KKw0KKyAgICBwdWJsaWMgJHtiaW5kaW5nTmFtZX1CaW5kaW5nKCkgew0KKyAgICB9DQorDQorICAgIHB1YmxpYyBRTmFtZSBnZXRUeXBlKCkgew0KKyAgICAgICAgcmV0dXJuIFRZUEU7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U29tZUF0dHIoKSB7DQorICAgICAgICByZXR1cm4gc29tZUF0dHI7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgc2V0U29tZUF0dHIoU3RyaW5nIHNvbWVBdHRyKSB7DQorICAgICAgICB0aGlzLnNvbWVBdHRyID0gc29tZUF0dHI7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvX19iaW5kaW5nTmFtZV9fQmluZGluZ0ZhY3RvcnkuamF2YSBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL19fYmluZGluZ05hbWVfX0JpbmRpbmdGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWUxY2Q4OAotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL19fYmluZGluZ05hbWVfX0JpbmRpbmdGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzNSBAQAorI3NldCggJHN5bWJvbF9wb3VuZCA9ICcjJyApCisjc2V0KCAkc3ltYm9sX2RvbGxhciA9ICckJyApCisjc2V0KCAkc3ltYm9sX2VzY2FwZSA9ICdcJyApCisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSAke3BhY2thZ2V9Ow0KKw0KKw0KKy8qKg0KKyAqIEZhY3RvcnkgaW1wbGVtZW50YXRpb24gdG8gY3JlYXRlICR7YmluZGluZ05hbWV9IE1vZGVscw0KKyAqLw0KK3B1YmxpYyBjbGFzcyAke2JpbmRpbmdOYW1lfUJpbmRpbmdGYWN0b3J5IHsNCisNCisgICAgcHVibGljICR7YmluZGluZ05hbWV9QmluZGluZyBjcmVhdGUke2JpbmRpbmdOYW1lfUJpbmRpbmcoKSB7DQorICAgICAgICByZXR1cm4gbmV3ICR7YmluZGluZ05hbWV9QmluZGluZygpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3J1bnRpbWUvX19iaW5kaW5nTmFtZV9fQmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvcnVudGltZS9fX2JpbmRpbmdOYW1lX19CaW5kaW5nUHJvdmlkZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNjNmJmMwotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3J1bnRpbWUvX19iaW5kaW5nTmFtZV9fQmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKyNzZXQoICRzeW1ib2xfcG91bmQgPSAnIycgKQorI3NldCggJHN5bWJvbF9kb2xsYXIgPSAnJCcgKQorI3NldCggJHN5bWJvbF9lc2NhcGUgPSAnXCcgKQorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgJHtwYWNrYWdlfS5ydW50aW1lOw0KKw0KK2ltcG9ydCAke3BhY2thZ2V9LiR7YmluZGluZ05hbWV9QmluZGluZzsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5SZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuU2VydmljZUJpbmRpbmdQcm92aWRlcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZTsNCisNCitwdWJsaWMgY2xhc3MgJHtiaW5kaW5nTmFtZX1CaW5kaW5nUHJvdmlkZXJGYWN0b3J5IGltcGxlbWVudHMgQmluZGluZ1Byb3ZpZGVyRmFjdG9yeTwke2JpbmRpbmdOYW1lfUJpbmRpbmc+IHsNCisNCisgICAgcHVibGljICR7YmluZGluZ05hbWV9QmluZGluZ1Byb3ZpZGVyRmFjdG9yeShFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGV4dGVuc2lvblBvaW50cykgew0KKyAgICB9DQorDQorICAgIHB1YmxpYyBDbGFzczwke2JpbmRpbmdOYW1lfUJpbmRpbmc+IGdldE1vZGVsVHlwZSgpIHsNCisgICAgICAgIHJldHVybiAke2JpbmRpbmdOYW1lfUJpbmRpbmcuY2xhc3M7DQorICAgIH0NCisNCisgICAgcHVibGljIFJlZmVyZW5jZUJpbmRpbmdQcm92aWRlciBjcmVhdGVSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIoUnVudGltZUVuZHBvaW50UmVmZXJlbmNlIGVuZHBvaW50KSB7DQorICAgICAgICByZXR1cm4gbmV3ICR7YmluZGluZ05hbWV9UmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyKGVuZHBvaW50KTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU2VydmljZUJpbmRpbmdQcm92aWRlciBjcmVhdGVTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyKFJ1bnRpbWVFbmRwb2ludCBlbmRwb2ludCkgew0KKyAgICAgICAgcmV0dXJuIG5ldyAke2JpbmRpbmdOYW1lfVNlcnZpY2VCaW5kaW5nUHJvdmlkZXIoZW5kcG9pbnQpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3J1bnRpbWUvX19iaW5kaW5nTmFtZV9fUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyLmphdmEgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9ydW50aW1lL19fYmluZGluZ05hbWVfX1JlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMjk5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9ydW50aW1lL19fYmluZGluZ05hbWVfX1JlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNTggQEAKKyNzZXQoICRzeW1ib2xfcG91bmQgPSAnIycgKQorI3NldCggJHN5bWJvbF9kb2xsYXIgPSAnJCcgKQorI3NldCggJHN5bWJvbF9lc2NhcGUgPSAnXCcgKQorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgJHtwYWNrYWdlfS5ydW50aW1lOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkVuZHBvaW50UmVmZXJlbmNlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2VDb250cmFjdDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5SZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXI7DQorDQorcHVibGljIGNsYXNzICR7YmluZGluZ05hbWV9UmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyIGltcGxlbWVudHMgUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyIHsNCisNCisgICAgcHJpdmF0ZSBFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludDsNCisgICAgcHJpdmF0ZSBJbnRlcmZhY2VDb250cmFjdCBjb250cmFjdDsNCisNCisgICAgcHVibGljICR7YmluZGluZ05hbWV9UmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyKEVuZHBvaW50UmVmZXJlbmNlIGVuZHBvaW50KSB7DQorICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBJbnZva2VyIGNyZWF0ZUludm9rZXIoT3BlcmF0aW9uIG9wZXJhdGlvbikgew0KKyAgICAgICAgcmV0dXJuIG5ldyAke2JpbmRpbmdOYW1lfVJlZmVyZW5jZUludm9rZXIob3BlcmF0aW9uLCBlbmRwb2ludCk7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgc3RhcnQoKSB7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgSW50ZXJmYWNlQ29udHJhY3QgZ2V0QmluZGluZ0ludGVyZmFjZUNvbnRyYWN0KCkgew0KKyAgICAgICAgcmV0dXJuIGNvbnRyYWN0Ow0KKyAgICB9DQorDQorICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzT25lV2F5SW52b2NhdGlvbigpIHsNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9ydW50aW1lL19fYmluZGluZ05hbWVfX1JlZmVyZW5jZUludm9rZXIuamF2YSBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3J1bnRpbWUvX19iaW5kaW5nTmFtZV9fUmVmZXJlbmNlSW52b2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZTJiZDEKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9ydW50aW1lL19fYmluZGluZ05hbWVfX1JlZmVyZW5jZUludm9rZXIuamF2YQpAQCAtMCwwICsxLDU2IEBACisjc2V0KCAkc3ltYm9sX3BvdW5kID0gJyMnICkKKyNzZXQoICRzeW1ib2xfZG9sbGFyID0gJyQnICkKKyNzZXQoICRzeW1ib2xfZXNjYXBlID0gJ1wnICkKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlICR7cGFja2FnZX0ucnVudGltZTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5FbmRwb2ludFJlZmVyZW5jZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2U7DQorDQorcHVibGljIGNsYXNzICR7YmluZGluZ05hbWV9UmVmZXJlbmNlSW52b2tlciBpbXBsZW1lbnRzIEludm9rZXIgew0KKyAgICANCisgICAgcHJvdGVjdGVkIE9wZXJhdGlvbiBvcGVyYXRpb247DQorICAgIHByb3RlY3RlZCBFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludDsNCisNCisgICAgcHVibGljICR7YmluZGluZ05hbWV9UmVmZXJlbmNlSW52b2tlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludCkgew0KKyAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247DQorICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7DQorICAgIH0NCisNCisgICAgcHVibGljIE1lc3NhZ2UgaW52b2tlKE1lc3NhZ2UgbXNnKSB7DQorICAgICAgICB0cnkgew0KKw0KKyAgICAgICAgICAgIHJldHVybiBkb0ludm9rZShtc2cpOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgTWVzc2FnZSBkb0ludm9rZShNZXNzYWdlIG1zZykgew0KKyAgICAgICAgLy8gQWRkIHNvbWUgY29kZSBoZXJlIHRvIG1ha2UgYW4gaW52b2NhdGlvbiBvdmVyIHRoZSAke2JpbmRpbmdOYW1lfSBiaW5kaW5nIHByb3RvY29sDQorICAgICAgICAvLyBGb3IgdGhpcyBzYW1wbGUgd2UnbGwganVzdCBnZXQgaXQgZnJvbSB0aGUgc3RhdGljIHN0YXNoDQorICAgICAgICAke2JpbmRpbmdOYW1lfVNlcnZpY2VJbnZva2VyIGZpID0gJHtiaW5kaW5nTmFtZX1TdGFzaC5nZXRTZXJ2aWNlKGVuZHBvaW50LmdldEJpbmRpbmcoKS5nZXRVUkkoKSk7DQorICAgICAgICByZXR1cm4gZmkuaW52b2tlU2VydmljZShtc2cpOw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3J1bnRpbWUvX19iaW5kaW5nTmFtZV9fU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvcnVudGltZS9fX2JpbmRpbmdOYW1lX19TZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlkNDEwOQotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3J1bnRpbWUvX19iaW5kaW5nTmFtZV9fU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKyNzZXQoICRzeW1ib2xfcG91bmQgPSAnIycgKQorI3NldCggJHN5bWJvbF9kb2xsYXIgPSAnJCcgKQorI3NldCggJHN5bWJvbF9lc2NhcGUgPSAnXCcgKQorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgJHtwYWNrYWdlfS5ydW50aW1lOw0KKw0KK2ltcG9ydCAke3BhY2thZ2V9LiR7YmluZGluZ05hbWV9QmluZGluZzsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlQ29udHJhY3Q7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuU2VydmljZUJpbmRpbmdQcm92aWRlcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsNCisNCitwdWJsaWMgY2xhc3MgJHtiaW5kaW5nTmFtZX1TZXJ2aWNlQmluZGluZ1Byb3ZpZGVyIGltcGxlbWVudHMgU2VydmljZUJpbmRpbmdQcm92aWRlciB7DQorDQorICAgIHByaXZhdGUgUnVudGltZUVuZHBvaW50IGVuZHBvaW50Ow0KKyAgICBwcml2YXRlIEludGVyZmFjZUNvbnRyYWN0IGNvbnRyYWN0Ow0KKw0KKyAgICBwdWJsaWMgJHtiaW5kaW5nTmFtZX1TZXJ2aWNlQmluZGluZ1Byb3ZpZGVyKFJ1bnRpbWVFbmRwb2ludCBlbmRwb2ludCkgew0KKyAgICAgICAgdGhpcy5lbmRwb2ludCA9IGVuZHBvaW50Ow0KKyAgICB9DQorDQorICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgew0KKyAgICAgICAgLy8gYWRkIHNvbWUgY29kZSBoZXJlIHRvIHN0YXJ0IHRoZSBzZXJ2aWNlDQorDQorICAgICAgICAvLyBGb3IgdGhpcyBzYW1wbGUgd2UnbGwganVzdCBzaGFyZSBpdCBpbiBhIHN0YXRpYw0KKyAgICAgICAgJHtiaW5kaW5nTmFtZX1TdGFzaC5hZGRTZXJ2aWNlKGVuZHBvaW50LmdldEJpbmRpbmcoKS5nZXRVUkkoKSwgbmV3ICR7YmluZGluZ05hbWV9U2VydmljZUludm9rZXIoZW5kcG9pbnQpKTsNCisgICAgICAgIA0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJzb21lQXR0cj0iICsgKCgke2JpbmRpbmdOYW1lfUJpbmRpbmcpZW5kcG9pbnQuZ2V0QmluZGluZygpKS5nZXRTb21lQXR0cigpKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBzdG9wKCkgew0KKyAgICAgICAgJHtiaW5kaW5nTmFtZX1TdGFzaC5yZW1vdmVTZXJ2aWNlKGVuZHBvaW50LmdldEJpbmRpbmcoKS5nZXRVUkkoKSk7DQorICAgIH0NCisNCisgICAgcHVibGljIEludGVyZmFjZUNvbnRyYWN0IGdldEJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCgpIHsNCisgICAgICAgIHJldHVybiBjb250cmFjdDsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c09uZVdheUludm9jYXRpb24oKSB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvcnVudGltZS9fX2JpbmRpbmdOYW1lX19TZXJ2aWNlSW52b2tlci5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvcnVudGltZS9fX2JpbmRpbmdOYW1lX19TZXJ2aWNlSW52b2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYTIwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9ydW50aW1lL19fYmluZGluZ05hbWVfX1NlcnZpY2VJbnZva2VyLmphdmEKQEAgLTAsMCArMSw0MyBAQAorI3NldCggJHN5bWJvbF9wb3VuZCA9ICcjJyApCisjc2V0KCAkc3ltYm9sX2RvbGxhciA9ICckJyApCisjc2V0KCAkc3ltYm9sX2VzY2FwZSA9ICdcJyApCisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSAke3BhY2thZ2V9LnJ1bnRpbWU7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50Ow0KKw0KK3B1YmxpYyBjbGFzcyAke2JpbmRpbmdOYW1lfVNlcnZpY2VJbnZva2VyIHsNCisNCisgICAgcHJpdmF0ZSBSdW50aW1lRW5kcG9pbnQgd2lyZTsNCisgICAgDQorICAgIHB1YmxpYyAke2JpbmRpbmdOYW1lfVNlcnZpY2VJbnZva2VyKFJ1bnRpbWVFbmRwb2ludCB3aXJlKSB7DQorICAgICAgICB0aGlzLndpcmUgPSB3aXJlOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBTZW5kIHRoZSByZXF1ZXN0IGRvd24gdGhlIHdpcmUgdG8gaW52b2tlIHRoZSBzZXJ2aWNlIA0KKyAgICAgKi8NCisgICAgcHVibGljIE1lc3NhZ2UgaW52b2tlU2VydmljZShNZXNzYWdlIG1zZykgew0KKyAgICAgICAgcmV0dXJuIHdpcmUuaW52b2tlKG1zZyk7DQorICAgIH0NCisgICAgDQorfQ0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3J1bnRpbWUvX19iaW5kaW5nTmFtZV9fU3Rhc2guamF2YSBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3J1bnRpbWUvX19iaW5kaW5nTmFtZV9fU3Rhc2guamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTZhMTBlCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvcnVudGltZS9fX2JpbmRpbmdOYW1lX19TdGFzaC5qYXZhCkBAIC0wLDAgKzEsNDcgQEAKKyNzZXQoICRzeW1ib2xfcG91bmQgPSAnIycgKQorI3NldCggJHN5bWJvbF9kb2xsYXIgPSAnJCcgKQorI3NldCggJHN5bWJvbF9lc2NhcGUgPSAnXCcgKQorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgJHtwYWNrYWdlfS5ydW50aW1lOw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsNCitpbXBvcnQgamF2YS51dGlsLk1hcDsNCisNCisvKioNCisgKiBTaW1wbGlzdGljIHN0YXRpYyBNYXAgdG8gc2hhcmUgc2VydmljZSBlbmRwb2ludHMgd2l0aCByZWZlcmVuY2VzDQorICovDQorcHVibGljIGNsYXNzICR7YmluZGluZ05hbWV9U3Rhc2ggew0KKyAgICANCisgICAgcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgJHtiaW5kaW5nTmFtZX1TZXJ2aWNlSW52b2tlcj4gc2VydmljZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsICR7YmluZGluZ05hbWV9U2VydmljZUludm9rZXI+KCk7DQorICAgIA0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgYWRkU2VydmljZShTdHJpbmcgdXJpLCAke2JpbmRpbmdOYW1lfVNlcnZpY2VJbnZva2VyICR7YmluZGluZ05hbWV9U2VydmljZUludm9rZXIpIHsNCisgICAgICAgIHNlcnZpY2VzLnB1dCh1cmksICR7YmluZGluZ05hbWV9U2VydmljZUludm9rZXIpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBzdGF0aWMgJHtiaW5kaW5nTmFtZX1TZXJ2aWNlSW52b2tlciBnZXRTZXJ2aWNlKFN0cmluZyB1cmkpIHsNCisgICAgICAgIHJldHVybiBzZXJ2aWNlcy5nZXQodXJpKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVtb3ZlU2VydmljZShTdHJpbmcgdXJpKSB7DQorICAgICAgICBzZXJ2aWNlcy5yZW1vdmUodXJpKTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL19fcGFja2FnZV9fLl9fYmluZGluZ05hbWVfX0JpbmRpbmdGYWN0b3J5IGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9fX3BhY2thZ2VfXy5fX2JpbmRpbmdOYW1lX19CaW5kaW5nRmFjdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzU5YjE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9fX3BhY2thZ2VfXy5fX2JpbmRpbmdOYW1lX19CaW5kaW5nRmFjdG9yeQpAQCAtMCwwICsxLDIwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorDQorIyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgbW9kZWwgZmFjdG9yeQ0KKyR7cGFja2FnZX0uJHtiaW5kaW5nTmFtZX1CaW5kaW5nRmFjdG9yeQ0KKw0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvciBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjQ5MTMzCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yCkBAIC0wLDAgKzEsMjAgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCisjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgYXJ0aWZhY3QgcHJvY2Vzc29yIGV4dGVuc2lvbg0KK29yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkueG1sLkRlZmF1bHRCZWFuTW9kZWxQcm9jZXNzb3I7cW5hbWU9aHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xI2JpbmRpbmcuJHthcnRpZmFjdElkfSxtb2RlbD0ke3BhY2thZ2V9LiR7YmluZGluZ05hbWV9QmluZGluZyxmYWN0b3J5PSR7cGFja2FnZX0uJHtiaW5kaW5nTmFtZX1CaW5kaW5nRmFjdG9yeQ0KKw0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlZhbGlkYXRpb25TY2hlbWEgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5WYWxpZGF0aW9uU2NoZW1hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzMzI2NGYKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5WYWxpZGF0aW9uU2NoZW1hCkBAIC0wLDAgKzEsMTkgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisjDQorYmluZGluZy0ke2FydGlmYWN0SWR9LnhzZA0KKw0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5IGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwY2ZiYwotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5CkBAIC0wLDAgKzEsMjAgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCisjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgYmluZGluZyBleHRlbnNpb24NCiske3BhY2thZ2V9LnJ1bnRpbWUuJHtiaW5kaW5nTmFtZX1CaW5kaW5nUHJvdmlkZXJGYWN0b3J5O21vZGVsPSR7cGFja2FnZX0uJHtiaW5kaW5nTmFtZX1CaW5kaW5nDQorDQpkaWZmIC0tZ2l0IGEvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9iaW5kaW5nLV9fYXJ0aWZhY3RJZF9fLnhzZCBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZy1fX2FydGlmYWN0SWRfXy54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRmODUzZQotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZy1fX2FydGlmYWN0SWRfXy54c2QKQEAgLTAsMCArMSwzNyBAQAorI3NldCggJGJpbmRpbmdOYW1lTEMgPSAke2JpbmRpbmdOYW1lfSApPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgDQorICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIiANCisgICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgIHhtbG5zOnQ9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIgDQorICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4NCisNCisgICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgLz4NCisNCisgICAgPGVsZW1lbnQgbmFtZT0iYmluZGluZy4ke2FydGlmYWN0SWR9IiB0eXBlPSJ0OiR7YmluZGluZ05hbWV9QmluZGluZyIgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpiaW5kaW5nIi8+DQorICAgIA0KKyAgICA8Y29tcGxleFR5cGUgbmFtZT0iJHtiaW5kaW5nTmFtZX1CaW5kaW5nIj4NCisgICAgICAgIDxjb21wbGV4Q29udGVudD4NCisgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpCaW5kaW5nIj4NCisgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzb21lQXR0ciIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+DQorICAgICAgICAgICAgPC9leHRlbnNpb24+DQorICAgICAgICA8L2NvbXBsZXhDb250ZW50Pg0KKyAgICA8L2NvbXBsZXhUeXBlPg0KKzwvc2NoZW1hPg0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU5ODJjZQotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKyNzZXQoICRzeW1ib2xfcG91bmQgPSAnIycgKQorI3NldCggJHN5bWJvbF9kb2xsYXIgPSAnJCcgKQorI3NldCggJHN5bWJvbF9lc2NhcGUgPSAnXCcgKQorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgaGVsbG93b3JsZDsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7DQorDQorcHVibGljIGNsYXNzIEhlbGxvV29ybGRDbGllbnQgaW1wbGVtZW50cyBIZWxsb1dvcmxkU2VydmljZSB7DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIEhlbGxvV29ybGRTZXJ2aWNlICByZWY7DQorICAgIA0KKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBuYW1lKSB7DQorICAgICAgICByZXR1cm4gcmVmLnNheUhlbGxvKG5hbWUpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YSBiL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjFmNjgyCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKyNzZXQoICRzeW1ib2xfcG91bmQgPSAnIycgKQorI3NldCggJHN5bWJvbF9kb2xsYXIgPSAnJCcgKQorI3NldCggJHN5bWJvbF9lc2NhcGUgPSAnXCcgKQorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgaGVsbG93b3JsZDsNCisNCisNCitwdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZEltcGwgaW1wbGVtZW50cyBIZWxsb1dvcmxkU2VydmljZSB7DQorDQorICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpIHsNCisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIG5hbWU7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTBkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzMSBAQAorI3NldCggJHN5bWJvbF9wb3VuZCA9ICcjJyApCisjc2V0KCAkc3ltYm9sX2RvbGxhciA9ICckJyApCisjc2V0KCAkc3ltYm9sX2VzY2FwZSA9ICdcJyApCisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBoZWxsb3dvcmxkOw0KKw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsNCisNCitAUmVtb3RhYmxlDQorcHVibGljIGludGVyZmFjZSBIZWxsb1dvcmxkU2VydmljZSB7DQorDQorICAgIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgbmFtZSk7DQorDQorfQ0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvdGVzdC9qYXZhL3Rlc3QvX19iaW5kaW5nTmFtZV9fQmluZGluZ1Rlc3RDYXNlLmphdmEgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvamF2YS90ZXN0L19fYmluZGluZ05hbWVfX0JpbmRpbmdUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODQ3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvamF2YS90ZXN0L19fYmluZGluZ05hbWVfX0JpbmRpbmdUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsNTUgQEAKKyNzZXQoICRzeW1ib2xfcG91bmQgPSAnIycgKQorI3NldCggJHN5bWJvbF9kb2xsYXIgPSAnJCcgKQorI3NldCggJHN5bWJvbF9lc2NhcGUgPSAnXCcgKQorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgdGVzdDsNCisNCitpbXBvcnQgaGVsbG93b3JsZC5IZWxsb1dvcmxkU2VydmljZTsNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCitpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7DQoraW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQorDQorcHVibGljIGNsYXNzICR7YmluZGluZ05hbWV9QmluZGluZ1Rlc3RDYXNlIHsNCisNCisgICAgcHJpdmF0ZSBzdGF0aWMgTm9kZSBub2RlOw0KKyAgICANCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdFNheUhlbGxvKCkgew0KKyAgICAgICAgSGVsbG9Xb3JsZFNlcnZpY2Ugc2VydmljZSA9IG5vZGUuZ2V0U2VydmljZShIZWxsb1dvcmxkU2VydmljZS5jbGFzcywgIkhlbGxvV29ybGRDbGllbnQvSGVsbG9Xb3JsZFNlcnZpY2UiKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkhlbGxvIGJvbyIsIHNlcnZpY2Uuc2F5SGVsbG8oImJvbyIpKTsNCisgICAgfQ0KKw0KKyAgICBAQmVmb3JlQ2xhc3MNCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGluaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoImhlbGxvd29ybGQuY29tcG9zaXRlIikuc3RhcnQoKTsNCisgICAgfQ0KKyAgICANCisgICAgQEFmdGVyQ2xhc3MNCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsNCisgICAgICAgICAgICBub2RlLnN0b3AoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGU2MTUwCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDM5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAtLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorCSAgICAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiDQorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCINCisgICAgICAgICAgIG5hbWU9IkhlbGxvV29ybGRDb21wb3NpdGUiPg0KKyAgICAgICAgICAgDQorICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG9Xb3JsZENvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iaGVsbG93b3JsZC5IZWxsb1dvcmxkSW1wbCIvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiID4NCisgICAgICAgICAgICA8dHVzY2FueTpiaW5kaW5nLiR7YXJ0aWZhY3RJZH0gc29tZUF0dHI9ImJsYSIgLz4NCisgICAgICAgIDwvc2VydmljZT4NCisgICAgPC9jb21wb25lbnQ+ICAgDQorICANCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkQ2xpZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJoZWxsb3dvcmxkLkhlbGxvV29ybGRDbGllbnQiLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0icmVmIiA+DQorICAgICAgICAgICAgPHR1c2Nhbnk6YmluZGluZy4ke2FydGlmYWN0SWR9IHVyaT0iSGVsbG9Xb3JsZENvbXBvbmVudC9IZWxsb1dvcmxkU2VydmljZSIvPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50PiAgIA0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvYmFzaWMvYXJjaGV0eXBlLnByb3BlcnRpZXMgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL3Rlc3QvcmVzb3VyY2VzL3Byb2plY3RzL2Jhc2ljL2FyY2hldHlwZS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxNTMwNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL3Rlc3QvcmVzb3VyY2VzL3Byb2plY3RzL2Jhc2ljL2FyY2hldHlwZS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMjMgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisjU2F0IFNlcCAwNCAwODoxMDoyMiBCU1QgMjAxMA0KK3ZlcnNpb249MC4xLVNOQVBTSE9UDQorZ3JvdXBJZD1hcmNoZXR5cGUuaXQNCitwYWNrYWdlPWFyY2hldHlwZS5pdC5iYXNpYw0KK2FydGlmYWN0SWQ9YmFzaWMNCitiaW5kaW5nTmFtZT1CYXNpYw0KKw0KZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvYmluZGluZy9zcmMvdGVzdC9yZXNvdXJjZXMvcHJvamVjdHMvYmFzaWMvZ29hbC50eHQgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL3Rlc3QvcmVzb3VyY2VzL3Byb2plY3RzL2Jhc2ljL2dvYWwudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2JpbmRpbmcvc3JjL3Rlc3QvcmVzb3VyY2VzL3Byb2plY3RzL2Jhc2ljL2dvYWwudHh0CmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9NRVRBLUlORi9NQU5JRkVTVC5NRgpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24tamFyL01FVEEtSU5GL01BTklGRVNULk1GCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvcG9tLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0OGY4ZmYKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvcG9tLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb250cmlidXRpb24tamFyPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+bWF2ZW4tYXJjaGV0eXBlPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+Q3JlYXRlIGFuIFNDQSBKQVIgY29udHJpYnV0aW9uIHByb2plY3Q8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkNyZWF0ZSBhbiBTQ0EgSkFSIGNvbnRyaWJ1dGlvbiBwcm9qZWN0PC9kZXNjcmlwdGlvbj4KKworICAgIDxidWlsZD4KKyAgICA8ZXh0ZW5zaW9ucz4KKyAgICAgIDxleHRlbnNpb24+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uYXJjaGV0eXBlPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD5hcmNoZXR5cGUtcGFja2FnaW5nPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtMzwvdmVyc2lvbj4KKyAgICAgIDwvZXh0ZW5zaW9uPgorICAgIDwvZXh0ZW5zaW9ucz4KKyAgICA8cGx1Z2lucz4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFyY2hldHlwZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS0zPC92ZXJzaW9uPgorICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgPC9wbHVnaW4+CisgICAgPC9wbHVnaW5zPgorICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24tamFyL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24tamFyL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUueG1sCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiMmFkM2QKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbApAQCAtMCwwICsxLDgxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4KKwk8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisKKwk8Z3JvdXBJZD4ke2dyb3VwSWR9PC9ncm91cElkPgorCTxhcnRpZmFjdElkPiR7YXJ0aWZhY3RJZH08L2FydGlmYWN0SWQ+CisJPHZlcnNpb24+JHt2ZXJzaW9ufTwvdmVyc2lvbj4KKwk8bmFtZT4ke2FydGlmYWN0SWR9PC9uYW1lPgorCisJPGRlcGVuZGVuY2llcz4KKworICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcub2FzaXMtb3Blbi5zY2EuajwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNjYS1jYWEtYXBpczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS1DRDA0PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKworCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPmp1bml0PC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisJCQk8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KKwkJCTxzY29wZT50ZXN0PC9zY29wZT4KKwkJPC9kZXBlbmRlbmN5PgorCisJPC9kZXBlbmRlbmNpZXM+CisKKwk8YnVpbGQ+CisgICAgICAgICAgICA8ZGVmYXVsdEdvYWw+aW5zdGFsbDwvZGVmYXVsdEdvYWw+CisgICAgICAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKworCQk8cGx1Z2lucz4KKwkJCTxwbHVnaW4+CisJCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPm1hdmVuLWNvbXBpbGVyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCQk8Y29uZmlndXJhdGlvbj4KKwkJCQkJPHNvdXJjZT4xLjY8L3NvdXJjZT4KKwkJCQkJPHRhcmdldD4xLjY8L3RhcmdldD4KKwkJCQkJPG9wdGltaXNlPnRydWU8L29wdGltaXNlPgorCQkJCQk8ZGVidWc+dHJ1ZTwvZGVidWc+CisJCQkJPC9jb25maWd1cmF0aW9uPgorCQkJPC9wbHVnaW4+CisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJPC9wbHVnaW4+CisJCTwvcGx1Z2lucz4KKworCTwvYnVpbGQ+CisKKyAgICAgIDwhLS0gT0FTSVMgU1ZOIHJlcG8gKGZvciBzY2EtYXBpIGphcikgLS0+CisgICAgICA8cmVwb3NpdG9yaWVzPgorICAgICAgICAgPHJlcG9zaXRvcnk+CisgICAgICAgICAgICA8aWQ+b2FzaXMuc3ZuPC9pZD4KKyAgICAgICAgICAgIDx1cmw+aHR0cDovL3Rvb2xzLm9hc2lzLW9wZW4ub3JnL3ZlcnNpb24tY29udHJvbC9zdm4vc2NhLWovUmVsZWFzZS88L3VybD4KKyAgICAgICAgICAgIDxyZWxlYXNlcz4KKyAgICAgICAgICAgICAgIDxlbmFibGVkPnRydWU8L2VuYWJsZWQ+CisgICAgICAgICAgICA8L3JlbGVhc2VzPgorICAgICAgICAgPC9yZXBvc2l0b3J5PgorICAgICAgPC9yZXBvc2l0b3JpZXM+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0hlbGxvd29ybGRJbXBsLmphdmEgYi9tYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkU2VydmljZS5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24tamFyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9jb250cmlidXRpb24tamFyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24tamFyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9jb250cmlidXRpb24tamFyL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLWphci9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUgYi9tYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi1qYXIvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi16aXAtZGlzY3JpcHRvci9wb20ueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwLWRpc2NyaXB0b3IvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwLWRpc2NyaXB0b3IvcG9tLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwLWRpc2NyaXB0b3IvcG9tLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwLWRpc2NyaXB0b3Ivc3JjL21haW4vcmVzb3VyY2VzL2Fzc2VtYmxpZXMvdHVzY2FueS16aXAtY29udHJpYnV0aW9uLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC1kaXNjcmlwdG9yL3NyYy9tYWluL3Jlc291cmNlcy9hc3NlbWJsaWVzL3R1c2NhbnktemlwLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC1kaXNjcmlwdG9yL3NyYy9tYWluL3Jlc291cmNlcy9hc3NlbWJsaWVzL3R1c2NhbnktemlwLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC1kaXNjcmlwdG9yL3NyYy9tYWluL3Jlc291cmNlcy9hc3NlbWJsaWVzL3R1c2NhbnktemlwLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL01FVEEtSU5GL01BTklGRVNULk1GCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi16aXAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9wb20ueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIxMjM2MAotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9wb20ueG1sCkBAIC0wLDAgKzEsNTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbnRyaWJ1dGlvbi16aXA8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5tYXZlbi1hcmNoZXR5cGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5DcmVhdGUgYW4gU0NBIFpJUCBjb250cmlidXRpb24gcHJvamVjdDwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+Q3JlYXRlIGFuIFNDQSBaSVAgY29udHJpYnV0aW9uIHByb2plY3Q8L2Rlc2NyaXB0aW9uPgorCisgICAgPGJ1aWxkPgorICAgIDxleHRlbnNpb25zPgorICAgICAgPGV4dGVuc2lvbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5hcmNoZXR5cGU8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmFyY2hldHlwZS1wYWNrYWdpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS0zPC92ZXJzaW9uPgorICAgICAgPC9leHRlbnNpb24+CisgICAgPC9leHRlbnNpb25zPgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYXJjaGV0eXBlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLWFscGhhLTM8L3ZlcnNpb24+CisgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi16aXAvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUueG1sCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi16aXAvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi16aXAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvQWRkSW1wbC5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvQWRkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi16aXAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9BZGRJbXBsLmphdmEKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0FkZEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvQWRkU2VydmljZS5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvQWRkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi16aXAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9BZGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0FkZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYWRkLmNvbXBvc2l0ZSBiL21hdmVuL2FyY2hldHlwZXMvY29udHJpYnV0aW9uLXppcC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYWRkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9jb250cmlidXRpb24temlwL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9hZGQuY29tcG9zaXRlCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL2NvbnRyaWJ1dGlvbi16aXAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL2FkZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL21hdmVuL2FyY2hldHlwZXMvcG9tLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTg5MmIwCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4vYXJjaGV0eXBlcy9wb20ueG1sCkBAIC0wLDAgKzEsNTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1hcmNoZXR5cGU8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgTWF2ZW4gQXJjaGV0eXBlczwvbmFtZT4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKworICAgICAgICAgICAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24tamFyPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24temlwPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24temlwLWRpc2NyaXB0b3I8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnF1aWNrc3RhcnQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnF1aWNrc3RhcnQtanNmPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5xdWlja3N0YXJ0LXN0cmlwZXM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnF1aWNrc3RhcnQtYnBlbDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmluZGluZzwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4gICAgCisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL01FVEEtSU5GL01BTklGRVNULk1GIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL01FVEEtSU5GL01BTklGRVNULk1GCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkaWZmIC0tZ2l0IGEvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvcG9tLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2NDkxMwotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3BvbS54bWwKQEAgLTAsMCArMSw1MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnR1c2NhbnktcXVpY2tzdGFydC1icGVsPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+bWF2ZW4tYXJjaGV0eXBlPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+Q3JlYXRlIGFuIFNDQSBXZWJhcHAgcHJvamVjdCB1c2luZyBCUEVMPC9uYW1lPgorICAgIDxkZXNjcmlwdGlvbj5DcmVhdGUgYW4gU0NBIFdlYmFwcCBwcm9qZWN0IHVzaW5nIEJQRUw8L2Rlc2NyaXB0aW9uPgorCisgICAgPGJ1aWxkPgorICAgIDxleHRlbnNpb25zPgorICAgICAgPGV4dGVuc2lvbj4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5hcmNoZXR5cGU8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmFyY2hldHlwZS1wYWNrYWdpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS0zPC92ZXJzaW9uPgorICAgICAgPC9leHRlbnNpb24+CisgICAgPC9leHRlbnNpb25zPgorICAgIDxwbHVnaW5zPgorICAgICAgPHBsdWdpbj4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYXJjaGV0eXBlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLWFscGhhLTM8L3ZlcnNpb24+CisgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICA8L3BsdWdpbj4KKyAgICA8L3BsdWdpbnM+CisgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUueG1sCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkU2VydmljZS5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuYnBlbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmJwZWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmJwZWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmJwZWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9oZWxsby5qc3AgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3BvbS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2YzcyNgotLS0gL2Rldi9udWxsCisrKyBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2YvcG9tLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1xdWlja3N0YXJ0LWpzZjwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPm1hdmVuLWFyY2hldHlwZTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkNyZWF0ZSBhIFR1c2NhbnkgU0NBIGFuZCBKU0YgcHJvamVjdDwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+Q3JlYXRlIGEgVHVzY2FueSBTQ0EgYW5kIEpTRiBwcm9qZWN0PC9kZXNjcmlwdGlvbj4KKworICAgIDxidWlsZD4KKyAgICAgICA8ZXh0ZW5zaW9ucz4KKyAgICAgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uYXJjaGV0eXBlPC9ncm91cElkPgorICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFyY2hldHlwZS1wYWNrYWdpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLWFscGhhLTQ8L3ZlcnNpb24+CisgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgPC9leHRlbnNpb25zPgorICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYXJjaGV0eXBlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtNDwvdmVyc2lvbj4KKyAgICAgICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPgorICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9teWZhY2VzL0hlbGxvV29ybGRDb250cm9sbGVyLmphdmEgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvbXlmYWNlcy9IZWxsb1dvcmxkQ29udHJvbGxlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvbXlmYWNlcy9IZWxsb1dvcmxkQ29udHJvbGxlci5qYXZhCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvbXlmYWNlcy9IZWxsb1dvcmxkQ29udHJvbGxlci5qYXZhCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvc2NhL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvc2NhL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9zY2EvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3NjYS9IZWxsb3dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvc2NhL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3NjYS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3NjYS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3NjYS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9mYWNlcy1jb25maWcueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9mYWNlcy1jb25maWcueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2ZhY2VzLWNvbmZpZy54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvZmFjZXMtY29uZmlnLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG9Xb3JsZC5qc3AgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9oZWxsb1dvcmxkLmpzcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG9Xb3JsZC5qc3AKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL2hlbGxvV29ybGQuanNwCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL2luZGV4LmpzcApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9wYWdlMi5qc3AgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNmL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9wYWdlMi5qc3AKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1qc2Yvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL3BhZ2UyLmpzcApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzZi9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvcGFnZTIuanNwCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9NRVRBLUlORi9NQU5JRkVTVC5NRgpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL01FVEEtSU5GL01BTklGRVNULk1GCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvcG9tLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NjgwNTIKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvcG9tLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPnR1c2NhbnktcXVpY2tzdGFydC1qc29ucDwvYXJ0aWZhY3RJZD4NCisgICAgPHBhY2thZ2luZz5tYXZlbi1hcmNoZXR5cGU8L3BhY2thZ2luZz4NCisgICAgPG5hbWU+Q3JlYXRlIGEgVHVzY2FueSBTQ0Egd2ViYXBwIHByb2plY3QgdXNpbmcgdGhlIEpTT05QIGJpbmRpbmc8L25hbWU+DQorICAgIDxkZXNjcmlwdGlvbj5DcmVhdGUgYSBUdXNjYW55IFNDQSB3ZWJhcHAgcHJvamVjdCB1c2luZyB0aGUgSlNPTlAgYmluZGluZzwvZGVzY3JpcHRpb24+DQorDQorICAgIDxidWlsZD4NCisgICAgPGV4dGVuc2lvbnM+DQorICAgICAgPGV4dGVuc2lvbj4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4uYXJjaGV0eXBlPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+YXJjaGV0eXBlLXBhY2thZ2luZzwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS00PC92ZXJzaW9uPg0KKyAgICAgIDwvZXh0ZW5zaW9uPg0KKyAgICA8L2V4dGVuc2lvbnM+DQorICAgIDxwbHVnaW5zPg0KKyAgICAgIDxwbHVnaW4+DQorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLWFscGhhLTQ8L3ZlcnNpb24+DQorICAgICAgICA8ZXh0ZW5zaW9ucz50cnVlPC9leHRlbnNpb25zPg0KKyAgICAgIDwvcGx1Z2luPg0KKyAgICA8L3BsdWdpbnM+DQorICA8L2J1aWxkPg0KKw0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUueG1sCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0hlbGxvd29ybGRJbXBsLmphdmEgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkU2VydmljZS5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9oZWxsby5qc3AKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL2hlbGxvLmpzcApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9NRVRBLUlORi9NQU5JRkVTVC5NRgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL01FVEEtSU5GL01BTklGRVNULk1GCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9wb20ueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGMxOTcxCi0tLSAvZGV2L251bGwKKysrIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvcG9tLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1xdWlja3N0YXJ0LXN0cmlwZXM8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5tYXZlbi1hcmNoZXR5cGU8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5DcmVhdGUgYSBzaW1wbGUgQXBhY2hlIFR1c2NhbnkgU0NBIHdlYmFwcCBwcm9qZWN0IHVzaW5nIHRoZSBTdHJpcGVzIFdlYiBGcmFtZXdvcms8L25hbWU+CisgICAgPGRlc2NyaXB0aW9uPkNyZWF0ZSBhIHNpbXBsZSBBcGFjaGUgVHVzY2FueSBTQ0Egd2ViYXBwIHByb2plY3QgdXNpbmcgdGhlIFN0cmlwZXMgV2ViIEZyYW1ld29yazwvZGVzY3JpcHRpb24+CisKKyAgICA8YnVpbGQ+CisgICAgICAgPGV4dGVuc2lvbnM+CisgICAgICAgICAgPGV4dGVuc2lvbj4KKyAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLmFyY2hldHlwZTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hcmNoZXR5cGUtcGFja2FnaW5nPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS00PC92ZXJzaW9uPgorICAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgIDwvZXh0ZW5zaW9ucz4KKyAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFyY2hldHlwZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLWFscGhhLTQ8L3ZlcnNpb24+CisgICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3NjYS9IZWxsb3dvcmxkU2VydmljZS5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9zY2EvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9zY2EvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9zY2EvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9zY2EvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3NjYS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9zY2EvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvc2NhL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3N0cmlwZXMvYWN0aW9uL0Jhc2VBY3Rpb25CZWFuLmphdmEgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3N0cmlwZXMvYWN0aW9uL0Jhc2VBY3Rpb25CZWFuLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvc3RyaXBlcy9hY3Rpb24vQmFzZUFjdGlvbkJlYW4uamF2YQpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9zdHJpcGVzL2FjdGlvbi9CYXNlQWN0aW9uQmVhbi5qYXZhCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3N0cmlwZXMvYWN0aW9uL0hvbWVBY3Rpb25CZWFuLmphdmEgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL3N0cmlwZXMvYWN0aW9uL0hvbWVBY3Rpb25CZWFuLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvc3RyaXBlcy9hY3Rpb24vSG9tZUFjdGlvbkJlYW4uamF2YQpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9zdHJpcGVzL2FjdGlvbi9Ib21lQWN0aW9uQmVhbi5qYXZhCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvU3RyaXBlc1Jlc291cmNlcy5wcm9wZXJ0aWVzIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL1N0cmlwZXNSZXNvdXJjZXMucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL1N0cmlwZXNSZXNvdXJjZXMucHJvcGVydGllcwpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL1N0cmlwZXNSZXNvdXJjZXMucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3AvaG9tZS5qc3AgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3AvaG9tZS5qc3AKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC9ob21lLmpzcApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwL2hvbWUuanNwCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3AvbGF5b3V0LmpzcCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC9sYXlvdXQuanNwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3AvbGF5b3V0LmpzcApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwL2xheW91dC5qc3AKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC90YWdsaWJzLmpzcCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC90YWdsaWJzLmpzcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwL3RhZ2xpYnMuanNwCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3AvdGFnbGlicy5qc3AKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0LXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9pbmRleC5odG1sCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC9NRVRBLUlORi9NQU5JRkVTVC5NRgpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0L01FVEEtSU5GL01BTklGRVNULk1GCmRpZmYgLS1naXQgYS9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQvcG9tLnhtbCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZjIwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQvcG9tLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1xdWlja3N0YXJ0PC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+bWF2ZW4tYXJjaGV0eXBlPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+Q3JlYXRlIGEgc2ltcGxlIEFwYWNoZSBUdXNjYW55IFNDQSB3ZWJhcHAgcHJvamVjdDwvbmFtZT4KKyAgICA8ZGVzY3JpcHRpb24+Q3JlYXRlIGEgc2ltcGxlIEFwYWNoZSBUdXNjYW55IFNDQSB3ZWJhcHAgcHJvamVjdDwvZGVzY3JpcHRpb24+CisKKyAgICA8YnVpbGQ+CisgICAgPGV4dGVuc2lvbnM+CisgICAgICA8ZXh0ZW5zaW9uPgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLmFyY2hldHlwZTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+YXJjaGV0eXBlLXBhY2thZ2luZzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLWFscGhhLTQ8L3ZlcnNpb24+CisgICAgICA8L2V4dGVuc2lvbj4KKyAgICA8L2V4dGVuc2lvbnM+CisgICAgPHBsdWdpbnM+CisgICAgICA8cGx1Z2luPgorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1hcmNoZXR5cGUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtYWxwaGEtNDwvdmVyc2lvbj4KKyAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KKyAgICAgIDwvcGx1Z2luPgorICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUtbWV0YWRhdGEueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS1tZXRhZGF0YS54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLW1ldGFkYXRhLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUueG1sIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9tYXZlbi9hcmNoZXR5cGUueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL21hdmVuL2FyY2hldHlwZS54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvbWF2ZW4vYXJjaGV0eXBlLnhtbApkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3BvbS54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9wb20ueG1sCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vamF2YS9IZWxsb3dvcmxkSW1wbC5qYXZhIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZEltcGwuamF2YQpyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL2phdmEvSGVsbG93b3JsZFNlcnZpY2UuamF2YSBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi9qYXZhL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2FyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlIGIvbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnJlbmFtZSB0byBtYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9tYXZlbi9hcmNoZXR5cGVzL3F1aWNrc3RhcnQvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKcmVuYW1lIHRvIG1hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRpZmYgLS1naXQgYS9hcmNoZXR5cGVzL3F1aWNrc3RhcnQvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL2hlbGxvLmpzcCBiL21hdmVuL2FyY2hldHlwZXMvcXVpY2tzdGFydC9zcmMvbWFpbi9yZXNvdXJjZXMvYXJjaGV0eXBlLXJlc291cmNlcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoZXR5cGVzL3F1aWNrc3RhcnQvc3JjL21haW4vcmVzb3VyY2VzL2FyY2hldHlwZS1yZXNvdXJjZXMvc3JjL21haW4vd2ViYXBwL2hlbGxvLmpzcApyZW5hbWUgdG8gbWF2ZW4vYXJjaGV0eXBlcy9xdWlja3N0YXJ0L3NyYy9tYWluL3Jlc291cmNlcy9hcmNoZXR5cGUtcmVzb3VyY2VzL3NyYy9tYWluL3dlYmFwcC9oZWxsby5qc3AKZGlmZiAtLWdpdCBhL21hdmVuL21hdmVuLXR1c2NhbnktcGx1Z2luL3BvbS54bWwgYi9tYXZlbi9tYXZlbi10dXNjYW55LXBsdWdpbi9wb20ueG1sCmluZGV4IDcwY2Q4ZTkuLmFjODlmMTcgMTAwNjQ0Ci0tLSBhL21hdmVuL21hdmVuLXR1c2NhbnktcGx1Z2luL3BvbS54bWwKKysrIGIvbWF2ZW4vbWF2ZW4tdHVzY2FueS1wbHVnaW4vcG9tLnhtbApAQCAtNTAsOCArNTAsMTMgQEAKICAgICAgICA8L2RlcGVuZGVuY3k+DQogDQogICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1oYXplbGNhc3Q8L2FydGlmYWN0SWQ+DQogICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCiAgICAgICAgPC9kZXBlbmRlbmN5Pg0KIA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteG1sL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNTdlNjkzMC4uZmUyODUwOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14bWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTQ3LDYgKzQ3LDcgQEAKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi5qYXZhLmlvO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24ueG1sLnN0YXg7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi54bWwueHBhdGg7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbjt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLmphdmE7dmVyc2lvbj0iMi4wLjAiLA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteG1sL3BvbS54bWwgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9wb20ueG1sCmluZGV4IDNmNWJmZGQuLjA1ZGYwOTMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXNzZW1ibHkteG1sL3BvbS54bWwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvcG9tLnhtbApAQCAtNDUsNiArNDUsMTIgQEAKICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXhzZDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAKKyAgICAgICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb21tb24teG1sPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgCiAKICAgICAgICAgPCEtLSAKQEAgLTY1LDcgKzcxLDcgQEAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3R4LWFzbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPgorICAgICAgICAgICAgPHZlcnNpb24+My4yLjY8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CiAgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L3htbC9CYXNlQXNzZW1ibHlQcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9hc3NlbWJseS94bWwvQmFzZUFzc2VtYmx5UHJvY2Vzc29yLmphdmEKaW5kZXggNjQxZTUyMy4uMDkxYjNjMCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L3htbC9CYXNlQXNzZW1ibHlQcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkveG1sL0Jhc2VBc3NlbWJseVByb2Nlc3Nvci5qYXZhCkBAIC00MDksNyArNDA5LDcgQEAKICAgICAgKiBAcGFyYW0gZWxlbWVudAogICAgICAqIEBwYXJhbSB0eXBlCiAgICAgICogQHBhcmFtIHJlYWRlcgotICAgICAqIEBwYXJhbSBjb250ZXh0IFRPRE8KKyAgICAgKiBAcGFyYW0gY29udGV4dAogICAgICAqIEByZXR1cm4KICAgICAgKiBAdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbgogICAgICAqIEB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbgpAQCAtNjY0LDc0ICs2NjQsNiBAQAogICAgIH0KIAogICAgIC8qKgotICAgICAqIFdyaXRlIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IAotICAgICAqIEBwYXJhbSBkb2N1bWVudAotICAgICAqIEBwYXJhbSBlbGVtZW50Ci0gICAgICogQHBhcmFtIHR5cGUKLSAgICAgKiBAcGFyYW0gd3JpdGVyCi0gICAgICogQHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24KLSAgICAgKi8KLSAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVByb3BlcnR5VmFsdWUoT2JqZWN0IHByb3BlcnR5VmFsdWUsIFFOYW1lIGVsZW1lbnQsIFFOYW1lIHR5cGUsIFhNTFN0cmVhbVdyaXRlciB3cml0ZXIpCi0gICAgICAgIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24gewotCi0gICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlIGluc3RhbmNlb2YgRG9jdW1lbnQpIHsKLSAgICAgICAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gKERvY3VtZW50KXByb3BlcnR5VmFsdWU7Ci0gICAgICAgICAgICBOb2RlTGlzdCBub2RlTGlzdCA9IGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpLmdldENoaWxkTm9kZXMoKTsKLQotICAgICAgICAgICAgZm9yIChpbnQgaXRlbSA9IDA7IGl0ZW0gPCBub2RlTGlzdC5nZXRMZW5ndGgoKTsgKytpdGVtKSB7Ci0gICAgICAgICAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbShpdGVtKTsKLSAgICAgICAgICAgICAgICBpbnQgbm9kZVR5cGUgPSBub2RlLmdldE5vZGVUeXBlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgICAgICAgICAgICAgIFhNTFN0cmVhbVJlYWRlciByZWFkZXIgPSBYTUxJbnB1dEZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVYTUxTdHJlYW1SZWFkZXIobmV3IERPTVNvdXJjZShub2RlKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVhZGVyLm5leHQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtQ29uc3RhbnRzLlNUQVJUX0VMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFOYW1lIG5hbWUgPSByZWFkZXIuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVTdGFydEVsZW1lbnQobmFtZS5nZXRQcmVmaXgoKSwgbmFtZS5nZXRMb2NhbFBhcnQoKSwgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hbWVzcGFjZXMgPSByZWFkZXIuZ2V0TmFtZXNwYWNlQ291bnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lc3BhY2VzOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSByZWFkZXIuZ2V0TmFtZXNwYWNlUHJlZml4KGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5zID0gcmVhZGVyLmdldE5hbWVzcGFjZVVSSShpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZU5hbWVzcGFjZShwcmVmaXgsIG5zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIiIuZXF1YWxzKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVOYW1lc3BhY2UobmFtZS5nZXRQcmVmaXgoKSwgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoaXMgZWxlbWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gcmVhZGVyLmdldEF0dHJpYnV0ZUNvdW50KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlczsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbnMgPSByZWFkZXIuZ2V0QXR0cmlidXRlTmFtZXNwYWNlKGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHJlYWRlci5nZXRBdHRyaWJ1dGVQcmVmaXgoaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcW5hbWUgPSByZWFkZXIuZ2V0QXR0cmlidXRlTG9jYWxOYW1lKGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKGkpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUocHJlZml4LCBucywgcW5hbWUsIHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtQ29uc3RhbnRzLkNEQVRBOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVDRGF0YShyZWFkZXIuZ2V0VGV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1Db25zdGFudHMuQ0hBUkFDVEVSUzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlQ2hhcmFjdGVycyhyZWFkZXIuZ2V0VGV4dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1Db25zdGFudHMuRU5EX0VMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZUVuZEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVDaGFyYWN0ZXJzKG5vZGUuZ2V0VGV4dENvbnRlbnQoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCiAgICAgICogCiAgICAgICogQHBhcmFtIHJlYWRlcgogICAgICAqIEBwYXJhbSBlbGVtZW50TmFtZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L3htbC9Db21wb25lbnRUeXBlUHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkveG1sL0NvbXBvbmVudFR5cGVQcm9jZXNzb3IuamF2YQppbmRleCBiNDAyYjZlLi44ZjI0Y2M0IDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkveG1sL0NvbXBvbmVudFR5cGVQcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkveG1sL0NvbXBvbmVudFR5cGVQcm9jZXNzb3IuamF2YQpAQCAtNDIsNiArNDIsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbC5Db25zdGFudHMuRVhURU5TSU9OX1FOQU1FOwogCiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50czsKIGltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKIGltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVdyaXRlcjsKQEAgLTU0LDYgKzU1LDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlByb3BlcnR5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUmVmZXJlbmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuU2VydmljZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi54bWwuc3RheC5TdEFYSGVscGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbjsKQEAgLTYxLDEyICs2MywxNSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBdHRyaWJ1dGVQcm9jZXNzb3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb2x2ZXIuTW9kZWxSZXNvbHZlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRmFjdG9yeUV4dGVuc2lvblBvaW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5pbXBsLk9wZXJhdGlvbkltcGw7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuUG9saWN5U3ViamVjdDsKIGltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOworaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwogCiAvKioKICAqIEEgY29tcG9uZW50VHlwZSBwcm9jZXNzb3IuCkBAIC03NCw2ICs3OSw4IEBACiAgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKICAqLwogcHVibGljIGNsYXNzIENvbXBvbmVudFR5cGVQcm9jZXNzb3IgZXh0ZW5kcyBCYXNlQXNzZW1ibHlQcm9jZXNzb3IgaW1wbGVtZW50cyBTdEFYQXJ0aWZhY3RQcm9jZXNzb3I8Q29tcG9uZW50VHlwZT4geworCQorICAgIHByaXZhdGUgU3RBWEhlbHBlciBzdGF4SGVscGVyOwogICAgIAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgY29tcG9uZW50VHlwZSBwcm9jZXNzb3IuCkBAIC04MywxMCArOTAsMTQgQEAKICAgICAgKiBAcGFyYW0gZXh0ZW5zaW9uQXR0cmlidXRlUHJvY2Vzc29yCiAgICAgICogQHBhcmFtIG1vbml0b3IKICAgICAgKi8KLSAgICBwdWJsaWMgQ29tcG9uZW50VHlwZVByb2Nlc3NvcihGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMsCisgICAgcHVibGljIENvbXBvbmVudFR5cGVQcm9jZXNzb3IoRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSBleHRlbnNpb25Qb2ludHMsCisgICAgLy9wdWJsaWMgQ29tcG9uZW50VHlwZVByb2Nlc3NvcihGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RBWEFydGlmYWN0UHJvY2Vzc29yIGV4dGVuc2lvblByb2Nlc3NvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdEFYQXR0cmlidXRlUHJvY2Vzc29yIGV4dGVuc2lvbkF0dHJpYnV0ZVByb2Nlc3NvcikgewotICAgICAgICBzdXBlcihtb2RlbEZhY3RvcmllcywgZXh0ZW5zaW9uUHJvY2Vzc29yKTsKKyAgICAgICAgc3VwZXIobW9kZWxGYWN0b3JpZXMoZXh0ZW5zaW9uUG9pbnRzKSwgZXh0ZW5zaW9uUHJvY2Vzc29yKTsKKyAgICAgICAgCisgICAgICAgIC8vIAorICAgICAgICBzdGF4SGVscGVyID0gU3RBWEhlbHBlci5nZXRJbnN0YW5jZShleHRlbnNpb25Qb2ludHMpOwogICAgIH0KICAgICAKICAgICBwdWJsaWMgQ29tcG9uZW50VHlwZSByZWFkKFhNTFN0cmVhbVJlYWRlciByZWFkZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24gewpAQCAtMzY0LDYgKzM3NSw3NSBAQAogICAgICAgICB3cml0ZUVuZERvY3VtZW50KHdyaXRlcik7CiAgICAgfQogICAgIAorICAgIC8qKgorICAgICAqIFdyaXRlIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IC0gb3ZlcnJpZGUgdG8gdXNlIGNvcnJlY3QgbWV0aG9kIG9mIGNyZWF0aW5nIGFuIFhNTFN0cmVhbVJlYWRlcgorICAgICAqIEBwYXJhbSBkb2N1bWVudAorICAgICAqIEBwYXJhbSBlbGVtZW50CisgICAgICogQHBhcmFtIHR5cGUKKyAgICAgKiBAcGFyYW0gd3JpdGVyCisgICAgICogQHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVByb3BlcnR5VmFsdWUoT2JqZWN0IHByb3BlcnR5VmFsdWUsIFFOYW1lIGVsZW1lbnQsIFFOYW1lIHR5cGUsIFhNTFN0cmVhbVdyaXRlciB3cml0ZXIpCisgICAgICAgIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24geworCisgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlIGluc3RhbmNlb2YgRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gKERvY3VtZW50KXByb3BlcnR5VmFsdWU7CisgICAgICAgICAgICBOb2RlTGlzdCBub2RlTGlzdCA9IGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpLmdldENoaWxkTm9kZXMoKTsKKworICAgICAgICAgICAgZm9yIChpbnQgaXRlbSA9IDA7IGl0ZW0gPCBub2RlTGlzdC5nZXRMZW5ndGgoKTsgKytpdGVtKSB7CisgICAgICAgICAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbShpdGVtKTsKKyAgICAgICAgICAgICAgICBpbnQgbm9kZVR5cGUgPSBub2RlLmdldE5vZGVUeXBlKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CisgICAgICAgICAgICAgICAgCS8vIENvcnJlY3Qgd2F5IHRvIGNyZWF0ZSBhIHJlYWRlciBmb3IgYSBub2RlIG9iamVjdC4uLgorICAgICAgICAgICAgICAgIAlYTUxTdHJlYW1SZWFkZXIgcmVhZGVyID0gc3RheEhlbHBlci5jcmVhdGVYTUxTdHJlYW1SZWFkZXIobm9kZSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVhZGVyLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtQ29uc3RhbnRzLlNUQVJUX0VMRU1FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFOYW1lIG5hbWUgPSByZWFkZXIuZ2V0TmFtZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVTdGFydEVsZW1lbnQobmFtZS5nZXRQcmVmaXgoKSwgbmFtZS5nZXRMb2NhbFBhcnQoKSwgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hbWVzcGFjZXMgPSByZWFkZXIuZ2V0TmFtZXNwYWNlQ291bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lc3BhY2VzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSByZWFkZXIuZ2V0TmFtZXNwYWNlUHJlZml4KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5zID0gcmVhZGVyLmdldE5hbWVzcGFjZVVSSShpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZU5hbWVzcGFjZShwcmVmaXgsIG5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIiIuZXF1YWxzKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVOYW1lc3BhY2UobmFtZS5nZXRQcmVmaXgoKSwgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoaXMgZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gcmVhZGVyLmdldEF0dHJpYnV0ZUNvdW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbnMgPSByZWFkZXIuZ2V0QXR0cmlidXRlTmFtZXNwYWNlKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHJlYWRlci5nZXRBdHRyaWJ1dGVQcmVmaXgoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcW5hbWUgPSByZWFkZXIuZ2V0QXR0cmlidXRlTG9jYWxOYW1lKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKGkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUocHJlZml4LCBucywgcW5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtQ29uc3RhbnRzLkNEQVRBOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVDRGF0YShyZWFkZXIuZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1Db25zdGFudHMuQ0hBUkFDVEVSUzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlQ2hhcmFjdGVycyhyZWFkZXIuZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1Db25zdGFudHMuRU5EX0VMRU1FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZUVuZEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVDaGFyYWN0ZXJzKG5vZGUuZ2V0VGV4dENvbnRlbnQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSAvLyBlbmQgbWV0aG9kIHdyaXRlUHJvcGVydHlWYWx1ZQorICAgIAogICAgIHB1YmxpYyB2b2lkIHJlc29sdmUoQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlLCBNb2RlbFJlc29sdmVyIHJlc29sdmVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uIHsKIAogICAgICAgICAvLyBSZXNvbHZlIGNvbXBvbmVudCB0eXBlIHNlcnZpY2VzIGFuZCByZWZlcmVuY2VzCkBAIC0zNzgsNCArNDU4LDE0IEBACiAgICAgcHVibGljIENsYXNzPENvbXBvbmVudFR5cGU+IGdldE1vZGVsVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIENvbXBvbmVudFR5cGUuY2xhc3M7CiAgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIG1vZGVsIGZhY3RvcnkgZXh0ZW5zaW9uIHBvaW50IHRvIHVzZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBleHRlbnNpb25Qb2ludHMKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgRmFjdG9yeUV4dGVuc2lvblBvaW50IG1vZGVsRmFjdG9yaWVzKEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXh0ZW5zaW9uUG9pbnRzKSB7CisgICAgICAgIHJldHVybiBleHRlbnNpb25Qb2ludHMuZ2V0RXh0ZW5zaW9uUG9pbnQoRmFjdG9yeUV4dGVuc2lvblBvaW50LmNsYXNzKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkveG1sL0NvbXBvc2l0ZVByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L3htbC9Db21wb3NpdGVQcm9jZXNzb3IuamF2YQppbmRleCAyMjg3OWMyLi5lZWNiMDdlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkveG1sL0NvbXBvc2l0ZVByb2Nlc3Nvci5qYXZhCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9hc3NlbWJseS94bWwvQ29tcG9zaXRlUHJvY2Vzc29yLmphdmEKQEAgLTY2LDEwICs2NiwxMiBAQAogaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CiAKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MSW5wdXRGYWN0b3J5OwogaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzOwogaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwogaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtV3JpdGVyOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uZG9tLkRPTVNvdXJjZTsKIGltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5CaW5kaW5nOwpAQCAtODcsNiArODksNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUmVmZXJlbmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuU2VydmljZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LldpcmU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24ueG1sLnN0YXguU3RBWEhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi54bWwueHBhdGguWFBhdGhIZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQXJ0aWZhY3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQ29udHJpYnV0aW9uOwpAQCAtMTExLDYgKzExNCw4IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS54c2QuWFNERmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnhzZC5YU0RlZmluaXRpb247CiBpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKIAogLyoqCiAgKiBBIGNvbXBvc2l0ZSBwcm9jZXNzb3IuCkBAIC0xMjMsNiArMTI4LDggQEAKICAgICBwcml2YXRlIFN0QVhBdHRyaWJ1dGVQcm9jZXNzb3I8T2JqZWN0PiBleHRlbnNpb25BdHRyaWJ1dGVQcm9jZXNzb3I7CiAgICAgcHJpdmF0ZSBDb250cmlidXRpb25GYWN0b3J5IGNvbnRyaWJ1dGlvbkZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBYU0RGYWN0b3J5IHhzZEZhY3Rvcnk7CisgICAgCisgICAgcHJpdmF0ZSBTdEFYSGVscGVyIHN0YXhIZWxwZXI7CiAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3QgYSBuZXcgY29tcG9zaXRlIHByb2Nlc3NvcgpAQCAtMTQwLDYgKzE0Nyw5IEBACiAgICAgICAgIHRoaXMuZXh0ZW5zaW9uQXR0cmlidXRlUHJvY2Vzc29yID0gZXh0ZW5zaW9uQXR0cmlidXRlUHJvY2Vzc29yOwogICAgICAgICAKICAgICAgICAgdGhpcy54c2RGYWN0b3J5ID0gZXh0ZW5zaW9uUG9pbnRzLmdldEV4dGVuc2lvblBvaW50KFhTREZhY3RvcnkuY2xhc3MpOworICAgICAgICAKKyAgICAgICAgLy8gCisgICAgICAgIHN0YXhIZWxwZXIgPSBTdEFYSGVscGVyLmdldEluc3RhbmNlKGV4dGVuc2lvblBvaW50cyk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0zNTQsMjMgKzM2NCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFByb3BlcnR5LnNldFNvdXJjZShzb3VyY2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICQ8bmFtZT4vLi4uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc291cmNlLmNoYXJBdCgwKSA9PSAnJCcpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSBzb3VyY2UuaW5kZXhPZignLycpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb2xlcmF0aW5nICRwcm9wCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9ICIiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCIiLmVxdWFscyhzb3VyY2UpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSA9ICIuIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVN0cmluZyB4UGF0aCA9IHByZXBhcmVTb3VyY2VYUGF0aFN0cmluZyggc291cmNlICk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UHJvcGVydHkuc2V0U291cmNlWFBhdGhFeHByZXNzaW9uKHhwYXRoSGVscGVyLmNvbXBpbGUocmVhZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXROYW1lc3BhY2VDb250ZXh0KCksIHNvdXJjZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0TmFtZXNwYWNlQ29udGV4dCgpLCB4UGF0aCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIGNlID0gbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IobW9uaXRvciwgIkNvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24iLCBzb3VyY2UsIGNlKTsKQEAgLTY0OCw2ICs2NDYsNTEgQEAKIAogICAgICAgICByZXR1cm4gY29tcG9zaXRlOwogICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBQcmVwYXJlcyB0aGUgcHJvcGVydHkgQHNvdXJjZSBYUGF0aCBleHByZXNzaW9uCisgICAgICogCisgICAgICogVGhlIGZvcm0gb2YgdGhlIEBzb3VyY2UgYXR0cmlidXRlIGluIHRoZSBjb21wb3NpdGUgZmlsZSBtdXN0IHRha2Ugb25lIG9mIHRoZSBmb3JtcworICAgICAqICAgJHByb3BlcnR5TmFtZQorICAgICAqICAgJHByb3BlcnR5TmFtZS9leHByZXNzaW9uCisgICAgICogICAkcHJvcGVydHlOYW1lW25dCisgICAgICogICAkcHJvcGVydHlOYW1lW25dL2V4cHJlc3Npb24KKyAgICAgKiBQcm9wZXJ0eSB2YWx1ZXMgYXJlIHN0b3JlZCBhcyA8c2NhOnByb3BlcnR5PiBlbGVtZW50cyB3aXRoIG9uZSBvciBtb3JlIDxzY2E6dmFsdWU+IHN1YmVsZW1lbnRzIG9yIG9uZSBvciBtb3JlCisgICAgICogZ2xvYmFsIGVsZW1lbnQgc3ViZWxlbWVudHMuIFRoZSBYUGF0aCBjb25zdHJ1Y3RlZCBpcyBkZXNpZ25lZCB0byB3b3JrIGFnYWluc3QgdGhpcyBYTUwgc3RydWN0dXJlIGFuZCBhaW1zIHRvCisgICAgICogcmV0cmlldmUgb25lIG9yIG1vcmUgb2YgdGhlIHN1YmVsZW1lbnRzIG9yIHN1YnBvcnRpb25zIG9mIHRob3NlIHN1YmVsZW1lbnRzIChlZyBzb21lIHRleHQgY29udGVudCkuCisgICAgICogVGh1cyB0aGUgWFBhdGg6CisgICAgICogLSBzdGFydHMgd2l0aCAiKiIsIHdoaWNoIG1lYW5zICJhbGwgdGhlIGNoaWxkIGVsZW1lbnRzIG9mIHRoZSByb290IiB3aGVyZSByb290ID0gdGhlIDxwcm9wZXJ0eS8+IGVsZW1lbnQKKyAgICAgKiAtIG1heSB0aGVuIGJlIGZvbGxvd2VkIGJ5IFt4eHhdICh0eXBpY2FsbHkgW25dIHRvIHNlbGVjdCBvbmUgb2YgdGhlIGNoaWxkIGVsZW1lbnRzKSBpZiB0aGUgc291cmNlIHN0cmluZyBoYXMgW3h4eF0KKyAgICAgKiAgIGZvbGxvd2luZyB0aGUgcHJvcGVydHlOYW1lCisgICAgICogLSBtYXkgdGhlbiBiZSBmb2xsb3dlZCBieSAvZXhwcmVzc2lvbiwgaWYgdGhlIHNvdXJjZSBjb250YWlucyBhbiBleHByZXNzaW9uLCB3aGljaCB3aWxsIHR5cGljYWxseSBzZWxlY3Qgc29tZSBzdWJwb3J0aW9uCisgICAgICogICBvZiB0aGUgY2hpbGQgZWxlbWVudChzKQorICAgICAqIAorICAgICAqIEBwYXJhbSBzb3VyY2UgLSB0aGUgQHNvdXJjZSBhdHRyaWJ1dGUgc3RyaW5nIGZyb20gYSA8c2NhOnByb3BlcnR5PiBlbGVtZW50CisgICAgICogQHJldHVybiB0aGUgWFBhdGggc3RyaW5nIHRvIHVzZSBmb3IgdGhlIHNvdXJjZSBwcm9wZXJ0eQorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIHByZXBhcmVTb3VyY2VYUGF0aFN0cmluZyggU3RyaW5nIHNvdXJjZSApIHsKKyAgICAJU3RyaW5nIG91dHB1dCA9IG51bGw7CisgICAgCS8vIEV4cHJlc3Npb24gbXVzdCBiZWdpbiB3aXRoICckJworICAgIAlpZiggc291cmNlLmNoYXJBdCgwKSAhPSAnJCcgKSByZXR1cm4gb3V0cHV0OworICAgIAkKKyAgICAgICAgaW50IHNsYXNoID0gc291cmNlLmluZGV4T2YoJy8nKTsKKyAgICAgICAgaW50IGJyYWNrZXQgPSBzb3VyY2UuaW5kZXhPZignWycpOworICAgICAgICBpZiAoc2xhc2ggPT0gLTEpIHsKKyAgICAgICAgICAgIC8vIEZvcm0gaXMgJHByb3BlcnR5TmFtZSBvciAkcHJvcGVydHlOYW1lW25dCisgICAgICAgICAgICBvdXRwdXQgPSAiKiI7CisgICAgICAgICAgICBpZiggYnJhY2tldCAhPSAtMSApIHsKKyAgICAgICAgICAgIAlvdXRwdXQgPSAiKiIgKyBzb3VyY2Uuc3Vic3RyaW5nKGJyYWNrZXQpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAJLy8gRm9ybSBpcyAkcHJvcGVydHlOYW1lL2V4cCBvciAkcHJvcGVydHlOYW1lW25dL2V4cAorICAgICAgICAgICAgb3V0cHV0ID0gIiovIiArIHNvdXJjZS5zdWJzdHJpbmcoc2xhc2ggKyAxKTsKKyAgICAgICAgICAgIGlmKCBicmFja2V0ICE9IC0xICYmIGJyYWNrZXQgPCBzbGFzaCApIHsKKyAgICAgICAgICAgIAlvdXRwdXQgPSAiKiIgICsgc291cmNlLnN1YnN0cmluZyhicmFja2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAvLyBlbmQgaWYKKyAgICAgICAgCisgICAgCXJldHVybiBvdXRwdXQ7CisgICAgfSAvLyBlbmQgbWV0aG9kIHByZXBhcmVTb3VyY2VYUGF0aFN0cmluZyggc291cmNlICkKIAogICAgIHB1YmxpYyB2b2lkIHdyaXRlKENvbXBvc2l0ZSBjb21wb3NpdGUsIFhNTFN0cmVhbVdyaXRlciB3cml0ZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgdGhyb3dzIENvbnRyaWJ1dGlvbldyaXRlRXhjZXB0aW9uLAogICAgICAgICBYTUxTdHJlYW1FeGNlcHRpb24gewpAQCAtNzQ3LDExICs3OTAsMTEgQEAKICAgICAgICAgICAgIC8vIFdyaXRlIHRoZSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uID0gY29tcG9uZW50LmdldEltcGxlbWVudGF0aW9uKCk7CiAgICAgICAgICAgICBpZiAoaW1wbGVtZW50YXRpb24gaW5zdGFuY2VvZiBDb21wb3NpdGUpIHsKLSAgICAgICAgICAgICAgICB3cml0ZVN0YXJ0KHdyaXRlciwgSU1QTEVNRU5UQVRJT05fQ09NUE9TSVRFLCBuZXcgWEF0dHIoTkFNRSwgKChDb21wb3NpdGUpaW1wbGVtZW50YXRpb24pLmdldE5hbWUoKSkpOworICAgICAgICAgICAgICAgIHdyaXRlU3RhcnQod3JpdGVyLCBJTVBMRU1FTlRBVElPTl9DT01QT1NJVEUsIG5ldyBYQXR0cihOQU1FLCAoKENvbXBvc2l0ZSlpbXBsZW1lbnRhdGlvbikuZ2V0TmFtZSgpKSwgcG9saWN5UHJvY2Vzc29yLndyaXRlUG9saWNpZXMoaW1wbGVtZW50YXRpb24pKTsKIAogICAgICAgICAgICAgICAgIC8vd3JpdGUgZXh0ZW5kZWQgYXR0cmlidXRlcwogICAgICAgICAgICAgICAgIHRoaXMud3JpdGVFeHRlbmRlZEF0dHJpYnV0ZXMod3JpdGVyLCAoQ29tcG9zaXRlKWltcGxlbWVudGF0aW9uLCBleHRlbnNpb25BdHRyaWJ1dGVQcm9jZXNzb3IsIGNvbnRleHQpOwotCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgd3JpdGVFbmQod3JpdGVyKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uUHJvY2Vzc29yLndyaXRlKGNvbXBvbmVudC5nZXRJbXBsZW1lbnRhdGlvbigpLCB3cml0ZXIsIGNvbnRleHQpOwpAQCAtMTA1NSw4ICsxMDk4LDIwIEBACiAgICAgICAgICAgICAgICAgICAgIC8vbm93IHJlc29sdmUgdGhlIGltcGxlbWVudGF0aW9uIHNvIHRoYXQgZXZlbiBpZiB0aGVyZSBpcyBhIHNoYXJlZCBpbnN0YW5jZQogICAgICAgICAgICAgICAgICAgICAvL2ZvciB0aGlzIHRoYXQgaXMgcmVzb2x2ZWQsIHRoZSBzcGVjaWZpZWQgaW50ZW50cyBhbmQgcG9saWN5c2V0cyBhcmUgc2FmZSBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgLy9jb21wb25lbnQgYW5kIG5vdCBsb3N0CisKKyAgICAgICAgICAgICAgICAJTGlzdDxQb2xpY3lTZXQ+IHBvbGljeVNldHMgPSBuZXcgQXJyYXlMaXN0PFBvbGljeVNldD4oaW1wbGVtZW50YXRpb24uZ2V0UG9saWN5U2V0cygpKTsgICAgICAgICAgICAgICAgCQorICAgICAgICAgICAgICAgIAlMaXN0PEludGVudD4gaW50ZW50cyA9IG5ldyBBcnJheUxpc3Q8SW50ZW50PihpbXBsZW1lbnRhdGlvbi5nZXRSZXF1aXJlZEludGVudHMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uID0gcmVzb2x2ZUltcGxlbWVudGF0aW9uKGltcGxlbWVudGF0aW9uLCByZXNvbHZlciwgY29udGV4dCk7CiAKKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIGFueSBwb2xpY3kgc2V0cyBvbiB0aGUgaW1wbGVtZW50YXRpb24gb3IgY29tcG9uZW50IHdlIGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIHBvbGljeSBzZXRzIGZyb20gdGhlIGNvbXBvbmVudCB0eXBlIChwb2xpY3kgc3BlYyA0LjkpCisgICAgICAgICAgICAgICAgICAgIGlmICggIXBvbGljeVNldHMuaXNFbXB0eSgpIHx8ICFjb21wb25lbnQuZ2V0UG9saWN5U2V0cygpLmlzRW1wdHkoKSApIHsgICAgICAgICAgICAgICAgICAgIAkKKyAgICAgICAgICAgICAgICAgICAgCWltcGxlbWVudGF0aW9uLmdldFBvbGljeVNldHMoKS5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICAJaW1wbGVtZW50YXRpb24uZ2V0UG9saWN5U2V0cygpLmFkZEFsbChwb2xpY3lTZXRzKTsgICAgICAgICAgICAgICAgICAgIAkKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAJCisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLmdldFJlcXVpcmVkSW50ZW50cygpLmFkZEFsbChpbnRlbnRzKTsgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zZXRJbXBsZW1lbnRhdGlvbihpbXBsZW1lbnRhdGlvbik7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0xMDg4LDYgKzExNDMsNzYgQEAKICAgICBwdWJsaWMgQ2xhc3M8Q29tcG9zaXRlPiBnZXRNb2RlbFR5cGUoKSB7CiAgICAgICAgIHJldHVybiBDb21wb3NpdGUuY2xhc3M7CiAgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFdyaXRlIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IC0gb3ZlcnJpZGUgdG8gdXNlIGNvcnJlY3QgbWV0aG9kIG9mIGNyZWF0aW5nIGFuIFhNTFN0cmVhbVJlYWRlcgorICAgICAqIEBwYXJhbSBkb2N1bWVudAorICAgICAqIEBwYXJhbSBlbGVtZW50CisgICAgICogQHBhcmFtIHR5cGUKKyAgICAgKiBAcGFyYW0gd3JpdGVyCisgICAgICogQHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZVByb3BlcnR5VmFsdWUoT2JqZWN0IHByb3BlcnR5VmFsdWUsIFFOYW1lIGVsZW1lbnQsIFFOYW1lIHR5cGUsIFhNTFN0cmVhbVdyaXRlciB3cml0ZXIpCisgICAgICAgIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24geworCisgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlIGluc3RhbmNlb2YgRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gKERvY3VtZW50KXByb3BlcnR5VmFsdWU7CisgICAgICAgICAgICBOb2RlTGlzdCBub2RlTGlzdCA9IGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpLmdldENoaWxkTm9kZXMoKTsKKworICAgICAgICAgICAgZm9yIChpbnQgaXRlbSA9IDA7IGl0ZW0gPCBub2RlTGlzdC5nZXRMZW5ndGgoKTsgKytpdGVtKSB7CisgICAgICAgICAgICAgICAgTm9kZSBub2RlID0gbm9kZUxpc3QuaXRlbShpdGVtKTsKKyAgICAgICAgICAgICAgICBpbnQgbm9kZVR5cGUgPSBub2RlLmdldE5vZGVUeXBlKCk7CisgICAgICAgICAgICAgICAgaWYgKG5vZGVUeXBlID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CisgICAgICAgICAgICAgICAgCS8vIENvcnJlY3Qgd2F5IHRvIGNyZWF0ZSBhIHJlYWRlciBmb3IgYSBub2RlIG9iamVjdC4uLgorICAgICAgICAgICAgICAgIAlYTUxTdHJlYW1SZWFkZXIgcmVhZGVyID0gc3RheEhlbHBlci5jcmVhdGVYTUxTdHJlYW1SZWFkZXIobm9kZSk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHJlYWRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocmVhZGVyLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtQ29uc3RhbnRzLlNUQVJUX0VMRU1FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFOYW1lIG5hbWUgPSByZWFkZXIuZ2V0TmFtZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVTdGFydEVsZW1lbnQobmFtZS5nZXRQcmVmaXgoKSwgbmFtZS5nZXRMb2NhbFBhcnQoKSwgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5hbWVzcGFjZXMgPSByZWFkZXIuZ2V0TmFtZXNwYWNlQ291bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lc3BhY2VzOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSByZWFkZXIuZ2V0TmFtZXNwYWNlUHJlZml4KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIG5zID0gcmVhZGVyLmdldE5hbWVzcGFjZVVSSShpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZU5hbWVzcGFjZShwcmVmaXgsIG5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIiIuZXF1YWxzKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVOYW1lc3BhY2UobmFtZS5nZXRQcmVmaXgoKSwgbmFtZS5nZXROYW1lc3BhY2VVUkkoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIGF0dHJpYnV0ZXMgZm9yIHRoaXMgZWxlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2VzID0gcmVhZGVyLmdldEF0dHJpYnV0ZUNvdW50KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXNwYWNlczsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbnMgPSByZWFkZXIuZ2V0QXR0cmlidXRlTmFtZXNwYWNlKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByZWZpeCA9IHJlYWRlci5nZXRBdHRyaWJ1dGVQcmVmaXgoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcW5hbWUgPSByZWFkZXIuZ2V0QXR0cmlidXRlTG9jYWxOYW1lKGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKGkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUocHJlZml4LCBucywgcW5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtQ29uc3RhbnRzLkNEQVRBOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVDRGF0YShyZWFkZXIuZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1Db25zdGFudHMuQ0hBUkFDVEVSUzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlQ2hhcmFjdGVycyhyZWFkZXIuZ2V0VGV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1Db25zdGFudHMuRU5EX0VMRU1FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlci53cml0ZUVuZEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVDaGFyYWN0ZXJzKG5vZGUuZ2V0VGV4dENvbnRlbnQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSAvLyBlbmQgbWV0aG9kIHdyaXRlUHJvcGVydHlWYWx1ZQorCiAKICAgICAvKioKICAgICAgKiBSZXR1cm5zIHRoZSBtb2RlbCBmYWN0b3J5IGV4dGVuc2lvbiBwb2ludCB0byB1c2UuCmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkveG1sL0NvbnN0YW50cy5qYXZhIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L3htbC9Db25zdGFudHMuamF2YQppbmRleCA3OTY1MDAyLi4wYzg4YTAxIDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkveG1sL0NvbnN0YW50cy5qYXZhCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9hc3NlbWJseS94bWwvQ29uc3RhbnRzLmphdmEKQEAgLTE0NSw3ICsxNDUsMzAgQEAKICAgICBTdHJpbmcgQVVUSE9SSVpBVElPTl9GSU5FX0dSQUlOID0gImF1dGhvcml6YXRpb24uZmluZUdyYWluIjsKICAgICBRTmFtZSBBVVRIT1JJWkFUSU9OX0ZJTkVfR1JBSU5fSU5URU5UID0gbmV3IFFOYW1lKFNDQTExX05TLCBBVVRIT1JJWkFUSU9OX0ZJTkVfR1JBSU4pOyAgCiAgICAgCi0gICAgLy8gVE9ETyAtIGFkZCB0cmFuc2FjdGlvbiBpbnRlbnQgY29uc3RhbnRzCisgICAgU3RyaW5nIE1BTkFHRURfVFJBTlNBQ1RJT04gPSAibWFuYWdlZFRyYW5zYWN0aW9uIjsKKyAgICBRTmFtZSBNQU5BR0VEX1RSQU5TQUNUSU9OX0lOVEVOVCA9IG5ldyBRTmFtZShTQ0ExMV9OUywgTUFOQUdFRF9UUkFOU0FDVElPTik7CisgICAgCisgICAgU3RyaW5nIE5PX01BTkFHRURfVFJBTlNBQ1RJT04gPSAibm9NYW5hZ2VkVHJhbnNhY3Rpb24iOworICAgIFFOYW1lIE5PX01BTkFHRURfVFJBTlNBQ1RJT05fSU5URU5UID0gbmV3IFFOYW1lKFNDQTExX05TLCBOT19NQU5BR0VEX1RSQU5TQUNUSU9OKTsKKyAgICAKKyAgICBTdHJpbmcgTUFOQUdFRF9UUkFOU0FDVElPTl9MT0NBTCA9ICJtYW5hZ2VkVHJhbnNhY3Rpb24ubG9jYWwiOworICAgIFFOYW1lIE1BTkFHRURfVFJBTlNBQ1RJT05fTE9DQUxfSU5URU5UID0gbmV3IFFOYW1lKFNDQTExX05TLCBNQU5BR0VEX1RSQU5TQUNUSU9OX0xPQ0FMKTsKKyAgICAKKyAgICBTdHJpbmcgTUFOQUdFRF9UUkFOU0FDVElPTl9HTE9CQUwgPSAibWFuYWdlZFRyYW5zYWN0aW9uLmdsb2JhbCI7CisgICAgUU5hbWUgTUFOQUdFRF9UUkFOU0FDVElPTl9HTE9CQUxfSU5URU5UID0gbmV3IFFOYW1lKFNDQTExX05TLCBNQU5BR0VEX1RSQU5TQUNUSU9OX0dMT0JBTCk7CisgICAgCisgICAgU3RyaW5nIFBST1BBR0FURVNfVFJBTlNBQ1RJT04gPSAicHJvcGFnYXRlc1RyYW5zYWN0aW9uIjsKKyAgICBRTmFtZSBQUk9QQUdBVEVTX1RSQU5TQUNUSU9OX0lOVEVOVCA9IG5ldyBRTmFtZShTQ0ExMV9OUywgUFJPUEFHQVRFU19UUkFOU0FDVElPTik7CisgICAgCisgICAgU3RyaW5nIFNVU1BFTkRTX1RSQU5TQUNUSU9OID0gInN1c3BlbmRzVHJhbnNhY3Rpb24iOworICAgIFFOYW1lIFNVU1BFTkRTX1RSQU5TQUNUSU9OX0lOVEVOVCA9IG5ldyBRTmFtZShTQ0ExMV9OUywgU1VTUEVORFNfVFJBTlNBQ1RJT04pOworICAgIAorICAgIFN0cmluZyBUUkFOU0FDVEVEX09ORV9XQVkgPSAidHJhbnNhY3RlZE9uZVdheSI7CisgICAgUU5hbWUgVFJBTlNBQ1RFRF9PTkVfV0FZX0lOVEVOVCA9IG5ldyBRTmFtZShTQ0ExMV9OUywgVFJBTlNBQ1RFRF9PTkVfV0FZKTsKKyAgICAKKyAgICBTdHJpbmcgSU1NRURJQVRFX09ORV9XQVkgPSAiaW1tZWRpYXRlT25lV2F5IjsKKyAgICBRTmFtZSBJTU1FRElBVEVfT05FX1dBWV9JTlRFTlQgPSBuZXcgUU5hbWUoU0NBMTFfTlMsIElNTUVESUFURV9PTkVfV0FZKTsKKyAgICAKICAgICBTdHJpbmcgTk9MSVNURU5FUiA9ICJub0xpc3RlbmVyIjsKICAgICBRTmFtZSBOT0xJU1RFTkVSX0lOVEVOVCA9IG5ldyBRTmFtZShTQ0ExMV9OUywgTk9MSVNURU5FUik7CiAgICAgCmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZGVmaW5pdGlvbnMveG1sL0RlZmluaXRpb25zUHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZGVmaW5pdGlvbnMveG1sL0RlZmluaXRpb25zUHJvY2Vzc29yLmphdmEKaW5kZXggMDA2YjgwZS4uMDIxMzcxMyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RlZmluaXRpb25zL3htbC9EZWZpbml0aW9uc1Byb2Nlc3Nvci5qYXZhCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9kZWZpbml0aW9ucy94bWwvRGVmaW5pdGlvbnNQcm9jZXNzb3IuamF2YQpAQCAtNDYsNiArNDYsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMuRGVmaW5pdGlvbnNGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Nb25pdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkJpbmRpbmdUeXBlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkV4dGVybmFsQXR0YWNobWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5JbXBsZW1lbnRhdGlvblR5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuSW50ZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkludGVudE1hcDsKQEAgLTExOCw2ICsxMTksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbml0aW9ucy5nZXRCaW5kaW5nVHlwZXMoKS5hZGQoKEJpbmRpbmdUeXBlKWV4dGVuc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRlbnNpb24gaW5zdGFuY2VvZiBJbXBsZW1lbnRhdGlvblR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbnMuZ2V0SW1wbGVtZW50YXRpb25UeXBlcygpLmFkZCgoSW1wbGVtZW50YXRpb25UeXBlKWV4dGVuc2lvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChleHRlbnNpb24gaW5zdGFuY2VvZiBFeHRlcm5hbEF0dGFjaG1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAJZGVmaW5pdGlvbnMuZ2V0RXh0ZXJuYWxBdHRhY2htZW50cygpLmFkZCgoRXh0ZXJuYWxBdHRhY2htZW50KWV4dGVuc2lvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0yNTAsMTQgKzI1MywxNyBAQAogICAgICAgICAvLyBGbGF0IGludGVudE1hcCBzdHJ1Y3R1cmUgYnkgY3JlYXRpbmcgYSBwb2xpY3lTZXQgZm9yIGVhY2ggb25lCiAgICAgICAgIExpc3Q8UG9saWN5U2V0PiBjb3B5ID0gbmV3IEFycmF5TGlzdDxQb2xpY3lTZXQ+KHNjYURlZm5zLmdldFBvbGljeVNldHMoKSk7CiAgICAgICAgIGZvciAoUG9saWN5U2V0IHBvbGljeVNldCA6IGNvcHkpIHsKLSAgICAgICAgICAgIC8vW2xyZXNlbmRlXSBEbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY3VycmVudCBwb2xpY3lTZXQgYW5kIGp1c3QgaW5jbHVkZSB0aGUgZmxhdCBvbmUgYmFzZWQgb24gcXVhbGlmaWVycyA/Ci0gICAgICAgICAgICAvL0lmIHdlIGRvbid0LCB0aGUgcG9saWN5IGlzIGJlaW5nIHJlc29sdmVkIHRvIHRoZSBvbmUgdGhhdCBoYXMgaW50ZW50TWFwIGFuZCBubyBkaXJlY3QgY29uY3JldGUgcG9saWNpZXMgCi0gICAgICAgICAgICBib29sZWFuIHJlbW92ZSA9IGZhbHNlOworICAgICAgICAJLy8gQWRkIFBvbGljeVNldHMgdG8gbW9kZWwgYmFzZWQgb24gcXVhbGlmaWVkIGludGVudHMuIFRoZSBwb2xpY3kgYnVpbGRlciB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBhc3NpZ25pbmcKKyAgICAgICAgCS8vIHRoZSBjb3JyZWN0IHBvbGljeSBzZXQuIAorICAgICAgICAJLy8gRm9yIGV4YW1wbGUsIE1hbmFnZWRUcmFuc2FjdGlvblBvbGljeVNldCB3aWxsIHJlc3VsdCBpbjoKKyAgICAgICAgCS8vIE1hbmFnZWRUcmFuc2FjdGlvblBvbGljeVNldCAgKG9yaWdpbmFsIFBvbGljeVNldCwgbXVzdCBleGlzdCBmb3IgbWF0Y2hpbmcgYXQgYnVpbGQgdGltZSkKKyAgICAgICAgCS8vIE1hbmFnZWRUcmFuc2FjdGlvblBvbGljeVNldC5tYW5hZ2VkVHJhbnNhY3Rpb24uZ2xvYmFsCisgICAgICAgIAkvLyBNYW5hZ2VkVHJhbnNhY3Rpb25Qb2xpY3lTZXQubWFuYWdlZFRyYW5zYWN0aW9uLmxvY2FsCiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vcHJvY2VzcyBpbnRlbnQgbWFwcwogICAgICAgICAgICAgZm9yKEludGVudE1hcCBpbnRlbnRNYXAgOiBwb2xpY3lTZXQuZ2V0SW50ZW50TWFwcygpKSB7CiAgICAgICAgICAgICAgICAgZm9yKFF1YWxpZmllciBxdWFsaWZpZXIgOiBpbnRlbnRNYXAuZ2V0UXVhbGlmaWVycygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IHRydWU7CisgICAgICAgICAgIC8vICAgICAgICAgcmVtb3ZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFBvbGljeVNldCBxdWFsaWZpZWRQb2xpY3lTZXQgPSBwb2xpY3lGYWN0b3J5LmNyZWF0ZVBvbGljeVNldCgpOwogICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWRQb2xpY3lTZXQuc2V0QXBwbGllc1RvKHBvbGljeVNldC5nZXRBcHBsaWVzVG8oKSk7CkBAIC0yNjUsNyArMjcxLDggQEAKICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVkUG9saWN5U2V0LnNldEF0dGFjaFRvKHBvbGljeVNldC5nZXRBdHRhY2hUbygpKTsKICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVkUG9saWN5U2V0LnNldEF0dGFjaFRvWFBhdGhFeHByZXNzaW9uKHBvbGljeVNldC5nZXRBdHRhY2hUb1hQYXRoRXhwcmVzc2lvbigpKTsKIAotICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWRQb2xpY3lTZXQuc2V0TmFtZShxdWFsaWZpZXIuZ2V0SW50ZW50KCkuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHF1YWxpZmllZExvY2FsTmFtZSA9IHBvbGljeVNldC5nZXROYW1lKCkuZ2V0TG9jYWxQYXJ0KCkgKyAiLiIgKyBxdWFsaWZpZXIuZ2V0SW50ZW50KCkuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpOworICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWRQb2xpY3lTZXQuc2V0TmFtZShuZXcgUU5hbWUocG9saWN5U2V0LmdldE5hbWUoKS5nZXROYW1lc3BhY2VVUkkoKSwgcXVhbGlmaWVkTG9jYWxOYW1lKSk7CiAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZFBvbGljeVNldC5nZXRQcm92aWRlZEludGVudHMoKS5jbGVhcigpOwogICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWRQb2xpY3lTZXQuZ2V0UHJvdmlkZWRJbnRlbnRzKCkuYWRkKHF1YWxpZmllci5nZXRJbnRlbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIHF1YWxpZmllZFBvbGljeVNldC5nZXRQb2xpY2llcygpLmNsZWFyKCk7CkBAIC0yNzUsOSArMjgyLDkgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmKHJlbW92ZSkgewotICAgICAgICAgICAgICAgIHNjYURlZm5zLmdldFBvbGljeVNldHMoKS5yZW1vdmUocG9saWN5U2V0KTsKLSAgICAgICAgICAgIH0KKy8vICAgICAgICAgICAgaWYocmVtb3ZlKSB7CisvLyAgICAgICAgICAgICAgICBzY2FEZWZucy5nZXRQb2xpY3lTZXRzKCkucmVtb3ZlKHBvbGljeVNldCk7CisvLyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvRXh0ZXJuYWxBdHRhY2htZW50UHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC9FeHRlcm5hbEF0dGFjaG1lbnRQcm9jZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2Y5ZDAyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvRXh0ZXJuYWxBdHRhY2htZW50UHJvY2Vzc29yLmphdmEKQEAgLTAsMCArMSwyOTYgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LnhtbDsNCisNCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LnhtbC5Qb2xpY3lDb25zdGFudHMuU0NBMTFfTlM7DQorDQoraW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsNCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7DQoraW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7DQorDQoraW1wb3J0IGphdmF4LnhtbC5YTUxDb25zdGFudHM7DQoraW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuTmFtZXNwYWNlQ29udGV4dDsNCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsNCitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247DQoraW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOw0KK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVdyaXRlcjsNCitpbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoOw0KK2ltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uOw0KK2ltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi54bWwueHBhdGguWFBhdGhIZWxwZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5CYXNlU3RBWEFydGlmYWN0UHJvY2Vzc29yOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlByb2Nlc3NvckNvbnRleHQ7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3I7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLk1vZGVsUmVzb2x2ZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRmFjdG9yeUV4dGVuc2lvblBvaW50Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuTW9uaXRvcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlByb2JsZW07DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Qcm9ibGVtLlNldmVyaXR5Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5FeHRlcm5hbEF0dGFjaG1lbnQ7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkludGVudDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuUG9saWN5RmFjdG9yeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuUG9saWN5U2V0Ow0KKw0KKy8qKg0KKyAqIFByb2Nlc3NvciBmb3IgaGFuZGxpbmcgWE1MIG1vZGVscyBvZiBFeHRlcm5hbEF0dGFjaG1lbnQgZGVmaW5pdGlvbnMNCisgKg0KKyAqIEB2ZXJzaW9uICRSZXY6IDk2MTAxMCAkICREYXRlOiAyMDEwLTA3LTA2IDEzOjM0OjU0IC0wNzAwIChUdWUsIDA2IEp1bCAyMDEwKSAkDQorICovDQorcHVibGljIGNsYXNzIEV4dGVybmFsQXR0YWNobWVudFByb2Nlc3NvciBleHRlbmRzIEJhc2VTdEFYQXJ0aWZhY3RQcm9jZXNzb3INCisJCWltcGxlbWVudHMgU3RBWEFydGlmYWN0UHJvY2Vzc29yPEV4dGVybmFsQXR0YWNobWVudD4sIFBvbGljeUNvbnN0YW50cyB7DQorDQorCQ0KKwlwcml2YXRlIFBvbGljeUZhY3RvcnkgcG9saWN5RmFjdG9yeTsNCisJcHJpdmF0ZSBYUGF0aEhlbHBlciB4cGF0aEhlbHBlcjsNCisJDQorCXB1YmxpYyBFeHRlcm5hbEF0dGFjaG1lbnRQcm9jZXNzb3IoRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSkgew0KKwkJRmFjdG9yeUV4dGVuc2lvblBvaW50IGZhY3RvcmllcyA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KEZhY3RvcnlFeHRlbnNpb25Qb2ludC5jbGFzcyk7DQorCQl0aGlzLnBvbGljeUZhY3RvcnkgPSBmYWN0b3JpZXMuZ2V0RmFjdG9yeShQb2xpY3lGYWN0b3J5LmNsYXNzKTsNCisJCXRoaXMueHBhdGhIZWxwZXIgPSBYUGF0aEhlbHBlci5nZXRJbnN0YW5jZShyZWdpc3RyeSk7DQorCX0NCisJDQorCXB1YmxpYyBDbGFzczxFeHRlcm5hbEF0dGFjaG1lbnQ+IGdldE1vZGVsVHlwZSgpIHsNCisJCXJldHVybiBFeHRlcm5hbEF0dGFjaG1lbnQuY2xhc3M7DQorCX0NCisNCisJcHVibGljIHZvaWQgcmVzb2x2ZShFeHRlcm5hbEF0dGFjaG1lbnQgYXR0YWNobWVudCwgTW9kZWxSZXNvbHZlciByZXNvbHZlciwNCisJCQlQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uIHsNCisJICAgICAgaWYgKGF0dGFjaG1lbnQgIT0gbnVsbCAmJiBhdHRhY2htZW50LmlzVW5yZXNvbHZlZCgpKSB7DQorCSAgICAgICAgICAgIHJlc29sdmVJbnRlbnRzKGF0dGFjaG1lbnQsIHJlc29sdmVyLCBjb250ZXh0KTsNCisJICAgICAgICAgICAgcmVzb2x2ZVBvbGljeVNldHMoYXR0YWNobWVudCwgcmVzb2x2ZXIsIGNvbnRleHQpOwkgICAgICAgICAgIAkJICAgICAgICAgIA0KKw0KKwkgICAgICAgICAgICBhdHRhY2htZW50LnNldFVucmVzb2x2ZWQoZmFsc2UpOw0KKwkgICAgICB9DQorCQkNCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgcmVzb2x2ZVBvbGljeVNldHMoRXh0ZXJuYWxBdHRhY2htZW50IGF0dGFjaG1lbnQsDQorCQkJTW9kZWxSZXNvbHZlciByZXNvbHZlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB7DQorCSAgICAgTGlzdDxQb2xpY3lTZXQ+IHJlZmVycmVkUG9saWN5U2V0cyA9IG5ldyBBcnJheUxpc3Q8UG9saWN5U2V0PigpOw0KKwkgICAgICAgIGZvciAoUG9saWN5U2V0IHJlZmVycmVkUG9saWN5U2V0IDogYXR0YWNobWVudC5nZXRQb2xpY3lTZXRzKCkpIHsNCisJICAgICAgICAgICAgaWYgKHJlZmVycmVkUG9saWN5U2V0LmlzVW5yZXNvbHZlZCgpKSB7DQorCSAgICAgICAgICAgICAgICBQb2xpY3lTZXQgcmVzb2x2ZWQgPSByZXNvbHZlci5yZXNvbHZlTW9kZWwoUG9saWN5U2V0LmNsYXNzLCByZWZlcnJlZFBvbGljeVNldCwgY29udGV4dCk7DQorCSAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkLmlzVW5yZXNvbHZlZCgpIHx8IHJlc29sdmVkICE9IHJlZmVycmVkUG9saWN5U2V0KSB7DQorCSAgICAgICAgICAgICAgICAgICAgcmVmZXJyZWRQb2xpY3lTZXRzLmFkZChyZXNvbHZlZCk7DQorCSAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKwkgICAgICAgICAgICAgICAgICAgIGVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLCAiUmVmZXJyZWRQb2xpY3lTZXROb3RGb3VuZCIsIGF0dGFjaG1lbnQsIHJlZmVycmVkUG9saWN5U2V0LCBhdHRhY2htZW50KTsNCisJICAgICAgICAgICAgICAgICAgICByZXR1cm47CSAgICAgICAgICAgICAgICAgDQorCSAgICAgICAgICAgICAgICB9DQorCSAgICAgICAgICAgIH0gZWxzZSB7DQorCSAgICAgICAgICAgICAgICByZWZlcnJlZFBvbGljeVNldHMuYWRkKHJlZmVycmVkUG9saWN5U2V0KTsNCisJICAgICAgICAgICAgfQ0KKwkgICAgICAgIH0NCisJICAgICAgICBhdHRhY2htZW50LmdldFBvbGljeVNldHMoKS5jbGVhcigpOw0KKwkgICAgICAgIGF0dGFjaG1lbnQuZ2V0UG9saWN5U2V0cygpLmFkZEFsbChyZWZlcnJlZFBvbGljeVNldHMpOw0KKwkJDQorCX0NCisNCisJcHJpdmF0ZSB2b2lkIHJlc29sdmVJbnRlbnRzKEV4dGVybmFsQXR0YWNobWVudCBhdHRhY2htZW50LA0KKwkJCU1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgew0KKwkgICAgICAgaWYgKGF0dGFjaG1lbnQgIT0gbnVsbCkgew0KKwkgICAgICAgICAgICAvL3Jlc29sdmUgYWxsIHByb3ZpZGVkIGludGVudHMNCisJICAgICAgICAgICAgTGlzdDxJbnRlbnQ+IHByb3ZpZGVkSW50ZW50cyA9IG5ldyBBcnJheUxpc3Q8SW50ZW50PigpOw0KKwkgICAgICAgICAgICBmb3IgKEludGVudCBwcm92aWRlZEludGVudCA6IGF0dGFjaG1lbnQuZ2V0SW50ZW50cygpKSB7DQorCSAgICAgICAgICAgICAgICBpZiAocHJvdmlkZWRJbnRlbnQuaXNVbnJlc29sdmVkKCkpIHsNCisJICAgICAgICAgICAgICAgICAgICBJbnRlbnQgcmVzb2x2ZWQgPSByZXNvbHZlci5yZXNvbHZlTW9kZWwoSW50ZW50LmNsYXNzLCBwcm92aWRlZEludGVudCwgY29udGV4dCk7DQorCSAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZC5pc1VucmVzb2x2ZWQoKSB8fCByZXNvbHZlZCAhPSBwcm92aWRlZEludGVudCkgew0KKwkgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZEludGVudHMuYWRkKHJlc29sdmVkKTsNCisJICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKwkgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihjb250ZXh0LmdldE1vbml0b3IoKSwgIlByb3ZpZGVkSW50ZW50Tm90Rm91bmQiLCBhdHRhY2htZW50LCBwcm92aWRlZEludGVudCwgYXR0YWNobWVudCk7DQorCSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsJICAgICAgICAgICAgICAgICAgICAgIA0KKwkgICAgICAgICAgICAgICAgICAgIH0NCisJICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorCSAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWRJbnRlbnRzLmFkZChwcm92aWRlZEludGVudCk7DQorCSAgICAgICAgICAgICAgICB9DQorCSAgICAgICAgICAgIH0NCisJICAgICAgICAgICAgYXR0YWNobWVudC5nZXRJbnRlbnRzKCkuY2xlYXIoKTsNCisJICAgICAgICAgICAgYXR0YWNobWVudC5nZXRJbnRlbnRzKCkuYWRkQWxsKHByb3ZpZGVkSW50ZW50cyk7DQorCSAgICAgICAgfQ0KKwkJDQorCX0NCisNCisJcHVibGljIFFOYW1lIGdldEFydGlmYWN0VHlwZSgpIHsNCisJCXJldHVybiBFWFRFUk5BTF9BVFRBQ0hNRU5UX1FOQU1FOw0KKwl9DQorDQorCXB1YmxpYyBFeHRlcm5hbEF0dGFjaG1lbnQgcmVhZChYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpDQorCQkJdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbiB7DQorCQkJRXh0ZXJuYWxBdHRhY2htZW50IGF0dGFjaG1lbnQgPSBwb2xpY3lGYWN0b3J5LmNyZWF0ZUV4dGVybmFsQXR0YWNobWVudCgpOw0KKwkJCQ0KKwkJCXJlYWRQb2xpY3lTZXRzKGF0dGFjaG1lbnQsIHJlYWRlcik7DQorCQkJcmVhZEludGVudHMoYXR0YWNobWVudCwgcmVhZGVyLCBjb250ZXh0KTsNCisJCQlyZWFkQXR0YWNoVG8oYXR0YWNobWVudCwgcmVhZGVyLCBjb250ZXh0KTsNCisJCQkNCisJCQlyZXR1cm4gYXR0YWNobWVudDsNCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgcmVhZEludGVudHMoRXh0ZXJuYWxBdHRhY2htZW50IGF0dGFjaG1lbnQsDQorCQkJWE1MU3RyZWFtUmVhZGVyIHJlYWRlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB7DQorCSAgICAgIFN0cmluZyB2YWx1ZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCBJTlRFTlRTKTsNCisJICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgew0KKwkgICAgICAgICAgICBMaXN0PEludGVudD4gaW50ZW50cyA9IGF0dGFjaG1lbnQuZ2V0SW50ZW50cygpOw0KKwkgICAgICAgICAgICBmb3IgKFN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlKTsgdG9rZW5zLmhhc01vcmVUb2tlbnMoKTspIHsNCisJICAgICAgICAgICAgICAgIFFOYW1lIHFuYW1lID0gZ2V0UU5hbWVWYWx1ZShyZWFkZXIsIHRva2Vucy5uZXh0VG9rZW4oKSk7DQorCSAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gcG9saWN5RmFjdG9yeS5jcmVhdGVJbnRlbnQoKTsNCisJICAgICAgICAgICAgICAgIGludGVudC5zZXROYW1lKHFuYW1lKTsJICAgICAgICAgICAgICAgDQorCSAgICAgICAgICAgICAgICBpbnRlbnRzLmFkZChpbnRlbnQpOw0KKwkgICAgICAgICAgICB9DQorCSAgICAgICAgfQ0KKwkJDQorCX0NCisNCisJcHJpdmF0ZSB2b2lkIHJlYWRBdHRhY2hUbyhFeHRlcm5hbEF0dGFjaG1lbnQgYXR0YWNobWVudCwNCisJCQlYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHsNCisJCU1vbml0b3IgbW9uaXRvciA9IGNvbnRleHQuZ2V0TW9uaXRvcigpOw0KKwkJDQorCQlTdHJpbmcgYXR0YWNoVG8gPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgQVRUQUNIX1RPKTsNCisJCWlmICggYXR0YWNoVG8gIT0gbnVsbCApIHsNCisJCSAgIHRyeSB7DQorICAgICAgICAgICAgICAgWFBhdGggcGF0aCA9IHhwYXRoSGVscGVyLm5ld1hQYXRoKCk7DQorICAgICAgICAgICAgICAgTmFtZXNwYWNlQ29udGV4dCBuc0NvbnRleHQgPSB4cGF0aEhlbHBlci5nZXROYW1lc3BhY2VDb250ZXh0KGF0dGFjaFRvLCByZWFkZXIuZ2V0TmFtZXNwYWNlQ29udGV4dCgpKTsNCisgICAgICAgICAgICAgICBwYXRoLnNldFhQYXRoRnVuY3Rpb25SZXNvbHZlcihuZXcgUG9saWN5WFBhdGhGdW5jdGlvblJlc29sdmVyKG5zQ29udGV4dCkpOyAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICBhdHRhY2hUbyA9IFBvbGljeVhQYXRoRnVuY3Rpb24ubm9ybWFsaXplKGF0dGFjaFRvLGdldFNDQVByZWZpeChuc0NvbnRleHQpKTsNCisgICAgICAgICAgICAgICBYUGF0aEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHhwYXRoSGVscGVyLmNvbXBpbGUocGF0aCwgbnNDb250ZXh0LCBhdHRhY2hUbyk7DQorICAgICAgICAgICAgICAgYXR0YWNobWVudC5zZXRBdHRhY2hUbyhhdHRhY2hUbyk7DQorICAgICAgICAgICAgICAgYXR0YWNobWVudC5zZXRBdHRhY2hUb1hQYXRoRXhwcmVzc2lvbihleHByZXNzaW9uKTsNCisgICAgICAgICAgIH0gY2F0Y2ggKFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiBlKSB7DQorICAgICAgICAgICAgICAgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiBjZSA9IG5ldyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uKGUpOw0KKyAgICAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIiwgYXR0YWNobWVudCwgY2UpOyAgICAgICAgICAgICAgDQorICAgICAgICAgICB9DQorCQl9DQorCQkNCisJfQ0KKw0KKwkgICBwcml2YXRlIFN0cmluZyBnZXRTQ0FQcmVmaXgoTmFtZXNwYWNlQ29udGV4dCBuc0NvbnRleHQpIHsNCisNCisJICAgICAgICBJdGVyYXRvcjxTdHJpbmc+IGl0ZXIgPSBuc0NvbnRleHQuZ2V0UHJlZml4ZXMoU0NBMTFfTlMpOw0KKwkgICAgICAgIHdoaWxlIChpdGVyLmhhc05leHQoKSkgew0KKwkgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0gaXRlci5uZXh0KCk7DQorCSAgICAgICAgICAgIGlmICghcHJlZml4LmVxdWFscyhYTUxDb25zdGFudHMuREVGQVVMVF9OU19QUkVGSVgpKSB7DQorCSAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4Ow0KKwkgICAgICAgICAgICB9DQorCSAgICAgICAgfQ0KKw0KKwkgICAgICAgIHJldHVybiAiX19zY2EiOw0KKwkgICAgfQ0KKwkvKioNCisgICAgICogUmVhZHMgcG9saWN5IHNldHMgYXNzb2NpYXRlZCB3aXRoIGFuIGV4dGVybmFsIGF0dGFjaG1lbnQgZWxlbWVudC4NCisgICAgICogQHBhcmFtIHN1YmplY3QNCisgICAgICogQHBhcmFtIG9wZXJhdGlvbg0KKyAgICAgKiBAcGFyYW0gcmVhZGVyDQorICAgICAqLw0KKyAgICBwcml2YXRlIHZvaWQgcmVhZFBvbGljeVNldHMoRXh0ZXJuYWxBdHRhY2htZW50IGF0dGFjaG1lbnQsIFhNTFN0cmVhbVJlYWRlciByZWFkZXIpIHsNCisgICAgICANCisgICAgIA0KKyAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIFBPTElDWV9TRVRTKTsNCisgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7DQorICAgICAgICAgICAgTGlzdDxQb2xpY3lTZXQ+IHBvbGljeVNldHMgPSBhdHRhY2htZW50LmdldFBvbGljeVNldHMoKTsNCisgICAgICAgICAgICBmb3IgKFN0cmluZ1Rva2VuaXplciB0b2tlbnMgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHZhbHVlKTsgdG9rZW5zLmhhc01vcmVUb2tlbnMoKTspIHsNCisgICAgICAgICAgICAgICAgUU5hbWUgcW5hbWUgPSBnZXRRTmFtZVZhbHVlKHJlYWRlciwgdG9rZW5zLm5leHRUb2tlbigpKTsNCisgICAgICAgICAgICAgICAgUG9saWN5U2V0IHBvbGljeVNldCA9IHBvbGljeUZhY3RvcnkuY3JlYXRlUG9saWN5U2V0KCk7DQorICAgICAgICAgICAgICAgIHBvbGljeVNldC5zZXROYW1lKHFuYW1lKTsgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBwb2xpY3lTZXRzLmFkZChwb2xpY3lTZXQpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgfQ0KKwlwdWJsaWMgdm9pZCB3cml0ZShFeHRlcm5hbEF0dGFjaG1lbnQgYXR0YWNobWVudCwgWE1MU3RyZWFtV3JpdGVyIHdyaXRlciwNCisJCQlQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbiwNCisJCQlYTUxTdHJlYW1FeGNlcHRpb24gew0KKwkJd3JpdGVQb2xpY3lTZXRzKGF0dGFjaG1lbnQsIHdyaXRlciwgY29udGV4dCk7DQorCQl3cml0ZUludGVudHMoYXR0YWNobWVudCwgd3JpdGVyLCBjb250ZXh0KTsNCisJCXdyaXRlQXR0YWNoVG8oYXR0YWNobWVudCwgd3JpdGVyLCBjb250ZXh0KTsNCisJCQ0KKwl9DQorCQ0KKwkgICBwcml2YXRlIHZvaWQgd3JpdGVBdHRhY2hUbyhFeHRlcm5hbEF0dGFjaG1lbnQgYXR0YWNobWVudCwNCisJCQlYTUxTdHJlYW1Xcml0ZXIgd3JpdGVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24gew0KKwkJaWYgKCBhdHRhY2htZW50LmdldEF0dGFjaFRvKCkgIT0gbnVsbCApIHsNCisJCQl3cml0ZXIud3JpdGVBdHRyaWJ1dGUoUG9saWN5Q29uc3RhbnRzLkFUVEFDSF9UTywgYXR0YWNobWVudC5nZXRBdHRhY2hUbygpKTsNCisJCX0NCisJCQ0KKwl9DQorDQorCXByaXZhdGUgdm9pZCB3cml0ZUludGVudHMoRXh0ZXJuYWxBdHRhY2htZW50IGF0dGFjaG1lbnQsDQorCQkJWE1MU3RyZWFtV3JpdGVyIHdyaXRlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uIHsNCisJICAgICBpZiAoIWF0dGFjaG1lbnQuZ2V0SW50ZW50cygpLmlzRW1wdHkoKSkgew0KKwkgICAgCSBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7DQorCSAgICAJIGZvciAoSW50ZW50IGludGVudCA6IGF0dGFjaG1lbnQuZ2V0SW50ZW50cygpKSB7DQorCSAgICAJCSBzYi5hcHBlbmQoZ2V0UXVhbGlmaWVkTmFtZShpbnRlbnQuZ2V0TmFtZSgpLCB3cml0ZXIpKTsNCisJICAgIAkJIHNiLmFwcGVuZCgiICIpOw0KKwkgICAgCSB9DQorCSAgICAJIC8vIFJlbW92ZSB0aGUgbGFzdCBzcGFjZQ0KKwkgICAgCSBzYi5kZWxldGVDaGFyQXQoc2IubGVuZ3RoKCkgLSAxKTsNCisJICAgIAkgd3JpdGVyLndyaXRlQXR0cmlidXRlKFBvbGljeUNvbnN0YW50cy5JTlRFTlRTLCBzYi50b1N0cmluZygpKTsNCisJICAgICB9DQorCQkNCisJfQ0KKw0KKwlwcml2YXRlIHZvaWQgd3JpdGVQb2xpY3lTZXRzKEV4dGVybmFsQXR0YWNobWVudCBhdHRhY2htZW50LA0KKwkJCVhNTFN0cmVhbVdyaXRlciB3cml0ZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbiB7DQorCQlpZiAoICFhdHRhY2htZW50LmdldFBvbGljeVNldHMoKS5pc0VtcHR5KCkpIHsNCisJCQkgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOw0KKwkgICAgCSBmb3IgKFBvbGljeVNldCBwcyA6IGF0dGFjaG1lbnQuZ2V0UG9saWN5U2V0cygpKSB7DQorCSAgICAJCSBzYi5hcHBlbmQoZ2V0UXVhbGlmaWVkTmFtZShwcy5nZXROYW1lKCksIHdyaXRlcikpOw0KKwkgICAgCQkgc2IuYXBwZW5kKCIgIik7DQorCSAgICAJIH0NCisJICAgIAkgLy8gUmVtb3ZlIHRoZSBsYXN0IHNwYWNlDQorCSAgICAJIHNiLmRlbGV0ZUNoYXJBdChzYi5sZW5ndGgoKSAtIDEpOw0KKwkgICAgCSB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoUG9saWN5Q29uc3RhbnRzLlBPTElDWV9TRVRTLCBzYi50b1N0cmluZygpKTsNCisJCX0NCisJCQ0KKwl9DQorDQorCSAgcHJpdmF0ZSBTdHJpbmcgZ2V0UXVhbGlmaWVkTmFtZShRTmFtZSBuYW1lLCBYTUxTdHJlYW1Xcml0ZXIgd3JpdGVyKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uIHsNCisJICAgICAgICBTdHJpbmcgbG9jYWwgPSBuYW1lLmdldExvY2FsUGFydCgpOw0KKwkgICAgICAgIFN0cmluZyBwcmVmaXggPSB3cml0ZXIuZ2V0UHJlZml4KG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOw0KKwkgICAgICAgIGlmIChwcmVmaXggIT0gbnVsbCAmJiBwcmVmaXgubGVuZ3RoKCkgPiAwKSB7DQorCSAgICAgICAgICAgIHJldHVybiBwcmVmaXggKyAnOicgKyBsb2NhbDsNCisJICAgICAgICB9IGVsc2Ugew0KKwkgICAgICAgICAgICByZXR1cm4gbG9jYWw7DQorCSAgICAgICAgfQ0KKwkgICAgfQ0KKwkgIA0KKwkvKioNCisgICAgICogUmVwb3J0IGEgZXJyb3IuDQorICAgICAqIA0KKyAgICAgKiBAcGFyYW0gcHJvYmxlbXMNCisgICAgICogQHBhcmFtIG1lc3NhZ2UNCisgICAgICogQHBhcmFtIG1vZGVsDQorICAgICAqLw0KKyAgICBwcml2YXRlIHZvaWQgZXJyb3IoTW9uaXRvciBtb25pdG9yLCBTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IG1vZGVsLCBPYmplY3QuLi4gbWVzc2FnZVBhcmFtZXRlcnMpIHsNCisgICAgICAgIGlmIChtb25pdG9yICE9IG51bGwpIHsNCisgICAgICAgICAgICBQcm9ibGVtIHByb2JsZW0gPQ0KKyAgICAgICAgICAgICAgICBtb25pdG9yLmNyZWF0ZVByb2JsZW0odGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLlJFU09VUkNFX0JVTkRMRSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldmVyaXR5LkVSUk9SLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9iamVjdFtdKW1lc3NhZ2VQYXJhbWV0ZXJzKTsNCisgICAgICAgICAgICBtb25pdG9yLnByb2JsZW0ocHJvYmxlbSk7DQorICAgICAgICB9DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvSW50ZW50UHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC9JbnRlbnRQcm9jZXNzb3IuamF2YQppbmRleCAyOTY2NzdkLi5jN2ViN2Y0IDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC9JbnRlbnRQcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC9JbnRlbnRQcm9jZXNzb3IuamF2YQpAQCAtMTI1LDYgKzEyNSwxNCBAQAogICAgICAgICByZWFkRXhjbHVkZWRJbnRlbnRzKGludGVudCwgcmVhZGVyKTsKIAogICAgICAgICByZWFkQ29uc3RyYWluZWRUeXBlcyhpbnRlbnQsIHJlYWRlcik7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgbXV0dWFsbHlFeGNsdXNpdmVTdHJpbmcgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgTVVUVUFMTFlfRVhDTFVTSVZFKTsKKyAgICAgICAgaWYgKG11dHVhbGx5RXhjbHVzaXZlU3RyaW5nICE9IG51bGwgJiYKKyAgICAgICAgICAgIG11dHVhbGx5RXhjbHVzaXZlU3RyaW5nLmVxdWFscygidHJ1ZSIpKXsKKyAgICAgICAgICAgIGludGVudC5zZXRNdXR1YWxseUV4Y2x1c2l2ZSh0cnVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludGVudC5zZXRNdXR1YWxseUV4Y2x1c2l2ZShmYWxzZSk7CisgICAgICAgIH0KIAogICAgICAgICBJbnRlbnQgY3VycmVudCA9IGludGVudDsKICAgICAgICAgaW50IGV2ZW50ID0gcmVhZGVyLmdldEV2ZW50VHlwZSgpOwpAQCAtMTQ2LDYgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIGlzRGVmYXVsdCA9IGRlZmF1bHRRID09IG51bGwgPyBmYWxzZSA6IEJvb2xlYW4ucGFyc2VCb29sZWFuKGRlZmF1bHRRKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBxdWFsaWZpZWRJbnRlbnROYW1lID0gaW50ZW50TG9jYWxOYW1lICsgUVVBTElGSUVSICsgcXVhbGlmaWVyTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgIEludGVudCBxdWFsaWZpZWQgPSBwb2xpY3lGYWN0b3J5LmNyZWF0ZUludGVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVkLnNldFVucmVzb2x2ZWQoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlmaWVkLnNldFR5cGUoaW50ZW50LmdldFR5cGUoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWQuc2V0TmFtZShuZXcgUU5hbWUocXVhbGlmaWVkSW50ZW50TmFtZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmYXVsdCkgewpAQCAtMTk4LDYgKzIwNywxOSBAQAogICAgICAgICBpZiAoaW50ZW50LmdldFF1YWxpZmllZEludGVudHMoKS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgaW50ZW50LnNldERlZmF1bHRRdWFsaWZpZWRJbnRlbnQoaW50ZW50LmdldFF1YWxpZmllZEludGVudHMoKS5nZXQoMCkpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBzZXQgYWxsIHF1YWxpZmllZCBpbnRlbnRzIGFzIGV4Y2x1ZGluZyBvbmUgYW5vdGhlciBpZiB0aGUgcXVhbGlmaWFibGUKKyAgICAgICAgLy8gaW50ZW50IGlzIHNldCB0byBiZSBtdXR1YWxseSBleGNsdXNpdmUKKyAgICAgICAgaWYgKGludGVudC5pc011dHVhbGx5RXhjbHVzaXZlKCkpeworICAgICAgICAgICAgZm9yIChJbnRlbnQgcXVhbGlmaWVkSW50ZW50IDogaW50ZW50LmdldFF1YWxpZmllZEludGVudHMoKSl7CisgICAgICAgICAgICAgICAgZm9yIChJbnRlbnQgZXhjbHVkZWRJbnRlbnQgOiBpbnRlbnQuZ2V0UXVhbGlmaWVkSW50ZW50cygpKXsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHF1YWxpZmllZEludGVudCAhPSBleGNsdWRlZEludGVudCl7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZWRJbnRlbnQuZ2V0RXhjbHVkZWRJbnRlbnRzKCkuYWRkKGV4Y2x1ZGVkSW50ZW50KTsKKyAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICByZXR1cm4gaW50ZW50OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvUG9saWN5Q29uc3RhbnRzLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC9Qb2xpY3lDb25zdGFudHMuamF2YQppbmRleCA2OWM1YTExLi4yNDk4ZjNkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC9Qb2xpY3lDb25zdGFudHMuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC9Qb2xpY3lDb25zdGFudHMuamF2YQpAQCAtNDksNyArNDksMTEgQEAKICAgICBTdHJpbmcgUkVRVUlSRVMgPSAicmVxdWlyZXMiOwogICAgIFN0cmluZyBFWENMVURFUyA9ICJleGNsdWRlcyI7CiAgICAgU3RyaW5nIERFRkFVTFQgPSAiZGVmYXVsdCI7Ci0KKyAgICBTdHJpbmcgRVhURVJOQUxfQVRUQUNITUVOVCA9ICJleHRlcm5hbEF0dGFjaG1lbnQiOworICAgIFN0cmluZyBJTlRFTlRTID0gImludGVudHMiOworICAgIFN0cmluZyBQT0xJQ1lfU0VUUyA9ICJwb2xpY3lTZXRzIjsKKyAgICBTdHJpbmcgTVVUVUFMTFlfRVhDTFVTSVZFID0gIm11dHVhbGx5RXhjbHVzaXZlIjsKKyAgICAKICAgICBTdHJpbmcgQUxXQVlTX1BST1ZJREVTID0gImFsd2F5c1Byb3ZpZGVzIjsKICAgICBTdHJpbmcgTUFZX1BST1ZJREUgPSAibWF5UHJvdmlkZSI7CiAgICAgU3RyaW5nIElOVEVOVF9UWVBFID0gImludGVudFR5cGUiOwpAQCAtNjgsNyArNzIsNyBAQAogICAgIFFOYW1lIFBPTElDWV9JTlRFTlRfTUFQX1FVQUxJRklFUl9RTkFNRSA9IG5ldyBRTmFtZShTQ0ExMV9OUywgSU5URU5UX01BUF9RVUFMSUZJRVIpOwogICAgIFFOYW1lIFBPTElDWV9TRVRfUkVGRVJFTkNFX1FOQU1FID0gbmV3IFFOYW1lKFNDQTExX05TLCBQT0xJQ1lfU0VUX1JFRkVSRU5DRSk7CiAgICAgUU5hbWUgSU5URU5UX1FVQUxJRklFUl9RTkFNRSA9IG5ldyBRTmFtZShTQ0ExMV9OUywgSU5URU5UX1FVQUxJRklFUik7Ci0KKyAgICBRTmFtZSBFWFRFUk5BTF9BVFRBQ0hNRU5UX1FOQU1FID0gbmV3IFFOYW1lKFNDQTExX05TLCBFWFRFUk5BTF9BVFRBQ0hNRU5UKTsKICAgICBTdHJpbmcgUVVBTElGSUVEX0lOVEVOVF9DT05TVFJBSU5TX0VSUk9SID0gIiAtIFF1YWxpZmllZCBJbnRlbnRzIG11c3Qgbm90IHNwZWNpZnkgJ2NvbnN0cmFpbnMnIGF0dHJpYnV0ZSI7CiAKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kveG1sL1BvbGljeVNldFByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvUG9saWN5U2V0UHJvY2Vzc29yLmphdmEKaW5kZXggNjg0NzVhMi4uNmJmNzk3ZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvUG9saWN5U2V0UHJvY2Vzc29yLmphdmEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvUG9saWN5U2V0UHJvY2Vzc29yLmphdmEKQEAgLTM1OSw4ICszNTksMTQgQEAKICAgICAgICAgd3JpdGVyLndyaXRlU3RhcnRFbGVtZW50KFNDQTExX05TLCBQT0xJQ1lfU0VUKTsKICAgICAgICAgd3JpdGVyLndyaXRlTmFtZXNwYWNlKHBvbGljeVNldC5nZXROYW1lKCkuZ2V0UHJlZml4KCksIHBvbGljeVNldC5nZXROYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCkpOwogICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoTkFNRSwgcG9saWN5U2V0LmdldE5hbWUoKS5nZXRQcmVmaXgoKSArIENPTE9OICsgcG9saWN5U2V0LmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7Ci0gICAgICAgIHdyaXRlci53cml0ZUF0dHJpYnV0ZShBUFBMSUVTX1RPLCBwb2xpY3lTZXQuZ2V0QXBwbGllc1RvKCkpOwotICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoQVRUQUNIX1RPLCBwb2xpY3lTZXQuZ2V0QXR0YWNoVG8oKSk7CisKKyAgICAgICAgaWYgKHBvbGljeVNldC5nZXRBcHBsaWVzVG8oKSAhPSBudWxsKXsKKyAgICAgICAgICAgIHdyaXRlci53cml0ZUF0dHJpYnV0ZShBUFBMSUVTX1RPLCBwb2xpY3lTZXQuZ2V0QXBwbGllc1RvKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAocG9saWN5U2V0LmdldEF0dGFjaFRvKCkgIT0gbnVsbCl7CisgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoQVRUQUNIX1RPLCBwb2xpY3lTZXQuZ2V0QXR0YWNoVG8oKSk7CisgICAgICAgIH0KIAogICAgICAgICB3cml0ZVByb3ZpZGVkSW50ZW50cyhwb2xpY3lTZXQsIHdyaXRlcik7CiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kveG1sL1BvbGljeVhQYXRoRnVuY3Rpb24uamF2YSBiL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kveG1sL1BvbGljeVhQYXRoRnVuY3Rpb24uamF2YQppbmRleCBkMGI0NWIyLi44ZTJkN2Y5IDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC9Qb2xpY3lYUGF0aEZ1bmN0aW9uLmphdmEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvUG9saWN5WFBhdGhGdW5jdGlvbi5qYXZhCkBAIC0yOSw2ICsyOSw3IEBACiBpbXBvcnQgamF2YS51dGlsLnJlZ2V4Lk1hdGNoZXI7CiBpbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47CiAKK2ltcG9ydCBqYXZheC54bWwuWE1MQ29uc3RhbnRzOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuTmFtZXNwYWNlQ29udGV4dDsKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEZ1bmN0aW9uOwpAQCAtMjQyLDcgKzI0Myw3IEBACiAJcHJpdmF0ZSBRTmFtZSBnZXRTdHJpbmdBc1FOYW1lKFN0cmluZyBpbnRlbnQpIHsKIAkJaW50IGlkeCA9IGludGVudC5pbmRleE9mKCc6Jyk7CiAJCWlmIChpZHggPT0gLTEpCi0JCQlyZXR1cm4gbmV3IFFOYW1lKGludGVudCk7CisJCQlyZXR1cm4gbmV3IFFOYW1lKG5hbWVzcGFjZUNvbnRleHQuZ2V0TmFtZXNwYWNlVVJJKFhNTENvbnN0YW50cy5ERUZBVUxUX05TX1BSRUZJWCksIGludGVudCk7CiAJCQogCQlTdHJpbmcgcHJlZml4ID0gaW50ZW50LnN1YnN0cmluZygwLCBpZHgpOwogCQlpbnRlbnQgPSBpbnRlbnQuc3Vic3RyaW5nKGlkeCArIDEpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgppbmRleCA3OTgyZGMxLi4yNTBjYzFkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgpAQCAtMjYsNCArMjYsNCBAQAogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kueG1sLkltcGxlbWVudGF0aW9uVHlwZVByb2Nlc3NvcjtxbmFtZT1odHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIjaW1wbGVtZW50YXRpb25UeXBlLG1vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkltcGxlbWVudGF0aW9uVHlwZQ0KIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LnhtbC5JbnRlbnRQcm9jZXNzb3I7cW5hbWU9aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyI2ludGVudCxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5JbnRlbnQNCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS54bWwuUG9saWN5U2V0UHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiNwb2xpY3lTZXQsbW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuUG9saWN5U2V0DQotDQorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kueG1sLkV4dGVybmFsQXR0YWNobWVudFByb2Nlc3NvcjtxbmFtZT1odHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIjZXh0ZXJuYWxBdHRhY2htZW50LG1vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkV4dGVybmFsQXR0YWNobWVudA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kveG1sL1JlYWREb2N1bWVudFRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC9SZWFkRG9jdW1lbnRUZXN0Q2FzZS5qYXZhCmluZGV4IDIzMWJkZmQuLmI5MTMwOGMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kveG1sL1JlYWREb2N1bWVudFRlc3RDYXNlLmphdmEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvUmVhZERvY3VtZW50VGVzdENhc2UuamF2YQpAQCAtNDYsNiArNDYsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5EZWZhdWx0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5CaW5kaW5nVHlwZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5FeHRlbnNpb25UeXBlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkV4dGVybmFsQXR0YWNobWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5JbXBsZW1lbnRhdGlvblR5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuSW50ZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkludGVudE1hcDsKQEAgLTcyLDYgKzczLDggQEAKICAgICBwcml2YXRlIE1hcDxRTmFtZSwgUG9saWN5U2V0PiBwb2xpY3lTZXRUYWJsZSA9IG5ldyBIYXNodGFibGU8UU5hbWUsIFBvbGljeVNldD4oKTsKICAgICBwcml2YXRlIE1hcDxRTmFtZSwgQmluZGluZ1R5cGU+IGJpbmRpbmdUeXBlc1RhYmxlID0gbmV3IEhhc2h0YWJsZTxRTmFtZSwgQmluZGluZ1R5cGU+KCk7CiAgICAgcHJpdmF0ZSBNYXA8UU5hbWUsIEltcGxlbWVudGF0aW9uVHlwZT4gaW1wbFR5cGVzVGFibGUgPSBuZXcgSGFzaHRhYmxlPFFOYW1lLCBJbXBsZW1lbnRhdGlvblR5cGU+KCk7CisgICAgcHJpdmF0ZSBNYXA8UU5hbWUsIEV4dGVybmFsQXR0YWNobWVudD4gYXR0YWNobWVudHNUYWJsZSA9IG5ldyBIYXNodGFibGU8UU5hbWUsIEV4dGVybmFsQXR0YWNobWVudD4oKTsKKyAgICAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgc2NhTmFtZXNwYWNlID0gImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIG5hbWVzcGFjZSA9ICJodHRwOi8vdGVzdCI7CiAKQEAgLTg2LDYgKzg5LDcgQEAKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBiYXNpY0F1dGhNc2dQcm90U2VjdXJpdHkgPSBuZXcgUU5hbWUobmFtZXNwYWNlLCAiQmFzaWNBdXRoTXNnUHJvdFNlY3VyaXR5Iik7CiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgd3NCaW5kaW5nID0gbmV3IFFOYW1lKHNjYU5hbWVzcGFjZSwgImJpbmRpbmcud3MiKTsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBqYXZhSW1wbCA9IG5ldyBRTmFtZShzY2FOYW1lc3BhY2UsICJpbXBsZW1lbnRhdGlvbi5qYXZhIik7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgdGVzdFBvbGljeVNldE9uZSA9IG5ldyBRTmFtZShuYW1lc3BhY2UsICJUZXN0UG9saWN5U2V0T25lIik7CiAKICAgICBAQmVmb3JlCiAgICAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKQEAgLTEzNiw2ICsxNDAsOSBAQAogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFydGlmYWN0IGluc3RhbmNlb2YgSW1wbGVtZW50YXRpb25UeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBJbXBsZW1lbnRhdGlvblR5cGUgaW1wbFR5cGUgPSAoSW1wbGVtZW50YXRpb25UeXBlKWFydGlmYWN0OwogICAgICAgICAgICAgICAgICAgICAgICAgaW1wbFR5cGVzVGFibGUucHV0KGltcGxUeXBlLmdldFR5cGUoKSwgaW1wbFR5cGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBhcnRpZmFjdCBpbnN0YW5jZW9mIEV4dGVybmFsQXR0YWNobWVudCkgeworICAgICAgICAgICAgICAgICAgICAJRXh0ZXJuYWxBdHRhY2htZW50IGF0dGFjaG1lbnQgPSAoRXh0ZXJuYWxBdHRhY2htZW50KWFydGlmYWN0OworICAgICAgICAgICAgICAgICAgICAJYXR0YWNobWVudHNUYWJsZS5wdXQoYXR0YWNobWVudC5nZXRQb2xpY3lTZXRzKCkuZ2V0KDApLmdldE5hbWUoKSwgYXR0YWNobWVudCk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBpZiAoYXJ0aWZhY3QgIT0gbnVsbCkgewpAQCAtMTcyLDYgKzE3OSwxMCBAQAogICAgICAgICBhc3NlcnROb3ROdWxsKGJpbmRpbmdUeXBlc1RhYmxlLmdldCh3c0JpbmRpbmcpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGltcGxUeXBlc1RhYmxlLnNpemUoKSwgMSk7CiAgICAgICAgIGFzc2VydE5vdE51bGwoaW1wbFR5cGVzVGFibGUuZ2V0KGphdmFJbXBsKSk7CisgICAgICAgIAorICAgICAgICAvLyBUZXN0IGV4dGVybmFsIGF0dGFjaG1lbnRzCisgICAgICAgIGFzc2VydEVxdWFscygxLCBhdHRhY2htZW50c1RhYmxlLnNpemUoKSk7CisgICAgICAgIGFzc2VydE5vdE51bGwoYXR0YWNobWVudHNUYWJsZS5nZXQocG9saWN5U2V0VGFibGUuZ2V0KHRlc3RQb2xpY3lTZXRPbmUpLmdldE5hbWUoKSkpOwogICAgIH0KICAgICAKICAgICBwcml2YXRlIGludCBnZXROdW1iZXJPZlF1YWxpZmllZFBvbGljaWVzKFBvbGljeVNldCBwb2xpY3lTZXQpIHsKQEAgLTIxOCw2ICsyMjksMTAgQEAKICAgICAgICAgYXNzZXJ0TnVsbChqYXZhSW1wbFR5cGUuZ2V0QWx3YXlzUHJvdmlkZWRJbnRlbnRzKCkuZ2V0KDApLmdldERlc2NyaXB0aW9uKCkpOwogICAgICAgICBhc3NlcnROdWxsKGphdmFJbXBsVHlwZS5nZXRNYXlQcm92aWRlZEludGVudHMoKS5nZXQoMCkuZ2V0RGVzY3JpcHRpb24oKSk7CiAKKyAgICAgICAgRXh0ZXJuYWxBdHRhY2htZW50IGF0dGFjaG1lbnQgPSBhdHRhY2htZW50c1RhYmxlLnZhbHVlcygpLml0ZXJhdG9yKCkubmV4dCgpOworICAgICAgICBQb2xpY3lTZXQgcHNPbmUgPSBwb2xpY3lTZXRUYWJsZS5nZXQodGVzdFBvbGljeVNldE9uZSk7CisgICAgICAgIGFzc2VydEVxdWFscyhwc09uZSwgYXR0YWNobWVudC5nZXRQb2xpY3lTZXRzKCkuZ2V0KDApKTsKKyAgICAgICAgCiAgICAgICAgIExpc3Q8SW50ZW50PiBpbnRlbnRzID0gbmV3IEFycmF5TGlzdDxJbnRlbnQ+KGludGVudFRhYmxlLnZhbHVlcygpKTsKIAogICAgICAgICBmb3IgKEludGVudCBpbnRlbnQgOiBpbnRlbnRzKSB7CkBAIC0yNDEsNiArMjU2LDEwIEBACiAgICAgICAgIGZvciAoRXh0ZW5zaW9uVHlwZSBpbXBsVHlwZSA6IGltcGxUeXBlc1RhYmxlLnZhbHVlcygpKSB7CiAgICAgICAgICAgICBzdGF4UHJvY2Vzc29yLnJlc29sdmUoaW1wbFR5cGUsIHJlc29sdmVyLCBjb250ZXh0KTsKICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZm9yICggRXh0ZXJuYWxBdHRhY2htZW50IGVhIDogYXR0YWNobWVudHNUYWJsZS52YWx1ZXMoKSkgeworICAgICAgICAJc3RheFByb2Nlc3Nvci5yZXNvbHZlKGVhLCByZXNvbHZlciwgY29udGV4dCk7CisgICAgICAgIH0KIAogICAgICAgICAvL3Rlc3RpbmcgaWYgcG9saWN5IGludGVudHMgaGF2ZSBiZWVuIGxpbmtlZCBoYXZlIHByb3BlcnR5IGJlZW4gbGlua2VkIHVwIAogICAgICAgICBhc3NlcnROb3ROdWxsKHByb2ZpbGVJbnRlbnQuZ2V0UmVxdWlyZWRJbnRlbnRzKCkuZ2V0KDApLmdldERlc2NyaXB0aW9uKCkpOwpAQCAtMjY4LDYgKzI4Nyw4IEBACiAKICAgICAgICAgYXNzZXJ0Tm90TnVsbChqYXZhSW1wbFR5cGUuZ2V0QWx3YXlzUHJvdmlkZWRJbnRlbnRzKCkuZ2V0KDApLmdldERlc2NyaXB0aW9uKCkpOwogICAgICAgICBhc3NlcnROb3ROdWxsKGphdmFJbXBsVHlwZS5nZXRNYXlQcm92aWRlZEludGVudHMoKS5nZXQoMCkuZ2V0RGVzY3JpcHRpb24oKSk7CisgICAgICAgIAorICAgIAogICAgIH0KIAogICAgIHByaXZhdGUgYm9vbGVhbiBpc1JlYWxpemVkQnkoUG9saWN5U2V0IHBvbGljeVNldCwgSW50ZW50IGludGVudCkgewpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC90ZXN0X2RlZmluaXRpb25zLnhtbCBiL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS94bWwvdGVzdF9kZWZpbml0aW9ucy54bWwKaW5kZXggYTI2MmIwMC4uYWVhOTQxYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14bWwvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3htbC90ZXN0X2RlZmluaXRpb25zLnhtbAorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhtbC9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kveG1sL3Rlc3RfZGVmaW5pdGlvbnMueG1sCkBAIC0yMDEsNCArMjAxLDYgQEAKICAgICAgICAgICAgICA8L2Rlc2NyaXB0aW9uPgogICAgIDwvaW50ZW50PgogCisgICA8ZXh0ZXJuYWxBdHRhY2htZW50IHBvbGljeVNldHM9InRlc3Q6VGVzdFBvbGljeVNldE9uZSIgYXR0YWNoVG89IkludGVudFJlZnMoJ3Rlc3Q6dGVzdEludGVudE9uZScpIi8+CisgCiA8L2RlZmluaXRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuVmFsaWRhdGlvblNjaGVtYSBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuVmFsaWRhdGlvblNjaGVtYQppbmRleCBhZDhlZjcwLi5iYTI1Yzk5IDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlZhbGlkYXRpb25TY2hlbWEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5WYWxpZGF0aW9uU2NoZW1hCkBAIC0xNiw0ICsxNiw0IEBACiAjIHVuZGVyIHRoZSBMaWNlbnNlLiAKICMKIHR1c2Nhbnktc2NhLTEuMS54c2QKLXNjYS0xLjEtY2QwNS54c2QNCitzY2EtMS4xLWNkMDUtcmV2MS54c2QNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLTEuMS1jZDA1LXJldjEueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS0xLjEtY2QwNS1yZXYxLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTM4ZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS0xLjEtY2QwNS1yZXYxLnhzZApAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSBDb3B5cmlnaHQoQykgT0FTSVMoUikgMjAwNSwyMDEwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKyAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAgLS0+Cis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCisgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI+CisgICAKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZCIvPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWludGVyZmFjZS1qYXZhLTEuMS1jZDA0LXJldjEueHNkIi8+CisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWludGVyZmFjZS13c2RsLTEuMS1jZDA1LXJldjEueHNkIi8+CisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWludGVyZmFjZS1jcHAtMS4xLWNkMDQueHNkIi8+CisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWludGVyZmFjZS1jLTEuMS1jZDA1LXJldjEueHNkIi8+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtaW1wbGVtZW50YXRpb24tamF2YS0xLjEtY2QwMi1yZXYxLnhzZCIvPgorICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUtMS4xLWNkMDUtcmV2MS54c2QiLz4KKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtaW1wbGVtZW50YXRpb24tY3BwLTEuMS1jZDA1LXJldjEueHNkIi8+CisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWltcGxlbWVudGF0aW9uLWMtMS4xLWNkMDUtcmV2MS54c2QiLz4KKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtaW1wbGVtZW50YXRpb24tYnBlbC0xLjEtY2QwMy54c2QiLz4KKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtaW1wbGVtZW50YXRpb24tc3ByaW5nLTEuMS1jZDAxLnhzZCIvPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWJpbmRpbmctd3MtMS4xLWNkMDQtcmV2MS54c2QiLz4KKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtYmluZGluZy13cy1jYWxsYmFjay0xLjEtY2QwNC54c2QiLz4gIAorICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1iaW5kaW5nLWptcy0xLjEtY2QwNC1yZXYxLnhzZCIvPgorICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1iaW5kaW5nLWpjYS0xLjEtY2QwNC1yZXYxLnhzZCIvPgorICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1iaW5kaW5nLXNjYS0xLjEtY2QwNS1yZXYxLnhzZCIvPgorICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1iaW5kaW5nLWVqYi0xLjEtY2QwMi1yZXYxLnhzZCIvPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWRlZmluaXRpb25zLTEuMS1jZDA1LXJldjEueHNkIi8+CisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLXBvbGljeS0xLjEtY2QwMy1yZXYxLnhzZCIvPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvbnRyaWJ1dGlvbi0xLjEtY2QwNS1yZXYxLnhzZCIvPgorICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb250cmlidXRpb24tY3BwLTEuMS1jZDA1LXJldjEueHNkIi8+CisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvbnRyaWJ1dGlvbi1jLTEuMS1jZDA1LXJldjEueHNkIi8+CisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvbnRyaWJ1dGlvbi1qYXZhLTEuMS1jZDAyLXJldjEueHNkIi8+CisgICAKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtamVlLTEuMS13ZDAzLnhzZCIvPgorPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWJpbmRpbmctZWpiLTEuMS1jZDAxLnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1lamItMS4xLWNkMDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmNjZjlkLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1lamItMS4xLWNkMDEueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCi0gICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLSAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgICAgICAKLSAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUueHNkIi8+Ci0KLSAgICA8ZWxlbWVudCBuYW1lPSJiaW5kaW5nLmVqYiIgdHlwZT0ic2NhOkVKQlNlc3Npb25CZWFuQmluZGluZyIgCi0gICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpiaW5kaW5nIiAvPgotCi0gICAgPHNpbXBsZVR5cGUgbmFtZT0iVmVyc2lvblZhbHVlIj4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkVKQjIiLz4KLSAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iRUpCMyIvPgotICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgIDwvc2ltcGxlVHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJFSkJTZXNzaW9uQmVhbkJpbmRpbmciPgotICAgICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpCaW5kaW5nIj4KLSAgICAgICAgICAgICAgICA8IS0tIHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiCi0gICAgICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgICAgIDwvc2VxdWVuY2UtLT4KLSAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImhvbWVJbnRlcmZhY2UiIHR5cGU9Ik5DTmFtZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZWpiLWxpbmstbmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlamItdmVyc2lvbiIgdHlwZT0ic2NhOlZlcnNpb25WYWx1ZSIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iRUpCMyIvPgotICAgICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLWVqYi0xLjEtY2QwMi1yZXYxLnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1lamItMS4xLWNkMDItcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjNjNkNAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1lamItMS4xLWNkMDItcmV2MS54c2QKQEAgLTAsMCArMSwzMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCisgICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgICAgICAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorICAgICAgICAKKyAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUtcmV2MS54c2QiLz4KKworICAgIDxlbGVtZW50IG5hbWU9ImJpbmRpbmcuZWpiIiB0eXBlPSJzY2E6RUpCU2Vzc2lvbkJlYW5CaW5kaW5nIiAKKyAgICAgICAgICAgICBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmJpbmRpbmciIC8+CisKKyAgICA8c2ltcGxlVHlwZSBuYW1lPSJWZXJzaW9uVmFsdWUiPgorICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iRUpCMiIvPgorICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJFSkIzIi8+CisgICAgICAgIDwvcmVzdHJpY3Rpb24+CisgICAgPC9zaW1wbGVUeXBlPgorCisgICAgPGNvbXBsZXhUeXBlIG5hbWU9IkVKQlNlc3Npb25CZWFuQmluZGluZyI+CisgICAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkJpbmRpbmciPgorICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIC8+IAorICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJob21lSW50ZXJmYWNlIiB0eXBlPSJOQ05hbWUiIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImVqYi1saW5rLW5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZWpiLXZlcnNpb24iIHR5cGU9InNjYTpWZXJzaW9uVmFsdWUiIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IkVKQjMiLz4KKyAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgICA8L2NvbXBsZXhDb250ZW50PgorICAgIDwvY29tcGxleFR5cGU+Cis8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWJpbmRpbmctamNhLTEuMS1jZDA0LXJldjEueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLWpjYS0xLjEtY2QwNC1yZXYxLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODk5MThmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLWpjYS0xLjEtY2QwNC1yZXYxLnhzZApAQCAtMCwwICsxLDE2OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCisgICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KKzxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAJCisJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisJeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZCIgLz4KKworICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpDQUJpbmRpbmciPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6QmluZGluZyI+CisgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJvdXRib3VuZENvbm5lY3Rpb24iIAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2NhOkpDQU91dGJvdW5kQ29ubmVjdGlvbiIgbWluT2NjdXJzPSIwIiAvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaW5ib3VuZENvbm5lY3Rpb24iIAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2NhOkpDQUluYm91bmRDb25uZWN0aW9uIiBtaW5PY2N1cnM9IjAiIC8+CisgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJvdXRib3VuZEludGVyYWN0aW9uIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InNjYTpKQ0FPdXRib3VuZEludGVyYWN0aW9uIiBtaW5PY2N1cnM9IjAiIC8+CisgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpbmJvdW5kSW50ZXJhY3Rpb24iIAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2NhOkpDQUluYm91bmRJbnRlcmFjdGlvbiIgbWluT2NjdXJzPSIwIiAvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHR5cGU9InNjYTpQcm9wZXJ0eSIgbWluT2NjdXJzPSIwIgorICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIi8+CisgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbml0aWFsQ29udGV4dEZhY3RvcnkiIHR5cGU9ImFueVVSSSIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAJICAgPGF0dHJpYnV0ZSBuYW1lPSJqbmRpVVJMIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDxzaW1wbGVUeXBlIG5hbWU9IkpDQUNyZWF0ZVJlc291cmNlIj4KKyAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgorICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJhbHdheXMiIC8+CisgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Im5ldmVyIiAvPgorICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJpZk5vdEV4aXN0IiAvPgorCSAgICA8L3Jlc3RyaWN0aW9uPgorICAgPC9zaW1wbGVUeXBlPgorICAgPHNpbXBsZVR5cGUgbmFtZT0iUmVzQXV0aCI+CisgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KKyAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iY29udGFpbmVyIiAvPgorICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJhcHBsaWNhdGlvbiIgLz4KKyAgICAgIDwvcmVzdHJpY3Rpb24+CisgICA8L3NpbXBsZVR5cGU+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iSkNBT3V0Ym91bmRDb25uZWN0aW9uIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc291cmNlQWRhcHRlciIgdHlwZT0ic2NhOlJlc291cmNlQWRhcHRlciIKKyAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgLz4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9ImNvbm5lY3Rpb24iIHR5cGU9InNjYTpDb25uZWN0aW9uIiAvPgorICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVzQXV0aCIgdHlwZT0ic2NhOlJlc0F1dGgiIG1pbk9jY3Vycz0iMCIgLz4KKyAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgorICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgIDwvc2VxdWVuY2U+CisgICAgICA8YXR0cmlidXRlIG5hbWU9Im1hbmFnZWQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiCQorICAgICAgICAgICAgICAgIGRlZmF1bHQ9InRydWUiIC8+CisgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+CisgICA8L2NvbXBsZXhUeXBlPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpDQUluYm91bmRDb25uZWN0aW9uIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc291cmNlQWRhcHRlciIgdHlwZT0ic2NhOlJlc291cmNlQWRhcHRlciIgLz4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFjdGl2YXRpb25TcGVjIiB0eXBlPSJzY2E6QWN0aXZhdGlvblNwZWMiIC8+CisgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKKyAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CisgICAgICA8L3NlcXVlbmNlPgorICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgorICAgPC9jb21wbGV4VHlwZT4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJKQ0FPdXRib3VuZEludGVyYWN0aW9uIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9ImNvbm5lY3Rpb25TcGVjIiB0eXBlPSJzY2E6Q29ubmVjdGlvblNwZWMiCisgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIC8+CisgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpbnRlcmFjdGlvblNwZWMiIHR5cGU9InNjYTpJbnRlcmFjdGlvblNwZWMiCisgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIC8+CisgICAgICAgICA8ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24iIHR5cGU9InNjYTpPcGVyYXRpb24iIG1pbk9jY3Vycz0iMCIgLz4KKyAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgorICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgIDwvc2VxdWVuY2U+CisgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+CisgICA8L2NvbXBsZXhUeXBlPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpDQUluYm91bmRJbnRlcmFjdGlvbiI+CisgICAgICA8c2VxdWVuY2U+CisgICAgICAgICA8ZWxlbWVudCBuYW1lPSJsaXN0ZW5lciIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiIC8+CisgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpbmJvdW5kT3BlcmF0aW9uIiB0eXBlPSJzY2E6SW5ib3VuZE9wZXJhdGlvbiIKKyAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CisgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKKyAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CisgICAgICA8L3NlcXVlbmNlPgorICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgorICAgPC9jb21wbGV4VHlwZT4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZXNvdXJjZUFkYXB0ZXIiPgorICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHR5cGU9InNjYTpQcm9wZXJ0eSIgbWluT2NjdXJzPSIwIgorICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CisgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKKyAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CisgICAgICA8L3NlcXVlbmNlPgorICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgorICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJOTVRPS0VOIiB1c2U9InJlcXVpcmVkIiAvPgorICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgorICAgPC9jb21wbGV4VHlwZT4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb25uZWN0aW9uIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6UHJvcGVydHkiIG1pbk9jY3Vycz0iMCIKKyAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCisgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iam5kaU5hbWUiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIgLz4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iTk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRlIiB0eXBlPSJzY2E6SkNBQ3JlYXRlUmVzb3VyY2UiIHVzZT0ib3B0aW9uYWwiCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImlmTm90RXhpc3QiIC8+CisgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+CisgICA8L2NvbXBsZXhUeXBlPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFjdGl2YXRpb25TcGVjIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6UHJvcGVydHkiIG1pbk9jY3Vycz0iMCIKKyAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCisgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iam5kaU5hbWUiIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIgLz4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iTk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRlIiB0eXBlPSJzY2E6SkNBQ3JlYXRlUmVzb3VyY2UiIHVzZT0ib3B0aW9uYWwiCisgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImlmTm90RXhpc3QiLz4KKyAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KKyAgIDwvY29tcGxleFR5cGU+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iT3BlcmF0aW9uIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9ImludGVyYWN0aW9uU3BlYyIgdHlwZT0ic2NhOkludGVyYWN0aW9uU3BlYyIKKyAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgLz4KKyAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgorICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgIDwvc2VxdWVuY2U+CisgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+CisgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+CisgICA8L2NvbXBsZXhUeXBlPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkluYm91bmRPcGVyYXRpb24iPgorICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCisgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorCQk8L3NlcXVlbmNlPgorCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+CisJCTxhdHRyaWJ1dGUgbmFtZT0ic2VsZWN0ZWRPcGVyYXRpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KKwkJPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgorCTwvY29tcGxleFR5cGU+CisJPGNvbXBsZXhUeXBlIG5hbWU9IkNvbm5lY3Rpb25TcGVjIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6UHJvcGVydHkiIG1pbk9jY3Vycz0iMCIKKyAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCisgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iTk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KKyAgIDwvY29tcGxleFR5cGU+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iSW50ZXJhY3Rpb25TcGVjIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6UHJvcGVydHkiIG1pbk9jY3Vycz0iMCIKKyAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCisgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iTk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KKyAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDxlbGVtZW50IG5hbWU9ImJpbmRpbmcuamNhIiB0eXBlPSJzY2E6SkNBQmluZGluZyIKKyAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6YmluZGluZyIgLz4KKzwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1qY2EtMS4xLWNkMDQueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLWpjYS0xLjEtY2QwNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyNGJhOTUuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLWpjYS0xLjEtY2QwNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAwOS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCi0gICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCi0gICAgICAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgICAgICAKLSAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS54c2QiLz4KLQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpDQUJpbmRpbmciPgotICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6QmluZGluZyI+Ci0gICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJvdXRib3VuZENvbm5lY3Rpb24iIAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2NhOkpDQU91dGJvdW5kQ29ubmVjdGlvbiIgbWluT2NjdXJzPSIwIiAvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaW5ib3VuZENvbm5lY3Rpb24iIAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2NhOkpDQUluYm91bmRDb25uZWN0aW9uIiBtaW5PY2N1cnM9IjAiIC8+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJvdXRib3VuZEludGVyYWN0aW9uIiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InNjYTpKQ0FPdXRib3VuZEludGVyYWN0aW9uIiBtaW5PY2N1cnM9IjAiIC8+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpbmJvdW5kSW50ZXJhY3Rpb24iIAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2NhOkpDQUluYm91bmRJbnRlcmFjdGlvbiIgbWluT2NjdXJzPSIwIiAvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHR5cGU9InNjYTpQcm9wZXJ0eSIgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0gICAgICAgICAgICAgICA8IS0tIGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvLS0+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb25uZWN0aW9uSW5mbyIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIiAvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbml0aWFsQ29udGV4dEZhY3RvcnkiIHR5cGU9ImFueVVSSSIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAJICAgPGF0dHJpYnV0ZSBuYW1lPSJqbmRpVVJMIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDxzaW1wbGVUeXBlIG5hbWU9IkpDQUNyZWF0ZVJlc291cmNlIj4KLSAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJhbHdheXMiIC8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Im5ldmVyIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJpZk5vdEV4aXN0IiAvPgotCSAgICA8L3Jlc3RyaWN0aW9uPgotICAgPC9zaW1wbGVUeXBlPgotICAgPHNpbXBsZVR5cGUgbmFtZT0iUmVzQXV0aCI+Ci0gICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iY29udGFpbmVyIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJhcHBsaWNhdGlvbiIgLz4KLSAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICA8L3NpbXBsZVR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iSkNBT3V0Ym91bmRDb25uZWN0aW9uIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc291cmNlQWRhcHRlciIgdHlwZT0ic2NhOlJlc291cmNlQWRhcHRlciIKLSAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgLz4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9ImNvbm5lY3Rpb24iIHR5cGU9InNjYTpDb25uZWN0aW9uIiAvPgotICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVzQXV0aCIgdHlwZT0ic2NhOlJlc0F1dGgiIG1pbk9jY3Vycz0iMCIgLz4KLSAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9Im1hbmFnZWQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiCQotICAgICAgICAgICAgICAgIGRlZmF1bHQ9InRydWUiIC8+Ci0gICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpDQUluYm91bmRDb25uZWN0aW9uIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc291cmNlQWRhcHRlciIgdHlwZT0ic2NhOlJlc291cmNlQWRhcHRlciIgLz4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFjdGl2YXRpb25TcGVjIiB0eXBlPSJzY2E6QWN0aXZhdGlvblNwZWMiIC8+Ci0gICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0gICAgICA8L3NlcXVlbmNlPgotICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJKQ0FPdXRib3VuZEludGVyYWN0aW9uIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9ImNvbm5lY3Rpb25TcGVjIiB0eXBlPSJzY2E6Q29ubmVjdGlvblNwZWMiCi0gICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIC8+Ci0gICAgICAgICA8ZWxlbWVudCBuYW1lPSJpbnRlcmFjdGlvblNwZWMiIHR5cGU9InNjYTpJbnRlcmFjdGlvblNwZWMiCi0gICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIC8+Ci0gICAgICAgICA8ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24iIHR5cGU9InNjYTpPcGVyYXRpb24iIG1pbk9jY3Vycz0iMCIgLz4KLSAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpDQUluYm91bmRJbnRlcmFjdGlvbiI+Ci0gICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICA8ZWxlbWVudCBuYW1lPSJsaXN0ZW5lciIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiIC8+Ci0gICAgICAgICA8ZWxlbWVudCBuYW1lPSJpbmJvdW5kT3BlcmF0aW9uIiB0eXBlPSJzY2E6SW5ib3VuZE9wZXJhdGlvbiIKLSAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0gICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0gICAgICA8L3NlcXVlbmNlPgotICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZXNvdXJjZUFkYXB0ZXIiPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHR5cGU9InNjYTpQcm9wZXJ0eSIgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0gICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0gICAgICA8L3NlcXVlbmNlPgotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJOTVRPS0VOIiB1c2U9InJlcXVpcmVkIiAvPgotICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgotICAgPC9jb21wbGV4VHlwZT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb25uZWN0aW9uIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6UHJvcGVydHkiIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iTk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRlIiB0eXBlPSJzY2E6SkNBQ3JlYXRlUmVzb3VyY2UiIHVzZT0ib3B0aW9uYWwiCi0gICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImlmTm90RXhpc3QiIC8+Ci0gICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkFjdGl2YXRpb25TcGVjIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6UHJvcGVydHkiIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iTk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRlIiB0eXBlPSJzY2E6SkNBQ3JlYXRlUmVzb3VyY2UiIHVzZT0ib3B0aW9uYWwiCi0gICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImlmTm90RXhpc3QiLz4KLSAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iT3BlcmF0aW9uIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9ImludGVyYWN0aW9uU3BlYyIgdHlwZT0ic2NhOkludGVyYWN0aW9uU3BlYyIKLSAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgLz4KLSAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0gICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkluYm91bmRPcGVyYXRpb24iPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQk8L3NlcXVlbmNlPgotCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0ibmF0aXZlT3BlcmF0aW9uIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KLQk8L2NvbXBsZXhUeXBlPgotCTxjb21wbGV4VHlwZSBuYW1lPSJDb25uZWN0aW9uU3BlYyI+Ci0gICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgdHlwZT0ic2NhOlByb3BlcnR5IiBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLSAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9Ik5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0gICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkludGVyYWN0aW9uU3BlYyI+Ci0gICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgdHlwZT0ic2NhOlByb3BlcnR5IiBtaW5PY2N1cnM9IjAiCi0gICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLSAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9Ik5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0gICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8ZWxlbWVudCBuYW1lPSJiaW5kaW5nLmpjYSIgdHlwZT0ic2NhOkpDQUJpbmRpbmciCi0gICAgICAgICAgICBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmJpbmRpbmciIC8+Ci0gICAgICAgICAgICAKLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLWptcy0xLjEtY2QwNC1yZXYxLnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1qbXMtMS4xLWNkMDQtcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzViNzA2YQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1qbXMtMS4xLWNkMDQtcmV2MS54c2QKQEAgLTAsMCArMSwxODYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAorICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICAgICAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICAgICAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZCIvPgorCisgICA8Y29tcGxleFR5cGUgbmFtZT0iSk1TQmluZGluZyI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpCaW5kaW5nIj4KKyAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRlc3RpbmF0aW9uIiB0eXBlPSJzY2E6Sk1TRGVzdGluYXRpb24iCisgICAgICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4gCisgICAgICAgICAgICAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIj4gCisgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjb25uZWN0aW9uRmFjdG9yeSIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJzY2E6Sk1TQ29ubmVjdGlvbkZhY3RvcnkiLz4gCisgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJhY3RpdmF0aW9uU3BlYyIgdHlwZT0ic2NhOkpNU0FjdGl2YXRpb25TcGVjIi8+IAorICAgICAgICAgICAgICAgPC9jaG9pY2U+ICAgICAKKyAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc3BvbnNlIiB0eXBlPSJzY2E6Sk1TUmVzcG9uc2UiIG1pbk9jY3Vycz0iMCIvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaGVhZGVycyIgdHlwZT0ic2NhOkpNU0hlYWRlcnMiIG1pbk9jY3Vycz0iMCIvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibWVzc2FnZVNlbGVjdGlvbiIgdHlwZT0ic2NhOkpNU01lc3NhZ2VTZWxlY3Rpb24iCisgICAgICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc291cmNlQWRhcHRlciIgdHlwZT0ic2NhOkpNU1Jlc291cmNlQWRhcHRlciIgCisgICAgICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Im9wZXJhdGlvblByb3BlcnRpZXMiIAorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2NhOkpNU09wZXJhdGlvblByb3BlcnRpZXMiIAorICAgICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiLz4KKyAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvcnJlbGF0aW9uU2NoZW1lIiB0eXBlPSJRTmFtZSIKKyAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ic2NhOm1lc3NhZ2VJRCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbml0aWFsQ29udGV4dEZhY3RvcnkiIHR5cGU9ImFueVVSSSIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJqbmRpVVJMIiB0eXBlPSJhbnlVUkkiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDxzaW1wbGVUeXBlIG5hbWU9IkpNU0NyZWF0ZVJlc291cmNlIj4KKyAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgorICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJhbHdheXMiLz4KKyAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ibmV2ZXIiLz4KKyAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iaWZOb3RFeGlzdCIvPgorICAgICAgPC9yZXN0cmljdGlvbj4KKyAgIDwvc2ltcGxlVHlwZT4KKworICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpNU0Rlc3RpbmF0aW9uIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6QmluZGluZ1Byb3BlcnR5IiAKKyAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgIDwvc2VxdWVuY2U+CisgICAgICA8YXR0cmlidXRlIG5hbWU9ImpuZGlOYW1lIiB0eXBlPSJhbnlVUkkiLz4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0icXVldWUiPgorICAgICAgICAgPHNpbXBsZVR5cGU+CisgICAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KKyAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0icXVldWUiLz4KKyAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0idG9waWMiLz4KKyAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+CisgICAgICAgICA8L3NpbXBsZVR5cGU+CisgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRlIiB0eXBlPSJzY2E6Sk1TQ3JlYXRlUmVzb3VyY2UiIAorICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJpZk5vdEV4aXN0Ii8+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8Y29tcGxleFR5cGUgbmFtZT0iSk1TQ29ubmVjdGlvbkZhY3RvcnkiPgorICAgICAgPHNlcXVlbmNlPiAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgdHlwZT0ic2NhOkJpbmRpbmdQcm9wZXJ0eSIgCisgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICA8L3NlcXVlbmNlPgorICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJqbmRpTmFtZSIgdHlwZT0iYW55VVJJIi8+CisgICAgICA8YXR0cmlidXRlIG5hbWU9ImNyZWF0ZSIgdHlwZT0ic2NhOkpNU0NyZWF0ZVJlc291cmNlIiAKKyAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iaWZOb3RFeGlzdCIvPgorICAgPC9jb21wbGV4VHlwZT4KKworICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpNU0FjdGl2YXRpb25TcGVjIj4KKyAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6QmluZGluZ1Byb3BlcnR5IiAKKyAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgIDwvc2VxdWVuY2U+CisgICAgICA8YXR0cmlidXRlIG5hbWU9ImpuZGlOYW1lIiB0eXBlPSJhbnlVUkkiLz4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRlIiB0eXBlPSJzY2E6Sk1TQ3JlYXRlUmVzb3VyY2UiCisgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9ImlmTm90RXhpc3QiLz4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJKTVNSZXNwb25zZSI+CisgICAgICA8c2VxdWVuY2U+CisgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTp3aXJlRm9ybWF0IiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIvPgorICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZGVzdGluYXRpb24iIHR5cGU9InNjYTpKTVNEZXN0aW5hdGlvbiIgbWluT2NjdXJzPSIwIi8+CisgICAgICAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCI+IAorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iY29ubmVjdGlvbkZhY3RvcnkiIHR5cGU9InNjYTpKTVNDb25uZWN0aW9uRmFjdG9yeSIvPiAKKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImFjdGl2YXRpb25TcGVjIiB0eXBlPSJzY2E6Sk1TQWN0aXZhdGlvblNwZWMiLz4gCisgICAgICAgICA8L2Nob2ljZT4gCisgICAgICA8L3NlcXVlbmNlPgorICAgPC9jb21wbGV4VHlwZT4KKworICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpNU0hlYWRlcnMiPgorICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHR5cGU9InNjYTpCaW5kaW5nUHJvcGVydHkiIAorICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0ic3RyaW5nIi8+CisgICAgICA8YXR0cmlidXRlIG5hbWU9ImRlbGl2ZXJ5TW9kZSIgZGVmYXVsdD0icGVyc2lzdGVudCI+CisgICAgICAgICA8c2ltcGxlVHlwZT4KKyAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgorICAgICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJwZXJzaXN0ZW50Ii8+CisgICAgICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Im5vbnBlcnNpc3RlbnQiLz4KKyAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+CisgICAgICAgICA8L3NpbXBsZVR5cGU+CisgICAgICA8L2F0dHJpYnV0ZT4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idGltZVRvTGl2ZSIgdHlwZT0ibG9uZyIgZGVmYXVsdD0iMCIvPgorICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwcmlvcml0eSIgZGVmYXVsdD0iNCI+CisgICAgICAgICA8c2ltcGxlVHlwZT4KKyAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgorICAgICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSIwIi8+CisgICAgICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjEiLz4KKyAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iMiIvPgorICAgICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSIzIi8+CisgICAgICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjQiLz4KKyAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iNSIvPgorICAgICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSI2Ii8+CisgICAgICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjciLz4KKyAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iOCIvPgorICAgICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSI5Ii8+CisgICAgICAgICAgICA8L3Jlc3RyaWN0aW9uPgorICAgICAgICAgPC9zaW1wbGVUeXBlPgorICAgICAgPC9hdHRyaWJ1dGU+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8Y29tcGxleFR5cGUgbmFtZT0iSk1TTWVzc2FnZVNlbGVjdGlvbiI+IAorICAgICAgPHNlcXVlbmNlPiAKKyAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6QmluZGluZ1Byb3BlcnR5IiAKKyAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4gCisgICAgICA8L3NlcXVlbmNlPiAKKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2VsZWN0b3IiIHR5cGU9InN0cmluZyIvPiAKKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJKTVNSZXNvdXJjZUFkYXB0ZXIiPgorICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHR5cGU9InNjYTpCaW5kaW5nUHJvcGVydHkiIAorICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8Y29tcGxleFR5cGUgbmFtZT0iSk1TT3BlcmF0aW9uUHJvcGVydGllcyI+CisgICAgICA8c2VxdWVuY2U+CisgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgdHlwZT0ic2NhOkJpbmRpbmdQcm9wZXJ0eSIgCisgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICA8ZWxlbWVudCBuYW1lPSJoZWFkZXJzIiB0eXBlPSJzY2E6Sk1TSGVhZGVycyIgbWluT2NjdXJzPSIwIi8+CisgICAgICA8L3NlcXVlbmNlPgorICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic2VsZWN0ZWRPcGVyYXRpb24iIHR5cGU9InN0cmluZyIvPgorICAgPC9jb21wbGV4VHlwZT4KKworICAgPGNvbXBsZXhUeXBlIG5hbWU9IkJpbmRpbmdQcm9wZXJ0eSI+CisgICAgICA8c2ltcGxlQ29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic3RyaW5nIj4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiCisgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9InhzOnN0cmluZyIvPgorICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICA8L3NpbXBsZUNvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8ZWxlbWVudCBuYW1lPSJiaW5kaW5nLmptcyIgdHlwZT0ic2NhOkpNU0JpbmRpbmciIAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpiaW5kaW5nIi8+CisKKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJKTVNEZWZhdWx0V2lyZUZvcm1hdFR5cGUiPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6V2lyZUZvcm1hdFR5cGUiLz4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8Y29tcGxleFR5cGUgbmFtZT0iSk1TRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yVHlwZSI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpPcGVyYXRpb25TZWxlY3RvclR5cGUiLz4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8ZWxlbWVudCBuYW1lPSJ3aXJlRm9ybWF0Lmptc0RlZmF1bHQiIHR5cGU9InNjYTpKTVNEZWZhdWx0V2lyZUZvcm1hdFR5cGUiIAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTp3aXJlRm9ybWF0Ii8+CisKKyAgIDxlbGVtZW50IG5hbWU9Im9wZXJhdGlvblNlbGVjdG9yLmptc0RlZmF1bHQiIHR5cGU9InNjYTpKTVNEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3JUeXBlIiAKKyAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6b3BlcmF0aW9uU2VsZWN0b3IiLz4KKzwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1qbXMtMS4xLWNkMDQueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLWptcy0xLjEtY2QwNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwZTZhYTYuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLWptcy0xLjEtY2QwNC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAwOS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAgLS0+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCi0gICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgICAgICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0gICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LnhzZCIvPgotCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iSk1TQmluZGluZyI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpCaW5kaW5nIj4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRlc3RpbmF0aW9uIiB0eXBlPSJzY2E6Sk1TRGVzdGluYXRpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4gCi0gICAgICAgICAgICAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIj4gCi0gICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjb25uZWN0aW9uRmFjdG9yeSIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJzY2E6Sk1TQ29ubmVjdGlvbkZhY3RvcnkiLz4gCi0gICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJhY3RpdmF0aW9uU3BlYyIgdHlwZT0ic2NhOkpNU0FjdGl2YXRpb25TcGVjIi8+IAotICAgICAgICAgICAgICAgPC9jaG9pY2U+ICAgICAKLSAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc3BvbnNlIiB0eXBlPSJzY2E6Sk1TUmVzcG9uc2UiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaGVhZGVycyIgdHlwZT0ic2NhOkpNU0hlYWRlcnMiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibWVzc2FnZVNlbGVjdGlvbiIgdHlwZT0ic2NhOkpNU01lc3NhZ2VTZWxlY3Rpb24iCi0gICAgICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc291cmNlQWRhcHRlciIgdHlwZT0ic2NhOkpNU1Jlc291cmNlQWRhcHRlciIgCi0gICAgICAgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9Im9wZXJhdGlvblByb3BlcnRpZXMiIAotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0ic2NhOkpNU09wZXJhdGlvblByb3BlcnRpZXMiIAotICAgICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgICAgPCEtLSBhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgCi0gICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLyAtLT4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvcnJlbGF0aW9uU2NoZW1lIiB0eXBlPSJRTmFtZSIKLSAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ic2NhOm1lc3NhZ2VJZCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbml0aWFsQ29udGV4dEZhY3RvcnkiIHR5cGU9ImFueVVSSSIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJqbmRpVVJMIiB0eXBlPSJhbnlVUkkiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icmVxdWVzdENvbm5lY3Rpb24iIHR5cGU9IlFOYW1lIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlc3BvbnNlQ29ubmVjdGlvbiIgdHlwZT0iUU5hbWUiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ib3BlcmF0aW9uUHJvcGVydGllcyIgdHlwZT0iUU5hbWUiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDxzaW1wbGVUeXBlIG5hbWU9IkpNU0NyZWF0ZVJlc291cmNlIj4KLSAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJhbHdheXMiLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ibmV2ZXIiLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iaWZOb3RFeGlzdCIvPgotICAgICAgPC9yZXN0cmljdGlvbj4KLSAgIDwvc2ltcGxlVHlwZT4KLQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpNU0Rlc3RpbmF0aW9uIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6QmluZGluZ1Byb3BlcnR5IiAKLSAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9ImpuZGlOYW1lIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0icXVldWUiPgotICAgICAgICAgPHNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0icXVldWUiLz4KLSAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0idG9waWMiLz4KLSAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgICA8L3NpbXBsZVR5cGU+Ci0gICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRlIiB0eXBlPSJzY2E6Sk1TQ3JlYXRlUmVzb3VyY2UiIAotICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJpZk5vdEV4aXN0Ii8+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iSk1TQ29ubmVjdGlvbkZhY3RvcnkiPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6QmluZGluZ1Byb3BlcnR5IiAKLSAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9ImpuZGlOYW1lIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY3JlYXRlIiB0eXBlPSJzY2E6Sk1TQ3JlYXRlUmVzb3VyY2UiIAotICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJpZk5vdEV4aXN0Ii8+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iSk1TQWN0aXZhdGlvblNwZWMiPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHR5cGU9InNjYTpCaW5kaW5nUHJvcGVydHkiIAotICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iam5kaU5hbWUiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjcmVhdGUiIHR5cGU9InNjYTpKTVNDcmVhdGVSZXNvdXJjZSIKLSAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIgZGVmYXVsdD0iaWZOb3RFeGlzdCIvPgotICAgPC9jb21wbGV4VHlwZT4KLQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpNU1Jlc3BvbnNlIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOndpcmVGb3JtYXQiIG1pbk9jY3Vycz0iMCIgLz4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9ImRlc3RpbmF0aW9uIiB0eXBlPSJzY2E6Sk1TRGVzdGluYXRpb24iIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiPiAKLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImNvbm5lY3Rpb25GYWN0b3J5IiB0eXBlPSJzY2E6Sk1TQ29ubmVjdGlvbkZhY3RvcnkiLz4gCi0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJhY3RpdmF0aW9uU3BlYyIgdHlwZT0ic2NhOkpNU0FjdGl2YXRpb25TcGVjIi8+IAotICAgICAgICAgPC9jaG9pY2U+IAotICAgICAgPC9zZXF1ZW5jZT4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJKTVNIZWFkZXJzIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6QmluZGluZ1Byb3BlcnR5IiAKLSAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9InN0cmluZyIvPgotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJkZWxpdmVyeU1vZGUiPgotICAgICAgICAgPHNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0icGVyc2lzdGVudCIvPgotICAgICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJub25wZXJzaXN0ZW50Ii8+Ci0gICAgICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgICAgICAgPC9zaW1wbGVUeXBlPgotICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9InRpbWVUb0xpdmUiIHR5cGU9ImxvbmciLz4KLSAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJpb3JpdHkiPgotICAgICAgICAgPHNpbXBsZVR5cGU+Ci0gICAgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iMCIvPgotICAgICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSIxIi8+Ci0gICAgICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjIiLz4KLSAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iMyIvPgotICAgICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSI0Ii8+Ci0gICAgICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjUiLz4KLSAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iNiIvPgotICAgICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSI3Ii8+Ci0gICAgICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjgiLz4KLSAgICAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iOSIvPgotICAgICAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICAgIDwvc2ltcGxlVHlwZT4KLSAgICAgIDwvYXR0cmlidXRlPgotICAgPC9jb21wbGV4VHlwZT4KLQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpNU01lc3NhZ2VTZWxlY3Rpb24iPiAKLSAgICAgIDxzZXF1ZW5jZT4gCi0gICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgdHlwZT0ic2NhOkJpbmRpbmdQcm9wZXJ0eSIgCi0gICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAotICAgICAgPC9zZXF1ZW5jZT4gCi0gICAgICA8YXR0cmlidXRlIG5hbWU9InNlbGVjdG9yIiB0eXBlPSJzdHJpbmciLz4gCi0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iSk1TUmVzb3VyY2VBZGFwdGVyIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6QmluZGluZ1Byb3BlcnR5IiAKLSAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgPC9jb21wbGV4VHlwZT4KLQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkpNU09wZXJhdGlvblByb3BlcnRpZXMiPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHR5cGU9InNjYTpCaW5kaW5nUHJvcGVydHkiIAotICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaGVhZGVycyIgdHlwZT0ic2NhOkpNU0hlYWRlcnMiLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYXRpdmVPcGVyYXRpb24iIHR5cGU9InN0cmluZyIvPgotICAgPC9jb21wbGV4VHlwZT4KLQotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkJpbmRpbmdQcm9wZXJ0eSI+Ci0gICAgICA8c2ltcGxlQ29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTk1UT0tFTiIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiCi0gICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9InhzOnN0cmluZyIvPgotICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8L3NpbXBsZUNvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8ZWxlbWVudCBuYW1lPSJiaW5kaW5nLmptcyIgdHlwZT0ic2NhOkpNU0JpbmRpbmciIAotICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpiaW5kaW5nIi8+Ci0KLSAgIDxlbGVtZW50IG5hbWU9IndpcmVGb3JtYXQuam1zRGVmYXVsdCIgdHlwZT0ic2NhOldpcmVGb3JtYXRUeXBlIiAKLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6d2lyZUZvcm1hdCIvPgotCi0gICA8ZWxlbWVudCBuYW1lPSJvcGVyYXRpb25TZWxlY3Rvci5qbXNEZWZhdWx0IiB0eXBlPSJzY2E6T3BlcmF0aW9uU2VsZWN0b3JUeXBlIiAKLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6b3BlcmF0aW9uU2VsZWN0b3IiLz4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1zY2EtMS4xLWNkMDUtcmV2MS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWJpbmRpbmctc2NhLTEuMS1jZDA1LXJldjEueHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZGJmMTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWJpbmRpbmctc2NhLTEuMS1jZDA1LXJldjEueHNkCkBAIC0wLDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAorICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KKzxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKKyAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAorICAgICAgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICAgICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KKworICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LXJldjEueHNkIi8+CisKKyAgIDwhLS0gU0NBIEJpbmRpbmcgLS0+CisgICA8ZWxlbWVudCBuYW1lPSJiaW5kaW5nLnNjYSIgdHlwZT0ic2NhOlNDQUJpbmRpbmciIAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpiaW5kaW5nIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iU0NBQmluZGluZyI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpCaW5kaW5nIi8+CisgICAgICA8L2NvbXBsZXhDb250ZW50PgorICAgPC9jb21wbGV4VHlwZT4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWJpbmRpbmctc2NhLTEuMS1jZDA1LnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1zY2EtMS4xLWNkMDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMzM3Mjk2Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy1zY2EtMS4xLWNkMDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAwOS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCi0gICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCi0gICAgICAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUueHNkIi8+Ci0KLSAgIDwhLS0gU0NBIEJpbmRpbmcgLS0+Ci0gICA8ZWxlbWVudCBuYW1lPSJiaW5kaW5nLnNjYSIgdHlwZT0ic2NhOlNDQUJpbmRpbmciIAotICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpiaW5kaW5nIi8+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iU0NBQmluZGluZyI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpCaW5kaW5nIi8+Ci0gICAgICA8L2NvbXBsZXhDb250ZW50PgotICAgPC9jb21wbGV4VHlwZT4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWJpbmRpbmctd3MtMS4xLWNkMDQtcmV2MS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWJpbmRpbmctd3MtMS4xLWNkMDQtcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ZDk3ZQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy13cy0xLjEtY2QwNC1yZXYxLnhzZApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSBDb3B5cmlnaHQoQykgT0FTSVMoUikgMjAwNSwyMDEwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKyAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAgLS0+Cis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCisgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAorICAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICAgIHhtbG5zOndzZGxpPSJodHRwOi8vd3d3LnczLm9yZy9ucy93c2RsLWluc3RhbmNlIgorICAgIHhtbG5zOndzYT0iaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nIgorICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KKworICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9ucy93c2RsLWluc3RhbmNlIgorICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDcvMDUvd3NkbC93c2RsMjAtaW5zdGFuY2UueHNkIi8+CisgICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvMDgvYWRkcmVzc2luZyIKKyAgICAgICAgICAgIHNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzAzL2FkZHJlc3Npbmcvd3MtYWRkci54c2QiLz4KKworICAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZCIvPgorCisgICAgPGVsZW1lbnQgbmFtZT0iYmluZGluZy53cyIgdHlwZT0ic2NhOldlYlNlcnZpY2VCaW5kaW5nIgorICAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6YmluZGluZyIvPgorCisgICAgPGNvbXBsZXhUeXBlIG5hbWU9IldlYlNlcnZpY2VCaW5kaW5nIj4KKyAgICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6QmluZGluZyI+CisgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9IndzYTpFbmRwb2ludFJlZmVyZW5jZSIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIC8+CisgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9IndzZGxFbGVtZW50IiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgICAgICAgICA8YXR0cmlidXRlIHJlZj0id3NkbGk6d3NkbExvY2F0aW9uIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgICA8L2NvbXBsZXhUeXBlPgorPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLXdzLTEuMS1jZDA0LnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy13cy0xLjEtY2QwNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZTIwMGIuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLXdzLTEuMS1jZDA0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMDkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAotICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCi0gICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0gICAgeG1sbnM6d3NkbGk9Imh0dHA6Ly93d3cudzMub3JnL25zL3dzZGwtaW5zdGFuY2UiCi0gICAgeG1sbnM6d3NhPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1LzA4L2FkZHJlc3NpbmciCi0gICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL25zL3dzZGwtaW5zdGFuY2UiCi0gICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwNy8wNS93c2RsL3dzZGwyMC1pbnN0YW5jZS54c2QiLz4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvMjAwNS8wOC9hZGRyZXNzaW5nIgotICAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDYvMDMvYWRkcmVzc2luZy93cy1hZGRyLnhzZCIvPgotCi0gICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LnhzZCIvPgotCi0gICAgPGVsZW1lbnQgbmFtZT0iYmluZGluZy53cyIgdHlwZT0ic2NhOldlYlNlcnZpY2VCaW5kaW5nIgotICAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6YmluZGluZyIvPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IldlYlNlcnZpY2VCaW5kaW5nIj4KLSAgICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6QmluZGluZyI+Ci0gICAgICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9IndzYTpFbmRwb2ludFJlZmVyZW5jZSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgICAgICAgICA8IS0tIGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IgotICAgICAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLy0tPgotICAgICAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ3c2RsRWxlbWVudCIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSByZWY9IndzZGxpOndzZGxMb2NhdGlvbiIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLXdzLWNhbGxiYWNrLTEuMS1jZDA0LnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtYmluZGluZy13cy1jYWxsYmFjay0xLjEtY2QwNC54c2QKaW5kZXggODc0ZTM2Yi4uNzJkODRiMyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1iaW5kaW5nLXdzLWNhbGxiYWNrLTEuMS1jZDA0LnhzZAorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWJpbmRpbmctd3MtY2FsbGJhY2stMS4xLWNkMDQueHNkCkBAIC0xLDYgKzEsNiBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gKGMpIENvcHlyaWdodCBPQVNJUyAyMDA1LCAyMDA5LiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkgLS0+Cis8IS0tIChjKSBDb3B5cmlnaHQgT0FTSVMgMjAwNSwgMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAtLT4KIAogPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAogICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKQEAgLTksMTAgKzksMTIgQEAKICAgICA8ZWxlbWVudCBuYW1lPSJXU0NhbGxiYWNrIj4KICAgICAgICAgPGNvbXBsZXhUeXBlPgogICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgorICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KICAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKyAgICAgICAgICAgIDxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKwogICAgICAgICA8L2NvbXBsZXhUeXBlPgogICAgIDwvZWxlbWVudD4KIAotPC9zY2hlbWE+Cis8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWNvbnRyaWJ1dGlvbi0xLjEtY2QwNS1yZXYxLnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29udHJpYnV0aW9uLTEuMS1jZDA1LXJldjEueHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmJmZTQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWNvbnRyaWJ1dGlvbi0xLjEtY2QwNS1yZXYxLnhzZApAQCAtMCwwICsxLDg5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSBDb3B5cmlnaHQoQykgT0FTSVMoUikgMjAwNSwyMDEwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKyAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAgLS0+Cis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCisgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZCIvPgorCisgICA8IS0tIENvbnRyaWJ1dGlvbiAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImNvbnRyaWJ1dGlvbiIgdHlwZT0ic2NhOkNvbnRyaWJ1dGlvblR5cGUiLz4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb250cmlidXRpb25UeXBlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgorICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZGVwbG95YWJsZSIgdHlwZT0ic2NhOkRlcGxveWFibGVUeXBlIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmltcG9ydEJhc2UiIG1pbk9jY3Vycz0iMCIgCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZXhwb3J0QmFzZSIgbWluT2NjdXJzPSIwIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpleHRlbnNpb25zIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgLz4KKyAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8IS0tIERlcGxveWFibGUgLS0+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iRGVwbG95YWJsZVR5cGUiPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29tbW9uRXh0ZW5zaW9uQmFzZSI+CisgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgCisgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb21wb3NpdGUiIHR5cGU9IlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8IS0tIEltcG9ydCAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImltcG9ydEJhc2UiIHR5cGU9InNjYTpJbXBvcnQiIGFic3RyYWN0PSJ0cnVlIiAvPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkltcG9ydCIgYWJzdHJhY3Q9InRydWUiPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29tbW9uRXh0ZW5zaW9uQmFzZSI+CisgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgCisgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICA8L2NvbXBsZXhDb250ZW50PiAgIAorICAgPC9jb21wbGV4VHlwZT4KKyAgIAorICAgPGVsZW1lbnQgbmFtZT0iaW1wb3J0IiB0eXBlPSJzY2E6SW1wb3J0VHlwZSIgCisgICAgICAgICAgICBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmltcG9ydEJhc2UiLz4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJJbXBvcnRUeXBlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkltcG9ydCI+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWVzcGFjZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvY2F0aW9uIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDwhLS0gRXhwb3J0IC0tPgorICAgPGVsZW1lbnQgbmFtZT0iZXhwb3J0QmFzZSIgdHlwZT0ic2NhOkV4cG9ydCIgYWJzdHJhY3Q9InRydWUiIC8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iRXhwb3J0IiBhYnN0cmFjdD0idHJ1ZSI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpDb21tb25FeHRlbnNpb25CYXNlIj4KKyAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiAKKyAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+ICAgICAgCisgICA8L2NvbXBsZXhUeXBlPgorICAgCisgICA8ZWxlbWVudCBuYW1lPSJleHBvcnQiIHR5cGU9InNjYTpFeHBvcnRUeXBlIiAKKyAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6ZXhwb3J0QmFzZSIvPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkV4cG9ydFR5cGUiPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6RXhwb3J0Ij4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1jb250cmlidXRpb24tMS4xLWNkMDUueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1jb250cmlidXRpb24tMS4xLWNkMDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTM5MWE5Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29udHJpYnV0aW9uLTEuMS1jZDA1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMDkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAotICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LnhzZCIvPgotCi0gICA8IS0tIENvbnRyaWJ1dGlvbiAtLT4KLSAgIDxlbGVtZW50IG5hbWU9ImNvbnRyaWJ1dGlvbiIgdHlwZT0ic2NhOkNvbnRyaWJ1dGlvblR5cGUiLz4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb250cmlidXRpb25UeXBlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iZGVwbG95YWJsZSIgdHlwZT0ic2NhOkRlcGxveWFibGVUeXBlIiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmltcG9ydEJhc2UiIG1pbk9jY3Vycz0iMCIgCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZXhwb3J0QmFzZSIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDwhLS0gRGVwbG95YWJsZSAtLT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJEZXBsb3lhYmxlVHlwZSI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpDb21tb25FeHRlbnNpb25CYXNlIj4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvbXBvc2l0ZSIgdHlwZT0iUU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDwhLS0gSW1wb3J0IC0tPgotICAgPGVsZW1lbnQgbmFtZT0iaW1wb3J0QmFzZSIgdHlwZT0ic2NhOkltcG9ydCIgYWJzdHJhY3Q9InRydWUiIC8+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iSW1wb3J0IiBhYnN0cmFjdD0idHJ1ZSI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpDb21tb25FeHRlbnNpb25CYXNlIj4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+ICAgCi0gICA8L2NvbXBsZXhUeXBlPgotICAgCi0gICA8ZWxlbWVudCBuYW1lPSJpbXBvcnQiIHR5cGU9InNjYTpJbXBvcnRUeXBlIiAKLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW1wb3J0QmFzZSIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkltcG9ydFR5cGUiPgotICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW1wb3J0Ij4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibG9jYXRpb24iIHR5cGU9ImFueVVSSSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8L2NvbXBsZXhDb250ZW50PgotICAgPC9jb21wbGV4VHlwZT4KLQotICAgPCEtLSBFeHBvcnQgLS0+Ci0gICA8ZWxlbWVudCBuYW1lPSJleHBvcnRCYXNlIiB0eXBlPSJzY2E6RXhwb3J0IiBhYnN0cmFjdD0idHJ1ZSIgLz4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJFeHBvcnQiIGFic3RyYWN0PSJ0cnVlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4gICAgICAKLSAgIDwvY29tcGxleFR5cGU+Ci0gICAKLSAgIDxlbGVtZW50IG5hbWU9ImV4cG9ydCIgdHlwZT0ic2NhOkV4cG9ydFR5cGUiIAotICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpleHBvcnRCYXNlIi8+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iRXhwb3J0VHlwZSI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpFeHBvcnQiPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8L2NvbXBsZXhDb250ZW50PgotICAgPC9jb21wbGV4VHlwZT4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWNvbnRyaWJ1dGlvbi1jLTEuMS1jZDA0LnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29udHJpYnV0aW9uLWMtMS4xLWNkMDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTNjNGM1Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29udHJpYnV0aW9uLWMtMS4xLWNkMDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDcsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAgLS0+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLQl4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvbnRyaWJ1dGlvbi0xLjEtY2QwNS54c2QiIC8+Ci0KLQk8ZWxlbWVudCBuYW1lPSJleHBvcnQuYyIgdHlwZT0ic2NhOkNFeHBvcnQiCi0JCXN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6ZXhwb3J0QmFzZSIgLz4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJDRXhwb3J0Ij4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJzY2E6RXhwb3J0Ij4KLQkJCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9IlFOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0icGF0aCIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxlbGVtZW50IG5hbWU9ImltcG9ydC5jIiB0eXBlPSJzY2E6Q0ltcG9ydCIKLQkJc3Vic3RpdHV0aW9uR3JvdXA9InNjYTppbXBvcnRCYXNlIiAvPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IkNJbXBvcnQiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbXBvcnQiPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iUU5hbWUiIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWNvbnRyaWJ1dGlvbi1jLTEuMS1jZDA1LXJldjEueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1jb250cmlidXRpb24tYy0xLjEtY2QwNS1yZXYxLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTI5NjA3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1jb250cmlidXRpb24tYy0xLjEtY2QwNS1yZXYxLnhzZApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSBDb3B5cmlnaHQoQykgT0FTSVMoUikgMjAwNywyMDEwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KKzxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorCXhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KKworCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29udHJpYnV0aW9uLTEuMS1jZDA1LXJldjEueHNkIiAvPgorCisJPGVsZW1lbnQgbmFtZT0iZXhwb3J0LmMiIHR5cGU9InNjYTpDRXhwb3J0IgorCQlzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmV4cG9ydEJhc2UiIC8+CisKKwk8Y29tcGxleFR5cGUgbmFtZT0iQ0V4cG9ydCI+CisJCTxjb21wbGV4Q29udGVudD4KKwkJCTxleHRlbnNpb24gYmFzZT0ic2NhOkV4cG9ydCI+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJRTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKwkJCQk8YXR0cmlidXRlIG5hbWU9InBhdGgiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KKwkJCTwvZXh0ZW5zaW9uPgorCQk8L2NvbXBsZXhDb250ZW50PgorCTwvY29tcGxleFR5cGU+CisKKwk8ZWxlbWVudCBuYW1lPSJpbXBvcnQuYyIgdHlwZT0ic2NhOkNJbXBvcnQiCisJCXN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW1wb3J0QmFzZSIgLz4KKworCTxjb21wbGV4VHlwZSBuYW1lPSJDSW1wb3J0Ij4KKwkJPGNvbXBsZXhDb250ZW50PgorCQkJPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW1wb3J0Ij4KKwkJCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9IlFOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgorCQkJCTxhdHRyaWJ1dGUgbmFtZT0ibG9jYXRpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KKwkJCTwvZXh0ZW5zaW9uPgorCQk8L2NvbXBsZXhDb250ZW50PgorCTwvY29tcGxleFR5cGU+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1jb250cmlidXRpb24tY3BwLTEuMS1jZDA0LnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29udHJpYnV0aW9uLWNwcC0xLjEtY2QwNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZmZmYTIuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1jb250cmlidXRpb24tY3BwLTEuMS1jZDA0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA2LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0JeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb250cmlidXRpb24tMS4xLWNkMDUueHNkIiAvPgotCi0JPGVsZW1lbnQgbmFtZT0iZXhwb3J0LmNwcCIgdHlwZT0ic2NhOkNQUEV4cG9ydCIKLQkJc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpleHBvcnRCYXNlIiAvPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IkNQUEV4cG9ydCI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxleHRlbnNpb24gYmFzZT0ic2NhOkV4cG9ydCI+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJRTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCQk8YXR0cmlidXRlIG5hbWU9InBhdGgiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJpbXBvcnQuY3BwIiB0eXBlPSJzY2E6Q1BQSW1wb3J0IgotCQlzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmltcG9ydEJhc2UiIC8+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iQ1BQSW1wb3J0Ij4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW1wb3J0Ij4KLQkJCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9IlFOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0ibG9jYXRpb24iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29udHJpYnV0aW9uLWNwcC0xLjEtY2QwNS1yZXYxLnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29udHJpYnV0aW9uLWNwcC0xLjEtY2QwNS1yZXYxLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDgxM2JmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1jb250cmlidXRpb24tY3BwLTEuMS1jZDA1LXJldjEueHNkCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA2LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisJeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorCisJPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb250cmlidXRpb24tMS4xLWNkMDUtcmV2MS54c2QiIC8+CisKKwk8ZWxlbWVudCBuYW1lPSJleHBvcnQuY3BwIiB0eXBlPSJzY2E6Q1BQRXhwb3J0IgorCQlzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmV4cG9ydEJhc2UiIC8+CisKKwk8Y29tcGxleFR5cGUgbmFtZT0iQ1BQRXhwb3J0Ij4KKwkJPGNvbXBsZXhDb250ZW50PgorCQkJPGV4dGVuc2lvbiBiYXNlPSJzY2E6RXhwb3J0Ij4KKwkJCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9IlFOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgorCQkJCTxhdHRyaWJ1dGUgbmFtZT0icGF0aCIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgorCQkJPC9leHRlbnNpb24+CisJCTwvY29tcGxleENvbnRlbnQ+CisJPC9jb21wbGV4VHlwZT4KKworCTxlbGVtZW50IG5hbWU9ImltcG9ydC5jcHAiIHR5cGU9InNjYTpDUFBJbXBvcnQiCisJCXN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW1wb3J0QmFzZSIgLz4KKworCTxjb21wbGV4VHlwZSBuYW1lPSJDUFBJbXBvcnQiPgorCQk8Y29tcGxleENvbnRlbnQ+CisJCQk8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbXBvcnQiPgorCQkJCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iUU5hbWUiIHVzZT0icmVxdWlyZWQiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgorCQkJPC9leHRlbnNpb24+CisJCTwvY29tcGxleENvbnRlbnQ+CisJPC9jb21wbGV4VHlwZT4KKworPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1jb250cmlidXRpb24tamF2YS0xLjEtY2QwMi1yZXYxLnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29udHJpYnV0aW9uLWphdmEtMS4xLWNkMDItcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI2NDI1OQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29udHJpYnV0aW9uLWphdmEtMS4xLWNkMDItcmV2MS54c2QKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAgLS0+Cis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCisgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29udHJpYnV0aW9uLTEuMS1jZDA1LXJldjEueHNkIi8+CisKKyAgIDwhLS0gSW1wb3J0LmphdmEgLS0+ICAgCisgICA8ZWxlbWVudCBuYW1lPSJpbXBvcnQuamF2YSIgdHlwZT0ic2NhOkphdmFJbXBvcnRUeXBlIgorICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTppbXBvcnRCYXNlIiAvPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkphdmFJbXBvcnRUeXBlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkltcG9ydCI+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBhY2thZ2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJsb2NhdGlvbiIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorICAgCisgICA8IS0tIEV4cG9ydC5qYXZhIC0tPgorICAgPGVsZW1lbnQgbmFtZT0iZXhwb3J0LmphdmEiIHR5cGU9InNjYTpKYXZhRXhwb3J0VHlwZSIKKyAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6ZXhwb3J0QmFzZSIgLz4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJKYXZhRXhwb3J0VHlwZSI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpFeHBvcnQiPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwYWNrYWdlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1jb250cmlidXRpb24tamF2YS0xLjEtY2QwMi54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWNvbnRyaWJ1dGlvbi1qYXZhLTEuMS1jZDAyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjEzMTgwNC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWNvbnRyaWJ1dGlvbi1qYXZhLTEuMS1jZDAyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAotICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvbnRyaWJ1dGlvbi0xLjEtY2QwNS54c2QiLz4KLQotICAgPCEtLSBJbXBvcnQuamF2YSAtLT4gICAKLSAgIDxlbGVtZW50IG5hbWU9ImltcG9ydC5qYXZhIiB0eXBlPSJzY2E6SmF2YUltcG9ydFR5cGUiCi0gICAgICBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmltcG9ydEJhc2UiIC8+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iSmF2YUltcG9ydFR5cGUiPgotICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW1wb3J0Ij4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGFja2FnZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvY2F0aW9uIiB0eXBlPSJhbnlVUkkiIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICAKLSAgIDwhLS0gRXhwb3J0LmphdmEgLS0+Ci0gICA8ZWxlbWVudCBuYW1lPSJleHBvcnQuamF2YSIgdHlwZT0ic2NhOkphdmFFeHBvcnRUeXBlIgotICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpleHBvcnRCYXNlIiAvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkphdmFFeHBvcnRUeXBlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkV4cG9ydCI+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBhY2thZ2UiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8L2NvbXBsZXhDb250ZW50PgotICAgPC9jb21wbGV4VHlwZT4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWNvcmUtMS4xLWNkMDUtcmV2MS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWNvcmUtMS4xLWNkMDUtcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQxYTVjMwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZApAQCAtMCwwICsxLDQ2OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCisgICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAorICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAorICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAorICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLXBvbGljeS0xLjEtY2QwMy1yZXYxLnhzZCIvPgkKKyAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiIAorICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS94bWwueHNkIi8+CisKKyAgIDwhLS0gQ29tbW9uIGV4dGVuc2lvbiBiYXNlIGZvciBTQ0EgZGVmaW5pdGlvbnMgLS0+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29tbW9uRXh0ZW5zaW9uQmFzZSI+CisgICAgICA8c2VxdWVuY2U+CisgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpkb2N1bWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgIDwvc2VxdWVuY2U+CisgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKyAgIDwvY29tcGxleFR5cGU+CisgICAKKyAgIDxlbGVtZW50IG5hbWU9ImRvY3VtZW50YXRpb24iIHR5cGU9InNjYTpEb2N1bWVudGF0aW9uIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iRG9jdW1lbnRhdGlvbiIgbWl4ZWQ9InRydWUiPgorICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgIDxhdHRyaWJ1dGUgcmVmPSJ4bWw6bGFuZyIvPgorICAgPC9jb21wbGV4VHlwZT4KKworICAgPCEtLSBDb21wb25lbnQgVHlwZSAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImNvbXBvbmVudFR5cGUiIHR5cGU9InNjYTpDb21wb25lbnRUeXBlIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29tcG9uZW50VHlwZSI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpDb21tb25FeHRlbnNpb25CYXNlIj4KKyAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmltcGxlbWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiLz4KKyAgICAgICAgICAgICAgIDxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzZXJ2aWNlIiB0eXBlPSJzY2E6Q29tcG9uZW50U2VydmljZSIvPgorICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVmZXJlbmNlIiAKKyAgICAgICAgICAgICAgICAgICAgIHR5cGU9InNjYTpDb21wb25lbnRUeXBlUmVmZXJlbmNlIi8+CisgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgdHlwZT0ic2NhOlByb3BlcnR5Ii8+CisgICAgICAgICAgICAgICA8L2Nob2ljZT4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiAvPgorICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDwhLS0gQ29tcG9zaXRlIC0tPgorICAgPGVsZW1lbnQgbmFtZT0iY29tcG9zaXRlIiB0eXBlPSJzY2E6Q29tcG9zaXRlIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29tcG9zaXRlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgorICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6aW5jbHVkZSIgbWluT2NjdXJzPSIwIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgorICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6cmVxdWlyZXMiLz4KKyAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiLz4KKyAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNlcnZpY2UiIHR5cGU9InNjYTpTZXJ2aWNlIi8+CisgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgdHlwZT0ic2NhOlByb3BlcnR5Ii8+CisgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjb21wb25lbnQiIHR5cGU9InNjYTpDb21wb25lbnQiLz4KKyAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlZmVyZW5jZSIgdHlwZT0ic2NhOlJlZmVyZW5jZSIvPgorICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0id2lyZSIgdHlwZT0ic2NhOldpcmUiLz4KKyAgICAgICAgICAgICAgIDwvY2hvaWNlPgorICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRhcmdldE5hbWVzcGFjZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvY2FsIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAKKyAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYXV0b3dpcmUiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIAorICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJmYWxzZSIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisgICAKKyAgIDwhLS0gQ29udHJhY3QgYmFzZSB0eXBlIGZvciBTZXJ2aWNlLCBSZWZlcmVuY2UgLS0+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29udHJhY3QiIGFic3RyYWN0PSJ0cnVlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgorICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6aW50ZXJmYWNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmJpbmRpbmciIG1pbk9jY3Vycz0iMCIgCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmNhbGxiYWNrIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiIG1pbk9jY3Vycz0iMCIgCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIC8+CisgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIgLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDwhLS0gU2VydmljZSAtLT4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJTZXJ2aWNlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbnRyYWN0Ij4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvbW90ZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8IS0tIEludGVyZmFjZSAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImludGVyZmFjZSIgdHlwZT0ic2NhOkludGVyZmFjZSIgYWJzdHJhY3Q9InRydWUiLz4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJJbnRlcmZhY2UiIGFic3RyYWN0PSJ0cnVlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgorICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIi8+CisgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+CisgICAgICAgICAgICA8L2Nob2ljZT4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icmVtb3RhYmxlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CisJICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKwkgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCisgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8IS0tIFJlZmVyZW5jZSAtLT4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVuY2UiPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29udHJhY3QiPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXQiIHR5cGU9InNjYTpsaXN0T2ZBbnlVUklzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ3aXJlZEJ5SW1wbCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgCisgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im11bHRpcGxpY2l0eSIgdHlwZT0ic2NhOk11bHRpcGxpY2l0eSIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvbW90ZSIgdHlwZT0ic2NhOmxpc3RPZkFueVVSSXMiIAorICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8IS0tIFByb3BlcnR5IC0tPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IlNDQVByb3BlcnR5QmFzZSIgbWl4ZWQ9InRydWUiPgorICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgorICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgPCEtLSBOT1QgYW4gZXh0ZW5zaW9uIHBvaW50OyBUaGlzIGFueSBleGlzdHMgdG8gYWNjZXB0CisgICAgICAgICAgICAgdGhlIGVsZW1lbnQtYmFzZWQgb3IgY29tcGxleCB0eXBlIHByb3BlcnR5CisgICAgICAgICAgICAgaS5lLiBubyBlbGVtZW50LWJhc2VkIGV4dGVuc2lvbiBwb2ludCB1bmRlciAic2NhOnByb3BlcnR5IiAtLT4KKyAgICAgIDwvc2VxdWVuY2U+CisgICAgICA8IS0tIG1peGVkPSJ0cnVlIiB0byBoYW5kbGUgc2ltcGxlIHR5cGUgLS0+CisgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJRTmFtZSIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50IiB0eXBlPSJRTmFtZSIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtYW55IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSIvPgorICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdHlwZT0iYW55U2ltcGxlVHlwZSIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CisgICA8L2NvbXBsZXhUeXBlPgorICAgCisgICA8Y29tcGxleFR5cGUgbmFtZT0iUHJvcGVydHkiIG1peGVkPSJ0cnVlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpTQ0FQcm9wZXJ0eUJhc2UiPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtdXN0U3VwcGx5IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAKKyAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisgICAKKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJQcm9wZXJ0eVZhbHVlIiBtaXhlZD0idHJ1ZSI+CisgICAgICA8Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6U0NBUHJvcGVydHlCYXNlIj4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic291cmNlIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZmlsZSIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8IS0tIEJpbmRpbmcgLS0+CisgICA8ZWxlbWVudCBuYW1lPSJiaW5kaW5nIiB0eXBlPSJzY2E6QmluZGluZyIgYWJzdHJhY3Q9InRydWUiLz4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJCaW5kaW5nIiBhYnN0cmFjdD0idHJ1ZSI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpDb21tb25FeHRlbnNpb25CYXNlIj4KKyAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOndpcmVGb3JtYXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiAvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6b3BlcmF0aW9uU2VsZWN0b3IiIG1pbk9jY3Vycz0iMCIgCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9IjEiIC8+CisgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpyZXF1aXJlcyIgbWluT2NjdXJzPSIwIiAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50IiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDwhLS0gQmluZGluZyBUeXBlIC0tPgorICAgPGVsZW1lbnQgbmFtZT0iYmluZGluZ1R5cGUiIHR5cGU9InNjYTpCaW5kaW5nVHlwZSIvPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkJpbmRpbmdUeXBlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgorICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iUU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYWx3YXlzUHJvdmlkZXMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAorICAgICAgICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im1heVByb3ZpZGUiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAorICAgICAgICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorICAgCisgICA8IS0tIFdpcmVGb3JtYXQgVHlwZSAtLT4KKyAgIDxlbGVtZW50IG5hbWU9IndpcmVGb3JtYXQiIHR5cGU9InNjYTpXaXJlRm9ybWF0VHlwZSIgYWJzdHJhY3Q9InRydWUiLz4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJXaXJlRm9ybWF0VHlwZSIgYWJzdHJhY3Q9InRydWUiPgorICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8IS0tIE9wZXJhdGlvblNlbGVjdG9yIFR5cGUgLS0+CisgICA8ZWxlbWVudCBuYW1lPSJvcGVyYXRpb25TZWxlY3RvciIgdHlwZT0ic2NhOk9wZXJhdGlvblNlbGVjdG9yVHlwZSIKKyAgICAgIGFic3RyYWN0PSJ0cnVlIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iT3BlcmF0aW9uU2VsZWN0b3JUeXBlIiBhYnN0cmFjdD0idHJ1ZSI+CisgICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKyAgIDwvY29tcGxleFR5cGU+CisgICAKKyAgIDwhLS0gQ2FsbGJhY2sgLS0+CisgICA8ZWxlbWVudCBuYW1lPSJjYWxsYmFjayIgdHlwZT0ic2NhOkNhbGxiYWNrIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iQ2FsbGJhY2siPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29tbW9uRXh0ZW5zaW9uQmFzZSI+CisgICAgICAgICAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6YmluZGluZyIvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6cmVxdWlyZXMiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiAvPgorICAgICAgICAgICAgPC9jaG9pY2U+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lTZXRzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICA8L2NvbXBsZXhDb250ZW50PgorICAgPC9jb21wbGV4VHlwZT4KKworICAgPCEtLSBDb21wb25lbnQgLS0+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29tcG9uZW50Ij4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgorICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6aW1wbGVtZW50YXRpb24iIG1pbk9jY3Vycz0iMSIgCisgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9IjEiLz4KKyAgICAgICAgICAgICAgIDxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzZXJ2aWNlIiB0eXBlPSJzY2E6Q29tcG9uZW50U2VydmljZSIvPgorICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVmZXJlbmNlIiB0eXBlPSJzY2E6Q29tcG9uZW50UmVmZXJlbmNlIi8+CisgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgdHlwZT0ic2NhOlByb3BlcnR5VmFsdWUiLz4KKyAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIi8+CisgICAgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+CisgICAgICAgICAgICAgICA8L2Nob2ljZT4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmV4dGVuc2lvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiAvPgorICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImF1dG93aXJlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lTZXRzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICA8L2NvbXBsZXhDb250ZW50PgorICAgPC9jb21wbGV4VHlwZT4KKworICAgPCEtLSBDb21wb25lbnQgU2VydmljZSAtLT4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb21wb25lbnRTZXJ2aWNlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbnRyYWN0Ij4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisgICAKKyAgIDwhLS0gQ29tcG9uZW50IFJlZmVyZW5jZSAtLT4KKyAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb21wb25lbnRSZWZlcmVuY2UiPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29udHJhY3QiPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJhdXRvd2lyZSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXQiIHR5cGU9InNjYTpsaXN0T2ZBbnlVUklzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ3aXJlZEJ5SW1wbCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgCisgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im11bHRpcGxpY2l0eSIgdHlwZT0ic2NhOk11bHRpcGxpY2l0eSIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEuLjEiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibm9uT3ZlcnJpZGFibGUiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIAorICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJmYWxzZSIvPgorICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICA8L2NvbXBsZXhDb250ZW50PgorICAgPC9jb21wbGV4VHlwZT4KKyAgIAorICAgPCEtLSBDb21wb25lbnQgVHlwZSBSZWZlcmVuY2UgLS0+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iQ29tcG9uZW50VHlwZVJlZmVyZW5jZSI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic2NhOkNvbXBvbmVudFJlZmVyZW5jZSI+CisgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpkb2N1bWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmludGVyZmFjZSIgbWluT2NjdXJzPSIwIi8+CisgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpiaW5kaW5nIiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmNhbGxiYWNrIiBtaW5PY2N1cnM9IjAiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiIG1pbk9jY3Vycz0iMCIgIAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4gICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIC8+CisgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJOQ05hbWUiIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYXV0b3dpcmUiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0id2lyZWRCeUltcGwiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIAorICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJmYWxzZSIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtdWx0aXBsaWNpdHkiIHR5cGU9InNjYTpNdWx0aXBsaWNpdHkiIAorICAgICAgICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIxLi4xIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lTZXRzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CisgICAgICAgICA8L3Jlc3RyaWN0aW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisgICAKKworICAgPCEtLSBJbXBsZW1lbnRhdGlvbiAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImltcGxlbWVudGF0aW9uIiB0eXBlPSJzY2E6SW1wbGVtZW50YXRpb24iIGFic3RyYWN0PSJ0cnVlIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iSW1wbGVtZW50YXRpb24iIGFic3RyYWN0PSJ0cnVlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgorCSAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KKwkgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIi8+CisJICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+CisJICAgICAgICA8L2Nob2ljZT4gICAgIAorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDwhLS0gSW1wbGVtZW50YXRpb24gVHlwZSAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImltcGxlbWVudGF0aW9uVHlwZSIgdHlwZT0ic2NhOkltcGxlbWVudGF0aW9uVHlwZSIvPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkltcGxlbWVudGF0aW9uVHlwZSI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpDb21tb25FeHRlbnNpb25CYXNlIj4KKyAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiAKKyAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9IlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImFsd2F5c1Byb3ZpZGVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtYXlQcm92aWRlIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICA8L2NvbXBsZXhDb250ZW50PgorICAgPC9jb21wbGV4VHlwZT4KKworICAgPCEtLSBXaXJlIC0tPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IldpcmUiPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29tbW9uRXh0ZW5zaW9uQmFzZSI+CisgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgCisgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzb3VyY2UiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXQiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXBsYWNlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAKKyAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8IS0tIEluY2x1ZGUgLS0+CisgICA8ZWxlbWVudCBuYW1lPSJpbmNsdWRlIiB0eXBlPSJzY2E6SW5jbHVkZSIvPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkluY2x1ZGUiPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29tbW9uRXh0ZW5zaW9uQmFzZSI+CisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9IlFOYW1lIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorICAgCisgICA8IS0tIEV4dGVuc2lvbnMgZWxlbWVudCAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbnMiPgorICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAKKyAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KKyAgICAgICAgIDwvc2VxdWVuY2U+CisgICAgICA8L2NvbXBsZXhUeXBlPgorICAgPC9lbGVtZW50PgorCisgICA8IS0tIEludGVudHMgd2l0aGluIFdTREwgZG9jdW1lbnRzIC0tPgorICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIvPgorCisgICA8IS0tIEdsb2JhbCBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmb3IgQGNhbGxiYWNrIHRvIG1hcmsgYSBXU0RMIHBvcnQgdHlwZSAgICAKKyAgICAgICAgYXMgaGF2aW5nIGEgY2FsbGJhY2sgaW50ZXJmYWNlIGRlZmluZWQgaW4gdGVybXMgb2YgYSBzZWNvbmQgcG9ydCAKKyAgICAgICAgdHlwZS4gLS0+CisgICA8YXR0cmlidXRlIG5hbWU9ImNhbGxiYWNrIiB0eXBlPSJhbnlVUkkiLz4KKyAgIAorICAgPCEtLSBWYWx1ZSB0eXBlIGRlZmluaXRpb24gZm9yIHByb3BlcnR5IHZhbHVlcyAtLT4KKyAgIDxlbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJzY2E6VmFsdWVUeXBlIi8+IAorICAgPGNvbXBsZXhUeXBlIG5hbWU9IlZhbHVlVHlwZSIgbWl4ZWQ9InRydWUiPgorICAgICAgPHNlcXVlbmNlPiAKKyAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKKyAgICAgICAgICAgIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+IAorICAgICAgPC9zZXF1ZW5jZT4gCisgICAgICA8IS0tIG1peGVkPSJ0cnVlIiB0byBoYW5kbGUgc2ltcGxlIHR5cGUgLS0+IAorICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIvPiAKKyAgIDwvY29tcGxleFR5cGU+IAorICAgCisgICA8IS0tIE1pc2NlbGxhbmVvdXMgc2ltcGxlIHR5cGUgZGVmaW5pdGlvbnMgLS0+CisgICA8c2ltcGxlVHlwZSBuYW1lPSJNdWx0aXBsaWNpdHkiPgorICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+CisgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjAuLjEiLz4KKyAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iMS4uMSIvPgorICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSIwLi5uIi8+CisgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjEuLm4iLz4KKyAgICAgIDwvcmVzdHJpY3Rpb24+CisgICA8L3NpbXBsZVR5cGU+CisgICAKKyAgIDxzaW1wbGVUeXBlIG5hbWU9Ik92ZXJyaWRlT3B0aW9ucyI+CisgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KKyAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ibm8iLz4KKyAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ibWF5Ii8+CisgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Im11c3QiLz4KKyAgICAgIDwvcmVzdHJpY3Rpb24+CisgICA8L3NpbXBsZVR5cGU+CisgICAKKyAgIDxzaW1wbGVUeXBlIG5hbWU9Imxpc3RPZlFOYW1lcyI+CisgICAgICA8bGlzdCBpdGVtVHlwZT0iUU5hbWUiLz4KKyAgIDwvc2ltcGxlVHlwZT4KKyAgIAorICAgPHNpbXBsZVR5cGUgbmFtZT0ibGlzdE9mQW55VVJJcyI+CisgICAgICA8bGlzdCBpdGVtVHlwZT0iYW55VVJJIi8+CisgICA8L3NpbXBsZVR5cGU+CisJCisgICA8c2ltcGxlVHlwZSBuYW1lPSJDcmVhdGVSZXNvdXJjZSI+CisgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KKyAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iYWx3YXlzIiAvPgorICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJuZXZlciIgLz4KKyAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iaWZub3RleGlzdCIgLz4KKyAgICAgIDwvcmVzdHJpY3Rpb24+CisgICA8L3NpbXBsZVR5cGU+Cis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29yZS0xLjEtY2QwNS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWNvcmUtMS4xLWNkMDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjBmY2U5Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtY29yZS0xLjEtY2QwNS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0NzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAwOS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCi0gICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAotICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLXBvbGljeS0xLjEtY2QwMy54c2QiLz4JCi0gICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiAKLSAgICAgICAgICAgc2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLnhzZCIvPgotCi0gICA8IS0tIENvbW1vbiBleHRlbnNpb24gYmFzZSBmb3IgU0NBIGRlZmluaXRpb25zIC0tPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkNvbW1vbkV4dGVuc2lvbkJhc2UiPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZG9jdW1lbnRhdGlvbiIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICA8L3NlcXVlbmNlPgotICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgCi0gICA8ZWxlbWVudCBuYW1lPSJkb2N1bWVudGF0aW9uIiB0eXBlPSJzY2E6RG9jdW1lbnRhdGlvbiIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkRvY3VtZW50YXRpb24iIG1peGVkPSJ0cnVlIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YXR0cmlidXRlIHJlZj0ieG1sOmxhbmciLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDwhLS0gQ29tcG9uZW50IFR5cGUgLS0+Ci0gICA8ZWxlbWVudCBuYW1lPSJjb21wb25lbnRUeXBlIiB0eXBlPSJzY2E6Q29tcG9uZW50VHlwZSIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkNvbXBvbmVudFR5cGUiPgotICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29tbW9uRXh0ZW5zaW9uQmFzZSI+Ci0gICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTppbXBsZW1lbnRhdGlvbiIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgICAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ic2VydmljZSIgdHlwZT0ic2NhOkNvbXBvbmVudFNlcnZpY2UiLz4KLSAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlZmVyZW5jZSIgCi0gICAgICAgICAgICAgICAgICAgICB0eXBlPSJzY2E6Q29tcG9uZW50VHlwZVJlZmVyZW5jZSIvPgotICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icHJvcGVydHkiIHR5cGU9InNjYTpQcm9wZXJ0eSIvPgotICAgICAgICAgICAgICAgPC9jaG9pY2U+Ci0gICAgICAgICAgICAgICA8IS0tIGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvIC0tPgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDwhLS0gQ29tcG9zaXRlIC0tPgotICAgPGVsZW1lbnQgbmFtZT0iY29tcG9zaXRlIiB0eXBlPSJzY2E6Q29tcG9zaXRlIi8+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQ29tcG9zaXRlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6aW5jbHVkZSIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICAgICA8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6cmVxdWlyZXMiLz4KLSAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiLz4KLSAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNlcnZpY2UiIHR5cGU9InNjYTpTZXJ2aWNlIi8+Ci0gICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSIgdHlwZT0ic2NhOlByb3BlcnR5Ii8+Ci0gICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjb21wb25lbnQiIHR5cGU9InNjYTpDb21wb25lbnQiLz4KLSAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlZmVyZW5jZSIgdHlwZT0ic2NhOlJlZmVyZW5jZSIvPgotICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0id2lyZSIgdHlwZT0ic2NhOldpcmUiLz4KLSAgICAgICAgICAgICAgIDwvY2hvaWNlPgotICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InRhcmdldE5hbWVzcGFjZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImxvY2FsIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAKLSAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYXV0b3dpcmUiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIAotICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJmYWxzZSIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICAKLSAgIDwhLS0gQ29udHJhY3QgYmFzZSB0eXBlIGZvciBTZXJ2aWNlLCBSZWZlcmVuY2UgLS0+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQ29udHJhY3QiIGFic3RyYWN0PSJ0cnVlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6aW50ZXJmYWNlIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmJpbmRpbmciIG1pbk9jY3Vycz0iMCIgCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmNhbGxiYWNrIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMSIgLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiIG1pbk9jY3Vycz0iMCIgCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIC8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIgLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDwhLS0gU2VydmljZSAtLT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJTZXJ2aWNlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbnRyYWN0Ij4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvbW90ZSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8IS0tIEludGVyZmFjZSAtLT4KLSAgIDxlbGVtZW50IG5hbWU9ImludGVyZmFjZSIgdHlwZT0ic2NhOkludGVyZmFjZSIgYWJzdHJhY3Q9InRydWUiLz4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJJbnRlcmZhY2UiIGFic3RyYWN0PSJ0cnVlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgotICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIi8+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+Ci0gICAgICAgICAgICA8L2Nob2ljZT4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icmVtb3RhYmxlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0JICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKLSAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLQkgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCi0gICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8IS0tIFJlZmVyZW5jZSAtLT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZWZlcmVuY2UiPgotICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29udHJhY3QiPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXQiIHR5cGU9InNjYTpsaXN0T2ZBbnlVUklzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ3aXJlZEJ5SW1wbCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgCi0gICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im11bHRpcGxpY2l0eSIgdHlwZT0ic2NhOk11bHRpcGxpY2l0eSIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icHJvbW90ZSIgdHlwZT0ic2NhOmxpc3RPZkFueVVSSXMiIAotICAgICAgICAgICAgICAgICAgICAgICB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8IS0tIFByb3BlcnR5IC0tPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlNDQVByb3BlcnR5QmFzZSIgbWl4ZWQ9InRydWUiPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgPCEtLSBOT1QgYW4gZXh0ZW5zaW9uIHBvaW50OyBUaGlzIGFueSBleGlzdHMgdG8gYWNjZXB0Ci0gICAgICAgICAgICAgdGhlIGVsZW1lbnQtYmFzZWQgb3IgY29tcGxleCB0eXBlIHByb3BlcnR5Ci0gICAgICAgICAgICAgaS5lLiBubyBlbGVtZW50LWJhc2VkIGV4dGVuc2lvbiBwb2ludCB1bmRlciAic2NhOnByb3BlcnR5IiAtLT4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8IS0tIG1peGVkPSJ0cnVlIiB0byBoYW5kbGUgc2ltcGxlIHR5cGUgLS0+Ci0gICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB0eXBlPSJRTmFtZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJlbGVtZW50IiB0eXBlPSJRTmFtZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtYW55IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSIvPgotICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ2YWx1ZSIgdHlwZT0iYW55U2ltcGxlVHlwZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgCi0gICA8Y29tcGxleFR5cGUgbmFtZT0iUHJvcGVydHkiIG1peGVkPSJ0cnVlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudCBtaXhlZD0idHJ1ZSI+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpTQ0FQcm9wZXJ0eUJhc2UiPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtdXN0U3VwcGx5IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAKLSAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0iZmFsc2UiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICAKLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJQcm9wZXJ0eVZhbHVlIiBtaXhlZD0idHJ1ZSI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQgbWl4ZWQ9InRydWUiPgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6U0NBUHJvcGVydHlCYXNlIj4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ic291cmNlIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iZmlsZSIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8IS0tIEJpbmRpbmcgLS0+Ci0gICA8ZWxlbWVudCBuYW1lPSJiaW5kaW5nIiB0eXBlPSJzY2E6QmluZGluZyIgYWJzdHJhY3Q9InRydWUiLz4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJCaW5kaW5nIiBhYnN0cmFjdD0idHJ1ZSI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpDb21tb25FeHRlbnNpb25CYXNlIj4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOndpcmVGb3JtYXQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSIxIiAvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6b3BlcmF0aW9uU2VsZWN0b3IiIG1pbk9jY3Vycz0iMCIgCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9IjEiIC8+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpyZXF1aXJlcyIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50IiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0iYW55VVJJIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDwhLS0gQmluZGluZyBUeXBlIC0tPgotICAgPGVsZW1lbnQgbmFtZT0iYmluZGluZ1R5cGUiIHR5cGU9InNjYTpCaW5kaW5nVHlwZSIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkJpbmRpbmdUeXBlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgPCEtLSBhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLy0tPgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idHlwZSIgdHlwZT0iUU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYWx3YXlzUHJvdmlkZXMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAotICAgICAgICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im1heVByb3ZpZGUiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAotICAgICAgICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgCi0gICA8IS0tIFdpcmVGb3JtYXQgVHlwZSAtLT4KLSAgIDxlbGVtZW50IG5hbWU9IndpcmVGb3JtYXQiIHR5cGU9InNjYTpXaXJlRm9ybWF0VHlwZSIgYWJzdHJhY3Q9InRydWUiLz4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJXaXJlRm9ybWF0VHlwZSIgYWJzdHJhY3Q9InRydWUiPgotICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLSAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDwhLS0gT3BlcmF0aW9uU2VsZWN0b3IgVHlwZSAtLT4KLSAgIDxlbGVtZW50IG5hbWU9Im9wZXJhdGlvblNlbGVjdG9yIiB0eXBlPSJzY2E6T3BlcmF0aW9uU2VsZWN0b3JUeXBlIgotICAgICAgYWJzdHJhY3Q9InRydWUiLz4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJPcGVyYXRpb25TZWxlY3RvclR5cGUiIGFic3RyYWN0PSJ0cnVlIj4KLSAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0gICAgICA8L3NlcXVlbmNlPgotICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgCi0gICA8IS0tIENhbGxiYWNrIC0tPgotICAgPGVsZW1lbnQgbmFtZT0iY2FsbGJhY2siIHR5cGU9InNjYTpDYWxsYmFjayIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkNhbGxiYWNrIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgotICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmJpbmRpbmciLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIi8+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+Ci0gICAgICAgICAgICAgICA8IS0tIGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8gLS0+Ci0gICAgICAgICAgICA8L2Nob2ljZT4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icmVxdWlyZXMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAotICAgICAgICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBvbGljeVNldHMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAotICAgICAgICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8IS0tIENvbXBvbmVudCAtLT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb21wb25lbnQiPgotICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29tbW9uRXh0ZW5zaW9uQmFzZSI+Ci0gICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTppbXBsZW1lbnRhdGlvbiIgbWluT2NjdXJzPSIxIiAKLSAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0iMSIvPgotICAgICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNlcnZpY2UiIHR5cGU9InNjYTpDb21wb25lbnRTZXJ2aWNlIi8+Ci0gICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJyZWZlcmVuY2UiIHR5cGU9InNjYTpDb21wb25lbnRSZWZlcmVuY2UiLz4KLSAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InByb3BlcnR5IiB0eXBlPSJzY2E6UHJvcGVydHlWYWx1ZSIvPgotICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6cmVxdWlyZXMiLz4KLSAgICAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiLz4KLSAgICAgICAgICAgICAgIDwvY2hvaWNlPgotICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImF1dG93aXJlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lTZXRzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8L2NvbXBsZXhDb250ZW50PgotICAgPC9jb21wbGV4VHlwZT4KLQotICAgPCEtLSBDb21wb25lbnQgU2VydmljZSAtLT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb21wb25lbnRTZXJ2aWNlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbnRyYWN0Ij4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICAKLSAgIDwhLS0gQ29tcG9uZW50IFJlZmVyZW5jZSAtLT4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJDb21wb25lbnRSZWZlcmVuY2UiPgotICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29udHJhY3QiPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJhdXRvd2lyZSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXQiIHR5cGU9InNjYTpsaXN0T2ZBbnlVUklzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ3aXJlZEJ5SW1wbCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgCi0gICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im11bHRpcGxpY2l0eSIgdHlwZT0ic2NhOk11bHRpcGxpY2l0eSIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiIGRlZmF1bHQ9IjEuLjEiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibm9uT3ZlcnJpZGFibGUiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIAotICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJmYWxzZSIvPgotICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8L2NvbXBsZXhDb250ZW50PgotICAgPC9jb21wbGV4VHlwZT4KLSAgIAotICAgPCEtLSBDb21wb25lbnQgVHlwZSBSZWZlcmVuY2UgLS0+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iQ29tcG9uZW50VHlwZVJlZmVyZW5jZSI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic2NhOkNvbXBvbmVudFJlZmVyZW5jZSI+Ci0gICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpkb2N1bWVudGF0aW9uIiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmludGVyZmFjZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpiaW5kaW5nIiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmNhbGxiYWNrIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiIG1pbk9jY3Vycz0iMCIgIAotICAgICAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4gICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6ZXh0ZW5zaW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjEiIC8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJOQ05hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iYXV0b3dpcmUiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0id2lyZWRCeUltcGwiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIAotICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSJmYWxzZSIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtdWx0aXBsaWNpdHkiIHR5cGU9InNjYTpNdWx0aXBsaWNpdHkiIAotICAgICAgICAgICAgICAgICAgICAgICB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSIxLi4xIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lTZXRzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICAKLQotICAgPCEtLSBJbXBsZW1lbnRhdGlvbiAtLT4KLSAgIDxlbGVtZW50IG5hbWU9ImltcGxlbWVudGF0aW9uIiB0eXBlPSJzY2E6SW1wbGVtZW50YXRpb24iIGFic3RyYWN0PSJ0cnVlIi8+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iSW1wbGVtZW50YXRpb24iIGFic3RyYWN0PSJ0cnVlIj4KLSAgICAgIDxjb21wbGV4Q29udGVudD4KLSAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgotCSAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIi8+Ci0JICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+Ci0JICAgICAgICA8L2Nob2ljZT4gICAgIAotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0KLSAgIDwhLS0gSW1wbGVtZW50YXRpb24gVHlwZSAtLT4KLSAgIDxlbGVtZW50IG5hbWU9ImltcGxlbWVudGF0aW9uVHlwZSIgdHlwZT0ic2NhOkltcGxlbWVudGF0aW9uVHlwZSIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkltcGxlbWVudGF0aW9uVHlwZSI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpDb21tb25FeHRlbnNpb25CYXNlIj4KLSAgICAgICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIiAKLSAgICAgICAgICAgICAgICAgICAgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InR5cGUiIHR5cGU9IlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImFsd2F5c1Byb3ZpZGVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJtYXlQcm92aWRlIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiAKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgotICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8L2NvbXBsZXhDb250ZW50PgotICAgPC9jb21wbGV4VHlwZT4KLQotICAgPCEtLSBXaXJlIC0tPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IldpcmUiPgotICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29tbW9uRXh0ZW5zaW9uQmFzZSI+Ci0gICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgCi0gICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzb3VyY2UiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXQiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXBsYWNlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAKLSAgICAgICAgICAgICAgIGRlZmF1bHQ9ImZhbHNlIi8+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi0gICA8IS0tIEluY2x1ZGUgLS0+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbmNsdWRlIiB0eXBlPSJzY2E6SW5jbHVkZSIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkluY2x1ZGUiPgotICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6Q29tbW9uRXh0ZW5zaW9uQmFzZSI+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9IlFOYW1lIi8+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotICAgCi0gICA8IS0tIEV4dGVuc2lvbnMgZWxlbWVudCAtLT4KLSAgIDxlbGVtZW50IG5hbWU9ImV4dGVuc2lvbnMiPgotICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAKLSAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotCi0gICA8IS0tIEludGVudHMgd2l0aGluIFdTREwgZG9jdW1lbnRzIC0tPgotICAgPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIvPgotCi0gICA8IS0tIEdsb2JhbCBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBmb3IgQGNhbGxiYWNrIHRvIG1hcmsgYSBXU0RMIHBvcnQgdHlwZSAgICAKLSAgICAgICAgYXMgaGF2aW5nIGEgY2FsbGJhY2sgaW50ZXJmYWNlIGRlZmluZWQgaW4gdGVybXMgb2YgYSBzZWNvbmQgcG9ydCAKLSAgICAgICAgdHlwZS4gLS0+Ci0gICA8YXR0cmlidXRlIG5hbWU9ImNhbGxiYWNrIiB0eXBlPSJhbnlVUkkiLz4KLSAgIAotICAgPCEtLSBWYWx1ZSB0eXBlIGRlZmluaXRpb24gZm9yIHByb3BlcnR5IHZhbHVlcyAtLT4KLSAgIDxlbGVtZW50IG5hbWU9InZhbHVlIiB0eXBlPSJzY2E6VmFsdWVUeXBlIi8+IAotICAgPGNvbXBsZXhUeXBlIG5hbWU9IlZhbHVlVHlwZSIgbWl4ZWQ9InRydWUiPgotICAgICAgPHNlcXVlbmNlPiAKLSAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI2FueSIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKLSAgICAgICAgICAgIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+IAotICAgICAgPC9zZXF1ZW5jZT4gCi0gICAgICA8IS0tIG1peGVkPSJ0cnVlIiB0byBoYW5kbGUgc2ltcGxlIHR5cGUgLS0+IAotICAgICAgPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjYW55IiBwcm9jZXNzQ29udGVudHM9ImxheCIvPiAKLSAgIDwvY29tcGxleFR5cGU+IAotICAgCi0gICA8IS0tIE1pc2NlbGxhbmVvdXMgc2ltcGxlIHR5cGUgZGVmaW5pdGlvbnMgLS0+Ci0gICA8c2ltcGxlVHlwZSBuYW1lPSJNdWx0aXBsaWNpdHkiPgotICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjAuLjEiLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iMS4uMSIvPgotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSIwLi5uIi8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IjEuLm4iLz4KLSAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICA8L3NpbXBsZVR5cGU+Ci0gICAKLSAgIDxzaW1wbGVUeXBlIG5hbWU9Ik92ZXJyaWRlT3B0aW9ucyI+Ci0gICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ibm8iLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0ibWF5Ii8+Ci0gICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9Im11c3QiLz4KLSAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICA8L3NpbXBsZVR5cGU+Ci0gICAKLSAgIDxzaW1wbGVUeXBlIG5hbWU9Imxpc3RPZlFOYW1lcyI+Ci0gICAgICA8bGlzdCBpdGVtVHlwZT0iUU5hbWUiLz4KLSAgIDwvc2ltcGxlVHlwZT4KLSAgIAotICAgPHNpbXBsZVR5cGUgbmFtZT0ibGlzdE9mQW55VVJJcyI+Ci0gICAgICA8bGlzdCBpdGVtVHlwZT0iYW55VVJJIi8+Ci0gICA8L3NpbXBsZVR5cGU+Ci0JCi0gICA8c2ltcGxlVHlwZSBuYW1lPSJDcmVhdGVSZXNvdXJjZSI+Ci0gICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iYWx3YXlzIiAvPgotICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJuZXZlciIgLz4KLSAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iaWZub3RleGlzdCIgLz4KLSAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICA8L3NpbXBsZVR5cGU+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtZGVmaW5pdGlvbnMtMS4xLWNkMDUtcmV2MS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWRlZmluaXRpb25zLTEuMS1jZDA1LXJldjEueHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjZDNjYzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWRlZmluaXRpb25zLTEuMS1jZDA1LXJldjEueHNkCkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMDEwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKyAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAgLS0+Cis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCisgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisgICAKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZCIvPgorICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1wb2xpY3ktMS4xLWNkMDMtcmV2MS54c2QiLz4KKyAgIAorICAgPCEtLSBEZWZpbml0aW9ucyAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImRlZmluaXRpb25zIiB0eXBlPSJzY2E6dERlZmluaXRpb25zIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0idERlZmluaXRpb25zIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkNvbW1vbkV4dGVuc2lvbkJhc2UiPgorICAgICAgICAgICAgPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KKyAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmludGVudCIvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6cG9saWN5U2V0Ii8+CisgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpiaW5kaW5nVHlwZSIvPgorICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6aW1wbGVtZW50YXRpb25UeXBlIi8+CisgICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTpleHRlcm5hbEF0dGFjaG1lbnQiLz4KKyAgICAgICAgICAgICAgIDxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgCisgICAgICAgICAgICAgICAgICBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICA8L2Nob2ljZT4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0idGFyZ2V0TmFtZXNwYWNlIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1kZWZpbml0aW9ucy0xLjEtY2QwNS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWRlZmluaXRpb25zLTEuMS1jZDA1LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGYyZjIwZC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWRlZmluaXRpb25zLTEuMS1jZDA1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMDkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAotICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgIAotICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LnhzZCIvPgotICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1wb2xpY3ktMS4xLWNkMDMueHNkIi8+Ci0gICAKLSAgIDwhLS0gRGVmaW5pdGlvbnMgLS0+Ci0gICA8ZWxlbWVudCBuYW1lPSJkZWZpbml0aW9ucyIgdHlwZT0ic2NhOnREZWZpbml0aW9ucyIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9InREZWZpbml0aW9ucyI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpDb21tb25FeHRlbnNpb25CYXNlIj4KLSAgICAgICAgICAgIDxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICA8ZWxlbWVudCByZWY9InNjYTppbnRlbnQiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldCIvPgotICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJzY2E6YmluZGluZ1R5cGUiLz4KLSAgICAgICAgICAgICAgIDxlbGVtZW50IHJlZj0ic2NhOmltcGxlbWVudGF0aW9uVHlwZSIvPgotICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAKLSAgICAgICAgICAgICAgICAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4KLSAgICAgICAgICAgIDwvY2hvaWNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXROYW1lc3BhY2UiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8L2NvbXBsZXhDb250ZW50PgotICAgPC9jb21wbGV4VHlwZT4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWltcGxlbWVudGF0aW9uLWMtMS4xLWNkMDQueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbXBsZW1lbnRhdGlvbi1jLTEuMS1jZDA0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU0YjMxMy4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWltcGxlbWVudGF0aW9uLWMtMS4xLWNkMDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQk8IS0tCi0JCUNvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA3LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIE9BU0lTIHRyYWRlbWFyaywKLQkJSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4KLQktLT4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLQl4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUueHNkIiAvPgotCi0JPGVsZW1lbnQgbmFtZT0iaW1wbGVtZW50YXRpb24uYyIgdHlwZT0ic2NhOkNJbXBsZW1lbnRhdGlvbiIKLQkJc3Vic3RpdHV0aW9uR3JvdXA9InNjYTppbXBsZW1lbnRhdGlvbiIgLz4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJDSW1wbGVtZW50YXRpb24iPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbXBsZW1lbnRhdGlvbiI+Ci0JCQkJPHNlcXVlbmNlPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJvcGVyYXRpb24iIHR5cGU9InNjYTpDSW1wbGVtZW50YXRpb25GdW5jdGlvbiIKLQkJCQkJCW1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotCQkJCQkJbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCQk8YXR0cmlidXRlIG5hbWU9Im1vZHVsZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0icGF0aCIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0ibGlicmFyeSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCQk8YXR0cmlidXRlIG5hbWU9ImNvbXBvbmVudFR5cGUiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCQk8YXR0cmlidXRlIG5hbWU9ImVhZ2VySW5pdCIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCQk8YXR0cmlidXRlIG5hbWU9ImluaXQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJkZXN0b3kiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJhbGxvd3NQYXNzQnlSZWZlcmVuY2UiIHR5cGU9ImJvb2xlYW4iCi0JCQkJCXVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IkNJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uIj4KLQkJPHNlcXVlbmNlPgotCQkJPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQk8ZWxlbWVudCByZWY9InNjYTpyZXF1aXJlcyIvPgotCQkJCTxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiLz4KLQkJCTwvY2hvaWNlPgotCQkJPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCi0JCQkJbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCTwvc2VxdWVuY2U+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8YXR0cmlidXRlIG5hbWU9InBvbGljeVNldHMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0iYWxsb3dzUGFzc0J5UmVmZXJlbmNlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8YXR0cmlidXRlIG5hbWU9ImluaXQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0iZGVzdG95IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+Ci0JPC9jb21wbGV4VHlwZT4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWltcGxlbWVudGF0aW9uLWMtMS4xLWNkMDUtcmV2MS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWltcGxlbWVudGF0aW9uLWMtMS4xLWNkMDUtcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzOTRiYwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW1wbGVtZW50YXRpb24tYy0xLjEtY2QwNS1yZXYxLnhzZApAQCAtMCwwICsxLDU1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCTwhLS0KKwkJQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDcsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gT0FTSVMgdHJhZGVtYXJrLAorCQlJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LgorCS0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorCXhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KKworCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZCIgLz4KKworCTxlbGVtZW50IG5hbWU9ImltcGxlbWVudGF0aW9uLmMiIHR5cGU9InNjYTpDSW1wbGVtZW50YXRpb24iCisJCXN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW1wbGVtZW50YXRpb24iIC8+CisKKwk8Y29tcGxleFR5cGUgbmFtZT0iQ0ltcGxlbWVudGF0aW9uIj4KKwkJPGNvbXBsZXhDb250ZW50PgorCQkJPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW1wbGVtZW50YXRpb24iPgorCQkJCTxzZXF1ZW5jZT4KKwkJCQkJPGVsZW1lbnQgbmFtZT0ib3BlcmF0aW9uIiB0eXBlPSJzY2E6Q0ltcGxlbWVudGF0aW9uRnVuY3Rpb24iCisJCQkJCQltaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorCQkJCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKKwkJCQkJCW1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorCQkJCTwvc2VxdWVuY2U+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJtb2R1bGUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKwkJCQk8YXR0cmlidXRlIG5hbWU9InBhdGgiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KKwkJCQk8YXR0cmlidXRlIG5hbWU9ImxpYnJhcnkiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJjb21wb25lbnRUeXBlIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJlYWdlckluaXQiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJpbml0IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAvPgorCQkJCTxhdHRyaWJ1dGUgbmFtZT0iZGVzdG95IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAvPgorCQkJCTxhdHRyaWJ1dGUgbmFtZT0iYWxsb3dzUGFzc0J5UmVmZXJlbmNlIiB0eXBlPSJib29sZWFuIgorCQkJCQl1c2U9Im9wdGlvbmFsIiAvPgorCQkJPC9leHRlbnNpb24+CisJCTwvY29tcGxleENvbnRlbnQ+CisJPC9jb21wbGV4VHlwZT4KKworCTxjb21wbGV4VHlwZSBuYW1lPSJDSW1wbGVtZW50YXRpb25GdW5jdGlvbiI+CisJCTxzZXF1ZW5jZT4KKwkJCTxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisJCQkJPGVsZW1lbnQgcmVmPSJzY2E6cmVxdWlyZXMiLz4KKwkJCQk8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+CisJCQk8L2Nob2ljZT4KKwkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgorCQkJCW1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorCQk8L3NlcXVlbmNlPgorCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgdXNlPSJvcHRpb25hbCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lTZXRzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiB1c2U9Im9wdGlvbmFsIiAvPgorCQk8YXR0cmlidXRlIG5hbWU9ImFsbG93c1Bhc3NCeVJlZmVyZW5jZSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJpbml0IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAvPgorCQk8YXR0cmlidXRlIG5hbWU9ImRlc3RveSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgLz4KKwkJPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgorCTwvY29tcGxleFR5cGU+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUtMS4xLWNkMDUtcmV2MS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS0xLjEtY2QwNS1yZXYxLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2EwZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUtMS4xLWNkMDUtcmV2MS54c2QKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCisgICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAorICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAorICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAorICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUtcmV2MS54c2QiLz4KKworICAgPCEtLSBDb21wb3NpdGUgSW1wbGVtZW50YXRpb24gLS0+CisgICA8ZWxlbWVudCBuYW1lPSJpbXBsZW1lbnRhdGlvbi5jb21wb3NpdGUiIHR5cGU9InNjYTpTQ0FJbXBsZW1lbnRhdGlvbiIgCisgICAgICAgICAgICBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmltcGxlbWVudGF0aW9uIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iU0NBSW1wbGVtZW50YXRpb24iPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW1wbGVtZW50YXRpb24iPgorICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iUU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUtMS4xLWNkMDUueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUtMS4xLWNkMDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjc4MGY5Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW1wbGVtZW50YXRpb24tY29tcG9zaXRlLTEuMS1jZDA1LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMDkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAotICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLQotICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LnhzZCIvPgotCi0gICA8IS0tIENvbXBvc2l0ZSBJbXBsZW1lbnRhdGlvbiAtLT4KLSAgIDxlbGVtZW50IG5hbWU9ImltcGxlbWVudGF0aW9uLmNvbXBvc2l0ZSIgdHlwZT0ic2NhOlNDQUltcGxlbWVudGF0aW9uIiAKLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW1wbGVtZW50YXRpb24iLz4KLSAgIDxjb21wbGV4VHlwZSBuYW1lPSJTQ0FJbXBsZW1lbnRhdGlvbiI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbXBsZW1lbnRhdGlvbiI+Ci0gICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgCi0gICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJRTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICAgPC9leHRlbnNpb24+Ci0gICAgICA8L2NvbXBsZXhDb250ZW50PgotICAgPC9jb21wbGV4VHlwZT4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWltcGxlbWVudGF0aW9uLWNwcC0xLjEtY2QwNC54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWltcGxlbWVudGF0aW9uLWNwcC0xLjEtY2QwNC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1NGNlZDQuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbXBsZW1lbnRhdGlvbi1jcHAtMS4xLWNkMDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDYsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAgLS0+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLQl4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUueHNkIiAvPgotCi0JPGVsZW1lbnQgbmFtZT0iaW1wbGVtZW50YXRpb24uY3BwIiB0eXBlPSJzY2E6Q1BQSW1wbGVtZW50YXRpb24iCi0JCXN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW1wbGVtZW50YXRpb24iIC8+Ci0JPGNvbXBsZXhUeXBlIG5hbWU9IkNQUEltcGxlbWVudGF0aW9uIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW1wbGVtZW50YXRpb24iPgotCQkJCTxzZXF1ZW5jZT4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iZnVuY3Rpb24iCi0JCQkJCQl0eXBlPSJzY2E6Q1BQSW1wbGVtZW50YXRpb25GdW5jdGlvbiIgbWluT2NjdXJzPSIwIgotCQkJCQkJbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIKLQkJCQkJCW1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCQk8YXR0cmlidXRlIG5hbWU9ImxpYnJhcnkiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCQk8YXR0cmlidXRlIG5hbWU9ImhlYWRlciIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0icGF0aCIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9Ik5hbWUiIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJjb21wb25lbnRUeXBlIiB0eXBlPSJzdHJpbmciCi0JCQkJCXVzZT0ib3B0aW9uYWwiIC8+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJzY29wZSIKLQkJCQkJdHlwZT0ic2NhOkNQUEltcGxlbWVudGF0aW9uU2NvcGUiIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJlYWdlckluaXQiIHR5cGU9ImJvb2xlYW4iCi0JCQkJCXVzZT0ib3B0aW9uYWwiIC8+Ci0JCQkJPGF0dHJpYnV0ZSBuYW1lPSJhbGxvd3NQYXNzQnlSZWZlcmVuY2UiIHR5cGU9ImJvb2xlYW4iCi0JCQkJCXVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPHNpbXBsZVR5cGUgbmFtZT0iQ1BQSW1wbGVtZW50YXRpb25TY29wZSI+Ci0JCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJzdGF0ZWxlc3MiIC8+Ci0JCQk8ZW51bWVyYXRpb24gdmFsdWU9ImNvbXBvc2l0ZSIgLz4KLQkJPC9yZXN0cmljdGlvbj4KLQk8L3NpbXBsZVR5cGU+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iQ1BQSW1wbGVtZW50YXRpb25GdW5jdGlvbiI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJPGVsZW1lbnQgcmVmPSJzY2E6cmVxdWlyZXMiLz4KLQkJCQk8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+Ci0JCQk8L2Nob2ljZT4KLQkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotCQkJCW1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQk8L3NlcXVlbmNlPgotCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lTZXRzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8YXR0cmlidXRlIG5hbWU9ImFsbG93c1Bhc3NCeVJlZmVyZW5jZSIgdHlwZT0iYm9vbGVhbiIKLQkJCXVzZT0ib3B0aW9uYWwiIC8+Ci0JCTxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KLQk8L2NvbXBsZXhUeXBlPgotCi08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW1wbGVtZW50YXRpb24tY3BwLTEuMS1jZDA1LXJldjEueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbXBsZW1lbnRhdGlvbi1jcHAtMS4xLWNkMDUtcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNmM2M4NQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW1wbGVtZW50YXRpb24tY3BwLTEuMS1jZDA1LXJldjEueHNkCkBAIC0wLDAgKzEsNjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA2LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisJdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisJeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorCisJPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LXJldjEueHNkIiAvPgorCisJPGVsZW1lbnQgbmFtZT0iaW1wbGVtZW50YXRpb24uY3BwIiB0eXBlPSJzY2E6Q1BQSW1wbGVtZW50YXRpb24iCisJCXN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW1wbGVtZW50YXRpb24iIC8+CisJPGNvbXBsZXhUeXBlIG5hbWU9IkNQUEltcGxlbWVudGF0aW9uIj4KKwkJPGNvbXBsZXhDb250ZW50PgorCQkJPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW1wbGVtZW50YXRpb24iPgorCQkJCTxzZXF1ZW5jZT4KKwkJCQkJPGVsZW1lbnQgbmFtZT0iZnVuY3Rpb24iCisJCQkJCQl0eXBlPSJzY2E6Q1BQSW1wbGVtZW50YXRpb25GdW5jdGlvbiIgbWluT2NjdXJzPSIwIgorCQkJCQkJbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CisJCQkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIKKwkJCQkJCW1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CisJCQkJPC9zZXF1ZW5jZT4KKwkJCQk8YXR0cmlidXRlIG5hbWU9ImxpYnJhcnkiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKwkJCQk8YXR0cmlidXRlIG5hbWU9ImhlYWRlciIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgorCQkJCTxhdHRyaWJ1dGUgbmFtZT0icGF0aCIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgorCQkJCTxhdHRyaWJ1dGUgbmFtZT0iY2xhc3MiIHR5cGU9Ik5hbWUiIHVzZT0ib3B0aW9uYWwiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJjb21wb25lbnRUeXBlIiB0eXBlPSJzdHJpbmciCisJCQkJCXVzZT0ib3B0aW9uYWwiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJzY29wZSIKKwkJCQkJdHlwZT0ic2NhOkNQUEltcGxlbWVudGF0aW9uU2NvcGUiIHVzZT0ib3B0aW9uYWwiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJlYWdlckluaXQiIHR5cGU9ImJvb2xlYW4iCisJCQkJCXVzZT0ib3B0aW9uYWwiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJhbGxvd3NQYXNzQnlSZWZlcmVuY2UiIHR5cGU9ImJvb2xlYW4iCisJCQkJCXVzZT0ib3B0aW9uYWwiIC8+CisJCQk8L2V4dGVuc2lvbj4KKwkJPC9jb21wbGV4Q29udGVudD4KKwk8L2NvbXBsZXhUeXBlPgorCisJPHNpbXBsZVR5cGUgbmFtZT0iQ1BQSW1wbGVtZW50YXRpb25TY29wZSI+CisJCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgorCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJzdGF0ZWxlc3MiIC8+CisJCQk8ZW51bWVyYXRpb24gdmFsdWU9ImNvbXBvc2l0ZSIgLz4KKwkJPC9yZXN0cmljdGlvbj4KKwk8L3NpbXBsZVR5cGU+CisKKwk8Y29tcGxleFR5cGUgbmFtZT0iQ1BQSW1wbGVtZW50YXRpb25GdW5jdGlvbiI+CisJCTxzZXF1ZW5jZT4KKwkJCTxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisJCQkJPGVsZW1lbnQgcmVmPSJzY2E6cmVxdWlyZXMiLz4KKwkJCQk8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+CisJCQk8L2Nob2ljZT4KKwkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgorCQkJCW1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorCQk8L3NlcXVlbmNlPgorCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgdXNlPSJvcHRpb25hbCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lTZXRzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiB1c2U9Im9wdGlvbmFsIiAvPgorCQk8YXR0cmlidXRlIG5hbWU9ImFsbG93c1Bhc3NCeVJlZmVyZW5jZSIgdHlwZT0iYm9vbGVhbiIKKwkJCXVzZT0ib3B0aW9uYWwiIC8+CisJCTxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgLz4KKwk8L2NvbXBsZXhUeXBlPgorCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW1wbGVtZW50YXRpb24tamF2YS0xLjEtY2QwMi1yZXYxLnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW1wbGVtZW50YXRpb24tamF2YS0xLjEtY2QwMi1yZXYxLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGZlMTNjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbXBsZW1lbnRhdGlvbi1qYXZhLTEuMS1jZDAyLXJldjEueHNkCkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAorICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KKzxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKKyAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKKyAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKKyAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KKyAgIAorICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LXJldjEueHNkIi8+CisKKyAgIDwhLS0gSmF2YSBJbXBsZW1lbnRhdGlvbiAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImltcGxlbWVudGF0aW9uLmphdmEiIHR5cGU9InNjYTpKYXZhSW1wbGVtZW50YXRpb24iIAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTppbXBsZW1lbnRhdGlvbiIvPgorICAgPGNvbXBsZXhUeXBlIG5hbWU9IkphdmFJbXBsZW1lbnRhdGlvbiI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbXBsZW1lbnRhdGlvbiI+CisgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgCisgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCis8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWltcGxlbWVudGF0aW9uLWphdmEtMS4xLWNkMDIueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbXBsZW1lbnRhdGlvbi1qYXZhLTEuMS1jZDAyLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg1NmE1MS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWltcGxlbWVudGF0aW9uLWphdmEtMS4xLWNkMDIueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCi0gICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAotICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgCi0gICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUueHNkIi8+Ci0KLSAgIDwhLS0gSmF2YSBJbXBsZW1lbnRhdGlvbiAtLT4KLSAgIDxlbGVtZW50IG5hbWU9ImltcGxlbWVudGF0aW9uLmphdmEiIHR5cGU9InNjYTpKYXZhSW1wbGVtZW50YXRpb24iIAotICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTppbXBsZW1lbnRhdGlvbiIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IkphdmFJbXBsZW1lbnRhdGlvbiI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbXBsZW1lbnRhdGlvbiI+Ci0gICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgCi0gICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+Ci0gICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgICA8L2V4dGVuc2lvbj4KLSAgICAgIDwvY29tcGxleENvbnRlbnQ+Ci0gICA8L2NvbXBsZXhUeXBlPgotCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWludGVyZmFjZS1jLTEuMS1jZDA0LnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW50ZXJmYWNlLWMtMS4xLWNkMDQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MThmMDc0Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW50ZXJmYWNlLWMtMS4xLWNkMDQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQk8IS0tCi0JCUNvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA3LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIE9BU0lTIHRyYWRlbWFyaywKLQkJSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4KLQktLT4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLQl4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLQllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+Ci0KLQk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUueHNkIiAvPgotCi0JPGVsZW1lbnQgbmFtZT0iaW50ZXJmYWNlLmMiIHR5cGU9InNjYTpDSW50ZXJmYWNlIgotCQlzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmludGVyZmFjZSIgLz4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJDSW50ZXJmYWNlIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW50ZXJmYWNlIj4KLQkJCQk8c2VxdWVuY2U+Ci0JCQkJCTxlbGVtZW50IG5hbWU9ImZ1bmN0aW9uIiB0eXBlPSJzY2E6Q0Z1bmN0aW9uIiBtaW5PY2N1cnM9IjAiCi0JCQkJCQltYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iY2FsbGJhY2tGdW5jdGlvbiIgdHlwZT0ic2NhOkNGdW5jdGlvbiIKLQkJCQkJCW1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgotCQkJCQkJbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPC9zZXF1ZW5jZT4KLQkJCQk8YXR0cmlidXRlIG5hbWU9ImhlYWRlciIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJCTxhdHRyaWJ1dGUgbmFtZT0iY2FsbGJhY2tIZWFkZXIiIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iQ0Z1bmN0aW9uIj4KLQkJPHNlcXVlbmNlPgotCQkJPGNob2ljZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQk8ZWxlbWVudCByZWY9InNjYTpyZXF1aXJlcyIvPgotCQkJCTxlbGVtZW50IHJlZj0ic2NhOnBvbGljeVNldEF0dGFjaG1lbnQiLz4KLQkJCTwvY2hvaWNlPgotCQkJPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCi0JCQkJbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCTwvc2VxdWVuY2U+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8YXR0cmlidXRlIG5hbWU9InJlcXVpcmVzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8YXR0cmlidXRlIG5hbWU9InBvbGljeVNldHMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0ib25lV2F5IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8YXR0cmlidXRlIG5hbWU9ImV4Y2x1ZGUiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0iaW5wdXQiIHR5cGU9Ik5DTmFtZSIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPGF0dHJpYnV0ZSBuYW1lPSJvdXRwdXQiIHR5cGU9Ik5DTmFtZSIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiAvPgotCTwvY29tcGxleFR5cGU+Ci0KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbnRlcmZhY2UtYy0xLjEtY2QwNS1yZXYxLnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW50ZXJmYWNlLWMtMS4xLWNkMDUtcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRjYTk0YQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW50ZXJmYWNlLWMtMS4xLWNkMDUtcmV2MS54c2QKQEAgLTAsMCArMSw1MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKwk8IS0tCisJCUNvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA3LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIE9BU0lTIHRyYWRlbWFyaywKKwkJSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4KKwktLT4KKzxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKwl4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKwllbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisKKwk8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUtcmV2MS54c2QiIC8+CisKKwk8ZWxlbWVudCBuYW1lPSJpbnRlcmZhY2UuYyIgdHlwZT0ic2NhOkNJbnRlcmZhY2UiCisJCXN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW50ZXJmYWNlIiAvPgorCisJPGNvbXBsZXhUeXBlIG5hbWU9IkNJbnRlcmZhY2UiPgorCQk8Y29tcGxleENvbnRlbnQ+CisJCQk8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbnRlcmZhY2UiPgorCQkJCTxzZXF1ZW5jZT4KKwkJCQkJPGVsZW1lbnQgbmFtZT0iZnVuY3Rpb24iIHR5cGU9InNjYTpDRnVuY3Rpb24iIG1pbk9jY3Vycz0iMCIKKwkJCQkJCW1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorCQkJCQk8ZWxlbWVudCBuYW1lPSJjYWxsYmFja0Z1bmN0aW9uIiB0eXBlPSJzY2E6Q0Z1bmN0aW9uIgorCQkJCQkJbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKwkJCQkJPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCisJCQkJCQltYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKwkJCQk8L3NlcXVlbmNlPgorCQkJCTxhdHRyaWJ1dGUgbmFtZT0iaGVhZGVyIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJjYWxsYmFja0hlYWRlciIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgorCQkJPC9leHRlbnNpb24+CisJCTwvY29tcGxleENvbnRlbnQ+CisJPC9jb21wbGV4VHlwZT4KKworCTxjb21wbGV4VHlwZSBuYW1lPSJDRnVuY3Rpb24iPgorCQk8c2VxdWVuY2U+CisJCQk8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgorCQkJCTxlbGVtZW50IHJlZj0ic2NhOnJlcXVpcmVzIi8+CisJCQkJPGVsZW1lbnQgcmVmPSJzY2E6cG9saWN5U2V0QXR0YWNobWVudCIvPgorCQkJPC9jaG9pY2U+CisJCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKKwkJCQltYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKwkJPC9zZXF1ZW5jZT4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJOQ05hbWUiIHVzZT0icmVxdWlyZWQiIC8+CisJCTxhdHRyaWJ1dGUgbmFtZT0icmVxdWlyZXMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIHVzZT0ib3B0aW9uYWwiIC8+CisJCTxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgdXNlPSJvcHRpb25hbCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJvbmVXYXkiIHR5cGU9ImJvb2xlYW4iIHVzZT0ib3B0aW9uYWwiIC8+CisJCTxhdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJpbnB1dCIgdHlwZT0iTkNOYW1lIiB1c2U9Im9wdGlvbmFsIiAvPgorCQk8YXR0cmlidXRlIG5hbWU9Im91dHB1dCIgdHlwZT0iTkNOYW1lIiB1c2U9Im9wdGlvbmFsIiAvPgorCQk8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+CisJPC9jb21wbGV4VHlwZT4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWludGVyZmFjZS1jcHAtMS4xLWNkMDUtcmV2MS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWludGVyZmFjZS1jcHAtMS4xLWNkMDUtcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRlZTI1YgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW50ZXJmYWNlLWNwcC0xLjEtY2QwNS1yZXYxLnhzZApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorCTwhLS0KKwkJQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDYsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gT0FTSVMgdHJhZGVtYXJrLAorCQlJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LgorCS0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorCXhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorCWVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KKworCTxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZCIgLz4KKworCTxlbGVtZW50IG5hbWU9ImludGVyZmFjZS5jcHAiIHR5cGU9InNjYTpDUFBJbnRlcmZhY2UiCisJCXN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW50ZXJmYWNlIiAvPgorCisJPGNvbXBsZXhUeXBlIG5hbWU9IkNQUEludGVyZmFjZSI+CisJCTxjb21wbGV4Q29udGVudD4KKwkJCTxleHRlbnNpb24gYmFzZT0ic2NhOkludGVyZmFjZSI+CisJCQkJPHNlcXVlbmNlPgorCQkJCQk8ZWxlbWVudCBuYW1lPSJmdW5jdGlvbiIgdHlwZT0ic2NhOkNQUEZ1bmN0aW9uIiBtaW5PY2N1cnM9IjAiCisJCQkJCQltYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKwkJCQkJPGVsZW1lbnQgbmFtZT0iY2FsbGJhY2tGdW5jdGlvbiIgdHlwZT0ic2NhOkNQUEZ1bmN0aW9uIgorCQkJCQkJbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKwkJCQkJPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiCisJCQkJCQltYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KKwkJCQk8L3NlcXVlbmNlPgorCQkJCTxhdHRyaWJ1dGUgbmFtZT0iaGVhZGVyIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0iTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKwkJCQk8YXR0cmlidXRlIG5hbWU9ImNhbGxiYWNrSGVhZGVyIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+CisJCQkJPGF0dHJpYnV0ZSBuYW1lPSJjYWxsYmFja0NsYXNzIiB0eXBlPSJOYW1lIiB1c2U9Im9wdGlvbmFsIiAvPgorCQkJPC9leHRlbnNpb24+CisJCTwvY29tcGxleENvbnRlbnQ+CisJPC9jb21wbGV4VHlwZT4KKworCTxjb21wbGV4VHlwZSBuYW1lPSJDUFBGdW5jdGlvbiI+CisJCTxzZXF1ZW5jZT4KKwkJCTxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisJCQkJPGVsZW1lbnQgcmVmPSJzY2E6cmVxdWlyZXMiLz4KKwkJCQk8ZWxlbWVudCByZWY9InNjYTpwb2xpY3lTZXRBdHRhY2htZW50Ii8+CisJCQk8L2Nob2ljZT4KKwkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIgbWluT2NjdXJzPSIwIgorCQkJCW1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgorCQk8L3NlcXVlbmNlPgorCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJyZXF1aXJlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgdXNlPSJvcHRpb25hbCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJwb2xpY3lTZXRzIiB0eXBlPSJzY2E6bGlzdE9mUU5hbWVzIiB1c2U9Im9wdGlvbmFsIiAvPgorCQk8YXR0cmlidXRlIG5hbWU9Im9uZVdheSIgdHlwZT0iYm9vbGVhbiIgdXNlPSJvcHRpb25hbCIgLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJleGNsdWRlIiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAvPgorCQk8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIC8+CisJPC9jb21wbGV4VHlwZT4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWludGVyZmFjZS1qYXZhLTEuMS1jZDA0LXJldjEueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbnRlcmZhY2UtamF2YS0xLjEtY2QwNC1yZXYxLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGNmNzlhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbnRlcmZhY2UtamF2YS0xLjEtY2QwNC1yZXYxLnhzZApAQCAtMCwwICsxLDI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLSBDb3B5cmlnaHQoQykgT0FTSVMoUikgMjAwNSwyMDEwLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAKKyAgICAgT0FTSVMgdHJhZGVtYXJrLCBJUFIgYW5kIG90aGVyIHBvbGljaWVzIGFwcGx5LiAgLS0+Cis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgCisgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisgICAKKyAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29yZS0xLjEtY2QwNS1yZXYxLnhzZCIvPgorICAgCisgICA8IS0tIEphdmEgSW50ZXJmYWNlIC0tPgorICAgPGVsZW1lbnQgbmFtZT0iaW50ZXJmYWNlLmphdmEiIHR5cGU9InNjYTpKYXZhSW50ZXJmYWNlIiAKKyAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW50ZXJmYWNlIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iSmF2YUludGVyZmFjZSI+CisgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbnRlcmZhY2UiPgorICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAorICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJOQ05hbWUiIHVzZT0icmVxdWlyZWQiLz4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2FsbGJhY2tJbnRlcmZhY2UiIHR5cGU9Ik5DTmFtZSIgCisgICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisgICAKKzwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbnRlcmZhY2UtamF2YS0xLjEtY2QwNC54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWludGVyZmFjZS1qYXZhLTEuMS1jZDA0LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3OGUxMy4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWludGVyZmFjZS1qYXZhLTEuMS1jZDA0LnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAotICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKLSAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgIAotICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LnhzZCIvPgotICAgCi0gICA8IS0tIEphdmEgSW50ZXJmYWNlIC0tPgotICAgPGVsZW1lbnQgbmFtZT0iaW50ZXJmYWNlLmphdmEiIHR5cGU9InNjYTpKYXZhSW50ZXJmYWNlIiAKLSAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW50ZXJmYWNlIi8+Ci0gICA8Y29tcGxleFR5cGUgbmFtZT0iSmF2YUludGVyZmFjZSI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbnRlcmZhY2UiPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJOQ05hbWUiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2FsbGJhY2tJbnRlcmZhY2UiIHR5cGU9Ik5DTmFtZSIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICAKLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1pbnRlcmZhY2Utd3NkbC0xLjEtY2QwNS1yZXYxLnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW50ZXJmYWNlLXdzZGwtMS4xLWNkMDUtcmV2MS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyYzBhNgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW50ZXJmYWNlLXdzZGwtMS4xLWNkMDUtcmV2MS54c2QKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAxMC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCisgICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAorICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAorICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAorICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorICAgCisgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUtcmV2MS54c2QiLz4KKyAgIAorICAgPCEtLSBXU0RMIEludGVyZmFjZSAtLT4KKyAgIDxlbGVtZW50IG5hbWU9ImludGVyZmFjZS53c2RsIiB0eXBlPSJzY2E6V1NETFBvcnRUeXBlIiAKKyAgICAgICAgICAgIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6aW50ZXJmYWNlIi8+CisgICA8Y29tcGxleFR5cGUgbmFtZT0iV1NETFBvcnRUeXBlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkludGVyZmFjZSI+CisgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICA8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIgCisgICAgICAgICAgICAgICAgICAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+CisgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJpbnRlcmZhY2UiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjYWxsYmFja0ludGVyZmFjZSIgdHlwZT0iYW55VVJJIiAKKyAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJvcHRpb25hbCIvPgorICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICA8L2NvbXBsZXhDb250ZW50PgorICAgPC9jb21wbGV4VHlwZT4KKyAgIAorPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLWludGVyZmFjZS13c2RsLTEuMS1jZDA1LnhzZCBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW50ZXJmYWNlLXdzZGwtMS4xLWNkMDUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDM1MTBiLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy9zY2EtaW50ZXJmYWNlLXdzZGwtMS4xLWNkMDUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0gQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMDUsMjAwOS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCi0gICAgIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gIC0tPgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIAotICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAotICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAotICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgCi0gICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0ic2NhLWNvcmUtMS4xLWNkMDUueHNkIi8+Ci0gICAKLSAgIDwhLS0gV1NETCBJbnRlcmZhY2UgLS0+Ci0gICA8ZWxlbWVudCBuYW1lPSJpbnRlcmZhY2Uud3NkbCIgdHlwZT0ic2NhOldTRExQb3J0VHlwZSIgCi0gICAgICAgICAgICBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmludGVyZmFjZSIvPgotICAgPGNvbXBsZXhUeXBlIG5hbWU9IldTRExQb3J0VHlwZSI+Ci0gICAgICA8Y29tcGxleENvbnRlbnQ+Ci0gICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbnRlcmZhY2UiPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4IiBtaW5PY2N1cnM9IjAiIAotICAgICAgICAgICAgICAgICAgICBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iaW50ZXJmYWNlIiB0eXBlPSJhbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iY2FsbGJhY2tJbnRlcmZhY2UiIHR5cGU9ImFueVVSSSIgCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0ib3B0aW9uYWwiLz4KLSAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgIDwvY29tcGxleFR5cGU+Ci0gICAKLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1wb2xpY3ktMS4xLWNkMDMtcmV2MS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLXBvbGljeS0xLjEtY2QwMy1yZXYxLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGU3MzhjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1wb2xpY3ktMS4xLWNkMDMtcmV2MS54c2QKQEAgLTAsMCArMSwxMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAorICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KKzxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorCXhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorCXhtbG5zOndzcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNC8wOS9wb2xpY3kiCisJZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorCisJPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA2LnhzZCIvPgkKKwk8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvbnMvd3MtcG9saWN5IgorCQlzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwNy8wMi93cy1wb2xpY3kueHNkIi8+CisKKwk8ZWxlbWVudCBuYW1lPSJpbnRlbnQiIHR5cGU9InNjYTpJbnRlbnQiLz4KKwk8Y29tcGxleFR5cGUgbmFtZT0iSW50ZW50Ij4KKwkJPHNlcXVlbmNlPgorCQkJPGVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIgorCQkJICAgbWF4T2NjdXJzPSIxIiAvPgorCQkJPGVsZW1lbnQgbmFtZT0icXVhbGlmaWVyIiB0eXBlPSJzY2E6SW50ZW50UXVhbGlmaWVyIiAKKwkJCSAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+CisJCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIAorCQkJICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgorCQk8L3NlcXVlbmNlPgorCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgorCQk8YXR0cmlidXRlIG5hbWU9ImNvbnN0cmFpbnMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAorCQkgICB1c2U9Im9wdGlvbmFsIi8+CisJCTxhdHRyaWJ1dGUgbmFtZT0icmVxdWlyZXMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAorCQkgICB1c2U9Im9wdGlvbmFsIi8+CisJCTxhdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZXMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAorCQkgICB1c2U9Im9wdGlvbmFsIi8+CisJCTxhdHRyaWJ1dGUgbmFtZT0ibXV0dWFsbHlFeGNsdXNpdmUiIHR5cGU9ImJvb2xlYW4iIAorCQkgICB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSIvPgorCQk8YXR0cmlidXRlIG5hbWU9ImludGVudFR5cGUiIAorCQkJdHlwZT0ic2NhOkludGVyYWN0aW9uT3JJbXBsZW1lbnRhdGlvbiIgCisJCQl1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJpbnRlcmFjdGlvbiIvPgorCQk8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKwk8L2NvbXBsZXhUeXBlPgorCisJPGNvbXBsZXhUeXBlIG5hbWU9IkludGVudFF1YWxpZmllciI+CisJCTxzZXF1ZW5jZT4KKwkJCTxlbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIgCisJCQkgICBtYXhPY2N1cnM9IjEiIC8+CisJCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKKwkJCSAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAorCQk8L3NlcXVlbmNlPgorICAJCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+CisgIAkJPGF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAKKyAgCQkgICBkZWZhdWx0PSJmYWxzZSIvPgorCTwvY29tcGxleFR5cGU+CisKKwk8ZWxlbWVudCBuYW1lPSJyZXF1aXJlcyI+IAorCQk8Y29tcGxleFR5cGU+CisJCQk8c2VxdWVuY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisJCQkJPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CisJCQk8L3NlcXVlbmNlPgkJCisJCQk8YXR0cmlidXRlIG5hbWU9ImludGVudHMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIHVzZT0icmVxdWlyZWQiLz4KKwkJCTxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgorCQk8L2NvbXBsZXhUeXBlPgorCTwvZWxlbWVudD4KKworCTxlbGVtZW50IG5hbWU9ImV4dGVybmFsQXR0YWNobWVudCI+CisJCTxjb21wbGV4VHlwZT4KKwkJCTxzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KKwkJCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKwkJCTwvc2VxdWVuY2U+CisJCQk8YXR0cmlidXRlIG5hbWU9ImludGVudHMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIHVzZT0ib3B0aW9uYWwiLz4KKwkJCTxhdHRyaWJ1dGUgbmFtZT0icG9saWN5U2V0cyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIgdXNlPSJvcHRpb25hbCIvPgkKKwkJCTxhdHRyaWJ1dGUgbmFtZT0iYXR0YWNoVG8iIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgorCQkJPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CisJCTwvY29tcGxleFR5cGU+CisJPC9lbGVtZW50PgorCisJPGVsZW1lbnQgbmFtZT0icG9saWN5U2V0IiB0eXBlPSJzY2E6UG9saWN5U2V0Ii8+CisJPGNvbXBsZXhUeXBlIG5hbWU9IlBvbGljeVNldCI+CisJCTxjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisgIAkJCTxlbGVtZW50IG5hbWU9InBvbGljeVNldFJlZmVyZW5jZSIgCisgIAkJCSAgIHR5cGU9InNjYTpQb2xpY3lTZXRSZWZlcmVuY2UiLz4KKyAgCQkJPGVsZW1lbnQgbmFtZT0iaW50ZW50TWFwIiB0eXBlPSJzY2E6SW50ZW50TWFwIi8+CisgIAkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgorCQk8L2Nob2ljZT4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJOQ05hbWUiIHVzZT0icmVxdWlyZWQiLz4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJwcm92aWRlcyIgdHlwZT0ic2NhOmxpc3RPZlFOYW1lcyIvPgorCQk8YXR0cmlidXRlIG5hbWU9ImFwcGxpZXNUbyIgdHlwZT0ic3RyaW5nIiB1c2U9Im9wdGlvbmFsIi8+CisJCTxhdHRyaWJ1dGUgbmFtZT0iYXR0YWNoVG8iIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgorCQk8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKwk8L2NvbXBsZXhUeXBlPgorCisJPGVsZW1lbnQgbmFtZT0icG9saWN5U2V0QXR0YWNobWVudCI+CisJCTxjb21wbGV4VHlwZT4KKwkJCTxzZXF1ZW5jZSBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KKwkJCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKwkJCTwvc2VxdWVuY2U+CisJCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9IlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+CisJCQk8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKwkJPC9jb21wbGV4VHlwZT4KKwk8L2VsZW1lbnQ+CisKKwk8Y29tcGxleFR5cGUgbmFtZT0iUG9saWN5U2V0UmVmZXJlbmNlIj4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJRTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgorCQk8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKwk8L2NvbXBsZXhUeXBlPgorCisJPGNvbXBsZXhUeXBlIG5hbWU9IkludGVudE1hcCI+CisJCTxjaG9pY2UgbWluT2NjdXJzPSIxIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisJCQk8ZWxlbWVudCBuYW1lPSJxdWFsaWZpZXIiIHR5cGU9InNjYTpRdWFsaWZpZXIiLz4KKwkJCTxhbnkgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgorCQk8L2Nob2ljZT4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJwcm92aWRlcyIgdHlwZT0iUU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KKwkJPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CisJPC9jb21wbGV4VHlwZT4KKworCTxjb21wbGV4VHlwZSBuYW1lPSJRdWFsaWZpZXIiPgorCQk8c2VxdWVuY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+CisJCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KKwkJPC9zZXF1ZW5jZT4KKwkJPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciIHVzZT0icmVxdWlyZWQiLz4KKwkJPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+CisJPC9jb21wbGV4VHlwZT4KKworCTxzaW1wbGVUeXBlIG5hbWU9Imxpc3RPZk5DTmFtZXMiPgorCQk8bGlzdCBpdGVtVHlwZT0iTkNOYW1lIi8+CisJPC9zaW1wbGVUeXBlPgorCisJPHNpbXBsZVR5cGUgbmFtZT0iSW50ZXJhY3Rpb25PckltcGxlbWVudGF0aW9uIj4KKwkJPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+CisJCQk8ZW51bWVyYXRpb24gdmFsdWU9ImludGVyYWN0aW9uIi8+CisJCQk8ZW51bWVyYXRpb24gdmFsdWU9ImltcGxlbWVudGF0aW9uIi8+CisJCTwvcmVzdHJpY3Rpb24+CisJPC9zaW1wbGVUeXBlPgorCis8L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLXBvbGljeS0xLjEtY2QwMy54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhLXBvbGljeS0xLjEtY2QwMy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNjkzMDQuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3NjYS1wb2xpY3ktMS4xLWNkMDMueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tIENvcHlyaWdodChDKSBPQVNJUyhSKSAyMDA1LDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIAotICAgICBPQVNJUyB0cmFkZW1hcmssIElQUiBhbmQgb3RoZXIgcG9saWNpZXMgYXBwbHkuICAtLT4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgotCXhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgotCXhtbG5zOndzcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3MvMjAwNC8wOS9wb2xpY3kiCi0JZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0JPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InNjYS1jb3JlLTEuMS1jZDA1LnhzZCIvPgkKLQk8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvbnMvd3MtcG9saWN5IgotCQlzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwNy8wMi93cy1wb2xpY3kueHNkIi8+Ci0KLQk8ZWxlbWVudCBuYW1lPSJpbnRlbnQiIHR5cGU9InNjYTpJbnRlbnQiLz4KLQk8Y29tcGxleFR5cGUgbmFtZT0iSW50ZW50Ij4KLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0iZGVzY3JpcHRpb24iIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIgotCQkJICAgbWF4T2NjdXJzPSIxIiAvPgotCQkJPGVsZW1lbnQgbmFtZT0icXVhbGlmaWVyIiB0eXBlPSJzY2E6SW50ZW50UXVhbGlmaWVyIiAKLQkJCSAgIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIAotCQkJICAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIvPgotCQk8L3NlcXVlbmNlPgotCQk8YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9Ik5DTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotCQk8YXR0cmlidXRlIG5hbWU9ImNvbnN0cmFpbnMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAotCQkgICB1c2U9Im9wdGlvbmFsIi8+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0icmVxdWlyZXMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAotCQkgICB1c2U9Im9wdGlvbmFsIi8+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0iZXhjbHVkZXMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIAotCQkgICB1c2U9Im9wdGlvbmFsIi8+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0ibXV0dWFsbHlFeGNsdXNpdmUiIHR5cGU9ImJvb2xlYW4iIAotCQkgICB1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJmYWxzZSIvPgotCQk8YXR0cmlidXRlIG5hbWU9ImludGVudFR5cGUiIAotCQkJdHlwZT0ic2NhOkludGVyYWN0aW9uT3JJbXBsZW1lbnRhdGlvbiIgCi0JCQl1c2U9Im9wdGlvbmFsIiBkZWZhdWx0PSJpbnRlcmFjdGlvbiIvPgotCQk8YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IkludGVudFF1YWxpZmllciI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxlbGVtZW50IG5hbWU9ImRlc2NyaXB0aW9uIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIgCi0JCQkgICBtYXhPY2N1cnM9IjEiIC8+Ci0JCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiIG1pbk9jY3Vycz0iMCIKLQkJCSAgIG1heE9jY3Vycz0idW5ib3VuZGVkIi8+IAotCQk8L3NlcXVlbmNlPgotICAJCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0gIAkJPGF0dHJpYnV0ZSBuYW1lPSJkZWZhdWx0IiB0eXBlPSJib29sZWFuIiB1c2U9Im9wdGlvbmFsIiAKLSAgCQkgICBkZWZhdWx0PSJmYWxzZSIvPgotCTwvY29tcGxleFR5cGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJyZXF1aXJlcyI+IAotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0JCQk8L3NlcXVlbmNlPgkJCi0JCQk8YXR0cmlidXRlIG5hbWU9ImludGVudHMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiIHVzZT0icmVxdWlyZWQiLz4KLQkJCTxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQotCTxlbGVtZW50IG5hbWU9InBvbGljeVNldCIgdHlwZT0ic2NhOlBvbGljeVNldCIvPgotCTxjb21wbGV4VHlwZSBuYW1lPSJQb2xpY3lTZXQiPgotCQk8Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAJCQk8ZWxlbWVudCBuYW1lPSJwb2xpY3lTZXRSZWZlcmVuY2UiIAotICAJCQkgICB0eXBlPSJzY2E6UG9saWN5U2V0UmVmZXJlbmNlIi8+Ci0gIAkJCTxlbGVtZW50IG5hbWU9ImludGVudE1hcCIgdHlwZT0ic2NhOkludGVudE1hcCIvPgotICAJCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLQkJPC9jaG9pY2U+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iTkNOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0icHJvdmlkZXMiIHR5cGU9InNjYTpsaXN0T2ZRTmFtZXMiLz4KLQkJPGF0dHJpYnV0ZSBuYW1lPSJhcHBsaWVzVG8iIHR5cGU9InN0cmluZyIgdXNlPSJvcHRpb25hbCIvPgotCQk8YXR0cmlidXRlIG5hbWU9ImF0dGFjaFRvIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KLQkJPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxlbGVtZW50IG5hbWU9InBvbGljeVNldEF0dGFjaG1lbnQiPgotCQk8Y29tcGxleFR5cGU+Ci0JCQk8c2VxdWVuY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0JCQk8L3NlcXVlbmNlPgotCQkJPGF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJRTmFtZSIgdXNlPSJyZXF1aXJlZCIvPgotCQkJPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IlBvbGljeVNldFJlZmVyZW5jZSI+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0iUU5hbWUiIHVzZT0icmVxdWlyZWQiLz4KLQkJPGFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0JPC9jb21wbGV4VHlwZT4KLQotCTxjb21wbGV4VHlwZSBuYW1lPSJJbnRlbnRNYXAiPgotCQk8Y2hvaWNlIG1pbk9jY3Vycz0iMSIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJPGVsZW1lbnQgbmFtZT0icXVhbGlmaWVyIiB0eXBlPSJzY2E6UXVhbGlmaWVyIi8+Ci0JCQk8YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLQkJPC9jaG9pY2U+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0icHJvdmlkZXMiIHR5cGU9IlFOYW1lIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotCTwvY29tcGxleFR5cGU+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iUXVhbGlmaWVyIj4KLQkJPHNlcXVlbmNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJPGFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0JCTwvc2VxdWVuY2U+Ci0JCTxhdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+Ci0JCTxhbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotCTwvY29tcGxleFR5cGU+Ci0KLQk8c2ltcGxlVHlwZSBuYW1lPSJsaXN0T2ZOQ05hbWVzIj4KLQkJPGxpc3QgaXRlbVR5cGU9Ik5DTmFtZSIvPgotCTwvc2ltcGxlVHlwZT4KLQotCTxzaW1wbGVUeXBlIG5hbWU9IkludGVyYWN0aW9uT3JJbXBsZW1lbnRhdGlvbiI+Ci0JCTxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJpbnRlcmFjdGlvbiIvPgotCQkJPGVudW1lcmF0aW9uIHZhbHVlPSJpbXBsZW1lbnRhdGlvbiIvPgotCQk8L3Jlc3RyaWN0aW9uPgotCTwvc2ltcGxlVHlwZT4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3R1c2Nhbnktc2NhLTEuMS1iaW5kaW5nLWh0dHAueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3R1c2Nhbnktc2NhLTEuMS1iaW5kaW5nLWh0dHAueHNkCmluZGV4IDY3ZmViNTQuLjIxMmM4YWJlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvdHVzY2FueS1zY2EtMS4xLWJpbmRpbmctaHR0cC54c2QKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3R1c2Nhbnktc2NhLTEuMS1iaW5kaW5nLWh0dHAueHNkCkBAIC0zOCw0ICszOCwzMiBAQAogICAgICAgICAgICAgPC9leHRlbnNpb24+CiAgICAgICAgIDwvY29tcGxleENvbnRlbnQ+CiAgICAgPC9jb21wbGV4VHlwZT4KKworICAgPGNvbXBsZXhUeXBlIG5hbWU9IkhUVFBEZWZhdWx0V2lyZUZvcm1hdFR5cGUiPgorICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6V2lyZUZvcm1hdFR5cGUiLz4KKyAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICA8L2NvbXBsZXhUeXBlPgorCisgICA8Y29tcGxleFR5cGUgbmFtZT0iSFRUUFhNTFdpcmVGb3JtYXRUeXBlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOldpcmVGb3JtYXRUeXBlIi8+CisgICAgICA8L2NvbXBsZXhDb250ZW50PgorICAgPC9jb21wbGV4VHlwZT4KKworICAgPGNvbXBsZXhUeXBlIG5hbWU9IkhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3JUeXBlIj4KKyAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOk9wZXJhdGlvblNlbGVjdG9yVHlwZSIvPgorICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgIDwvY29tcGxleFR5cGU+CisKKyAgIDxlbGVtZW50IG5hbWU9IndpcmVGb3JtYXQuaHR0cERlZmF1bHQiIHR5cGU9InQ6SFRUUERlZmF1bHRXaXJlRm9ybWF0VHlwZSIgCisgICAgICAgICAgICBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOndpcmVGb3JtYXQiLz4KKworICAgPGVsZW1lbnQgbmFtZT0id2lyZUZvcm1hdC5odHRwWG1sIiB0eXBlPSJ0OkhUVFBYTUxXaXJlRm9ybWF0VHlwZSIgCisgICAgICAgICAgICBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOndpcmVGb3JtYXQiLz4KKworICAgPGVsZW1lbnQgbmFtZT0ib3BlcmF0aW9uU2VsZWN0b3IuaHR0cERlZmF1bHQiIHR5cGU9InQ6SFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3RvclR5cGUiIAorICAgICAgICAgICAgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpvcGVyYXRpb25TZWxlY3RvciIvPgorCiA8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy90dXNjYW55LXNjYS0xLjEtYmluZGluZy1qbXMueHNkIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3R1c2Nhbnktc2NhLTEuMS1iaW5kaW5nLWptcy54c2QKaW5kZXggMjAwZjNlNS4uZTk5YzA4NiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3R1c2Nhbnktc2NhLTEuMS1iaW5kaW5nLWptcy54c2QKKysrIGIvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3R1c2Nhbnktc2NhLTEuMS1iaW5kaW5nLWptcy54c2QKQEAgLTIzLDkgKzIzLDkgQEAKICAgICB4bWxuczp0PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiIAogICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KIAotICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgc2NoZW1hTG9jYXRpb249InNjYS1iaW5kaW5nLWptcy0xLjEtY2QwNC54c2QiLz4KKyAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIHNjaGVtYUxvY2F0aW9uPSJzY2EtYmluZGluZy1qbXMtMS4xLWNkMDQtcmV2MS54c2QiLz4KICAgIAotICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgIHNjaGVtYUxvY2F0aW9uPSJzY2EtMS4xLWNkMDUueHNkIi8+CisgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAgc2NoZW1hTG9jYXRpb249InNjYS0xLjEtY2QwNS1yZXYxLnhzZCIvPgogICAgICAgICAKICAgIDwhLS0gIHdpcmUgZm9ybWF0cyAtLT4KICAgIDwhLS0gLS0+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvdHVzY2FueS1zY2EtMS4xLWNvbnRyaWJ1dGlvbi1yZXNvdXJjZS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvdHVzY2FueS1zY2EtMS4xLWNvbnRyaWJ1dGlvbi1yZXNvdXJjZS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk2NDU3MgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkteHNkL3NyYy9tYWluL3Jlc291cmNlcy90dXNjYW55LXNjYS0xLjEtY29udHJpYnV0aW9uLXJlc291cmNlLnhzZApAQCAtMCwwICsxLDQ2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCisgICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisgICAgeG1sbnM6dD0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIgorICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KKworICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIHNjaGVtYUxvY2F0aW9uPSJzY2EtY29udHJpYnV0aW9uLTEuMS1jZDA1LXJldjEueHNkIi8+CisKKyAgICA8ZWxlbWVudCBuYW1lPSJpbXBvcnQucmVzb3VyY2UiIHR5cGU9InQ6SW1wb3J0UmVzb3VyY2VUeXBlIiBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmltcG9ydEJhc2UiLz4KKyAgICA8Y29tcGxleFR5cGUgbmFtZT0iSW1wb3J0UmVzb3VyY2VUeXBlIj4KKyAgICAgICAgPGNvbXBsZXhDb250ZW50PgorICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6SW1wb3J0Ij4KKyAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0iYW55VVJJIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgICA8L2NvbXBsZXhUeXBlPgorCisgICAgPGVsZW1lbnQgbmFtZT0iZXhwb3J0LnJlc291cmNlIiB0eXBlPSJ0OkV4cG9ydFJlc291cmNlVHlwZSIgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpleHBvcnRCYXNlIi8+CisgICAgPGNvbXBsZXhUeXBlIG5hbWU9IkV4cG9ydFJlc291cmNlVHlwZSI+CisgICAgICAgIDxjb21wbGV4Q29udGVudD4KKyAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic2NhOkV4cG9ydCI+CisgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9ImFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICAgPC9jb21wbGV4VHlwZT4KKworPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS14c2Qvc3JjL21haW4vcmVzb3VyY2VzL3R1c2Nhbnktc2NhLTEuMS54c2QgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvdHVzY2FueS1zY2EtMS4xLnhzZAppbmRleCA0Y2Y4NjQ5Li4wMjU5YTE3IDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvdHVzY2FueS1zY2EtMS4xLnhzZAorKysgYi9tb2R1bGVzL2Fzc2VtYmx5LXhzZC9zcmMvbWFpbi9yZXNvdXJjZXMvdHVzY2FueS1zY2EtMS4xLnhzZApAQCAtMjMsMTYgKzIzLDIwIEBACiA8IS0tCiAgICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL25zL3dzZGwtaW5zdGFuY2UiIHNjaGVtYUxvY2F0aW9uPSJ3c2RsaS54c2QiLz4KIC0tPgotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIHNjaGVtYUxvY2F0aW9uPSJzY2EtMS4xLWNkMDUueHNkIi8+CisgICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgc2NoZW1hTG9jYXRpb249InNjYS0xLjEtY2QwNS1yZXYxLnhzZCIvPgogCiAKLSAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0idHVzY2FueS1zY2EtMS4xLWJpbmRpbmctYXRvbS54c2QiLz4gICAgCisgICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InR1c2Nhbnktc2NhLTEuMS1iaW5kaW5nLWF0b20ueHNkIi8+CiAgICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InR1c2Nhbnktc2NhLTEuMS1iaW5kaW5nLWptcy54c2QiLz4KICAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0idHVzY2FueS1zY2EtMS4xLWJpbmRpbmctaHR0cC54c2QiLz4KICAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0idHVzY2FueS1zY2EtMS4xLWJpbmRpbmctanNvbnJwYy54c2QiLz4KICAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0idHVzY2FueS1zY2EtMS4xLWJpbmRpbmctcmVzdC54c2QiLz4KICAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0idHVzY2FueS1zY2EtMS4xLWJpbmRpbmctcm1pLnhzZCIvPgorICAgIDwhLS0KICAgICA8aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0idHVzY2FueS1zY2EtMS4xLWJpbmRpbmctcnNzLnhzZCIvPgorICAgICAtLT4KKworICAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJ0dXNjYW55LXNjYS0xLjEtY29udHJpYnV0aW9uLXJlc291cmNlLnhzZCIvPgogCiAgICAgPGluY2x1ZGUgc2NoZW1hTG9jYXRpb249InR1c2Nhbnktc2NhLTEuMS1pbXBsZW1lbnRhdGlvbi1vc2dpLnhzZCIvPgogICAgIDxpbmNsdWRlIHNjaGVtYUxvY2F0aW9uPSJ0dXNjYW55LXNjYS0xLjEtaW1wbGVtZW50YXRpb24td2lkZ2V0LnhzZCIvPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkvU2VydmljZS5qYXZhIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkvU2VydmljZS5qYXZhCmluZGV4IDFmM2Q0MTIuLjljYWE3NTYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L1NlcnZpY2UuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9hc3NlbWJseS9TZXJ2aWNlLmphdmEKQEAgLTM5LDQgKzM5LDIxIEBACiAgICAgICogQHJldHVybiB0aGUgZW5kcG9pbnRzIGltcGxpZWQgYnkgdGhpcyBzZXJ2aWNlCiAgICAgICovCiAgICAgTGlzdDxFbmRwb2ludD4gZ2V0RW5kcG9pbnRzKCk7CisgICAgCisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyB0cnVlIGlmIHRoaXMgc2VydmljZSB3YXMgZGVmaW5lZCBiYXNlZCBvbiBKQVhXUyBhbm5vdGF0aW9ucyAKKyAgICAgKiBpbiBhIEphdmEgaW1wbGVtZW50YXRpb24KKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgYm9vbGVhbiBpc0pBWFdTU2VydmljZSgpOworICAgIAorICAgIC8qKgorICAgICAqIEFsbG93cyB0aGUgSkFYV1NTZXJ2aWNlIGZsYWcgdG8gYmUgc2V0LiBJdCBzaG91bGQgYmUgc2V0IHRydWUgaWYgdGhlIHNlcnZpY2UKKyAgICAgKiBjb25maWd1cmF0aW9uIGhhcyBiZWVuIGFmZmVjdGVkIGJ5IEpBWFdTIGFubm90YXRpb25zLiAKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gaXNKQVhXU1NlcnZpY2UKKyAgICAgKi8KKyAgICB2b2lkIHNldEpBWFdTU2VydmljZShib29sZWFuIGlzSkFYV1NTZXJ2aWNlKTsKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L2ltcGwvSW1wbGVtZW50YXRpb25JbXBsLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9hc3NlbWJseS9pbXBsL0ltcGxlbWVudGF0aW9uSW1wbC5qYXZhCmluZGV4IDY3N2U4NmMuLmY5NDM0MzggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L2ltcGwvSW1wbGVtZW50YXRpb25JbXBsLmphdmEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkvaW1wbC9JbXBsZW1lbnRhdGlvbkltcGwuamF2YQpAQCAtMzYsOSArMzYsOSBAQAogICogQHR1c2Nhbnkuc3BpLmV4dGVuc2lvbi5pbmhlcml0ZnJvbQogICovCiBwdWJsaWMgYWJzdHJhY3QgY2xhc3MgSW1wbGVtZW50YXRpb25JbXBsIGV4dGVuZHMgQ29tcG9uZW50VHlwZUltcGwgaW1wbGVtZW50cyBJbXBsZW1lbnRhdGlvbiwgUG9saWN5U3ViamVjdCB7Ci0gICAgcHJpdmF0ZSBRTmFtZSB0eXBlOwotICAgIHByaXZhdGUgRXh0ZW5zaW9uVHlwZSBleHRlbnNpb25UeXBlOwotICAgIHByaXZhdGUgTGlzdDxPcGVyYXRpb24+IG9wZXJhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PE9wZXJhdGlvbj4oKTsKKyAgICBwcm90ZWN0ZWQgUU5hbWUgdHlwZTsKKyAgICBwcm90ZWN0ZWQgRXh0ZW5zaW9uVHlwZSBleHRlbnNpb25UeXBlOworICAgIHByb3RlY3RlZCBMaXN0PE9wZXJhdGlvbj4gb3BlcmF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8T3BlcmF0aW9uPigpOwogCiAgICAgcHJvdGVjdGVkIEltcGxlbWVudGF0aW9uSW1wbChRTmFtZSB0eXBlKSB7CiAgICAgICAgIHN1cGVyKCk7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9hc3NlbWJseS9pbXBsL1NlcnZpY2VJbXBsLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9hc3NlbWJseS9pbXBsL1NlcnZpY2VJbXBsLmphdmEKaW5kZXggNjI1MjNlNS4uZjhlYjBmYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkvaW1wbC9TZXJ2aWNlSW1wbC5qYXZhCisrKyBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L2ltcGwvU2VydmljZUltcGwuamF2YQpAQCAtMzgsNiArMzgsNyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBvdmVycmlkaW5nQmluZGluZ3M7CiAgICAgcHJpdmF0ZSBDYWxsYmFjayBjYWxsYmFjazsKICAgICBwcml2YXRlIExpc3Q8RW5kcG9pbnQ+IGVuZHBvaW50cyA9IG5ldyBBcnJheUxpc3Q8RW5kcG9pbnQ+KCk7CisgICAgcHJpdmF0ZSBib29sZWFuIGlzSkFYV1NTZXJ2aWNlID0gZmFsc2U7CiAKICAgICAvKioKICAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHNlcnZpY2UuCkBAIC0xMDMsNCArMTA0LDEyIEBACiAgICAgcHVibGljIHZvaWQgc2V0T3ZlcnJpZGluZ0JpbmRpbmdzKGJvb2xlYW4gb3ZlcnJpZGluZ0JpbmRpbmdzKSB7CiAgICAgICAgIHRoaXMub3ZlcnJpZGluZ0JpbmRpbmdzID0gb3ZlcnJpZGluZ0JpbmRpbmdzOwogICAgIH0KKyAgICAKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0pBWFdTU2VydmljZSgpIHsKKyAgICAgICAgcmV0dXJuIGlzSkFYV1NTZXJ2aWNlOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRKQVhXU1NlcnZpY2UoYm9vbGVhbiBpc0pBWFdTU2VydmljZSkgeworICAgICAgICB0aGlzLmlzSkFYV1NTZXJ2aWNlID0gaXNKQVhXU1NlcnZpY2U7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZGVmaW5pdGlvbnMvRGVmaW5pdGlvbnMuamF2YSBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RlZmluaXRpb25zL0RlZmluaXRpb25zLmphdmEKaW5kZXggN2E2M2JiZS4uOWFlNWU2ZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZGVmaW5pdGlvbnMvRGVmaW5pdGlvbnMuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9kZWZpbml0aW9ucy9EZWZpbml0aW9ucy5qYXZhCkBAIC0yNiw2ICsyNiw4IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuSW50ZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeVNldDsKIAoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkV4dGVybmFsQXR0YWNobWVudDsKKwogCiAvKioKICAqIFJlcHJlc2VudHMgU0NBIERlZmluaXRpb25zLgpAQCAtODEsNCArODMsMTAgQEAKICAgICAgKiBAcmV0dXJuIGEgbGlzdCBvZiBkb21haW4gd2lkZSBiaW5kaW5nIGRlZmluaXRpb24gb2JqZWN0cyAKICAgICAgKi8KICAgICBMaXN0PEJpbmRpbmc+IGdldEJpbmRpbmdzKCk7CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJucyBhIGxpc3Qgb2YgZXh0ZXJuYWwgYXR0YWNobWVudHMKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgTGlzdDxFeHRlcm5hbEF0dGFjaG1lbnQ+IGdldEV4dGVybmFsQXR0YWNobWVudHMoKTsKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RlZmluaXRpb25zL2ltcGwvRGVmaW5pdGlvbnNJbXBsLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9kZWZpbml0aW9ucy9pbXBsL0RlZmluaXRpb25zSW1wbC5qYXZhCmluZGV4IDIyNGJjMGEuLmU1ODI2MWMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RlZmluaXRpb25zL2ltcGwvRGVmaW5pdGlvbnNJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZGVmaW5pdGlvbnMvaW1wbC9EZWZpbml0aW9uc0ltcGwuamF2YQpAQCAtMjUsNiArMjUsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQmluZGluZzsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLkRlZmluaXRpb25zOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkJpbmRpbmdUeXBlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkV4dGVybmFsQXR0YWNobWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5JbXBsZW1lbnRhdGlvblR5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuSW50ZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeVNldDsKQEAgLTQxLDYgKzQyLDcgQEAKICAgICBwcml2YXRlIExpc3Q8QmluZGluZ1R5cGU+IGJpbmRpbmdUeXBlcyA9IG5ldyBDb3B5T25Xcml0ZUFycmF5TGlzdDxCaW5kaW5nVHlwZT4oKTsKICAgICBwcml2YXRlIExpc3Q8SW1wbGVtZW50YXRpb25UeXBlPiBpbXBsZW1lbnRhdGlvblR5cGVzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PEltcGxlbWVudGF0aW9uVHlwZT4oKTsKICAgICBwcml2YXRlIExpc3Q8QmluZGluZz4gYmluZGluZ3MgPSBuZXcgQ29weU9uV3JpdGVBcnJheUxpc3Q8QmluZGluZz4oKTsKKwlwcml2YXRlIExpc3Q8RXh0ZXJuYWxBdHRhY2htZW50PiBleHRlcm5hbEF0dGFjaG1lbnRzID0gbmV3IENvcHlPbldyaXRlQXJyYXlMaXN0PEV4dGVybmFsQXR0YWNobWVudD4oKTsKIAogICAgCiAgICAgcHVibGljIExpc3Q8QmluZGluZ1R5cGU+IGdldEJpbmRpbmdUeXBlcygpIHsKQEAgLTcwLDQgKzcyLDggQEAKICAgICBwdWJsaWMgTGlzdDxCaW5kaW5nPiBnZXRCaW5kaW5ncygpIHsKICAgICAgICAgcmV0dXJuIGJpbmRpbmdzOwogICAgIH0KKworCXB1YmxpYyBMaXN0PEV4dGVybmFsQXR0YWNobWVudD4gZ2V0RXh0ZXJuYWxBdHRhY2htZW50cygpIHsKKwkJcmV0dXJuIGV4dGVybmFsQXR0YWNobWVudHMgOworCX0KIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RlZmluaXRpb25zL3V0aWwvRGVmaW5pdGlvbnNVdGlsLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9kZWZpbml0aW9ucy91dGlsL0RlZmluaXRpb25zVXRpbC5qYXZhCmluZGV4IGViNzQ2NzcuLjQ1MmMzYmYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RlZmluaXRpb25zL3V0aWwvRGVmaW5pdGlvbnNVdGlsLmphdmEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZGVmaW5pdGlvbnMvdXRpbC9EZWZpbml0aW9uc1V0aWwuamF2YQpAQCAtMTAzLDYgKzEwMyw4IEBACiAgICAgICAgIH0gICAgICAgIAogICAgICAgCiAgICAgICAgIHRhcmdldC5nZXRCaW5kaW5ncygpLmFkZEFsbChzb3VyY2UuZ2V0QmluZGluZ3MoKSk7CisgICAgICAgIAorICAgICAgICB0YXJnZXQuZ2V0RXh0ZXJuYWxBdHRhY2htZW50cygpLmFkZEFsbChzb3VyY2UuZ2V0RXh0ZXJuYWxBdHRhY2htZW50cygpKTsKICAgICB9CiAgICAgCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvT3BlcmF0aW9uLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvT3BlcmF0aW9uLmphdmEKaW5kZXggYzcxMjI1Yy4uNzFjNjQxZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL09wZXJhdGlvbi5qYXZhCisrKyBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9PcGVyYXRpb24uamF2YQpAQCAtMjAxLDQgKzIwMSw5IEBACiAgICAgICovCiAgICAgT2JqZWN0IGNsb25lKCkgdGhyb3dzIENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgUGFyYW1ldGVyTW9kZXMKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgTGlzdDxQYXJhbWV0ZXJNb2RlPiBnZXRQYXJhbWV0ZXJNb2RlcygpOwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL1BhcmFtZXRlck1vZGUuamF2YSBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9QYXJhbWV0ZXJNb2RlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyNDRhMwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9QYXJhbWV0ZXJNb2RlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWY7DQorDQorLyoqDQorICogUGFyYW1ldGVyIG1vZGUNCisgKiBAc2VlIGh0dHA6Ly9qYXZhLnN1bi5jb20vamF2YXNlLzYvZG9jcy9hcGkvamF2YXgvandzL1dlYlBhcmFtLk1vZGUuaHRtbA0KKyAqLw0KK3B1YmxpYyBlbnVtIFBhcmFtZXRlck1vZGUgew0KKyAgICBJTiwgT1VULCBJTk9VVDsNCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2ltcGwvRGF0YVR5cGVJbXBsLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvaW1wbC9EYXRhVHlwZUltcGwuamF2YQppbmRleCAxMmVhMjI5Li41NzJkZDdlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvaW1wbC9EYXRhVHlwZUltcGwuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvaW1wbC9EYXRhVHlwZUltcGwuamF2YQpAQCAtMTUwLDExICsxNTAsMTggQEAKICAgICAgICAgdGhpcy5kYXRhQmluZGluZyA9IGRhdGFCaW5kaW5nOwogICAgIH0KIAorICAgICAgICAKICAgICBAT3ZlcnJpZGUKLSAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewotICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIHNiLmFwcGVuZChwaHlzaWNhbCkuYXBwZW5kKCIgIikuYXBwZW5kKGRhdGFCaW5kaW5nKS5hcHBlbmQoIiAiKS5hcHBlbmQobG9naWNhbCk7Ci0gICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOworICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7ICAgIAkKKyAgICAJU3RyaW5nQnVpbGRlciBiID0gbmV3IFN0cmluZ0J1aWxkZXIoIDI1NiApOworICAgIAliLmFwcGVuZCggIkRhdGFUeXBlWyIgKTsKKyAgICAJYi5hcHBlbmQoICJkYXRhQmluZGluZz0iICsgKChkYXRhQmluZGluZz09bnVsbCkgPyAibnVsbCIgOiBkYXRhQmluZGluZykgKTsKKyAgICAJYi5hcHBlbmQoICIsIGdlbmVyaWNUeXBlPSIgKyAoKGdlbmVyaWNUeXBlPT1udWxsKSA/ICJudWxsIiA6IGdlbmVyaWNUeXBlKSApOyAKKyAgICAJYi5hcHBlbmQoICIsIHBoeXNpY2FsPSIgKyAoKHBoeXNpY2FsPT1udWxsKSA/ICJudWxsIiA6IHBoeXNpY2FsKSApOyAKKyAgICAJYi5hcHBlbmQoICIsIGxvZ2ljYWw9IiArICgobG9naWNhbD09bnVsbCkgPyAibnVsbCIgOiBsb2dpY2FsKSApOworICAgIAliLmFwcGVuZCggIiwgbWV0YURhdGEgc2l6ZT0iICsgKChtZXRhRGF0YU1hcD09bnVsbCkgPyAiMCIgOiBtZXRhRGF0YU1hcC5zaXplKCkpICk7CisgICAgCWIuYXBwZW5kKCAiXSIgKTsKKyAgICAJcmV0dXJuIGIudG9TdHJpbmcoKTsKICAgICB9CiAKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9pbXBsL0ludGVyZmFjZUNvbnRyYWN0TWFwcGVySW1wbC5qYXZhIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2ltcGwvSW50ZXJmYWNlQ29udHJhY3RNYXBwZXJJbXBsLmphdmEKaW5kZXggZjBmNDZkZC4uM2RlZGI1ZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2ltcGwvSW50ZXJmYWNlQ29udHJhY3RNYXBwZXJJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2ltcGwvSW50ZXJmYWNlQ29udHJhY3RNYXBwZXJJbXBsLmphdmEKQEAgLTIxNiw2ICsyMTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UuZ2V0TmFtZSgpICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdGFyZ2V0ID0gIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIGF1ZGl0LmFwcGVuZFNlcGVyYXRvcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0yMjYsNiArMjI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLmdldE5hbWUoKSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRhcmdldCA9ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBhdWRpdC5hcHBlbmRTZXBlcmF0b3IoKTsKICAgICAgICAgICAgIH0gICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMjM2LDYgKzIzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZS5pc05vbkJsb2NraW5nKCkgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0YXJnZXQgPSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LmlzTm9uQmxvY2tpbmcoKSk7CisgICAgICAgICAgICAgICAgYXVkaXQuYXBwZW5kU2VwZXJhdG9yKCk7CiAgICAgICAgICAgICB9ICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KQEAgLTI3Niw2ICsyNzksNyBAQAogICAgICAgICBpZiAoIWlzQ29tcGF0aWJsZSh0YXJnZXRPdXRwdXRUeXBlLCBzb3VyY2VPdXRwdXRUeXBlLCBwYXNzQnlWYWx1ZSwgYXVkaXQpKSB7CiAgICAgICAgICAgICBpZiAoYXVkaXQgIT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgYXVkaXQuYXBwZW5kKCIgb3V0cHV0IHR5cGVzIik7CisgICAgICAgICAgICAgICAgYXVkaXQuYXBwZW5kU2VwZXJhdG9yKCk7CiAgICAgICAgICAgICB9IAogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CkBAIC0yODMsNiArMjg3LDcgQEAKICAgICAgICAgaWYgKHNvdXJjZUlucHV0VHlwZS5zaXplKCkgIT0gdGFyZ2V0SW5wdXRUeXBlLnNpemUoKSkgewogICAgICAgICAgICAgaWYgKGF1ZGl0ICE9IG51bGwpewogICAgICAgICAgICAgICAgIGF1ZGl0LmFwcGVuZCgiZGlmZmVyZW50IG51bWJlciBvZiBpbnB1dCB0eXBlcyIpOworICAgICAgICAgICAgICAgIGF1ZGl0LmFwcGVuZFNlcGVyYXRvcigpOwogICAgICAgICAgICAgfSAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQpAQCAtMjkyLDYgKzI5Nyw3IEBACiAgICAgICAgICAgICBpZiAoIWlzQ29tcGF0aWJsZShzb3VyY2VJbnB1dFR5cGUuZ2V0KGkpLCB0YXJnZXRJbnB1dFR5cGUuZ2V0KGkpLCBwYXNzQnlWYWx1ZSwgYXVkaXQpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGF1ZGl0ICE9IG51bGwpewogICAgICAgICAgICAgICAgICAgICBhdWRpdC5hcHBlbmQoIiBpbnB1dCB0eXBlcyIpOworICAgICAgICAgICAgICAgICAgICBhdWRpdC5hcHBlbmRTZXBlcmF0b3IoKTsKICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KQEAgLTMxMyw2ICszMTksNyBAQAogICAgICAgICAgICAgaWYgKCFmb3VuZCkgewogICAgICAgICAgICAgICAgIGlmIChhdWRpdCAhPSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgYXVkaXQuYXBwZW5kKCJGYXVsdCB0eXBlcyBpbmNvbXBhdGlibGUiKTsKKyAgICAgICAgICAgICAgICAgICAgYXVkaXQuYXBwZW5kU2VwZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgfSAKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CkBAIC0zMzksMTQgKzM0NiwxNSBAQAogICAgIH0KIAogICAgIC8qCi0gICAgICogKG5vbi1KYXZhZG9jKQotICAgICAqIEBzZWUgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlQ29udHJhY3RNYXBwZXIjY2hlY2tDb21wYXRpYmlsaXR5KG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0LCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2VDb250cmFjdCwgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuQ29tcGF0aWJpbGl0eSwgYm9vbGVhbiwgYm9vbGVhbiwgamF2YS5sYW5nLlN0cmluZ0J1ZmZlcikKICAgICAgKiB0aGlzIHZhcmlhbnQgb2YgdGhlIGNoZWNrQ29tcGF0aWJpbGl0eSBtZXRob2QgaXMgaW50ZW5kZWQgdG8gc3VwZXJzZWRlIHRoZSBvbmUgd2l0aG91dCBhbiBhdWRpdCBhcmd1bWVudAogICAgICAqIFByZXNlbmNlIG9mIGJvdGggbWV0aG9kIHZhcmlhbnRzIGluZGljYXRlcyBhIHN0YXRlIG9mIHBhcnRpYWwgZGV2ZWxvcG1lbnQKICAgICAgKi8KICAgICBwdWJsaWMgYm9vbGVhbiBjaGVja0NvbXBhdGliaWxpdHkoSW50ZXJmYWNlQ29udHJhY3Qgc291cmNlLAotCQkJSW50ZXJmYWNlQ29udHJhY3QgdGFyZ2V0LCBDb21wYXRpYmlsaXR5IGNvbXBhdGliaWxpdHksCi0JCQlib29sZWFuIGlnbm9yZUNhbGxiYWNrLCBib29sZWFuIHNpbGVudCwgQXVkaXQgYXVkaXQpCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVyZmFjZUNvbnRyYWN0IHRhcmdldCwgCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhdGliaWxpdHkgY29tcGF0aWJpbGl0eSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbGVhbiBpZ25vcmVDYWxsYmFjaywgCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2lsZW50LCAKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgQXVkaXQgYXVkaXQpCiAJCQl0aHJvd3MgSW5jb21wYXRpYmxlSW50ZXJmYWNlQ29udHJhY3RFeGNlcHRpb24gewogCiAJCWlmIChzb3VyY2UgPT0gdGFyZ2V0KSB7CkBAIC0zNzcsOCArMzg1LDEwIEBACiAJCQkJLmlzUmVtb3RhYmxlKCkpIHsKIAkJCWlmICghc2lsZW50KSB7CiAJCQkJYXVkaXQuYXBwZW5kKCJSZW1vdGFibGUgc2V0dGluZ3MgZG8gbm90IG1hdGNoOiAiKyBzb3VyY2UgKyAiLCIgKyB0YXJnZXQpOyAvLyBUT0RPIHNlZSBpZiBzZXJpYWxpemF0aW9uIGlzIHN1ZmZpY2llbnQKKwkJCQlhdWRpdC5hcHBlbmRTZXBlcmF0b3IoKTsKIAkJCQl0aHJvdyBuZXcgSW5jb21wYXRpYmxlSW50ZXJmYWNlQ29udHJhY3RFeGNlcHRpb24oCiAJCQkJCQkiUmVtb3RhYmxlIHNldHRpbmdzIGRvIG5vdCBtYXRjaCIsIHNvdXJjZSwgdGFyZ2V0KTsKKwkJCQkKIAkJCX0gZWxzZSB7CiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJfQpAQCAtMzg4LDYgKzM5OCw4IEBACiAJCQlPcGVyYXRpb24gdGFyZ2V0T3BlcmF0aW9uID0gbWFwKHRhcmdldC5nZXRJbnRlcmZhY2UoKSwgb3BlcmF0aW9uKTsKIAkJCWlmICh0YXJnZXRPcGVyYXRpb24gPT0gbnVsbCkgewogCQkJCWlmICghc2lsZW50KSB7CisJICAgICAgICAgICAgICAgIGF1ZGl0LmFwcGVuZCgiT3BlcmF0aW9uICIgKyBvcGVyYXRpb24uZ2V0TmFtZSgpKyAiIG5vdCBmb3VuZCBvbiB0YXJnZXQiKTsgCisJICAgICAgICAgICAgICAgIGF1ZGl0LmFwcGVuZFNlcGVyYXRvcigpOwogCQkJCQl0aHJvdyBuZXcgSW5jb21wYXRpYmxlSW50ZXJmYWNlQ29udHJhY3RFeGNlcHRpb24oCiAJCQkJCQkJIk9wZXJhdGlvbiAiICsgb3BlcmF0aW9uLmdldE5hbWUoKQogCQkJCQkJCQkJKyAiIG5vdCBmb3VuZCBvbiB0YXJnZXQiLCBzb3VyY2UsIHRhcmdldCk7CkBAIC00MDEsNiArNDEzLDggQEAKIAkJCQkJYXVkaXQgPSBuZXcgQXVkaXQoKTsKIAkJCQlpZiAoIWlzQ29tcGF0aWJsZShvcGVyYXRpb24sIHRhcmdldE9wZXJhdGlvbiwKIAkJCQkJCUNvbXBhdGliaWxpdHkuU1VCU0VULCB0cnVlLCBhdWRpdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXVkaXQuYXBwZW5kKCJPcGVyYXRpb25zIGNhbGxlZCAiICsgb3BlcmF0aW9uLmdldE5hbWUoKSsgIiBhcmUgbm90IGNvbXBhdGlibGUiKTsgCisgICAgICAgICAgICAgICAgICAgIGF1ZGl0LmFwcGVuZFNlcGVyYXRvcigpOwogCQkJCQl0aHJvdyBuZXcgSW5jb21wYXRpYmxlSW50ZXJmYWNlQ29udHJhY3RFeGNlcHRpb24oCiAJCQkJCQkJIk9wZXJhdGlvbnMgY2FsbGVkICIgKyBvcGVyYXRpb24uZ2V0TmFtZSgpCiAJCQkJCQkJCQkrICIgYXJlIG5vdCBjb21wYXRpYmxlICIgKyBhdWRpdCwgc291cmNlLApAQCAtNDE3LDczICs0MzEsMjcgQEAKIAkJcmV0dXJuIGlnbm9yZUNhbGxiYWNrIHx8IGlzQ2FsbGJhY2tDb21wYXRpYmxlKHNvdXJjZSwgdGFyZ2V0LCBzaWxlbnQpOwogCX0KIAorICAgIC8qCisgICAgICogVGhlIG9sZCBjaGVja0NvbXBhdGliaWxpdHkgb3BlcmF0aW9uIHdpdGhvdXQgYXVkaXRpbmcuIFRoaXMganVzdCBkZWxlZ2F0ZXMgdG8gdGhlIG5ldyBvbmUgZm9yIHRoZSB0aW1lCisgICAgICogYmVpbmcgd2hpbGUgdGhlcmUgYXJlIHN0aWxsIGNhbGxzIHRoYXQgZG9uJ3QgcHJvdmlkZSBhbmQgYXVkaXQgb2JqZWN0LiBJbiB0aGUgbWVkaXVtIHRlcm0gd2hlbiB0aGUgY2FsbHMgaGF2ZQorICAgICAqIGJlZW4gY29udmVydGVkIHRvIHN1ZSB0aGUgbmV3IG9wZXRpb24gZGlyZWN0bHkgdGhpcyBzaG91bGQgYmUgcmVtb3ZlZC4gCisgICAgICovCiAgICAgcHVibGljIGJvb2xlYW4gY2hlY2tDb21wYXRpYmlsaXR5KEludGVyZmFjZUNvbnRyYWN0IHNvdXJjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlQ29udHJhY3QgdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXRpYmlsaXR5IGNvbXBhdGliaWxpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaWdub3JlQ2FsbGJhY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gc2lsZW50KSB0aHJvd3MgSW5jb21wYXRpYmxlSW50ZXJmYWNlQ29udHJhY3RFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sZWFuIHNpbGVudCkgCisgICAgICAgIHRocm93cyBJbmNvbXBhdGlibGVJbnRlcmZhY2VDb250cmFjdEV4Y2VwdGlvbiB7CiAgICAgICAKLSAgICAgICAgaWYgKHNvdXJjZSA9PSB0YXJnZXQpIHsKLSAgICAgICAgICAgIC8vIFNob3J0Y3V0IGZvciBwZXJmb3JtYW5jZQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc291cmNlID09IG51bGwgfHwgdGFyZ2V0ID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzb3VyY2UuZ2V0SW50ZXJmYWNlKCkgPT0gdGFyZ2V0LmdldEludGVyZmFjZSgpKSB7Ci0gICAgICAgICAgICByZXR1cm4gaWdub3JlQ2FsbGJhY2sgfHwgaXNDYWxsYmFja0NvbXBhdGlibGUoc291cmNlLCB0YXJnZXQsIHNpbGVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc291cmNlLmdldEludGVyZmFjZSgpID09IG51bGwgfHwgdGFyZ2V0LmdldEludGVyZmFjZSgpID09IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChzb3VyY2UuZ2V0SW50ZXJmYWNlKCkuaXNEeW5hbWljKCkgfHwgdGFyZ2V0LmdldEludGVyZmFjZSgpLmlzRHluYW1pYygpKSB7Ci0gICAgICAgICAgICByZXR1cm4gaWdub3JlQ2FsbGJhY2sgfHwgaXNDYWxsYmFja0NvbXBhdGlibGUoc291cmNlLCB0YXJnZXQsIHNpbGVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoc291cmNlLmdldEludGVyZmFjZSgpLmlzUmVtb3RhYmxlKCkgIT0gdGFyZ2V0LmdldEludGVyZmFjZSgpLmlzUmVtb3RhYmxlKCkpIHsKLSAgICAgICAgICAgIGlmICghc2lsZW50KSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEluY29tcGF0aWJsZUludGVyZmFjZUNvbnRyYWN0RXhjZXB0aW9uKCJSZW1vdGFibGUgc2V0dGluZ3MgZG8gbm90IG1hdGNoIiwgc291cmNlLCB0YXJnZXQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcGVyYXRpb24gOiBzb3VyY2UuZ2V0SW50ZXJmYWNlKCkuZ2V0T3BlcmF0aW9ucygpKSB7Ci0gICAgICAgICAgICBPcGVyYXRpb24gdGFyZ2V0T3BlcmF0aW9uID0gbWFwKHRhcmdldC5nZXRJbnRlcmZhY2UoKSwgb3BlcmF0aW9uKTsKLSAgICAgICAgICAgIGlmICh0YXJnZXRPcGVyYXRpb24gPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmICghc2lsZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbmNvbXBhdGlibGVJbnRlcmZhY2VDb250cmFjdEV4Y2VwdGlvbigiT3BlcmF0aW9uICIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi5nZXROYW1lKCkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBub3QgZm91bmQgb24gdGFyZ2V0IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXNpbGVudCkgewotICAgICAgICAgICAgICAgIEF1ZGl0IGF1ZGl0ID0gbmV3IEF1ZGl0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0NvbXBhdGlibGUob3BlcmF0aW9uLCB0YXJnZXRPcGVyYXRpb24sIENvbXBhdGliaWxpdHkuU1VCU0VULCB0cnVlLCBhdWRpdCkpewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW5jb21wYXRpYmxlSW50ZXJmYWNlQ29udHJhY3RFeGNlcHRpb24oIk9wZXJhdGlvbnMgY2FsbGVkICIgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLmdldE5hbWUoKSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFyZSBub3QgY29tcGF0aWJsZSAiICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpc0NvbXBhdGlibGUob3BlcmF0aW9uLCB0YXJnZXRPcGVyYXRpb24sIENvbXBhdGliaWxpdHkuU1VCU0VUKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGlnbm9yZUNhbGxiYWNrIHx8IGlzQ2FsbGJhY2tDb21wYXRpYmxlKHNvdXJjZSwgdGFyZ2V0LCBzaWxlbnQpOworICAgICAgICAvLyBjcmVhdGUgZHVtbXkgYXVkaXQgb2JqZWN0LgorICAgICAgICBBdWRpdCBhdWRpdCA9IG5ldyBBdWRpdCgpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGNoZWNrQ29tcGF0aWJpbGl0eShzb3VyY2UsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJpbGl0eSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FsbGJhY2ssIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdWRpdCk7CiAgICAgfQogCiAgICAgCkBAIC02MDIsMzAgKzU3MCw1IEBACiAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgIAotICAgIC8qKgotICAgICAqIEluIHZhcmlvdXMgcGxhY2VzIGluIHRoZSBwcm9jZXNzIG9mIGFuIFNDQSBhcHBsaWNhdGlvbiB3ZSBtYXRjaCBvbmUgaW50ZXJmYWNlIGFnYWluc3QKLSAgICAgKiBhbm90aGVyLiBTb21ldGltZXMgdGhlIHR3byBpbnRlcmZhY2VzIGNhbiBiZSBwcmVzZW50ZWQgdXNpbmcgZGlmZmVyZW50IElETHMsIGZvciBleGFtcGxlCi0gICAgICogSmF2YSBhbmQgV1NETC4gSW4gdGhpcyBjYXNlIGludGVyZmFjZXMgYXJlIGNvbnZlcnRlZCBzbyB0aGF0IHRoZXkgYXJlIGJvdGggV1NETDEuMSBpbnRlcmZhY2VzCi0gICAgICogYW5kIHRoZXkgYXJlIHRoZW4gY29tcGFyZWQuIFRoZSBnZW5lcmF0ZWQgV1NETCBpcyBjYWNoZWQgb24gdGhlIGludGVyZmFjZSBvYmplY3QgZm9yIAotICAgICAqIGFueSBzdWJzZXF1ZW50IG1hdGNoaW5nCi0gICAgICogCi0gICAgICogQHBhcmFtIGludGVyZmFjZUEKLSAgICAgKiBAcGFyYW0gaW50ZXJmYWNlQgotICAgICAqLwotLyogICAgCi0gICAgcHVibGljIHZvaWQgbm9ybWFsaXplQ29udHJhY3RzRm9yQ29tcGFyaXNvbihJbnRlcmZhY2VDb250cmFjdCBpbnRlcmZhY2VBLCBJbnRlcmZhY2VDb250cmFjdCBpbnRlcmZhY2VCKXsKLSAgICAgICAgLy8gbm9ybWFsaXplIGludGVyZmFjZXMKLSAgICAgICAgaWYgKGludGVyZmFjZUEuZ2V0SW50ZXJmYWNlKCkuZ2V0Q2xhc3MoKSAhPSBpbnRlcmZhY2VCLmdldEludGVyZmFjZSgpLmdldENsYXNzKCkpIHsKLSAgICAgICAgICAgIHRoaXMuY29udHJhY3RCdWlsZGVyID0gYnVpbGRlcnMuZ2V0Q29udHJhY3RCdWlsZGVyKCk7Ci0gICAgICAgICAgICBpZiAoaW50ZXJmYWNlQS5nZXRJbnRlcmZhY2UoKSBpbnN0YW5jZW9mIEludGVyZmFjZSl7Ci0gICAgICAgICAgICAgICAgY29udHJhY3RCdWlsZGVyLmJ1aWxkKGludGVyZmFjZUEsIG51bGwpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBjb250cmFjdEJ1aWxkZXIuYnVpbGQoaW50ZXJmYWNlQiwgbnVsbCk7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCi0gICAgICAgIH0KLSAgICB9Ci0qLwogCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvaW1wbC9PcGVyYXRpb25JbXBsLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvaW1wbC9PcGVyYXRpb25JbXBsLmphdmEKaW5kZXggNjA2NzgyNC4uMjFkZWJiNiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2ltcGwvT3BlcmF0aW9uSW1wbC5qYXZhCisrKyBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9pbXBsL09wZXJhdGlvbkltcGwuamF2YQpAQCAtMjksNiArMjksNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkRhdGFUeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuUGFyYW1ldGVyTW9kZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsLldyYXBwZXJJbmZvOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLnV0aWwuWE1MVHlwZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5FeHRlbnNpb25UeXBlOwpAQCAtNDksNiArNTAsNyBAQAogICAgIHByaXZhdGUgRGF0YVR5cGU8TGlzdDxEYXRhVHlwZT4+IGlucHV0VHlwZTsKICAgICBwcml2YXRlIExpc3Q8RGF0YVR5cGU+IGZhdWx0VHlwZXM7CiAgICAgcHJpdmF0ZSBJbnRlcmZhY2UgaW50ZXJmYXplOworICAgIHByaXZhdGUgTGlzdDxQYXJhbWV0ZXJNb2RlPiBwYXJhbWV0ZXJNb2RlcyA9IG5ldyBBcnJheUxpc3Q8UGFyYW1ldGVyTW9kZT4oKTsKICAgICBwcml2YXRlIGJvb2xlYW4gbm9uQmxvY2tpbmc7CiAgICAgcHJpdmF0ZSBib29sZWFuIHdyYXBwZXJTdHlsZTsKICAgICBwcml2YXRlIFdyYXBwZXJJbmZvIHdyYXBwZXI7CkBAIC0yNzksNCArMjgxLDggQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCXB1YmxpYyBMaXN0PFBhcmFtZXRlck1vZGU+IGdldFBhcmFtZXRlck1vZGVzKCkgeworCQlyZXR1cm4gdGhpcy5wYXJhbWV0ZXJNb2RlczsKKwl9CisKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi91dGlsL0F1ZGl0LmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvdXRpbC9BdWRpdC5qYXZhCmluZGV4IDA4MzA4NjAuLjM0M2QzNjkgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi91dGlsL0F1ZGl0LmphdmEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL3V0aWwvQXVkaXQuamF2YQpAQCAtMjUsMTMgKzI1LDE5IEBACiAgKiAKICAqLwogcHVibGljIGNsYXNzIEF1ZGl0IHsKKwkKKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBzZXBlcmF0b3IgPSAifHx8IjsgCiAJcHJpdmF0ZSBTdHJpbmdCdWZmZXIgYnVmOwogCiAJcHVibGljIEF1ZGl0KCkgewogCQl0aGlzLmJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKIAl9CiAJcHVibGljIHZvaWQgIGFwcGVuZChTdHJpbmcgc3RyKSB7Ci0JCWJ1Zi5hcHBlbmQoInx8fCAiICsgc3RyKTsKKwkJYnVmLmFwcGVuZChzdHIpOworCX0KKwkKKwlwdWJsaWMgdm9pZCBhcHBlbmRTZXBlcmF0b3IoKSB7CisJCWJ1Zi5hcHBlbmQoc2VwZXJhdG9yKTsKIAl9CiAJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKIAkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L0V4dGVybmFsQXR0YWNobWVudC5qYXZhIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L0V4dGVybmFsQXR0YWNobWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViY2NmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvRXh0ZXJuYWxBdHRhY2htZW50LmphdmEKQEAgLTAsMCArMSw4NSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3k7DQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uOw0KKw0KKy8qDQorICogUmVwcmVzZW50cyBhbiBleHRlcm5hbCBhdHRhY2htZW50IGVsZW1lbnQuIFNlZSB0aGUgUG9saWN5IEZyYW1ld29yayBzcGVjaWZpY2F0aW9uIGZvciBhDQorICogZGVzY3JpcHRpb24gb2YgdGhpcyBlbGVtZW50Lg0KKyAqDQorICogQHZlcnNpb24gJFJldjogOTM3MjkxICQgJERhdGU6IDIwMTAtMDQtMjMgMDY6NDE6MjQgLTA3MDAgKEZyaSwgMjMgQXByIDIwMTApICQNCisgKiBAdHVzY2FueS5zcGkuZXh0ZW5zaW9uLmFzY2xpZW50DQorICovDQorDQorDQorcHVibGljIGludGVyZmFjZSBFeHRlcm5hbEF0dGFjaG1lbnQgew0KKwkNCisJLyoqDQorCSAqIEdldCB0aGUgYXR0YWNoVG8gYXR0cmlidXRlDQorCSAqIEByZXR1cm4NCisJICovDQorCVN0cmluZyBnZXRBdHRhY2hUbygpOw0KKwkNCisJLyoqDQorCSAqIFNldCB0aGUgYXR0YWNoVG8gYXR0cmlidXRlDQorCSAqIEBwYXJhbSBuYW1lDQorCSAqLw0KKwl2b2lkIHNldEF0dGFjaFRvKFN0cmluZyBuYW1lKTsNCisJDQorCS8qKg0KKwkgKiBHZXQgdGhlIGNvbXBpbGVkIFhQYXRoIGF0dGFjaFRvIGV4cHJlc3Npb24NCisJICogQHJldHVybg0KKwkgKi8NCisJWFBhdGhFeHByZXNzaW9uIGdldEF0dGFjaFRvWFBhdGhFeHByZXNzaW9uKCk7DQorCQ0KKwkvKioNCisJICogU2V0IHRoZSBjb21waWxlZCBYUGF0aCBhdHRhY2hUbyBleHByZXNzaW9uIA0KKwkgKiBAcGFyYW0gZXhwcmVzc2lvbg0KKwkgKi8NCisJdm9pZCBzZXRBdHRhY2hUb1hQYXRoRXhwcmVzc2lvbihYUGF0aEV4cHJlc3Npb24gZXhwcmVzc2lvbik7DQorCQ0KKwkvKioNCisJICogR2V0IHRoZSBwb2xpY3kgc2V0cyBhc3NvY2lhdGVkIHdpdGggdGhpcyBFeHRlcm5hbEF0dGFjaG1lbnQNCisJICogQHJldHVybg0KKwkgKi8NCisJTGlzdDxQb2xpY3lTZXQ+IGdldFBvbGljeVNldHMoKTsNCisJDQorCS8qKg0KKwkgKiBHZXQgdGhlIGludGVudHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRXh0ZXJuYWxBdHRhY2htZW50DQorCSAqIEByZXR1cm4NCisJICovDQorCUxpc3Q8SW50ZW50PiBnZXRJbnRlbnRzKCk7DQorCQ0KKwkgLyoqDQorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgbW9kZWwgZWxlbWVudCBpcyB1bnJlc29sdmVkLg0KKyAgICAgKiANCisgICAgICogQHJldHVybiB0cnVlIGlmIHRoZSBtb2RlbCBlbGVtZW50IGlzIHVucmVzb2x2ZWQuDQorICAgICAqLw0KKyAgICBib29sZWFuIGlzVW5yZXNvbHZlZCgpOw0KKw0KKyAgICAvKioNCisgICAgICogU2V0cyB3aGV0aGVyIHRoZSBtb2RlbCBlbGVtZW50IGlzIHVucmVzb2x2ZWQuDQorICAgICAqIA0KKyAgICAgKiBAcGFyYW0gdW5yZXNvbHZlZCB3aGV0aGVyIHRoZSBtb2RlbCBlbGVtZW50IGlzIHVucmVzb2x2ZWQNCisgICAgICovDQorICAgIHZvaWQgc2V0VW5yZXNvbHZlZChib29sZWFuIHVucmVzb2x2ZWQpOw0KK30NCmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvUG9saWN5RmFjdG9yeS5qYXZhIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L1BvbGljeUZhY3RvcnkuamF2YQppbmRleCBiMmFjNWNhLi5iMjMwNjBkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvUG9saWN5RmFjdG9yeS5qYXZhCisrKyBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9Qb2xpY3lGYWN0b3J5LmphdmEKQEAgLTY0LDQgKzY0LDkgQEAKICAgICBCaW5kaW5nVHlwZSBjcmVhdGVCaW5kaW5nVHlwZSgpOwogICAgIEltcGxlbWVudGF0aW9uVHlwZSBjcmVhdGVJbXBsZW1lbnRhdGlvblR5cGUoKTsKIAorICAgIC8qKgorICAgICAqIENyZWF0ZSBhIG5ldyBFeHRlcm5hbEF0dGFjaG1lbnQKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgRXh0ZXJuYWxBdHRhY2htZW50IGNyZWF0ZUV4dGVybmFsQXR0YWNobWVudCgpOwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L1BvbGljeVNldC5qYXZhIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L1BvbGljeVNldC5qYXZhCmluZGV4IGExYWUzODkuLjIzMGQ2MzUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9Qb2xpY3lTZXQuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvUG9saWN5U2V0LmphdmEKQEAgLTE0NCw0ICsxNDQsMTYgQEAKICAgICAgKi8KICAgICB2b2lkIHNldEFwcGxpZXNUb1hQYXRoRXhwcmVzc2lvbihYUGF0aEV4cHJlc3Npb24geHBhdGhFeHByZXNzaW9uKTsKIAorICAgIC8qKgorICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIFBvbGljeVNldCB3YXMgYXR0YWNoZWQgdmlhIGV4dGVybmFsIGF0dGFjaG1lbnQKKyAgICAgKiBGb3IgdW5hdHRhY2hlZCBhbmQgZGlyZWN0bHkgYXR0YWNoZWQgUG9saWN5U2V0cywgcmV0dXJucyBmYWxzZQorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBib29sZWFuIGlzRXh0ZXJuYWxBdHRhY2htZW50KCk7CisgICAgCisgICAgLyoqCisgICAgICogU2V0cyB3aGV0aGVyIHRoaXMgUG9saWN5U2V0IGhhcyBiZWVuIGF0dGFjaGVkIHZpYSBleHRlcm5hbCBhdHRhY2htZW50IG9yIG5vdAorICAgICAqIEBwYXJhbSB2YWx1ZQorICAgICAqLworICAgIHZvaWQgc2V0SXNFeHRlcm5hbEF0dGFjaG1lbnQoYm9vbGVhbiB2YWx1ZSk7CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvaW1wbC9FeHRlcm5hbEF0dGFjaG1lbnRJbXBsLmphdmEgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvaW1wbC9FeHRlcm5hbEF0dGFjaG1lbnRJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5MGUyNgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9pbXBsL0V4dGVybmFsQXR0YWNobWVudEltcGwuamF2YQpAQCAtMCwwICsxLDc2IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5pbXBsOw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsNCisNCitpbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbjsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuRXh0ZXJuYWxBdHRhY2htZW50Ow0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5JbnRlbnQ7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeVNldDsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBFeHRlcm5hbEF0dGFjaG1lbnQNCisgKg0KKyAqLw0KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbEF0dGFjaG1lbnRJbXBsIGltcGxlbWVudHMgRXh0ZXJuYWxBdHRhY2htZW50IHsNCisJDQorCXByaXZhdGUgU3RyaW5nIGF0dGFjaFRvOw0KKwlwcml2YXRlIExpc3Q8SW50ZW50PiBpbnRlbnRzID0gbmV3IEFycmF5TGlzdDxJbnRlbnQ+KCk7DQorCXByaXZhdGUgTGlzdDxQb2xpY3lTZXQ+IHBvbGljeVNldHMgPSBuZXcgQXJyYXlMaXN0PFBvbGljeVNldD4oKTsNCisJcHJpdmF0ZSBYUGF0aEV4cHJlc3Npb24geHBhdGg7DQorCXByaXZhdGUgYm9vbGVhbiBpc1VucmVzb2x2ZWQ7DQorCQ0KKw0KKwlwdWJsaWMgU3RyaW5nIGdldEF0dGFjaFRvKCkgew0KKwkJcmV0dXJuIGF0dGFjaFRvOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHNldEF0dGFjaFRvKFN0cmluZyBhdHRhY2hUbykgew0KKwkJdGhpcy5hdHRhY2hUbyA9IGF0dGFjaFRvOwkNCisJfQ0KKw0KKwlwdWJsaWMgTGlzdDxQb2xpY3lTZXQ+IGdldFBvbGljeVNldHMoKSB7DQorCQlyZXR1cm4gdGhpcy5wb2xpY3lTZXRzOw0KKwl9DQorDQorCXB1YmxpYyBMaXN0PEludGVudD4gZ2V0SW50ZW50cygpIHsNCisJCXJldHVybiB0aGlzLmludGVudHM7DQorCX0NCisNCisJcHVibGljIFhQYXRoRXhwcmVzc2lvbiBnZXRBdHRhY2hUb1hQYXRoRXhwcmVzc2lvbigpIHsNCisJCXJldHVybiB0aGlzLnhwYXRoOw0KKwl9DQorDQorCXB1YmxpYyB2b2lkIHNldEF0dGFjaFRvWFBhdGhFeHByZXNzaW9uKFhQYXRoRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7DQorCQl0aGlzLnhwYXRoID0gZXhwcmVzc2lvbjsJCQ0KKwl9DQorDQorCXB1YmxpYyBib29sZWFuIGlzVW5yZXNvbHZlZCgpIHsNCisJCXJldHVybiB0aGlzLmlzVW5yZXNvbHZlZDsNCisJfQ0KKw0KKwlwdWJsaWMgdm9pZCBzZXRVbnJlc29sdmVkKGJvb2xlYW4gdW5yZXNvbHZlZCkgew0KKwkJdGhpcy5pc1VucmVzb2x2ZWQgPSB1bnJlc29sdmVkOwkJDQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L2ltcGwvUG9saWN5RmFjdG9yeUltcGwuamF2YSBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9pbXBsL1BvbGljeUZhY3RvcnlJbXBsLmphdmEKaW5kZXggYzY3ZmYxZS4uZjcwMGY3YyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L2ltcGwvUG9saWN5RmFjdG9yeUltcGwuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvaW1wbC9Qb2xpY3lGYWN0b3J5SW1wbC5qYXZhCkBAIC0yOCw2ICsyOCw4IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuUG9saWN5U2V0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlF1YWxpZmllcjsKIAoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkV4dGVybmFsQXR0YWNobWVudDsKKwogLyoqCiAgKiBBIGZhY3RvcnkgZm9yIHRoZSBwb2xpY3kgbW9kZWwuCiAgKiAKQEAgLTY2LDUgKzY4LDkgQEAKICAgICBwdWJsaWMgRXh0ZW5zaW9uVHlwZSBjcmVhdGVFeHRlbnNpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gbmV3IEV4dGVuc2lvblR5cGVJbXBsKCk7CiAgICAgfQorICAgIAorICAgIHB1YmxpYyBFeHRlcm5hbEF0dGFjaG1lbnQgY3JlYXRlRXh0ZXJuYWxBdHRhY2htZW50KCkgeworICAgIAlyZXR1cm4gbmV3IEV4dGVybmFsQXR0YWNobWVudEltcGwoKTsKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9pbXBsL1BvbGljeVNldEltcGwuamF2YSBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9pbXBsL1BvbGljeVNldEltcGwuamF2YQppbmRleCA3NWQxMjI5Li4yMmU2ZTRkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvaW1wbC9Qb2xpY3lTZXRJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L2ltcGwvUG9saWN5U2V0SW1wbC5qYXZhCkBAIC00OCw2ICs0OCw3IEBACiAKICAgICBwcml2YXRlIExpc3Q8SW50ZW50TWFwPiBpbnRlbnRNYXBzID0gbmV3IEFycmF5TGlzdDxJbnRlbnRNYXA+KCk7CiAgICAgcHJpdmF0ZSBMaXN0PFBvbGljeUV4cHJlc3Npb24+IHBvbGljaWVzID0gbmV3IEFycmF5TGlzdDxQb2xpY3lFeHByZXNzaW9uPigpOworCXByaXZhdGUgYm9vbGVhbiBpc0V4dGVybmFsQXR0YWNobWVudDsKIAogICAgIHB1YmxpYyBRTmFtZSBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKQEAgLTE0Miw0ICsxNDMsMTIgQEAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisJcHVibGljIGJvb2xlYW4gaXNFeHRlcm5hbEF0dGFjaG1lbnQoKSB7CisJCXJldHVybiB0aGlzLmlzRXh0ZXJuYWxBdHRhY2htZW50OworCX0KKworCXB1YmxpYyB2b2lkIHNldElzRXh0ZXJuYWxBdHRhY2htZW50KGJvb2xlYW4gdmFsdWUpIHsKKwkJdGhpcy5pc0V4dGVybmFsQXR0YWNobWVudCA9IHZhbHVlOwkJCisJfQorCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L2J1aWxkZXIvYXNzZW1ibHktdmFsaWRhdGlvbi1tZXNzYWdlcy5wcm9wZXJ0aWVzIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9hc3NlbWJseS9idWlsZGVyL2Fzc2VtYmx5LXZhbGlkYXRpb24tbWVzc2FnZXMucHJvcGVydGllcwppbmRleCBmZTkyZjVlLi45MWIxNzIxIDEwMDY0NAotLS0gYS9tb2R1bGVzL2Fzc2VtYmx5L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2Fzc2VtYmx5L2J1aWxkZXIvYXNzZW1ibHktdmFsaWRhdGlvbi1tZXNzYWdlcy5wcm9wZXJ0aWVzCisrKyBiL21vZHVsZXMvYXNzZW1ibHkvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYXNzZW1ibHkvYnVpbGRlci9hc3NlbWJseS12YWxpZGF0aW9uLW1lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTgxLDMgKzgxLDUgQEAKIFByb3BlcnR5VmFsdWVEb2VzTm90TWF0Y2hFbGVtZW50ID0gW0FTTTUwMDI5XSBUaGUgcHJvcGVydHkgezB9IG9uIGNvbXBvbmVudCB7MX0gaGFzIGEgdmFsdWUgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGVsZW1lbnQgezJ9IHdpdGggd2hpY2ggaXQgaXMgYXNzb2NpYXRlZC4gVmFsaWRhdGlvbiByZXBvcnRlZCB7M30KIEVQUkluY29tcGF0aWJsZUludGVyZmFjZSA9IFtCV1MyMDAwN10gVGhlIHJlZmVyZW5jZSBpbnRlcmZhY2UgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlIGludGVyZmFjZSBvZiB0aGUgcmVmZXJlbmNlIGJpbmRpbmcgezB9CiBFUEluY29tcGF0aWJsZUludGVyZmFjZSA9IFtCV1MyMDAwN10gVGhlIHNlcnZpY2UgaW50ZXJmYWNlIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHNlcnZpY2UgYmluZGluZyB7MH0KK1Byb21vdGVkQ2FsbGJhY2tSZWZlcmVuY2VOb3RGb3VuZCA9IEZvciBjb21wb25lbnQgezB9IGFuZCBzZXJ2aWNlIHsxfSB0aGUgcHJvbW90ZWQgY29tcG9uZW50IHsyfSBkb2VzIG5vdCBoYXZlIGEgY2FsbGJhY2sgcmVmZXJlbmNlIGNhbGxlZCB7M30gd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgVHVzY2FueQorUHJvbW90ZWRDYWxsYmFja1NlcnZpY2VOb3RGb3VuZCA9IEZvciBjb21wb25lbnQgezB9IGFuZCByZWZlcmVuY2UgezF9IHRoZSBwcm9tb3RlZCBjb21wb25lbnQgezJ9IGRvZXMgbm90IGhhdmUgYSBjYWxsYmFjayBzZXJ2aWNlIGNhbGxlZCB7M30gd2hpY2ggc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgVHVzY2FueQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9hc3NlbWJseS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L1BvbGljeUZhY3RvcnlUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9hc3NlbWJseS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L1BvbGljeUZhY3RvcnlUZXN0Q2FzZS5qYXZhCmluZGV4IDI3NzVjNGEuLjU2OTM2NmEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYXNzZW1ibHkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9Qb2xpY3lGYWN0b3J5VGVzdENhc2UuamF2YQorKysgYi9tb2R1bGVzL2Fzc2VtYmx5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvUG9saWN5RmFjdG9yeVRlc3RDYXNlLmphdmEKQEAgLTUyLDQgKzUyLDIyIEBACiAgICAgICAgIHBvbGljeVNldC5zZXROYW1lKG5ldyBRTmFtZSgiaHR0cDovL3Rlc3QiLCAicmVsaWFiaWxpdHkiKSk7CiAgICAgICAgIGFzc2VydEVxdWFscyhwb2xpY3lTZXQuZ2V0TmFtZSgpLCBuZXcgUU5hbWUoImh0dHA6Ly90ZXN0IiwgInJlbGlhYmlsaXR5IikpOwogICAgIH0KKyAgICAKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RDcmVhdGVFeHRlcm5hbEF0dGFjaG1lbnQoKSB7CisgICAgCUV4dGVybmFsQXR0YWNobWVudCBhdHRhY2htZW50ID0gZmFjdG9yeS5jcmVhdGVFeHRlcm5hbEF0dGFjaG1lbnQoKTsgICAgCQorICAgIAlhdHRhY2htZW50LnNldEF0dGFjaFRvKCJzY2E6Y29tcG9uZW50Iik7CisgICAgCQorICAgIAlJbnRlbnQgaW50ZW50ID0gZmFjdG9yeS5jcmVhdGVJbnRlbnQoKTsKKyAgICAJaW50ZW50LnNldE5hbWUobmV3IFFOYW1lKCJodHRwOi8vdGVzdCIsICJyZWxpYWJpbGl0eSIpKTsKKyAgICAJYXR0YWNobWVudC5nZXRJbnRlbnRzKCkuYWRkKGludGVudCk7CisgICAgCQorICAgIAlQb2xpY3lTZXQgcG9saWN5U2V0ID0gZmFjdG9yeS5jcmVhdGVQb2xpY3lTZXQoKTsKKyAgICAJcG9saWN5U2V0LnNldE5hbWUobmV3IFFOYW1lKCJodHRwOi8vdGVzdCIsICJyZWxpYWJpbGl0eSIpKTsKKyAgICAJYXR0YWNobWVudC5nZXRQb2xpY3lTZXRzKCkuYWRkKHBvbGljeVNldCk7CisgICAgCSAgICAKKyAgICAJYXNzZXJ0RXF1YWxzKCJzY2E6Y29tcG9uZW50IiwgYXR0YWNobWVudC5nZXRBdHRhY2hUbygpKTsKKyAgICAJYXNzZXJ0RXF1YWxzKGludGVudCwgYXR0YWNobWVudC5nZXRJbnRlbnRzKCkuZ2V0KDApKTsKKyAgICAJYXNzZXJ0RXF1YWxzKHBvbGljeVNldCwgYXR0YWNobWVudC5nZXRQb2xpY3lTZXRzKCkuZ2V0KDApKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2Jhc2UtcnVudGltZS1wb20vcG9tLnhtbCBiL21vZHVsZXMvYmFzZS1ydW50aW1lLXBvbS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZDE1N2IKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2Jhc2UtcnVudGltZS1wb20vcG9tLnhtbApAQCAtMCwwICsxLDI5NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktbW9kdWxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgQmFzZSBSdW50aW1lIFBPTTwvbmFtZT4NCisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4NCisNCisgICAgPCEtLSANCisgICAgICAgICBQcm92aWRlcyBhIG1pbmltdW0gc2V0IG9mIGZ1bmN0aW9uIGZvciBydW5uaW5nIGNvbXBvc2l0ZXMgdXNpbmcgaW1wbGVtZW50YXRpb24uamF2YSANCisgICAgICAgICBhbmQgbG9jYWwgd2lyaW5nLiBPdGhlciBleHRlbnNpb25zIGNhbiBiZSBhZGRlZCB0byB0aGlzIGJhc2Ugd2hlbiByZXF1aXJlZCANCisgICAgLS0+DQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZG9tYWluLW5vZGU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24td2ViLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktbGF1bmNoZXI8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWNsaWVudC1pbXBsPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlLXNwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpldHR5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amV0dHktdXRpbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zaGVsbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS13aW5rPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3MtcnVudGltZS1qYXh3cy1yaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1wb2xpY3ktc2VjdXJpdHk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorPCEtLSBBbGwgdGhlIHNjZGwgbW9kdWxlcyAgLS0+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1hdG9tPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctY29tZXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1jb3JiYTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWVqYjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWh0dHA8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qc29ucDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWpzb25ycGM8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1yZXN0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcm1pPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3M8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tYnBlbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPCEtLSBkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXhyczwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeSAtLT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1weXRob248L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tc2NyaXB0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXNwcmluZzwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi13ZWI8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24td2lkZ2V0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKzwhLS0gdGhlc2UgcmVtYWluaW5nIGRlcGVuZGVuY2llcyBhcmUgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcgSkRLNiwgc28gdXNlIGEgc2NvcGUgb2YgcHJvdmlkZWQgIC0tPg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1zdGF4LWFwaV8xLjBfc3BlYzwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4xLjAuMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndzdHgtYXNsPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zdGF4PC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RheC1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmphdmF4LnhtbC5iaW5kPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheGItYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguYWN0aXZhdGlvbjwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmF0aW9uPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnN1bi54bWwuYmluZDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXhiLWltcGw8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4xLjEyPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC54bWwud3M8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4d3MtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgICAgIDxleGNsdXNpb25zPg0KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLnNvYXA8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zYWFqLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQorICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguYW5ub3RhdGlvbjwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qc3IyNTAtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguandzPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjE4MS1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+MS4wLU1SMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLnN0cmVhbTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGF4LWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4xLjAtMjwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UgYi9tb2R1bGVzL2Jhc2UtcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFCnJlbmFtZSB0byBtb2R1bGVzL2Jhc2UtcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UgYi9tb2R1bGVzL2Jhc2UtcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL05PVElDRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL05PVElDRQpyZW5hbWUgdG8gbW9kdWxlcy9iYXNlLXJ1bnRpbWUtcG9tL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0IGIvbW9kdWxlcy9iYXNlLXJ1bnRpbWUtcG9tL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzaGFkZXMvYmFzZS9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dApyZW5hbWUgdG8gbW9kdWxlcy9iYXNlLXJ1bnRpbWUtcG9tL3NyYy9tYWluL3Jlc291cmNlcy9SRUFETUUudHh0CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctYXRvbS1qcy1kb2pvL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2F0b20vanMvZG9qby9BdG9tQmluZGluZ0phdmFzY3JpcHRQcm94eUZhY3RvcnlJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctYXRvbS1qcy1kb2pvL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2F0b20vanMvZG9qby9BdG9tQmluZGluZ0phdmFzY3JpcHRQcm94eUZhY3RvcnlJbXBsLmphdmEKaW5kZXggYWJjM2MwYy4uY2E2Y2ZmMiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWF0b20tanMtZG9qby9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9hdG9tL2pzL2Rvam8vQXRvbUJpbmRpbmdKYXZhc2NyaXB0UHJveHlGYWN0b3J5SW1wbC5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1hdG9tLWpzLWRvam8vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvYXRvbS9qcy9kb2pvL0F0b21CaW5kaW5nSmF2YXNjcmlwdFByb3h5RmFjdG9yeUltcGwuamF2YQpAQCAtNiwxNSArNiwxNSBAQAogICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCisgKgogICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAorICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQogICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuYXRvbS5qcy5kb2pvOwpAQCAtMzQsOCArMzQsOCBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eud2ViLmphdmFzY3JpcHQuSmF2YXNjcmlwdFByb3h5RmFjdG9yeTsKIAogcHVibGljIGNsYXNzIEF0b21CaW5kaW5nSmF2YXNjcmlwdFByb3h5RmFjdG9yeUltcGwgaW1wbGVtZW50cyBKYXZhc2NyaXB0UHJveHlGYWN0b3J5IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBRTmFtZSBOQU1FID0gbmV3IFFOYW1lKCJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiLCAiYmluZGluZy5hdG9tIik7Ci0gICAgICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIE5BTUUgPSBBdG9tQmluZGluZy5UWVBFOworCiAgICAgcHVibGljIENsYXNzPD8+IGdldE1vZGVsVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIEF0b21CaW5kaW5nLmNsYXNzOwogICAgIH0KQEAgLTQzLDcgKzQzLDcgQEAKICAgICBwdWJsaWMgUU5hbWUgZ2V0UU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBOQU1FOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0SmF2YXNjcmlwdFByb3h5RmlsZSgpIHsKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQpAQCAtNjUsMTMgKzY1LDEzIEBACiAgICAgICAgICAgICAoKFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSkgZXByKS5nZXRJbnZvY2F0aW9uQ2hhaW5zKCk7CiAgICAgICAgICAgICB0YXJnZXRFbmRwb2ludCA9IGVwci5nZXRUYXJnZXRFbmRwb2ludCgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIEJpbmRpbmcgYmluZGluZyA9IHRhcmdldEVuZHBvaW50LmdldEJpbmRpbmcoKTsKLSAgICAgICAgCisKICAgICAgICAgVVJJIHRhcmdldFVSSSA9IFVSSS5jcmVhdGUoYmluZGluZy5nZXRVUkkoKSk7CiAgICAgICAgIFN0cmluZyB0YXJnZXRQYXRoID0gdGFyZ2V0VVJJLmdldFBhdGgoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiAidHVzY2FueS5BdG9tU2VydmljZShcIiIgKyB0YXJnZXRQYXRoICsgIlwiKSI7ICAgICAgICAKKworICAgICAgICByZXR1cm4gInR1c2NhbnkuQXRvbVNlcnZpY2UoXCIiICsgdGFyZ2V0UGF0aCArICJcIikiOwogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWF0b20tcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9hdG9tL3Byb3ZpZGVyL0F0b21TZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctYXRvbS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2F0b20vcHJvdmlkZXIvQXRvbVNlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YQppbmRleCAxNTVkMDdhLi5iYzgxNDlhIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctYXRvbS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2F0b20vcHJvdmlkZXIvQXRvbVNlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctYXRvbS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2F0b20vcHJvdmlkZXIvQXRvbVNlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpAQCAtOTUsNyArOTUsMTUgQEAKICAgICAgICAgICAgIGJpbmRpbmdVUkkgKz0gIi8iOwogICAgICAgICB9CiAKLSAgICAgICAgc2VydmxldEhvc3QuYWRkU2VydmxldE1hcHBpbmcoYmluZGluZ1VSSSwgc2VydmxldCk7CisgICAgICAgIFN0cmluZyBtYXBwZWRVUkkgPSBzZXJ2bGV0SG9zdC5hZGRTZXJ2bGV0TWFwcGluZyhiaW5kaW5nVVJJLCBzZXJ2bGV0KTsKKyAgICAgICAgU3RyaW5nIGRlcGxveWVkVVJJID0gbWFwcGVkVVJJOworICAgICAgICBpZiAoZGVwbG95ZWRVUkkuZW5kc1dpdGgoIioiKSkgeworICAgICAgICAgICAgZGVwbG95ZWRVUkkgPSBkZXBsb3llZFVSSS5zdWJzdHJpbmcoMCwgZGVwbG95ZWRVUkkubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZGVwbG95ZWRVUkkuZW5kc1dpdGgoIi8iKSkgeworICAgICAgICAgICAgZGVwbG95ZWRVUkkgPSBkZXBsb3llZFVSSS5zdWJzdHJpbmcoMCwgZGVwbG95ZWRVUkkubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgfQorICAgICAgICBiaW5kaW5nLnNldFVSSShkZXBsb3llZFVSSSk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL0xJQ0VOU0UgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxMThhYjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9MSUNFTlNFCkBAIC0wLDAgKzEsMjM4IEBACisNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQNCisgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvDQorDQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9ODQorDQorICAgMS4gRGVmaW5pdGlvbnMuDQorDQorICAgICAgIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwNCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4NCisNCisgICAgICAiTGljZW5zb3IiIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieQ0KKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4NCisNCisgICAgICAiTGVnYWwgRW50aXR5IiBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsDQorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbg0KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sDQorICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlDQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3INCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUNCisgICAgICBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5Lg0KKw0KKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkNCisgICAgICBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLg0KKw0KKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLA0KKyAgICAgIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gc29mdHdhcmUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24NCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLg0KKw0KKyAgICAgICJPYmplY3QiIGZvcm0gc2hhbGwgbWVhbiBhbnkgZm9ybSByZXN1bHRpbmcgZnJvbSBtZWNoYW5pY2FsDQorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dA0KKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwNCisgICAgICBhbmQgY29udmVyc2lvbnMgdG8gb3RoZXIgbWVkaWEgdHlwZXMuDQorDQorICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3INCisgICAgICBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhDQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrDQorICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4NCisNCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0DQorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQ0KKyAgICAgIGVkaXRvcmlhbCByZXZpc2lvbnMsIGFubm90YXRpb25zLCBlbGFib3JhdGlvbnMsIG9yIG90aGVyIG1vZGlmaWNhdGlvbnMNCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3Nlcw0KKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbg0KKyAgICAgIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwNCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLg0KKw0KKyAgICAgICJDb250cmlidXRpb24iIHNoYWxsIG1lYW4gYW55IHdvcmsgb2YgYXV0aG9yc2hpcCwgaW5jbHVkaW5nDQorICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucw0KKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQ0KKyAgICAgIHN1Ym1pdHRlZCB0byBMaWNlbnNvciBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXINCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YNCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCINCisgICAgICBtZWFucyBhbnkgZm9ybSBvZiBlbGVjdHJvbmljLCB2ZXJiYWwsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbiBzZW50DQorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8NCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLA0KKyAgICAgIGFuZCBpc3N1ZSB0cmFja2luZyBzeXN0ZW1zIHRoYXQgYXJlIG1hbmFnZWQgYnksIG9yIG9uIGJlaGFsZiBvZiwgdGhlDQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0DQorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UNCisgICAgICBkZXNpZ25hdGVkIGluIHdyaXRpbmcgYnkgdGhlIGNvcHlyaWdodCBvd25lciBhcyAiTm90IGEgQ29udHJpYnV0aW9uLiINCisNCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQ0KKyAgICAgIG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZA0KKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLg0KKw0KKyAgIDIuIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZg0KKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwNCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQ0KKyAgICAgIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBEZXJpdmF0aXZlIFdvcmtzIG9mLA0KKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQ0KKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uDQorDQorICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mDQorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLA0KKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlDQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsDQorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssDQorICAgICAgd2hlcmUgc3VjaCBsaWNlbnNlIGFwcGxpZXMgb25seSB0byB0aG9zZSBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUNCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcg0KKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykNCisgICAgICB3aXRoIHRoZSBXb3JrIHRvIHdoaWNoIHN1Y2ggQ29udHJpYnV0aW9uKHMpIHdhcyBzdWJtaXR0ZWQuIElmIFlvdQ0KKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhDQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaw0KKyAgICAgIG9yIGEgQ29udHJpYnV0aW9uIGluY29ycG9yYXRlZCB3aXRoaW4gdGhlIFdvcmsgY29uc3RpdHV0ZXMgZGlyZWN0DQorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcw0KKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQ0KKyAgICAgIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4NCisNCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQ0KKyAgICAgIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mIGluIGFueSBtZWRpdW0sIHdpdGggb3Igd2l0aG91dA0KKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91DQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6DQorDQorICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3INCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQNCisNCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzDQorICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZA0KKw0KKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3Jrcw0KKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kDQorICAgICAgICAgIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssDQorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YNCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZA0KKw0KKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cw0KKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0DQorICAgICAgICAgIGluY2x1ZGUgYSByZWFkYWJsZSBjb3B5IG9mIHRoZSBhdHRyaWJ1dGlvbiBub3RpY2VzIGNvbnRhaW5lZA0KKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QNCisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lDQorICAgICAgICAgIG9mIHRoZSBmb2xsb3dpbmcgcGxhY2VzOiB3aXRoaW4gYSBOT1RJQ0UgdGV4dCBmaWxlIGRpc3RyaWJ1dGVkDQorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3INCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsDQorICAgICAgICAgIHdpdGhpbiBhIGRpc3BsYXkgZ2VuZXJhdGVkIGJ5IHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpZiBhbmQNCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzDQorICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQNCisgICAgICAgICAgZG8gbm90IG1vZGlmeSB0aGUgTGljZW5zZS4gWW91IG1heSBhZGQgWW91ciBvd24gYXR0cmlidXRpb24NCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUNCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkDQorICAgICAgICAgIHRoYXQgc3VjaCBhZGRpdGlvbmFsIGF0dHJpYnV0aW9uIG5vdGljZXMgY2Fubm90IGJlIGNvbnN0cnVlZA0KKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuDQorDQorICAgICAgWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kDQorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucw0KKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3INCisgICAgICBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwNCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgNCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLg0KKw0KKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwNCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsNCisgICAgICBieSBZb3UgdG8gdGhlIExpY2Vuc29yIHNoYWxsIGJlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZg0KKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLg0KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkNCisgICAgICB0aGUgdGVybXMgb2YgYW55IHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IHlvdSBtYXkgaGF2ZSBleGVjdXRlZA0KKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4NCisNCisgICA2LiBUcmFkZW1hcmtzLiBUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgdGhlIHRyYWRlDQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLA0KKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQ0KKyAgICAgIG9yaWdpbiBvZiB0aGUgV29yayBhbmQgcmVwcm9kdWNpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIE5PVElDRSBmaWxlLg0KKw0KKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcg0KKyAgICAgIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2gNCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywNCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3INCisgICAgICBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucw0KKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEENCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUNCisgICAgICBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkNCisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuDQorDQorICAgOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksDQorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsDQorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkNCisgICAgICBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZQ0KKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwNCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGENCisgICAgICByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlDQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLA0KKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsDQorICAgICAgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvcg0KKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4NCisNCisgICA5LiBBY2NlcHRpbmcgV2FycmFudHkgb3IgQWRkaXRpb25hbCBMaWFiaWxpdHkuIFdoaWxlIHJlZGlzdHJpYnV0aW5nDQorICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwNCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LA0KKyAgICAgIG9yIG90aGVyIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyBhbmQvb3IgcmlnaHRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzDQorICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkNCisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZg0KKyAgICAgIG9mIGFueSBvdGhlciBDb250cmlidXRvciwgYW5kIG9ubHkgaWYgWW91IGFncmVlIHRvIGluZGVtbmlmeSwNCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkNCisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uDQorICAgICAgb2YgeW91ciBhY2NlcHRpbmcgYW55IHN1Y2ggd2FycmFudHkgb3IgYWRkaXRpb25hbCBsaWFiaWxpdHkuDQorDQorICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TDQorDQorICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLg0KKw0KKyAgICAgIFRvIGFwcGx5IHRoZSBBcGFjaGUgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nDQorICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIg0KKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlDQorICAgICAgdGhlIGJyYWNrZXRzISkgIFRoZSB0ZXh0IHNob3VsZCBiZSBlbmNsb3NlZCBpbiB0aGUgYXBwcm9wcmlhdGUNCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGENCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlDQorICAgICAgc2FtZSAicHJpbnRlZCBwYWdlIiBhcyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgZWFzaWVyDQorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLg0KKw0KKyAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQ0KKw0KKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOw0KKyAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4NCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisNCisgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorDQorICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKw0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KK0FwYWNoZSBUdXNjYW55IFNDQSBmb3IgSmF2YSBTdWJjb21wb25lbnRzDQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT06IA0KKw0KK1RoZSBUdXNjYW55IFNDQSBmb3IgSmF2YSByZWxlYXNlIGluY2x1ZGVzIGEgbnVtYmVyIG9mIHN1YmNvbXBvbmVudHMgd2l0aA0KK3NlcGFyYXRlIGNvcHlyaWdodCBub3RpY2VzIGFuZCBsaWNlbnNlIHRlcm1zLiBZb3VyIHVzZSBvZiB0aGUgc291cmNlDQorY29kZSBmb3IgdGhlIHRoZXNlIHN1YmNvbXBvbmVudHMgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kDQorY29uZGl0aW9ucyBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2VzLg0KKw0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorDQorVGhpcyBtb2R1bGUgaW5jbHVkZXMgZmlsZXMgdW5kZXIgdGhlIGZvbGxvd2luZyBNSVQgbGljZW5zZToNCisNCitDb3B5cmlnaHQgKGMpIDx5ZWFyPiA8Y29weXJpZ2h0IGhvbGRlcnM+DQorDQorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQ0KK29mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsDQoraW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cw0KK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwNCitjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMNCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KKw0KK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluDQorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuDQorDQorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1INCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUNCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwNCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElODQorVEhFIFNPRlRXQVJFLg0KKw0KKw0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MzM0MgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMzEgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KK1NDQS1WZXJzaW9uOiAxLjENCitCdW5kbGUtTmFtZTogQXBhY2hlIFR1c2NhbnkgU0NBIENvbWV0IEJpbmRpbmcgTW9kZWwNCitCdW5kbGUtVmVuZG9yOiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24NCitCdW5kbGUtVmVyc2lvbjogMi4wLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLUxpY2Vuc2U6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC50eHQNCitCdW5kbGUtRGVzY3JpcHRpb246IEFwYWNoZSBUdXNjYW55IFNDQSBDb21ldCBCaW5kaW5nIE1vZGVsDQorSW1wb3J0LVBhY2thZ2U6IGphdmF4LnNlcnZsZXQ7dmVyc2lvbj0iMi41LjAiLA0KKyBqYXZheC5zZXJ2bGV0Lmh0dHA7dmVyc2lvbj0iMi41LjAiLA0KKyBvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMsDQorIG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5uZXQsDQorIG9yZy5hcGFjaGUuaHR0cDt2ZXJzaW9uPSI0LjAuMSIsDQorIG9yZy5hcGFjaGUuaHR0cC5jbGllbnQ7dmVyc2lvbj0iNC4wLjAiLA0KKyBvcmcuYXBhY2hlLmh0dHAuY2xpZW50Lm1ldGhvZHM7dmVyc2lvbj0iNC4wLjAiLA0KKyBvcmcuYXBhY2hlLmh0dHAuY2xpZW50LnV0aWxzO3ZlcnNpb249IjQuMC4wIiwNCisgb3JnLmFwYWNoZS5odHRwLmNvbm47dmVyc2lvbj0iNC4wLjAiLA0KKyBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jbGllbnQ7dmVyc2lvbj0iNC4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0O3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0Lmh0dHA7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXI7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWU7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuY29kZWhhdXMuamFja3NvbiwNCisgb3JnLmNvZGVoYXVzLmphY2tzb24ubWFwDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LnJ1bnRpbWUNCitCdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL05PVElDRSBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL05PVElDRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL05PVElDRQpjb3B5IHRvIG1vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL05PVElDRQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvcG9tLnhtbCBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhM2ZmNAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3BvbS54bWwKQEAgLTAsMCArMSw4NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCistLT4NCis8cHJvamVjdD4NCisJPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKwk8cGFyZW50Pg0KKwkJPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisJCTxhcnRpZmFjdElkPnR1c2NhbnktbW9kdWxlczwvYXJ0aWZhY3RJZD4NCisJCTx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisJCTxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKwk8L3BhcmVudD4NCisNCisJPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisJPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWNvbWV0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorCTxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBDb21ldCBCaW5kaW5nIFJ1bnRpbWU8L25hbWU+DQorCTxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+DQorDQorCTxkZXBlbmRlbmNpZXM+DQorCQk8ZGVwZW5kZW5jeT4NCisJCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKwkJCTxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorCQkJPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKwkJCTxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorCQk8L2RlcGVuZGVuY3k+DQorCQk8ZGVwZW5kZW5jeT4NCisJCQk8Z3JvdXBJZD5vcmcuYXRtb3NwaGVyZTwvZ3JvdXBJZD4NCisJCQk8YXJ0aWZhY3RJZD5hdG1vc3BoZXJlLWNvbW1vbnM8L2FydGlmYWN0SWQ+DQorCQkJPHZlcnNpb24+MC42LjE8L3ZlcnNpb24+DQorCQk8L2RlcGVuZGVuY3k+DQorCQk8ZGVwZW5kZW5jeT4NCisJCQk8Z3JvdXBJZD5vcmcuYXRtb3NwaGVyZTwvZ3JvdXBJZD4NCisJCQk8YXJ0aWZhY3RJZD5hdG1vc3BoZXJlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorCQkJPHZlcnNpb24+MC42LjE8L3ZlcnNpb24+DQorCQk8L2RlcGVuZGVuY3k+DQorCQk8ZGVwZW5kZW5jeT4NCisJCQk8Z3JvdXBJZD5jb20uZ29vZ2xlLmNvZGUuZ3NvbjwvZ3JvdXBJZD4NCisJCQk8YXJ0aWZhY3RJZD5nc29uPC9hcnRpZmFjdElkPg0KKwkJCTx2ZXJzaW9uPjEuNDwvdmVyc2lvbj4NCisJCTwvZGVwZW5kZW5jeT4NCisJCTxkZXBlbmRlbmN5Pg0KKwkJCTxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQorCQkJPGFydGlmYWN0SWQ+Z2Vyb25pbW8tc2VydmxldF8zLjBfc3BlYzwvYXJ0aWZhY3RJZD4NCisJCQk8dmVyc2lvbj4xLjA8L3ZlcnNpb24+DQorCQkJPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCisJCTwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpldHR5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xOTwvdmVyc2lvbj4NCisJCQk8c2NvcGU+dGVzdDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorCTwvZGVwZW5kZW5jaWVzPg0KKw0KKwk8cmVwb3NpdG9yaWVzPg0KKwkJPHJlcG9zaXRvcnk+DQorCQkJPGlkPmdzb24tZ29vZ2xlY29kZS1yZXBvc2l0b3J5PC9pZD4NCisJCQk8dXJsPmh0dHA6Ly9nb29nbGUtZ3Nvbi5nb29nbGVjb2RlLmNvbS9zdm4vbWF2ZW5yZXBvPC91cmw+DQorCQkJPHNuYXBzaG90cz4NCisJCQkJPGVuYWJsZWQ+dHJ1ZTwvZW5hYmxlZD4NCisJCQk8L3NuYXBzaG90cz4NCisJCQk8cmVsZWFzZXM+DQorCQkJCTxlbmFibGVkPnRydWU8L2VuYWJsZWQ+DQorCQkJPC9yZWxlYXNlcz4NCisJCTwvcmVwb3NpdG9yeT4NCisJPC9yZXBvc2l0b3JpZXM+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvQ29tZXRCaW5kaW5nUHJvdmlkZXJGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9ydW50aW1lL0NvbWV0QmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNWZkOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9ydW50aW1lL0NvbWV0QmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LnJ1bnRpbWU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQuQ29tZXRCaW5kaW5nOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5odHRwLlNlcnZsZXRIb3N0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5odHRwLlNlcnZsZXRIb3N0SGVscGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlJlZmVyZW5jZUJpbmRpbmdQcm92aWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlNlcnZpY2VCaW5kaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50UmVmZXJlbmNlOworCisvKioKKyAqIEZhY3RvcnkgZm9yIGJpbmRpbmcgcHJvdmlkZXJzLgorICovCitwdWJsaWMgY2xhc3MgQ29tZXRCaW5kaW5nUHJvdmlkZXJGYWN0b3J5IGltcGxlbWVudHMgQmluZGluZ1Byb3ZpZGVyRmFjdG9yeTxDb21ldEJpbmRpbmc+IHsKKworICAgIC8qKgorICAgICAqIFVuZGVybHlpbmcgc2VydmxldCBob3N0LiBJbmplY3RlZCBieSBjb25zdHJ1Y3Rvci4KKyAgICAgKi8KKyAgICBwcml2YXRlIGZpbmFsIFNlcnZsZXRIb3N0IHNlcnZsZXRIb3N0OworCisgICAgLyoqCisgICAgICogQ29uc3RydWN0b3IuCisgICAgICovCisgICAgcHVibGljIENvbWV0QmluZGluZ1Byb3ZpZGVyRmFjdG9yeShmaW5hbCBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGV4dGVuc2lvblBvaW50cykgeworICAgICAgICB0aGlzLnNlcnZsZXRIb3N0ID0gU2VydmxldEhvc3RIZWxwZXIuZ2V0U2VydmxldEhvc3QoZXh0ZW5zaW9uUG9pbnRzKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQ2xhc3M8Q29tZXRCaW5kaW5nPiBnZXRNb2RlbFR5cGUoKSB7CisgICAgICAgIHJldHVybiBDb21ldEJpbmRpbmcuY2xhc3M7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHByb3ZpZGVyIGZvciBhIHJlZmVyZW5jZSB0aGF0IGhhcyBjb21ldCBiaW5kaW5nIHNwZWNpZmllZCBpbgorICAgICAqIHRoZSBzY2RsLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgY3JlYXRlUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyKGZpbmFsIFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludCkgeworICAgICAgICByZXR1cm4gbmV3IENvbWV0UmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyKGVuZHBvaW50KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEgcHJvdmlkZXIgZm9yIGEgc2VydmljZSB0aGF0IGhhcyBjb21ldCBiaW5kaW5nIHNwZWNpZmllZCBpbiB0aGUKKyAgICAgKiBzY2RsLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyIGNyZWF0ZVNlcnZpY2VCaW5kaW5nUHJvdmlkZXIoZmluYWwgUnVudGltZUVuZHBvaW50IGVuZHBvaW50KSB7CisgICAgICAgIHJldHVybiBuZXcgQ29tZXRTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyKGVuZHBvaW50LCB0aGlzLnNlcnZsZXRIb3N0KTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvQ29tZXRJbnZva2VyLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9ydW50aW1lL0NvbWV0SW52b2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzNTM1NzEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9ydW50aW1lL0NvbWV0SW52b2tlci5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LnJ1bnRpbWU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkVuZHBvaW50UmVmZXJlbmNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsKKworLyoqCisgKiBJbnZva2VyIGZvciBhIHNlcnZpY2UgYmluZGluZy4gSW52b2tpbmcgaXMgbWFkZSBmcm9tIGNsaWVudCBKYXZhc2NyaXB0IHNvIG5vCisgKiBiZWhhdmlvciBpcyBuZWVkZWQuCisgKi8KK3B1YmxpYyBjbGFzcyBDb21ldEludm9rZXIgaW1wbGVtZW50cyBJbnZva2VyIHsKKworICAgIC8qKgorICAgICAqIFRoZSBpbnZva2VkIG9wZXJhdGlvbi4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbjsKKworICAgIC8qKgorICAgICAqIFRoZSBlbmRwb2ludCB0byB3aGljaCB0aGUgb3BlcmF0aW9uIGJlbG9uZ3MuCisgICAgICovCisgICAgcHJvdGVjdGVkIEVuZHBvaW50UmVmZXJlbmNlIGVuZHBvaW50OworCisgICAgLyoqCisgICAgICogRGVmYXVsdCBjb25zdHJ1Y3Rvci4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIHRoZSBvcGVyYXRpb24KKyAgICAgKiBAcGFyYW0gZW5kcG9pbnQgdGhlIGVuZHBvaW50CisgICAgICovCisgICAgcHVibGljIENvbWV0SW52b2tlcihmaW5hbCBPcGVyYXRpb24gb3BlcmF0aW9uLCBmaW5hbCBFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludCkgeworICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKKyAgICAgICAgdGhpcy5lbmRwb2ludCA9IGVuZHBvaW50OworICAgIH0KKworICAgIC8qKgorICAgICAqIE5vIGJlaGF2aW9yLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBNZXNzYWdlIGludm9rZShmaW5hbCBNZXNzYWdlIG1zZykgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvQ29tZXRSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvQ29tZXRSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQ3MGUzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvcnVudGltZS9Db21ldFJlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LnJ1bnRpbWU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkVuZHBvaW50UmVmZXJlbmNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlJlZmVyZW5jZUJpbmRpbmdQcm92aWRlcjsKKworLyoqCisgKiBQcm92aWRlciBmb3IgcmVmZXJlbmNlcyB0aGF0IGhhdmUgY29tZXQgYmluZGluZyBzcGVjaWZpZWQgaW4gdGhlIHNjZGwuIE5vdAorICogdXNlZCBhcyBjb21ldCBiaW5kaW5nIHJlZmVyZW5jZXMgd291bGQgb2NjdXIgaW4gY2xpZW50IGJyb3dzZXIncyBKYXZhc2NyaXB0LgorICovCitwdWJsaWMgY2xhc3MgQ29tZXRSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgaW1wbGVtZW50cyBSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgeworCisgICAgLyoqCisgICAgICogRW5kcG9pbnQgZm9yIHdoaWNoIHRoZSBiaW5kaW5nIHByb3ZpZGVyIGlzIGNyZWF0ZWQuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludDsKKworICAgIHB1YmxpYyBDb21ldFJlZmVyZW5jZUJpbmRpbmdQcm92aWRlcihmaW5hbCBFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludCkgeworICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEludm9rZXIgY3JlYXRlSW52b2tlcihmaW5hbCBPcGVyYXRpb24gb3BlcmF0aW9uKSB7CisgICAgICAgIHJldHVybiBuZXcgQ29tZXRJbnZva2VyKG9wZXJhdGlvbiwgdGhpcy5lbmRwb2ludCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogTm8gYmVoYXZpb3IuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc3RhcnQoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogTm8gYmVoYXZpb3IuCisgICAgICovCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSW50ZXJmYWNlQ29udHJhY3QgZ2V0QmluZGluZ0ludGVyZmFjZUNvbnRyYWN0KCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c09uZVdheUludm9jYXRpb24oKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvcnVudGltZS9Db21ldFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvQ29tZXRTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjMGI1YgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvQ29tZXRTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQucnVudGltZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9uZW50U2VydmljZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQucnVudGltZS5qYXZhc2NyaXB0LkphdmFzY3JpcHRHZW5lcmF0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0Lmh0dHAuU2VydmxldEhvc3Q7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlNlcnZpY2VCaW5kaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsKKworLyoqCisgKiBQcm92aWRlciBmb3Igc2VydmljZXMgaGF2aW5nIGNvbWV0IGJpbmRpbmcgc3BlY2lmaWVkIGluIHRoZSBzY2RsLgorICovCitwdWJsaWMgY2xhc3MgQ29tZXRTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyIGltcGxlbWVudHMgU2VydmljZUJpbmRpbmdQcm92aWRlciB7CisKKyAgICAvKioKKyAgICAgKiBTZXJ2aWNlJ3MgZW5kcG9pbnQuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQ7CisKKyAgICAvKioKKyAgICAgKiBUaGUgdW5kZXJseWluZyBzZXJ2bGV0IGhvc3QuCisgICAgICovCisgICAgcHJpdmF0ZSBmaW5hbCBTZXJ2bGV0SG9zdCBzZXJ2bGV0SG9zdDsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yLgorICAgICAqIAorICAgICAqIEBwYXJhbSBlbmRwb2ludCB0aGUgZ2l2ZW4gZW5kcG9pbnQKKyAgICAgKiBAcGFyYW0gc2VydmxldEhvc3QgdGhlIGdpdmVuIHNlcnZsZXQgaG9zdAorICAgICAqLworICAgIHB1YmxpYyBDb21ldFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIoZmluYWwgUnVudGltZUVuZHBvaW50IGVuZHBvaW50LCBmaW5hbCBTZXJ2bGV0SG9zdCBzZXJ2bGV0SG9zdCkgeworICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7CisgICAgICAgIHRoaXMuc2VydmxldEhvc3QgPSBzZXJ2bGV0SG9zdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHN0YXJ0IHRoZSBwcm92aWRlci4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzdGFydCgpIHsKKyAgICAgICAgU2VydmxldEZhY3RvcnkucmVnaXN0ZXJTZXJ2bGV0KHRoaXMuc2VydmxldEhvc3QpOworICAgICAgICBmaW5hbCBDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgPSB0aGlzLmVuZHBvaW50LmdldFNlcnZpY2UoKTsKKyAgICAgICAgZmluYWwgSW50ZXJmYWNlIHNlcnZpY2VJbnRlcmZhY2UgPSBzZXJ2aWNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuZ2V0SW50ZXJmYWNlKCk7CisgICAgICAgIEphdmFzY3JpcHRHZW5lcmF0b3IuZ2VuZXJhdGVTZXJ2aWNlUHJveHkoc2VydmljZSk7CisgICAgICAgIGZvciAoZmluYWwgT3BlcmF0aW9uIG9wZXJhdGlvbiA6IHNlcnZpY2VJbnRlcmZhY2UuZ2V0T3BlcmF0aW9ucygpKSB7CisgICAgICAgICAgICBKYXZhc2NyaXB0R2VuZXJhdG9yLmdlbmVyYXRlTWV0aG9kUHJveHkoc2VydmljZSwgb3BlcmF0aW9uKTsKKyAgICAgICAgICAgIFNlcnZsZXRGYWN0b3J5LmFkZE9wZXJhdGlvbih0aGlzLmVuZHBvaW50LCBvcGVyYXRpb24pOworICAgICAgICB9CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzdG9wIHRoZSBwcm92aWRlci4KKyAgICAgKi8KKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzdG9wKCkgeworICAgICAgICBTZXJ2bGV0RmFjdG9yeS51bnJlZ2lzdGVyU2VydmxldCh0aGlzLnNlcnZsZXRIb3N0KTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgSW50ZXJmYWNlQ29udHJhY3QgZ2V0QmluZGluZ0ludGVyZmFjZUNvbnRyYWN0KCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c09uZVdheUludm9jYXRpb24oKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvcnVudGltZS9TZXJ2bGV0RmFjdG9yeS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvcnVudGltZS9TZXJ2bGV0RmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMjQ0YjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9ydW50aW1lL1NlcnZsZXRGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LnJ1bnRpbWU7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0Lmh0dHAuU2VydmxldEhvc3Q7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lRW5kcG9pbnQ7CitpbXBvcnQgb3JnLmF0bW9zcGhlcmUuY3ByLkF0bW9zcGhlcmVTZXJ2bGV0OworCisvKioKKyAqIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBjcmVhdGUgdHdvIHNlcnZsZXRzOiBvbmUgZXhwb3NpbmcgYWxsIHRoZSBjb21ldAorICogc2VydmljZXMsIHRoZSBvdGhlciBvbmUgZXhwb3NpbmcgdGhlIGphdmFzY3JpcHQgdG9vbGtpdC4gRXhwb3NpbmcgYWxsIGNvbWV0CisgKiBzZXJ2aWNlcyB0aHJvdWdoIGEgc2luZ2xlIHNlcnZsZXQgaXMgbmVlZGVkIGFzIHRoZSBicm93c2VycyBhcmUgdW5kZXJnb25lIGJ5CisgKiB0aGUgdHdvIGh0dHAgY29ubmVjdGlvbiBsaW1pdCBzbyBhbGwgY29tZXQgc2VydmljZXMgc2hvdWxkIHNlbmQgdGhlaXIKKyAqIHJlc3BvbnNlcyB2aWEgdGhlIHNhbWUgaHR0cCBjb25uZWN0aW9uIHRvIHRoZSBzYW1lIGNsaWVudC4gRGlzcGF0Y2hpbmcgdG8gdGhlCisgKiBjb3JyZXNwb25kaW5nIGVuZHBvaW50IGFuZCBvcGVyYXRpb24gaXMgZG9uZSBpbnRlcm5hbGx5IHVzaW5nIEplcnNleSBSRVNUZnVsCisgKiBXZWIgU2VydmljZXMgaW50ZWdyYXRpb24gd2l0aCB0aGUgQXRtb3NwaGVyZVNlcnZsZXQuIFRoZSBKYXZhc2NyaXB0IHRvb2xraXQKKyAqIHNlcnZsZXQgaXMgdW5pcXVlIGFzIGl0IGlzIG5vdCB0aWVkIHRvIGFueSBvZiB0aGUgc2VydmljZXMgLSBpdCBvZmZlcnMgYQorICogZ2xvYmFsIEFQSS4KKyAqLworcHVibGljIGZpbmFsIGNsYXNzIFNlcnZsZXRGYWN0b3J5IHsKKworICAgIC8qKgorICAgICAqIEluaXQtcGFyYW0ga2V5IGZvciB0aGUgQXRtb3NwaGVyZVNlcnZsZXQgZGVmaW5pbmcgd2hlcmUgdG8gbG9vayBmb3IKKyAgICAgKiBKZXJzZXkgY2xhc3Nlcy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFDS0FHRV9LRVkgPSAiY29tLnN1bi5qZXJzZXkuY29uZmlnLnByb3BlcnR5LnBhY2thZ2VzIjsKKworICAgIC8qKgorICAgICAqIFBhY2thZ2Ugb2YgdGhlIGNsYXNzIGhhbmRsaW5nIGRpc3BhdGNoaW5nIHRvIGVuZHBvaW50cy4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUEFDS0FHRV9WQUxVRSA9ICJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQucnVudGltZS5oYW5kbGVyIjsKKworICAgIC8qKgorICAgICAqIFBhY2thZ2Ugb2YgdGhlIGNsYXNzIGhhbmRsaW5nIEphdmFzY3JpcHQgdG9vbGtpdCByZXRyaWV2YWwuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEpTX1BBQ0tBR0VfVkFMVUUgPSAib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LnJ1bnRpbWUuamF2YXNjcmlwdCI7CisKKyAgICAvKioKKyAgICAgKiBQcm9wZXJ0eSBpbiB0aGUgU2VydmxldENvbnRleHQgd2hlcmUgZW5kcG9pbnRzIGFyZSBhZGRlZCBpbmNyZW1lbnRhbGx5IGFzCisgICAgICogdGhlIFR1c2NhbnkgcnVudGltZSBjYWxscyB0aGUgQ29tZXRTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyIGZvciBlYWNoIGNvbWV0CisgICAgICogc2VydmljZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBFTkRQT0lOVFNfS0VZID0gIm9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5jb21ldC5lbmRwb2ludHMiOworCisgICAgLyoqCisgICAgICogUHJvcGVydHkgaW4gdGhlIFNlcnZsZXRDb250ZXh0IHdoZXJlIG9wZXJhdGlvbnMgYXJlIGFkZGVkIGluY3JlbWVudGFsbHkKKyAgICAgKiBhcyB0aGUgQ29tZXRTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyIGlzIGNhbGxpbmcgdGhlIHJlZ2lzdGVyU2VydmxldCBtZXRob2QKKyAgICAgKiBmb3IgZWFjaCBjb21ldCBzZXJ2aWNlIG1ldGhvZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBPUEVSQVRJT05TX0tFWSA9ICJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQub3BlcmF0aW9ucyI7CisKKyAgICAvKioKKyAgICAgKiBQYXRoIHdoZXJlIHNlcnZpY2VzIHdpbGwgYmUgZXhwb3NlZC4KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBQQVRIID0gIi90dXNjYW55LWNvbWV0LyoiOworCisgICAgLyoqCisgICAgICogUGF0aCB3aGVyZSBKYXZhc2NyaXB0IHRvb2xraXQgd2lsbCBiZSBleHBvc2VkLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpTX1BBVEggPSAiL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29tZXRDb21wb25lbnRDb250ZXh0LmpzLyoiOworCisgICAgLyoqCisgICAgICogVGhlIHNlcnZsZXQgdGhhdCBpcyBleHBvc2luZyB0aGUgY29tZXQgc2VydmljZXMuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgQXRtb3NwaGVyZVNlcnZsZXQgY29tZXRTZXJ2bGV0ID0gbnVsbDsKKworICAgIC8qKgorICAgICAqIFRoZSBzZXJ2bGV0IHRoYXQgaXMgZXhwb3NpbmcgdGhlIEphdmFzY3JpcHQgdG9vbGtpdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBBdG1vc3BoZXJlU2VydmxldCBqYXZhc2NyaXB0U2VydmxldCA9IG51bGw7CisKKyAgICAvKioKKyAgICAgKiBQcml2YXRlIGNvbnN0cnVjdG9yIGZvciB0aGUgc2luZ2xldG9uIGNsYXNzLgorICAgICAqLworICAgIHByaXZhdGUgU2VydmxldEZhY3RvcnkoKSB7CisgICAgfQorCisgICAgLyoqCisgICAgICogTWV0aG9kIGNhbGxlZCBieSBDb21ldFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIgZm9yIGVhY2ggZW5kcG9pbnQgaW4gb3JkZXIKKyAgICAgKiB0byBjcmVhdGUgdGhlIHR3byBzaW5nbGV0b24gc2VydmxldHMuCisgICAgICogCisgICAgICogQHBhcmFtIHNlcnZsZXRIb3N0IHRoZSB1bmRlcmx5aW5nIHNlcnZsZXQgaG9zdAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgcmVnaXN0ZXJTZXJ2bGV0KGZpbmFsIFNlcnZsZXRIb3N0IHNlcnZsZXRIb3N0KSB7CisgICAgICAgIGlmIChTZXJ2bGV0RmFjdG9yeS5jb21ldFNlcnZsZXQgPT0gbnVsbCkgeworICAgICAgICAgICAgU2VydmxldEZhY3RvcnkuY29tZXRTZXJ2bGV0ID0gbmV3IEF0bW9zcGhlcmVTZXJ2bGV0KCk7CisgICAgICAgICAgICBTZXJ2bGV0RmFjdG9yeS5jb21ldFNlcnZsZXQuYWRkSW5pdFBhcmFtZXRlcihTZXJ2bGV0RmFjdG9yeS5QQUNLQUdFX0tFWSwgU2VydmxldEZhY3RvcnkuUEFDS0FHRV9WQUxVRSk7CisgICAgICAgICAgICBzZXJ2bGV0SG9zdC5hZGRTZXJ2bGV0TWFwcGluZyhTZXJ2bGV0RmFjdG9yeS5QQVRILCBTZXJ2bGV0RmFjdG9yeS5jb21ldFNlcnZsZXQpOworICAgICAgICAgICAgLy8gc3RvcmUgb3BlcmF0aW9ucyBhbmQgY29ycmVzcG9uZGluZyBlbmRwb2ludCBpbiB0aGUgU2VydmxldENvbnRleHQKKyAgICAgICAgICAgIC8vIHNvIHRoYXQgdGhleSBjYW4gYmUgcmV0cmlldmVkIGZyb20gaW5zaWRlIHRoZSB3ZWIgc2VydmljZSBtZXRob2RzCisgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBSdW50aW1lRW5kcG9pbnQ+IGVuZHBvaW50cyA9IG5ldyBIYXNoTWFwPFN0cmluZywgUnVudGltZUVuZHBvaW50PigpOworICAgICAgICAgICAgU2VydmxldEZhY3RvcnkuY29tZXRTZXJ2bGV0LmdldFNlcnZsZXRDb250ZXh0KCkuc2V0QXR0cmlidXRlKFNlcnZsZXRGYWN0b3J5LkVORFBPSU5UU19LRVksIGVuZHBvaW50cyk7CisgICAgICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBPcGVyYXRpb24+IG9wZXJhdGlvbnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE9wZXJhdGlvbj4oKTsKKyAgICAgICAgICAgIFNlcnZsZXRGYWN0b3J5LmNvbWV0U2VydmxldC5nZXRTZXJ2bGV0Q29udGV4dCgpLnNldEF0dHJpYnV0ZShTZXJ2bGV0RmFjdG9yeS5PUEVSQVRJT05TX0tFWSwgb3BlcmF0aW9ucyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFNlcnZsZXRGYWN0b3J5LmphdmFzY3JpcHRTZXJ2bGV0ID09IG51bGwpIHsKKyAgICAgICAgICAgIFNlcnZsZXRGYWN0b3J5LmphdmFzY3JpcHRTZXJ2bGV0ID0gbmV3IEF0bW9zcGhlcmVTZXJ2bGV0KCk7CisgICAgICAgICAgICBTZXJ2bGV0RmFjdG9yeS5qYXZhc2NyaXB0U2VydmxldC5hZGRJbml0UGFyYW1ldGVyKFNlcnZsZXRGYWN0b3J5LlBBQ0tBR0VfS0VZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2bGV0RmFjdG9yeS5KU19QQUNLQUdFX1ZBTFVFKTsKKyAgICAgICAgICAgIHNlcnZsZXRIb3N0LmFkZFNlcnZsZXRNYXBwaW5nKFNlcnZsZXRGYWN0b3J5LkpTX1BBVEgsIFNlcnZsZXRGYWN0b3J5LmphdmFzY3JpcHRTZXJ2bGV0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIE1ldGhvZCBjYWxsZWQgYnkgQ29tZXRTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyIGZvciBlYWNoIGVuZHBvaW50IG9wZXJhdGlvbgorICAgICAqIGluIG9yZGVyIHRvIHN0b3JlIGFsbCB0aGUgb3BlcmF0aW9ucyB0aGUgc2VydmxldCB3aWxsIHNlcnZlLgorICAgICAqIAorICAgICAqIEBwYXJhbSBlbmRwb2ludCB0aGUgZW5kcG9pbnQKKyAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIHRoZSBvcGVyYXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHN5bmNocm9uaXplZCB2b2lkIGFkZE9wZXJhdGlvbihmaW5hbCBSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQsIGZpbmFsIE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHVybCA9ICIvIiArIGVuZHBvaW50LmdldFNlcnZpY2UoKS5nZXROYW1lKCkgKyAiLyIgKyBvcGVyYXRpb24uZ2V0TmFtZSgpOworICAgICAgICBmaW5hbCBNYXA8U3RyaW5nLCBSdW50aW1lRW5kcG9pbnQ+IGVuZHBvaW50cyA9CisgICAgICAgICAgICAoTWFwPFN0cmluZywgUnVudGltZUVuZHBvaW50PilTZXJ2bGV0RmFjdG9yeS5jb21ldFNlcnZsZXQuZ2V0U2VydmxldENvbnRleHQoKQorICAgICAgICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoU2VydmxldEZhY3RvcnkuRU5EUE9JTlRTX0tFWSk7CisgICAgICAgIGVuZHBvaW50cy5wdXQodXJsLCBlbmRwb2ludCk7CisgICAgICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9wZXJhdGlvbj4gb3BlcmF0aW9ucyA9CisgICAgICAgICAgICAoTWFwPFN0cmluZywgT3BlcmF0aW9uPilTZXJ2bGV0RmFjdG9yeS5jb21ldFNlcnZsZXQuZ2V0U2VydmxldENvbnRleHQoKQorICAgICAgICAgICAgICAgIC5nZXRBdHRyaWJ1dGUoU2VydmxldEZhY3RvcnkuT1BFUkFUSU9OU19LRVkpOworICAgICAgICBvcGVyYXRpb25zLnB1dCh1cmwsIG9wZXJhdGlvbik7CisgICAgfQorCisgICAgLyoqCisgICAgICogTWV0aG9kIGNhbGxlZCBieSBDb21ldFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIgZm9yIGVhY2ggZW5kcG9pbnQgb3BlcmF0aW9uCisgICAgICogaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSB0d28gc2VydmxldHMuCisgICAgICogCisgICAgICogQHBhcmFtIHNlcnZsZXRIb3N0IHRoZSB1bmRlcmx5aW5nIHNlcnZsZXQgaG9zdAorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgc3luY2hyb25pemVkIHZvaWQgdW5yZWdpc3RlclNlcnZsZXQoZmluYWwgU2VydmxldEhvc3Qgc2VydmxldEhvc3QpIHsKKyAgICAgICAgc2VydmxldEhvc3QucmVtb3ZlU2VydmxldE1hcHBpbmcoU2VydmxldEZhY3RvcnkuUEFUSCk7CisgICAgICAgIHNlcnZsZXRIb3N0LnJlbW92ZVNlcnZsZXRNYXBwaW5nKFNlcnZsZXRGYWN0b3J5LkpTX1BBVEgpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvcnVudGltZS9oYW5kbGVyL0NvbWV0QmluZGluZ0hhbmRsZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvaGFuZGxlci9Db21ldEJpbmRpbmdIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEyYjgzNAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvaGFuZGxlci9Db21ldEJpbmRpbmdIYW5kbGVyLmphdmEKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LnJ1bnRpbWUuaGFuZGxlcjsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC53cy5ycy5Gb3JtUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBPU1Q7CitpbXBvcnQgamF2YXgud3MucnMuUGF0aDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoUGFyYW07CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CitpbXBvcnQgamF2YXgud3MucnMuY29yZS5Db250ZXh0OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LnJ1bnRpbWUuU2VydmxldEZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuRGF0YVR5cGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lRW5kcG9pbnQ7CitpbXBvcnQgb3JnLmF0bW9zcGhlcmUuYW5ub3RhdGlvbi5Ccm9hZGNhc3Q7CitpbXBvcnQgb3JnLmF0bW9zcGhlcmUuY3ByLkJyb2FkY2FzdGVyOworaW1wb3J0IG9yZy5hdG1vc3BoZXJlLmNwci5EZWZhdWx0QnJvYWRjYXN0ZXI7CitpbXBvcnQgb3JnLmF0bW9zcGhlcmUuamVyc2V5LkJyb2FkY2FzdGFibGU7CitpbXBvcnQgb3JnLmF0bW9zcGhlcmUuamVyc2V5LlN1c3BlbmRSZXNwb25zZTsKKworaW1wb3J0IGNvbS5nb29nbGUuZ3Nvbi5Hc29uOworaW1wb3J0IGNvbS5zdW4uamVyc2V5LnNwaS5jb250YWluZXIuc2VydmxldC5QZXJTZXNzaW9uOworCisvKioKKyAqIENsYXNzIHNlcnZpbmcgY2FsbHMgY29taW5nIGZvciBjb21ldCBzZXJ2aWNlcyBhbmQgb3BlcmF0aW9ucy4KKyAqLworQFBhdGgoIi8iKQorQFByb2R1Y2VzKCJ0ZXh0L2h0bWw7Y2hhcnNldD1JU08tODg1OS0xIikKK0BQZXJTZXNzaW9uCitwdWJsaWMgY2xhc3MgQ29tZXRCaW5kaW5nSGFuZGxlciB7CisKKyAgICAvKioKKyAgICAgKiBUaGUgb2JqZWN0IHVzZWQgdG8gc3VzcGVuZCB0aGUgcmVzcG9uc2UgYW5kIHNlbmQgYXN5bmMgcmVzcG9uc2VzIGJhY2sgdG8KKyAgICAgKiBjbGllbnQuCisgICAgICovCisgICAgcHJpdmF0ZSBCcm9hZGNhc3RlciBicm9hZGNhc3RlcjsKKworICAgIC8qKgorICAgICAqIFRoZSBzZXJ2aWNlIGVuZHBvaW50cyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggb3BlcmF0aW9uLgorICAgICAqLworICAgIHByaXZhdGUgTWFwPFN0cmluZywgUnVudGltZUVuZHBvaW50PiBlbmRwb2ludHM7CisKKyAgICAvKioKKyAgICAgKiBUaGUgY29tZXQgb3BlcmF0aW9ucy4KKyAgICAgKi8KKyAgICBwcml2YXRlIE1hcDxTdHJpbmcsIE9wZXJhdGlvbj4gb3BlcmF0aW9uczsKKworICAgIC8qKgorICAgICAqIEpTT04gY29udmVydGVyLgorICAgICAqLworICAgIHByaXZhdGUgR3NvbiBnc29uOworCisgICAgLyoqCisgICAgICogVGhlIHVuZGVybHlpbmcgc2VydmxldCBjb250ZXh0LgorICAgICAqLworICAgIEBDb250ZXh0CisgICAgcHJpdmF0ZSBTZXJ2bGV0Q29udGV4dCBzYzsKKworICAgIC8qKgorICAgICAqIE1ldGhvZCBjYWxsZWQgYXQgY29tZXQgY29ubmVjdCB0aW1lLiBUaGlzIHN1c3BlbmRzIHRoZSByZXNwb25zZSBhbmQga2VlcHMKKyAgICAgKiB0aGUgY29ubmVjdGlvbiBvcGVuZWQuCisgICAgICogCisgICAgICogQHJldHVybiB0aGUgc3VzcGVuZGVkIHJlc3BvbnNlCisgICAgICovCisgICAgQEdFVAorICAgIHB1YmxpYyBTdXNwZW5kUmVzcG9uc2U8U3RyaW5nPiBjb25uZWN0KCkgeworICAgICAgICB0aGlzLmJyb2FkY2FzdGVyID0gbmV3IERlZmF1bHRCcm9hZGNhc3RlcigpOworICAgICAgICB0aGlzLmVuZHBvaW50cyA9IChNYXA8U3RyaW5nLCBSdW50aW1lRW5kcG9pbnQ+KXRoaXMuc2MuZ2V0QXR0cmlidXRlKFNlcnZsZXRGYWN0b3J5LkVORFBPSU5UU19LRVkpOworICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSAoTWFwPFN0cmluZywgT3BlcmF0aW9uPil0aGlzLnNjLmdldEF0dHJpYnV0ZShTZXJ2bGV0RmFjdG9yeS5PUEVSQVRJT05TX0tFWSk7CisgICAgICAgIHRoaXMuZ3NvbiA9IG5ldyBHc29uKCk7CisgICAgICAgIHJldHVybiBuZXcgU3VzcGVuZFJlc3BvbnNlLlN1c3BlbmRSZXNwb25zZUJ1aWxkZXI8U3RyaW5nPigpLmJyb2FkY2FzdGVyKHRoaXMuYnJvYWRjYXN0ZXIpLm91dHB1dENvbW1lbnRzKHRydWUpCisgICAgICAgICAgICAuYnVpbGQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNZXRob2QgY2FsbGVkIG9uIHNlcnZpY2UgY2FsbHMuCisgICAgICogCisgICAgICogQHBhcmFtIHNlcnZpY2Ugc2VydmljZSBjYWxsZWQKKyAgICAgKiBAcGFyYW0gbWV0aG9kIG9wZXJhdGlvbiBjYWxsZWQKKyAgICAgKiBAcGFyYW0gY2FsbGJhY2tNZXRob2QgdGhlIGNhbGxiYWNrIG1ldGhvZCBmcm9tIEphdmFzY3JpcHQKKyAgICAgKiBAcGFyYW0ganNvbkRhdGEgYXJndW1lbnRzIGZvciB0aGUgbWV0aG9kIHNlbnQgYXMgSlNPTiBhcnJheQorICAgICAqIEByZXR1cm4gb2JqZWN0IHVzZWQgYnkgdGhlIEJyb2FkY2FzdGVyIHRvIHNlbmQgcmVzcG9uc2UgdGhyb3VnaCB0aGUKKyAgICAgKiAgICAgICAgIHBlcnNpc3RlZCBjb25uZWN0aW9uCisgICAgICogQHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGlmIHByb2JsZW1zIG9jY3VyIGF0IHNlcnZpY2UgaW52b2NhdGlvbgorICAgICAqLworICAgIEBQT1NUCisgICAgQFBhdGgoIi97c2VydmljZX0ve21ldGhvZH0iKQorICAgIEBCcm9hZGNhc3QKKyAgICBwdWJsaWMgQnJvYWRjYXN0YWJsZSBjYWxsQW5kUmVzcG9uZChAUGF0aFBhcmFtKCJzZXJ2aWNlIikgZmluYWwgU3RyaW5nIHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQFBhdGhQYXJhbSgibWV0aG9kIikgZmluYWwgU3RyaW5nIG1ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBARm9ybVBhcmFtKCJjYWxsYmFjayIpIGZpbmFsIFN0cmluZyBjYWxsYmFja01ldGhvZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBARm9ybVBhcmFtKCJwYXJhbXMiKSBmaW5hbCBTdHJpbmcganNvbkRhdGEpIHRocm93cyBJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHVybCA9ICIvIiArIHNlcnZpY2UgKyAiLyIgKyBtZXRob2Q7CisgICAgICAgIGZpbmFsIFJ1bnRpbWVFbmRwb2ludCB3aXJlID0gdGhpcy5lbmRwb2ludHMuZ2V0KHVybCk7CisgICAgICAgIGZpbmFsIE9wZXJhdGlvbiBvcGVyYXRpb24gPSB0aGlzLm9wZXJhdGlvbnMuZ2V0KHVybCk7CisgICAgICAgIGZpbmFsIE9iamVjdFtdIGFyZ3MgPSBuZXcgT2JqZWN0W29wZXJhdGlvbi5nZXRJbnB1dFR5cGUoKS5nZXRMb2dpY2FsKCkuc2l6ZSgpXTsKKyAgICAgICAgZmluYWwgU3RyaW5nW10ganNvbiA9IHRoaXMucGFyc2VBcnJheShqc29uRGF0YSk7CisgICAgICAgIGludCBpbmRleCA9IDA7CisgICAgICAgIC8vIGNvbnZlcnQgZWFjaCBhcmd1bWVudCB0byB0aGUgY29ycmVzcG9uZGluZyBjbGFzcworICAgICAgICBmb3IgKGZpbmFsIERhdGFUeXBlPD8+IGRhdGFUeXBlIDogb3BlcmF0aW9uLmdldElucHV0VHlwZSgpLmdldExvZ2ljYWwoKSkgeworICAgICAgICAgICAgYXJnc1tpbmRleF0gPSB0aGlzLmdzb24uZnJvbUpzb24oanNvbltpbmRleF0sIGRhdGFUeXBlLmdldFBoeXNpY2FsKCkpOworICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgfQorICAgICAgICAvLyBpbnZva2UgdGhlIHNlcnZpY2Ugb3BlcmF0aW9uCisgICAgICAgIGZpbmFsIE9iamVjdCByZXNwb25zZSA9IHdpcmUuaW52b2tlKG9wZXJhdGlvbiwgYXJncyk7CisgICAgICAgIHJldHVybiBuZXcgQnJvYWRjYXN0YWJsZShjYWxsYmFja01ldGhvZCArICIoJC5zZWN1cmVFdmFsSlNPTignIiArIHRoaXMuZ3Nvbi50b0pzb24ocmVzcG9uc2UpICsgIicpKSIsICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3Rlcik7CisgICAgfQorCisgICAgLyoqCisgICAgICogUGFyc2UgdGhlIEpTT04gYXJyYXkgY29udGFpbmluZyB0aGUgYXJndW1lbnRzIGZvciB0aGUgbWV0aG9kIGNhbGwgaW4KKyAgICAgKiBvcmRlciB0byBhdm9pZCBjb252ZXJ0aW5nIEpTT04gdG8gT2JqZWN0W10uIENvbnZlcnRpbmcgZWFjaCBvYmplY3QKKyAgICAgKiBzZXBhcmF0ZWx5IHRvIGl0J3MgY29ycmVzcG9uZGluZyB0eXBlIGF2b2lkcyB0eXBlIG1pc21hdGNoIHByb2JsZW1zIGF0CisgICAgICogc2VydmljZSBpbnZvY2F0aW9uLgorICAgICAqIAorICAgICAqIEBwYXJhbSBqc29uQXJyYXkgdGhlIEpTT04gYXJyYXkKKyAgICAgKiBAcmV0dXJuIGFuIGFycmF5IG9mIEpTT04gZm9ybWF0dGVkIG9iamVjdHMKKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZ1tdIHBhcnNlQXJyYXkoZmluYWwgU3RyaW5nIGpzb25BcnJheSkgeworICAgICAgICBmaW5hbCBMaXN0PFN0cmluZz4gb2JqZWN0cyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBpbnQgYnJhY2tldE51bSA9IDA7CisgICAgICAgIGludCBwYXJOdW0gPSAwOworICAgICAgICBpbnQgc3RhcnRQb3MgPSAxOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGpzb25BcnJheS5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGpzb25BcnJheS5jaGFyQXQoaSkpIHsKKyAgICAgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgICAgICAgICAgYnJhY2tldE51bSsrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICd9JzoKKyAgICAgICAgICAgICAgICAgICAgYnJhY2tldE51bS0tOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgICAgICAgICAgcGFyTnVtKys7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJ10nOgorICAgICAgICAgICAgICAgICAgICBwYXJOdW0tLTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAnLCc6CisgICAgICAgICAgICAgICAgICAgIGlmICgoYnJhY2tldE51bSA9PSAwKSAmJiAocGFyTnVtID09IDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLmFkZChqc29uQXJyYXkuc3Vic3RyaW5nKHN0YXJ0UG9zLCBpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvcyA9IGkgKyAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gYWRkIGxhc3Qgb2JqZWN0CisgICAgICAgIG9iamVjdHMuYWRkKGpzb25BcnJheS5zdWJzdHJpbmcoc3RhcnRQb3MsIGpzb25BcnJheS5sZW5ndGgoKSAtIDEpKTsKKyAgICAgICAgcmV0dXJuIG9iamVjdHMudG9BcnJheShuZXcgU3RyaW5nW10ge30pOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvamF2YXNjcmlwdC9KYXZhc2NyaXB0R2VuZXJhdG9yLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9ydW50aW1lL2phdmFzY3JpcHQvSmF2YXNjcmlwdEdlbmVyYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMjA1NTkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9ydW50aW1lL2phdmFzY3JpcHQvSmF2YXNjcmlwdEdlbmVyYXRvci5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5jb21ldC5ydW50aW1lLmphdmFzY3JpcHQ7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvbmVudFNlcnZpY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworCisvKioKKyAqIFRoaXMgY2xhc3MgZ2VuZXJhdGVzIHByb3hpZXMgZm9yIHRoZSBjb21ldCBzZXJ2aWNlcy4KKyAqLworcHVibGljIGNsYXNzIEphdmFzY3JpcHRHZW5lcmF0b3IgeworCisgICAgLyoqCisgICAgICogTmFtZXNwYWNlIGZvciB0aGUgVHVzY2FueSBDb21ldCBKYXZhc2NyaXB0IHRvb2xraXQuCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSlNfTkFNRVNQQUNFID0gIlNDQSI7CisKKyAgICAvKioKKyAgICAgKiBOYW1lIGZvciB0aGUgU0NBIGNvbXBvbmVudCBjb250ZXh0LgorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT01QT05FTlRfQ09OVEVYVCA9ICJ0aGlzLkNvbWV0Q29tcG9uZW50Q29udGV4dCI7CisKKyAgICAvKioKKyAgICAgKiBOYW1lIGZvciB0aGUgb2JqZWN0IHBlcmZvcm1pbmcgY29tZXQgc3BlY2lmaWMgdGFza3MuCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRVU0NBTllfQ09NRVQgPSAiU0NBLlR1c2NhbnlDb21ldCI7CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZWQgSmF2YXNjcmlwdC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmdCdWZmZXIgamF2YXNjcmlwdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKKworICAgIC8qKgorICAgICAqIERlZmF1bHQgY29uc3RydWN0b3IgZm9yIHV0aWxpdHkgY2xhc3MuCisgICAgICovCisgICAgcHJpdmF0ZSBKYXZhc2NyaXB0R2VuZXJhdG9yKCkgeworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHRlciBmb3IgdGhlIGdlbmVyYXRlZCBKYXZhc2NyaXB0LgorICAgICAqIAorICAgICAqIEByZXR1cm4gdGhlIGdlbmVyYXRlZCBKYXZhc2NyaXB0CisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmdCdWZmZXIgZ2V0SmF2YXNjcmlwdCgpIHsKKyAgICAgICAgcmV0dXJuIEphdmFzY3JpcHRHZW5lcmF0b3IuamF2YXNjcmlwdDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZW5lcmF0ZXMgdGhlIHByb3h5IGZvciBhIHNlcnZpY2UuCisgICAgICogCisgICAgICogQHBhcmFtIHNlcnZpY2UgdGhlIHNlcnZpY2UgZm9yIHdoaWNoIGdlbmVyYXRpb24gaXMgcGVyZm9ybWVkCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGdlbmVyYXRlU2VydmljZVByb3h5KGZpbmFsIENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSkgeworICAgICAgICBKYXZhc2NyaXB0R2VuZXJhdG9yLmphdmFzY3JpcHQuYXBwZW5kKEphdmFzY3JpcHRHZW5lcmF0b3IuQ09NUE9ORU5UX0NPTlRFWFQgKyAiLiIKKyAgICAgICAgICAgICsgc2VydmljZS5nZXROYW1lKCkKKyAgICAgICAgICAgICsgIiA9IG5ldyBPYmplY3QoKTtcbiIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdlbmVyYXRlcyB0aGUgbWV0aG9kIGluc2lkZSB0aGUgc2VydmljZSBwcm94eSBmb3IgdGhlIHNwZWNpZmllZAorICAgICAqIG9wZXJhdGlvbi4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gc2VydmljZSB0aGUgc2VydmljZSBjb250YWluaW5nIHRoZSBvcGVyYXRpb24KKyAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIHRoZSBvcGVyYXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgZ2VuZXJhdGVNZXRob2RQcm94eShmaW5hbCBDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UsIGZpbmFsIE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKKyAgICAgICAgSmF2YXNjcmlwdEdlbmVyYXRvci5qYXZhc2NyaXB0LmFwcGVuZChKYXZhc2NyaXB0R2VuZXJhdG9yLkNPTVBPTkVOVF9DT05URVhUICsgIi4iCisgICAgICAgICAgICArIHNlcnZpY2UuZ2V0TmFtZSgpCisgICAgICAgICAgICArICIuIgorICAgICAgICAgICAgKyBvcGVyYXRpb24uZ2V0TmFtZSgpCisgICAgICAgICAgICArICIgPSBmdW5jdGlvbigiKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcGVyYXRpb24uZ2V0SW5wdXRUeXBlKCkuZ2V0TG9naWNhbCgpLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBKYXZhc2NyaXB0R2VuZXJhdG9yLmphdmFzY3JpcHQuYXBwZW5kKCJwIiArIGkgKyAiLCAiKTsKKyAgICAgICAgfQorICAgICAgICBKYXZhc2NyaXB0R2VuZXJhdG9yLmphdmFzY3JpcHQuYXBwZW5kKCJjYWxsYmFja01ldGhvZCkge1xuIik7CisgICAgICAgIC8vIHNlbmQgbWV0aG9kIGFyZ3VtZXRzIGFzIEpTT04gYXJyYXkKKyAgICAgICAgSmF2YXNjcmlwdEdlbmVyYXRvci5qYXZhc2NyaXB0LmFwcGVuZCgiICB2YXIgcGFyYW1zID0gW107XG4iKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvcGVyYXRpb24uZ2V0SW5wdXRUeXBlKCkuZ2V0TG9naWNhbCgpLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICBKYXZhc2NyaXB0R2VuZXJhdG9yLmphdmFzY3JpcHQuYXBwZW5kKCIgIHBhcmFtcy5wdXNoKHAiICsgaSArICIpO1xuIik7CisgICAgICAgIH0KKyAgICAgICAgSmF2YXNjcmlwdEdlbmVyYXRvci5qYXZhc2NyaXB0LmFwcGVuZCgiICAiICsgSmF2YXNjcmlwdEdlbmVyYXRvci5UVVNDQU5ZX0NPTUVUCisgICAgICAgICAgICArICIuY2FsbEFzeW5jKCciCisgICAgICAgICAgICArIHNlcnZpY2UuZ2V0TmFtZSgpCisgICAgICAgICAgICArICIvIgorICAgICAgICAgICAgKyBvcGVyYXRpb24uZ2V0TmFtZSgpCisgICAgICAgICAgICArICInLCAkLnRvSlNPTihwYXJhbXMpLCBjYWxsYmFja01ldGhvZCk7XG4iKTsKKyAgICAgICAgSmF2YXNjcmlwdEdlbmVyYXRvci5qYXZhc2NyaXB0LmFwcGVuZCgifVxuIik7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9ydW50aW1lL2phdmFzY3JpcHQvSmF2YXNjcmlwdFJlc291cmNlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9ydW50aW1lL2phdmFzY3JpcHQvSmF2YXNjcmlwdFJlc291cmNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI3NDAwOQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L3J1bnRpbWUvamF2YXNjcmlwdC9KYXZhc2NyaXB0UmVzb3VyY2UuamF2YQpAQCAtMCwwICsxLDYzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5jb21ldC5ydW50aW1lLmphdmFzY3JpcHQ7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5TZXF1ZW5jZUlucHV0U3RyZWFtOworCitpbXBvcnQgamF2YXgud3MucnMuR0VUOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGg7CitpbXBvcnQgamF2YXgud3MucnMuUHJvZHVjZXM7CisKKy8qKgorICogQ2xhc3Mgc2VydmluZyB0aGUgY2FsbHMgcGVyZm9ybWVkIHRvIHJldHJpZXZlIHRoZSBKYXZhc2NyaXB0IHRvb2xraXQuCisgKi8KK0BQYXRoKCIvIikKK0BQcm9kdWNlcygidGV4dC9qYXZhc2NyaXB0IikKK3B1YmxpYyBjbGFzcyBKYXZhc2NyaXB0UmVzb3VyY2UgeworCisgICAgLyoqCisgICAgICogRGVwZW5kZW5jaWVzIGZvciB0aGUgVHVzY2FueSBDb21ldCBKYXZhc2NyaXB0IEFQSS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBERVBFTkRFTkNJRVMgPSB7Ii9qcXVlcnkuYXRtb3NwaGVyZS5qcyIsICIvanF1ZXJ5Lmpzb24tMi4yLm1pbi5qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvY29tZXRDb21wb25lbnRDb250ZXh0LmpzIn07CisKKyAgICAvKioKKyAgICAgKiBNZXRob2QgY2FsbGVkIHdoZW4gdGhlIEphdmFzY3JpcHQgdG9vbGtpdCBpcyByZXF1ZXN0ZWQuCisgICAgICogCisgICAgICogQHJldHVybiBJbnB1dFN0cmVhbSBjb250YWluaW5nIHRoZSBKYXZhc2NyaXB0IGNvZGUuCisgICAgICovCisgICAgQEdFVAorICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRKYXZhc2NyaXB0KCkgeworICAgICAgICBJbnB1dFN0cmVhbSBzdHJlYW0gPSBudWxsOworICAgICAgICAvLyBhZGQgZGVwZW5kZW5jaWVzIGluIHRoZSBzcGVjaWZpZWQgb3JkZXIKKyAgICAgICAgZm9yIChmaW5hbCBTdHJpbmcgZGVwZW5kZW5jeSA6IEphdmFzY3JpcHRSZXNvdXJjZS5ERVBFTkRFTkNJRVMpIHsKKyAgICAgICAgICAgIGlmIChzdHJlYW0gPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHN0cmVhbSA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGRlcGVuZGVuY3kpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBuZXcgU2VxdWVuY2VJbnB1dFN0cmVhbShzdHJlYW0sIHRoaXMuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGRlcGVuZGVuY3kpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvLyBhZGQgZ2VuZXJhdGVkIHByb3hpZXMKKyAgICAgICAgZmluYWwgU3RyaW5nIGdlbmVyYXRlZEpzID0gSmF2YXNjcmlwdEdlbmVyYXRvci5nZXRKYXZhc2NyaXB0KCkudG9TdHJpbmcoKSArICJcbn0iOworICAgICAgICByZXR1cm4gbmV3IFNlcXVlbmNlSW5wdXRTdHJlYW0oc3RyZWFtLCBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oZ2VuZXJhdGVkSnMuZ2V0Qnl0ZXMoKSkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3RvcnkgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNmRiMzkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5CkBAIC0wLDAgKzEsMjAgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCisjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgYmluZGluZyBleHRlbnNpb24NCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQucnVudGltZS5Db21ldEJpbmRpbmdQcm92aWRlckZhY3Rvcnk7bW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LkNvbWV0QmluZGluZw0KKw0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9jb21ldENvbXBvbmVudENvbnRleHQuanMgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvY29tZXRDb21wb25lbnRDb250ZXh0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkOTI1NDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvY29tZXRDb21wb25lbnRDb250ZXh0LmpzCkBAIC0wLDAgKzEsNDggQEAKKworLyoqCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3ZhciBTQ0EgPSBuZXcgZnVuY3Rpb24oKSB7CisJCit0aGlzLlR1c2NhbnlDb21ldCA9IHsKKwlhcHBVcmw6ICd0dXNjYW55LWNvbWV0JywKKwljb25uZWN0ZWRFbmRwb2ludCA6IG51bGwsCisJY29ubmVjdCA6IGZ1bmN0aW9uKHRyYW5zcG9ydCkgeworCQkkLmF0bW9zcGhlcmUuc3Vic2NyaWJlKGRvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkgKyB0aGlzLmFwcFVybCwKKwkJCQl0aGlzLmNhbGxiYWNrLCAKKwkJCQkkLmF0bW9zcGhlcmUucmVxdWVzdCA9IHsKKwkJCQkJdHJhbnNwb3J0IDogdHJhbnNwb3J0CisJCQkJfSk7CisJCXRoaXMuY29ubmVjdGVkRW5kcG9pbnQgPSAkLmF0bW9zcGhlcmUucmVzcG9uc2U7CisJfSwKKwljYWxsQXN5bmMgOiBmdW5jdGlvbih1cmwsIHBhcmFtcywgY2FsbGJhY2tNZXRob2QpIHsKKwkJdGhpcy5jb25uZWN0ZWRFbmRwb2ludC5wdXNoKGRvY3VtZW50LmxvY2F0aW9uLnRvU3RyaW5nKCkKKwkJCQkrIHRoaXMuYXBwVXJsICsgJy8nICsgdXJsLAorCQkJCW51bGwsIAorCQkJCSQuYXRtb3NwaGVyZS5yZXF1ZXN0ID0geworCQkJCQltZXRob2QgOiAnUE9TVCcsCisJCQkJCWRhdGEgOiAnY2FsbGJhY2s9JyArIGNhbGxiYWNrTWV0aG9kLm5hbWUgKyAnJnBhcmFtcz0nICsgcGFyYW1zIAorCQkJCX0pOworCX0sCisJY2FsbGJhY2sgOiBmdW5jdGlvbihyZXNwb25zZSkgeworCQlldmFsKHJlc3BvbnNlLnJlc3BvbnNlQm9keSk7CisJfQorfTsKKwordGhpcy5Db21ldENvbXBvbmVudENvbnRleHQgPSBuZXcgT2JqZWN0KCk7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvanF1ZXJ5LmF0bW9zcGhlcmUuanMgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvanF1ZXJ5LmF0bW9zcGhlcmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI5NGM5ZgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9qcXVlcnkuYXRtb3NwaGVyZS5qcwpAQCAtMCwwICsxLDUzNCBAQAorLyoqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworalF1ZXJ5LmF0bW9zcGhlcmUgPSBmdW5jdGlvbigpCit7CisgICAgdmFyIGFjdGl2ZVJlcXVlc3Q7CisgICAgJCh3aW5kb3cpLnVubG9hZChmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoYWN0aXZlUmVxdWVzdCkKKyAgICAgICAgICAgIGFjdGl2ZVJlcXVlc3QuYWJvcnQoKTsKKyAgICB9KTsKKworICAgIHJldHVybiB7CisgICAgICAgIHZlcnNpb24gOiAwLjcsCisgICAgICAgIHJlc3BvbnNlIDogeworICAgICAgICAgICAgc3RhdHVzOiAyMDAsCisgICAgICAgICAgICByZXNwb25zZUJvZHkgOiAnJywKKyAgICAgICAgICAgIGhlYWRlcnMgOiBbXSwKKyAgICAgICAgICAgIHN0YXRlIDogIm1lc3NhZ2VSZWNlaXZlZCIsCisgICAgICAgICAgICB0cmFuc3BvcnQgOiAicG9sbGluZyIsCisgICAgICAgICAgICBwdXNoIDogW10sCisgICAgICAgICAgICBlcnJvcjogbnVsbCwKKyAgICAgICAgICAgIGlkIDogMAorICAgICAgICB9LAorCisgICAgICAgIHJlcXVlc3QgOiB7fSwKKyAgICAgICAgbG9nTGV2ZWwgOiAnaW5mbycsCisgICAgICAgIGNhbGxiYWNrczogW10sCisgICAgICAgIGFjdGl2ZVRyYW5zcG9ydCA6IG51bGwsCisgICAgICAgIHdlYnNvY2tldCA6IG51bGwsCisgICAgICAgIGtpbGxIaWRkZW5JRnJhbWUgOiBudWxsLAorCisgICAgICAgIHN1YnNjcmliZTogZnVuY3Rpb24odXJsLCBjYWxsYmFjaywgcmVxdWVzdCkKKyAgICAgICAgeworICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdCA9IGpRdWVyeS5leHRlbmQoeworICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDMwMDAwMCwKKyAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLAorICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LAorICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlIDogInRleHQvaHRtbDtjaGFyc2V0PUlTTy04ODU5LTEiLAorICAgICAgICAgICAgICAgIGNhY2hlOiB0cnVlLAorICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLAorICAgICAgICAgICAgICAgIGlmTW9kaWZpZWQ6IGZhbHNlLAorICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBudWxsLAorICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnJywKKyAgICAgICAgICAgICAgICB1cmwgOiB1cmwsCisgICAgICAgICAgICAgICAgZGF0YSA6ICcnLAorICAgICAgICAgICAgICAgIHN1c3BlbmQgOiB0cnVlLAorICAgICAgICAgICAgICAgIG1heFJlcXVlc3QgOiA2MCwKKyAgICAgICAgICAgICAgICBsYXN0SW5kZXggOiAwLAorICAgICAgICAgICAgICAgIGxvZ0xldmVsIDogICdpbmZvJywKKyAgICAgICAgICAgICAgICByZXF1ZXN0Q291bnQgOiAwLAorICAgICAgICAgICAgICAgIGZhbGxiYWNrVHJhbnNwb3J0IDogJ3N0cmVhbWluZycsCisgICAgICAgICAgICAgICAgdHJhbnNwb3J0IDogJ2xvbmctcG9sbGluZycKKworICAgICAgICAgICAgfSwgcmVxdWVzdCk7CisKKyAgICAgICAgICAgIGxvZ0xldmVsID0galF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC5sb2dMZXZlbCB8fCAnaW5mbyc7CisgICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLmFkZENhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5yZXF1ZXN0LmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChqUXVlcnkuYXRtb3NwaGVyZS5yZXF1ZXN0LnRyYW5zcG9ydCAhPSBqUXVlcnkuYXRtb3NwaGVyZS5hY3RpdmVUcmFuc3BvcnQpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5jbG9zZVN1c3BlbmRlZENvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLmFjdGl2ZVRyYW5zcG9ydCA9IGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QudHJhbnNwb3J0OworCisgICAgICAgICAgICBpZiAoalF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC50cmFuc3BvcnQgIT0gJ3dlYnNvY2tldCcpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5leGVjdXRlUmVxdWVzdCgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChqUXVlcnkuYXRtb3NwaGVyZS5yZXF1ZXN0LnRyYW5zcG9ydCA9PSAnd2Vic29ja2V0JykgeworICAgICAgICAgICAgICAgIGlmICghd2luZG93LldlYlNvY2tldCkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5sb2cobG9nTGV2ZWwsIFsiV2Vic29ja2V0IGlzIG5vdCBzdXBwb3J0ZWQsIHVzaW5nIHJlcXVlc3QuZmFsbGJhY2tUcmFuc3BvcnQiXSk7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QudHJhbnNwb3J0ID0galF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC5mYWxsYmFja1RyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUuZXhlY3V0ZVJlcXVlc3QoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLmV4ZWN1dGVXZWJTb2NrZXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgLyoqCisgICAgICAgICAqIEFsd2F5cyBtYWtlIHN1cmUgb25lIHRyYW5zcG9ydCBpcyB1c2VkLCBub3QgdHdvIGF0IHRoZSBzYW1lIHRpbWUgZXhjZXB0IGZvciBXZWJzb2NrZXQuCisgICAgICAgICAqLworICAgICAgICBjbG9zZVN1c3BlbmRlZENvbm5lY3Rpb24gOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAoYWN0aXZlUmVxdWVzdCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYWN0aXZlUmVxdWVzdC5hYm9ydCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoalF1ZXJ5LmF0bW9zcGhlcmUud2Vic29ja2V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS53ZWJzb2NrZXQuY2xvc2UoKTsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS53ZWJzb2NrZXQgPSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9LAorCisgICAgICAgIGV4ZWN1dGVSZXF1ZXN0OiBmdW5jdGlvbigpCisgICAgICAgIHsKKworICAgICAgICAgICAgaWYgKGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QudHJhbnNwb3J0ID09ICdzdHJlYW1pbmcnKSB7CisgICAgICAgICAgICAgICAgaWYgKCQuYnJvd3Nlci5tc2llKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLmllU3RyZWFtaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygd2luZG93LmFkZEV2ZW50U3RyZWFtKSA9PSAnZnVuY3Rpb24nKSB7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLm9wZXJhU3RyZWFtaW5nKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChqUXVlcnkuYXRtb3NwaGVyZS5yZXF1ZXN0LnJlcXVlc3RDb3VudCsrIDwgalF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC5tYXhSZXF1ZXN0KSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVzcG9uc2UucHVzaCA9IGZ1bmN0aW9uICh1cmwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5yZXF1ZXN0LmNhbGxiYWNrID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucHVibGlzaCh1cmwsIG51bGwsIGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QpOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3Q7CisgICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0galF1ZXJ5LmF0bW9zcGhlcmUucmVzcG9uc2U7CisgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QudHJhbnNwb3J0ICE9ICdwb2xsaW5nJykgeworICAgICAgICAgICAgICAgICAgICByZXNwb25zZS50cmFuc3BvcnQgPSByZXF1ZXN0LnRyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB2YXIgYWpheFJlcXVlc3Q7CisgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gZmFsc2U7CisgICAgICAgICAgICAgICAgaWYgKCQuYnJvd3Nlci5tc2llKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhY3RpdmV4bW9kZXMgPSBbIk1zeG1sMi5YTUxIVFRQIiwgIk1pY3Jvc29mdC5YTUxIVFRQIl0KKyAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3RpdmV4bW9kZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWpheFJlcXVlc3QgPSBuZXcgQWN0aXZlWE9iamVjdChhY3RpdmV4bW9kZXNbaV0pCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVzdCkgeworICAgICAgICAgICAgICAgICAgICBhamF4UmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LnN1c3BlbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWN0aXZlUmVxdWVzdCA9IGFqYXhSZXF1ZXN0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGFqYXhSZXF1ZXN0Lm9wZW4ocmVxdWVzdC5tZXRob2QsIHJlcXVlc3QudXJsLCB0cnVlKTsKKyAgICAgICAgICAgICAgICBhamF4UmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCJYLUF0bW9zcGhlcmUtRnJhbWV3b3JrIiwgalF1ZXJ5LmF0bW9zcGhlcmUudmVyc2lvbik7CisgICAgICAgICAgICAgICAgYWpheFJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigiWC1BdG1vc3BoZXJlLVRyYW5zcG9ydCIsIHJlcXVlc3QudHJhbnNwb3J0KTsKKyAgICAgICAgICAgICAgICBhamF4UmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKCJYLUNhY2hlLURhdGUiLCBuZXcgRGF0ZSgpKTsKKworICAgICAgICAgICAgICAgIGlmICghJC5icm93c2VyLm1zaWUpIHsKKyAgICAgICAgICAgICAgICAgICAgYWpheFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zdGF0dXMgPSBYTUxIdHRwUmVxdWVzdC5zdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID0gNDA0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zdGF0ZSA9ICJlcnJvciI7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5pbnZva2VDYWxsYmFjayhyZXNwb25zZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhamF4UmVxdWVzdC5hYm9ydCgpOworICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlUmVxdWVzdCA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhamF4UmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIganVua0ZvcldlYmtpdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGlmIChhamF4UmVxdWVzdC5yZWFkeVN0YXRlID09IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QgPSByZXF1ZXN0OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3VzcGVuZCAmJiBhamF4UmVxdWVzdC5zdGF0dXMgPT0gMjAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUuZXhlY3V0ZVJlcXVlc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQuYnJvd3Nlci5tc2llKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghJC5icm93c2VyLm1zaWUgJiYgYWpheFJlcXVlc3QucmVhZHlTdGF0ZSA9PSAzICYmIGFqYXhSZXF1ZXN0LnN0YXR1cyA9PSAyMDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVxdWVzdC5pZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC50cmFuc3BvcnQgPT0gJ3N0cmVhbWluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZUJvZHkgPSBhamF4UmVxdWVzdC5yZXNwb25zZVRleHQuc3Vic3RyaW5nKHJlcXVlc3QubGFzdEluZGV4LCBhamF4UmVxdWVzdC5yZXNwb25zZVRleHQubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Lmxhc3RJbmRleCA9IGFqYXhSZXF1ZXN0LnJlc3BvbnNlVGV4dC5sZW5ndGg7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2VCb2R5LmluZGV4T2YoIjwhLS0iKSAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdW5rRm9yV2Via2l0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2VCb2R5ID0gYWpheFJlcXVlc3QucmVzcG9uc2VUZXh0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzcG9uc2VCb2R5LmluZGV4T2YoInBhcmVudC5jYWxsYmFjayIpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcmVzcG9uc2UucmVzcG9uc2VCb2R5LmluZGV4T2YoIignIikgKyAyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSByZXNwb25zZS5yZXNwb25zZUJvZHkuaW5kZXhPZigiJykiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZUJvZHkgPSByZXNwb25zZS5yZXNwb25zZUJvZHkuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanVua0ZvcldlYmtpdCkgcmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLnN0YXR1cyA9IGFqYXhSZXF1ZXN0LnN0YXR1czsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5oZWFkZXJzID0gYWpheFJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID0gNDA0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC5zdXNwZW5kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSAibWVzc2FnZVJlY2VpdmVkIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSAibWVzc2FnZVB1Ymxpc2hlZCI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5pbnZva2VDYWxsYmFjayhyZXNwb25zZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYWpheFJlcXVlc3Quc2VuZChyZXF1ZXN0LmRhdGEpOworCisgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3Quc3VzcGVuZCkgeworICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmlkID0gc2V0VGltZW91dChmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFqYXhSZXF1ZXN0LmFib3J0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5zdWJzY3JpYmUocmVxdWVzdC51cmwsIG51bGwsIHJlcXVlc3QpOworCisgICAgICAgICAgICAgICAgICAgIH0sIHJlcXVlc3QudGltZW91dCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5sb2cobG9nTGV2ZWwsIFsiTWF4IHJlLWNvbm5lY3Rpb24gcmVhY2hlZC4iXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAgb3BlcmFTdHJlYW1pbmc6IGZ1bmN0aW9uKCkKKyAgICAgICAgeworCisgICAgICAgICAgICB2YXIgdXJsID0galF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC51cmw7CisgICAgICAgICAgICB2YXIgZXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdldmVudC1zb3VyY2UnKTsKKyAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGpRdWVyeS5hdG1vc3BoZXJlLnJlc3BvbnNlOworCisgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5yZXNwb25zZS5wdXNoID0gZnVuY3Rpb24gKHVybCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5yZXF1ZXN0LnRyYW5zcG9ydCA9ICdwb2xsaW5nJzsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5yZXF1ZXN0LmNhbGxiYWNrID0gbnVsbDsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5wdWJsaXNoKHVybCwgbnVsbCwgalF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdCk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBlcy5zZXRBdHRyaWJ1dGUoJ3NyYycsIHVybCk7CisgICAgICAgICAgICAvLyB3aXRob3V0IHRoaXMgY2hlY2sgb3BlcmEgOS41IHdvdWxkIG1ha2UgdHdvIGNvbm5lY3Rpb25zLgorICAgICAgICAgICAgaWYgKG9wZXJhLnZlcnNpb24oKSA8IDkuNSkgeworICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgb3BlcmFDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBqdW5rRm9yV2Via2l0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZUJvZHkgPSBldmVudC5kYXRhOworICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnQuZGF0YS5pbmRleE9mKCI8IS0tIikgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGp1bmtGb3JXZWJraXQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3BvbnNlQm9keS5pbmRleE9mKCJwYXJlbnQuY2FsbGJhY2siKSAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gcmVzcG9uc2UucmVzcG9uc2VCb2R5LmluZGV4T2YoIignIikgKyAyOworICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVuZCA9IHJlc3BvbnNlLnJlc3BvbnNlQm9keS5pbmRleE9mKCInKSIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UucmVzcG9uc2VCb2R5ID0gcmVzcG9uc2UucmVzcG9uc2VCb2R5LnN1YnN0cmluZyhzdGFydCwgZW5kKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChqdW5rRm9yV2Via2l0KSByZXR1cm47CisKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSAibWVzc2FnZVJlY2VpdmVkIjsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUuaW52b2tlQ2FsbGJhY2socmVzcG9uc2UpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGVzLmFkZEV2ZW50TGlzdGVuZXIoJ3BheWxvYWQnLCBvcGVyYUNhbGxiYWNrLCBmYWxzZSk7CisKKyAgICAgICAgfSwKKworICAgICAgICBpZVN0cmVhbWluZyA6IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIHVybCA9IGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QudXJsOworICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVzcG9uc2UucHVzaCA9IGZ1bmN0aW9uICh1cmwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC50cmFuc3BvcnQgPSAncG9sbGluZyc7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC5jYWxsYmFjayA9IG51bGw7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucHVibGlzaCh1cmwsIG51bGwsIGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdHJhbnNmZXJEb2MgPSBuZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKTsKKyAgICAgICAgICAgIHRyYW5zZmVyRG9jLm9wZW4oKTsKKyAgICAgICAgICAgIHRyYW5zZmVyRG9jLmNsb3NlKCk7CisgICAgICAgICAgICB2YXIgaWZyRGl2ID0gdHJhbnNmZXJEb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgICAgICB0cmFuc2ZlckRvYy5ib2R5LmFwcGVuZENoaWxkKGlmckRpdik7CisgICAgICAgICAgICBpZnJEaXYuaW5uZXJIVE1MID0gIjxpZnJhbWUgc3JjPSciICsgdXJsICsgIic+PC9pZnJhbWU+IjsKKyAgICAgICAgICAgIHRyYW5zZmVyRG9jLnBhcmVudFdpbmRvdy5jYWxsYmFjayA9IGpRdWVyeS5hdG1vc3BoZXJlLnN0cmVhbWluZ0NhbGxiYWNrOworICAgICAgICB9CisgICAgICAgICwKKworICAgICAgICBzdHJlYW1pbmdDYWxsYmFjayA6IGZ1bmN0aW9uKGFyZ3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGpRdWVyeS5hdG1vc3BoZXJlLnJlc3BvbnNlOworICAgICAgICAgICAgcmVzcG9uc2UudHJhbnNwb3J0ID0gInN0cmVhbWluZyI7CisgICAgICAgICAgICByZXNwb25zZS5zdGF0dXMgPSAyMDA7CisgICAgICAgICAgICByZXNwb25zZS5yZXNwb25zZUJvZHkgPSBhcmdzOworICAgICAgICAgICAgcmVzcG9uc2Uuc3RhdGUgPSAibWVzc2FnZVJlY2VpdmVkIjsKKworICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUuaW52b2tlQ2FsbGJhY2socmVzcG9uc2UpOworICAgICAgICB9CisgICAgICAgICwKKworICAgICAgICBleGVjdXRlV2ViU29ja2V0IDogZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgcmVxdWVzdCA9IGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3Q7CisgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5sb2cobG9nTGV2ZWwsIFsiSW52b2tpbmcgZXhlY3V0ZVdlYlNvY2tldCJdKTsKKyAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlc3BvbnNlLnRyYW5zcG9ydCA9ICJ3ZWJzb2NrZXQiOworICAgICAgICAgICAgdmFyIHVybCA9IGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QudXJsOworICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0galF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC5jYWxsYmFjazsKKyAgICAgICAgICAgIHZhciBsb2NhdGlvbiA9IHVybC5yZXBsYWNlKCdodHRwOicsICd3czonKS5yZXBsYWNlKCdodHRwczonLCAnd3NzOicpOworCisgICAgICAgICAgICB2YXIgd2Vic29ja2V0ID0gbmV3IFdlYlNvY2tldChsb2NhdGlvbik7CisgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS53ZWJzb2NrZXQgPSB3ZWJzb2NrZXQ7CisKKyAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlc3BvbnNlLnB1c2ggPSBmdW5jdGlvbiAodXJsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBkYXRhOworICAgICAgICAgICAgICAgIHZhciB3cyA9IGpRdWVyeS5hdG1vc3BoZXJlLndlYnNvY2tldDsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBkYXRhID0galF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC5kYXRhOworICAgICAgICAgICAgICAgICAgICB3cy5zZW5kKGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QuZGF0YSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5sb2cobG9nTGV2ZWwsIFsiV2Vic29ja2V0IGZhaWxlZC4gRG93bmdyYWRpbmcgdG8gQ29tZXQgYW5kIHJlc2VuZGluZyAiICsgZGF0YV0pOworICAgICAgICAgICAgICAgICAgICAvLyBXZWJzb2NrZXQgaXMgbm90IHN1cHBvcnRlZCwgcmVjb25uZWN0IHVzaW5nIHRoZSBmYWxsYmFjayB0cmFuc3BvcnQuCisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJhbnNwb3J0ID0gcmVxdWVzdC5mYWxsYmFja1RyYW5zcG9ydDsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdCA9IHJlcXVlc3Q7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLmV4ZWN1dGVSZXF1ZXN0KCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVwb3N0IHRoZSBkYXRhLgorICAgICAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5yZXF1ZXN0LnN1c3BlbmQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC5tZXRob2QgPSAnUE9TVCc7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QuZGF0YSA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlc3BvbnNlLnN0YXRlID0gJ21lc3NhZ2VSZWNlaXZlZCc7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlc3BvbnNlLnRyYW5zcG9ydCA9IHJlcXVlc3QuZmFsbGJhY2tUcmFuc3BvcnQ7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnB1Ymxpc2godXJsLCBudWxsLCBqUXVlcnkuYXRtb3NwaGVyZS5yZXF1ZXN0KTsKKworICAgICAgICAgICAgICAgICAgICB3cy5vbmNsb3NlID0gZnVuY3Rpb24obWVzc2FnZSkgeworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdzLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgd2Vic29ja2V0Lm9ub3BlbiA9IGZ1bmN0aW9uKG1lc3NhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVzcG9uc2Uuc3RhdGUgPSAnb3Blbm5pbmcnOworICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLmludm9rZUNhbGxiYWNrKGpRdWVyeS5hdG1vc3BoZXJlLnJlc3BvbnNlKTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIHdlYnNvY2tldC5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtZXNzYWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHZhciBkYXRhID0gbWVzc2FnZS5kYXRhOworICAgICAgICAgICAgICAgIGlmIChkYXRhLmluZGV4T2YoInBhcmVudC5jYWxsYmFjayIpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzdGFydCA9IGRhdGEuaW5kZXhPZigiKCciKSArIDI7CisgICAgICAgICAgICAgICAgICAgIHZhciBlbmQgPSBkYXRhLmluZGV4T2YoIicpIik7CisgICAgICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlc3BvbnNlLnJlc3BvbnNlQm9keSA9IGRhdGEuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVzcG9uc2UucmVzcG9uc2VCb2R5ID0gZGF0YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUuaW52b2tlQ2FsbGJhY2soalF1ZXJ5LmF0bW9zcGhlcmUucmVzcG9uc2UpOworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgd2Vic29ja2V0Lm9uZXJyb3IgPSBmdW5jdGlvbihtZXNzYWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlc3BvbnNlLnN0YXRlID0gJ2Vycm9yJzsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5pbnZva2VDYWxsYmFjayhqUXVlcnkuYXRtb3NwaGVyZS5yZXNwb25zZSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB3ZWJzb2NrZXQub25jbG9zZSA9IGZ1bmN0aW9uKG1lc3NhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUucmVzcG9uc2Uuc3RhdGUgPSAnY2xvc2VkJzsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5pbnZva2VDYWxsYmFjayhqUXVlcnkuYXRtb3NwaGVyZS5yZXNwb25zZSk7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgICwKKworICAgICAgICBhZGRDYWxsYmFjazogZnVuY3Rpb24oZnVuYykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGpRdWVyeS5pbkFycmF5KGZ1bmMsIGpRdWVyeS5hdG1vc3BoZXJlLmNhbGxiYWNrcykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5jYWxsYmFja3MucHVzaChmdW5jKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAsCisKKyAgICAgICAgcmVtb3ZlQ2FsbGJhY2s6IGZ1bmN0aW9uKGZ1bmMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChqUXVlcnkuaW5BcnJheShmdW5jLCBqUXVlcnkuYXRtb3NwaGVyZS5jYWxsYmFja3MpICE9IC0xKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUuY2FsbGJhY2tzLnNwbGljZShpbmRleCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLAorCisgICAgICAgIGludm9rZUNhbGxiYWNrOiBmdW5jdGlvbihyZXNwb25zZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGNhbGwgPSBmdW5jdGlvbiAoaW5kZXgsIGZ1bmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnVuYyhyZXNwb25zZSk7CisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5sb2cobG9nTGV2ZWwsIFsiSW52b2tpbmcgIiArIGpRdWVyeS5hdG1vc3BoZXJlLmNhbGxiYWNrcy5sZW5ndGggKyAiIGNhbGxiYWNrcyJdKTsKKyAgICAgICAgICAgIGlmIChqUXVlcnkuYXRtb3NwaGVyZS5jYWxsYmFja3MubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5lYWNoKGpRdWVyeS5hdG1vc3BoZXJlLmNhbGxiYWNrcywgY2FsbCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLAorCisgICAgICAgIHB1Ymxpc2g6IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2ssIHJlcXVlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QgPSBqUXVlcnkuZXh0ZW5kKHsKKyAgICAgICAgICAgICAgICBjb25uZWN0ZWQ6IGZhbHNlLAorICAgICAgICAgICAgICAgIHRpbWVvdXQ6IDYwMDAwLAorICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAorICAgICAgICAgICAgICAgIGhlYWRlcnM6IHt9LAorICAgICAgICAgICAgICAgIGNhY2hlOiB0cnVlLAorICAgICAgICAgICAgICAgIGFzeW5jOiB0cnVlLAorICAgICAgICAgICAgICAgIGlmTW9kaWZpZWQ6IGZhbHNlLAorICAgICAgICAgICAgICAgIGNhbGxiYWNrOiBudWxsLAorICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnJywKKyAgICAgICAgICAgICAgICB1cmwgOiB1cmwsCisgICAgICAgICAgICAgICAgZGF0YSA6ICcnLAorICAgICAgICAgICAgICAgIHN1c3BlbmQgOiBmYWxzZSwKKyAgICAgICAgICAgICAgICBtYXhSZXF1ZXN0IDogNjAsCisgICAgICAgICAgICAgICAgbG9nTGV2ZWwgOiAgJ2luZm8nLAorICAgICAgICAgICAgICAgIHJlcXVlc3RDb3VudCA6IDAsCisgICAgICAgICAgICAgICAgdHJhbnNwb3J0OiAncG9sbGluZycKKyAgICAgICAgICAgIH0sIHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLmFkZENhbGxiYWNrKGNhbGxiYWNrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QudHJhbnNwb3J0ID0gJ3BvbGxpbmcnOworICAgICAgICAgICAgaWYgKGpRdWVyeS5hdG1vc3BoZXJlLnJlcXVlc3QudHJhbnNwb3J0ICE9ICd3ZWJzb2NrZXQnKSB7CisgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUuZXhlY3V0ZVJlcXVlc3QoKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoalF1ZXJ5LmF0bW9zcGhlcmUucmVxdWVzdC50cmFuc3BvcnQgPT0gJ3dlYnNvY2tldCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoIXdpbmRvdy5XZWJTb2NrZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxlcnQoIldlYlNvY2tldCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgalF1ZXJ5LmF0bW9zcGhlcmUuZXhlY3V0ZVdlYlNvY2tldCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAsCisKKyAgICAgICAgdW5sb2FkOiBmdW5jdGlvbiAoYXJnKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd1bmxvYWQnLCBhcmcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndW5sb2FkJywgYXJnLCBmYWxzZSk7CisgICAgICAgICAgICB9IGVsc2UgeyAvLyBJRQorICAgICAgICAgICAgICAgIGRvY3VtZW50LmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIGFyZyk7CisgICAgICAgICAgICAgICAgd2luZG93LmF0dGFjaEV2ZW50KCdvbnVubG9hZCcsIGFyZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLAorCisgICAgICAgIGtpbGxfbG9hZF9iYXIgOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlmIChqUXVlcnkuYXRtb3NwaGVyZS5raWxsSGlkZGVuSUZyYW1lID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICBqUXVlcnkuYXRtb3NwaGVyZS5raWxsSGlkZGVuSUZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7CisgICAgICAgICAgICAgICAgdmFyIGlmciA9IGpRdWVyeS5hdG1vc3BoZXJlLmtpbGxIaWRkZW5JRnJhbWU7CisgICAgICAgICAgICAgICAgaWZyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOworICAgICAgICAgICAgICAgIGlmci5zdHlsZS53aWR0aCA9ICcwJzsKKyAgICAgICAgICAgICAgICBpZnIuc3R5bGUuaGVpZ2h0ID0gJzAnOworICAgICAgICAgICAgICAgIGlmci5zdHlsZS5ib3JkZXIgPSAnMCc7CisgICAgICAgICAgICAgICAgaWZyLnN0eWxlLm1hcmdpbiA9ICcwJzsKKyAgICAgICAgICAgICAgICBpZnIuc3R5bGUucGFkZGluZyA9ICcwJzsKKyAgICAgICAgICAgICAgICBpZnIuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJzsKKyAgICAgICAgICAgICAgICBpZnIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpZnIpOworICAgICAgICAgICAgaWZyLnNyYyA9ICdhYm91dDpibGFuayc7CisgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGlmcik7CisgICAgICAgIH0KKyAgICAgICAgLAorCisgICAgICAgIGxvZzogZnVuY3Rpb24gKGxldmVsLCBhcmdzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmNvbnNvbGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIGxvZ2dlciA9IHdpbmRvdy5jb25zb2xlW2xldmVsXTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGxvZ2dlciA9PSAnZnVuY3Rpb24nKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmFwcGx5KHdpbmRvdy5jb25zb2xlLCBhcmdzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLAorCisgICAgICAgIHdhcm46IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgbG9nKCd3YXJuJywgYXJndW1lbnRzKTsKKyAgICAgICAgfQorICAgICAgICAsCisKKworICAgICAgICBpbmZvIDpmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb2dMZXZlbCAhPSAnd2FybicpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9nKCdpbmZvJywgYXJndW1lbnRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAsCisKKyAgICAgICAgZGVidWc6IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvZ0xldmVsID09ICdkZWJ1ZycpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9nKCdkZWJ1ZycsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK30KKyAgICAgICAgKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2pxdWVyeS5qc29uLTIuMi5taW4uanMgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvanF1ZXJ5Lmpzb24tMi4yLm1pbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWQ0YTBhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2pxdWVyeS5qc29uLTIuMi5taW4uanMKQEAgLTAsMCArMSwzMSBAQAorCisoZnVuY3Rpb24oJCl7JC50b0pTT049ZnVuY3Rpb24obykKK3tpZih0eXBlb2YoSlNPTik9PSdvYmplY3QnJiZKU09OLnN0cmluZ2lmeSkKK3JldHVybiBKU09OLnN0cmluZ2lmeShvKTt2YXIgdHlwZT10eXBlb2Yobyk7aWYobz09PW51bGwpCityZXR1cm4ibnVsbCI7aWYodHlwZT09InVuZGVmaW5lZCIpCityZXR1cm4gdW5kZWZpbmVkO2lmKHR5cGU9PSJudW1iZXIifHx0eXBlPT0iYm9vbGVhbiIpCityZXR1cm4gbysiIjtpZih0eXBlPT0ic3RyaW5nIikKK3JldHVybiAkLnF1b3RlU3RyaW5nKG8pO2lmKHR5cGU9PSdvYmplY3QnKQore2lmKHR5cGVvZiBvLnRvSlNPTj09ImZ1bmN0aW9uIikKK3JldHVybiAkLnRvSlNPTihvLnRvSlNPTigpKTtpZihvLmNvbnN0cnVjdG9yPT09RGF0ZSkKK3t2YXIgbW9udGg9by5nZXRVVENNb250aCgpKzE7aWYobW9udGg8MTApbW9udGg9JzAnK21vbnRoO3ZhciBkYXk9by5nZXRVVENEYXRlKCk7aWYoZGF5PDEwKWRheT0nMCcrZGF5O3ZhciB5ZWFyPW8uZ2V0VVRDRnVsbFllYXIoKTt2YXIgaG91cnM9by5nZXRVVENIb3VycygpO2lmKGhvdXJzPDEwKWhvdXJzPScwJytob3Vyczt2YXIgbWludXRlcz1vLmdldFVUQ01pbnV0ZXMoKTtpZihtaW51dGVzPDEwKW1pbnV0ZXM9JzAnK21pbnV0ZXM7dmFyIHNlY29uZHM9by5nZXRVVENTZWNvbmRzKCk7aWYoc2Vjb25kczwxMClzZWNvbmRzPScwJytzZWNvbmRzO3ZhciBtaWxsaT1vLmdldFVUQ01pbGxpc2Vjb25kcygpO2lmKG1pbGxpPDEwMCltaWxsaT0nMCcrbWlsbGk7aWYobWlsbGk8MTApbWlsbGk9JzAnK21pbGxpO3JldHVybiciJyt5ZWFyKyctJyttb250aCsnLScrZGF5KydUJysKK2hvdXJzKyc6JyttaW51dGVzKyc6JytzZWNvbmRzKycuJyttaWxsaSsnWiInO30KK2lmKG8uY29uc3RydWN0b3I9PT1BcnJheSkKK3t2YXIgcmV0PVtdO2Zvcih2YXIgaT0wO2k8by5sZW5ndGg7aSsrKQorcmV0LnB1c2goJC50b0pTT04ob1tpXSl8fCJudWxsIik7cmV0dXJuIlsiK3JldC5qb2luKCIsIikrIl0iO30KK3ZhciBwYWlycz1bXTtmb3IodmFyIGsgaW4gbyl7dmFyIG5hbWU7dmFyIHR5cGU9dHlwZW9mIGs7aWYodHlwZT09Im51bWJlciIpCituYW1lPSciJytrKyciJztlbHNlIGlmKHR5cGU9PSJzdHJpbmciKQorbmFtZT0kLnF1b3RlU3RyaW5nKGspO2Vsc2UKK2NvbnRpbnVlO2lmKHR5cGVvZiBvW2tdPT0iZnVuY3Rpb24iKQorY29udGludWU7dmFyIHZhbD0kLnRvSlNPTihvW2tdKTtwYWlycy5wdXNoKG5hbWUrIjoiK3ZhbCk7fQorcmV0dXJuInsiK3BhaXJzLmpvaW4oIiwgIikrIn0iO319OyQuZXZhbEpTT049ZnVuY3Rpb24oc3JjKQore2lmKHR5cGVvZihKU09OKT09J29iamVjdCcmJkpTT04ucGFyc2UpCityZXR1cm4gSlNPTi5wYXJzZShzcmMpO3JldHVybiBldmFsKCIoIitzcmMrIikiKTt9OyQuc2VjdXJlRXZhbEpTT049ZnVuY3Rpb24oc3JjKQore2lmKHR5cGVvZihKU09OKT09J29iamVjdCcmJkpTT04ucGFyc2UpCityZXR1cm4gSlNPTi5wYXJzZShzcmMpO3ZhciBmaWx0ZXJlZD1zcmM7ZmlsdGVyZWQ9ZmlsdGVyZWQucmVwbGFjZSgvXFxbIlxcXC9iZm5ydHVdL2csJ0AnKTtmaWx0ZXJlZD1maWx0ZXJlZC5yZXBsYWNlKC8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZywnXScpO2ZpbHRlcmVkPWZpbHRlcmVkLnJlcGxhY2UoLyg/Ol58OnwsKSg/OlxzKlxbKSsvZywnJyk7aWYoL15bXF0sOnt9XHNdKiQvLnRlc3QoZmlsdGVyZWQpKQorcmV0dXJuIGV2YWwoIigiK3NyYysiKSIpO2Vsc2UKK3Rocm93IG5ldyBTeW50YXhFcnJvcigiRXJyb3IgcGFyc2luZyBKU09OLCBzb3VyY2UgaXMgbm90IHZhbGlkLiIpO307JC5xdW90ZVN0cmluZz1mdW5jdGlvbihzdHJpbmcpCit7aWYoc3RyaW5nLm1hdGNoKF9lc2NhcGVhYmxlKSkKK3tyZXR1cm4nIicrc3RyaW5nLnJlcGxhY2UoX2VzY2FwZWFibGUsZnVuY3Rpb24oYSkKK3t2YXIgYz1fbWV0YVthXTtpZih0eXBlb2YgYz09PSdzdHJpbmcnKXJldHVybiBjO2M9YS5jaGFyQ29kZUF0KCk7cmV0dXJuJ1xcdTAwJytNYXRoLmZsb29yKGMvMTYpLnRvU3RyaW5nKDE2KSsoYyUxNikudG9TdHJpbmcoMTYpO30pKyciJzt9CityZXR1cm4nIicrc3RyaW5nKyciJzt9O3ZhciBfZXNjYXBlYWJsZT0vWyJcXFx4MDAtXHgxZlx4N2YtXHg5Zl0vZzt2YXIgX21ldGE9eydcYic6J1xcYicsJ1x0JzonXFx0JywnXG4nOidcXG4nLCdcZic6J1xcZicsJ1xyJzonXFxyJywnIic6J1xcIicsJ1xcJzonXFxcXCd9O30pKGpRdWVyeSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ29tZXRUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ29tZXRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YzZiOWYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9Db21ldFRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnRlc3Q7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaHR0cC5qZXR0eS5KZXR0eVNlcnZlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb25Mb2NhdGlvbkhlbHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CisKKy8qKgorICogVGVzdCBjYXNlIGZvciB0aGUgY29tZXQgYmluZGluZy4KKyAqLworcHVibGljIGNsYXNzIENvbWV0VGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKyAgICAvKioKKyAgICAgKiBUZXN0IGNvbnNpc3RpbmcgaW4gc3RhcnRpbmcgdXAgYSBub2RlIGNvbnRhaW5pbmcgc2VydmljZXMgZXhwb3NlZCB2aWEgdGhlCisgICAgICogY29tZXQgYmluZGluZy4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29tZXQoKSB7CisgICAgICAgIEpldHR5U2VydmVyLnBvcnREZWZhdWx0ID0gODA4NTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBsb2NhdGlvbiA9IENvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyLmdldENvbnRyaWJ1dGlvbkxvY2F0aW9uKCJ0ZXN0LmNvbXBvc2l0ZSIpOworICAgICAgICAgICAgZmluYWwgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJ0ZXN0LmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oImMxIiwgbG9jYXRpb24pKTsKKyAgICAgICAgICAgIG5vZGUuc3RhcnQoKTsKKyAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiUHJlc3MgYW55IGtleSB0byBzdG9wIHRoZSBub2RlLiIpOworICAgICAgICAgICAgLy8gU3lzdGVtLmluLnJlYWQoKTsKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpOworICAgICAgICB9IGNhdGNoIChmaW5hbCBFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIEFzc2VydC5mYWlsKCk7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L1N0b2NrU2VydmljZS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvU3RvY2tTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQyMzQ3OQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L1N0b2NrU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EudGVzdDsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOworCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIFN0b2NrU2VydmljZSB7CisKKyAgICBTdHJpbmcgZ2V0UXVvdGVzKCk7CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L1N0b2NrU2VydmljZUltcGwuamF2YSBiL21vZHVsZXMvYmluZGluZy1jb21ldC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L1N0b2NrU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTlkN2RlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvU3RvY2tTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EudGVzdDsKKworaW1wb3J0IGphdmEudGV4dC5EZWNpbWFsRm9ybWF0OworaW1wb3J0IGphdmEudXRpbC5EYXRlOworaW1wb3J0IGphdmEudXRpbC5SYW5kb207CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNlcnZpY2U7CisKK0BTZXJ2aWNlKFN0b2NrU2VydmljZS5jbGFzcykKK3B1YmxpYyBjbGFzcyBTdG9ja1NlcnZpY2VJbXBsIGltcGxlbWVudHMgU3RvY2tTZXJ2aWNlIHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE1BWF9WQUxVRSA9IDEwMDA7CisgICAgcHJpdmF0ZSBmaW5hbCBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbShuZXcgRGF0ZSgpLmdldFRpbWUoKSk7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldFF1b3RlcygpIHsKKyAgICAgICAgZmluYWwgRG91YmxlIHZhbHVlID0gTWF0aC5hYnModGhpcy5yYW5kb20ubmV4dERvdWJsZSgpICogdGhpcy5yYW5kb20ubmV4dEludChTdG9ja1NlcnZpY2VJbXBsLk1BWF9WQUxVRSkpOworICAgICAgICByZXR1cm4gIkFTRiIgKyAiIyIgKyBEb3VibGUudmFsdWVPZihuZXcgRGVjaW1hbEZvcm1hdCgiIy4jIyIpLmZvcm1hdCh2YWx1ZSkpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3QuY29tcG9zaXRlIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3QuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDI2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdC5jb21wb3NpdGUKQEAgLTAsMCArMSwzMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICAgICAgICAgeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIgorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGVzIgorICAgICAgICAgICBuYW1lPSJTdG9jayI+CisKKwk8Y29tcG9uZW50IG5hbWU9InRlc3QiPgorCQk8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS50ZXN0LlN0b2NrU2VydmljZUltcGwiLz4KKwkJPHNlcnZpY2UgbmFtZT0iU3RvY2tTZXJ2aWNlIj4KKwkJCTxpbnRlcmZhY2UuamF2YSBpbnRlcmZhY2U9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EudGVzdC5TdG9ja1NlcnZpY2UiLz4KKwkJCTx0dXNjYW55OmJpbmRpbmcuY29tZXQvPgorCQk8L3NlcnZpY2U+CisJPC9jb21wb25lbnQ+CisJCis8L2NvbXBvc2l0ZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzL0xJQ0VOU0UgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQvTElDRU5TRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9iaW5kaW5nLXJzcy9MSUNFTlNFCnJlbmFtZSB0byBtb2R1bGVzL2JpbmRpbmctY29tZXQvTElDRU5TRQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4MTg3MTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorRXhwb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5jb21ldDt2ZXJzaW9uPSIyLjAuMCI7dXNlczo9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHksamF2YXgueG1sLm5hbWVzcGFjZSINCitQcml2YXRlLVBhY2thZ2U6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5jb21ldC5pbXBsO3ZlcnNpb249IjIuMC4wIg0KK1NDQS1WZXJzaW9uOiAxLjENCitCdW5kbGUtTmFtZTogQXBhY2hlIFR1c2NhbnkgU0NBIENvbWV0IEJpbmRpbmcgTW9kZWwNCitCdW5kbGUtVmVuZG9yOiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24NCitCdW5kbGUtVmVyc2lvbjogMi4wLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLUxpY2Vuc2U6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC50eHQNCitCdW5kbGUtRGVzY3JpcHRpb246IEFwYWNoZSBUdXNjYW55IFNDQSBDb21ldCBCaW5kaW5nIE1vZGVsDQorSW1wb3J0LVBhY2thZ2U6IGphdmF4LnhtbC5uYW1lc3BhY2UsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHk7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5jb21ldDt2ZXJzaW9uPSIyLjAuMCINCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQNCitCdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9OT1RJQ0UgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQvTk9USUNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL05PVElDRQpjb3B5IHRvIG1vZHVsZXMvYmluZGluZy1jb21ldC9OT1RJQ0UKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC9wb20ueG1sIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ3MWIyYgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC9wb20ueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW1vZHVsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIA0KKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctY29tZXQ8L2FydGlmYWN0SWQ+DQorICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBDb21ldCBCaW5kaW5nIE1vZGVsPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9Db21ldEJpbmRpbmcuamF2YSBiL21vZHVsZXMvYmluZGluZy1jb21ldC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9Db21ldEJpbmRpbmcuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2RiMjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L0NvbWV0QmluZGluZy5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0OworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQmFzZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkJpbmRpbmc7CisKKy8qKgorICogQ29tZXQgQmluZGluZyBtb2RlbC4KKyAqLworcHVibGljIGludGVyZmFjZSBDb21ldEJpbmRpbmcgZXh0ZW5kcyBCaW5kaW5nIHsKKworICAgIFFOYW1lIFRZUEUgPSBuZXcgUU5hbWUoQmFzZS5TQ0ExMV9UVVNDQU5ZX05TLCAiYmluZGluZy5jb21ldCIpOworCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctY29tZXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvQ29tZXRCaW5kaW5nRmFjdG9yeS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L0NvbWV0QmluZGluZ0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjkwYjEzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvbWV0L0NvbWV0QmluZGluZ0ZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDMyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5jb21ldDsKKworLyoqCisgKiBGYWN0b3J5IHRvIGNyZWF0ZSBDb21ldEJpbmRpbmcgaW5zdGFuY2VzLgorICovCitwdWJsaWMgaW50ZXJmYWNlIENvbWV0QmluZGluZ0ZhY3RvcnkgeworCisgICAgLyoqCisgICAgICogQ3JlYXRlIENvbWV0QmluZGluZyBtb2RlbC4KKyAgICAgKi8KKyAgICBDb21ldEJpbmRpbmcgY3JlYXRlQ29tZXRCaW5kaW5nKCk7CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb21ldC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9pbXBsL0NvbWV0QmluZGluZ0ZhY3RvcnlJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvaW1wbC9Db21ldEJpbmRpbmdGYWN0b3J5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NzAyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvaW1wbC9Db21ldEJpbmRpbmdGYWN0b3J5SW1wbC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LmltcGw7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQuQ29tZXRCaW5kaW5nOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5jb21ldC5Db21ldEJpbmRpbmdGYWN0b3J5OworCisvKioKKyAqIEZhY3RvcnkgaW1wbGVtZW50YXRpb24gdG8gY3JlYXRlIENvbWV0IG1vZGVscy4KKyAqLworcHVibGljIGNsYXNzIENvbWV0QmluZGluZ0ZhY3RvcnlJbXBsIGltcGxlbWVudHMgQ29tZXRCaW5kaW5nRmFjdG9yeSB7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQ29tZXRCaW5kaW5nIGNyZWF0ZUNvbWV0QmluZGluZygpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21ldEJpbmRpbmdJbXBsKCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctY29tZXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvaW1wbC9Db21ldEJpbmRpbmdJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29tZXQvaW1wbC9Db21ldEJpbmRpbmdJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjYTJhOQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb21ldC9pbXBsL0NvbWV0QmluZGluZ0ltcGwuamF2YQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LmltcGw7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5PcGVyYXRpb25TZWxlY3RvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LldpcmVGb3JtYXQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LkNvbWV0QmluZGluZzsKKworLyoqCisgKiBSZXByZXNlbnRzIGEgYmluZGluZyB0aHJvdWdoIENvbWV0IHRvIGEgc2VydmljZS4KKyAqLworcHVibGljIGNsYXNzIENvbWV0QmluZGluZ0ltcGwgaW1wbGVtZW50cyBDb21ldEJpbmRpbmcgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICBwcml2YXRlIFN0cmluZyB1cmk7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLm5hbWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRVUkkoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnVyaTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRVUkkoZmluYWwgU3RyaW5nIHVyaSkgeworICAgICAgICB0aGlzLnVyaSA9IHVyaTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lKGZpbmFsIFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBzdXBlci5jbG9uZSgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzVW5yZXNvbHZlZCgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldFVucmVzb2x2ZWQoZmluYWwgYm9vbGVhbiB1bnJlc29sdmVkKSB7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFFOYW1lIGdldFR5cGUoKSB7CisgICAgICAgIHJldHVybiBDb21ldEJpbmRpbmcuVFlQRTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgV2lyZUZvcm1hdCBnZXRSZXF1ZXN0V2lyZUZvcm1hdCgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc2V0UmVxdWVzdFdpcmVGb3JtYXQoZmluYWwgV2lyZUZvcm1hdCB3aXJlRm9ybWF0KSB7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFdpcmVGb3JtYXQgZ2V0UmVzcG9uc2VXaXJlRm9ybWF0KCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRSZXNwb25zZVdpcmVGb3JtYXQoZmluYWwgV2lyZUZvcm1hdCB3aXJlRm9ybWF0KSB7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE9wZXJhdGlvblNlbGVjdG9yIGdldE9wZXJhdGlvblNlbGVjdG9yKCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRPcGVyYXRpb25TZWxlY3RvcihmaW5hbCBPcGVyYXRpb25TZWxlY3RvciBvcGVyYXRpb25TZWxlY3RvcikgeworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQuQ29tZXRCaW5kaW5nRmFjdG9yeSBiL21vZHVsZXMvYmluZGluZy1jb21ldC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LkNvbWV0QmluZGluZ0ZhY3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y1NzlkZQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LkNvbWV0QmluZGluZ0ZhY3RvcnkKQEAgLTAsMCArMSwyMCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuIAorCisjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciBtb2RlbCBmYWN0b3J5CitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQuaW1wbC5Db21ldEJpbmRpbmdGYWN0b3J5SW1wbAorDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5OWE4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctY29tZXQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IKQEAgLTAsMCArMSwyMCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyANCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyANCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KKw0KKyMgSW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRoZSBhcnRpZmFjdCBwcm9jZXNzb3IgZXh0ZW5zaW9uDQorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWwuRGVmYXVsdEJlYW5Nb2RlbFByb2Nlc3NvcjtxbmFtZT1odHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEjYmluZGluZy5jb21ldCxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuY29tZXQuQ29tZXRCaW5kaW5nLGZhY3Rvcnk9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmNvbWV0LkNvbWV0QmluZGluZ0ZhY3RvcnkNCisNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctY29tZXQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5WYWxpZGF0aW9uU2NoZW1hIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuVmFsaWRhdGlvblNjaGVtYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTdhZjNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuVmFsaWRhdGlvblNjaGVtYQpAQCAtMCwwICsxLDE5IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorIw0KK2JpbmRpbmctY29tZXQueHNkDQorDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvbWV0L3NyYy9tYWluL3Jlc291cmNlcy9iaW5kaW5nLWNvbWV0LnhzZCBiL21vZHVsZXMvYmluZGluZy1jb21ldC9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZy1jb21ldC54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2ZThlMQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1jb21ldC9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZy1jb21ldC54c2QKQEAgLTAsMCArMSwzNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgDQorICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIiANCisgICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgIHhtbG5zOnQ9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIgDQorICAgIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4NCisNCisgICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgLz4NCisNCisgICAgPGVsZW1lbnQgbmFtZT0iYmluZGluZy5jb21ldCIgdHlwZT0idDpDb21ldEJpbmRpbmciIHN1YnN0aXR1dGlvbkdyb3VwPSJzY2E6YmluZGluZyIvPg0KKyAgICANCisgICAgPGNvbXBsZXhUeXBlIG5hbWU9IkNvbWV0QmluZGluZyI+DQorICAgICAgICA8Y29tcGxleENvbnRlbnQ+DQorICAgICAgICAgICAgPGV4dGVuc2lvbiBiYXNlPSJzY2E6QmluZGluZyI+DQorICAgICAgICAgICAgPC9leHRlbnNpb24+DQorICAgICAgICA8L2NvbXBsZXhDb250ZW50Pg0KKyAgICA8L2NvbXBsZXhUeXBlPg0KKzwvc2NoZW1hPg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1jb3JiYS1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvcmJhL3Rlc3Rpbmcvc2VydmljZS9tb2Nrcy9UZXN0SW50ZXJmYWNlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctY29yYmEtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb3JiYS90ZXN0aW5nL3NlcnZpY2UvbW9ja3MvVGVzdEludGVyZmFjZS5qYXZhCmluZGV4IDc1N2JlZWEuLjA2Njg3NjEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1jb3JiYS1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvcmJhL3Rlc3Rpbmcvc2VydmljZS9tb2Nrcy9UZXN0SW50ZXJmYWNlLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWNvcmJhLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29yYmEvdGVzdGluZy9zZXJ2aWNlL21vY2tzL1Rlc3RJbnRlcmZhY2UuamF2YQpAQCAtMjQsNiArMjQsNyBAQAogCiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIAoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkNvbnRyaWJ1dGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZTsKQEAgLTE1OSw1ICsxNjAsMzUgQEAKICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgogICAgICAgICAKICAgICB9Ci0KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEpBWFdTSmF2YUludGVyZmFjZU5hbWUoKSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldEpBWFdTSmF2YUludGVyZmFjZU5hbWUoU3RyaW5nIGphdmFJbnRlcmZhY2VOYW1lKSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgCisgICAgfQorICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0SkFYV1NXU0RMTG9jYXRpb24oKSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldEpBWFdTV1NETExvY2F0aW9uKFN0cmluZyB3c2RsTG9jYXRpb24pIHsKKyAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgICAgICAKKyAgICB9CisgICAgCisgICAgcHVibGljIENvbnRyaWJ1dGlvbiBnZXRDb250cmlidXRpb25Db250YWluaW5nQ2xhc3MoKSB7CisgICAgICAgIC8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldENvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzcygKKyAgICAgICAgICAgIENvbnRyaWJ1dGlvbiBjb250cmlidXRpb25Db250YWluaW5nQ2xhc3MpIHsKKyAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgICAgICAKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctY29yYmEtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb3JiYS90ZXN0aW5nL3NlcnZpY2UvbW9ja3MvVGVzdE9wZXJhdGlvbi5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWNvcmJhLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29yYmEvdGVzdGluZy9zZXJ2aWNlL21vY2tzL1Rlc3RPcGVyYXRpb24uamF2YQppbmRleCAyNzI3OGRkNi4uOGNmY2Y3YSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWNvcmJhLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29yYmEvdGVzdGluZy9zZXJ2aWNlL21vY2tzL1Rlc3RPcGVyYXRpb24uamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctY29yYmEtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb3JiYS90ZXN0aW5nL3NlcnZpY2UvbW9ja3MvVGVzdE9wZXJhdGlvbi5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuRGF0YVR5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5QYXJhbWV0ZXJNb2RlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLnV0aWwuV3JhcHBlckluZm87CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYudXRpbC5YTUxUeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkV4dGVuc2lvblR5cGU7CkBAIC0xNzQsNCArMTc1LDkgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCXB1YmxpYyBMaXN0PFBhcmFtZXRlck1vZGU+IGdldFBhcmFtZXRlck1vZGVzKCkgeworCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCisJCXJldHVybiBudWxsOworCX0KKwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWNvcmJhLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29yYmEvdGVzdGluZy9zZXJ2aWNlL21vY2tzL1Rlc3RSdW50aW1lQ29tcG9uZW50U2VydmljZS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWNvcmJhLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29yYmEvdGVzdGluZy9zZXJ2aWNlL21vY2tzL1Rlc3RSdW50aW1lQ29tcG9uZW50U2VydmljZS5qYXZhCmluZGV4IGJjMTliODIuLmQzMTUwMGMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1jb3JiYS1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvcmJhL3Rlc3Rpbmcvc2VydmljZS9tb2Nrcy9UZXN0UnVudGltZUNvbXBvbmVudFNlcnZpY2UuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctY29yYmEtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb3JiYS90ZXN0aW5nL3NlcnZpY2UvbW9ja3MvVGVzdFJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlLmphdmEKQEAgLTIxNiw1ICsyMTYsMTEgQEAKICAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgogICAgICAgICAKICAgICB9Ci0KKyAgICAKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0pBWFdTU2VydmljZSgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRKQVhXU1NlcnZpY2UoYm9vbGVhbiBpc0pBWFdTU2VydmljZSkgeworICAgIH0gICAgCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctY29yYmEtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb3JiYS90ZXN0aW5nL3NlcnZpY2UvbW9ja3MvVGVzdFJ1bnRpbWVXaXJlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctY29yYmEtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9jb3JiYS90ZXN0aW5nL3NlcnZpY2UvbW9ja3MvVGVzdFJ1bnRpbWVXaXJlLmphdmEKaW5kZXggNjE2MjgyYS4uMjg5NjExNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWNvcmJhLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvY29yYmEvdGVzdGluZy9zZXJ2aWNlL21vY2tzL1Rlc3RSdW50aW1lV2lyZS5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1jb3JiYS1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2NvcmJhL3Rlc3Rpbmcvc2VydmljZS9tb2Nrcy9UZXN0UnVudGltZVdpcmUuamF2YQpAQCAtMzAxLDUgKzMwMSwxMSBAQAogICAgICAgICAvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCiAgICAgICAgIAogICAgIH0KKyAgICAKKyAgICBwdWJsaWMgSW50ZXJmYWNlQ29udHJhY3QgZ2V0R2VuZXJhdGVkV1NETENvbnRyYWN0KAorICAgICAgICAgICAgSW50ZXJmYWNlQ29udHJhY3QgaW50ZXJmYWNlQ29udHJhY3QpIHsKKyAgICAgICAgLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgorICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1lamItcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9lamIvcHJvdmlkZXIvRUpCQmluZGluZ0ludm9rZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1lamItcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9lamIvcHJvdmlkZXIvRUpCQmluZGluZ0ludm9rZXIuamF2YQppbmRleCA5OTlhM2ZjLi4zMjNmYTc2IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctZWpiLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvZWpiL3Byb3ZpZGVyL0VKQkJpbmRpbmdJbnZva2VyLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWVqYi1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2VqYi9wcm92aWRlci9FSkJCaW5kaW5nSW52b2tlci5qYXZhCkBAIC0yMiw2ICsyMiw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmVqYi51dGlsLkVKQkhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmVqYi51dGlsLk5hbWluZ0VuZHBvaW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFPcGVyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2U7CiAKQEAgLTcxLDcgKzcyLDIyIEBACiAgICAgICAgIC8vIGxvb2t1cCBob21lIGFuZCBlamIgc3R1YgogICAgICAgICBFSkJIYW5kbGVyIGVqYkhhbmRsZXIgPSBuZXcgRUpCSGFuZGxlcihlbmRwb2ludCwgc2VydmljZUludGVyZmFjZSk7CiAKLSAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOworICAgICAgICAvLworICAgICAgICAvLyBJZiB3ZSByZWFsbHkgY291bGRuJ3QgaGF2ZSBhbnl0aGluZyBidXQgYSBKYXZhT3BlcmF0aW9uIG1heWJlIHdlIHNob3VsZAorICAgICAgICAvLyByZW1vdmUgdGhlIGlmLWJsb2NrLiAgQXNzdW1pbmcgd2UgaGFkIHNvbWUgb3RoZXIgdHlwZSBvZiBvcGVyYXRpb24sIGlmCisgICAgICAgIC8vIHRoYXQgaXMgcG9zc2libGUsIHdlIG1pZ2h0IHN0aWxsIG5lZWQgdG8gbWFwIHRvIGEgSmF2YSBvcGVyYXRpb24gbmFtZSwKKyAgICAgICAgLy8gKGZvciBleGFtcGxlIGJlY2F1c2UgdGhlIFdTREwgb3BlcmF0aW9uIG5hbWUgbWlnaHQgYmUgc2V0IHVzaW5nIGEgSlNSLTE4MQorICAgICAgICAvLyBhbm5vdGF0aW9uIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBKYXZhIG9wZXJhdGlvbiBuYW1lLgorICAgICAgICAvLworICAgICAgICAvLyBCdXQgZm9yIG5vdyB3ZSdsbCBrZWVwIHRoZSBlbHNlLWJsb2NrIGluIGhlcmUuCisgICAgICAgIC8vCisgICAgICAgIFN0cmluZyBtZXRob2ROYW1lID0gbnVsbDsKKyAgICAgICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEphdmFPcGVyYXRpb24pIHsKKyAgICAgICAgICAgIEphdmFPcGVyYXRpb24gamF2YU9wID0gKEphdmFPcGVyYXRpb24pIG9wZXJhdGlvbjsKKyAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBqYXZhT3AuZ2V0SmF2YU1ldGhvZCgpLmdldE5hbWUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOworICAgICAgICB9CiAKICAgICAgICAgLy8gaW52b2tlIGJ1c2luZXNzIG1ldGhvZCBvbiBlamIKICAgICAgICAgT2JqZWN0IHJlc3BvbnNlID0gZWpiSGFuZGxlci5pbnZva2UobWV0aG9kTmFtZSwgKE9iamVjdFtdKXBheWxvYWQpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWVqYi1ydW50aW1lL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctZWpiLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQppbmRleCA3Y2VmYmE1Li4yZTc5MDgwIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctZWpiLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctZWpiLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQpAQCAtMTksOSArMTksMTQgQEAKIAogcGFja2FnZSBjYWxjdWxhdG9yOwogCitpbXBvcnQgamF2YXguandzLldlYk1ldGhvZDsKK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKKwogLyoqCiAgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKICAqLworQFdlYlNlcnZpY2UKIHB1YmxpYyBpbnRlcmZhY2UgQWRkU2VydmljZSB7CisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lID0gIkFkZCIpCiAgICAgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMik7CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFiOTA1MjkuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wDQotU0NBLVZlcnNpb246IDEuMQ0KLUJ1bmRsZS1OYW1lOiBBcGFjaGUgVHVzY2FueSBTQ0EgQmluZGluZyBIYXplbGNhc3QgUnVudGltZQ0KLUJ1bmRsZS1WZW5kb3I6IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbg0KLUJ1bmRsZS1WZXJzaW9uOiAyLjAuMA0KLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCi1CdW5kbGUtTGljZW5zZTogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dA0KLUJ1bmRsZS1EZXNjcmlwdGlvbjogQXBhY2hlIFR1c2NhbnkgSGF6ZWxjYXN0IEJpbmRpbmcNCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaGF6ZWxjYXN0LnJ1bnRpbWUNCi1CdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYKLUltcG9ydC1QYWNrYWdlOiBqYXZheC54bWwubmFtZXNwYWNlLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGw7dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3M7dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3Mud3NkbGdlbjt2ZXJzaW9uPSIyLjAuMCIsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29tbW9uLnhtbC5kb207dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRleHQ7dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmU7dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLnhtbDt2ZXJzaW9uPSIyLjAuMCIsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZW5kcG9pbnQuaGF6ZWxjYXN0O3ZlcnNpb249IjIuMC4wIiwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWY7dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsO3ZlcnNpb249IjIuMC4wIiwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uO3ZlcnNpb249IjIuMC4wIiwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlcjt2ZXJzaW9uPSIyLjAuMCIsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZTt2ZXJzaW9uPSIyLjAuMCIsDQotIG9yZy5vYXNpc29wZW4uc2NhLA0KLSBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLA0KLSBvcmcudzNjLmRvbSwNCi0gb3JnLnhtbC5zYXgNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvcG9tLnhtbCBiL21vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTUxMmZmLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW1vZHVsZXM8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIEJpbmRpbmcgSGF6ZWxjYXN0IFJ1bnRpbWU8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3Mtd3NkbGdlbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDE3NWQxMWYuLjBjYWRhYmIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMTYsOSArMTYsMTEgQEAKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmU7dmVyc2lvbj0iMi4wLjAiLAogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5odHRwO3ZlcnNpb249IjIuMC4wIiwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZjt2ZXJzaW9uPSIyLjAuMCIsCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYudXRpbCwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb247dmVyc2lvbj0iMi4wLjAiLAogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXI7dmVyc2lvbj0iMi4wLjAiLAogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZTt2ZXJzaW9uPSIyLjAuMCIsCisgb3JnLm9hc2lzb3Blbi5zY2EsCiAgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbjt2ZXJzaW9uPSIyLjAuMCIKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnJ1bnRpbWUKIEJ1bmRsZS1Eb2NVUkw6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvcG9tLnhtbCBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvcG9tLnhtbAppbmRleCBjNGFjYzQxLi4wZTExYzgyIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3BvbS54bWwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9wb20ueG1sCkBAIC01MCw2ICs1MCwxMiBAQAogCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YWJpbmRpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1odHRwPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CkBAIC04MSw2ICs4NywxMyBAQAogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nLWpzb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL2Zvcm1hdC9IVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yUHJvdmlkZXJGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvZm9ybWF0L0hUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3JQcm92aWRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjZhZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL2Zvcm1hdC9IVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yUHJvdmlkZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw2MCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuZm9ybWF0Ow0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludGVyY2VwdG9yOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uUGhhc2U7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuT3BlcmF0aW9uU2VsZWN0b3JQcm92aWRlcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5PcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyRmFjdG9yeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZTsNCisNCitwdWJsaWMgY2xhc3MgSFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyRmFjdG9yeSBpbXBsZW1lbnRzIE9wZXJhdGlvblNlbGVjdG9yUHJvdmlkZXJGYWN0b3J5PEhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3I+ew0KKw0KKyAgICBwdWJsaWMgSFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyRmFjdG9yeShFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGV4dGVuc2lvblBvaW50cykgew0KKyAgICB9DQorICAgIA0KKyAgICBAT3ZlcnJpZGUNCisgICAgcHVibGljIENsYXNzPEhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3I+IGdldE1vZGVsVHlwZSgpIHsNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgT3BlcmF0aW9uU2VsZWN0b3JQcm92aWRlciBjcmVhdGVSZWZlcmVuY2VPcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyKFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludFJlZmVyZW5jZSkgew0KKyAgICAgICAgcmV0dXJuIG51bGw7DQorICAgIH0NCisNCisgICAgQE92ZXJyaWRlDQorICAgIHB1YmxpYyBPcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyIGNyZWF0ZVNlcnZpY2VPcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyKGZpbmFsIFJ1bnRpbWVFbmRwb2ludCBlbmRwb2ludCkgew0KKyAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyKCl7DQorICAgICAgICAgICAgQE92ZXJyaWRlDQorICAgICAgICAgICAgcHVibGljIEludGVyY2VwdG9yIGNyZWF0ZUludGVyY2VwdG9yKCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhUVFBEZWZhdWx0U2VydmljZU9wZXJhdGlvblNlbGVjdG9ySW50ZXJjZXB0b3IoZW5kcG9pbnQpOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBAT3ZlcnJpZGUNCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFBoYXNlKCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gUGhhc2UuU0VSVklDRV9CSU5ESU5HX09QRVJBVElPTl9TRUxFQ1RPUjsNCisgICAgICAgICAgICB9fTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvZm9ybWF0L0hUVFBEZWZhdWx0U2VydmljZU9wZXJhdGlvblNlbGVjdG9ySW50ZXJjZXB0b3IuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9mb3JtYXQvSFRUUERlZmF1bHRTZXJ2aWNlT3BlcmF0aW9uU2VsZWN0b3JJbnRlcmNlcHRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGYzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvZm9ybWF0L0hUVFBEZWZhdWx0U2VydmljZU9wZXJhdGlvblNlbGVjdG9ySW50ZXJjZXB0b3IuamF2YQpAQCAtMCwwICsxLDg1IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5mb3JtYXQ7DQorDQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0Ow0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5wcm92aWRlci5IVFRQQ29udGV4dDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnRlcmNlcHRvcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50Ow0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjsNCisNCisvKioNCisgKiBTZXRzIHRoZSBvcGVyYXRpb24gYmFzZWQgb24gdGhlIHJlcXVlc3QgcGF0aC4NCisgKiANCisgKiBGcm9tIGEgdXJsOiBodHRwOi8vbG9jYWxob3N0OjgwODAvSGVsbG93b3JsZENvbXBvbmVudC9IZWxsb3dvcmxkL3NheUhlbGxvP25hbWU9UGV0cmENCisgKiB3aGVyZSB0aGUgY29tcG9uZW50IGlzIEhlbGxvd29ybGRDb21wb25lbnQgYW5kIHRoZSBzZXJ2aWNlIGlzIEhlbGxvd29ybGQNCisgKiB0aGUgcGF0aCB3aWxsIGJlICIvc2F5SGVsbG8iIHNvIHRoZSBvcGVyYXRpb24gaXMgInNheUhlbGxvIi4NCisgKiANCisgKiBUT0RPOiB3ZSBjb3VsZCBhbHNvIGRvIHNvbWV0aGluZyBzaW1pbGFyIHRvIGhvdyB0aGUgSk1TIGJpbmRpbmcgc3VwcG9ydHMNCisgKiAgICAgICBhIHNpbmdsZSAib25NZXNzYWdlIiBtZXRob2QgdG8gZ2V0IGFsbCByZXF1ZXN0cywgc28gcGVyaGFwcyB0aGlzIGNvdWxkDQorICogICAgICAgYWxzbyBzdXBwb3J0IGltcGxzIHdpdGggbWV0aG9kOiBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSkNCisgKi8NCitwdWJsaWMgY2xhc3MgSFRUUERlZmF1bHRTZXJ2aWNlT3BlcmF0aW9uU2VsZWN0b3JJbnRlcmNlcHRvciBpbXBsZW1lbnRzIEludGVyY2VwdG9yIHsNCisNCisgICAgcHJpdmF0ZSBJbnZva2VyIG5leHQ7DQorICAgIHByaXZhdGUgTGlzdDxPcGVyYXRpb24+IG9wZXJhdGlvbnM7DQorICAgIA0KKyAgICBwdWJsaWMgSFRUUERlZmF1bHRTZXJ2aWNlT3BlcmF0aW9uU2VsZWN0b3JJbnRlcmNlcHRvcihSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQpIHsNCisgICAgICAgIEludGVyZmFjZSBzZXJ2aWNlSW50ZXJmYWNlID0gZW5kcG9pbnQuZ2V0U2VydmljZSgpLmdldEludGVyZmFjZUNvbnRyYWN0KCkuZ2V0SW50ZXJmYWNlKCk7DQorICAgICAgICB0aGlzLm9wZXJhdGlvbnMgPSBzZXJ2aWNlSW50ZXJmYWNlLmdldE9wZXJhdGlvbnMoKTsNCisgICAgfQ0KKw0KKyAgICBAT3ZlcnJpZGUNCisgICAgcHVibGljIE1lc3NhZ2UgaW52b2tlKE1lc3NhZ2UgbXNnKSB7DQorICAgICAgICBIVFRQQ29udGV4dCBjb250ZXh0ID0gbXNnLmdldEJpbmRpbmdDb250ZXh0KCk7DQorICAgICAgICBIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCA9IGNvbnRleHQuZ2V0UmVxdWVzdCgpOw0KKyAgICAgICAgU3RyaW5nIHBhdGggPSByZXF1ZXN0LmdldFBhdGhJbmZvKCk7DQorICAgICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCIvIikpIHsNCisgICAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMSk7DQorICAgICAgICB9DQorDQorICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcCA6IG9wZXJhdGlvbnMpIHsNCisgICAgICAgICAgICBpZiAob3AuZ2V0TmFtZSgpLmVxdWFscyhwYXRoKSkgew0KKyAgICAgICAgICAgICAgICBtc2cuc2V0T3BlcmF0aW9uKG9wKTsNCisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQuaW52b2tlKG1zZyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICB0aHJvdyBuZXcgU2VydmljZVJ1bnRpbWVFeGNlcHRpb24oIk5vIG1hdGNoaW5nIG9wZXJhdGlvbjogIiArIHBhdGgpOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXROZXh0KEludm9rZXIgbmV4dCkgew0KKyAgICAgICAgdGhpcy5uZXh0ID0gbmV4dDsNCisgICAgfQ0KKw0KKyAgICBAT3ZlcnJpZGUNCisgICAgcHVibGljIEludm9rZXIgZ2V0TmV4dCgpIHsNCisgICAgICAgIHJldHVybiBuZXh0Ow0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9mb3JtYXQvSFRUUERlZmF1bHRXaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvZm9ybWF0L0hUVFBEZWZhdWx0V2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTc0ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvZm9ybWF0L0hUVFBEZWZhdWx0V2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLmZvcm1hdDsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuSFRUUERlZmF1bHRXaXJlRm9ybWF0Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlQ29udHJhY3Q7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnRlcmNlcHRvcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLlBoYXNlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLldpcmVGb3JtYXRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5XaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50UmVmZXJlbmNlOw0KKw0KK3B1YmxpYyBjbGFzcyBIVFRQRGVmYXVsdFdpcmVGb3JtYXRQcm92aWRlckZhY3RvcnkgaW1wbGVtZW50cyBXaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5PEhUVFBEZWZhdWx0V2lyZUZvcm1hdD4gew0KKw0KKyAgICBwdWJsaWMgSFRUUERlZmF1bHRXaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5KEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXh0ZW5zaW9uUG9pbnRzKSB7DQorICAgIH0NCisNCisgICAgQE92ZXJyaWRlDQorICAgIHB1YmxpYyBDbGFzczxIVFRQRGVmYXVsdFdpcmVGb3JtYXQ+IGdldE1vZGVsVHlwZSgpIHsNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgV2lyZUZvcm1hdFByb3ZpZGVyIGNyZWF0ZVJlZmVyZW5jZVdpcmVGb3JtYXRQcm92aWRlcihSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgZW5kcG9pbnRSZWZlcmVuY2UpIHsNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgV2lyZUZvcm1hdFByb3ZpZGVyIGNyZWF0ZVNlcnZpY2VXaXJlRm9ybWF0UHJvdmlkZXIoZmluYWwgUnVudGltZUVuZHBvaW50IGVuZHBvaW50KSB7DQorICAgICAgICByZXR1cm4gbmV3IFdpcmVGb3JtYXRQcm92aWRlcigpIHsNCisgICAgICAgICAgICBAT3ZlcnJpZGUNCisgICAgICAgICAgICBwdWJsaWMgSW50ZXJmYWNlQ29udHJhY3QgY29uZmlndXJlV2lyZUZvcm1hdEludGVyZmFjZUNvbnRyYWN0KEludGVyZmFjZUNvbnRyYWN0IGludGVyZmFjZUNvbnRyYWN0KSB7DQorICAgICAgICAgICAgICAgIC8vIFRPRE86IElkZWFsbHkgdGhpcyB3YW50cyB0byBzZXQgdGhlIGRhdGFiaW5kaW5nIG9uIGEgcGVyIHJlcXVlc3QgYmFzaXMgZnJvbSB0aGUgDQorICAgICAgICAgICAgICAgIC8vIGh0dHAgY29udGVudCB0eXBlIGFuZCBhY2NlcHQgaGVhZGVycyBhbmQgc28gc3VwcG9ydCB0aGluZ3MgbGlrZSBqc29uIG9yIHhtbCBldGMsDQorICAgICAgICAgICAgICAgIC8vIGZvciBub3cgdG8gZ2V0IHN0YXJ0ZWQganVzdCB1c2UganNvbiANCisgICAgICAgICAgICAgICAgaW50ZXJmYWNlQ29udHJhY3QuZ2V0SW50ZXJmYWNlKCkucmVzZXREYXRhQmluZGluZygiSlNPTiIpOw0KKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJmYWNlQ29udHJhY3Q7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIEBPdmVycmlkZQ0KKyAgICAgICAgICAgIHB1YmxpYyBJbnRlcmNlcHRvciBjcmVhdGVJbnRlcmNlcHRvcigpIHsNCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBIVFRQRGVmYXVsdFdpcmVGb3JtYXRTZXJ2aWNlSW50ZXJjZXB0b3IoZW5kcG9pbnQpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBAT3ZlcnJpZGUNCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFBoYXNlKCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gUGhhc2UuU0VSVklDRV9CSU5ESU5HX1dJUkVGT1JNQVQ7DQorICAgICAgICAgICAgfX07DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL2Zvcm1hdC9IVFRQRGVmYXVsdFdpcmVGb3JtYXRTZXJ2aWNlSW50ZXJjZXB0b3IuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9mb3JtYXQvSFRUUERlZmF1bHRXaXJlRm9ybWF0U2VydmljZUludGVyY2VwdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmNiZjgwMQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9mb3JtYXQvSFRUUERlZmF1bHRXaXJlRm9ybWF0U2VydmljZUludGVyY2VwdG9yLmphdmEKQEAgLTAsMCArMSwyNTIgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLmZvcm1hdDsNCisNCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuU29ydGVkU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOw0KK2ltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsNCisNCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0UmVxdWVzdDsNCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsNCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnByb3ZpZGVyLkhUVFBDb250ZXh0Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5EYXRhVHlwZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW50ZXJjZXB0b3I7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZva2VyOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb247DQorDQorLyoqDQorICogSGFuZGxlcyB0aGUgZGVmYXVsdCB3aXJlIGZvcm1hdCBmb3IgdGhlIGh0dHAgYmluZGluZw0KKyAqIA0KKyAqIDEtIGRldGVybWluZSB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2UgZm9ybWF0ICh4bWwsIGpzb24sIGV0YykgZnJvbSB0aGUgDQorICogICAgYmluZGluZyBjb25maWcgb3IgY29udGVudCB0eXBlIGhlYWRlciBhbmQgYWNjZXB0IGhlYWRlcnMNCisgKiAgICAtIFRPRE86IG5lZWQgYSB3YXkgdG8gY29uZmlndXJlIHRoZSBkYXRhYmluZGluZyBmcmFtZXdvcmsgYmFzZWQgb24gdGhhdCBmb3JtYXQNCisgKiAyLSBnZXQgdGhlIHJlcXVlc3QgY29udGVudHMgZnJvbSB0aGUgSHR0cFNlcnZsZXRSZXF1ZXN0DQorICogICAgLSBmb3IgYSBwb3N0IGl0cyBqdXN0IHRoZSByZXF1ZXN0IGJvZHkNCisgKiAgICAtIGZvciBhIGdldCBuZWVkIHRvIGNvbnZlcnQgdGhlIHF1ZXJ5IHN0cmluZyBpbnRvIGEgYm9keSBiYXNlZCBvbiB0aGUgZm9ybWF0ICh4bWwsIGpzb24sIGV0YykNCisgKiAzLSBzZW5kIHRoZSByZXF1ZXN0IG9uIGRvd24gdGhlIHdpcmUNCisgKiA0LSBzZXQgdGhlIHJlc3BvbnNlIGNvbnRlbnRzIGluIHRoZSBIdHRwU2VydmxldFJlc3BvbnNlIA0KKyAqICAgICh0aGUgZGF0YWJpbmRpbmcgc2hvdWxkIGFscmVhZHkgaGF2ZSBwdXQgaXQgaW4gdGhlIGNvcnJlY3QgZm9ybWF0KQ0KKyAqIA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBIVFRQRGVmYXVsdFdpcmVGb3JtYXRTZXJ2aWNlSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBJbnRlcmNlcHRvciB7DQorDQorICAgIHByaXZhdGUgSW52b2tlciBuZXh0Ow0KKyAgICBwcml2YXRlIFN0cmluZyBqc29ucENhbGxiYWNrTmFtZSA9ICJjYWxsYmFjayI7DQorICAgIA0KKyAgICBwdWJsaWMgSFRUUERlZmF1bHRXaXJlRm9ybWF0U2VydmljZUludGVyY2VwdG9yKFJ1bnRpbWVFbmRwb2ludCBlbmRwb2ludCkgew0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXROZXh0KEludm9rZXIgbmV4dCkgew0KKyAgICAgICAgdGhpcy5uZXh0ID0gbmV4dDsNCisgICAgfQ0KKw0KKyAgICBAT3ZlcnJpZGUNCisgICAgcHVibGljIEludm9rZXIgZ2V0TmV4dCgpIHsNCisgICAgICAgIHJldHVybiBuZXh0Ow0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgTWVzc2FnZSBpbnZva2UoTWVzc2FnZSBtc2cpIHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgcmV0dXJuIGludm9rZVJlc3BvbnNlKGdldE5leHQoKS5pbnZva2UoaW52b2tlUmVxdWVzdChtc2cpKSk7DQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQorICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uKGUpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHByaXZhdGUgTWVzc2FnZSBpbnZva2VSZXF1ZXN0KE1lc3NhZ2UgbXNnKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKyAgICAgICAgSFRUUENvbnRleHQgY29udGV4dCA9IG1zZy5nZXRCaW5kaW5nQ29udGV4dCgpOw0KKyAgICAgICAgSHR0cFNlcnZsZXRSZXF1ZXN0IHNlcnZsZXRSZXF1ZXN0ID0gY29udGV4dC5nZXRSZXF1ZXN0KCk7DQorICAgICAgICBpZiAoIkdFVCIuZXF1YWxzKHNlcnZsZXRSZXF1ZXN0LmdldE1ldGhvZCgpKSkgew0KKyAgICAgICAgICAgIG1zZy5zZXRCb2R5KGdldFJlcXVlc3RGcm9tUXVlcnlTdHJpbmcobXNnLmdldE9wZXJhdGlvbigpLCBzZXJ2bGV0UmVxdWVzdCkpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBtc2cuc2V0Qm9keShnZXRSZXF1ZXN0RnJvbVBvc3QobXNnLmdldE9wZXJhdGlvbigpLCBzZXJ2bGV0UmVxdWVzdCkpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0dXJuIG1zZzsNCisgICAgfQ0KKyAgICANCisgICAgLyoqDQorICAgICAqIFRoZSBkYXRhIGJpbmRpbmcgc2VlbXMgdG8gYmUgZXhwZWN0aW5nIGFuIE9iamVjdCBhcnJheSBvZiBqc29uIHN0cmluZ3Mgc28gaWYgdGhlDQorICAgICAqIHBvc3QgZGF0YSBpcyBhIGpzb24gYXJyYXkgY29udmVydCB0aGF0IHRvIGFuIGFycmF5IG9mIHN0cmluZ3MNCisgICAgICogVE9ETzogc2hvdWxkIHRoaXMgYmUgYmVpbmcgZG9uZSBieSB0aGUgZGF0YSBiaW5kaW5nIGZyYW1ld29yaz8gDQorICAgICAqLw0KKyAgICBwcml2YXRlIE9iamVjdFtdIGdldFJlcXVlc3RGcm9tUG9zdChPcGVyYXRpb24gb3BlcmF0aW9uLCBIdHRwU2VydmxldFJlcXVlc3Qgc2VydmxldFJlcXVlc3QpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQorICAgICAgICBMaXN0PE9iamVjdD4gb3MgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsNCisgICAgICAgIFN0cmluZyBkYXRhID0gcmVhZChzZXJ2bGV0UmVxdWVzdCk7DQorICAgICAgICBpZiAoZGF0YS5sZW5ndGgoKSA+IDApIHsNCisgICAgICAgICAgICBpZiAoZGF0YS5zdGFydHNXaXRoKCJbIikgJiYgZGF0YS5lbmRzV2l0aCgiXSIpKSB7DQorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnN1YnN0cmluZygxLCBkYXRhLmxlbmd0aCgpLTEpOw0KKyAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgc3QgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGRhdGEsICIsIik7DQorICAgICAgICAgICAgICAgIHdoaWxlIChzdC5oYXNNb3JlRWxlbWVudHMoKSkgew0KKyAgICAgICAgICAgICAgICAgICAgb3MuYWRkKHN0Lm5leHRFbGVtZW50KCkpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgb3MuYWRkKGRhdGEpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiBvcy50b0FycmF5KCk7DQorICAgIH0NCisNCisgICAgcHJpdmF0ZSBNZXNzYWdlIGludm9rZVJlc3BvbnNlKE1lc3NhZ2UgbXNnKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKyAgICAgICAgSFRUUENvbnRleHQgY29udGV4dCA9IG1zZy5nZXRCaW5kaW5nQ29udGV4dCgpOw0KKyAgICAgICAgSHR0cFNlcnZsZXRSZXF1ZXN0IHNlcnZsZXRSZXF1ZXN0ID0gY29udGV4dC5nZXRSZXF1ZXN0KCk7DQorICAgICAgICBIdHRwU2VydmxldFJlc3BvbnNlIHNlcnZsZXRSZXNwb25zZSA9IGNvbnRleHQuZ2V0UmVzcG9uc2UoKTsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKG1zZy5pc0ZhdWx0KCkpIHsgICAgICAgICAgICANCisgICAgICAgICAgICBzZXJ2bGV0UmVzcG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBTdHJpbmcudmFsdWVPZihtc2cuZ2V0Qm9keSgpKSk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IGdldFJlc3BvbnNlQXNTdHJpbmcoc2VydmxldFJlcXVlc3QsIHNlcnZsZXRSZXNwb25zZSwgbXNnLmdldEJvZHkoKSk7DQorICAgICAgICAgICAgc2VydmxldFJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpLnByaW50bG4ocmVzcG9uc2UpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICByZXR1cm4gbXNnOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBUdXJuIHRoZSByZXF1ZXN0IGludG8gYSBzdHJpbmcgYXJyYXkgb2YgSlNPTiBzdHJ1Y3R1cmVzLiBUaGUgZGF0YSBiaW5kaW5nDQorICAgICAqIGxheWVyIHdpbGwgdGhlbiBjb252ZXJ0IGVhY2ggb2YgdGhlIGluZGl2aWR1YWwgcGFyYW1ldGVycyBpbnRvIHRoZSBhcHByb3ByaWF0ZQ0KKyAgICAgKiB0eXBlcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGludGVyZmFjZQ0KKyAgICAgKg0KKyAgICAgKiBGcm9tIE1MIHRocmVhZDogaHR0cDovL2FwYWNoZS5tYXJrbWFpbC5vcmcvbWVzc2FnZS9peDN2dnlvbXJvbmVsbG1pDQorICAgICAqIDEtIGlmIHRoZSBiaW5kaW5nIGNvbmZpZ3VyYXRpb24gY29udGFpbnMgYSBtYXBwaW5nIGZyb20gcXVlcnkgcGFyYW1ldGVyIG5hbWUgdG8gb3BlcmF0aW9uIHBhcmFtZXRlciB0aGVuIHVzZSB0aGF0LiANCisgICAgICogMi0gaWYgdGhlIHNlcnZpY2UgaW50ZXJmYWNlIG9yIGltcGwgdXNlcyBqYXhycyBhbm5vdGF0aW9ucyB0byBuYW1lIHRoZSBwYXJhbWV0ZXJzIHRoZW4gdXNlIHRoYXQgbWFwcGluZw0KKyAgICAgKiAzLSBpZiB0aGUgcXVlcnkgcGFyYW1ldGVycyBhcmUgbmFtZSBhcmcwLCBhcmcxIGV0YyB0aGFuIHVzZSB0aG9zZSBuYW1lcyBmb3IgdGhlIG1hcHBpbmcsDQorICAgICAqIDQtIG90aGVyd2lzZSB1c2UgdGhlIG9yZGVyIGluIHRoZSBxdWVyeSBzdHJpbmcuIA0KKyAgICAgKi8NCisgICAgcHJvdGVjdGVkIE9iamVjdFtdIGdldFJlcXVlc3RGcm9tUXVlcnlTdHJpbmcoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU2VydmxldFJlcXVlc3Qgc2VydmxldFJlcXVlc3QpIHsNCisgICAgICAgIA0KKyAgICAgICAgTGlzdDxEYXRhVHlwZT4gdHlwZXMgPSBvcGVyYXRpb24uZ2V0SW5wdXRUeXBlKCkuZ2V0TG9naWNhbCgpOw0KKyAgICAgICAgaW50IHR5cGVzSW5kZXggPSAwOw0KKyAgICAgICAgDQorICAgICAgICBMaXN0PFN0cmluZz4ganNvblJlcXVlc3RBcnJheSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOw0KKyAgICAgICAgDQorICAgICAgICBmb3IgKFN0cmluZyBuYW1lIDogZ2V0T3JkZXJlZFBhcmFtZXRlck5hbWVzKHNlcnZsZXRSZXF1ZXN0KSkgew0KKyAgICAgICAgICAgIFN0cmluZyBqc29uUmVxdWVzdCA9ICIiOw0KKyAgICAgICAgICAgIC8vIHF1b3RlIHN0cmluZyBwYXJhbWV0ZXJzIHNvIGNsaWVudHMgd29yayBpbiB0aGUgdXN1YWwgamF2YXNjcmlwdCB3YXkgICAgICAgICAgICAgICANCisgICAgICAgICAgICBpZiAodHlwZXNJbmRleCA8IHR5cGVzLnNpemUoKSAmJiBTdHJpbmcuY2xhc3MuZXF1YWxzKHR5cGVzLmdldCh0eXBlc0luZGV4KyspLmdldEdlbmVyaWNUeXBlKCkpKSB7DQorICAgICAgICAgICAgICAgIFN0cmluZyB4ID0gc2VydmxldFJlcXVlc3QuZ2V0UGFyYW1ldGVyKG5hbWUpOw0KKyAgICAgICAgICAgICAgICBpZiAoeC5zdGFydHNXaXRoKCJcIiIpIHx8IHguc3RhcnRzV2l0aCgiJyIpKSB7DQorICAgICAgICAgICAgICAgICAgICBqc29uUmVxdWVzdCArPSB4Ow0KKyAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHguY29udGFpbnMoIlwiIikpIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBqc29uUmVxdWVzdCArPSAiJyIgKyB4ICsgIiciOw0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgICAgICBqc29uUmVxdWVzdCArPSAiXCIiICsgeCArICJcIiI7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgICAgICBqc29uUmVxdWVzdCArPSBzZXJ2bGV0UmVxdWVzdC5nZXRQYXJhbWV0ZXIobmFtZSk7DQorICAgICAgICAgICAgfSAgDQorICAgICAgICAgICAganNvblJlcXVlc3RBcnJheS5hZGQoanNvblJlcXVlc3QpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgcmV0dXJuIGpzb25SZXF1ZXN0QXJyYXkudG9BcnJheSgpOw0KKyAgICB9ICAgIA0KKyAgICANCisgICAgLyoqDQorICAgICAqIEdldCB0aGUgcmVxdWVzdCBwYXJhbWV0ZXIgbmFtZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuDQorICAgICAqIEVpdGhlciB0aGUgcXVlcnkgcGFyYW1ldGVycyBhcmUgbmFtZWQgYXJnMCwgYXJnMSwgYXJnMiBldGMgb3IgZWxzZSB1c2UgdGhlIG9yZGVyIA0KKyAgICAgKiBmcm9tIHRoZSBvcmRlciBpbiB0aGUgcXVlcnkgc3RyaW5nLiBFZywgdGhlIHVybDoNCisgICAgICogICBodHRwOi8vbG9jYWxob3N0OjgwODUvSGVsbG9Xb3JsZFNlcnZpY2Uvc2F5SGVsbG8yP2ZpcnN0PXBldHJhJmxhc3Q9YXJub2xkJmNhbGxiYWNrPWZvbyINCisgICAgICogc2hvdWxkIGludm9rZToNCisgICAgICogICBzYXlIZWxsbzIoInBldHJhIiwgImFybm9sZCIpDQorICAgICAqIHNvIHRoZSBwYXJhbWV0ZXIgbmFtZXMgc2hvdWxkIGJlIG9yZGVyZWQ6ICJmaXJzdCIsICJsYXN0Ig0KKyAgICAgKi8NCisgICAgcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBnZXRPcmRlcmVkUGFyYW1ldGVyTmFtZXMoU2VydmxldFJlcXVlc3Qgc2VydmxldFJlcXVlc3QpIHsNCisgICAgICAgIExpc3Q8U3RyaW5nPiBvcmRlcmVkTmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisgICAgICAgIFNldDxTdHJpbmc+IHBhcmFtZXRlck5hbWVzID0gc2VydmxldFJlcXVlc3QuZ2V0UGFyYW1ldGVyTWFwKCkua2V5U2V0KCk7DQorICAgICAgICBpZiAocGFyYW1ldGVyTmFtZXMuY29udGFpbnMoImFyZzAiKSkgew0KKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxwYXJhbWV0ZXJOYW1lcy5zaXplKCk7IGkrKykgew0KKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9ICJhcmciICsgaTsNCisgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlck5hbWVzLmNvbnRhaW5zKG5hbWUpKSB7DQorICAgICAgICAgICAgICAgICAgICBvcmRlcmVkTmFtZXMuYWRkKG5hbWUpOw0KKyAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBxdWVyeVN0cmluZyA9ICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXNlcnZsZXRSZXF1ZXN0KS5nZXRRdWVyeVN0cmluZygpOw0KKyAgICAgICAgICAgIFNvcnRlZFNldDxTdHJpbmc+IHNvcnRlZE5hbWVzID0gbmV3IFRyZWVTZXQ8U3RyaW5nPihuZXcgQ29tcGFyYXRvcjxTdHJpbmc+KCl7DQorICAgICAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgbzEsIFN0cmluZyBvMikgew0KKyAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBxdWVyeVN0cmluZy5pbmRleE9mKG8xKTsNCisgICAgICAgICAgICAgICAgICAgIGludCBqID0gcXVlcnlTdHJpbmcuaW5kZXhPZihvMik7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAtIGo7DQorICAgICAgICAgICAgICAgIH19KTsNCisgICAgICAgICAgICBmb3IgKFN0cmluZyBuYW1lIDogcGFyYW1ldGVyTmFtZXMpIHsNCisgICAgICAgICAgICAgICAgLy8gaWdub3JlIHN5c3RlbSBhbmQganNvbnBDYWxsYmFja05hbWUgcGFyYW1ldGVycw0KKyAgICAgICAgICAgICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aCgiXyIpICYmICFuYW1lLmVxdWFscyhqc29ucENhbGxiYWNrTmFtZSkpIHsNCisgICAgICAgICAgICAgICAgICAgIHNvcnRlZE5hbWVzLmFkZChuYW1lKTsgICAgDQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgb3JkZXJlZE5hbWVzLmFkZEFsbChzb3J0ZWROYW1lcyk7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gb3JkZXJlZE5hbWVzOw0KKyAgICB9DQorICAgIA0KKyAgICAvKioNCisgICAgICogVGhlIGRhdGFiaW5kaW5nIGxheWVyIHdpbGwgaGF2ZSBjb252ZXJ0ZWQgdGhlIHJldHVybiB0eXBlIGludG8gYSBKU09OIHN0cmluZyBzbyBzaW1wbHkgDQorICAgICAqIGFkZCB3cmFwIGl0IGZvciByZXR1cm4uDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldFJlc3BvbnNlQXNTdHJpbmcoSHR0cFNlcnZsZXRSZXF1ZXN0IHNlcnZsZXRSZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHNlcnZsZXRSZXNwb25zZSwgT2JqZWN0IHJlc3BvbnNlKSB7DQorICAgICAgICBTdHJpbmcganNvblJlc3BvbnNlID0gcmVzcG9uc2UgPT0gbnVsbCA/ICIiIDogcmVzcG9uc2UudG9TdHJpbmcoKTsNCisNCisgICAgICAgIGlmICgiR0VUIi5lcXVhbHMoc2VydmxldFJlcXVlc3QuZ2V0TWV0aG9kKCkpKSB7DQorICAgICAgICAgICAgLy8gaGFuZGxlIEpTT05QIGNhbGxiYWNrIG5hbWUgcGFkZGluZw0KKyAgICAgICAgICAgIFN0cmluZyBjYWxsYmFjayA9IHNlcnZsZXRSZXF1ZXN0LmdldFBhcmFtZXRlcihqc29ucENhbGxiYWNrTmFtZSk7DQorICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgY2FsbGJhY2subGVuZ3RoKCkgPiAxKSB7DQorICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZSA9IGNhbGxiYWNrICsgIigiICsganNvblJlc3BvbnNlICsgIik7IjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICByZXR1cm4ganNvblJlc3BvbnNlOw0KKyAgICB9ICAgIA0KKw0KKyAgICBwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyByZWFkKEh0dHBTZXJ2bGV0UmVxdWVzdCBzZXJ2bGV0UmVxdWVzdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisgICAgICAgIElucHV0U3RyZWFtIGlzID0gc2VydmxldFJlcXVlc3QuZ2V0SW5wdXRTdHJlYW0oKTsNCisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMpKTsNCisgICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7DQorICAgICAgICAgICAgU3RyaW5nIHN0cjsNCisgICAgICAgICAgICB3aGlsZSAoKHN0ciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7DQorICAgICAgICAgICAgICAgIHNiLmFwcGVuZChzdHIpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKS50cmltKCk7DQorICAgICAgICB9IGZpbmFsbHkgew0KKyAgICAgICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL2Zvcm1hdC9IVFRQWE1MV2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL2Zvcm1hdC9IVFRQWE1MV2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNjAxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvZm9ybWF0L0hUVFBYTUxXaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw3MCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuZm9ybWF0Ow0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQWE1MV2lyZUZvcm1hdDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24ueG1sLmRvbS5ET01IZWxwZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLnhtbC5ET01EYXRhQmluZGluZzsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlQ29udHJhY3Q7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnRlcmNlcHRvcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLlBoYXNlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLldpcmVGb3JtYXRQcm92aWRlcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5XaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50UmVmZXJlbmNlOw0KKw0KK3B1YmxpYyBjbGFzcyBIVFRQWE1MV2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeSBpbXBsZW1lbnRzIFdpcmVGb3JtYXRQcm92aWRlckZhY3Rvcnk8SFRUUFhNTFdpcmVGb3JtYXQ+IHsNCisNCisgICAgcHJpdmF0ZSBET01IZWxwZXIgZG9tSGVscGVyOw0KKyAgICANCisgICAgcHVibGljIEhUVFBYTUxXaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5KEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXh0ZW5zaW9uUG9pbnRzKSB7DQorICAgICAgICB0aGlzLmRvbUhlbHBlciA9IERPTUhlbHBlci5nZXRJbnN0YW5jZShleHRlbnNpb25Qb2ludHMpOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgQ2xhc3M8SFRUUFhNTFdpcmVGb3JtYXQ+IGdldE1vZGVsVHlwZSgpIHsNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgV2lyZUZvcm1hdFByb3ZpZGVyIGNyZWF0ZVJlZmVyZW5jZVdpcmVGb3JtYXRQcm92aWRlcihSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgZW5kcG9pbnRSZWZlcmVuY2UpIHsNCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgV2lyZUZvcm1hdFByb3ZpZGVyIGNyZWF0ZVNlcnZpY2VXaXJlRm9ybWF0UHJvdmlkZXIoZmluYWwgUnVudGltZUVuZHBvaW50IGVuZHBvaW50KSB7DQorICAgICAgICByZXR1cm4gbmV3IFdpcmVGb3JtYXRQcm92aWRlcigpIHsNCisgICAgICAgICAgICBAT3ZlcnJpZGUNCisgICAgICAgICAgICBwdWJsaWMgSW50ZXJmYWNlQ29udHJhY3QgY29uZmlndXJlV2lyZUZvcm1hdEludGVyZmFjZUNvbnRyYWN0KEludGVyZmFjZUNvbnRyYWN0IGludGVyZmFjZUNvbnRyYWN0KSB7DQorICAgICAgICAgICAgICAgIGludGVyZmFjZUNvbnRyYWN0LmdldEludGVyZmFjZSgpLnJlc2V0RGF0YUJpbmRpbmcoRE9NRGF0YUJpbmRpbmcuTkFNRSk7DQorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmZhY2VDb250cmFjdDsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgQE92ZXJyaWRlDQorICAgICAgICAgICAgcHVibGljIEludGVyY2VwdG9yIGNyZWF0ZUludGVyY2VwdG9yKCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEhUVFBYTUxXaXJlRm9ybWF0U2VydmljZUludGVyY2VwdG9yKGVuZHBvaW50LCBkb21IZWxwZXIpOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBAT3ZlcnJpZGUNCisgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGdldFBoYXNlKCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gUGhhc2UuU0VSVklDRV9CSU5ESU5HX1dJUkVGT1JNQVQ7DQorICAgICAgICAgICAgfX07DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL2Zvcm1hdC9IVFRQWE1MV2lyZUZvcm1hdFNlcnZpY2VJbnRlcmNlcHRvci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL2Zvcm1hdC9IVFRQWE1MV2lyZUZvcm1hdFNlcnZpY2VJbnRlcmNlcHRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZDhiOGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvZm9ybWF0L0hUVFBYTUxXaXJlRm9ybWF0U2VydmljZUludGVyY2VwdG9yLmphdmEKQEAgLTAsMCArMSwxODIgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCisNCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLmZvcm1hdDsNCisNCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuU29ydGVkU2V0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuVHJlZVNldDsNCisNCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0UmVxdWVzdDsNCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsNCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnByb3ZpZGVyLkhUVFBDb250ZXh0Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi54bWwuZG9tLkRPTUhlbHBlcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsLkZhdWx0RXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW50ZXJjZXB0b3I7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZva2VyOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb247DQoraW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7DQoraW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7DQoraW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsNCisNCisvKioNCisgKiBIYW5kbGVzIHRoZSB4bWwgd2lyZSBmb3JtYXQgZm9yIHRoZSBodHRwIGJpbmRpbmcNCisgKi8NCitwdWJsaWMgY2xhc3MgSFRUUFhNTFdpcmVGb3JtYXRTZXJ2aWNlSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBJbnRlcmNlcHRvciB7DQorDQorICAgIHByaXZhdGUgSW52b2tlciBuZXh0Ow0KKyAgICBwcml2YXRlIERPTUhlbHBlciBkb21IZWxwZXI7DQorDQorICAgIHB1YmxpYyBIVFRQWE1MV2lyZUZvcm1hdFNlcnZpY2VJbnRlcmNlcHRvcihSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQsIERPTUhlbHBlciBkb21IZWxwZXIpIHsNCisgICAgICAgIHRoaXMuZG9tSGVscGVyID0gZG9tSGVscGVyOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXROZXh0KEludm9rZXIgbmV4dCkgew0KKyAgICAgICAgdGhpcy5uZXh0ID0gbmV4dDsNCisgICAgfQ0KKw0KKyAgICBAT3ZlcnJpZGUNCisgICAgcHVibGljIEludm9rZXIgZ2V0TmV4dCgpIHsNCisgICAgICAgIHJldHVybiBuZXh0Ow0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgTWVzc2FnZSBpbnZva2UoTWVzc2FnZSBtc2cpIHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgcmV0dXJuIGludm9rZVJlc3BvbnNlKGdldE5leHQoKS5pbnZva2UoaW52b2tlUmVxdWVzdChtc2cpKSk7DQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbihlKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBwcml2YXRlIE1lc3NhZ2UgaW52b2tlUmVxdWVzdChNZXNzYWdlIG1zZykgdGhyb3dzIElPRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24gew0KKyAgICAgICAgSFRUUENvbnRleHQgY29udGV4dCA9IG1zZy5nZXRCaW5kaW5nQ29udGV4dCgpOw0KKyAgICAgICAgSHR0cFNlcnZsZXRSZXF1ZXN0IHNlcnZsZXRSZXF1ZXN0ID0gY29udGV4dC5nZXRSZXF1ZXN0KCk7DQorICAgICAgICBpZiAoIkdFVCIuZXF1YWxzKHNlcnZsZXRSZXF1ZXN0LmdldE1ldGhvZCgpKSkgew0KKyAgICAgICAgICAgIG1zZy5zZXRCb2R5KGdldFJlcXVlc3RGcm9tUXVlcnlTdHJpbmcobXNnLmdldE9wZXJhdGlvbigpLCBzZXJ2bGV0UmVxdWVzdCkpOw0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBtc2cuc2V0Qm9keShuZXcgT2JqZWN0W117ZG9tSGVscGVyLmxvYWQocmVhZChzZXJ2bGV0UmVxdWVzdCkpfSk7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gbXNnOw0KKyAgICB9DQorDQorICAgIHByaXZhdGUgTWVzc2FnZSBpbnZva2VSZXNwb25zZShNZXNzYWdlIG1zZykgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisgICAgICAgIEhUVFBDb250ZXh0IGNvbnRleHQgPSBtc2cuZ2V0QmluZGluZ0NvbnRleHQoKTsNCisgICAgICAgIEh0dHBTZXJ2bGV0UmVzcG9uc2Ugc2VydmxldFJlc3BvbnNlID0gY29udGV4dC5nZXRSZXNwb25zZSgpOw0KKw0KKyAgICAgICAgc2VydmxldFJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJ0ZXh0L3htbCIpOw0KKyAgICAgICAgDQorICAgICAgICBPYmplY3QgbyA9IG1zZy5nZXRCb2R5KCk7DQorICAgICAgICBpZiAobXNnLmlzRmF1bHQoKSkgew0KKyAgICAgICAgICAgIFN0cmluZyB4bWwgPSBkb21IZWxwZXIuc2F2ZUFzU3RyaW5nKChOb2RlKSgoRmF1bHRFeGNlcHRpb24pbykuZ2V0RmF1bHRJbmZvKCkpOw0KKyAgICAgICAgICAgIHNlcnZsZXRSZXNwb25zZS5zZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1IsIHhtbCk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIFN0cmluZyB4bWwgPSAiIjsNCisgICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEVsZW1lbnQpIHsNCisgICAgICAgICAgICAgICB4bWwgPSBkb21IZWxwZXIuc2F2ZUFzU3RyaW5nKChOb2RlKW8pOw0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoKG8gaW5zdGFuY2VvZiBPYmplY3RbXSkgJiYgKChPYmplY3RbXSlvKVswXSBpbnN0YW5jZW9mIE5vZGUpIHsNCisgICAgICAgICAgICAgICAgeG1sID0gZG9tSGVscGVyLnNhdmVBc1N0cmluZygoTm9kZSkoKE9iamVjdFtdKW8pWzBdKTsNCisgICAgICAgICAgICB9IGVsc2UgaWYgKG8gIT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJleHBlY3RpbmcgTm9kZSBwYXlsb2FkOiAiICsgbyk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHNlcnZsZXRSZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKS5wcmludGxuKHhtbCk7DQorICAgICAgICB9DQorDQorICAgICAgICByZXR1cm4gbXNnOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBUdXJuIHRoZSBxdWVyeSByZXF1ZXN0IGludG8gWE1MLg0KKyAgICAgKi8NCisgICAgcHJvdGVjdGVkIE9iamVjdFtdIGdldFJlcXVlc3RGcm9tUXVlcnlTdHJpbmcoT3BlcmF0aW9uIG9wZXJhdGlvbiwgU2VydmxldFJlcXVlc3Qgc2VydmxldFJlcXVlc3QpIHRocm93cyBJT0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uIHsNCisgICAgICAgIExpc3Q8T2JqZWN0PiB4bWxSZXF1ZXN0QXJyYXkgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsNCisgICAgICAgIGZvciAoU3RyaW5nIG5hbWUgOiBnZXRPcmRlcmVkUGFyYW1ldGVyTmFtZXMoc2VydmxldFJlcXVlc3QpKSB7DQorICAgICAgICAgICAgeG1sUmVxdWVzdEFycmF5LmFkZChkb21IZWxwZXIubG9hZCgiPCIgKyBuYW1lICsgIj4iICsgc2VydmxldFJlcXVlc3QuZ2V0UGFyYW1ldGVyKG5hbWUpICsgIjwvIiArIG5hbWUgKyAiPiIpKTsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiB4bWxSZXF1ZXN0QXJyYXkudG9BcnJheSgpOw0KKyAgICB9DQorDQorICAgIC8qKg0KKyAgICAgKiBHZXQgdGhlIHJlcXVlc3QgcGFyYW1ldGVyIG5hbWVzIGluIHRoZSBjb3JyZWN0IG9yZGVyLg0KKyAgICAgKiBFaXRoZXIgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgYXJlIG5hbWVkIGFyZzAsIGFyZzEsIGFyZzIgZXRjIG9yIGVsc2UgdXNlIHRoZSBvcmRlcg0KKyAgICAgKiBmcm9tIHRoZSBvcmRlciBpbiB0aGUgcXVlcnkgc3RyaW5nLiBFZywgdGhlIHVybDoNCisgICAgICogICBodHRwOi8vbG9jYWxob3N0OjgwODUvSGVsbG9Xb3JsZFNlcnZpY2Uvc2F5SGVsbG8yP2ZpcnN0PXBldHJhJmxhc3Q9YXJub2xkJmNhbGxiYWNrPWZvbyINCisgICAgICogc2hvdWxkIGludm9rZToNCisgICAgICogICBzYXlIZWxsbzIoInBldHJhIiwgImFybm9sZCIpDQorICAgICAqIHNvIHRoZSBwYXJhbWV0ZXIgbmFtZXMgc2hvdWxkIGJlIG9yZGVyZWQ6ICJmaXJzdCIsICJsYXN0Ig0KKyAgICAgKi8NCisgICAgcHJvdGVjdGVkIExpc3Q8U3RyaW5nPiBnZXRPcmRlcmVkUGFyYW1ldGVyTmFtZXMoU2VydmxldFJlcXVlc3Qgc2VydmxldFJlcXVlc3QpIHsNCisgICAgICAgIExpc3Q8U3RyaW5nPiBvcmRlcmVkTmFtZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisgICAgICAgIFNldDxTdHJpbmc+IHBhcmFtZXRlck5hbWVzID0gc2VydmxldFJlcXVlc3QuZ2V0UGFyYW1ldGVyTWFwKCkua2V5U2V0KCk7DQorICAgICAgICBpZiAocGFyYW1ldGVyTmFtZXMuY29udGFpbnMoImFyZzAiKSkgew0KKyAgICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxwYXJhbWV0ZXJOYW1lcy5zaXplKCk7IGkrKykgew0KKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9ICJhcmciICsgaTsNCisgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlck5hbWVzLmNvbnRhaW5zKG5hbWUpKSB7DQorICAgICAgICAgICAgICAgICAgICBvcmRlcmVkTmFtZXMuYWRkKG5hbWUpOw0KKyAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBxdWVyeVN0cmluZyA9ICgoSHR0cFNlcnZsZXRSZXF1ZXN0KXNlcnZsZXRSZXF1ZXN0KS5nZXRRdWVyeVN0cmluZygpOw0KKyAgICAgICAgICAgIFNvcnRlZFNldDxTdHJpbmc+IHNvcnRlZE5hbWVzID0gbmV3IFRyZWVTZXQ8U3RyaW5nPihuZXcgQ29tcGFyYXRvcjxTdHJpbmc+KCl7DQorICAgICAgICAgICAgICAgIHB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgbzEsIFN0cmluZyBvMikgew0KKyAgICAgICAgICAgICAgICAgICAgaW50IGkgPSBxdWVyeVN0cmluZy5pbmRleE9mKG8xKTsNCisgICAgICAgICAgICAgICAgICAgIGludCBqID0gcXVlcnlTdHJpbmcuaW5kZXhPZihvMik7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAtIGo7DQorICAgICAgICAgICAgICAgIH19KTsNCisgICAgICAgICAgICBmb3IgKFN0cmluZyBuYW1lIDogcGFyYW1ldGVyTmFtZXMpIHsNCisgICAgICAgICAgICAgICAgc29ydGVkTmFtZXMuYWRkKG5hbWUpOyAgICANCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgb3JkZXJlZE5hbWVzLmFkZEFsbChzb3J0ZWROYW1lcyk7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gb3JkZXJlZE5hbWVzOw0KKyAgICB9DQorDQorICAgIHByb3RlY3RlZCBzdGF0aWMgU3RyaW5nIHJlYWQoSHR0cFNlcnZsZXRSZXF1ZXN0IHNlcnZsZXRSZXF1ZXN0KSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSBzZXJ2bGV0UmVxdWVzdC5nZXRJbnB1dFN0cmVhbSgpOw0KKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOw0KKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsNCisgICAgICAgICAgICBTdHJpbmcgc3RyOw0KKyAgICAgICAgICAgIHdoaWxlICgoc3RyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsNCisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKHN0cik7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOw0KKyAgICAgICAgfSBmaW5hbGx5IHsNCisgICAgICAgICAgICBpZiAocmVhZGVyICE9IG51bGwpIHsNCisgICAgICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9wcm92aWRlci9IVFRQQmluZGluZ0xpc3RlbmVyU2VydmxldC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL3Byb3ZpZGVyL0hUVFBCaW5kaW5nTGlzdGVuZXJTZXJ2bGV0LmphdmEKaW5kZXggMGZlMTMzMy4uZTJhM2E1YyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL3Byb3ZpZGVyL0hUVFBCaW5kaW5nTGlzdGVuZXJTZXJ2bGV0LmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL3Byb3ZpZGVyL0hUVFBCaW5kaW5nTGlzdGVuZXJTZXJ2bGV0LmphdmEKQEAgLTc1LDEzICs3NSwxNCBAQAogICAgIEBPdmVycmlkZQogICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3QgcGF0aAotICAgICAgICBTdHJpbmcgcGF0aCA9IFVSTERlY29kZXIuZGVjb2RlKHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpLnN1YnN0cmluZyhyZXF1ZXN0LmdldFNlcnZsZXRQYXRoKCkubGVuZ3RoKCkpLCAiVVRGLTgiKTsKLSAgICAgICAgaWYgKHBhdGgubGVuZ3RoKCkgPT0wKSB7ICAgICAgICAgICAgCisgICAgICAgIFN0cmluZyBwYXRoSW5mbyA9IHJlcXVlc3QuZ2V0UGF0aEluZm8oKTsKKyAgICAgICAgaWYgKHBhdGhJbmZvID09IG51bGwgfHwgcGF0aEluZm8ubGVuZ3RoKCkgPT0gMCkgeyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gUmVkaXJlY3QgdG8gYSBVUkwgZW5kaW5nIHdpdGggLyB0byBtYWtlIHJlbGF0aXZlIGhyZWZzIHdvcmsKICAgICAgICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzZXJ2ZWQgcmVzb3VyY2UuCiAgICAgICAgICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QocmVxdWVzdC5nZXRSZXF1ZXN0VVJMKCkuYXBwZW5kKCcvJykudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHBhdGggPSBVUkxEZWNvZGVyLmRlY29kZShwYXRoSW5mbywgIlVURi04Iik7CiAKICAgICAgICAgLy8gSW52b2tlIHRoZSBnZXQgb3BlcmF0aW9uIG9uIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uCiAgICAgICAgIE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UgPSBtZXNzYWdlRmFjdG9yeS5jcmVhdGVNZXNzYWdlKCk7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvcHJvdmlkZXIvSFRUUEJpbmRpbmdTZXJ2aWNlU2VydmxldC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL3Byb3ZpZGVyL0hUVFBCaW5kaW5nU2VydmljZVNlcnZsZXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODYwMzI1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL3Byb3ZpZGVyL0hUVFBCaW5kaW5nU2VydmljZVNlcnZsZXQuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnByb3ZpZGVyOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50OworCitwdWJsaWMgY2xhc3MgSFRUUEJpbmRpbmdTZXJ2aWNlU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKKworICAgIHByb3RlY3RlZCB0cmFuc2llbnQgTWVzc2FnZUZhY3RvcnkgbWVzc2FnZUZhY3Rvcnk7CisgICAgcHJvdGVjdGVkIHRyYW5zaWVudCBSdW50aW1lRW5kcG9pbnQgd2lyZTsKKyAgICAKKyAgICBwdWJsaWMgSFRUUEJpbmRpbmdTZXJ2aWNlU2VydmxldChSdW50aW1lRW5kcG9pbnQgd2lyZSwgTWVzc2FnZUZhY3RvcnkgbWVzc2FnZUZhY3RvcnkpIHsKKyAgICAgICAgdGhpcy53aXJlID0gd2lyZTsKKyAgICAgICAgdGhpcy5tZXNzYWdlRmFjdG9yeSA9IG1lc3NhZ2VGYWN0b3J5OworICAgIH0KKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXJ2aWNlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICBIVFRQQ29udGV4dCBiaW5kaW5nQ29udGV4dCA9IG5ldyBIVFRQQ29udGV4dCgpOworICAgICAgICBiaW5kaW5nQ29udGV4dC5zZXRSZXF1ZXN0KHJlcXVlc3QpOworICAgICAgICBiaW5kaW5nQ29udGV4dC5zZXRSZXNwb25zZShyZXNwb25zZSk7CisgICAgICAgIE1lc3NhZ2UgbXNnID0gbWVzc2FnZUZhY3RvcnkuY3JlYXRlTWVzc2FnZSgpOworICAgICAgICBtc2cuc2V0QmluZGluZ0NvbnRleHQoYmluZGluZ0NvbnRleHQpOworICAgICAgICB3aXJlLmludm9rZShtc2cpOworICAgIH0gICAgCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvcHJvdmlkZXIvSFRUUENvbnRleHQuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9wcm92aWRlci9IVFRQQ29udGV4dC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDk4MjMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvcHJvdmlkZXIvSFRUUENvbnRleHQuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5wcm92aWRlcjsNCisNCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsNCitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7DQorDQorLyoqDQorICogSG9sZGVyIHRvIHBhc3Mgc2VydmxldCByZXF1ZXN0IGFuZCByZXNwb25zZSBiZXR3ZWVuIHRoZSBJbnRlY2VwdG9ycw0KKyAqLw0KK3B1YmxpYyBjbGFzcyBIVFRQQ29udGV4dCB7DQorICAgIA0KKyAgICBwcml2YXRlIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0Ow0KKyAgICBwcml2YXRlIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2U7DQorDQorICAgIHB1YmxpYyBIdHRwU2VydmxldFJlcXVlc3QgZ2V0UmVxdWVzdCgpIHsNCisgICAgICAgIHJldHVybiByZXF1ZXN0Ow0KKyAgICB9DQorICAgIHB1YmxpYyB2b2lkIHNldFJlcXVlc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHsNCisgICAgICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7DQorICAgIH0NCisgICAgcHVibGljIEh0dHBTZXJ2bGV0UmVzcG9uc2UgZ2V0UmVzcG9uc2UoKSB7DQorICAgICAgICByZXR1cm4gcmVzcG9uc2U7DQorICAgIH0NCisgICAgcHVibGljIHZvaWQgc2V0UmVzcG9uc2UoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgew0KKyAgICAgICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9wcm92aWRlci9IVFRQR2V0TGlzdGVuZXJTZXJ2bGV0LmphdmEgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvcHJvdmlkZXIvSFRUUEdldExpc3RlbmVyU2VydmxldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjBkNDIwLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9wcm92aWRlci9IVFRQR2V0TGlzdGVuZXJTZXJ2bGV0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnByb3ZpZGVyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTERlY29kZXI7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZUZhY3Rvcnk7Ci0KLS8qKgotICogU2VydmxldCByZXNwb25zaWJsZSBmb3IgZGlzcGF0Y2hpbmcgSFRUUCBHRVQgcmVxdWVzdHMgdG8gdGhlCi0gKiB0YXJnZXQgY29tcG9uZW50IGltcGxlbWVudGF0aW9uLgotICoKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgSFRUUEdldExpc3RlbmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAyODY1NDY2NDE3MzI5NDMwNjEwTDsKLSAgICAKLSAgICBwcml2YXRlIE1lc3NhZ2VGYWN0b3J5IG1lc3NhZ2VGYWN0b3J5OwotICAgIHByaXZhdGUgSW52b2tlciBnZXRJbnZva2VyOwotICAgIAotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBuZXcgSFRUUFNlcnZpY2VMaXN0ZW5lclNlcnZsZXQuCi0gICAgICovCi0gICAgcHVibGljIEhUVFBHZXRMaXN0ZW5lclNlcnZsZXQoSW52b2tlciBnZXRJbnZva2VyLCBNZXNzYWdlRmFjdG9yeSBtZXNzYWdlRmFjdG9yeSkgewotICAgICAgICB0aGlzLmdldEludm9rZXIgPSBnZXRJbnZva2VyOwotICAgICAgICB0aGlzLm1lc3NhZ2VGYWN0b3J5ID0gbWVzc2FnZUZhY3Rvcnk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLSAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0IHBhdGgKLSAgICAgICAgU3RyaW5nIHBhdGggPSBVUkxEZWNvZGVyLmRlY29kZShyZXF1ZXN0LmdldFJlcXVlc3RVUkkoKS5zdWJzdHJpbmcocmVxdWVzdC5nZXRTZXJ2bGV0UGF0aCgpLmxlbmd0aCgpKSwgIlVURi04Iik7Ci0gICAgICAgIGlmIChwYXRoLmxlbmd0aCgpID09MCkgewotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBSZWRpcmVjdCB0byBhIFVSTCBlbmRpbmcgd2l0aCAvIHRvIG1ha2UgcmVsYXRpdmUgaHJlZnMgd29yawotICAgICAgICAgICAgLy8gcmVsYXRpdmUgdG8gdGhlIHNlcnZlZCByZXNvdXJjZS4KLSAgICAgICAgICAgIHJlc3BvbnNlLnNlbmRSZWRpcmVjdChyZXF1ZXN0LmdldFJlcXVlc3RVUkwoKS5hcHBlbmQoJy8nKS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEludm9rZSB0aGUgZ2V0IG9wZXJhdGlvbiBvbiB0aGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbgotICAgICAgICBNZXNzYWdlIHJlcXVlc3RNZXNzYWdlID0gbWVzc2FnZUZhY3RvcnkuY3JlYXRlTWVzc2FnZSgpOwotICAgICAgICBTdHJpbmcgaWQgPSBwYXRoLnN1YnN0cmluZygxKTsKLSAgICAgICAgcmVxdWVzdE1lc3NhZ2Uuc2V0Qm9keShuZXcgT2JqZWN0W10ge2lkfSk7Ci0gICAgICAgIE1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlID0gZ2V0SW52b2tlci5pbnZva2UocmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICBpZiAocmVzcG9uc2VNZXNzYWdlLmlzRmF1bHQoKSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oKFRocm93YWJsZSlyZXNwb25zZU1lc3NhZ2UuZ2V0Qm9keSgpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gV3JpdGUgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdG8gdGhlIHJlc3BvbnNlCi0gICAgICAgIC8vIG91dHB1dCBzdHJlYW0KLSAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSAoSW5wdXRTdHJlYW0pcmVzcG9uc2VNZXNzYWdlLmdldEJvZHkoKTsKLSAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7IAotICAgICAgICBieXRlW10gYnVmZmVyID0gbmV3IGJ5dGVbMjA0OF07Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIGludCBuID0gaXMucmVhZChidWZmZXIpOwotICAgICAgICAgICAgaWYgKG4gPD0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIG9zLndyaXRlKGJ1ZmZlciwgMCwgbik7Ci0gICAgICAgIH0KLSAgICAgICAgb3MuZmx1c2goKTsKLSAgICAgICAgb3MuY2xvc2UoKTsKLSAgICAgICAgCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvcHJvdmlkZXIvSFRUUFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9wcm92aWRlci9IVFRQU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCmluZGV4IDQxOTgxZDIuLmUxMjNjMjggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9wcm92aWRlci9IVFRQU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9wcm92aWRlci9IVFRQU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCkBAIC0yMiw2ICsyMiw4IEBACiBpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0OwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuSFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3RvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQRGVmYXVsdFdpcmVGb3JtYXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0Lmh0dHAuU2VydmxldEhvc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlQ29udHJhY3Q7CkBAIC0zNiw4ICszOCw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5Qcm92aWRlckZhY3RvcnlFeHRlbnNpb25Qb2ludDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLldpcmVGb3JtYXRQcm92aWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLldpcmVGb3JtYXRQcm92aWRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lRW5kcG9pbnQ7CiAKIC8qKgpAQCAtNDksMTcgKzQ5LDE1IEBACiAgICAgcHJpdmF0ZSBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGV4dGVuc2lvblBvaW50czsKICAgICAKICAgICBwcml2YXRlIFJ1bnRpbWVFbmRwb2ludCBlbmRwb2ludDsKLSAgICBwcml2YXRlIFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50OwotICAgIHByaXZhdGUgUnVudGltZUNvbXBvbmVudFNlcnZpY2Ugc2VydmljZTsgIAotICAgIHByaXZhdGUgSW50ZXJmYWNlQ29udHJhY3Qgc2VydmljZUNvbnRyYWN0OwogICAgIHByaXZhdGUgSFRUUEJpbmRpbmcgYmluZGluZzsKICAgICBwcml2YXRlIE1lc3NhZ2VGYWN0b3J5IG1lc3NhZ2VGYWN0b3J5OwotICAgIAogICAgIHByaXZhdGUgT3BlcmF0aW9uU2VsZWN0b3JQcm92aWRlciBvc1Byb3ZpZGVyOwogICAgIHByaXZhdGUgV2lyZUZvcm1hdFByb3ZpZGVyIHdmUHJvdmlkZXI7Ci0gICAgCiAgICAgcHJpdmF0ZSBTZXJ2bGV0SG9zdCBzZXJ2bGV0SG9zdDsKICAgICBwcml2YXRlIFN0cmluZyBzZXJ2bGV0TWFwcGluZzsKKyAgICBwcml2YXRlIEludGVyZmFjZUNvbnRyYWN0IGludGVyZmFjZUNvbnRyYWN0OworICAgIHByaXZhdGUgYm9vbGVhbiB3aWRnZXQ7CisKICAgICBwcml2YXRlIEhUVFBCaW5kaW5nTGlzdGVuZXJTZXJ2bGV0IGJpbmRpbmdMaXN0ZW5lclNlcnZsZXQ7CiAgICAKICAgICBwdWJsaWMgSFRUUFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIoUnVudGltZUVuZHBvaW50IGVuZHBvaW50LApAQCAtNjgsMTggKzY2LDI0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZsZXRIb3N0IHNlcnZsZXRIb3N0KSB7CiAgICAgCQogICAgIAl0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7Ci0gICAgICAgIHRoaXMuY29tcG9uZW50ID0gKFJ1bnRpbWVDb21wb25lbnQpZW5kcG9pbnQuZ2V0Q29tcG9uZW50KCk7Ci0gICAgICAgIHRoaXMuc2VydmljZSA9IChSdW50aW1lQ29tcG9uZW50U2VydmljZSllbmRwb2ludC5nZXRTZXJ2aWNlKCk7CiAgICAgICAgIHRoaXMuYmluZGluZyA9IChIVFRQQmluZGluZyllbmRwb2ludC5nZXRCaW5kaW5nKCk7CisgICAgICAgIHRoaXMud2lkZ2V0ID0gIldpZGdldCIuZXF1YWxzKGJpbmRpbmcuZ2V0TmFtZSgpKTsKICAgICAgICAgCiAgICAgICAgIHRoaXMuZXh0ZW5zaW9uUG9pbnRzID0gZXh0ZW5zaW9uUG9pbnRzOwogICAgICAgICB0aGlzLm1lc3NhZ2VGYWN0b3J5ID0gbWVzc2FnZUZhY3Rvcnk7CiAgICAgICAgIHRoaXMuc2VydmxldEhvc3QgPSBzZXJ2bGV0SG9zdDsKICAgICAgICAgCi0gICAgICAgIC8vIHJldHJpZXZlIG9wZXJhdGlvbiBzZWxlY3RvciBhbmQgd2lyZSBmb3JtYXQgc2VydmljZSBwcm92aWRlcnMKKyAgICAgICAgaWYgKGJpbmRpbmcuZ2V0T3BlcmF0aW9uU2VsZWN0b3IoKSA9PSBudWxsICYmICF3aWRnZXQpIHsKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0T3BlcmF0aW9uU2VsZWN0b3IobmV3IEhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3IoKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJpbmRpbmcuZ2V0UmVxdWVzdFdpcmVGb3JtYXQoKSA9PSBudWxsICYmICF3aWRnZXQpIHsKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0UmVxdWVzdFdpcmVGb3JtYXQobmV3IEhUVFBEZWZhdWx0V2lyZUZvcm1hdCgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmluZGluZy5nZXRSZXNwb25zZVdpcmVGb3JtYXQoKSA9PSBudWxsICYmICF3aWRnZXQpIHsKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0UmVzcG9uc2VXaXJlRm9ybWF0KG5ldyBIVFRQRGVmYXVsdFdpcmVGb3JtYXQoKSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIFByb3ZpZGVyRmFjdG9yeUV4dGVuc2lvblBvaW50ICBwcm92aWRlckZhY3RvcmllcyA9IGV4dGVuc2lvblBvaW50cy5nZXRFeHRlbnNpb25Qb2ludChQcm92aWRlckZhY3RvcnlFeHRlbnNpb25Qb2ludC5jbGFzcyk7Ci0KICAgICAgICAgCiAgICAgICAgIGlmIChiaW5kaW5nLmdldE9wZXJhdGlvblNlbGVjdG9yKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgLy8gQ29uZmlndXJlIHRoZSBpbnRlcmNlcHRvcnMgZm9yIG9wZXJhdGlvbiBzZWxlY3Rpb24KQEAgLTk3LDIzICsxMDEsMzYgQEAKICAgICAgICAgICAgIH0gICAgICAgICAgICAKICAgICAgICAgfQogCi0gICAgICAgIAotICAgICAgICAKICAgICAgICAgLy9jbG9uZSB0aGUgc2VydmljZSBjb250cmFjdCB0byBhdm9pZCBkYXRhYmluZGluZyBpc3N1ZXMKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHRoaXMuc2VydmljZUNvbnRyYWN0ID0gKEludGVyZmFjZUNvbnRyYWN0KSBzZXJ2aWNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuY2xvbmUoKTsKKyAgICAgICAgICAgIGludGVyZmFjZUNvbnRyYWN0ID0gKEludGVyZmFjZUNvbnRyYWN0KWVuZHBvaW50LmdldENvbXBvbmVudFNlcnZpY2VJbnRlcmZhY2VDb250cmFjdCgpLmNsb25lKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGNvbmZpZ3VyZSBkYXRhIGJpbmRpbmcKICAgICAgICAgICAgIGlmICh0aGlzLndmUHJvdmlkZXIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHdmUHJvdmlkZXIuY29uZmlndXJlV2lyZUZvcm1hdEludGVyZmFjZUNvbnRyYWN0KHNlcnZpY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSk7CisgICAgICAgICAgICAgICAgd2ZQcm92aWRlci5jb25maWd1cmVXaXJlRm9ybWF0SW50ZXJmYWNlQ29udHJhY3QoaW50ZXJmYWNlQ29udHJhY3QpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGNhdGNoKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRoaXMuc2VydmljZUNvbnRyYWN0ID0gc2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpOworICAgICAgICAgICAgLy8gc2hvdWxkbid0IGhhcHBlbgogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBzZXJ2bGV0TWFwcGluZyA9IGJpbmRpbmcuZ2V0VVJJKCk7CisgICAgICAgIGlmICghc2VydmxldE1hcHBpbmcuZW5kc1dpdGgoIi8iKSkgeworICAgICAgICAgICAgc2VydmxldE1hcHBpbmcgKz0gIi8iOworICAgICAgICB9CisgICAgICAgIGlmICghc2VydmxldE1hcHBpbmcuZW5kc1dpdGgoIioiKSkgeworICAgICAgICAgICAgc2VydmxldE1hcHBpbmcgKz0gIioiOworICAgICAgICB9CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc3RhcnQoKSB7CisgICAgICAgIGlmICh3aWRnZXQpIHsKKyAgICAgICAgICAgIHN0YXJ0MXgoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNlcnZsZXRIb3N0LmFkZFNlcnZsZXRNYXBwaW5nKHNlcnZsZXRNYXBwaW5nLCBuZXcgSFRUUEJpbmRpbmdTZXJ2aWNlU2VydmxldChlbmRwb2ludCwgbWVzc2FnZUZhY3RvcnkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzdGFydDF4KCkgewogICAgICAgICAvLyBHZXQgdGhlIGludm9rZXJzIGZvciB0aGUgc3VwcG9ydGVkIG9wZXJhdGlvbnMKICAgICAgICAgU2VydmxldCBzZXJ2bGV0ID0gbnVsbDsKICAgICAgICAgYmluZGluZ0xpc3RlbmVyU2VydmxldCA9IG5ldyBIVFRQQmluZGluZ0xpc3RlbmVyU2VydmxldChiaW5kaW5nLCBtZXNzYWdlRmFjdG9yeSApOwpAQCAtMTIyLDM5ICsxMzksMzkgQEAKICAgICAgICAgICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gb3BlcmF0aW9uLmdldE5hbWUoKTsKICAgICAgICAgICAgIGlmIChvcGVyYXRpb25OYW1lLmVxdWFscygiZ2V0IikpIHsgCiAgICAgICAgICAgICAgICAgSW52b2tlciBnZXRJbnZva2VyID0gaW52b2NhdGlvbkNoYWluLmdldEhlYWRJbnZva2VyKCk7Ci0gICAgICAgICAgICAgICAJYmluZGluZ0xpc3RlbmVyU2VydmxldC5zZXRHZXRJbnZva2VyKGdldEludm9rZXIpOworICAgICAgICAgICAgICAgIGJpbmRpbmdMaXN0ZW5lclNlcnZsZXQuc2V0R2V0SW52b2tlcihnZXRJbnZva2VyKTsKICAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gYmluZGluZ0xpc3RlbmVyU2VydmxldDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMoImNvbmRpdGlvbmFsR2V0IikpIHsKICAgICAgICAgICAgICAgICBJbnZva2VyIGNvbmRpdGlvbmFsR2V0SW52b2tlciA9IGludm9jYXRpb25DaGFpbi5nZXRIZWFkSW52b2tlcigpOwotICAgICAgICAgICAgICAgCWJpbmRpbmdMaXN0ZW5lclNlcnZsZXQuc2V0Q29uZGl0aW9uYWxHZXRJbnZva2VyKGNvbmRpdGlvbmFsR2V0SW52b2tlcik7CisgICAgICAgICAgICAgICAgYmluZGluZ0xpc3RlbmVyU2VydmxldC5zZXRDb25kaXRpb25hbEdldEludm9rZXIoY29uZGl0aW9uYWxHZXRJbnZva2VyKTsKICAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gYmluZGluZ0xpc3RlbmVyU2VydmxldDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMoImRlbGV0ZSIpKSB7CiAgICAgICAgICAgICAgICAgSW52b2tlciBkZWxldGVJbnZva2VyID0gaW52b2NhdGlvbkNoYWluLmdldEhlYWRJbnZva2VyKCk7Ci0gICAgICAgICAgICAgICAJYmluZGluZ0xpc3RlbmVyU2VydmxldC5zZXREZWxldGVJbnZva2VyKGRlbGV0ZUludm9rZXIpOworICAgICAgICAgICAgICAgIGJpbmRpbmdMaXN0ZW5lclNlcnZsZXQuc2V0RGVsZXRlSW52b2tlcihkZWxldGVJbnZva2VyKTsKICAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gYmluZGluZ0xpc3RlbmVyU2VydmxldDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMoImNvbmRpdGlvbmFsRGVsZXRlIikpIHsKICAgICAgICAgICAgICAgICBJbnZva2VyIGNvbmRpdGlvbmFsRGVsZXRlSW52b2tlciA9IGludm9jYXRpb25DaGFpbi5nZXRIZWFkSW52b2tlcigpOwotICAgICAgICAgICAgICAgCWJpbmRpbmdMaXN0ZW5lclNlcnZsZXQuc2V0Q29uZGl0aW9uYWxEZWxldGVJbnZva2VyKGNvbmRpdGlvbmFsRGVsZXRlSW52b2tlcik7CisgICAgICAgICAgICAgICAgYmluZGluZ0xpc3RlbmVyU2VydmxldC5zZXRDb25kaXRpb25hbERlbGV0ZUludm9rZXIoY29uZGl0aW9uYWxEZWxldGVJbnZva2VyKTsKICAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gYmluZGluZ0xpc3RlbmVyU2VydmxldDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMoInB1dCIpKSB7CiAgICAgICAgICAgICAgICAgSW52b2tlciBwdXRJbnZva2VyID0gaW52b2NhdGlvbkNoYWluLmdldEhlYWRJbnZva2VyKCk7Ci0gICAgICAgICAgICAgICAJYmluZGluZ0xpc3RlbmVyU2VydmxldC5zZXRQdXRJbnZva2VyKHB1dEludm9rZXIpOworICAgICAgICAgICAgICAgIGJpbmRpbmdMaXN0ZW5lclNlcnZsZXQuc2V0UHV0SW52b2tlcihwdXRJbnZva2VyKTsKICAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gYmluZGluZ0xpc3RlbmVyU2VydmxldDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMoImNvbmRpdGlvbmFsUHV0IikpIHsKICAgICAgICAgICAgICAgICBJbnZva2VyIGNvbmRpdGlvbmFsUHV0SW52b2tlciA9IGludm9jYXRpb25DaGFpbi5nZXRIZWFkSW52b2tlcigpOwotICAgICAgICAgICAgICAgCWJpbmRpbmdMaXN0ZW5lclNlcnZsZXQuc2V0Q29uZGl0aW9uYWxQdXRJbnZva2VyKGNvbmRpdGlvbmFsUHV0SW52b2tlcik7CisgICAgICAgICAgICAgICAgYmluZGluZ0xpc3RlbmVyU2VydmxldC5zZXRDb25kaXRpb25hbFB1dEludm9rZXIoY29uZGl0aW9uYWxQdXRJbnZva2VyKTsKICAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gYmluZGluZ0xpc3RlbmVyU2VydmxldDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMoInBvc3QiKSkgewogICAgICAgICAgICAgICAgIEludm9rZXIgcG9zdEludm9rZXIgPSBpbnZvY2F0aW9uQ2hhaW4uZ2V0SGVhZEludm9rZXIoKTsKLSAgICAgICAgICAgICAgIAliaW5kaW5nTGlzdGVuZXJTZXJ2bGV0LnNldFBvc3RJbnZva2VyKHBvc3RJbnZva2VyKTsKKyAgICAgICAgICAgICAgICBiaW5kaW5nTGlzdGVuZXJTZXJ2bGV0LnNldFBvc3RJbnZva2VyKHBvc3RJbnZva2VyKTsKICAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gYmluZGluZ0xpc3RlbmVyU2VydmxldDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMoImNvbmRpdGlvbmFsUG9zdCIpKSB7CiAgICAgICAgICAgICAgICAgSW52b2tlciBjb25kaXRpb25hbFBvc3RJbnZva2VyID0gaW52b2NhdGlvbkNoYWluLmdldEhlYWRJbnZva2VyKCk7Ci0gICAgICAgICAgICAgICAJYmluZGluZ0xpc3RlbmVyU2VydmxldC5zZXRDb25kaXRpb25hbFBvc3RJbnZva2VyKGNvbmRpdGlvbmFsUG9zdEludm9rZXIpOworICAgICAgICAgICAgICAgIGJpbmRpbmdMaXN0ZW5lclNlcnZsZXQuc2V0Q29uZGl0aW9uYWxQb3N0SW52b2tlcihjb25kaXRpb25hbFBvc3RJbnZva2VyKTsKICAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gYmluZGluZ0xpc3RlbmVyU2VydmxldDsKICAgICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uTmFtZS5lcXVhbHMoInNlcnZpY2UiKSkgewogICAgICAgICAgICAgICAgIEludm9rZXIgc2VydmljZUludm9rZXIgPSBpbnZvY2F0aW9uQ2hhaW4uZ2V0SGVhZEludm9rZXIoKTsKLSAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gbmV3IEhUVFBTZXJ2aWNlTGlzdGVuZXJTZXJ2bGV0KGJpbmRpbmcsIHNlcnZpY2VJbnZva2VyLCBtZXNzYWdlRmFjdG9yeSk7CisvLyAgICAgICAgICAgICAgICBzZXJ2bGV0ID0gbmV3IEhUVFBTZXJ2aWNlTGlzdGVuZXJTZXJ2bGV0KGJpbmRpbmcsIHNlcnZpY2VJbnZva2VyLCBtZXNzYWdlRmFjdG9yeSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IAogICAgICAgICB9CkBAIC0xNzQsMTQgKzE5MSwxMyBAQAogICAgICAgICAKICAgICAgICAgc2VydmxldEhvc3QuYWRkU2VydmxldE1hcHBpbmcoc2VydmxldE1hcHBpbmcsIHNlcnZsZXQpOwogICAgIH0KLQorICAgIAogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7ICAgICAgICAKLSAgICAgICAgLy8gVW5yZWdpc3RlciB0aGUgU2VydmxldCBmcm9tIHRoZSBTZXJ2bGV0IGhvc3QKICAgICAgICAgc2VydmxldEhvc3QucmVtb3ZlU2VydmxldE1hcHBpbmcoc2VydmxldE1hcHBpbmcpOwogICAgIH0KIAogICAgIHB1YmxpYyBJbnRlcmZhY2VDb250cmFjdCBnZXRCaW5kaW5nSW50ZXJmYWNlQ29udHJhY3QoKSB7Ci0gICAgICAgIHJldHVybiBzZXJ2aWNlLmdldEludGVyZmFjZUNvbnRyYWN0KCk7CisgICAgICAgIHJldHVybiBpbnRlcmZhY2VDb250cmFjdDsKICAgICB9CiAgICAgCiAgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNPbmVXYXlJbnZvY2F0aW9uKCkgewpAQCAtMTkyLDYgKzIwOCw4IEBACiAgICAgICogQWRkIHNwZWNpZmljIGh0dHAgaW50ZXJjZXB0b3IgdG8gaW52b2NhdGlvbiBjaGFpbgogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZSgpIHsKKyAgICAgICAgCisgICAgICAgIGlmICh3aWRnZXQpIHJldHVybjsKIAogICAgICAgICBJbnZvY2F0aW9uQ2hhaW4gYmluZGluZ0NoYWluID0gZW5kcG9pbnQuZ2V0QmluZGluZ0ludm9jYXRpb25DaGFpbigpOwogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvcHJvdmlkZXIvSFRUUFNlcnZpY2VMaXN0ZW5lclNlcnZsZXQuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9wcm92aWRlci9IVFRQU2VydmljZUxpc3RlbmVyU2VydmxldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzUyZGNlLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9wcm92aWRlci9IVFRQU2VydmljZUxpc3RlbmVyU2VydmxldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5wcm92aWRlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXQ7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldFJlc3BvbnNlOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5CaW5kaW5nOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZva2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlRmFjdG9yeTsKLQotLyoqCi0gKiBTZXJ2bGV0IHJlc3BvbnNpYmxlIGZvciBkaXNwYXRjaGluZyBIVFRQIHNlcnZpY2UgcmVxdWVzdHMgdG8gdGhlCi0gKiB0YXJnZXQgY29tcG9uZW50IGltcGxlbWVudGF0aW9uLgotICoKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgSFRUUFNlcnZpY2VMaXN0ZW5lclNlcnZsZXQgaW1wbGVtZW50cyBTZXJ2bGV0IHsKLSAgICB0cmFuc2llbnQgcHJpdmF0ZSBCaW5kaW5nIGJpbmRpbmc7Ci0gICAgdHJhbnNpZW50IHByaXZhdGUgU2VydmxldENvbmZpZyBjb25maWc7Ci0gICAgdHJhbnNpZW50IHByaXZhdGUgTWVzc2FnZUZhY3RvcnkgbWVzc2FnZUZhY3Rvcnk7Ci0gICAgdHJhbnNpZW50IHByaXZhdGUgSW52b2tlciBzZXJ2aWNlSW52b2tlcjsKLSAgICAKLSAgICAvKioKLSAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IEhUVFBTZXJ2aWNlTGlzdGVuZXJTZXJ2bGV0LgotICAgICAqLwotICAgIHB1YmxpYyBIVFRQU2VydmljZUxpc3RlbmVyU2VydmxldChCaW5kaW5nIGJpbmRpbmcsIEludm9rZXIgc2VydmljZUludm9rZXIsIE1lc3NhZ2VGYWN0b3J5IG1lc3NhZ2VGYWN0b3J5KSB7Ci0gICAgICAgIHRoaXMuYmluZGluZyA9IGJpbmRpbmc7Ci0gICAgICAgIHRoaXMuc2VydmljZUludm9rZXIgPSBzZXJ2aWNlSW52b2tlcjsKLSAgICAgICAgdGhpcy5tZXNzYWdlRmFjdG9yeSA9IG1lc3NhZ2VGYWN0b3J5OwotICAgIH0KLQotICAgIHB1YmxpYyBTZXJ2bGV0Q29uZmlnIGdldFNlcnZsZXRDb25maWcoKSB7Ci0gICAgICAgIHJldHVybiBjb25maWc7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRTZXJ2bGV0SW5mbygpIHsKLSAgICAgICAgcmV0dXJuICIiOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGluaXQoU2VydmxldENvbmZpZyBjb25maWcpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICAgICAgCi0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2VydmljZShTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIERpc3BhdGNoIHRoZSBzZXJ2aWNlIGludGVyYWN0aW9uIHRvIHRoZSBzZXJ2aWNlIGludm9rZXIKLSAgICAgICAgTWVzc2FnZSByZXF1ZXN0TWVzc2FnZSA9IG1lc3NhZ2VGYWN0b3J5LmNyZWF0ZU1lc3NhZ2UoKTsKLSAgICAgICAgcmVxdWVzdE1lc3NhZ2Uuc2V0Qm9keShuZXcgT2JqZWN0W117cmVxdWVzdCwgcmVzcG9uc2V9KTsKLSAgICAgICAgTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UgPSBzZXJ2aWNlSW52b2tlci5pbnZva2UocmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICBpZiAocmVzcG9uc2VNZXNzYWdlLmlzRmF1bHQoKSkgeyAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gVHVybiBhIGZhdWx0IGludG8gYW4gZXhjZXB0aW9uCi0gICAgICAgICAgICAvL3Rocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKChUaHJvd2FibGUpcmVzcG9uc2VNZXNzYWdlLmdldEJvZHkoKSk7Ci0gICAgICAgICAgICBUaHJvd2FibGUgZSA9IChUaHJvd2FibGUpcmVzcG9uc2VNZXNzYWdlLmdldEJvZHkoKTsKLSAgICAgICAgICAgICgoSHR0cFNlcnZsZXRSZXNwb25zZSlyZXNwb25zZSkuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfSU5URVJOQUxfU0VSVkVSX0VSUk9SLCBlLnRvU3RyaW5nKCkpOwotICAgICAgICB9Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5IGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5CmluZGV4IDE1YjBlNTEuLjQ4Njc4ODcgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeQorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3RvcnkKQEAgLTE2LDUgKzE2LDUgQEAKICMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KIA0KICMgSW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRoZSBiaW5kaW5nIGV4dGVuc2lvbg0KLW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnByb3ZpZGVyLkhUVFBCaW5kaW5nUHJvdmlkZXJGYWN0b3J5O21vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLkhUVFBCaW5kaW5nDQorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAucHJvdmlkZXIuSFRUUEJpbmRpbmdQcm92aWRlckZhY3Rvcnk7bW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcscmFua2luZz0xMDANCiANCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLk9wZXJhdGlvblNlbGVjdG9yUHJvdmlkZXJGYWN0b3J5IGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5PcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyRmFjdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDliOTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5PcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyRmFjdG9yeQpAQCAtMCwwICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorDQorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuZm9ybWF0LkhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3JQcm92aWRlckZhY3Rvcnk7bW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuSFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3Rvcg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuV2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuV2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGNkNTliCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5XaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5CkBAIC0wLDAgKzEsMTkgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5mb3JtYXQuSFRUUERlZmF1bHRXaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5O21vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLkhUVFBEZWZhdWx0V2lyZUZvcm1hdA0KK29yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLmZvcm1hdC5IVFRQWE1MV2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeTttb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQWE1MV2lyZUZvcm1hdA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9CZWFuQS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0JlYW5BLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmMzMzg5NQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9CZWFuQS5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwOw0KKw0KK3B1YmxpYyBjbGFzcyBCZWFuQSB7DQorDQorICAgIHByb3RlY3RlZCBCb29sZWFuIGI7DQorICAgIHByb3RlY3RlZCBTdHJpbmcgczsNCisgICAgcHJvdGVjdGVkIGludCB4Ow0KKyAgICBwcm90ZWN0ZWQgSW50ZWdlciB5Ow0KKyAgICANCisgICAgcHVibGljIEJvb2xlYW4gZ2V0QigpIHsNCisgICAgICAgIHJldHVybiBiOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBzZXRCKEJvb2xlYW4gYikgew0KKyAgICAgICAgdGhpcy5iID0gYjsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIFN0cmluZyBnZXRTKCkgew0KKyAgICAgICAgcmV0dXJuIHM7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIHNldFMoU3RyaW5nIHMpIHsNCisgICAgICAgIHRoaXMucyA9IHM7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBpbnQgZ2V0WCgpIHsNCisgICAgICAgIHJldHVybiB4Ow0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBzZXRYKGludCB4KSB7DQorICAgICAgICB0aGlzLnggPSB4Ow0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgSW50ZWdlciBnZXRZKCkgew0KKyAgICAgICAgcmV0dXJuIHk7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgc2V0WShJbnRlZ2VyIHkpIHsNCisgICAgICAgIHRoaXMueSA9IHk7DQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0NvbXBsZXhTdHVmZi5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0NvbXBsZXhTdHVmZi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMGQ0NTcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvQ29tcGxleFN0dWZmLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOw0KKw0KK0BSZW1vdGFibGUNCitwdWJsaWMgaW50ZXJmYWNlIENvbXBsZXhTdHVmZiB7DQorICAgIEJlYW5BIGVjaG9CZWFuQShCZWFuQSBiZWFuKTsNCisgICAgU3RyaW5nIG11bHRpUGFyYW1zKGludCB4LCBTdHJpbmcgcywgQm9vbGVhbiBiKTsNCisgICAgU3RyaW5nIG5vQXJncygpOw0KKyAgICB2b2lkIHZvaWRSZXR1cm4oKTsNCisgICAgU3RyaW5nIGNoZWNrZWRFeGNlcHRpb24oKSB0aHJvd3MgU29tZUV4Y2VwdGlvbjsNCisgICAgU3RyaW5nIHJ1bnRpbWVFeGNlcHRpb24oKTsNCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0NvbXBsZXhTdHVmZkltcGwuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9Db21wbGV4U3R1ZmZJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5NTAyNAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9Db21wbGV4U3R1ZmZJbXBsLmphdmEKQEAgLTAsMCArMSw1MyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7DQorDQorcHVibGljIGNsYXNzIENvbXBsZXhTdHVmZkltcGwgaW1wbGVtZW50cyBDb21wbGV4U3R1ZmYgew0KKw0KKyAgICBAT3ZlcnJpZGUNCisgICAgcHVibGljIEJlYW5BIGVjaG9CZWFuQShCZWFuQSBiZWFuKSB7DQorICAgICAgICByZXR1cm4gYmVhbjsNCisgICAgfQ0KKw0KKyAgICBAT3ZlcnJpZGUNCisgICAgcHVibGljIFN0cmluZyBtdWx0aVBhcmFtcyhpbnQgeCwgU3RyaW5nIHMsIEJvb2xlYW4gYikgew0KKyAgICAgICAgcmV0dXJuIHggKyBzICsgYjsNCisgICAgfQ0KKw0KKyAgICBAT3ZlcnJpZGUNCisgICAgcHVibGljIFN0cmluZyBub0FyZ3MoKSB7DQorICAgICAgICByZXR1cm4gIm5vQXJncyI7DQorICAgIH0NCisNCisgICAgQE92ZXJyaWRlDQorICAgIHB1YmxpYyB2b2lkIHZvaWRSZXR1cm4oKSB7DQorICAgIH0NCisNCisgICAgQE92ZXJyaWRlDQorICAgIHB1YmxpYyBTdHJpbmcgY2hlY2tlZEV4Y2VwdGlvbigpIHRocm93cyBTb21lRXhjZXB0aW9uIHsNCisgICAgICAgIHRocm93IG5ldyBTb21lRXhjZXB0aW9uKCJzb21lIG1zZyIpOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgU3RyaW5nIHJ1bnRpbWVFeGNlcHRpb24oKSB7DQorICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiYmFuZyIpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9Db21wbGV4U3R1ZmZUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0NvbXBsZXhTdHVmZlRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE1Zjg5OAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9Db21wbGV4U3R1ZmZUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMTIzIEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cDsNCisNCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsNCitpbXBvcnQgamF2YS5uZXQuVVJMOw0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0Ow0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsNCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOw0KK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsNCisNCisvKioNCisgKiBIVFRQIGJpbmRpbmcgdW5pdCB0ZXN0cyBmb3IgSGVsbG93b3JsZCBzZXJ2aWNlLg0KKyAqLw0KK3B1YmxpYyBjbGFzcyBDb21wbGV4U3R1ZmZUZXN0Q2FzZSB7DQorDQorICAgIHByaXZhdGUgc3RhdGljIE5vZGUgbm9kZTsNCisgICAgDQorICAgIEBCZWZvcmVDbGFzcw0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoImNvbXBsZXguY29tcG9zaXRlIiwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L3Rlc3QtY2xhc3NlcyJ9KTsNCisgICAgICAgIG5vZGUuc3RhcnQoKTsNCisgICAgfQ0KKw0KKyAgICBAQWZ0ZXJDbGFzcw0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsNCisgICAgICAgICAgICBub2RlLnN0b3AoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0NvbXBsZXhDb21wb25lbnQvQ29tcGxleFN0dWZmL211bHRpUGFyYW1zP3g9MSZzPXBldHJhJmI9dHJ1ZSIpOw0KKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1cmwub3BlblN0cmVhbSgpOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiXCIxcGV0cmF0cnVlXCIiLCByZWFkKGlzKSk7DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdE5vQXJncygpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9Db21wbGV4Q29tcG9uZW50L0NvbXBsZXhTdHVmZi9ub0FyZ3MiKTsNCisgICAgICAgIElucHV0U3RyZWFtIGlzID0gdXJsLm9wZW5TdHJlYW0oKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIlwibm9BcmdzXCIiLCByZWFkKGlzKSk7DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdEVjaG9CZWFuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0NvbXBsZXhDb21wb25lbnQvQ29tcGxleFN0dWZmL2VjaG9CZWFuQT94PXtcInNcIjpcInBldHJhXCIsXCJiXCI6dHJ1ZSxcInlcIjo0MixcInhcIjoxfSIpOw0KKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1cmwub3BlblN0cmVhbSgpOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygie1wic1wiOlwicGV0cmFcIixcImJcIjp0cnVlLFwieVwiOjQyLFwieFwiOjF9IiwgcmVhZChpcykpOw0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RWb2lkUmV0dXJuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0NvbXBsZXhDb21wb25lbnQvQ29tcGxleFN0dWZmL3ZvaWRSZXR1cm4iKTsNCisgICAgICAgIElucHV0U3RyZWFtIGlzID0gdXJsLm9wZW5TdHJlYW0oKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIiIsIHJlYWQoaXMpKTsNCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tlZEV4Y2VwdGlvbigpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9Db21wbGV4Q29tcG9uZW50L0NvbXBsZXhTdHVmZi9jaGVja2VkRXhjZXB0aW9uIik7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gdXJsLm9wZW5TdHJlYW0oKTsNCisgICAgICAgICAgICBBc3NlcnQuZmFpbCgpOw0KKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKyAgICAgICAgICAgIC8vIGV4cGVjdGVkICAgICAgICAgICAgDQorICAgICAgICAgICAgLy8gVE9ETzogd2hhdCBzaG91bGQgaGFwcGVuIHdpdGggY2hlY2tlZCBleGNlcHRpb25zPw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RSdW50aW1lRXhjZXB0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBVUkwgdXJsID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDgwL0NvbXBsZXhDb21wb25lbnQvQ29tcGxleFN0dWZmL3J1bnRpbWVFeGNlcHRpb24iKTsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1cmwub3BlblN0cmVhbSgpOw0KKyAgICAgICAgICAgIEFzc2VydC5mYWlsKCk7DQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQorICAgICAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCkuY29udGFpbnMoIkhUVFAgcmVzcG9uc2UgY29kZTogNTAwIikpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyByZWFkKElucHV0U3RyZWFtIGlzKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gbnVsbDsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpcykpOw0KKyAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsNCisgICAgICAgICAgICBTdHJpbmcgc3RyOw0KKyAgICAgICAgICAgIHdoaWxlICgoc3RyID0gcmVhZGVyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsNCisgICAgICAgICAgICAgICAgc2IuYXBwZW5kKHN0cik7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHJldHVybiBzYi50b1N0cmluZygpOw0KKyAgICAgICAgfSBmaW5hbGx5IHsNCisgICAgICAgICAgICBpZiAocmVhZGVyICE9IG51bGwpIHsNCisgICAgICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZ0NhY2hlVGVzdENhc2UuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZ0NhY2hlVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVkNzk3NS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvSFRUUEJpbmRpbmdDYWNoZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MDMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5Tb2NrZXQ7Ci1pbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7Ci1pbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uTG9jYXRpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOwotaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKLWltcG9ydCBvcmcuanVuaXQuVGVzdDsKLQotLyoqCi0gKiBIVFRQIGJpbmRpbmcgdW5pdCB0ZXN0cy4KLSAqIAotICogQHZlcnNpb24gJFJldiQgJERhdGUkCi0gKi8KLXB1YmxpYyBjbGFzcyBIVFRQQmluZGluZ0NhY2hlVGVzdENhc2UgewotCS8vIFJGQyA4MjIgZGF0ZSB0aW1lCi0JcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTaW1wbGVEYXRlRm9ybWF0IGRhdGVGb3JtYXQgPSBuZXcgU2ltcGxlRGF0ZUZvcm1hdCgKLQkJCSJFRUUsIGRkIE1NTSB5eXl5IEhIOm1tOnNzIFoiKTsKLQotCS8vIFJlcXVlc3Qgd2l0aCBubyBwcmVkaWNhdGVzIGluIGhlYWRlci4KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVDEgPSAiezB9IC9odHRwYmluZGluZy97MX0gSFRUUC8xLjBcbiIKLQkJCSsgIkhvc3Q6IGxvY2FsaG9zdFxuIiArICJDb250ZW50LVR5cGU6IHRleHQveG1sXG4iCi0JCQkrICJDb25uZWN0aW9uOiBjbG9zZVxuIiArICJDb250ZW50LUxlbmd0aDogezJ9IiArICJcblxuezN9IjsKLQotCS8vIFJlcXVlc3Qgd2l0aCBwcmVkaWNhdGVzIGluIGhlYWRlcgotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUMiA9ICJ7MH0gL2h0dHBiaW5kaW5nL3sxfSBIVFRQLzEuMFxuIgotCQkJKyAiSG9zdDogbG9jYWxob3N0XG4iICsgIkNvbnRlbnQtVHlwZTogdGV4dC94bWxcbiIgKyAiezJ9OiB7M31cbiIgLy8gcHJlZGljYXRlIChJZi1NYXRjaCwgSWYtTm9uZS1NYXRjaCwgSWYtTW9kaWZpZWQtU2luY2UsIElmLU5vdE1vZGlmaWVkLVNpbmNlKTogdmFsdWUgKGRhdGUgb3IgRVRhZykKLQkJCSsgIkNvbm5lY3Rpb246IGNsb3NlXG4iICsgIkNvbnRlbnQtTGVuZ3RoOiB7NH0iICsgIlxuXG57NX0iOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhUVFBfUE9SVCA9IDgwODU7Ci0KLQlwcml2YXRlIHN0YXRpYyBOb2RlIG5vZGU7Ci0KLQlAQmVmb3JlQ2xhc3MKLQlwdWJsaWMgc3RhdGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyBjb250cmlidXRpb24gPSBDb250cmlidXRpb25Mb2NhdGlvbkhlbHBlci5nZXRDb250cmlidXRpb25Mb2NhdGlvbihIVFRQQmluZGluZ0NhY2hlVGVzdENhc2UuY2xhc3MpOwotCQkJbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgidGVzdENhY2hlLmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oInRlc3QiLCBjb250cmlidXRpb24pKTsKLQkJCW5vZGUuc3RhcnQoKTsKLQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlAQWZ0ZXJDbGFzcwotCXB1YmxpYyBzdGF0aWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlub2RlLnN0b3AoKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgUE9KTyBnZXQgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDA7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDEsICJHRVQiLCBpbmRleCwgY29udGVudAotCQkJCS5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCI8Ym9keT48cD5pdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbEdldElmTW9kaWZpZWROZWdhdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotCQlpbnQgaW5kZXggPSAwOwotCQlTdHJpbmcgY29udGVudCA9ICIiOwotCQlTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFUVVFU1QyLCAiR0VUIiwgaW5kZXgsCi0JCQkJIklmLU1vZGlmaWVkLVNpbmNlIiwgZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUoMCkpLCBjb250ZW50Ci0JCQkJCQkuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBpdGVtCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIjxib2R5PjxwPml0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSAzMDQgTm90IE1vZGlmaWVkLgotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDMwNCIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgY29uZGl0aW9uYWwgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxHZXRJZk1vZGlmaWVkUG9zaXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMTsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIkdFVCIsIGluZGV4LAotCQkJCSJJZi1Nb2RpZmllZC1TaW5jZSIsIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKDApKSwgY29udGVudAotCQkJCQkJLmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCS8vIFNob3VsZCByZXR1cm4gaXRlbQotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIjxib2R5PjxwPml0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSAzMDQgTm90IE1vZGlmaWVkLgotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSAzMDQiKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsR2V0SWZVbm1vZGlmaWVkTmVnYXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMTsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIkdFVCIsIGluZGV4LAotCQkJCSJJZi1Vbm1vZGlmaWVkLVNpbmNlIiwgZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUoKSksIGNvbnRlbnQKLQkJCQkJCS5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiPGJvZHk+PHA+aXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDMwNCBOb3QgTW9kaWZpZWQuCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgMzA0IikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbEdldElmVW5tb2RpZmllZFBvc2l0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDA7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJHRVQiLCBpbmRleCwKLQkJCQkiSWYtVW5tb2RpZmllZC1TaW5jZSIsIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKDApKSwgY29udGVudAotCQkJCQkJLmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCS8vIFNob3VsZCByZXR1cm4gaXRlbQotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIjxib2R5PjxwPml0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSA0MTIgUHJlY29uZGl0aW9uRmFpbGVkLgotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSA0MTIiKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsR2V0SWZNYXRjaE5lZ2F0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDE7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJHRVQiLCBpbmRleCwKLQkJCQkiSWYtTWF0Y2giLCAiZVRhZ1hYWCIsIGNvbnRlbnQuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBpdGVtCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiPGJvZHk+PHA+aXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDQxMiBwcmVjb25kaXRpb24gZmFpbGVkLgotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSA0MTIiKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsR2V0SWZNYXRjaFBvc2l0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDA7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJHRVQiLCBpbmRleCwKLQkJCQkiSWYtTWF0Y2giLCAiZVRhZ1hYWCIsIGNvbnRlbnQuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBpdGVtCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIjxib2R5PjxwPml0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSA0MTIgUHJlY29uZGl0aW9uRmFpbGVkLgotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDQxMiIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgY29uZGl0aW9uYWwgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxHZXRJZk5vbmVNYXRjaE5lZ2F0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDE7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJHRVQiLCBpbmRleCwKLQkJCQkiSWYtTm9uZS1NYXRjaCIsICJlVGFnWFhYIiwgY29udGVudC5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiPGJvZHk+PHA+aXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDQxMiBwcmVjb25kaXRpb24gZmFpbGVkLgotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDQxMiIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgY29uZGl0aW9uYWwgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxHZXRJZk5vbmVNYXRjaFBvc2l0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDA7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJHRVQiLCBpbmRleCwKLQkJCQkiSWYtTm9uZS1NYXRjaCIsICJlVGFnWFhYIiwgY29udGVudC5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJLy8gYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCI8Ym9keT48cD5pdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgNDEyIFByZWNvbmRpdGlvbkZhaWxlZC4KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgNDEyIikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBQT0pPIGdldCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3REZWxldGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMDsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMSwgIkRFTEVURSIsIGluZGV4LAotCQkJCWNvbnRlbnQuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiZGVsZXRlZCBpdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbERlbGV0ZUlmTW9kaWZpZWROZWdhdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotCQlpbnQgaW5kZXggPSAwOwotCQlTdHJpbmcgY29udGVudCA9ICIiOwotCQlTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFUVVFU1QyLCAiREVMRVRFIiwgaW5kZXgsCi0JCQkJIklmLU1vZGlmaWVkLVNpbmNlIiwgZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUoMCkpLCBjb250ZW50Ci0JCQkJCQkuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBpdGVtCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoImRlbGV0ZWQgaXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDMwNCBOb3QgTW9kaWZpZWQuCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgMzA0IikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbERlbGV0ZUlmTW9kaWZpZWRQb3NpdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotCQlpbnQgaW5kZXggPSAxOwotCQlTdHJpbmcgY29udGVudCA9ICIiOwotCQlTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFUVVFU1QyLCAiREVMRVRFIiwgaW5kZXgsCi0JCQkJIklmLU1vZGlmaWVkLVNpbmNlIiwgZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUoMCkpLCBjb250ZW50Ci0JCQkJCQkuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBpdGVtCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiZGVsZXRlZCBpdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgMzA0IE5vdCBNb2RpZmllZC4KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgMzA0IikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbERlbGV0ZUlmVW5tb2RpZmllZE5lZ2F0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDE7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJERUxFVEUiLCBpbmRleCwKLQkJCQkiSWYtVW5tb2RpZmllZC1TaW5jZSIsIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKCkpLCBjb250ZW50Ci0JCQkJCQkuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBpdGVtCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoImRlbGV0ZWQgaXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDMwNCBOb3QgTW9kaWZpZWQuCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgMzA0IikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbERlbGV0ZUlmVW5tb2RpZmllZFBvc2l0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDA7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJERUxFVEUiLCBpbmRleCwKLQkJCQkiSWYtVW5tb2RpZmllZC1TaW5jZSIsIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKDApKSwgY29udGVudAotCQkJCQkJLmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCS8vIFNob3VsZCByZXR1cm4gaXRlbQotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoImRlbGV0ZWQgaXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDQxMiBQcmVjb25kaXRpb25GYWlsZWQuCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDQxMiIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgY29uZGl0aW9uYWwgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxEZWxldGVJZk1hdGNoTmVnYXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMTsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIkRFTEVURSIsIGluZGV4LAotCQkJCSJJZi1NYXRjaCIsICJlVGFnWFhYIiwgY29udGVudC5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJLy8gYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJkZWxldGVkIGl0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSA0MTIgcHJlY29uZGl0aW9uIGZhaWxlZC4KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgNDEyIikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbERlbGV0ZUlmTWF0Y2hQb3NpdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotCQlpbnQgaW5kZXggPSAwOwotCQlTdHJpbmcgY29udGVudCA9ICIiOwotCQlTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFUVVFU1QyLCAiREVMRVRFIiwgaW5kZXgsCi0JCQkJIklmLU1hdGNoIiwgImVUYWdYWFgiLCBjb250ZW50LmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCS8vIFNob3VsZCByZXR1cm4gaXRlbQotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJkZWxldGVkIGl0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSA0MTIgUHJlY29uZGl0aW9uRmFpbGVkLgotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDQxMiIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgY29uZGl0aW9uYWwgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxEZWxldGVJZk5vbmVNYXRjaE5lZ2F0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDE7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJERUxFVEUiLCBpbmRleCwKLQkJCQkiSWYtTm9uZS1NYXRjaCIsICJlVGFnWFhYIiwgY29udGVudC5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiZGVsZXRlZCBpdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgNDEyIHByZWNvbmRpdGlvbiBmYWlsZWQuCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgNDEyIikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbERlbGV0ZUlmTm9uZU1hdGNoUG9zaXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMDsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIkRFTEVURSIsIGluZGV4LAotCQkJCSJJZi1Ob25lLU1hdGNoIiwgImVUYWdYWFgiLCBjb250ZW50LmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCS8vIFNob3VsZCByZXR1cm4gaXRlbQotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoImRlbGV0ZWQgaXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDQxMiBQcmVjb25kaXRpb25GYWlsZWQuCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDQxMiIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgUE9KTyBnZXQgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0UG9zdCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotCQlpbnQgaW5kZXggPSAwOwotCQlTdHJpbmcgY29udGVudCA9ICIiOwotCQlTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFUVVFU1QxLCAiUE9TVCIsIGluZGV4LCBjb250ZW50Ci0JCQkJLmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDIwMCBPSyIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgY29uZGl0aW9uYWwgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxQb3N0SWZNb2RpZmllZE5lZ2F0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDA7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJQT1NUIiwgaW5kZXgsCi0JCQkJIklmLU1vZGlmaWVkLVNpbmNlIiwgZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUoKSksIGNvbnRlbnQKLQkJCQkJCS5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgMjAwIE9LCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigicG9zdGVkIGl0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDIwMCBPSyIpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDMwNCBOb3QgTW9kaWZpZWQuCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgMzA0IikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbFBvc3RJZk1vZGlmaWVkUG9zaXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMTsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIlBPU1QiLCBpbmRleCwKLQkJCQkiSWYtTW9kaWZpZWQtU2luY2UiLCBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZSgwKSksIGNvbnRlbnQKLQkJCQkJCS5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJLy8gYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJwb3N0ZWQgaXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDMwNCBOb3QgTW9kaWZpZWQuCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDMwNCIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgY29uZGl0aW9uYWwgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxQb3N0SWZVbm1vZGlmaWVkTmVnYXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMTsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIlBPU1QiLCBpbmRleCwKLQkJCQkiSWYtVW5tb2RpZmllZC1TaW5jZSIsIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKCkpLCBjb250ZW50Ci0JCQkJCQkuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDIwMCBPSwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSAyMDAgT0siKSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSAzMDQgTm90IE1vZGlmaWVkLgotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDMwNCIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgY29uZGl0aW9uYWwgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxQb3N0SWZVbm1vZGlmaWVkUG9zaXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMDsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIlBPU1QiLCBpbmRleCwKLQkJCQkiSWYtVW5tb2RpZmllZC1TaW5jZSIsIGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKDApKSwgY29udGVudAotCQkJCQkJLmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCS8vIFNob3VsZCByZXR1cm4gaXRlbQotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoInBvc3RlZCBpdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgNDEyIFByZWNvbmRpdGlvbkZhaWxlZC4KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgNDEyIikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbFBvc3RJZk1hdGNoTmVnYXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMTsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIlBPU1QiLCBpbmRleCwKLQkJCQkiSWYtTWF0Y2giLCAiZVRhZ01hdGNoIiwgY29udGVudC5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgMjAwIE9LLgotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSAyMDAgT0siKSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSA0MTIgcHJlY29uZGl0aW9uIGZhaWxlZC4KLQkJLy8gYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSA0MTIiKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsUG9zdElmTWF0Y2hQb3NpdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotCQlpbnQgaW5kZXggPSAwOwotCQlTdHJpbmcgY29udGVudCA9ICIiOwotCQlTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQKLQkJCQkuZm9ybWF0KFJFUVVFU1QyLCAiUE9TVCIsIGluZGV4LCAiSWYtTWF0Y2giLCAiZVRhZ05vbmVNYXRjaCIsCi0JCQkJCQljb250ZW50LmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCS8vIFNob3VsZCByZXR1cm4gaXRlbQotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoInBvc3RlZCBpdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgNDEyIFByZWNvbmRpdGlvbkZhaWxlZC4KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgNDEyIikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbFBvc3RJZk5vbmVNYXRjaE5lZ2F0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDE7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJQT1NUIiwgaW5kZXgsCi0JCQkJIklmLU5vbmUtTWF0Y2giLCAiZVRhZ05vbmVNYXRjaCIsIGNvbnRlbnQuZ2V0Qnl0ZXMoKS5sZW5ndGgsCi0JCQkJY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgMjAwIE9LCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDIwMCBPSyIpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDQxMiBwcmVjb25kaXRpb24gZmFpbGVkLgotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDQxMiIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgY29uZGl0aW9uYWwgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0Q29uZGl0aW9uYWxQb3N0SWZOb25lTWF0Y2hQb3NpdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotCQlpbnQgaW5kZXggPSAwOwotCQlTdHJpbmcgY29udGVudCA9ICIiOwotCQlTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFUVVFU1QyLCAiUE9TVCIsIGluZGV4LAotCQkJCSJJZi1Ob25lLU1hdGNoIiwgImVUYWdNYXRjaCIsIGNvbnRlbnQuZ2V0Qnl0ZXMoKS5sZW5ndGgsCi0JCQkJY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJLy8gYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJwb3N0ZWQgaXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDQxMiBQcmVjb25kaXRpb25GYWlsZWQuCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoIkhUVFAvMS4xIDQxMiIpICE9IC0xKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0IGludm9raW5nIGEgUE9KTyBnZXQgbWV0aG9kIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0UHV0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDA7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDEsICJQVVQiLCBpbmRleCwgY29udGVudAotCQkJCS5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJ1cGRhdGVkIGl0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsUHV0SWZNb2RpZmllZE5lZ2F0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDA7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJQVVQiLCBpbmRleCwKLQkJCQkiSWYtTW9kaWZpZWQtU2luY2UiLCBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZSgwKSksIGNvbnRlbnQKLQkJCQkJCS5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigidXBkYXRlZCBpdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgMzA0IE5vdCBNb2RpZmllZC4KLQkJLy8gYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSAzMDQiKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsUHV0SWZNb2RpZmllZFBvc2l0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDE7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJQVVQiLCBpbmRleCwKLQkJCQkiSWYtTW9kaWZpZWQtU2luY2UiLCBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZSgwKSksIGNvbnRlbnQKLQkJCQkJCS5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJLy8gYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJ1cGRhdGVkIGl0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSAzMDQgTm90IE1vZGlmaWVkLgotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSAzMDQiKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsUHV0SWZVbm1vZGlmaWVkTmVnYXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMTsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIlBVVCIsIGluZGV4LAotCQkJCSJJZi1Vbm1vZGlmaWVkLVNpbmNlIiwgZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUoKSksIGNvbnRlbnQKLQkJCQkJCS5nZXRCeXRlcygpLmxlbmd0aCwgY29udGVudCk7Ci0JCW9zLndyaXRlKHJlcXVlc3QuZ2V0Qnl0ZXMoKSk7Ci0JCW9zLmZsdXNoKCk7Ci0KLQkJU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotCQkvLyBTaG91bGQgcmV0dXJuIGl0ZW0KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigidXBkYXRlZCBpdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgMzA0IE5vdCBNb2RpZmllZC4KLQkJLy8gYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSAzMDQiKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsUHV0SWZVbm1vZGlmaWVkUG9zaXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMDsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIlBVVCIsIGluZGV4LAotCQkJCSJJZi1Vbm1vZGlmaWVkLVNpbmNlIiwgZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUoMCkpLCBjb250ZW50Ci0JCQkJCQkuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBpdGVtCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigidXBkYXRlZCBpdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgNDEyIFByZWNvbmRpdGlvbkZhaWxlZC4KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgNDEyIikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbFB1dElmTWF0Y2hOZWdhdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotCQlpbnQgaW5kZXggPSAxOwotCQlTdHJpbmcgY29udGVudCA9ICIiOwotCQlTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFUVVFU1QyLCAiUFVUIiwgaW5kZXgsCi0JCQkJIklmLU1hdGNoIiwgImVUYWdYWFgiLCBjb250ZW50LmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCS8vIFNob3VsZCByZXR1cm4gaXRlbQotCQkvLyBhc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoInVwZGF0ZWQgaXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDQxMiBwcmVjb25kaXRpb24gZmFpbGVkLgotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSA0MTIiKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsUHV0SWZNYXRjaFBvc2l0aXZlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotCQlPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0JCWludCBpbmRleCA9IDA7Ci0JCVN0cmluZyBjb250ZW50ID0gIiI7Ci0JCVN0cmluZyByZXF1ZXN0ID0gTWVzc2FnZUZvcm1hdC5mb3JtYXQoUkVRVUVTVDIsICJQVVQiLCBpbmRleCwKLQkJCQkiSWYtTWF0Y2giLCAiZVRhZ1hYWCIsIGNvbnRlbnQuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBpdGVtCi0JCUFzc2VydC5hc3NlcnRUcnVlKGRvY3VtZW50LmluZGV4T2YoInVwZGF0ZWQgaXRlbT0iICsgaW5kZXgpICE9IC0xKTsKLQkJLy8gU2hvdWxkIHJldHVybiBjb2RlIDQxMiBQcmVjb25kaXRpb25GYWlsZWQuCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgNDEyIikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFRlc3QgaW52b2tpbmcgYSBjb25kaXRpb25hbCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlAVGVzdAotCXB1YmxpYyB2b2lkIHRlc3RDb25kaXRpb25hbFB1dElmTm9uZU1hdGNoTmVnYXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU29ja2V0IGNsaWVudCA9IG5ldyBTb2NrZXQoIjEyNy4wLjAuMSIsIEhUVFBfUE9SVCk7Ci0JCU91dHB1dFN0cmVhbSBvcyA9IGNsaWVudC5nZXRPdXRwdXRTdHJlYW0oKTsKLQkJaW50IGluZGV4ID0gMTsKLQkJU3RyaW5nIGNvbnRlbnQgPSAiIjsKLQkJU3RyaW5nIHJlcXVlc3QgPSBNZXNzYWdlRm9ybWF0LmZvcm1hdChSRVFVRVNUMiwgIlBVVCIsIGluZGV4LAotCQkJCSJJZi1Ob25lLU1hdGNoIiwgImVUYWdYWFgiLCBjb250ZW50LmdldEJ5dGVzKCkubGVuZ3RoLCBjb250ZW50KTsKLQkJb3Mud3JpdGUocmVxdWVzdC5nZXRCeXRlcygpKTsKLQkJb3MuZmx1c2goKTsKLQotCQlTdHJpbmcgZG9jdW1lbnQgPSByZWFkKGNsaWVudCk7Ci0JCS8vIFNob3VsZCByZXR1cm4gaXRlbQotCQlBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJ1cGRhdGVkIGl0ZW09IiArIGluZGV4KSAhPSAtMSk7Ci0JCS8vIFNob3VsZCByZXR1cm4gY29kZSA0MTIgcHJlY29uZGl0aW9uIGZhaWxlZC4KLQkJLy8gYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCJIVFRQLzEuMSA0MTIiKSAhPSAtMSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdCBpbnZva2luZyBhIGNvbmRpdGlvbmFsIG1ldGhvZCBpbXBsZW1lbnRhdGlvbiB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCUBUZXN0Ci0JcHVibGljIHZvaWQgdGVzdENvbmRpdGlvbmFsUHV0SWZOb25lTWF0Y2hQb3NpdGl2ZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLQkJT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotCQlpbnQgaW5kZXggPSAwOwotCQlTdHJpbmcgY29udGVudCA9ICIiOwotCQlTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KFJFUVVFU1QyLCAiUFVUIiwgaW5kZXgsCi0JCQkJIklmLU5vbmUtTWF0Y2giLCAiZVRhZ1hYWCIsIGNvbnRlbnQuZ2V0Qnl0ZXMoKS5sZW5ndGgsIGNvbnRlbnQpOwotCQlvcy53cml0ZShyZXF1ZXN0LmdldEJ5dGVzKCkpOwotCQlvcy5mbHVzaCgpOwotCi0JCVN0cmluZyBkb2N1bWVudCA9IHJlYWQoY2xpZW50KTsKLQkJLy8gU2hvdWxkIHJldHVybiBpdGVtCi0JCS8vIGFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigidXBkYXRlZCBpdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotCQkvLyBTaG91bGQgcmV0dXJuIGNvZGUgNDEyIFByZWNvbmRpdGlvbkZhaWxlZC4KLQkJQXNzZXJ0LmFzc2VydFRydWUoZG9jdW1lbnQuaW5kZXhPZigiSFRUUC8xLjEgNDEyIikgIT0gLTEpOwotCX0KLQotCS8qKgotCSAqIFJlYWQgcmVzcG9uc2Ugc3RyZWFtIGZyb20gdGhlIGdpdmVuIHNvY2tldC4KLQkgKiBAcGFyYW0gc29ja2V0Ci0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgcmVhZChTb2NrZXQgc29ja2V0KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOwotCQl0cnkgewotCQkJcmVhZGVyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihzb2NrZXQKLQkJCQkJLmdldElucHV0U3RyZWFtKCkpKTsKLQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCVN0cmluZyBzdHI7Ci0JCQl3aGlsZSAoKHN0ciA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQkJc2IuYXBwZW5kKHN0cik7Ci0JCQl9Ci0JCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgewotCQkJCXJlYWRlci5jbG9zZSgpOwotCQkJfQotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nVGVzdENhc2UuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IVFRQQmluZGluZ1Rlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMTRiZWQuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0hUVFBCaW5kaW5nVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlNvY2tldDsKLWltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb25Mb2NhdGlvbkhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOwotaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLS8qKgotICogSFRUUCBiaW5kaW5nIHVuaXQgdGVzdHMuCi0gKiAKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgSFRUUEJpbmRpbmdUZXN0Q2FzZSB7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVDFfSEVBREVSID0KLSAgICAgICAgIkdFVCAvaHR0cHNlcnZpY2UvdGVzdCBIVFRQLzEuMFxuIiArICJIb3N0OiBsb2NhbGhvc3RcbiIKLSAgICAgICAgICAgICsgIkNvbnRlbnQtVHlwZTogdGV4dC94bWxcbiIKLSAgICAgICAgICAgICsgIkNvbm5lY3Rpb246IGNsb3NlXG4iCi0gICAgICAgICAgICArICJDb250ZW50LUxlbmd0aDogIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVDFfQ09OVEVOVCA9ICIiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUMSA9Ci0gICAgICAgIFJFUVVFU1QxX0hFQURFUiArIFJFUVVFU1QxX0NPTlRFTlQuZ2V0Qnl0ZXMoKS5sZW5ndGggKyAiXG5cbiIgKyBSRVFVRVNUMV9DT05URU5UOwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1QyX0hFQURFUiA9Ci0gICAgICAgICJHRVQgL3dlYmNvbnRlbnQvdGVzdC5odG1sIEhUVFAvMS4wXG4iICsgIkhvc3Q6IGxvY2FsaG9zdFxuIgotICAgICAgICAgICAgKyAiQ29udGVudC1UeXBlOiB0ZXh0L3htbFxuIgotICAgICAgICAgICAgKyAiQ29ubmVjdGlvbjogY2xvc2VcbiIKLSAgICAgICAgICAgICsgIkNvbnRlbnQtTGVuZ3RoOiAiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVFVRVNUMl9DT05URU5UID0gIiI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1QyID0KLSAgICAgICAgUkVRVUVTVDJfSEVBREVSICsgUkVRVUVTVDJfQ09OVEVOVC5nZXRCeXRlcygpLmxlbmd0aCArICJcblxuIiArIFJFUVVFU1QyX0NPTlRFTlQ7Ci0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVDNfSEVBREVSID0KLSAgICAgICAgIkdFVCAvaHR0cGdldC97MH0gSFRUUC8xLjBcbiIgKyAiSG9zdDogbG9jYWxob3N0XG4iCi0gICAgICAgICAgICArICJDb250ZW50LVR5cGU6IHRleHQveG1sXG4iCi0gICAgICAgICAgICArICJDb25uZWN0aW9uOiBjbG9zZVxuIgotICAgICAgICAgICAgKyAiQ29udGVudC1MZW5ndGg6ICI7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFJFUVVFU1QzX0NPTlRFTlQgPSAiIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVRVUVTVDMgPQotICAgICAgICBSRVFVRVNUM19IRUFERVIgKyBSRVFVRVNUM19DT05URU5ULmdldEJ5dGVzKCkubGVuZ3RoICsgIlxuXG4iICsgUkVRVUVTVDNfQ09OVEVOVDsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBIVFRQX1BPUlQgPSA4MDg1OwotCi0gICAgcHJpdmF0ZSBzdGF0aWMgTm9kZSBub2RlOwotICAgIAotICAgIEBCZWZvcmVDbGFzcwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotICAgIAl0cnkgewotICAgIAkJU3RyaW5nIGNvbnRyaWJ1dGlvbiA9IENvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyLmdldENvbnRyaWJ1dGlvbkxvY2F0aW9uKEhUVFBCaW5kaW5nQ2FjaGVUZXN0Q2FzZS5jbGFzcyk7Ci0gICAgCQlub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJ0ZXN0LmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oInRlc3QiLCBjb250cmlidXRpb24pKTsKLSAgICAJCW5vZGUuc3RhcnQoKTsKLSAgICAJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgCX0KLSAgICB9Ci0KLSAgICBAQWZ0ZXJDbGFzcwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotICAgIAlub2RlLnN0b3AoKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBUZXN0IGludm9raW5nIGEgUE9KTyBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHVzaW5nIHRoZSBIVFRQIGJpbmRpbmcuIAotICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCi0gICAgICovCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0U2VydmljZUltcGxlbWVudGF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIG9zLndyaXRlKFJFUVVFU1QxLmdldEJ5dGVzKCkpOwotICAgICAgICBvcy5mbHVzaCgpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCI8Ym9keT48cD5oZXk8L2JvZHk+IikgIT0gLTEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRlc3QgaW52b2tpbmcgYSBQT0pPIGdldCBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNpbmcgdGhlIEhUVFAgYmluZGluZy4gCi0gICAgICogQHRocm93cyBFeGNlcHRpb24KLSAgICAgKi8KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbXBsZW1lbnRhdGlvbigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBTb2NrZXQgY2xpZW50ID0gbmV3IFNvY2tldCgiMTI3LjAuMC4xIiwgSFRUUF9QT1JUKTsKLSAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gY2xpZW50LmdldE91dHB1dFN0cmVhbSgpOwotICAgICAgICBpbnQgaW5kZXggPSAwOwotICAgICAgICBTdHJpbmcgcmVxdWVzdCA9IE1lc3NhZ2VGb3JtYXQuZm9ybWF0KCBSRVFVRVNUMywgaW5kZXggKTsgCi0gICAgICAgIG9zLndyaXRlKCByZXF1ZXN0LmdldEJ5dGVzKCkpOwotICAgICAgICBvcy5mbHVzaCgpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCI8Ym9keT48cD5pdGVtPSIgKyBpbmRleCkgIT0gLTEpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRlc3QgZ2V0dGluZyBhIHN0YXRpYyByZXNvdXJjZSBwcm92aWRlZCB1c2luZyB0aGUgSFRUUCBiaW5kaW5nLiAKLSAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgotICAgICAqLwotICAgIEBJZ25vcmUoIkltcGxlbWVudGF0aW9uIHJlc291cmNlIG5vdCBhdmFpbGFibGUiKQotICAgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNSZXNvdXJjZUltcGxlbWVudGF0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNvY2tldCBjbGllbnQgPSBuZXcgU29ja2V0KCIxMjcuMC4wLjEiLCBIVFRQX1BPUlQpOwotICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSBjbGllbnQuZ2V0T3V0cHV0U3RyZWFtKCk7Ci0gICAgICAgIG9zLndyaXRlKFJFUVVFU1QyLmdldEJ5dGVzKCkpOwotICAgICAgICBvcy5mbHVzaCgpOwotICAgICAgICAKLSAgICAgICAgU3RyaW5nIGRvY3VtZW50ID0gcmVhZChjbGllbnQpOwotICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkb2N1bWVudC5pbmRleE9mKCI8Ym9keT48cD5oZWxsbzwvYm9keT4iKSAhPSAtMSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVhZCByZXNwb25zZSBzdHJlYW0gZnJvbSB0aGUgZ2l2ZW4gc29ja2V0LgotICAgICAqIEBwYXJhbSBzb2NrZXQKLSAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBJT0V4Y2VwdGlvbgotICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyByZWFkKFNvY2tldCBzb2NrZXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIEJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKHNvY2tldC5nZXRJbnB1dFN0cmVhbSgpKSk7Ci0gICAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgICAgICBTdHJpbmcgc3RyOwotICAgICAgICAgICAgd2hpbGUgKChzdHIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHNiLmFwcGVuZChzdHIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7Ci0gICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICBpZiAocmVhZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0hlbGxvd29ybGQuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IZWxsb3dvcmxkLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdhMGIyOAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IZWxsb3dvcmxkLmphdmEKQEAgLTAsMCArMSwyNiBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOw0KKw0KK0BSZW1vdGFibGUNCitwdWJsaWMgaW50ZXJmYWNlIEhlbGxvd29ybGQgew0KKwlTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpOw0KK30NCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvSGVsbG93b3JsZEltcGwuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IZWxsb3dvcmxkSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNDVmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvSGVsbG93b3JsZEltcGwuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cDsNCisNCitwdWJsaWMgY2xhc3MgSGVsbG93b3JsZEltcGwgaW1wbGVtZW50cyBIZWxsb3dvcmxkIHsNCisNCisJQE92ZXJyaWRlDQorCXB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpIHsNCisJCXJldHVybiAiSGVsbG8gIiArIG5hbWU7DQorCX0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NTk4YjkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw5MyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7DQorDQoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7DQoraW1wb3J0IGphdmEubmV0LlVSTDsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCitpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7DQoraW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQorDQorLyoqDQorICogSFRUUCBiaW5kaW5nIHVuaXQgdGVzdHMgZm9yIEhlbGxvd29ybGQgc2VydmljZS4NCisgKi8NCitwdWJsaWMgY2xhc3MgSGVsbG93b3JsZFRlc3RDYXNlIHsNCisNCisgICAgcHJpdmF0ZSBzdGF0aWMgTm9kZSBub2RlOw0KKyAgICANCisgICAgQEJlZm9yZUNsYXNzDQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgiaGVsbG93b3JsZC5jb21wb3NpdGUiLCBuZXcgU3RyaW5nW10geyJ0YXJnZXQvdGVzdC1jbGFzc2VzIn0pOw0KKyAgICAgICAgbm9kZS5zdGFydCgpOw0KKyAgICB9DQorDQorICAgIEBBZnRlckNsYXNzDQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgew0KKyAgICAgICAgICAgIG5vZGUuc3RvcCgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODAvSGVsbG93b3JsZENvbXBvbmVudC9IZWxsb3dvcmxkL3NheUhlbGxvP25hbWU9UGV0cmEiKTsNCisgICAgICAgIElucHV0U3RyZWFtIGlzID0gdXJsLm9wZW5TdHJlYW0oKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIlwiSGVsbG8gUGV0cmFcIiIsIHJlYWQoaXMpKTsNCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0QXJnMCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgVVJMIHVybCA9IG5ldyBVUkwoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9IZWxsb3dvcmxkQ29tcG9uZW50L0hlbGxvd29ybGQvc2F5SGVsbG8/YXJnMD1QZXRyYSIpOw0KKyAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSB1cmwub3BlblN0cmVhbSgpOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiXCJIZWxsbyBQZXRyYVwiIiwgcmVhZChpcykpOw0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RYbWwoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODAvSGVsbG93b3JsZFhtbENvbXBvbmVudC9IZWxsb3dvcmxkL3NheUhlbGxvP2FyZzA9UGV0cmEiKTsNCisgICAgICAgIElucHV0U3RyZWFtIGlzID0gdXJsLm9wZW5TdHJlYW0oKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHJlYWQoaXMpLmVuZHNXaXRoKCI+SGVsbG8gUGV0cmE8L3JldHVybj4iKSk7DQorICAgIH0NCisNCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHJlYWQoSW5wdXRTdHJlYW0gaXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQorICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBudWxsOw0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlzKSk7DQorICAgICAgICAgICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOw0KKyAgICAgICAgICAgIFN0cmluZyBzdHI7DQorICAgICAgICAgICAgd2hpbGUgKChzdHIgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICBzYi5hcHBlbmQoc3RyKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7DQorICAgICAgICB9IGZpbmFsbHkgew0KKyAgICAgICAgICAgIGlmIChyZWFkZXIgIT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICByZWFkZXIuY2xvc2UoKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL05vdE1vZGlmaWVkRXhjZXB0aW9uLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvTm90TW9kaWZpZWRFeGNlcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ2ZWZlYS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvTm90TW9kaWZpZWRFeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7Ci0KLS8qKgotICogSW5kaWNhdGVzIHRoYXQgYSByZXNvdXJjZSB3YXMgbm90IG1vZGlmaWVkLgotICogCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotcHVibGljIGNsYXNzIE5vdE1vZGlmaWVkRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNTA0NjAyNzY3NDEyODYyNzM4M0w7Ci0KLSAgICBwdWJsaWMgTm90TW9kaWZpZWRFeGNlcHRpb24oKSB7Ci0gICAgfQotCi0gICAgcHVibGljIE5vdE1vZGlmaWVkRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlKSB7Ci0gICAgICAgIHN1cGVyKG1lc3NhZ2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBOb3RNb2RpZmllZEV4Y2VwdGlvbihUaHJvd2FibGUgY2F1c2UpIHsKLSAgICAgICAgc3VwZXIoY2F1c2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBOb3RNb2RpZmllZEV4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGNhdXNlKSB7Ci0gICAgICAgIHN1cGVyKG1lc3NhZ2UsIGNhdXNlKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3Mjg4OTkuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL1ByZWNvbmRpdGlvbkZhaWxlZEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cDsKLQotLyoqCi0gKiBJbmRpY2F0ZXMgdGhhdCBhIHJlc291cmNlIHdhcyBub3QgbW9kaWZpZWQuCi0gKiAKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAtNTA0NjAyNzY3NDEyODYyNzM4M0w7Ci0KLSAgICBwdWJsaWMgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uKCkgewotICAgIH0KLQotICAgIHB1YmxpYyBQcmVjb25kaXRpb25GYWlsZWRFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICAgICAgc3VwZXIobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgcHVibGljIFByZWNvbmRpdGlvbkZhaWxlZEV4Y2VwdGlvbihUaHJvd2FibGUgY2F1c2UpIHsKLSAgICAgICAgc3VwZXIoY2F1c2UpOwotICAgIH0KLQotICAgIHB1YmxpYyBQcmVjb25kaXRpb25GYWlsZWRFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBjYXVzZSkgewotICAgICAgICBzdXBlcihtZXNzYWdlLCBjYXVzZSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL1NvbWVFeGNlcHRpb24uamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9Tb21lRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmZmQxOQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9Tb21lRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSwyOSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7DQorDQorcHVibGljIGNsYXNzIFNvbWVFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gew0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsNCisNCisgICAgcHVibGljIFNvbWVFeGNlcHRpb24oU3RyaW5nIG1zZykgew0KKyAgICAgICAgc3VwZXIobXNnKTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvVGVzdEJpbmRpbmdDYWNoZUltcGwuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9UZXN0QmluZGluZ0NhY2hlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTlkZTE0Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9UZXN0QmluZGluZ0NhY2hlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi5odHRwLkhUVFBDYWNoZUNvbnRleHQ7Ci0KLS8qKgotICogVGVzdCBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHRoYXQgaW1wbGVtZW50cyBhIHZhcmlvdXMgY29uZGl0aW9uYWwgSFRUUAotICogbWV0aG9kcy4gRm9yIHRlc3RpbmcsIHRoZSBpZD09MCBpdGVtcyBhcmUgdmVyeSBvbGQgKERhdGUoMCkpLCBub3QgbW9kaWZpZWQsCi0gKiBhbmQgYWx3YXlzIG1hdGNoIEVUYWdzIGFuZCB0aGUgaWQ9PTEgaXRlbXMgYXJlIGFsd2F5cyBicmFuZCBuZXcgKERhdGUoKSksCi0gKiBtb2RpZmllZCwgYW5kIG5ldmVyIG1hdGNoIEVUYWdzLiBVc2luZyB0aGVzZSBpZHMgb25lIGNhbiB0ZXN0IHRoZQotICogTGFzdE1vZGlmaWVkIGFuZCBFVGFnIGhlYWRlcnMgb2YgdGhlIHJlcXVlc3RzLgotICogCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotcHVibGljIGNsYXNzIFRlc3RCaW5kaW5nQ2FjaGVJbXBsIHsKLQotCS8qKgotCSAqIEltcGxlbWVudHMgdGhlIEhUVFAgZ2V0IG1ldGhvZCBvZiB0aGUgY29sbGVjdGlvbiBpbXBsZW1lbnRhdGlvbi4KLQkgKiBAcGFyYW0gaWQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIElucHV0U3RyZWFtIGdldChTdHJpbmcgaWQpIHsKLQkJcmV0dXJuIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKLQkJCQkoIjxodG1sPjxib2R5PjxwPml0ZW09IiArIGlkICsgIjwvYm9keT48L2h0bWw+IikuZ2V0Qnl0ZXMoKSk7Ci0JfQotCi0JLyoqCi0JICogSW1wbGVtZW50cyB0aGUgSFRUUCBjb25kaXRpb25hbCBnZXQgbWV0aG9kIG9mIHRoZSBjb2xsZWN0aW9uIGltcGxlbWVudGF0aW9uLgotCSAqIEBwYXJhbSBpZAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSW5wdXRTdHJlYW0gY29uZGl0aW9uYWxHZXQoU3RyaW5nIGlkLCBIVFRQQ2FjaGVDb250ZXh0IGNhY2hlQ29udGV4dCkKLQkJCXRocm93cyBOb3RNb2RpZmllZEV4Y2VwdGlvbiwgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uIHsKLQotCQlpZiAoY2FjaGVDb250ZXh0ICE9IG51bGwpIHsKLQkJCWlmIChjYWNoZUNvbnRleHQuaWZNb2RpZmllZFNpbmNlKSB7Ci0JCQkJaWYgKChpZC5lcXVhbHMoIjEiKSkKLQkJCQkJCSYmICgwID4gY2FjaGVDb250ZXh0Lmxhc3RNb2RpZmllZERhdGUKLQkJCQkJCQkJLmNvbXBhcmVUbyhuZXcgRGF0ZSgpKSkpCi0JCQkJCXRocm93IG5ldyBOb3RNb2RpZmllZEV4Y2VwdGlvbigiaXRlbSAxIHdhcyBtb2RpZmllZCBvbiAiCi0JCQkJCQkJKyBuZXcgRGF0ZSgpKTsKLQkJCX0KLQkJCWlmIChjYWNoZUNvbnRleHQuaWZVbm1vZGlmaWVkU2luY2UpIHsKLQkJCQlpZiAoKGlkLmVxdWFscygiMCIpKQotCQkJCQkJJiYgKDAgPiBjYWNoZUNvbnRleHQubGFzdE1vZGlmaWVkRGF0ZQotCQkJCQkJCQkuY29tcGFyZVRvKG5ldyBEYXRlKCkpKSkKLQkJCQkJdGhyb3cgbmV3IFByZWNvbmRpdGlvbkZhaWxlZEV4Y2VwdGlvbigKLQkJCQkJCQkiaXRlbSAwIHdhcyBtb2RpZmllZCBvbiAiICsgbmV3IERhdGUoMCkpOwotCQkJfQotCQkJaWYgKGNhY2hlQ29udGV4dC5pZk1hdGNoKSB7Ci0JCQkJaWYgKGlkLmVxdWFscygiMSIpKQotCQkJCQl0aHJvdyBuZXcgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uKAotCQkJCQkJCSJpdGVtIDEgZVRhZyBkb2VzIG5vdCBtYXRjaCAiCi0JCQkJCQkJCQkrIGNhY2hlQ29udGV4dC5nZXRFVGFnKCkpOwotCQkJfQotCQkJaWYgKGNhY2hlQ29udGV4dC5pZk5vbmVNYXRjaCkgewotCQkJCWlmIChpZC5lcXVhbHMoIjAiKSkKLQkJCQkJdGhyb3cgbmV3IFByZWNvbmRpdGlvbkZhaWxlZEV4Y2VwdGlvbigKLQkJCQkJCQkiaXRlbSAwIGVUYWcgbWF0Y2hlcyAiICsgY2FjaGVDb250ZXh0LmdldEVUYWcoKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKLQkJCQkoIjxodG1sPjxib2R5PjxwPml0ZW09IiArIGlkICsgIjwvYm9keT48L2h0bWw+IikuZ2V0Qnl0ZXMoKSk7Ci0JfQotCi0JLyoqCi0JICogSW1wbGVtZW50cyB0aGUgSFRUUCBkZWxldGUgbWV0aG9kIG9mIHRoZSBjb2xsZWN0aW9uIGltcGxlbWVudGF0aW9uLgotCSAqIEBwYXJhbSBpZAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSW5wdXRTdHJlYW0gZGVsZXRlKFN0cmluZyBpZCkgewotCQlyZXR1cm4gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKAotCQkJCSgiPGh0bWw+PGJvZHk+PHA+ZGVsZXRlZCBpdGVtPSIgKyBpZCArICI8L2JvZHk+PC9odG1sPiIpCi0JCQkJCQkuZ2V0Qnl0ZXMoKSk7Ci0JfQotCi0JLyoqCi0JICogSW1wbGVtZW50cyB0aGUgSFRUUCBjb25kaXRpb25hbCBkZWxldGUgbWV0aG9kIG9mIHRoZSBjb2xsZWN0aW9uIGltcGxlbWVudGF0aW9uLgotCSAqIEBwYXJhbSBpZAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSW5wdXRTdHJlYW0gY29uZGl0aW9uYWxEZWxldGUoU3RyaW5nIGlkLCBIVFRQQ2FjaGVDb250ZXh0IGNhY2hlQ29udGV4dCkKLQkJCXRocm93cyBOb3RNb2RpZmllZEV4Y2VwdGlvbiwgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uIHsKLQotCQlpZiAoY2FjaGVDb250ZXh0ICE9IG51bGwpIHsKLQkJCWlmIChjYWNoZUNvbnRleHQuaWZNb2RpZmllZFNpbmNlKSB7Ci0JCQkJaWYgKChpZC5lcXVhbHMoIjEiKSkKLQkJCQkJCSYmICgwID4gY2FjaGVDb250ZXh0Lmxhc3RNb2RpZmllZERhdGUKLQkJCQkJCQkJLmNvbXBhcmVUbyhuZXcgRGF0ZSgpKSkpCi0JCQkJCXRocm93IG5ldyBOb3RNb2RpZmllZEV4Y2VwdGlvbigiaXRlbSAxIHdhcyBtb2RpZmllZCBvbiAiCi0JCQkJCQkJKyBuZXcgRGF0ZSgpKTsKLQkJCX0KLQkJCWlmIChjYWNoZUNvbnRleHQuaWZVbm1vZGlmaWVkU2luY2UpIHsKLQkJCQlpZiAoKGlkLmVxdWFscygiMCIpKQotCQkJCQkJJiYgKDAgPiBjYWNoZUNvbnRleHQubGFzdE1vZGlmaWVkRGF0ZQotCQkJCQkJCQkuY29tcGFyZVRvKG5ldyBEYXRlKCkpKSkKLQkJCQkJdGhyb3cgbmV3IFByZWNvbmRpdGlvbkZhaWxlZEV4Y2VwdGlvbigKLQkJCQkJCQkiaXRlbSAwIHdhcyBtb2RpZmllZCBvbiAiICsgbmV3IERhdGUoMCkpOwotCQkJfQotCQkJaWYgKGNhY2hlQ29udGV4dC5pZk1hdGNoKSB7Ci0JCQkJaWYgKGlkLmVxdWFscygiMSIpKQotCQkJCQl0aHJvdyBuZXcgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uKAotCQkJCQkJCSJpdGVtIDEgZVRhZyBkb2VzIG5vdCBtYXRjaCAiCi0JCQkJCQkJCQkrIGNhY2hlQ29udGV4dC5nZXRFVGFnKCkpOwotCQkJfQotCQkJaWYgKGNhY2hlQ29udGV4dC5pZk5vbmVNYXRjaCkgewotCQkJCWlmIChpZC5lcXVhbHMoIjAiKSkKLQkJCQkJdGhyb3cgbmV3IFByZWNvbmRpdGlvbkZhaWxlZEV4Y2VwdGlvbigKLQkJCQkJCQkiaXRlbSAwIGVUYWcgbWF0Y2hlcyAiICsgY2FjaGVDb250ZXh0LmdldEVUYWcoKSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSgKLQkJCQkoIjxodG1sPjxib2R5PjxwPmRlbGV0ZWQgaXRlbT0iICsgaWQgKyAiPC9ib2R5PjwvaHRtbD4iKQotCQkJCQkJLmdldEJ5dGVzKCkpOwotCX0KLQotCS8qKgotCSAqIEltcGxlbWVudHMgdGhlIEhUVFAgcG9zdCBtZXRob2Qgb2YgdGhlIGNvbGxlY3Rpb24gaW1wbGVtZW50YXRpb24uCi0JICogQHBhcmFtIGlkCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBJbnB1dFN0cmVhbSBwb3N0KCkgewotCQlpbnQgaWQgPSAobmV3IGphdmEudXRpbC5SYW5kb20oKSkubmV4dEludChJbnRlZ2VyLk1BWF9WQUxVRSk7Ci0JCXJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oCi0JCQkJKCI8aHRtbD48Ym9keT48cD5wb3N0ZWQgaXRlbT0iICsgaWQgKyAiPC9ib2R5PjwvaHRtbD4iKQotCQkJCQkJLmdldEJ5dGVzKCkpOwotCX0KLQotCS8qKgotCSAqIEltcGxlbWVudHMgdGhlIEhUVFAgY29uZGl0aW9uYWwgcG9zdCBtZXRob2Qgb2YgdGhlIGNvbGxlY3Rpb24gaW1wbGVtZW50YXRpb24uCi0JICogQHBhcmFtIGlkCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBIVFRQQ2FjaGVDb250ZXh0IGNvbmRpdGlvbmFsUG9zdChIVFRQQ2FjaGVDb250ZXh0IGNhY2hlQ29udGV4dCkKLQkJCXRocm93cyBOb3RNb2RpZmllZEV4Y2VwdGlvbiwgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGlkID0gIiIgKyAobmV3IGphdmEudXRpbC5SYW5kb20oKSkubmV4dEludChJbnRlZ2VyLk1BWF9WQUxVRSk7Ci0KLQkJaWYgKGNhY2hlQ29udGV4dCAhPSBudWxsKSB7Ci0JCQlpZiAoY2FjaGVDb250ZXh0LmlmTW9kaWZpZWRTaW5jZSkgewotCQkJCWlmICgwID49IGNhY2hlQ29udGV4dC5sYXN0TW9kaWZpZWREYXRlLmNvbXBhcmVUbyhuZXcgRGF0ZSgwKSkpCi0JCQkJCXRocm93IG5ldyBOb3RNb2RpZmllZEV4Y2VwdGlvbigiaXRlbSB3YXMgbW9kaWZpZWQgb24gIgotCQkJCQkJCSsgbmV3IERhdGUoKSk7Ci0JCQl9Ci0JCQlpZiAoY2FjaGVDb250ZXh0LmlmVW5tb2RpZmllZFNpbmNlKSB7Ci0JCQkJaWYgKCgwID49IGNhY2hlQ29udGV4dC5sYXN0TW9kaWZpZWREYXRlLmNvbXBhcmVUbyhuZXcgRGF0ZSgwKSkpKQotCQkJCQl0aHJvdyBuZXcgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uKAotCQkJCQkJCSJpdGVtIHdhcyBtb2RpZmllZCBvbiAiICsgbmV3IERhdGUoMCkpOwotCQkJfQotCQkJaWYgKGNhY2hlQ29udGV4dC5pZk1hdGNoKSB7Ci0JCQkJaWYgKGNhY2hlQ29udGV4dC5nZXRFVGFnKCkuZXF1YWxzSWdub3JlQ2FzZSgiRVRhZ05vbmVNYXRjaCIpKQotCQkJCQl0aHJvdyBuZXcgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uKAotCQkJCQkJCSJpdGVtIGVUYWcgZG9lcyBub3QgbWF0Y2ggIgotCQkJCQkJCQkJKyBjYWNoZUNvbnRleHQuZ2V0RVRhZygpKTsKLQkJCX0KLQkJCWlmIChjYWNoZUNvbnRleHQuaWZOb25lTWF0Y2gpIHsKLQkJCQlpZiAoY2FjaGVDb250ZXh0LmdldEVUYWcoKS5lcXVhbHNJZ25vcmVDYXNlKCJFVGFnTWF0Y2giKSkKLQkJCQkJdGhyb3cgbmV3IFByZWNvbmRpdGlvbkZhaWxlZEV4Y2VwdGlvbigiaXRlbSBlVGFnIG1hdGNoZXMgIgotCQkJCQkJCSsgY2FjaGVDb250ZXh0LmdldEVUYWcoKSk7Ci0JCQl9Ci0JCX0KLQotCQkvLyBSZXR1cm4gdGhlIEVUYWcgYW5kIExhc3RNb2RmaWVkIGZpZWxkcyBieSBzZXJpYWxpemUgdG8gYSBieXRlIGFycmF5Ci0JCUhUVFBDYWNoZUNvbnRleHQgcmV0dXJuQ29udGV4dCA9IG5ldyBIVFRQQ2FjaGVDb250ZXh0KCk7Ci0JCXJldHVybkNvbnRleHQuc2V0RVRhZyggIkVUYWciICsgKG5ldyBqYXZhLnV0aWwuUmFuZG9tKCkpLm5leHRJbnQoSW50ZWdlci5NQVhfVkFMVUUpICk7Ci0JCXJldHVybkNvbnRleHQuc2V0TGFzdE1vZGlmaWVkKCBuZXcgRGF0ZSgpICk7Ci0JCXJldHVybiByZXR1cm5Db250ZXh0OwotCX0KLQotCS8qKgotCSAqIEltcGxlbWVudHMgdGhlIEhUVFAgdXBkYXRlL3B1dCBtZXRob2Qgb2YgdGhlIGNvbGxlY3Rpb24gaW1wbGVtZW50YXRpb24uCi0JICogQHBhcmFtIGlkCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBJbnB1dFN0cmVhbSBwdXQoU3RyaW5nIGlkKSB7Ci0JCXJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oCi0JCQkJKCI8aHRtbD48Ym9keT48cD51cGRhdGVkIGl0ZW09IiArIGlkICsgIjwvYm9keT48L2h0bWw+IikKLQkJCQkJCS5nZXRCeXRlcygpKTsKLQl9Ci0KLQkvKioKLQkgKiBJbXBsZW1lbnRzIHRoZSBIVFRQIGNvbmRpdGlvbmFsIHVwZGF0ZS9wdXQgbWV0aG9kIG9mIHRoZSBjb2xsZWN0aW9uIGltcGxlbWVudGF0aW9uLgotCSAqIEBwYXJhbSBpZAotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgSW5wdXRTdHJlYW0gY29uZGl0aW9uYWxQdXQoU3RyaW5nIGlkLCBIVFRQQ2FjaGVDb250ZXh0IGNhY2hlQ29udGV4dCkKLQkJCXRocm93cyBOb3RNb2RpZmllZEV4Y2VwdGlvbiwgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uIHsKLQotCQlpZiAoY2FjaGVDb250ZXh0ICE9IG51bGwpIHsKLQkJCWlmIChjYWNoZUNvbnRleHQuaWZNb2RpZmllZFNpbmNlKSB7Ci0JCQkJaWYgKChpZC5lcXVhbHMoIjEiKSkKLQkJCQkJCSYmICgwID4gY2FjaGVDb250ZXh0Lmxhc3RNb2RpZmllZERhdGUKLQkJCQkJCQkJLmNvbXBhcmVUbyhuZXcgRGF0ZSgpKSkpCi0JCQkJCXRocm93IG5ldyBOb3RNb2RpZmllZEV4Y2VwdGlvbigiaXRlbSAxIHdhcyBtb2RpZmllZCBvbiAiCi0JCQkJCQkJKyBuZXcgRGF0ZSgpKTsKLQkJCX0KLQkJCWlmIChjYWNoZUNvbnRleHQuaWZVbm1vZGlmaWVkU2luY2UpIHsKLQkJCQlpZiAoKGlkLmVxdWFscygiMCIpKQotCQkJCQkJJiYgKDAgPiBjYWNoZUNvbnRleHQubGFzdE1vZGlmaWVkRGF0ZQotCQkJCQkJCQkuY29tcGFyZVRvKG5ldyBEYXRlKCkpKSkKLQkJCQkJdGhyb3cgbmV3IFByZWNvbmRpdGlvbkZhaWxlZEV4Y2VwdGlvbigKLQkJCQkJCQkiaXRlbSAwIHdhcyBtb2RpZmllZCBvbiAiICsgbmV3IERhdGUoMCkpOwotCQkJfQotCQkJaWYgKGNhY2hlQ29udGV4dC5pZk1hdGNoKSB7Ci0JCQkJaWYgKGlkLmVxdWFscygiMSIpKQotCQkJCQl0aHJvdyBuZXcgUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uKAotCQkJCQkJCSJpdGVtIDEgZVRhZyBkb2VzIG5vdCBtYXRjaCAiCi0JCQkJCQkJCQkrIGNhY2hlQ29udGV4dC5nZXRFVGFnKCkpOwotCQkJfQotCQkJaWYgKGNhY2hlQ29udGV4dC5pZk5vbmVNYXRjaCkgewotCQkJCWlmIChpZC5lcXVhbHMoIjAiKSkKLQkJCQkJdGhyb3cgbmV3IFByZWNvbmRpdGlvbkZhaWxlZEV4Y2VwdGlvbigKLQkJCQkJCQkiaXRlbSAwIGVUYWcgbWF0Y2hlcyAiICsgY2FjaGVDb250ZXh0LmdldEVUYWcoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCXJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oCi0JCQkJKCI8aHRtbD48Ym9keT48cD51cGRhdGVkIGl0ZW09IiArIGlkICsgIjwvYm9keT48L2h0bWw+IikKLQkJCQkJCS5nZXRCeXRlcygpKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9UZXN0R2V0SW1wbC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL1Rlc3RHZXRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzM2JhY2IuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL1Rlc3RHZXRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi0vKioKLSAqIFRlc3Qgc2VydmljZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGltcGxlbWVudHMgYSBnZXQgbWV0aG9kLgotICoKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgVGVzdEdldEltcGwgewotICAgIAotICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXQoU3RyaW5nIGlkKSB7Ci0gICAgICAgIHJldHVybiBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oKCI8aHRtbD48Ym9keT48cD5pdGVtPSIgKyBpZCArICI8L2JvZHk+PC9odG1sPiIpLmdldEJ5dGVzKCkpOwotCi0gICAgfQotCi19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvVGVzdFNlcnZpY2VJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvVGVzdFNlcnZpY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4YzEyMjMuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL1Rlc3RTZXJ2aWNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXQ7Ci1pbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnOwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRSZXF1ZXN0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldFJlc3BvbnNlOwotCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlOwotCi0vKioKLSAqIFRlc3Qgc2VydmljZSBpbXBsZW1lbnRhdGlvbi4KLSAqCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotCi1AU2VydmljZShTZXJ2bGV0LmNsYXNzKQotcHVibGljIGNsYXNzIFRlc3RTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFNlcnZsZXQgewotCi0gICAgcHVibGljIHZvaWQgaW5pdChTZXJ2bGV0Q29uZmlnIGNvbmZpZykgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24gewotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNlcnZpY2UoU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICAvL0h0dHBTZXJ2bGV0UmVzcG9uc2UgaHR0cFJlc3BvbnNlID0gKEh0dHBTZXJ2bGV0UmVzcG9uc2UpcmVzcG9uc2U7ICAgCQotICAgICAgICByZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKS5wcmludCgiPGh0bWw+PGJvZHk+PHA+aGV5PC9ib2R5PjwvaHRtbD4iKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgewotICAgIH0KLQotICAgIHB1YmxpYyBTZXJ2bGV0Q29uZmlnIGdldFNlcnZsZXRDb25maWcoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0U2VydmxldEluZm8oKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvY29tcGxleC5jb21wb3NpdGUgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9jb21wbGV4LmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjRjYzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvY29tcGxleC5jb21wb3NpdGUKQEAgLTAsMCArMSw0MSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZS90ZXN0Ig0KKwl4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiDQorCW5hbWU9IkNvbXBsZXhTdHVmZiI+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQ29tcGxleENvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuQ29tcGxleFN0dWZmSW1wbCIvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iQ29tcGxleFN0dWZmIj4NCisgICAgCQk8dHVzY2FueTpiaW5kaW5nLmh0dHAgLz4NCisgICAgCTwvc2VydmljZT4NCisgICAgPC9jb21wb25lbnQ+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQ29tcGxleFhtbENvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuQ29tcGxleFN0dWZmSW1wbCIvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iQ29tcGxleFN0dWZmIj4NCisgICAgCQk8dHVzY2FueTpiaW5kaW5nLmh0dHA+DQorICAgICAgICAJCTx0dXNjYW55OndpcmVGb3JtYXQuaHR0cFhtbCAvPg0KKyAgICAJCTwvdHVzY2FueTpiaW5kaW5nLmh0dHA+DQorICAgIAk8L3NlcnZpY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL2NvbnRlbnQvdGVzdC5odG1sIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvY29udGVudC90ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0Yjc5ZDcuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvY29udGVudC90ZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08aHRtbD4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxib2R5PjxwPmhlbGxvPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ5N2NmYwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKwl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUvdGVzdCINCisJeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIg0KKwluYW1lPSJoZWxsb3dvcmxkIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb3dvcmxkQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IZWxsb3dvcmxkSW1wbCIvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG93b3JsZCI+DQorICAgIAkJPHR1c2Nhbnk6YmluZGluZy5odHRwIC8+DQorICAgIAk8L3NlcnZpY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvd29ybGRYbWxDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLkhlbGxvd29ybGRJbXBsIi8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJIZWxsb3dvcmxkIj4NCisgICAgCQk8dHVzY2FueTpiaW5kaW5nLmh0dHA+DQorICAgICAgICAJCTx0dXNjYW55OndpcmVGb3JtYXQuaHR0cFhtbCAvPg0KKyAgICAJCTwvdHVzY2FueTpiaW5kaW5nLmh0dHA+DQorICAgIAk8L3NlcnZpY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3QuY29tcG9zaXRlIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdC5jb21wb3NpdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNTI1ZjQuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdC5jb21wb3NpdGUKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICAgICogCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAgICogCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZS90ZXN0IgotCXhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKLQl4bWxuczpzcj0iaHR0cDovL3NhbXBsZS90ZXN0IgotCW5hbWU9InRlc3QiPgotCi0gICAgPCEtLSBjb21wb25lbnQgbmFtZT0iUmVzb3VyY2VTZXJ2aWNlQ29tcG9uZW50Ij4KLSAgICAgICAgPHR1c2Nhbnk6aW1wbGVtZW50YXRpb24ucmVzb3VyY2UgbG9jYXRpb249ImNvbnRlbnQiLz4KLSAgICAJPHNlcnZpY2UgbmFtZT0iUmVzb3VyY2UiPgotICAgIAkJPHR1c2Nhbnk6YmluZGluZy5odHRwIHVyaT0iaHR0cDovL2xvY2FsaG9zdDo4MDg1L3dlYmNvbnRlbnQiLz4KLSAgICAJPC9zZXJ2aWNlPgotICAgIDwvY29tcG9uZW50IC0tPgotCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIVFRQU2VydmljZUNvbXBvbmVudCI+Ci0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5UZXN0U2VydmljZUltcGwiLz4KLSAgICAJPHNlcnZpY2UgbmFtZT0iU2VydmxldCI+Ci0gICAgCQk8dHVzY2FueTpiaW5kaW5nLmh0dHAgdXJpPSJodHRwOi8vbG9jYWxob3N0OjgwODUvaHR0cHNlcnZpY2UiLz4KLSAgICAJPC9zZXJ2aWNlPgotICAgIDwvY29tcG9uZW50PgotCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIVFRQR2V0Q29tcG9uZW50Ij4KLSAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLlRlc3RHZXRJbXBsIi8+Ci0gICAgCTxzZXJ2aWNlIG5hbWU9IlRlc3RHZXRJbXBsIj4KLSAgICAJCTx0dXNjYW55OmJpbmRpbmcuaHR0cCB1cmk9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9odHRwZ2V0Ii8+Ci0gICAgCTwvc2VydmljZT4KLSAgICA8L2NvbXBvbmVudD4KLQotPC9jb21wb3NpdGU+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0Q2FjaGUuY29tcG9zaXRlIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdENhY2hlLmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDkyM2NmYS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctaHR0cC1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0Q2FjaGUuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLQl0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUvdGVzdCIKLQl4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCi0JeG1sbnM6c3I9Imh0dHA6Ly9zYW1wbGUvdGVzdCIKLQluYW1lPSJ0ZXN0Q2FjaGUiPgotCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIVFRQQmluZGluZ0NvbXBvbmVudCI+Ci0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5UZXN0QmluZGluZ0NhY2hlSW1wbCIvPgotICAgIAk8c2VydmljZSBuYW1lPSJUZXN0QmluZGluZ0NhY2hlSW1wbCI+Ci0gICAgCQk8dHVzY2FueTpiaW5kaW5nLmh0dHAgdXJpPSJodHRwOi8vbG9jYWxob3N0OjgwODUvaHR0cGJpbmRpbmciLz4KLSAgICAJPC9zZXJ2aWNlPgotICAgIDwvY29tcG9uZW50PgotCi08L2NvbXBvc2l0ZT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYjBhNGZjMC4uODYxZGEwMiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTEsNiArMSw2IEBACiBNYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1FeHBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7dmVyc2lvbj0iMi4wLjAiOw0KLSB1c2VzOj0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseSxqYXZheC54bWwubmFtZXNwYWNlLGphdmF4LnNlcnZsZXQuaHR0cCINCitFeHBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7dmVyc2lvbj0iMi4wLjAiO3VzZXM6PSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LGphdmF4LnhtbC5uYW1lc3BhY2UsamF2YXguc2VydmxldC5odHRwIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuaW1wbDt2ZXJzaW9uPSIyLjAuMCINCiBCdW5kbGUtTmFtZTogQXBhY2hlIFR1c2NhbnkgU0NBIEhUVFAgQmluZGluZyBNb2RlbA0KIEJ1bmRsZS1WZW5kb3I6IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbg0KIEJ1bmRsZS1WZXJzaW9uOiAyLjAuMA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvSFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3Rvci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc3Nzc0MwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvSFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3Rvci5qYXZhCkBAIC0wLDAgKzEsMzkgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwOw0KKw0KK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5Lk9wZXJhdGlvblNlbGVjdG9yOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbC5Db25zdGFudHM7DQorDQorcHVibGljIGNsYXNzIEhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3IgaW1wbGVtZW50cyBPcGVyYXRpb25TZWxlY3RvciB7DQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgT1BFUkFUSU9OX1NFTEVDVE9SX0hUVFBfREVGQVVMVF9RTkFNRSA9IG5ldyBRTmFtZShDb25zdGFudHMuU0NBMTFfTlMsICJvcGVyYXRpb25TZWxlY3Rvci5odHRwRGVmYXVsdCIpOw0KKyAgICANCisgICAgcHVibGljIFFOYW1lIGdldFNjaGVtYU5hbWUoKSB7DQorICAgICAgICByZXR1cm4gT1BFUkFUSU9OX1NFTEVDVE9SX0hUVFBfREVGQVVMVF9RTkFNRTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1VucmVzb2x2ZWQoKSB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgc2V0VW5yZXNvbHZlZChib29sZWFuIHVucmVzb2x2ZWQpIHsNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0hUVFBEZWZhdWx0V2lyZUZvcm1hdC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IVFRQRGVmYXVsdFdpcmVGb3JtYXQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2ZmODkxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IVFRQRGVmYXVsdFdpcmVGb3JtYXQuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cDsNCisNCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5XaXJlRm9ybWF0Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbC5Db25zdGFudHM7DQorDQorLyoqDQorICogSW1wbGVtZW50YXRpb24gZm9yIHBvbGljaWVzIHRoYXQgY291bGQgYmUgaW5qZWN0ZWQgYXMgcGFyYW1ldGVyDQorICogaW50byB0aGUgYXhpczJjb25maWcuDQorICoNCisgKiBAdmVyc2lvbiAkUmV2OiA4MTM0NDIgJCAkRGF0ZTogMjAwOS0wOS0xMCAxNDo1NjoxNyArMDEwMCAoVGh1LCAxMCBTZXAgMjAwOSkgJA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBIVFRQRGVmYXVsdFdpcmVGb3JtYXQgaW1wbGVtZW50cyBXaXJlRm9ybWF0IHsNCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBXSVJFX0ZPUk1BVF9IVFRQX0RFRkFVTFRfUU5BTUUgPSBuZXcgUU5hbWUoQ29uc3RhbnRzLlNDQTExX1RVU0NBTllfTlMsICJ3aXJlRm9ybWF0Lmh0dHBEZWZhdWx0Iik7DQorICAgIA0KKyAgICBwdWJsaWMgUU5hbWUgZ2V0U2NoZW1hTmFtZSgpIHsNCisgICAgICAgIHJldHVybiBXSVJFX0ZPUk1BVF9IVFRQX0RFRkFVTFRfUU5BTUU7DQorICAgIH0NCisNCisgICAgcHVibGljIGJvb2xlYW4gaXNVbnJlc29sdmVkKCkgew0KKyAgICAgICAgcmV0dXJuIGZhbHNlOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyB2b2lkIHNldFVucmVzb2x2ZWQoYm9vbGVhbiB1bnJlc29sdmVkKSB7DQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IVFRQWE1MV2lyZUZvcm1hdC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9IVFRQWE1MV2lyZUZvcm1hdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MTZjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL0hUVFBYTUxXaXJlRm9ybWF0LmphdmEKQEAgLTAsMCArMSwzOSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHA7DQorDQoraW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuV2lyZUZvcm1hdDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWwuQ29uc3RhbnRzOw0KKw0KK3B1YmxpYyBjbGFzcyBIVFRQWE1MV2lyZUZvcm1hdCBpbXBsZW1lbnRzIFdpcmVGb3JtYXQgew0KKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdJUkVfRk9STUFUX0hUVFBfWE1MX1FOQU1FID0gbmV3IFFOYW1lKENvbnN0YW50cy5TQ0ExMV9UVVNDQU5ZX05TLCAid2lyZUZvcm1hdC5odHRwWG1sIik7DQorICAgIA0KKyAgICBwdWJsaWMgUU5hbWUgZ2V0U2NoZW1hTmFtZSgpIHsNCisgICAgICAgIHJldHVybiBXSVJFX0ZPUk1BVF9IVFRQX1hNTF9RTkFNRTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1VucmVzb2x2ZWQoKSB7DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgc2V0VW5yZXNvbHZlZChib29sZWFuIHVucmVzb2x2ZWQpIHsNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL2ltcGwvSFRUUEJpbmRpbmdJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL2ltcGwvSFRUUEJpbmRpbmdJbXBsLmphdmEKaW5kZXggMjU1NTc5OS4uZDgzZDliOSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC9pbXBsL0hUVFBCaW5kaW5nSW1wbC5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAvaW1wbC9IVFRQQmluZGluZ0ltcGwuamF2YQpAQCAtMzEsMTMgKzMxLDE2IEBACiAgKiAKICAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAogICovCi1jbGFzcyBIVFRQQmluZGluZ0ltcGwgaW1wbGVtZW50cyBIVFRQQmluZGluZyB7CitwdWJsaWMgY2xhc3MgSFRUUEJpbmRpbmdJbXBsIGltcGxlbWVudHMgSFRUUEJpbmRpbmcgewogCiAgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKICAgICBwcml2YXRlIFN0cmluZyB1cmk7CiAKICAgICBwcml2YXRlIFdpcmVGb3JtYXQgd2lyZUZvcm1hdDsKICAgICBwcml2YXRlIE9wZXJhdGlvblNlbGVjdG9yIG9wZXJhdGlvblNlbGVjdG9yOyAgICAKKyAgICAKKyAgICBwdWJsaWMgSFRUUEJpbmRpbmdJbXBsKCkgeworICAgIH0KIAogICAgIHB1YmxpYyBRTmFtZSBnZXRUeXBlKCkgewogICAgICAgICByZXR1cm4gVFlQRTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAveG1sL0hUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3JQcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvYmluZGluZy1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAveG1sL0hUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3JQcm9jZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTE1OTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC94bWwvSFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3RvclByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnhtbDsNCisNCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsNCitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247DQoraW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOw0KK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVdyaXRlcjsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWwuQ29uc3RhbnRzOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQmFzZVN0QVhBcnRpZmFjdFByb2Nlc3NvcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uV3JpdGVFeGNlcHRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Qcm9jZXNzb3JDb250ZXh0Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvbHZlci5Nb2RlbFJlc29sdmVyOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRmFjdG9yeUV4dGVuc2lvblBvaW50Ow0KKw0KK3B1YmxpYyBjbGFzcyBIVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yUHJvY2Vzc29yIGV4dGVuZHMgQmFzZVN0QVhBcnRpZmFjdFByb2Nlc3NvciBpbXBsZW1lbnRzIFN0QVhBcnRpZmFjdFByb2Nlc3NvcjxIVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yPiB7DQorICAgIA0KKyAgICBwdWJsaWMgSFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3RvclByb2Nlc3NvcihGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMpIHsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgUU5hbWUgZ2V0QXJ0aWZhY3RUeXBlKCkgew0KKyAgICAgICAgcmV0dXJuIEhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3IuT1BFUkFUSU9OX1NFTEVDVE9SX0hUVFBfREVGQVVMVF9RTkFNRTsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIEhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3IgcmVhZChYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uLCBYTUxTdHJlYW1FeGNlcHRpb24gew0KKyAgICAgICAgSFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3RvciB3aXJlRm9ybWF0ID0gbmV3IEhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3IoKTsNCisgICAgICAgICANCisgICAgICAgIHJldHVybiB3aXJlRm9ybWF0Ow0KKyAgICB9DQorDQorICAgIHB1YmxpYyB2b2lkIHdyaXRlKEhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3Igd2lyZUZvcm1hdCwgWE1MU3RyZWFtV3JpdGVyIHdyaXRlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSANCisgICAgICAgIHRocm93cyBDb250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uIHsNCisgICAgICAgIHdyaXRlci53cml0ZVN0YXJ0RWxlbWVudCgidHVzY2FueSIsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFydGlmYWN0VHlwZSgpLmdldExvY2FsUGFydCgpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFydGlmYWN0VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpKTsNCisgICAgICAgIHdyaXRlci53cml0ZU5hbWVzcGFjZSgidHVzY2FueSIsIENvbnN0YW50cy5TQ0ExMV9UVVNDQU5ZX05TKTsgDQorICAgICAgICANCisgICAgICAgIHdyaXRlci53cml0ZUVuZEVsZW1lbnQoKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgQ2xhc3M8SFRUUERlZmF1bHRPcGVyYXRpb25TZWxlY3Rvcj4gZ2V0TW9kZWxUeXBlKCkgew0KKyAgICAgICAgcmV0dXJuIEhUVFBEZWZhdWx0T3BlcmF0aW9uU2VsZWN0b3IuY2xhc3M7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgcmVzb2x2ZShIVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yIGFyZzAsIE1vZGVsUmVzb2x2ZXIgYXJnMSwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7DQorDQorICAgIH0NCisgICAgDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAveG1sL0hUVFBEZWZhdWx0V2lyZUZvcm1hdFByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaHR0cC94bWwvSFRUUERlZmF1bHRXaXJlRm9ybWF0UHJvY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjViMTgyNwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAveG1sL0hUVFBEZWZhdWx0V2lyZUZvcm1hdFByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsNzEgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnhtbDsNCisNCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsNCitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247DQoraW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOw0KK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVdyaXRlcjsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWwuQ29uc3RhbnRzOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQRGVmYXVsdFdpcmVGb3JtYXQ7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5CYXNlU3RBWEFydGlmYWN0UHJvY2Vzc29yOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlByb2Nlc3NvckNvbnRleHQ7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3I7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLk1vZGVsUmVzb2x2ZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5GYWN0b3J5RXh0ZW5zaW9uUG9pbnQ7DQorDQorcHVibGljIGNsYXNzIEhUVFBEZWZhdWx0V2lyZUZvcm1hdFByb2Nlc3NvciBleHRlbmRzIEJhc2VTdEFYQXJ0aWZhY3RQcm9jZXNzb3IgaW1wbGVtZW50cyBTdEFYQXJ0aWZhY3RQcm9jZXNzb3I8SFRUUERlZmF1bHRXaXJlRm9ybWF0PiB7DQorICAgIA0KKyAgICBwdWJsaWMgSFRUUERlZmF1bHRXaXJlRm9ybWF0UHJvY2Vzc29yKEZhY3RvcnlFeHRlbnNpb25Qb2ludCBtb2RlbEZhY3Rvcmllcykgew0KKyAgICB9DQorDQorICAgIHB1YmxpYyBRTmFtZSBnZXRBcnRpZmFjdFR5cGUoKSB7DQorICAgICAgICByZXR1cm4gSFRUUERlZmF1bHRXaXJlRm9ybWF0LldJUkVfRk9STUFUX0hUVFBfREVGQVVMVF9RTkFNRTsNCisgICAgfQ0KKyAgICANCisgICAgDQorICAgIHB1YmxpYyBIVFRQRGVmYXVsdFdpcmVGb3JtYXQgcmVhZChYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uLCBYTUxTdHJlYW1FeGNlcHRpb24gew0KKyAgICAgICAgSFRUUERlZmF1bHRXaXJlRm9ybWF0IHdpcmVGb3JtYXQgPSBuZXcgSFRUUERlZmF1bHRXaXJlRm9ybWF0KCk7DQorICAgICAgICAgDQorICAgICAgICByZXR1cm4gd2lyZUZvcm1hdDsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCB3cml0ZShIVFRQRGVmYXVsdFdpcmVGb3JtYXQgd2lyZUZvcm1hdCwgWE1MU3RyZWFtV3JpdGVyIHdyaXRlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSANCisgICAgICAgIHRocm93cyBDb250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uIHsNCisgICAgICAgIHdyaXRlci53cml0ZVN0YXJ0RWxlbWVudCgidHVzY2FueSIsIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFydGlmYWN0VHlwZSgpLmdldExvY2FsUGFydCgpLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEFydGlmYWN0VHlwZSgpLmdldE5hbWVzcGFjZVVSSSgpKTsNCisgICAgICAgIHdyaXRlci53cml0ZU5hbWVzcGFjZSgidHVzY2FueSIsIENvbnN0YW50cy5TQ0ExMV9UVVNDQU5ZX05TKTsgDQorICAgICAgICANCisgICAgICAgIHdyaXRlci53cml0ZUVuZEVsZW1lbnQoKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgQ2xhc3M8SFRUUERlZmF1bHRXaXJlRm9ybWF0PiBnZXRNb2RlbFR5cGUoKSB7DQorICAgICAgICByZXR1cm4gSFRUUERlZmF1bHRXaXJlRm9ybWF0LmNsYXNzOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyB2b2lkIHJlc29sdmUoSFRUUERlZmF1bHRXaXJlRm9ybWF0IGFyZzAsIE1vZGVsUmVzb2x2ZXIgYXJnMSwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7DQorDQorICAgIH0NCisgICAgDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2h0dHAveG1sL0hUVFBYTUxXaXJlRm9ybWF0UHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL3htbC9IVFRQWE1MV2lyZUZvcm1hdFByb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MjkyY2YKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9odHRwL3htbC9IVFRQWE1MV2lyZUZvcm1hdFByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsNzEgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnhtbDsNCisNCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsNCitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247DQoraW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOw0KK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVdyaXRlcjsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWwuQ29uc3RhbnRzOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQWE1MV2lyZUZvcm1hdDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkJhc2VTdEFYQXJ0aWZhY3RQcm9jZXNzb3I7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvbldyaXRlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuUHJvY2Vzc29yQ29udGV4dDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb2x2ZXIuTW9kZWxSZXNvbHZlcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkZhY3RvcnlFeHRlbnNpb25Qb2ludDsNCisNCitwdWJsaWMgY2xhc3MgSFRUUFhNTFdpcmVGb3JtYXRQcm9jZXNzb3IgZXh0ZW5kcyBCYXNlU3RBWEFydGlmYWN0UHJvY2Vzc29yIGltcGxlbWVudHMgU3RBWEFydGlmYWN0UHJvY2Vzc29yPEhUVFBYTUxXaXJlRm9ybWF0PiB7DQorICAgIA0KKyAgICBwdWJsaWMgSFRUUFhNTFdpcmVGb3JtYXRQcm9jZXNzb3IoRmFjdG9yeUV4dGVuc2lvblBvaW50IG1vZGVsRmFjdG9yaWVzKSB7DQorICAgIH0NCisNCisgICAgcHVibGljIFFOYW1lIGdldEFydGlmYWN0VHlwZSgpIHsNCisgICAgICAgIHJldHVybiBIVFRQWE1MV2lyZUZvcm1hdC5XSVJFX0ZPUk1BVF9IVFRQX1hNTF9RTkFNRTsNCisgICAgfQ0KKyAgICANCisgICAgDQorICAgIHB1YmxpYyBIVFRQWE1MV2lyZUZvcm1hdCByZWFkKFhNTFN0cmVhbVJlYWRlciByZWFkZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbiB7DQorICAgICAgICBIVFRQWE1MV2lyZUZvcm1hdCB3aXJlRm9ybWF0ID0gbmV3IEhUVFBYTUxXaXJlRm9ybWF0KCk7DQorICAgICAgICAgDQorICAgICAgICByZXR1cm4gd2lyZUZvcm1hdDsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCB3cml0ZShIVFRQWE1MV2lyZUZvcm1hdCB3aXJlRm9ybWF0LCBYTUxTdHJlYW1Xcml0ZXIgd3JpdGVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIA0KKyAgICAgICAgdGhyb3dzIENvbnRyaWJ1dGlvbldyaXRlRXhjZXB0aW9uLCBYTUxTdHJlYW1FeGNlcHRpb24gew0KKyAgICAgICAgd3JpdGVyLndyaXRlU3RhcnRFbGVtZW50KCJ0dXNjYW55IiwgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXJ0aWZhY3RUeXBlKCkuZ2V0TG9jYWxQYXJ0KCksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0QXJ0aWZhY3RUeXBlKCkuZ2V0TmFtZXNwYWNlVVJJKCkpOw0KKyAgICAgICAgd3JpdGVyLndyaXRlTmFtZXNwYWNlKCJ0dXNjYW55IiwgQ29uc3RhbnRzLlNDQTExX1RVU0NBTllfTlMpOyANCisgICAgICAgIA0KKyAgICAgICAgd3JpdGVyLndyaXRlRW5kRWxlbWVudCgpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBDbGFzczxIVFRQWE1MV2lyZUZvcm1hdD4gZ2V0TW9kZWxUeXBlKCkgew0KKyAgICAgICAgcmV0dXJuIEhUVFBYTUxXaXJlRm9ybWF0LmNsYXNzOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyB2b2lkIHJlc29sdmUoSFRUUFhNTFdpcmVGb3JtYXQgYXJnMCwgTW9kZWxSZXNvbHZlciBhcmcxLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uIHsNCisNCisgICAgfQ0KKyAgICANCit9DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWh0dHAvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgppbmRleCBmOGMwZmQyLi45YTI2NjExIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctaHR0cC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgorKysgYi9tb2R1bGVzL2JpbmRpbmctaHR0cC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgpAQCAtMTcsMyArMTcsNiBAQAogCiAjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgYXJ0aWZhY3QgcHJvY2Vzc29yIGV4dGVuc2lvbgogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAueG1sLkhUVFBCaW5kaW5nUHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSNiaW5kaW5nLmh0dHAsbW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuSFRUUEJpbmRpbmcsZmFjdG9yeT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQQmluZGluZ0ZhY3RvcnkNCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC54bWwuSFRUUERlZmF1bHRXaXJlRm9ybWF0UHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSN3aXJlRm9ybWF0Lmh0dHBEZWZhdWx0LG1vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLkhUVFBEZWZhdWx0V2lyZUZvcm1hdAorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAueG1sLkhUVFBYTUxXaXJlRm9ybWF0UHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSN3aXJlRm9ybWF0Lmh0dHBYbWwsbW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmh0dHAuSFRUUFhNTFdpcmVGb3JtYXQKK29yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLnhtbC5IVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yUHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSNvcGVyYXRpb25TZWxlY3Rvci5odHRwRGVmYXVsdCxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYTI1Y2M4NS4uYTE2ZjBjNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtOCw2ICs4LDcgQEAKIEJ1bmRsZS1EZXNjcmlwdGlvbjogQXBhY2hlIFR1c2NhbnkgU0NBIEpNUyBCaW5kaW5nIFJ1bnRpbWUNCiBJbXBvcnQtUGFja2FnZTogamF2YXguam1zLA0KICBqYXZheC5uYW1pbmcsDQorIGphdmF4LnJlc291cmNlLnNwaSwNCiAgamF2YXguc2VjdXJpdHkuYXV0aCwNCiAgamF2YXgueG1sLm5hbWVzcGFjZSwNCiAgamF2YXgueG1sLnN0cmVhbSwNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvcG9tLnhtbCBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9wb20ueG1sCmluZGV4IGQ4N2ZlZDMuLjIwNmUyNDAgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9wb20ueG1sCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9wb20ueG1sCkBAIC0zMiw1NyArMzIsMTggQEAKICAgICAgICAgICAgIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1wb208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+IAorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXM8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIAotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1zcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWludGVyZmFjZS1qYXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotCQkJPGFydGlmYWN0SWQ+dHVzY2FueS1pbnRlcmZhY2Utd3NkbDwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLQkJPC9kZXBlbmRlbmN5PgotCi0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPnR1c2NhbnktZGF0YWJpbmRpbmctamF4YjwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLQkJPC9kZXBlbmRlbmN5PgotCi0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy13c2RsZ2VuPC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotCQk8L2RlcGVuZGVuY3k+Ci0KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotCQkJPGFydGlmYWN0SWQ+dHVzY2FueS1wb2xpY3ktc2VjdXJpdHk8L2FydGlmYWN0SWQ+Ci0JCQk8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0JCTwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4KQEAgLTkxLDI3ICs1MiwxOSBAQAogICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgCiAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KKyAJICAgPGRlcGVuZGVuY3k+CisgICAJICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgorICAgICAgCSAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tajJlZS1jb25uZWN0b3JfMS41X3NwZWM8L2FydGlmYWN0SWQ+CisgICAgICAJICA8dmVyc2lvbj4yLjAuMDwvdmVyc2lvbj4gICAgCisgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAJICAgPC9kZXBlbmRlbmN5PgorICAgIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKICAgICA8L2RlcGVuZGVuY2llcz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9oZWFkZXJzL0hlYWRlclJlZmVyZW5jZUludGVyY2VwdG9yLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2hlYWRlcnMvSGVhZGVyUmVmZXJlbmNlSW50ZXJjZXB0b3IuamF2YQppbmRleCBiMDY3YjZlLi42MWM1ZGM4IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2hlYWRlcnMvSGVhZGVyUmVmZXJlbmNlSW50ZXJjZXB0b3IuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2hlYWRlcnMvSGVhZGVyUmVmZXJlbmNlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjIsMTEgKzIyLDEzIEBACiAKIAogaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlVVSUQ7CiAKIGltcG9ydCBqYXZheC5qbXMuRGVsaXZlcnlNb2RlOworaW1wb3J0IGphdmF4Lmptcy5EZXN0aW5hdGlvbjsKIGltcG9ydCBqYXZheC5qbXMuSk1TRXhjZXB0aW9uOworaW1wb3J0IGphdmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRpb247CiAKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LldpcmVGb3JtYXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0NvbnN0YW50czsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdFeGNlcHRpb247CkBAIC01MSwyMiArNTMsMTUgQEAKIAogICAgIHByaXZhdGUgSW52b2tlciBuZXh0OwogICAgIHByaXZhdGUgUnVudGltZUVuZHBvaW50UmVmZXJlbmNlIHJ1bnRpbWVXaXJlOwotICAgIHByaXZhdGUgSk1TUmVzb3VyY2VGYWN0b3J5IGptc1Jlc291cmNlRmFjdG9yeTsKICAgICBwcml2YXRlIEpNU0JpbmRpbmcgam1zQmluZGluZzsKICAgICBwcml2YXRlIEpNU01lc3NhZ2VQcm9jZXNzb3IgcmVxdWVzdE1lc3NhZ2VQcm9jZXNzb3I7Ci0gICAgcHJpdmF0ZSBKTVNNZXNzYWdlUHJvY2Vzc29yIHJlc3BvbnNlTWVzc2FnZVByb2Nlc3NvcjsKLSAgICBwcml2YXRlIFN0cmluZyBjb3JyZWxhdGlvblNjaGVtZTsKLSAgICBwcml2YXRlIFdpcmVGb3JtYXQgcmVxdWVzdFdpcmVGb3JtYXQ7Ci0gICAgcHJpdmF0ZSBXaXJlRm9ybWF0IHJlc3BvbnNlV2lyZUZvcm1hdDsKKwogCiAgICAgcHVibGljIEhlYWRlclJlZmVyZW5jZUludGVyY2VwdG9yKEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXh0ZW5zaW9ucywgSk1TQmluZGluZyBqbXNCaW5kaW5nLCBKTVNSZXNvdXJjZUZhY3Rvcnkgam1zUmVzb3VyY2VGYWN0b3J5LCBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgcnVudGltZVdpcmUpIHsKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5qbXNCaW5kaW5nID0gam1zQmluZGluZzsKLSAgICAgICAgdGhpcy5ydW50aW1lV2lyZSA9IHJ1bnRpbWVXaXJlOwotICAgICAgICB0aGlzLmptc1Jlc291cmNlRmFjdG9yeSA9IGptc1Jlc291cmNlRmFjdG9yeTsKLSAgICAgICAgdGhpcy5yZXF1ZXN0TWVzc2FnZVByb2Nlc3NvciA9IEpNU01lc3NhZ2VQcm9jZXNzb3JVdGlsLmdldFJlcXVlc3RNZXNzYWdlUHJvY2Vzc29yKGV4dGVuc2lvbnMsIGptc0JpbmRpbmcpOwotICAgICAgICB0aGlzLnJlc3BvbnNlTWVzc2FnZVByb2Nlc3NvciA9IEpNU01lc3NhZ2VQcm9jZXNzb3JVdGlsLmdldFJlc3BvbnNlTWVzc2FnZVByb2Nlc3NvcihleHRlbnNpb25zLCBqbXNCaW5kaW5nKTsKLSAgICAgICAgdGhpcy5jb3JyZWxhdGlvblNjaGVtZSA9IGptc0JpbmRpbmcuZ2V0Q29ycmVsYXRpb25TY2hlbWUoKTsKKyAgICAgICAgdGhpcy5ydW50aW1lV2lyZSA9IHJ1bnRpbWVXaXJlOyAgICAgIAorICAgICAgICB0aGlzLnJlcXVlc3RNZXNzYWdlUHJvY2Vzc29yID0gSk1TTWVzc2FnZVByb2Nlc3NvclV0aWwuZ2V0UmVxdWVzdE1lc3NhZ2VQcm9jZXNzb3IoZXh0ZW5zaW9ucywgam1zQmluZGluZyk7ICAgICAgIAogICAgICAgICAKICAgICB9CiAKQEAgLTkwLDMxICs4NSw0MyBAQAogICAgICAgICAgICAgLy8gQG5hdGl2ZU9wZXJhdGlvbiBoZXJlIG9uIHRoZSByZWZlcmVuY2Ugc2lkZS4KICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlUHJvY2Vzc29yLnNldE9wZXJhdGlvbk5hbWUob3BlcmF0aW9uTmFtZSwgam1zTXNnKTsKICAgICAKLSAgICAgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldE9wZXJhdGlvbkpNU0RlbGl2ZXJ5TW9kZShvcGVyYXRpb25OYW1lKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGptc0JpbmRpbmcuZ2V0T3BlcmF0aW9uSk1TRGVsaXZlcnlNb2RlKG9wZXJhdGlvbk5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGptc01zZy5zZXRKTVNEZWxpdmVyeU1vZGUoRGVsaXZlcnlNb2RlLlBFUlNJU1RFTlQpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGptc01zZy5zZXRKTVNEZWxpdmVyeU1vZGUoRGVsaXZlcnlNb2RlLk5PTl9QRVJTSVNURU5UKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldEVmZmVjdGl2ZUpNU0RlbGl2ZXJ5TW9kZShvcGVyYXRpb25OYW1lKSAhPSBudWxsKSB7CisgICAgICAgICAgICAJaWYgKGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TRGVsaXZlcnlNb2RlKG9wZXJhdGlvbk5hbWUpKSB7CisgICAgICAgICAgICAJCWptc01zZy5zZXRKTVNEZWxpdmVyeU1vZGUoRGVsaXZlcnlNb2RlLlBFUlNJU1RFTlQpOworICAgICAgICAgICAgCX0gZWxzZSB7CisgICAgICAgICAgICAJCWptc01zZy5zZXRKTVNEZWxpdmVyeU1vZGUoRGVsaXZlcnlNb2RlLk5PTl9QRVJTSVNURU5UKTsKKyAgICAgICAgICAgIAl9CisgICAgICAgICAgICB9IAogICAgIAorICAgICAgICAgICAgaWYgKGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TUHJpb3JpdHkob3BlcmF0aW9uTmFtZSkgIT0gbnVsbCkgeworICAgICAgICAgICAgCWptc01zZy5zZXRKTVNQcmlvcml0eShqbXNCaW5kaW5nLmdldEVmZmVjdGl2ZUpNU1ByaW9yaXR5KG9wZXJhdGlvbk5hbWUpKTsKKyAgICAgICAgICAgIH0gCisgICAgCisgICAgICAgICAgICBpZiAoIGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TVHlwZShvcGVyYXRpb25OYW1lKSAhPSBudWxsICkgeyAgICAgICAgIAorICAgICAgICAgICAgCWptc01zZy5zZXRKTVNUeXBlKGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TVHlwZShvcGVyYXRpb25OYW1lKSk7CisgICAgICAgICAgICB9IAorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TVGltZVRvTGl2ZShvcGVyYXRpb25OYW1lKSAhPSBudWxsICkgeworICAgICAgICAgICAgCWptc01zZy5zZXRKTVNFeHBpcmF0aW9uKGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TVGltZVRvTGl2ZShvcGVyYXRpb25OYW1lKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldE9wZXJhdGlvbkpNU0NvcnJlbGF0aW9uSWQob3BlcmF0aW9uTmFtZSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIGptc01zZy5zZXRKTVNDb3JyZWxhdGlvbklEKGptc0JpbmRpbmcuZ2V0T3BlcmF0aW9uSk1TQ29ycmVsYXRpb25JZChvcGVyYXRpb25OYW1lKSk7Ci0gICAgICAgICAgICB9Ci0gICAgCi0gICAgICAgICAgICBpZiAoam1zQmluZGluZy5nZXRPcGVyYXRpb25KTVNQcmlvcml0eShvcGVyYXRpb25OYW1lKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgam1zTXNnLnNldEpNU1ByaW9yaXR5KGptc0JpbmRpbmcuZ2V0T3BlcmF0aW9uSk1TUHJpb3JpdHkob3BlcmF0aW9uTmFtZSkpOwotICAgICAgICAgICAgfQotICAgIAotICAgICAgICAgICAgaWYgKGptc0JpbmRpbmcuZ2V0T3BlcmF0aW9uSk1TVHlwZShvcGVyYXRpb25OYW1lKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgam1zTXNnLnNldEpNU1R5cGUoam1zQmluZGluZy5nZXRPcGVyYXRpb25KTVNUeXBlKG9wZXJhdGlvbk5hbWUpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoSk1TQmluZGluZ0NvbnN0YW50cy5DT1JSRUxBVEVfQ09SUkVMQVRJT05fSUQuZXF1YWxzKGptc0JpbmRpbmcuZ2V0Q29ycmVsYXRpb25TY2hlbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBqbXNNc2cuc2V0Sk1TQ29ycmVsYXRpb25JRChVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpKTsKICAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIGlmICh0dXNjYW55TXNnLmdldEZyb20oKS5nZXRDYWxsYmFja0VuZHBvaW50KCkgIT0gbnVsbCkgewogICAgIAogICAgICAgICAgICAgICAgIFN0cmluZyBjYWxsYmFja0Rlc3ROYW1lID0gZ2V0Q2FsbGJhY2tEZXN0aW5hdGlvbk5hbWUocmVmZXJlbmNlKTsKICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tEZXN0TmFtZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGptc01zZy5zZXRTdHJpbmdQcm9wZXJ0eShKTVNCaW5kaW5nQ29uc3RhbnRzLkNBTExCQUNLX1FfUFJPUEVSVFksIGNhbGxiYWNrRGVzdE5hbWUpOworICAgICAgICAgICAgICAgICAgICBqbXNNc2cuc2V0U3RyaW5nUHJvcGVydHkoSk1TQmluZGluZ0NvbnN0YW50cy5DQUxMQkFDS19RX1BST1BFUlRZLCAiam1zOmpuZGk6IiArIGNhbGxiYWNrRGVzdE5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uLmlzTm9uQmxvY2tpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICAJRGVzdGluYXRpb24gZGVzdCA9IGNvbnRleHQuZ2V0Sm1zUmVzb3VyY2VGYWN0b3J5KCkubG9va3VwRGVzdGluYXRpb24oY2FsbGJhY2tEZXN0TmFtZSk7CisJCQkJCQlqbXNNc2cuc2V0Sk1TUmVwbHlUbyhkZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTMxLDE2ICsxMzgsMTggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldE9wZXJhdGlvbkpNU1RpbWVUb0xpdmUob3BlcmF0aW9uTmFtZSkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0VGltZVRvTGl2ZShqbXNCaW5kaW5nLmdldE9wZXJhdGlvbkpNU1RpbWVUb0xpdmUob3BlcmF0aW9uTmFtZSkgKiAyKTsgICAgICAgIAorICAgICAgICAgICAgaWYgKGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TVGltZVRvTGl2ZShvcGVyYXRpb25OYW1lKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRUaW1lVG9MaXZlKGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TVGltZVRvTGl2ZShvcGVyYXRpb25OYW1lKSAqIDIpOyAgICAgICAgCiAgICAgICAgICAgICB9IGVsc2UgeyAgIAogICAgICAgICAgICAgCWNvbnRleHQuc2V0VGltZVRvTGl2ZShKTVNCaW5kaW5nQ29uc3RhbnRzLkRFRkFVTFRfVElNRV9UT19MSVZFKTsgICAgICAgIAotICAgICAgICAgICAgfSAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHR1c2NhbnlNc2c7CiAgICAgICAgIH0gY2F0Y2ggKEpNU0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSk1TQmluZGluZ0V4Y2VwdGlvbihlKTsKLSAgICAgICAgfSAKKyAgICAgICAgfSBjYXRjaCAoTmFtaW5nRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBKTVNCaW5kaW5nRXhjZXB0aW9uKGUpOworCQl9IAogICAgIH0KICAKICAgICAKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvaGVhZGVycy9IZWFkZXJTZXJ2aWNlSW50ZXJjZXB0b3IuamF2YSBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvaGVhZGVycy9IZWFkZXJTZXJ2aWNlSW50ZXJjZXB0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzhhODdhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9oZWFkZXJzL0hlYWRlclNlcnZpY2VJbnRlcmNlcHRvci5qYXZhCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuaGVhZGVyczsKKworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBqYXZheC5qbXMuSk1TRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludGVyY2VwdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZva2VyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlOworCitwdWJsaWMgY2xhc3MgSGVhZGVyU2VydmljZUludGVyY2VwdG9yIGltcGxlbWVudHMgSW50ZXJjZXB0b3IgeworCisgICAgcHJpdmF0ZSBJbnZva2VyIG5leHQ7CisgICAgcHJpdmF0ZSBKTVNCaW5kaW5nIGptc0JpbmRpbmc7CisKKyAgICBwdWJsaWMgSGVhZGVyU2VydmljZUludGVyY2VwdG9yKEpNU0JpbmRpbmcgam1zQmluZGluZykgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLmptc0JpbmRpbmcgPSBqbXNCaW5kaW5nOworICAgIH0KKworICAgIHB1YmxpYyBNZXNzYWdlIGludm9rZShNZXNzYWdlIG1zZykgeworICAgICAgICByZXR1cm4gaW52b2tlUmVzcG9uc2UobmV4dC5pbnZva2UobXNnKSk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBNZXNzYWdlIGludm9rZVJlc3BvbnNlKE1lc3NhZ2UgdHVzY2FueU1zZykgeworICAgICAgICB0cnkgeworCisgICAgICAgICAgICBqYXZheC5qbXMuTWVzc2FnZSBqbXNNc2cgPSB0dXNjYW55TXNnLmdldEJvZHkoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHR1c2NhbnlNc2cuZ2V0T3BlcmF0aW9uKCk7CisgICAgICAgICAgICBTdHJpbmcgb3BlcmF0aW9uTmFtZSA9IG9wZXJhdGlvbi5nZXROYW1lKCk7CisKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIHByb3BOYW1lIDogam1zQmluZGluZy5nZXRQcm9wZXJ0eU5hbWVzKCkpIHsKKyAgICAgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBqbXNCaW5kaW5nLmdldFByb3BlcnR5KHByb3BOYW1lKTsKKyAgICAgICAgICAgICAgICBqbXNNc2cuc2V0T2JqZWN0UHJvcGVydHkocHJvcE5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gb3BlcmF0aW9uUHJvcGVydGllcyA9IGptc0JpbmRpbmcuZ2V0T3BlcmF0aW9uUHJvcGVydGllcyhvcGVyYXRpb25OYW1lKTsKKyAgICAgICAgICAgIGlmIChvcGVyYXRpb25Qcm9wZXJ0aWVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBwcm9wTmFtZSA6IG9wZXJhdGlvblByb3BlcnRpZXMua2V5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gb3BlcmF0aW9uUHJvcGVydGllcy5nZXQocHJvcE5hbWUpOworICAgICAgICAgICAgICAgICAgICBqbXNNc2cuc2V0T2JqZWN0UHJvcGVydHkocHJvcE5hbWUsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiB0dXNjYW55TXNnOworCisgICAgICAgIH0gY2F0Y2ggKEpNU0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSk1TQmluZGluZ0V4Y2VwdGlvbihlKTsKKyAgICAgICAgfSAKKyAgICB9CisKKyAgICBwdWJsaWMgSW52b2tlciBnZXROZXh0KCkgeworICAgICAgICByZXR1cm4gbmV4dDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXROZXh0KEludm9rZXIgbmV4dCkgeworICAgICAgICB0aGlzLm5leHQgPSBuZXh0OworICAgIH0KKyAgICAKKyAgCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2hvc3QvRGVmYXVsdEpNU1NlcnZpY2VMaXN0ZW5lci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9ob3N0L0RlZmF1bHRKTVNTZXJ2aWNlTGlzdGVuZXIuamF2YQppbmRleCAzYmQ3YjhjLi45NDcyODY5IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2hvc3QvRGVmYXVsdEpNU1NlcnZpY2VMaXN0ZW5lci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvaG9zdC9EZWZhdWx0Sk1TU2VydmljZUxpc3RlbmVyLmphdmEKQEAgLTMxLDYgKzMxLDcgQEAKIGltcG9ydCBqYXZheC5qbXMuU2Vzc2lvbjsKIGltcG9ydCBqYXZheC5qbXMuVG9waWM7CiBpbXBvcnQgamF2YXgubmFtaW5nLk5hbWluZ0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC5yZXNvdXJjZS5zcGkuQWN0aXZhdGlvblNwZWM7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nQ29uc3RhbnRzOwpAQCAtNzEsOCArNzIsOSBAQAogICAgICAgICB0aGlzLnJ1bm5pbmcgPSB0cnVlOwogCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICByZWdpc3Rlckxpc3Rlcm5lcigpOworICAgICAgICAgICAgcmVnaXN0ZXJMaXN0ZW5lcigpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBKTVNCaW5kaW5nRXhjZXB0aW9uKSB0aHJvdyAoSk1TQmluZGluZ0V4Y2VwdGlvbillOwogICAgICAgICAgICAgdGhyb3cgbmV3IEpNU0JpbmRpbmdFeGNlcHRpb24oIkVycm9yIHN0YXJ0aW5nIEpNU1NlcnZpY2VCaW5kaW5nIiwgZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC05Myw5ICs5NSwxMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHJpdmF0ZSB2b2lkIHJlZ2lzdGVyTGlzdGVybmVyKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSk1TRXhjZXB0aW9uIHsKKyAgICBwcml2YXRlIHZvaWQgcmVnaXN0ZXJMaXN0ZW5lcigpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiB7CiAKICAgICAgICAgU2Vzc2lvbiBzZXNzaW9uID0gam1zUmVzb3VyY2VGYWN0b3J5LmNyZWF0ZVNlc3Npb24oKTsKKyAgICAgICAgbG9va3VwQWN0aXZhdGlvblNwZWMoKTsKICAgICAgICAgZGVzdGluYXRpb24gPSBsb29rdXBEZXN0aW5hdGlvblF1ZXVlKCk7CiAgICAgICAgIGlmIChkZXN0aW5hdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICBkZXN0aW5hdGlvbiA9IHNlc3Npb24uY3JlYXRlVGVtcG9yYXJ5UXVldWUoKTsKQEAgLTE0NSw3ICsxNDgsMzMgQEAKICAgICAgICAgICAgICsgKChkZXN0aW5hdGlvbiBpbnN0YW5jZW9mIFF1ZXVlKSA/ICgoUXVldWUpZGVzdGluYXRpb24pLmdldFF1ZXVlTmFtZSgpIDogKChUb3BpYylkZXN0aW5hdGlvbikuZ2V0VG9waWNOYW1lKCkpKTsKICAgICB9CiAKLSAgICAvKioKKyAgICAvLyBTdHViIGNvZGUgZm9yIEFjdGl2YXRpb25TcGVjIHN1cHBvcnQgdGhhdCB0aHJvd3MgYXBwcm9wcmlhdGUgZXJyb3JzCisgICAgcHJpdmF0ZSB2b2lkIGxvb2t1cEFjdGl2YXRpb25TcGVjKCkgeyAgICAgICAgCisgICAgICAgIGlmICggam1zQmluZGluZy5nZXRBY3RpdmF0aW9uU3BlY05hbWUoKSAhPSBudWxsICkgIHsKKyAgICAgICAgCVN0cmluZyBjcmVhdGVNb2RlID0gam1zQmluZGluZy5nZXRBY3RpdmF0aW9uU3BlY0NyZWF0ZSgpOworICAgICAgICAJaWYgKCBKTVNCaW5kaW5nQ29uc3RhbnRzLkNSRUFURV9BTFdBWVMuZXF1YWxzKGNyZWF0ZU1vZGUpICkgeworICAgICAgICAJCUFjdGl2YXRpb25TcGVjIHNwZWMgPSBqbXNSZXNvdXJjZUZhY3RvcnkubG9va3VwQWN0aXZhdGlvblNwZWMoam1zQmluZGluZy5nZXRBY3RpdmF0aW9uU3BlY05hbWUoKSk7CisgICAgICAgIAkJaWYgKCBzcGVjICE9IG51bGwgKSB7CisgICAgICAgIAkJCXRocm93IG5ldyBKTVNCaW5kaW5nRXhjZXB0aW9uKCJBY3RpdmF0aW9uU3BlYyBzcGVjaWZpZXMgY3JlYXRlIG1vZGUgb2YgXCJhbHdheXNcIiBidXQgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuIik7CisgICAgICAgIAkJfQorICAgICAgICAJCXRocm93IG5ldyBKTVNCaW5kaW5nRXhjZXB0aW9uKCJDYW4gbm90IGNyZWF0ZSBBY3RpdmF0aW9uU3BlYyIpOworICAgICAgICAJfSBlbHNlIGlmICggSk1TQmluZGluZ0NvbnN0YW50cy5DUkVBVEVfSUZfTk9UX0VYSVNULmVxdWFscyhjcmVhdGVNb2RlKSkgeworICAgICAgICAJCUFjdGl2YXRpb25TcGVjIHNwZWMgPSBqbXNSZXNvdXJjZUZhY3RvcnkubG9va3VwQWN0aXZhdGlvblNwZWMoam1zQmluZGluZy5nZXRBY3RpdmF0aW9uU3BlY05hbWUoKSk7CisgICAgICAgIAkJaWYgKCBzcGVjID09IG51bGwgKSB7CisgICAgICAgIAkJCXRocm93IG5ldyBKTVNCaW5kaW5nRXhjZXB0aW9uKCJDYW4gbm90IGNyZWF0ZSBBY3RpdmF0aW9uU3BlYyIpOworICAgICAgICAJCX0KKyAgICAgICAgCX0gZWxzZSBpZiAoIEpNU0JpbmRpbmdDb25zdGFudHMuQ1JFQVRFX05FVkVSLmVxdWFscyhjcmVhdGVNb2RlKSkgeworICAgICAgICAJCUFjdGl2YXRpb25TcGVjIHNwZWMgPSBqbXNSZXNvdXJjZUZhY3RvcnkubG9va3VwQWN0aXZhdGlvblNwZWMoam1zQmluZGluZy5nZXRBY3RpdmF0aW9uU3BlY05hbWUoKSk7CisgICAgICAgIAkJaWYgKCBzcGVjID09IG51bGwgKQorICAgICAgICAJCQl0aHJvdyBuZXcgSk1TQmluZGluZ0V4Y2VwdGlvbigiQWN0aXZhdGlvblNwZWMgc3BlY2lmaWVzIGNyZWF0ZSBtb2RlIG9mIFwibmV2ZXJcIiBidXQgcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QgYXQgam5kaU5hbWUgIiArIGptc0JpbmRpbmcuZ2V0QWN0aXZhdGlvblNwZWNOYW1lKCkpOworICAgICAgICAJCQkKKyAgICAgICAgCX0KKyAgICAgICAgCSAgICAgICAgCisgICAgICAgIAkKKyAgICAgICAgfQorCX0KKworCS8qKgogICAgICAqIExvb2tzIHVwIHRoZSBEZXN0aW5hdGlvbiBRdWV1ZSBmb3IgdGhlIEpNUyBCaW5kaW5nLgogICAgICAqIDxwPgogICAgICAqIFdoYXQgaGFwcGVucyBpbiB0aGUgbG9vayB1cCB3aWxsIGRlcGVuZCBvbiB0aGUgY3JlYXRlIG1vZGUgc3BlY2lmaWVkIGZvciB0aGUgSk1TIEJpbmRpbmc6CkBAIC0xNjcsOCArMTk2LDggQEAKICAgICAgICAgaWYgKGlzQ2FsbGJhY2tTZXJ2aWNlICYmIChqbXNCaW5kaW5nLmdldERlc3RpbmF0aW9uTmFtZSgpID09IG51bGwpKSB7CiAgICAgICAgICAgICAvLyBpZiBpdHMgYSBjYWxsYmFjayBzZXJ2aWNlIHJldHVybmluZyBudWxsIGluZGljYXRlcyB0byB1c2UgYSB0ZW1wb3JhcnkgcXVldWUKICAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0KKyAgICAgICAgfSAgICAKKyAgICAgICAgCiAgICAgICAgIERlc3RpbmF0aW9uIGRlc3RpbmF0aW9uID0gam1zUmVzb3VyY2VGYWN0b3J5Lmxvb2t1cERlc3RpbmF0aW9uKGptc0JpbmRpbmcuZ2V0RGVzdGluYXRpb25OYW1lKCkpOwogCiAgICAgICAgIFN0cmluZyBxQ3JlYXRlTW9kZSA9IGptc0JpbmRpbmcuZ2V0RGVzdGluYXRpb25DcmVhdGUoKTsKQEAgLTE4OCw3ICsyMTcsOCBAQAogCiAgICAgICAgIH0gZWxzZSBpZiAocUNyZWF0ZU1vZGUuZXF1YWxzKEpNU0JpbmRpbmdDb25zdGFudHMuQ1JFQVRFX0lGX05PVF9FWElTVCkpIHsKICAgICAgICAgICAgIC8vIEluIHRoaXMgbW9kZSwgdGhlIHF1ZXVlIG1heSBub3IgbWF5IG5vdCBleGlzdC4gSXQgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci0gICAgICAgICAgICBpZiAoZGVzdGluYXRpb24gPT0gbnVsbCkgeworICAgICAgICAgICAgLy8gYnV0IGRvbid0IGNyZWF0ZSB3aGVuIHVzaW5nIGptczpqbmRpIHVyaSBmb3JtYXQKKyAgICAgICAgICAgIGlmIChkZXN0aW5hdGlvbiA9PSBudWxsICYmICEiam5kaSIuZXF1YWxzKGptc0JpbmRpbmcuZ2V0RGVzdGluYXRpb25UeXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24gPSBqbXNSZXNvdXJjZUZhY3RvcnkuY3JlYXRlRGVzdGluYXRpb24oam1zQmluZGluZy5nZXREZXN0aW5hdGlvbk5hbWUoKSk7CiAgICAgICAgICAgICB9CiAKQEAgLTIxNCwxMCArMjQ0LDI5IEBACiAgICAgICAgICAgICAgICAgKyAiIGxpc3RlbmVyIik7CiAgICAgICAgIH0KIAorICAgICAgICAvLyBNYWtlIHN1cmUgaXRzIHRoZSBleHBlY3RlZCB0eXBlIChxdWV1ZSBvciB0b3BpYykKKyAgICAgICAgU3RyaW5nIHR5cGUgPSAoZGVzdGluYXRpb24gaW5zdGFuY2VvZiBRdWV1ZSkgPyBKTVNCaW5kaW5nQ29uc3RhbnRzLkRFU1RJTkFUSU9OX1RZUEVfUVVFVUUgOiBKTVNCaW5kaW5nQ29uc3RhbnRzLkRFU1RJTkFUSU9OX1RZUEVfVE9QSUM7CisgICAgICAgIGlmICgiam5kaSIuZXF1YWxzKGptc0JpbmRpbmcuZ2V0RGVzdGluYXRpb25UeXBlKCkpKSB7CisgICAgICAgICAgICBqbXNCaW5kaW5nLnNldERlc3RpbmF0aW9uVHlwZSh0eXBlKTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghdHlwZS5lcXVhbHMoam1zQmluZGluZy5nZXREZXN0aW5hdGlvblR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSk1TQmluZGluZ0V4Y2VwdGlvbigiSk1TIERlc3RpbmF0aW9uICIgKyBqbXNCaW5kaW5nLmdldERlc3RpbmF0aW9uTmFtZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGV4cGVjdGluZyB0eXBlIG9mICIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBqbXNCaW5kaW5nLmdldERlc3RpbmF0aW9uVHlwZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGJ1dCBmb3VuZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiIHdoaWxlIHJlZ2lzdGVyaW5nIHNlcnZpY2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2VydmljZU5hbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICIgbGlzdGVuZXIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCiAgICAgICAgIHJldHVybiBkZXN0aW5hdGlvbjsKICAgICB9CiAKLSAgICBwdWJsaWMgU3RyaW5nIGdldERlc3RpbmF0aW9uTmFtZSgpIHsKKworCisJcHVibGljIFN0cmluZyBnZXREZXN0aW5hdGlvbk5hbWUoKSB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBpZiAoZGVzdGluYXRpb24gaW5zdGFuY2VvZiBRdWV1ZSkgewogICAgICAgICAgICAgICAgIHJldHVybiAoKFF1ZXVlKWRlc3RpbmF0aW9uKS5nZXRRdWV1ZU5hbWUoKTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvb3BlcmF0aW9uc2VsZWN0b3Ivam1zZGVmYXVsdC9ydW50aW1lL09wZXJhdGlvblNlbGVjdG9ySk1TRGVmYXVsdFNlcnZpY2VJbnRlcmNlcHRvci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L3J1bnRpbWUvT3BlcmF0aW9uU2VsZWN0b3JKTVNEZWZhdWx0U2VydmljZUludGVyY2VwdG9yLmphdmEKaW5kZXggMTQ5ZDFjNi4uYWFlODFmYiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L3J1bnRpbWUvT3BlcmF0aW9uU2VsZWN0b3JKTVNEZWZhdWx0U2VydmljZUludGVyY2VwdG9yLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L3J1bnRpbWUvT3BlcmF0aW9uU2VsZWN0b3JKTVNEZWZhdWx0U2VydmljZUludGVyY2VwdG9yLmphdmEKQEAgLTEwNyw2ICsxMDcsMTIgQEAKICAgICAgICAgICAgICAgICBpZiAob3AuZ2V0TmFtZSgpLmVxdWFscyhvcGVyYXRpb25OYW1lKSkgewogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAJU3RyaW5nIG5hdGl2ZU5hbWUgPSBqbXNCaW5kaW5nLmdldE5hdGl2ZU9wZXJhdGlvbk5hbWUob3AuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICAJaWYgKCggbmF0aXZlTmFtZSAhPSBudWxsICkgJiYgKCBuYXRpdmVOYW1lLmVxdWFscyhvcGVyYXRpb25OYW1lKSkgKSB7CisgICAgICAgICAgICAgICAgCQlvcGVyYXRpb24gPSBvcDsKKyAgICAgICAgICAgICAgICAJCWJyZWFrOworICAgICAgICAgICAgICAgIAl9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGptc0JpbmRpbmcuZ2V0UmVxdWVzdFdpcmVGb3JtYXQoKSBpbnN0YW5jZW9mIFdpcmVGb3JtYXRKTVNEZWZhdWx0CkBAIC0xMjEsMTEgKzEyNywxNCBAQAogCiAgICAgICAgICAgICAgICAgICAgIGlmICh4bWxQYXlsb2FkICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RFbGVtZW50ID0gZG9tSGVscGVyLmxvYWQoeG1sUGF5bG9hZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Gcm9tUGF5bG9hZCA9IHJvb3RFbGVtZW50LmdldExvY2FsTmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYXRpb24gb3AgOiBzZXJ2aWNlT3BlcmF0aW9ucykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcC5nZXROYW1lKCkuZXF1YWxzKG9wZXJhdGlvbkZyb21QYXlsb2FkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBOb2RlIGZpcnN0Q2hpbGQgPSByb290RWxlbWVudC5nZXRGaXJzdENoaWxkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGlsZCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uRnJvbVBheWxvYWQgPSBmaXJzdENoaWxkLmdldExvY2FsTmFtZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoT3BlcmF0aW9uIG9wIDogc2VydmljZU9wZXJhdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wLmdldE5hbWUoKS5lcXVhbHMob3BlcmF0aW9uRnJvbVBheWxvYWQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24gPSBvcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CkBAIC0xMzcsMTEgKzE0NiwxNCBAQAogCiAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlcyAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByb290RWxlbWVudCA9IGRvbUhlbHBlci5sb2FkKG5ldyBTdHJpbmcoYnl0ZXMpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkZyb21QYXlsb2FkID0gcm9vdEVsZW1lbnQuZ2V0TG9jYWxOYW1lKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcCA6IHNlcnZpY2VPcGVyYXRpb25zKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wLmdldE5hbWUoKS5lcXVhbHMob3BlcmF0aW9uRnJvbVBheWxvYWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgZmlyc3RDaGlsZCA9IHJvb3RFbGVtZW50LmdldEZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENoaWxkICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Gcm9tUGF5bG9hZCA9IGZpcnN0Q2hpbGQuZ2V0TG9jYWxOYW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChPcGVyYXRpb24gb3AgOiBzZXJ2aWNlT3BlcmF0aW9ucykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3AuZ2V0TmFtZSgpLmVxdWFscyhvcGVyYXRpb25Gcm9tUGF5bG9hZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTE2OSw3ICsxODEsNyBAQAogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAob3BlcmF0aW9uID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBKTVNCaW5kaW5nRXhjZXB0aW9uKCJDYW4ndCBmaW5kIG9wZXJhdGlvbiAiICsgKG9wZXJhdGlvbk5hbWUgIT0gbnVsbCA/IG9wZXJhdGlvbk5hbWUgOiBPTl9NRVNTQUdFX01FVEhPRF9OQU1FKSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSk1TQmluZGluZ0V4Y2VwdGlvbigiQ2Fubm90IGRldGVybWluZSBzZXJ2aWNlIG9wZXJhdGlvbiIpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbjsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcHJvdmlkZXIvQWJzdHJhY3RNZXNzYWdlUHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL0Fic3RyYWN0TWVzc2FnZVByb2Nlc3Nvci5qYXZhCmluZGV4IDhiNjY1YzkuLjZjNjMzOWMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcHJvdmlkZXIvQWJzdHJhY3RNZXNzYWdlUHJvY2Vzc29yLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9wcm92aWRlci9BYnN0cmFjdE1lc3NhZ2VQcm9jZXNzb3IuamF2YQpAQCAtMTgsNiArMTgsOCBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMucHJvdmlkZXI7CiAKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogCkBAIC0xMTQsMTIgKzExNiwzNSBAQAogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICBPYmplY3RNZXNzYWdlIG1lc3NhZ2UgPSBzZXNzaW9uLmNyZWF0ZU9iamVjdE1lc3NhZ2UoKTsKLSAgICAgICAgICAgIFN0cmluZyBjYXVzZU1zZzsKLSAgICAgICAgICAgIGlmIChvIGluc3RhbmNlb2YgUnVudGltZUV4Y2VwdGlvbikgewotICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0T2JqZWN0KG5ldyBSdW50aW1lRXhjZXB0aW9uKG8uZ2V0TWVzc2FnZSgpKSk7CisgICAgICAgICAgICBpZiAobyBpbnN0YW5jZW9mIFJ1bnRpbWVFeGNlcHRpb24gfHwgbyBpbnN0YW5jZW9mIEVycm9yKSB7CisgICAgICAgICAgICAgICAgaW50IHJlY3Vyc2lvbktsdWdlRGV0ZWN0b3IgPSAyMDsKKyAgICAgICAgICAgICAgICBUaHJvd2FibGUgcm9vdENhdXNlID0gbzsKKyAgICAgICAgICAgICAgICBUaHJvd2FibGUgZGVlcFJvb3RDYXVzZSA9IHJvb3RDYXVzZS5nZXRDYXVzZSgpOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvb3RDYXVzZSA9PSBkZWVwUm9vdENhdXNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZWVwUm9vdENhdXNlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RDYXVzZSA9IGRlZXBSb290Q2F1c2U7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocmVjdXJzaW9uS2x1Z2VEZXRlY3Rvci0tIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoZGVlcFJvb3RDYXVzZSAhPSBudWxsKTsKKworICAgICAgICAgICAgICAgIGZpbmFsIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsKKyAgICAgICAgICAgICAgICBmaW5hbCBQcmludFdyaXRlciBwdyA9IG5ldyBQcmludFdyaXRlcihzdyk7CisgICAgICAgICAgICAgICAgcHcucHJpbnQoIk1lc3NhZ2UgPSAiICsgby5nZXRNZXNzYWdlKCkpOworICAgICAgICAgICAgICAgIFN0YWNrVHJhY2VFbGVtZW50W10gc3RhY2tFbGVtZW50cyA9IG8uZ2V0U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhY2tFbGVtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHcucHJpbnQoIlx0Pj4gXHQgYXQgIik7CisgICAgICAgICAgICAgICAgICAgICAgICBwdy5wcmludGxuKHN0YWNrRWxlbWVudHNbaV0udG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHB3LmZsdXNoKCk7CisKKyAgICAgICAgICAgICAgICBtZXNzYWdlLnNldE9iamVjdChuZXcgUnVudGltZUV4Y2VwdGlvbiggc3cudG9TdHJpbmcoKSApKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gZm9yIGEgY2hlY2tlZCBleGNlcHRpb24gcmV0dXJuIHRoZSBjaGVja2VkIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0T2JqZWN0KG8pOworICAgICAgICAgICAgICAgICBtZXNzYWdlLnNldE9iamVjdChvKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lc3NhZ2Uuc2V0Qm9vbGVhblByb3BlcnR5KEpNU0JpbmRpbmdDb25zdGFudHMuRkFVTFRfUFJPUEVSVFksIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL0pNU0JpbmRpbmdSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcHJvdmlkZXIvSk1TQmluZGluZ1JlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCmluZGV4IDgwNTNiYTYuLjRlZTA3MTkgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcHJvdmlkZXIvSk1TQmluZGluZ1JlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcHJvdmlkZXIvSk1TQmluZGluZ1JlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCkBAIC0xMDYsNiArMTA2LDkgQEAKIC8vICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgaWYgKCBqbXNCaW5kaW5nLmdldEFjdGl2YXRpb25TcGVjTmFtZSgpICE9IG51bGwgKSB7CisgICAgICAgIAl0aHJvdyBuZXcgSk1TQmluZGluZ0V4Y2VwdGlvbigiQWN0aXZhdGlvbiBzcGVjIGNhbiBub3QgYmUgc3BlY2lmaWVkIG9uIGFuIFNDQSByZWZlcmVuY2UgYmluZGluZy4iKTsKKyAgICAgICAgfQogICAgICAgICBJbnZva2VyIGludm9rZXIgPSBudWxsOwogICAgICAgICBpbnZva2VyID0gbmV3IFJSQkpNU0JpbmRpbmdJbnZva2VyKG9wZXJhdGlvbiwgam1zUmVzb3VyY2VGYWN0b3J5LCBlbmRwb2ludFJlZmVyZW5jZSk7CiAgICAgICAgCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL0pNU0JpbmRpbmdTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL0pNU0JpbmRpbmdTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKaW5kZXggMjI1ZDUxNC4uODQyOGE0NSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9wcm92aWRlci9KTVNCaW5kaW5nU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcHJvdmlkZXIvSk1TQmluZGluZ1NlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpAQCAtMjQsNiArMjQsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQmluZGluZzsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuaGVhZGVycy5IZWFkZXJTZXJ2aWNlSW50ZXJjZXB0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5ob3N0LkpNU1NlcnZpY2VMaXN0ZW5lcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmhvc3QuSk1TU2VydmljZUxpc3RlbmVyRGV0YWlsczsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmhvc3QuSk1TU2VydmljZUxpc3RlbmVyRmFjdG9yeTsKQEAgLTkwLDYgKzkxLDEwIEBACiAgICAgICAgIHRoaXMuam1zUmVzb3VyY2VGYWN0b3J5ID0gam1zUmVzb3VyY2VGYWN0b3J5OwogICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7CiAKKyAgICAgICAgaWYgKGptc0JpbmRpbmcuZ2V0UmVzcG9uc2VBY3RpdmF0aW9uU3BlY05hbWUoKSAhPSBudWxsICYmIGptc0JpbmRpbmcuZ2V0UmVzcG9uc2VBY3RpdmF0aW9uU3BlY05hbWUoKS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBKTVNCaW5kaW5nRXhjZXB0aW9uKCJbQkpNMzAwMjNdIHJlc3BvbnNlL2FjdGl2YXRpb25TcGVjIGVsZW1lbnQgTVVTVCBOT1QgYmUgcHJlc2VudCB3aGVuIHRoZSBiaW5kaW5nIGlzIGJlaW5nIHVzZWQgZm9yIGFuIFNDQSBzZXJ2aWNlIik7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCBkZXN0aW5hdGlvbiB3aGVuIHVzaW5nIGEgY29ubmVjdGlvbiBmYWN0b3J5LgogICAgICAgICAvLyBJZiBhbiBhY3RpdmF0aW9uIHNwZWMgaXMgYmVpbmcgdXNlZCwgZG8gbm90IHNldCB0aGUgZGVzdGluYXRpb24KICAgICAgICAgLy8gYmVjYXVzZSB0aGUgYWN0aXZhdGlvbiBzcGVjIHByb3ZpZGVzIHRoZSBkZXN0aW5hdGlvbi4KQEAgLTE1Myw2ICsxNTgsNyBAQAogICAgICAgICAgICAgc2VydmljZUxpc3RlbmVyLnN0YXJ0KCk7CiAgICAgICAgICAgICAKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgSk1TQmluZGluZ0V4Y2VwdGlvbikgdGhyb3cgKEpNU0JpbmRpbmdFeGNlcHRpb24pZTsKICAgICAgICAgICAgIHRocm93IG5ldyBKTVNCaW5kaW5nRXhjZXB0aW9uKCJFcnJvciBzdGFydGluZyBKTVNTZXJ2aWNlQmluZGluZyIsIGUpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTYxLDYgKzE2Nyw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzZXJ2aWNlTGlzdGVuZXIuc3RvcCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBKTVNCaW5kaW5nRXhjZXB0aW9uKSB0aHJvdyAoSk1TQmluZGluZ0V4Y2VwdGlvbillOwogICAgICAgICAgICAgdGhyb3cgbmV3IEpNU0JpbmRpbmdFeGNlcHRpb24oIkVycm9yIHN0b3BwaW5nIEpNU1NlcnZpY2VCaW5kaW5nIiwgZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xOTQsNiArMjAxLDggQEAKICAgICAgICAgYmluZGluZ0NoYWluLmFkZEludGVyY2VwdG9yKFBoYXNlLlNFUlZJQ0VfQklORElOR19XSVJFRk9STUFULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENhbGxiYWNrRGVzdGluYXRpb25JbnRlcmNlcHRvcihlbmRwb2ludCkpOwogCisgICAgICAgIGJpbmRpbmdDaGFpbi5hZGRJbnRlcmNlcHRvcihQaGFzZS5TRVJWSUNFX0JJTkRJTkdfV0lSRUZPUk1BVCwgbmV3IEhlYWRlclNlcnZpY2VJbnRlcmNlcHRvcihqbXNCaW5kaW5nKSk7CisgICAgICAgIAogICAgICAgICAvLyBhZGQgcmVxdWVzdCB3aXJlIGZvcm1hdAogICAgICAgICBiaW5kaW5nQ2hhaW4uYWRkSW50ZXJjZXB0b3IocmVxdWVzdFdpcmVGb3JtYXRQcm92aWRlci5nZXRQaGFzZSgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RXaXJlRm9ybWF0UHJvdmlkZXIuY3JlYXRlSW50ZXJjZXB0b3IoKSk7CkBAIC0yMDMsNiArMjEyLDcgQEAKICAgICAgICAgICAgIGJpbmRpbmdDaGFpbi5hZGRJbnRlcmNlcHRvcihyZXNwb25zZVdpcmVGb3JtYXRQcm92aWRlci5nZXRQaGFzZSgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVdpcmVGb3JtYXRQcm92aWRlci5jcmVhdGVJbnRlcmNlcHRvcigpKTsKICAgICAgICAgfQorICAgICAgICAKICAgICB9CiAKICAgICBwdWJsaWMgUnVudGltZUNvbXBvbmVudCBnZXRDb21wb25lbnQoKSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL0pNU1Jlc291cmNlRmFjdG9yeS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9wcm92aWRlci9KTVNSZXNvdXJjZUZhY3RvcnkuamF2YQppbmRleCBjZDUzODU3Li41YWFlY2E0IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL0pNU1Jlc291cmNlRmFjdG9yeS5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcHJvdmlkZXIvSk1TUmVzb3VyY2VGYWN0b3J5LmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBqYXZheC5qbXMuSk1TRXhjZXB0aW9uOwogaW1wb3J0IGphdmF4Lmptcy5TZXNzaW9uOwogaW1wb3J0IGphdmF4Lm5hbWluZy5OYW1pbmdFeGNlcHRpb247CitpbXBvcnQgamF2YXgucmVzb3VyY2Uuc3BpLkFjdGl2YXRpb25TcGVjOwogCiBwdWJsaWMgaW50ZXJmYWNlIEpNU1Jlc291cmNlRmFjdG9yeSB7CiAKQEAgLTkyLDQgKzkzLDcgQEAKICAgICAgKiBzaGFyZWQgd2l0aCBvdGhlciB1c2Vycywgb3Igd2hlcmUgY29ubmVjdGlvbnMgY2Fubm90IGJlIGhlbGQgYWNyb3NzIHRyYW5zYWN0aW9uIGJvdW5kYXJpZXMuCiAgICAgICovCiAgICAgcHVibGljIGFic3RyYWN0IGJvb2xlYW4gaXNDb25uZWN0aW9uQ2xvc2VkQWZ0ZXJVc2UoKTsKKworCXB1YmxpYyBhYnN0cmFjdCBBY3RpdmF0aW9uU3BlYyBsb29rdXBBY3RpdmF0aW9uU3BlYygKKwkJCVN0cmluZyBhY3RpdmF0aW9uU3BlY05hbWUpOwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9wcm92aWRlci9KTVNSZXNvdXJjZUZhY3RvcnlJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL0pNU1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQppbmRleCA2MTA4MDUxLi45YzFhMzg0IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL0pNU1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL0pNU1Jlc291cmNlRmFjdG9yeUltcGwuamF2YQpAQCAtMjgsNiArMjgsNyBAQAogaW1wb3J0IGphdmF4Lm5hbWluZy5Db250ZXh0OwogaW1wb3J0IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dDsKIGltcG9ydCBqYXZheC5uYW1pbmcuTmFtaW5nRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnJlc291cmNlLnNwaS5BY3RpdmF0aW9uU3BlYzsKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjsKIApAQCAtMTI4LDEwICsxMjksMTQgQEAKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBjcmVhdGVDb25uZWN0aW9uKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSk1TRXhjZXB0aW9uIHsKLSAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnkgY29ubmVjdGlvbkZhY3RvcnkgPSAoQ29ubmVjdGlvbkZhY3Rvcnkpam5kaUxvb2tVcChjb25uZWN0aW9uRmFjdG9yeU5hbWUpOwotICAgICAgICBpZiAoY29ubmVjdGlvbkZhY3RvcnkgPT0gbnVsbCkgeworICAgICAgICBPYmplY3QgbyAgPSBqbmRpTG9va1VwKGNvbm5lY3Rpb25GYWN0b3J5TmFtZSk7CisgICAgICAgIGlmIChvID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBKTVNCaW5kaW5nRXhjZXB0aW9uKCJjb25uZWN0aW9uIGZhY3Rvcnkgbm90IGZvdW5kOiAiICsgY29ubmVjdGlvbkZhY3RvcnlOYW1lKTsKICAgICAgICAgfQorICAgIAlpZiAoIShvIGluc3RhbmNlb2YgQ29ubmVjdGlvbkZhY3RvcnkpKSB7IAorICAgIAkJdGhyb3cgbmV3IEpNU0JpbmRpbmdFeGNlcHRpb24oIkpOREkgcmVzb3VyY2UgJyIgKyBjb25uZWN0aW9uRmFjdG9yeU5hbWUgKyInIGlzIG5vdCBhIEpNUyBDb25uZWN0aW9uRmFjdG9yeSIpOworICAgIAl9CisgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5IGNvbm5lY3Rpb25GYWN0b3J5ID0gKENvbm5lY3Rpb25GYWN0b3J5KW87CiAgICAgICAgIGNvbm5lY3Rpb24gPSBjb25uZWN0aW9uRmFjdG9yeS5jcmVhdGVDb25uZWN0aW9uKCk7CiAgICAgfQogCkBAIC0yMTQsNiArMjE5LDkgQEAKICAgICAgKiBAc2VlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMucHJvdmlkZXIuSk1TUmVzb3VyY2VGYWN0b3J5I2NyZWF0ZURlc3RpbmF0aW9uKGphdmEubGFuZy5TdHJpbmcpCiAgICAgICovCiAgICAgcHVibGljIERlc3RpbmF0aW9uIGNyZWF0ZURlc3RpbmF0aW9uKFN0cmluZyBqbmRpTmFtZSkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiB7CisgICAgCWlmICggam5kaU5hbWUgPT0gbnVsbCApIAorICAgIAkJcmV0dXJuIG51bGw7CisgICAgCQogICAgICAgICByZXR1cm4gbG9va3VwRGVzdGluYXRpb24oImR5bmFtaWNRdWV1ZXMvIiArIGpuZGlOYW1lKTsKICAgICB9CiAKQEAgLTI3OSw0ICsyODcsMTQgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorCXB1YmxpYyBBY3RpdmF0aW9uU3BlYyBsb29rdXBBY3RpdmF0aW9uU3BlYyhTdHJpbmcgYWN0aXZhdGlvblNwZWNOYW1lKSB7CisJCU9iamVjdCBvID0gam5kaUxvb2tVcChhY3RpdmF0aW9uU3BlY05hbWUpOworCQlpZiAoIG8gPT0gbnVsbCApIAorCQkJcmV0dXJuIG51bGw7CisJCWVsc2UgaWYgKG8gaW5zdGFuY2VvZiBBY3RpdmF0aW9uU3BlYykgCisJCQlyZXR1cm4gKEFjdGl2YXRpb25TcGVjKSBvOworCQkKKwkJdGhyb3cgbmV3IEpNU0JpbmRpbmdFeGNlcHRpb24oIkluY29ycmVjdCByZXNvdXJjZSB0eXBlIGZvciBBY3RpdmF0aW9uU3BlYzogIiArIG8uZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOworCX0KKwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9wcm92aWRlci9SUkJKTVNCaW5kaW5nSW52b2tlci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9wcm92aWRlci9SUkJKTVNCaW5kaW5nSW52b2tlci5qYXZhCmluZGV4IDBmNGY4OGQuLjA5OGJkZGUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcHJvdmlkZXIvUlJCSk1TQmluZGluZ0ludm9rZXIuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3Byb3ZpZGVyL1JSQkpNU0JpbmRpbmdJbnZva2VyLmphdmEKQEAgLTEzNiw2ICsxMzYsMTEgQEAKICAgICAgICAgICAgIHFDcmVhdGVNb2RlID0gam1zQmluZGluZy5nZXREZXN0aW5hdGlvbkNyZWF0ZSgpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gRklYTUU6IFtyZmVuZ10gQSBoYWNrIHRvIHJlbW92ZSBqbXM6am5kaTogcHJlZml4CisgICAgICAgIGlmIChxdWV1ZU5hbWUuc3RhcnRzV2l0aCgiam1zOmpuZGk6IikpIHsKKyAgICAgICAgICAgIHF1ZXVlTmFtZSA9IHF1ZXVlTmFtZS5zdWJzdHJpbmcoImptczpqbmRpOiIubGVuZ3RoKCkpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBEZXN0aW5hdGlvbiBkZXN0ID0gam1zUmVzb3VyY2VGYWN0b3J5Lmxvb2t1cERlc3RpbmF0aW9uKHF1ZXVlTmFtZSk7CiAKICAgICAgICAgaWYgKHFDcmVhdGVNb2RlLmVxdWFscyhKTVNCaW5kaW5nQ29uc3RhbnRzLkNSRUFURV9BTFdBWVMpKSB7CkBAIC0xNTMsNyArMTU4LDggQEAKIAogICAgICAgICB9IGVsc2UgaWYgKHFDcmVhdGVNb2RlLmVxdWFscyhKTVNCaW5kaW5nQ29uc3RhbnRzLkNSRUFURV9JRl9OT1RfRVhJU1QpKSB7CiAgICAgICAgICAgICAvLyBJbiB0aGlzIG1vZGUsIHRoZSBxdWV1ZSBtYXkgbm9yIG1heSBub3QgZXhpc3QuIEl0IHdpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBleGlzdAotICAgICAgICAgICAgaWYgKGRlc3QgPT0gbnVsbCkgeworICAgICAgICAgICAgLy8gYnV0IGRvbid0IGNyZWF0ZSB3aGVuIHVzaW5nIGptczpqbmRpIHVyaSBmb3JtYXQKKyAgICAgICAgICAgIGlmIChkZXN0ID09IG51bGwgJiYgISJqbmRpIi5lcXVhbHMoam1zQmluZGluZy5nZXREZXN0aW5hdGlvblR5cGUoKSkpIHsKICAgICAgICAgICAgICAgICBkZXN0ID0gam1zUmVzb3VyY2VGYWN0b3J5LmNyZWF0ZURlc3RpbmF0aW9uKHF1ZXVlTmFtZSk7CiAgICAgICAgICAgICB9CiAKQEAgLTI0Niw3ICsyNTIsOSBAQAogICAgIAogICAgIHByb3RlY3RlZCBEZXN0aW5hdGlvbiBnZXRSZXBseVRvRGVzdGluYXRpb24oU2Vzc2lvbiBzZXNzaW9uKSB0aHJvd3MgSk1TRXhjZXB0aW9uLCBKTVNCaW5kaW5nRXhjZXB0aW9uLCBOYW1pbmdFeGNlcHRpb24gewogICAgICAgICBEZXN0aW5hdGlvbiByZXBseVRvRGVzdDsKLSAgICAgICAgaWYgKG9wZXJhdGlvbi5pc05vbkJsb2NraW5nKCkpIHsKKyAgICAgICAgLy8gW3JmZW5nXSBJZiB0aGUgb25ld2F5IG9wZXJhdGlvbiBpcyBwYXJ0IG9mIGJpLWRpcmVjdGlvbmFsIGludGVyZmFjZSwgdGhlIEpNU1JlcGx5VG8gc2hvdWxkIGJlIHNldAorICAgICAgICBpZiAob3BlcmF0aW9uLmlzTm9uQmxvY2tpbmcoKSAmJiBlbmRwb2ludFJlZmVyZW5jZS5nZXRDb21wb25lbnRSZWZlcmVuY2VJbnRlcmZhY2VDb250cmFjdCgpCisgICAgICAgICAgICAuZ2V0Q2FsbGJhY2tJbnRlcmZhY2UoKSA9PSBudWxsKSB7CiAgICAgICAgICAgICByZXBseVRvRGVzdCA9IG51bGw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoYmluZGluZ1JlcGx5RGVzdCAhPSBudWxsKSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3RyYW5zcG9ydC9UcmFuc3BvcnRSZWZlcmVuY2VJbnRlcmNlcHRvci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy90cmFuc3BvcnQvVHJhbnNwb3J0UmVmZXJlbmNlSW50ZXJjZXB0b3IuamF2YQppbmRleCA5NjY4MzMzLi4zZWQ4MDIxIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3RyYW5zcG9ydC9UcmFuc3BvcnRSZWZlcmVuY2VJbnRlcmNlcHRvci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvdHJhbnNwb3J0L1RyYW5zcG9ydFJlZmVyZW5jZUludGVyY2VwdG9yLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLnRyYW5zcG9ydDsKIAoraW1wb3J0IGphdmF4Lmptcy5EZWxpdmVyeU1vZGU7CiBpbXBvcnQgamF2YXguam1zLkpNU0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5qbXMuTWVzc2FnZUNvbnN1bWVyOwogaW1wb3J0IGphdmF4Lmptcy5NZXNzYWdlUHJvZHVjZXI7CkBAIC0yNSw2ICsyNiw3IEBACiBpbXBvcnQgamF2YXgubmFtaW5nLk5hbWluZ0V4Y2VwdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZzsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdDb25zdGFudHM7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuY29udGV4dC5KTVNCaW5kaW5nQ29udGV4dDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLnByb3ZpZGVyLkpNU1Jlc291cmNlRmFjdG9yeTsKQEAgLTQxLDE1ICs0MywxMyBAQAogICovCiBwdWJsaWMgY2xhc3MgVHJhbnNwb3J0UmVmZXJlbmNlSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBJbnRlcmNlcHRvciB7CiAgICAgICAKLSAgICBwcml2YXRlIEludm9rZXIgbmV4dDsKLSAgICBwcml2YXRlIFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSBydW50aW1lV2lyZTsKKyAgICBwcml2YXRlIEludm9rZXIgbmV4dDsgICAgCiAgICAgcHJpdmF0ZSBKTVNSZXNvdXJjZUZhY3Rvcnkgam1zUmVzb3VyY2VGYWN0b3J5OwogICAgIHByaXZhdGUgSk1TQmluZGluZyBqbXNCaW5kaW5nOwogCiAgICAgcHVibGljIFRyYW5zcG9ydFJlZmVyZW5jZUludGVyY2VwdG9yKEpNU0JpbmRpbmcgam1zQmluZGluZywgSk1TUmVzb3VyY2VGYWN0b3J5IGptc1Jlc291cmNlRmFjdG9yeSwgUnVudGltZUVuZHBvaW50UmVmZXJlbmNlIHJ1bnRpbWVXaXJlKSB7CiAgICAgICAgIHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuam1zQmluZGluZyA9IGptc0JpbmRpbmc7Ci0gICAgICAgIHRoaXMucnVudGltZVdpcmUgPSBydW50aW1lV2lyZTsKKyAgICAgICAgdGhpcy5qbXNCaW5kaW5nID0gam1zQmluZGluZzsgICAgICAgIAogICAgICAgICB0aGlzLmptc1Jlc291cmNlRmFjdG9yeSA9IGptc1Jlc291cmNlRmFjdG9yeTsKICAgICB9CiAgICAgCkBAIC01OSw3ICs1OSw4IEBACiAgICAgICAgIC8vIGdldCB0aGUgam1zIGNvbnRleHQKICAgICAgICAgSk1TQmluZGluZ0NvbnRleHQgY29udGV4dCA9IG1zZy5nZXRCaW5kaW5nQ29udGV4dCgpOwogICAgICAgICAKLSAgICAgICAgaWYgKGNvbnRleHQuZ2V0UmVwbHlUb0Rlc3RpbmF0aW9uKCkgPT0gbnVsbCkgeworICAgICAgICAvLyBbcmZlbmddIEZvciBvbmV3YXkgb3BlcmF0aW9uIGFzIHBhcnQgb2YgdGhlIGJpLWRpcmVjdGlvbmFsIGludGVyZmFjZSwgdGhlIEpNU1JlcGx5VG8gaXMgcHJlc2VudAorICAgICAgICBpZiAoY29udGV4dC5nZXRSZXBseVRvRGVzdGluYXRpb24oKSA9PSBudWxsIHx8IG1zZy5nZXRPcGVyYXRpb24oKS5pc05vbkJsb2NraW5nKCkpIHsKICAgICAgICAgICAgIHJlc3BvbnNlTXNnLnNldEJvZHkobnVsbCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByZXNwb25zZU1zZyA9IGludm9rZVJlc3BvbnNlKG1zZyk7CkBAIC03OCwyMCArNzksMjAgQEAKICAgICAKICAgICAgICAgICAgIC8vIFNldCBKTVMgaGVhZGVyIGF0dHJpYnV0ZXMgaW4gcHJvZHVjZXIsIG5vdCBtZXNzYWdlLgogICAgICAgICAgICAgU3RyaW5nIG9wTmFtZSA9IG1zZy5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCk7Ci0gICAgICAgICAgICBpZiAoam1zQmluZGluZy5nZXRPcGVyYXRpb25KTVNUaW1lVG9MaXZlKG1zZy5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBwcm9kdWNlci5zZXRUaW1lVG9MaXZlKGptc0JpbmRpbmcuZ2V0T3BlcmF0aW9uSk1TVGltZVRvTGl2ZShtc2cuZ2V0T3BlcmF0aW9uKCkuZ2V0TmFtZSgpKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBJbnRlZ2VyIHByaW9yaXR5ID0gam1zQmluZGluZy5nZXRPcGVyYXRpb25KTVNQcmlvcml0eSggb3BOYW1lICk7CisgICAgICAgICAgICBpZiAoam1zQmluZGluZy5nZXRFZmZlY3RpdmVKTVNUaW1lVG9MaXZlKG9wTmFtZSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHByb2R1Y2VyLnNldFRpbWVUb0xpdmUoam1zQmluZGluZy5nZXRFZmZlY3RpdmVKTVNUaW1lVG9MaXZlKG1zZy5nZXRPcGVyYXRpb24oKS5nZXROYW1lKCkpLmxvbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEludGVnZXIgcHJpb3JpdHkgPSBqbXNCaW5kaW5nLmdldEVmZmVjdGl2ZUpNU1ByaW9yaXR5KG9wTmFtZSk7CiAgICAgICAgICAgICBpZiAocHJpb3JpdHkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgcHJvZHVjZXIuc2V0UHJpb3JpdHkocHJpb3JpdHkuaW50VmFsdWUoKSk7CisgICAgICAgICAgICAJcHJvZHVjZXIuc2V0UHJpb3JpdHkocHJpb3JpdHkuaW50VmFsdWUoKSk7CiAgICAgICAgICAgICB9ICAKLSAgICAgICAgICAgIEJvb2xlYW4gZGVsaXZlcnlNb2RlUGVyc2lzdGVudCA9IGptc0JpbmRpbmcuZ2V0T3BlcmF0aW9uSk1TRGVsaXZlcnlNb2RlKG9wTmFtZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJvb2xlYW4gZGVsaXZlcnlNb2RlUGVyc2lzdGVudCA9IGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TRGVsaXZlcnlNb2RlKG9wTmFtZSk7CiAgICAgICAgICAgICBpZiAoZGVsaXZlcnlNb2RlUGVyc2lzdGVudCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlbGl2ZXJ5TW9kZVBlcnNpc3RlbnQuYm9vbGVhblZhbHVlKCkpCi0gICAgICAgICAgICAgICAgICAgIHByb2R1Y2VyLnNldERlbGl2ZXJ5TW9kZShqYXZheC5qbXMuRGVsaXZlcnlNb2RlLlBFUlNJU1RFTlQpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcHJvZHVjZXIuc2V0RGVsaXZlcnlNb2RlKGphdmF4Lmptcy5EZWxpdmVyeU1vZGUuTk9OX1BFUlNJU1RFTlQpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgCXByb2R1Y2VyLnNldERlbGl2ZXJ5TW9kZSggZGVsaXZlcnlNb2RlUGVyc2lzdGVudCA/IERlbGl2ZXJ5TW9kZS5QRVJTSVNURU5UIDogRGVsaXZlcnlNb2RlLk5PTl9QRVJTSVNURU5UKTsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgCiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIHByb2R1Y2VyLnNlbmQoKGphdmF4Lmptcy5NZXNzYWdlKW1zZy5nZXRCb2R5KCkpOwpAQCAtMTExLDEwICsxMTIsMjAgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgamF2YXguam1zLk1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UgPSAoamF2YXguam1zLk1lc3NhZ2UpbXNnLmdldEJvZHkoKTsKICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFN0cmluZyBtc2dTZWxlY3RvciA9ICJKTVNDb3JyZWxhdGlvbklEID0gJyIgKyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLmdldEpNU01lc3NhZ2VJRCgpICsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJyI7Ci0gICAgICAgICAgICBNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLmNyZWF0ZUNvbnN1bWVyKGNvbnRleHQuZ2V0UmVwbHlUb0Rlc3RpbmF0aW9uKCksIG1zZ1NlbGVjdG9yKTsgIAorICAgICAgICAgICAgU3RyaW5nIG1zZ1NlbGVjdG9yID0gbnVsbDsKKyAgICAgICAgICAgIFN0cmluZyBjb3JyZWxhdGlvblNjaGVtZSA9IGptc0JpbmRpbmcuZ2V0Q29ycmVsYXRpb25TY2hlbWUoKTsKKyAgICAgICAgICAgIGlmIChjb3JyZWxhdGlvblNjaGVtZSA9PSBudWxsIHx8IEpNU0JpbmRpbmdDb25zdGFudHMuQ09SUkVMQVRFX01TR19JRC5lcXVhbHNJZ25vcmVDYXNlKGNvcnJlbGF0aW9uU2NoZW1lKSkgeworICAgICAgICAgICAgICAgIG1zZ1NlbGVjdG9yID0gIkpNU0NvcnJlbGF0aW9uSUQgPSAnIiArIHJlcXVlc3RNZXNzYWdlLmdldEpNU01lc3NhZ2VJRCgpICsgIiciOworICAgICAgICAgICAgfSBlbHNlIGlmIChKTVNCaW5kaW5nQ29uc3RhbnRzLkNPUlJFTEFURV9DT1JSRUxBVElPTl9JRC5lcXVhbHNJZ25vcmVDYXNlKGNvcnJlbGF0aW9uU2NoZW1lKSkgeworICAgICAgICAgICAgICAgIG1zZ1NlbGVjdG9yID0gIkpNU0NvcnJlbGF0aW9uSUQgPSAnIiArIHJlcXVlc3RNZXNzYWdlLmdldEpNU0NvcnJlbGF0aW9uSUQoKSArICInIjsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgIE1lc3NhZ2VDb25zdW1lciBjb25zdW1lcjsKKyAgICAgICAgICAgIGlmIChtc2dTZWxlY3RvciAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgY29uc3VtZXIgPSBzZXNzaW9uLmNyZWF0ZUNvbnN1bWVyKGNvbnRleHQuZ2V0UmVwbHlUb0Rlc3RpbmF0aW9uKCksIG1zZ1NlbGVjdG9yKTsgIAorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lciA9IHNlc3Npb24uY3JlYXRlQ29uc3VtZXIoY29udGV4dC5nZXRSZXBseVRvRGVzdGluYXRpb24oKSk7ICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgamF2YXguam1zLk1lc3NhZ2UgcmVwbHlNc2c7CiAgICAgICAgICAgICB0cnkgewpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy90cmFuc3BvcnQvVHJhbnNwb3J0U2VydmljZUludGVyY2VwdG9yLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3RyYW5zcG9ydC9UcmFuc3BvcnRTZXJ2aWNlSW50ZXJjZXB0b3IuamF2YQppbmRleCAxYTE3NWNlLi5kMzcxYmJiIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3RyYW5zcG9ydC9UcmFuc3BvcnRTZXJ2aWNlSW50ZXJjZXB0b3IuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3RyYW5zcG9ydC9UcmFuc3BvcnRTZXJ2aWNlSW50ZXJjZXB0b3IuamF2YQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwogaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIAoraW1wb3J0IGphdmF4Lmptcy5EZWxpdmVyeU1vZGU7CiBpbXBvcnQgamF2YXguam1zLkRlc3RpbmF0aW9uOwogaW1wb3J0IGphdmF4Lmptcy5KTVNFeGNlcHRpb247CiBpbXBvcnQgamF2YXguam1zLk1lc3NhZ2VQcm9kdWNlcjsKQEAgLTUzLDExICs1NCw5IEBACiBwdWJsaWMgY2xhc3MgVHJhbnNwb3J0U2VydmljZUludGVyY2VwdG9yIGltcGxlbWVudHMgSW50ZXJjZXB0b3IgewogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFRyYW5zcG9ydFNlcnZpY2VJbnRlcmNlcHRvci5jbGFzcy5nZXROYW1lKCkpOwogICAgICAgCi0gICAgcHJpdmF0ZSBJbnZva2VyIG5leHQ7Ci0gICAgcHJpdmF0ZSBSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQ7CisgICAgcHJpdmF0ZSBJbnZva2VyIG5leHQ7ICAgIAogICAgIHByaXZhdGUgSk1TUmVzb3VyY2VGYWN0b3J5IGptc1Jlc291cmNlRmFjdG9yeTsKLSAgICBwcml2YXRlIEpNU0JpbmRpbmcgam1zQmluZGluZzsKLSAgICBwcml2YXRlIEpNU01lc3NhZ2VQcm9jZXNzb3IgcmVxdWVzdE1lc3NhZ2VQcm9jZXNzb3I7CisgICAgcHJpdmF0ZSBKTVNCaW5kaW5nIGptc0JpbmRpbmc7ICAgCiAgICAgcHJpdmF0ZSBKTVNNZXNzYWdlUHJvY2Vzc29yIHJlc3BvbnNlTWVzc2FnZVByb2Nlc3NvcjsKICAgICBwcml2YXRlIFJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2U7CiAgICAgcHJpdmF0ZSBTdHJpbmcgY29ycmVsYXRpb25TY2hlbWU7CkBAIC02NiwxMCArNjUsOCBAQAogCiAgICAgcHVibGljIFRyYW5zcG9ydFNlcnZpY2VJbnRlcmNlcHRvcihFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5LCBKTVNCaW5kaW5nIGptc0JpbmRpbmcsIEpNU1Jlc291cmNlRmFjdG9yeSBqbXNSZXNvdXJjZUZhY3RvcnksIFJ1bnRpbWVFbmRwb2ludCBlbmRwb2ludCkgewogICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLmptc0JpbmRpbmcgPSBqbXNCaW5kaW5nOwotICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7Ci0gICAgICAgIHRoaXMuam1zUmVzb3VyY2VGYWN0b3J5ID0gam1zUmVzb3VyY2VGYWN0b3J5OwotICAgICAgICB0aGlzLnJlcXVlc3RNZXNzYWdlUHJvY2Vzc29yID0gSk1TTWVzc2FnZVByb2Nlc3NvclV0aWwuZ2V0UmVxdWVzdE1lc3NhZ2VQcm9jZXNzb3IocmVnaXN0cnksIGptc0JpbmRpbmcpOworICAgICAgICB0aGlzLmptc0JpbmRpbmcgPSBqbXNCaW5kaW5nOyAgICAgIAorICAgICAgICB0aGlzLmptc1Jlc291cmNlRmFjdG9yeSA9IGptc1Jlc291cmNlRmFjdG9yeTsgICAgIAogICAgICAgICB0aGlzLnJlc3BvbnNlTWVzc2FnZVByb2Nlc3NvciA9IEpNU01lc3NhZ2VQcm9jZXNzb3JVdGlsLmdldFJlc3BvbnNlTWVzc2FnZVByb2Nlc3NvcihyZWdpc3RyeSwgam1zQmluZGluZyk7CiAgICAgICAgIHRoaXMuc2VydmljZSA9IChSdW50aW1lQ29tcG9uZW50U2VydmljZSllbmRwb2ludC5nZXRTZXJ2aWNlKCk7CiAgICAgICAgIHRoaXMuY29ycmVsYXRpb25TY2hlbWUgPSBqbXNCaW5kaW5nLmdldENvcnJlbGF0aW9uU2NoZW1lKCk7CkBAIC05OSw5ICs5Niw3IEBACiAgICAgfSAgICAKICAgICAKICAgICBwdWJsaWMgTWVzc2FnZSBpbnZva2VSZXF1ZXN0KE1lc3NhZ2UgbXNnKSB7IAotLy8gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBKTVNCaW5kaW5nQ29udGV4dCBjb250ZXh0ID0gbXNnLmdldEJpbmRpbmdDb250ZXh0KCk7Ci0gICAgICAgICAgICBqYXZheC5qbXMuTWVzc2FnZSByZXF1ZXN0Sk1TTXNnID0gY29udGV4dC5nZXRKbXNNc2coKTsKKy8vICAgICAgICB0cnkgeyAgICAgICAgICAgICAgICAgIAogCiAgICAgICAgICAgICBFbmRwb2ludFJlZmVyZW5jZSBmcm9tID0gYXNzZW1ibHlGYWN0b3J5LmNyZWF0ZUVuZHBvaW50UmVmZXJlbmNlKCk7CiAgICAgICAgICAgICBFbmRwb2ludCBmcm9tRW5kcG9pbnQgPSBhc3NlbWJseUZhY3RvcnkuY3JlYXRlRW5kcG9pbnQoKTsKQEAgLTEyMCw2ICsxMTUsNyBAQAogICAgIH0KICAgICAKICAgICBwdWJsaWMgTWVzc2FnZSBpbnZva2VSZXNwb25zZShNZXNzYWdlIG1zZykgeyAKKyAgICAgICAgSk1TQmluZGluZ0NvbnRleHQgY29udGV4dCA9IG1zZy5nZXRCaW5kaW5nQ29udGV4dCgpOwogICAgICAgICB0cnkgewogCiAgICAgICAgICAgICAvL2lmIG9wZXJhdGlvbiBpcyBvbmV3YXksIHJldHVybiBiYWNrLgpAQCAtMTI4LDcgKzEyNCw2IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIG1zZzsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgSk1TQmluZGluZ0NvbnRleHQgY29udGV4dCA9IG1zZy5nZXRCaW5kaW5nQ29udGV4dCgpOwogICAgICAgICAgICAgU2Vzc2lvbiBzZXNzaW9uID0gY29udGV4dC5nZXRKbXNSZXNwb25zZVNlc3Npb24oKTsKICAgICAgICAgICAgIGphdmF4Lmptcy5NZXNzYWdlIHJlcXVlc3RKTVNNc2cgPSBjb250ZXh0LmdldEptc01zZygpOwogICAgICAgICAgICAgamF2YXguam1zLk1lc3NhZ2UgcmVzcG9uc2VKTVNNc2cgPSBtc2cuZ2V0Qm9keSgpOwpAQCAtMTUxLDkgKzE0NiwyNSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gbXNnOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICByZXNwb25zZUpNU01zZy5zZXRKTVNEZWxpdmVyeU1vZGUocmVxdWVzdEpNU01zZy5nZXRKTVNEZWxpdmVyeU1vZGUoKSk7Ci0gICAgICAgICAgICByZXNwb25zZUpNU01zZy5zZXRKTVNQcmlvcml0eShyZXF1ZXN0Sk1TTXNnLmdldEpNU1ByaW9yaXR5KCkpOworCisgICAgICAgICAgICBpZiAoKG1zZy5nZXRPcGVyYXRpb24oKSAhPSBudWxsKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBvcGVyYXRpb25OYW1lID0gbXNnLmdldE9wZXJhdGlvbigpLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoam1zQmluZGluZy5nZXRFZmZlY3RpdmVKTVNQcmlvcml0eShvcGVyYXRpb25OYW1lKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlSk1TTXNnLnNldEpNU1ByaW9yaXR5KGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TUHJpb3JpdHkob3BlcmF0aW9uTmFtZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKCBqbXNCaW5kaW5nLmdldEVmZmVjdGl2ZUpNU1R5cGUob3BlcmF0aW9uTmFtZSkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICByZXNwb25zZUpNU01zZy5zZXRKTVNUeXBlKGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TVHlwZShvcGVyYXRpb25OYW1lKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgoam1zQmluZGluZy5nZXRFZmZlY3RpdmVKTVNEZWxpdmVyeU1vZGUob3BlcmF0aW9uTmFtZSkgIT0gbnVsbCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VKTVNNc2cuc2V0Sk1TRGVsaXZlcnlNb2RlKGptc0JpbmRpbmcuZ2V0RWZmZWN0aXZlSk1TRGVsaXZlcnlNb2RlKG9wZXJhdGlvbk5hbWUpID8gRGVsaXZlcnlNb2RlLlBFUlNJU1RFTlQgOiBEZWxpdmVyeU1vZGUuTk9OX1BFUlNJU1RFTlQpOyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICgoam1zQmluZGluZy5nZXRFZmZlY3RpdmVKTVNUaW1lVG9MaXZlKG9wZXJhdGlvbk5hbWUpICE9IG51bGwpKSB7CisgICAgICAgICAgICAgICAgCXJlc3BvbnNlSk1TTXNnLnNldEpNU0V4cGlyYXRpb24oam1zQmluZGluZy5nZXRFZmZlY3RpdmVKTVNUaW1lVG9MaXZlKG9wZXJhdGlvbk5hbWUpLmxvbmdWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBpZiAoY29ycmVsYXRpb25TY2hlbWUgPT0gbnVsbCB8fCAKICAgICAgICAgICAgICAgICBKTVNCaW5kaW5nQ29uc3RhbnRzLkNPUlJFTEFURV9NU0dfSUQuZXF1YWxzSWdub3JlQ2FzZShjb3JyZWxhdGlvblNjaGVtZSkpIHsKQEAgLTE2OSwxNiArMTgwLDE5IEBACiAgICAgICAgICAgICBwcm9kdWNlci5zZXREZWxpdmVyeU1vZGUoZGVsaXZlcnlNb2RlKTsKICAgICAgICAgICAgIGludCBkZWxpdmVyeVByaW9yaXR5ID0gcmVxdWVzdEpNU01zZy5nZXRKTVNQcmlvcml0eSgpOwogICAgICAgICAgICAgcHJvZHVjZXIuc2V0UHJpb3JpdHkoZGVsaXZlcnlQcmlvcml0eSk7CisgICAgICAgICAgICBsb25nIHRpbWVUb0xpdmUgPSByZXF1ZXN0Sk1TTXNnLmdldEpNU0V4cGlyYXRpb24oKTsKKyAgICAgICAgICAgIHByb2R1Y2VyLnNldFRpbWVUb0xpdmUodGltZVRvTGl2ZSk7CiAgICAgCiAgICAgICAgICAgICBwcm9kdWNlci5zZW5kKChqYXZheC5qbXMuTWVzc2FnZSltc2cuZ2V0Qm9keSgpKTsKICAgICAKICAgICAgICAgICAgIHByb2R1Y2VyLmNsb3NlKCk7Ci0gICAgICAgICAgICBjb250ZXh0LmNsb3NlSm1zUmVzcG9uc2VTZXNzaW9uKCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBtc2c7CiAgICAgCiAgICAgICAgIH0gY2F0Y2ggKEpNU0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSk1TQmluZGluZ0V4Y2VwdGlvbihlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGNvbnRleHQuY2xvc2VKbXNSZXNwb25zZVNlc3Npb24oKTsKICAgICAgICAgfQogICAgIH0gICAgCiAgICAgCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3dpcmUvQ2FsbGJhY2tEZXN0aW5hdGlvbkludGVyY2VwdG9yLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3dpcmUvQ2FsbGJhY2tEZXN0aW5hdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggMjI0NWY2MS4uMDY3OGYxZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy93aXJlL0NhbGxiYWNrRGVzdGluYXRpb25JbnRlcmNlcHRvci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvd2lyZS9DYWxsYmFja0Rlc3RpbmF0aW9uSW50ZXJjZXB0b3IuamF2YQpAQCAtMTgsMTEgKzE4LDE1IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy53aXJlOwogCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKIGltcG9ydCBqYXZheC5qbXMuRGVzdGluYXRpb247CiBpbXBvcnQgamF2YXguam1zLkpNU0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZheC5qbXMuUXVldWU7CiBpbXBvcnQgamF2YXguam1zLlRvcGljOwogCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5FbmRwb2ludFJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmc7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmNvbnRleHQuSk1TQmluZGluZ0NvbnRleHQ7CkBAIC0zNSwxMCArMzksMTIgQEAKIHB1YmxpYyBjbGFzcyBDYWxsYmFja0Rlc3RpbmF0aW9uSW50ZXJjZXB0b3IgaW1wbGVtZW50cyBJbnRlcmNlcHRvciB7CiAgICAgcHJpdmF0ZSBJbnZva2VyIG5leHQ7CiAgICAgcHJpdmF0ZSBSdW50aW1lQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlOworCXByaXZhdGUgUnVudGltZUVuZHBvaW50IGVuZHBvaW50OwogICAgICAgICAgIAogICAgIHB1YmxpYyBDYWxsYmFja0Rlc3RpbmF0aW9uSW50ZXJjZXB0b3IoUnVudGltZUVuZHBvaW50IGVuZHBvaW50KSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuc2VydmljZSA9IChSdW50aW1lQ29tcG9uZW50U2VydmljZSkgZW5kcG9pbnQuZ2V0U2VydmljZSgpOworICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7CiAgICAgfQogCiAgICAgcHVibGljIEludm9rZXIgZ2V0TmV4dCgpIHsKQEAgLTU3LDI3ICs2MywzNiBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gZ2V0IHRoZSBqbXMgY29udGV4dAogICAgICAgICAgICAgSk1TQmluZGluZ0NvbnRleHQgY29udGV4dCA9IG1zZy5nZXRCaW5kaW5nQ29udGV4dCgpOwotICAgICAgICAgICAgamF2YXguam1zLk1lc3NhZ2Ugam1zTXNnID0gY29udGV4dC5nZXRKbXNNc2coKTsKLSAgICAgICAgCi0gICAgICAgICAgICAvL1JlZmVyZW5jZVBhcmFtZXRlcnMgcGFyYW1ldGVycyA9IG1zZy5nZXRGcm9tKCkuZ2V0UmVmZXJlbmNlUGFyYW1ldGVycygpOyBUT0RPOiAyLnggbWlncmF0aW9uLCBhcmUgdGhlc2UgbmVlZGVkPwotCisgICAgICAgICAgICBqYXZheC5qbXMuTWVzc2FnZSBqbXNNc2cgPSBjb250ZXh0LmdldEptc01zZygpOyAgICAgICAgICAgICAKKyAgICAgICAgIAorICAgICAgICAgICAKICAgICAgICAgICAgIGlmIChzZXJ2aWNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuZ2V0Q2FsbGJhY2tJbnRlcmZhY2UoKSAhPSBudWxsKSB7CiAKICAgICAgICAgICAgICAgICBTdHJpbmcgY2FsbGJhY2tkZXN0TmFtZSA9IGptc01zZy5nZXRTdHJpbmdQcm9wZXJ0eShKTVNCaW5kaW5nQ29uc3RhbnRzLkNBTExCQUNLX1FfUFJPUEVSVFkpOwotICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja2Rlc3ROYW1lID09IG51bGwgJiYgbXNnLmdldE9wZXJhdGlvbigpLmlzTm9uQmxvY2tpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgcmVxdWVzdCBoYXMgYSByZXBseVRvIGJ1dCB0aGlzIHNlcnZpY2Ugb3BlcmF0aW9uIGlzIG9uZXdheSBidXQgdGhlIHNlcnZpY2UgdXNlcyBjYWxsYmFja3MKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlbiB1c2UgdGhlIHJlcGx5VG8gYXMgdGhlIGNhbGxiYWNrIGRlc3RpbmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIHJlcGx5VG8gPSBqbXNNc2cuZ2V0Sk1TUmVwbHlUbygpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmVwbHlUbyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja2Rlc3ROYW1lID0gKHJlcGx5VG8gaW5zdGFuY2VvZiBRdWV1ZSkgPyAoKFF1ZXVlKSByZXBseVRvKS5nZXRRdWV1ZU5hbWUoKSA6ICgoVG9waWMpIHJlcGx5VG8pLmdldFRvcGljTmFtZSgpOworICAgICAgICAgICAgICAgIGlmICgoIGNhbGxiYWNrZGVzdE5hbWUgPT0gbnVsbCkgJiYgKCBqbXNNc2cuZ2V0Sk1TUmVwbHlUbygpICE9IG51bGwgKSAmJiBtc2cuZ2V0T3BlcmF0aW9uKCkuaXNOb25CbG9ja2luZygpICkgeworICAgICAgICAgICAgICAgIAlEZXN0aW5hdGlvbiByZXBseVRvID0gam1zTXNnLmdldEpNU1JlcGx5VG8oKTsKKyAgICAgICAgICAgICAgICAJaWYgKHJlcGx5VG8gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIAkJY2FsbGJhY2tkZXN0TmFtZSA9IChyZXBseVRvIGluc3RhbmNlb2YgUXVldWUpID8gKChRdWV1ZSkgcmVwbHlUbykuZ2V0UXVldWVOYW1lKCkgOiAoKFRvcGljKSByZXBseVRvKS5nZXRUb3BpY05hbWUoKTsKKyAgICAgICAgICAgICAgIAkgICAJfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja2Rlc3ROYW1lICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGJhY2tkZXN0TmFtZS5zdGFydHNXaXRoKCJqbXM6am5kaToiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBKTVNCaW5kaW5nRXhjZXB0aW9uKCJtZXNzYWdlIHByb3BlcnR5ICIgKyBKTVNCaW5kaW5nQ29uc3RhbnRzLkNBTExCQUNLX1FfUFJPUEVSVFkgKyAiIGRvZXMgbm90IHN0YXJ0IHdpdGggJ2ptczpqbmRpOicgZm91bmQ6ICIgKyBjYWxsYmFja2Rlc3ROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tkZXN0TmFtZSA9IGNhbGxiYWNrZGVzdE5hbWUuc3Vic3RyaW5nKDkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotCisgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrZGVzdE5hbWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBhcHBlbmQgImptczoiIHRvIG1ha2UgaXQgYW4gYWJzb2x1dGUgdXJpIHNvIHRoZSBpbnZva2VyIGNhbiBkZXRlcm1pbmUgaXQgY2FtZSBpbiBvbiB0aGUgcmVxdWVzdAotICAgICAgICAgICAgICAgICAgICAvLyBhcyBvdGhlcndpc2UgdGhlIGludm9rZXIgc2hvdWxkIHVzZSB0aGUgdXJpIGZyb20gdGhlIHNlcnZpY2UgY2FsbGJhY2sgYmluZGluZwotLy8gICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMuc2V0Q2FsbGJhY2tSZWZlcmVuY2UobmV3IEVuZHBvaW50UmVmZXJlbmNlSW1wbCgiam1zOiIgKyBjYWxsYmFja2Rlc3ROYW1lKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAlMaXN0PEVuZHBvaW50UmVmZXJlbmNlPiByZWZzID0gZW5kcG9pbnQuZ2V0Q2FsbGJhY2tFbmRwb2ludFJlZmVyZW5jZXMoKTsKKyAgICAgICAgICAgICAgICAJZm9yIChFbmRwb2ludFJlZmVyZW5jZSByZWYgOiByZWZzICkgeworICAgICAgICAgICAgICAgIAkJaWYgIChyZWYuZ2V0QmluZGluZygpIGluc3RhbmNlb2YgSk1TQmluZGluZyApIHsKKyAgICAgICAgICAgICAgICAJCQlKTVNCaW5kaW5nIGNhbGxiYWNrQmluZGluZyA9IChKTVNCaW5kaW5nKSByZWYuZ2V0QmluZGluZygpOworICAgICAgICAgICAgICAgIAkJCWNhbGxiYWNrQmluZGluZy5zZXREZXN0aW5hdGlvbk5hbWUoY2FsbGJhY2tkZXN0TmFtZSk7CisgICAgICAgICAgICAgICAgCQl9CisgICAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgIH0gIAogCiAgICAgICAgICAgICAgICAgU3RyaW5nIGNhbGxiYWNrSUQgPSBqbXNNc2cuZ2V0U3RyaW5nUHJvcGVydHkoSk1TQmluZGluZ0NvbnN0YW50cy5DQUxMQkFDS19JRF9QUk9QRVJUWSk7CiAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrSUQgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy93aXJlZm9ybWF0L2ptc2RlZmF1bHQvcnVudGltZS9XaXJlRm9ybWF0Sk1TRGVmYXVsdFNlcnZpY2VJbnRlcmNlcHRvci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWptcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy93aXJlZm9ybWF0L2ptc2RlZmF1bHQvcnVudGltZS9XaXJlRm9ybWF0Sk1TRGVmYXVsdFNlcnZpY2VJbnRlcmNlcHRvci5qYXZhCmluZGV4IDczMWRlNzguLmRhNmYyODMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qbXMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvd2lyZWZvcm1hdC9qbXNkZWZhdWx0L3J1bnRpbWUvV2lyZUZvcm1hdEpNU0RlZmF1bHRTZXJ2aWNlSW50ZXJjZXB0b3IuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3dpcmVmb3JtYXQvam1zZGVmYXVsdC9ydW50aW1lL1dpcmVGb3JtYXRKTVNEZWZhdWx0U2VydmljZUludGVyY2VwdG9yLmphdmEKQEAgLTIyLDkgKzIyLDEyIEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIGltcG9ydCBqYXZheC5qbXMuQnl0ZXNNZXNzYWdlOworaW1wb3J0IGphdmF4Lmptcy5KTVNFeGNlcHRpb247CiBpbXBvcnQgamF2YXguam1zLlNlc3Npb247CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nQ29uc3RhbnRzOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmNvbnRleHQuSk1TQmluZGluZ0NvbnRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5wcm92aWRlci5EZWZhdWx0TWVzc2FnZVByb2Nlc3NvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLnByb3ZpZGVyLkpNU1Jlc291cmNlRmFjdG9yeTsKQEAgLTE2MCw2ICsxNjMsMTUgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCisgICAgICAgCisgICAgICAgIHRyeSB7CisgICAgICAgIAlyZXNwb25zZUpNU01zZy5zZXRTdHJpbmdQcm9wZXJ0eShKTVNCaW5kaW5nQ29uc3RhbnRzLkRFRkFVTFRfT1BFUkFUSU9OX1BST1BfTkFNRSwgbXNnLmdldE9wZXJhdGlvbigpLmdldE5hbWUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEpNU0V4Y2VwdGlvbiBlKSB7CisgICAgICAgIAkvLyBOb3Qgc3VyZSB3aGF0IHRvIGRvIGF0IHRoaXMgcG9pbnQuLiBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gY3JlYXRlIGEgZmF1bHQgbWVzc2FnZS4KKyAgICAgICAgCS8vIFRocm93aW5nIGEgcnVudGltZSBleGNlcHRpb24gZm9yIG5vdy4gIAorICAgICAgICAJdGhyb3cgbmV3IEpNU0JpbmRpbmdFeGNlcHRpb24oZSk7ICAgICAgICAJCisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIG1zZy5zZXRCb2R5KHJlc3BvbnNlSk1TTXNnKTsKIAogICAgICAgICByZXR1cm4gbXNnOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQmluZGluZy5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQmluZGluZy5qYXZhCmluZGV4IDc0ODBkOGYuLjQ1MzlhZDIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0pNU0JpbmRpbmcuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNCaW5kaW5nLmphdmEKQEAgLTg4LDE0ICs4OCwxNCBAQAogICAgIHByaXZhdGUgTWFwPFN0cmluZywgQmluZGluZ1Byb3BlcnR5PiBjb25uZWN0aW9uRmFjdG9yeVByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJpbmRpbmdQcm9wZXJ0eT4oKTsKIAogICAgIHByaXZhdGUgU3RyaW5nIGFjdGl2YXRpb25TcGVjTmFtZSA9IG51bGw7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgYWN0aXZhdGlvblNwZWNDcmVhdGUgPSBudWxsOworICAgIHByaXZhdGUgU3RyaW5nIGFjdGl2YXRpb25TcGVjQ3JlYXRlID0gSk1TQmluZGluZ0NvbnN0YW50cy5DUkVBVEVfSUZfTk9UX0VYSVNUOwogICAgIHByaXZhdGUgTWFwPFN0cmluZywgQmluZGluZ1Byb3BlcnR5PiBhY3RpdmF0aW9uU3BlY1Byb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEJpbmRpbmdQcm9wZXJ0eT4oKTsKIAogICAgIHByaXZhdGUgU3RyaW5nIHJlc291cmNlQWRhcHRlck5hbWU7OwogICAgIHByaXZhdGUgTWFwPFN0cmluZywgQmluZGluZ1Byb3BlcnR5PiByZXNvdXJjZUFkYXB0ZXJQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCaW5kaW5nUHJvcGVydHk+KCk7CiAgICAgCiAgICAgcHJpdmF0ZSBTdHJpbmcgcmVzcG9uc2VBY3RpdmF0aW9uU3BlY05hbWUgPSBudWxsOwotICAgIHByaXZhdGUgU3RyaW5nIHJlc3BvbnNlQWN0aXZhdGlvblNwZWNDcmVhdGUgPSBudWxsOworICAgIHByaXZhdGUgU3RyaW5nIHJlc3BvbnNlQWN0aXZhdGlvblNwZWNDcmVhdGUgPSBKTVNCaW5kaW5nQ29uc3RhbnRzLkNSRUFURV9JRl9OT1RfRVhJU1Q7CiAgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBCaW5kaW5nUHJvcGVydHk+IHJlc3BvbnNlQWN0aXZhdGlvblNwZWNQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBCaW5kaW5nUHJvcGVydHk+KCk7CiAKICAgICBwcml2YXRlIFN0cmluZyByZXNwb25zZURlc3RpbmF0aW9uTmFtZSA9IG51bGw7CkBAIC0xMjIsMTEgKzEyMiw3IEBACiAKICAgICBwcml2YXRlIGJvb2xlYW4gY29udGFpbnNIZWFkZXJzID0gZmFsc2U7CiAgICAgcHJpdmF0ZSBTdHJpbmcgcmVwbHlUbzsKLSAgICBwcml2YXRlIFN0cmluZyBqbXNUeXBlOwogICAgIHByaXZhdGUgU3RyaW5nIGptc0NvcnJlbGF0aW9uSWQ7Ci0gICAgcHJpdmF0ZSBCb29sZWFuIGRlbGl2ZXJ5TW9kZVBlcnNpc3RlbnQ7Ci0gICAgcHJpdmF0ZSBMb25nIHRpbWVUb0xpdmU7Ci0gICAgcHJpdmF0ZSBJbnRlZ2VyIGptc1ByaW9yaXR5OwogCiAgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBPYmplY3Q+IHByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE9iamVjdD4oKTsKICAgICBwcml2YXRlIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIE9iamVjdD4+IG9wZXJhdGlvblByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsT2JqZWN0Pj4oKTsKQEAgLTEzOCw3ICsxMzQsOCBAQAogICAgIHByaXZhdGUgTWFwPFN0cmluZywgSW50ZWdlcj4gb3BlcmF0aW9uSk1TUHJpb3JpdGllcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgSW50ZWdlcj4oKTsKICAgICBwcml2YXRlIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIEJpbmRpbmdQcm9wZXJ0eT4+IG9wZXJhdGlvblByb3BlcnRpZXNQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLEJpbmRpbmdQcm9wZXJ0eT4+KCk7CiAKLSAgICBwcml2YXRlIFN0cmluZyBqbXNTZWxlY3RvcjsKKyAgICBwcml2YXRlIFN0cmluZyBqbXNTZWxlY3RvciA9IG51bGw7CisgICAgcHJpdmF0ZSBTdHJpbmcgdXJpSm1zU2VsZWN0b3IgPSBudWxsOwogICAgIHByaXZhdGUgUU5hbWUgcmVxdWVzdENvbm5lY3Rpb25OYW1lOwogICAgIHByaXZhdGUgUU5hbWUgcmVzcG9uc2VDb25uZWN0aW9uTmFtZTsKICAgICBwcml2YXRlIFFOYW1lIG9wZXJhdGlvblByb3BlcnRpZXNOYW1lOwpAQCAtMTUwLDYgKzE0NywyMiBAQAogICAgIHByaXZhdGUgV2lyZUZvcm1hdCByZXNwb25zZVdpcmVGb3JtYXQ7CiAgICAgcHJpdmF0ZSBPcGVyYXRpb25TZWxlY3RvciBvcGVyYXRpb25TZWxlY3RvcjsKICAgICBwcml2YXRlIEV4dGVuc2lvblR5cGUgZXh0ZW5zaW9uVHlwZTsKKyAgICBwcml2YXRlIFN0cmluZyBqbXNVUkk7CisJCisJcHJpdmF0ZSBTdHJpbmcgdXJpVHlwZTsKKwlwcml2YXRlIEJvb2xlYW4gdXJpRGVsaXZlcnlNb2RlOworCXByaXZhdGUgSW50ZWdlciB1cmlKTVNQcmlvcml0eTsKKwlwcml2YXRlIExvbmcgdXJpSk1TVGltZVRvTGl2ZTsKKworCXByaXZhdGUgU3RyaW5nIGhlYWRlclR5cGU7CisJcHJpdmF0ZSBCb29sZWFuIGhlYWRlckRlbGl2ZXJ5TW9kZTsKKwlwcml2YXRlIEludGVnZXIgaGVhZGVyUHJpb3JpdHk7CisJcHJpdmF0ZSBMb25nIGhlYWRlclRpbWVUb0xpdmU7CisKKwlwcml2YXRlIGZpbmFsIEludGVnZXIgZGVmYXVsdFByaW9yaXR5ID0gSW50ZWdlci52YWx1ZU9mKDQpOworCXByaXZhdGUgZmluYWwgQm9vbGVhbiBkZWZhdWx0RGVsaXZlcnlNb2RlID0gdHJ1ZTsKKwlwcml2YXRlIGZpbmFsIExvbmcgZGVmYXVsdEpNU1RpbWVUb0xpdmUgPUxvbmcudmFsdWVPZigwKTsKKwlwcml2YXRlIGJvb2xlYW4gaXNEZXN0aW5hdGlvblNwZWNpZmllZCA9IGZhbHNlOwkKICAgICAKICAgICBwdWJsaWMgSk1TQmluZGluZygpIHsKICAgICAgICAgc3VwZXIoKTsKQEAgLTQ2NywxNCArNDgwLDc0IEBACiAgICAgICAgIHRoaXMucmVwbHlUbyA9IHJlcGx5VG87CiAgICAgfQogCi0gICAgcHVibGljIFN0cmluZyBnZXRKTVNUeXBlKCkgewotICAgICAgICByZXR1cm4gam1zVHlwZTsKKyAgICAvLyBnZXRFZmZlY3RpdmUuLi4oKSB3aWxsIHJldHVybiB2YWx1ZXMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBwcmlvcml0eQorICAgIC8vIDEuIFRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIFVSSSBhdHRyaWJ1dGUKKyAgICAvLyAyLiBUaGUgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBvcGVyYXRpb25Qcm9wZXJ0aWVzL2hlYWRlcnMKKyAgICAvLyAzLiBUaGUgdmFsdWUgc3BlY2lmaWVkIGluIHRoZSBoZWFkZXJzIGVsZW1lbnQKKyAgICAvLyA0LiBUaGUgZGVmYXVsdCB2YWx1ZSBmcm9tIHRoZSBoZWFkZXJzIGVsZW1lbnQKKyAgICBwdWJsaWMgU3RyaW5nIGdldEVmZmVjdGl2ZUpNU1R5cGUoU3RyaW5nIG9wTmFtZSkgeworICAgIAlpZiAoIGdldEpNU1VSSVR5cGUoKSAhPSBudWxsICkgcmV0dXJuIGdldEpNU1VSSVR5cGUoKTsKKyAgICAJZWxzZSBpZiAoIGdldE9wZXJhdGlvbkpNU1R5cGUob3BOYW1lKSAhPSBudWxsICkgcmV0dXJuIGdldE9wZXJhdGlvbkpNU1R5cGUob3BOYW1lKTsKKyAgICAJZWxzZSBpZiAoIGdldEpNU0hlYWRlclR5cGUoKSAhPSBudWxsICkgcmV0dXJuIGdldEpNU0hlYWRlclR5cGUoKTsKKyAgICAJZWxzZSByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgcHVibGljIHZvaWQgc2V0Sk1TVHlwZShTdHJpbmcgam1zVHlwZSkgewotICAgICAgICBzZXRIZWFkZXJzKCB0cnVlICk7Ci0gICAgICAgIHRoaXMuam1zVHlwZSA9IGptc1R5cGU7CisgICAgCisgICAgcHVibGljIEJvb2xlYW4gZ2V0RWZmZWN0aXZlSk1TRGVsaXZlcnlNb2RlKFN0cmluZyBvcE5hbWUpIHsKKyAgICAJaWYgKCBnZXRVUklKTVNEZWxpdmVyeU1vZGUoKSAhPSBudWxsICkgcmV0dXJuIGdldFVSSUpNU0RlbGl2ZXJ5TW9kZSgpOworICAgIAllbHNlIGlmICggZ2V0T3BlcmF0aW9uSk1TRGVsaXZlcnlNb2RlKG9wTmFtZSkgIT0gbnVsbCkgcmV0dXJuIGdldE9wZXJhdGlvbkpNU0RlbGl2ZXJ5TW9kZShvcE5hbWUpOworICAgIAllbHNlIGlmICggZ2V0SGVhZGVySk1TRGVsaXZlcnlNb2RlKCkgIT0gbnVsbCkgcmV0dXJuIGdldEhlYWRlckpNU0RlbGl2ZXJ5TW9kZSgpOworICAgIAllbHNlIHJldHVybiBnZXREZWZhdWx0RGVsaXZlcnlNb2RlKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBMb25nIGdldEVmZmVjdGl2ZUpNU1RpbWVUb0xpdmUoU3RyaW5nIG9wTmFtZSkgeworICAgIAlpZiAoIGdldFVSSUpNU1RpbWVUb0xpdmUoKSAhPSBudWxsICkgcmV0dXJuIGdldFVSSUpNU1RpbWVUb0xpdmUoKTsKKyAgICAJZWxzZSBpZiAoIGdldE9wZXJhdGlvbkpNU1RpbWVUb0xpdmUob3BOYW1lKSAhPSBudWxsKSByZXR1cm4gZ2V0T3BlcmF0aW9uSk1TVGltZVRvTGl2ZShvcE5hbWUpOworICAgIAllbHNlIGlmICggZ2V0SGVhZGVySk1TVGltZVRvTGl2ZSgpICE9IG51bGwpIHJldHVybiBnZXRIZWFkZXJKTVNUaW1lVG9MaXZlKCk7CisgICAgCWVsc2UgcmV0dXJuIGdldERlZmF1bHRKTVNUaW1lVG9MaXZlKCk7CiAgICAgfQogCisgICAgcHVibGljIEludGVnZXIgZ2V0RWZmZWN0aXZlSk1TUHJpb3JpdHkoU3RyaW5nIG9wZXJhdGlvbk5hbWUpIHsKKyAgICAJaWYgKCBnZXRVUklKTVNQcmlvcml0eSgpICE9IG51bGwgKSByZXR1cm4gZ2V0VVJJSk1TUHJpb3JpdHkoKTsKKyAgICAJZWxzZSBpZiAoIGdldE9wZXJhdGlvbkpNU1ByaW9yaXR5KG9wZXJhdGlvbk5hbWUpIT0gbnVsbCkgcmV0dXJuIGdldE9wZXJhdGlvbkpNU1ByaW9yaXR5KG9wZXJhdGlvbk5hbWUpOworICAgIAllbHNlIGlmICggZ2V0Sk1TSGVhZGVyUHJpb3JpdHkoKSAhPSBudWxsICkgcmV0dXJuIGdldEpNU0hlYWRlclByaW9yaXR5KCk7CisgICAgCWVsc2UgcmV0dXJuIGdldERlZmF1bHRKTVNQcmlvcml0eSgpOworICAgIH0KKworCisgICAgcHJpdmF0ZSBMb25nIGdldEhlYWRlckpNU1RpbWVUb0xpdmUoKSB7CisJCXJldHVybiB0aGlzLmhlYWRlclRpbWVUb0xpdmU7CisJfQorCisJcHJpdmF0ZSBMb25nIGdldERlZmF1bHRKTVNUaW1lVG9MaXZlKCkgeworCQlyZXR1cm4gdGhpcy5kZWZhdWx0Sk1TVGltZVRvTGl2ZTsKKwl9CisKKwlwcml2YXRlIEJvb2xlYW4gZ2V0RGVmYXVsdERlbGl2ZXJ5TW9kZSgpIHsKKwkJcmV0dXJuIHRoaXMuZGVmYXVsdERlbGl2ZXJ5TW9kZTsKKwl9CisKKwlwcml2YXRlIEJvb2xlYW4gZ2V0SGVhZGVySk1TRGVsaXZlcnlNb2RlKCkgeworCQlyZXR1cm4gaGVhZGVyRGVsaXZlcnlNb2RlOworCX0KKworCXByaXZhdGUgQm9vbGVhbiBnZXRVUklKTVNEZWxpdmVyeU1vZGUoKSB7CisJCXJldHVybiB0aGlzLnVyaURlbGl2ZXJ5TW9kZTsKKwl9CisgICAgCisgICAgcHVibGljIFN0cmluZyBnZXRKTVNVUklUeXBlKCkgeworICAgIAlyZXR1cm4gdXJpVHlwZTsKKyAgICB9CisgICAgcHVibGljIHZvaWQgc2V0Sk1TVVJJVHlwZShTdHJpbmcgdHlwZSkgeworICAgIAl0aGlzLnVyaVR5cGUgPSB0eXBlOworICAgIH0KKyAgICBwdWJsaWMgU3RyaW5nIGdldEpNU0hlYWRlclR5cGUoKSB7CisgICAgCXJldHVybiBoZWFkZXJUeXBlOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRKTVNIZWFkZXJUeXBlKFN0cmluZyB0eXBlKSB7CisgICAgCXRoaXMuaGVhZGVyVHlwZSA9IHR5cGU7CisgICAgfSAKKyAgCiAgICAgcHVibGljIFN0cmluZyBnZXRKTVNDb3JyZWxhdGlvbklkKCkgewogICAgICAgICByZXR1cm4gam1zQ29ycmVsYXRpb25JZDsKICAgICB9CkBAIC00ODQsMzIgKzU1Nyw2IEBACiAgICAgICAgIHRoaXMuam1zQ29ycmVsYXRpb25JZCA9IGptc0NvcnJlbGF0aW9uSWQ7CiAgICAgfQogCi0gICAgcHVibGljIEJvb2xlYW4gaXNkZWxpdmVyeU1vZGVQZXJzaXN0ZW50KCkgewotICAgICAgICByZXR1cm4gZGVsaXZlcnlNb2RlUGVyc2lzdGVudDsKLSAgICB9Ci0gICAgcHVibGljIHZvaWQgc2V0Sk1TRGVsaXZlcnlNb2RlKGJvb2xlYW4gcGVyc2lzdGVudCkgewotICAgICAgICBzZXRIZWFkZXJzKCB0cnVlICk7Ci0gICAgICAgIHRoaXMuZGVsaXZlcnlNb2RlUGVyc2lzdGVudCA9IEJvb2xlYW4udmFsdWVPZihwZXJzaXN0ZW50KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgSW50ZWdlciBnZXRKTVNQcmlvcml0eSgpIHsKLSAgICAgICAgcmV0dXJuIGptc1ByaW9yaXR5OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEpNU1ByaW9yaXR5KGludCBqbXNQcmlvcml0eSkgewotICAgICAgICBzZXRIZWFkZXJzKCB0cnVlICk7Ci0gICAgICAgIHRoaXMuam1zUHJpb3JpdHkgPSBJbnRlZ2VyLnZhbHVlT2Yoam1zUHJpb3JpdHkpOwotICAgIH0KLQotICAgIHB1YmxpYyBMb25nIGdldEpNU1RpbWVUb0xpdmUoKSB7Ci0gICAgICAgIHJldHVybiB0aW1lVG9MaXZlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHNldEpNU1RpbWVUb0xpdmUobG9uZyB0aW1lVG9MaXZlKSB7Ci0gICAgICAgIHNldEhlYWRlcnMoIHRydWUgKTsKLSAgICAgICAgdGhpcy50aW1lVG9MaXZlID0gTG9uZy52YWx1ZU9mKHRpbWVUb0xpdmUpOwotICAgIH0KLQogICAgIHB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRQcm9wZXJ0eU5hbWVzKCkgewogICAgICAgICByZXR1cm4gcHJvcGVydGllcy5rZXlTZXQoKTsKICAgICB9CkBAIC02MTIsNiArNjU5LDEwIEBACiAgICAgcHVibGljIHZvaWQgc2V0TmF0aXZlT3BlcmF0aW9uTmFtZShTdHJpbmcgb3BOYW1lLCBTdHJpbmcgbmF0aXZlT3BOYW1lKSB7CiAgICAgICAgIHRoaXMubmF0aXZlT3BlcmF0aW9uTmFtZXMgLnB1dChvcE5hbWUsIG5hdGl2ZU9wTmFtZSk7CiAgICAgfQorICAgIAorICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldE5hdGl2ZU9wZXJhdGlvbk5hbWVzKCkgeworICAgICAgICByZXR1cm4gbmF0aXZlT3BlcmF0aW9uTmFtZXM7CisgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBnZXRPcGVyYXRpb25KTVNUeXBlKFN0cmluZyBvcE5hbWUpIHsKICAgICAgICAgaWYgKG9wZXJhdGlvblByb3BlcnRpZXNCaW5kaW5nICE9IG51bGwgJiYgb3BlcmF0aW9uUHJvcGVydGllc0JpbmRpbmcuZ2V0T3BlcmF0aW9uSk1TVHlwZShvcE5hbWUpICE9IG51bGwpIHsKQEAgLTYyMCw3ICs2NzEsNyBAQAogICAgICAgICAgICAgaWYgKG9wZXJhdGlvbkpNU1R5cGVzLmNvbnRhaW5zS2V5KG9wTmFtZSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uSk1TVHlwZXMuZ2V0KG9wTmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBqbXNUeXBlOworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtNjUyLDEzICs3MDMsMTMgQEAKICAgICAgICAgICAgIGlmIChvcGVyYXRpb25Qcm9wZXJ0aWVzQmluZGluZy5nZXRPcGVyYXRpb25KTVNEZWxpdmVyeU1vZGUob3BOYW1lKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblByb3BlcnRpZXNCaW5kaW5nLmdldE9wZXJhdGlvbkpNU0RlbGl2ZXJ5TW9kZShvcE5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZGVsaXZlcnlNb2RlUGVyc2lzdGVudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChvcGVyYXRpb25KTVNEZWxpdmVyeU1vZGVzLmNvbnRhaW5zS2V5KG9wTmFtZSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uSk1TRGVsaXZlcnlNb2Rlcy5nZXQob3BOYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRlbGl2ZXJ5TW9kZVBlcnNpc3RlbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02NzEsMTMgKzcyMiwxMyBAQAogICAgICAgICAgICAgaWYgKG9wZXJhdGlvblByb3BlcnRpZXNCaW5kaW5nLmdldE9wZXJhdGlvbkpNU1RpbWVUb0xpdmUob3BOYW1lKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvblByb3BlcnRpZXNCaW5kaW5nLmdldE9wZXJhdGlvbkpNU1RpbWVUb0xpdmUob3BOYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVUb0xpdmU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAob3BlcmF0aW9uSk1TVGltZVRvTGl2ZXMuY29udGFpbnNLZXkob3BOYW1lKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25KTVNUaW1lVG9MaXZlcy5nZXQob3BOYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRpbWVUb0xpdmU7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC02OTAsMTMgKzc0MSwxMyBAQAogICAgICAgICAgICAgaWYgKG9wZXJhdGlvblByb3BlcnRpZXNCaW5kaW5nLmdldE9wZXJhdGlvbkpNU1ByaW9yaXR5KG9wTmFtZSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Qcm9wZXJ0aWVzQmluZGluZy5nZXRPcGVyYXRpb25KTVNQcmlvcml0eShvcE5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gam1zUHJpb3JpdHk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAob3BlcmF0aW9uSk1TUHJpb3JpdGllcy5jb250YWluc0tleShvcE5hbWUpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbkpNU1ByaW9yaXRpZXMuZ2V0KG9wTmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHJldHVybiBqbXNQcmlvcml0eTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTcwNSw4ICs3NTYsMTIgQEAKICAgICB9CiAKICAgICBwdWJsaWMgU3RyaW5nIGdldEpNU1NlbGVjdG9yKCkgewotICAgICAgICByZXR1cm4gam1zU2VsZWN0b3I7CisgICAgCWlmICggdGhpcy51cmlKbXNTZWxlY3RvciAhPSBudWxsICkKKyAgICAJCXJldHVybiB0aGlzLnVyaUptc1NlbGVjdG9yOworICAgIAllbHNlIAorICAgICAgCSAgcmV0dXJuIGptc1NlbGVjdG9yOwogICAgIH0KKyAgICAKICAgICBwdWJsaWMgdm9pZCBzZXRKTVNTZWxlY3RvcihTdHJpbmcgam1zU2VsZWN0b3IpIHsKICAgICAgICAgdGhpcy5qbXNTZWxlY3RvciA9IGptc1NlbGVjdG9yOwogICAgIH0KQEAgLTk3MSw0ICsxMDI2LDY5IEBACiAgICAgcHVibGljIHZvaWQgc2V0RXh0ZW5zaW9uVHlwZShFeHRlbnNpb25UeXBlIGludGVudEF0dGFjaFBvaW50VHlwZSkgewogICAgICAgICB0aGlzLmV4dGVuc2lvblR5cGUgPSBpbnRlbnRBdHRhY2hQb2ludFR5cGU7CiAgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRKTVNVUkkoKSB7CisgICAgICAgIHJldHVybiBqbXNVUkk7CisgICAgfQorICAgIHB1YmxpYyB2b2lkIHNldEpNU1VSSShTdHJpbmcgam1zVVJJKSB7CisgICAgICAgIHRoaXMuam1zVVJJID0gam1zVVJJOworICAgIH0KKworICAgIAorCXB1YmxpYyB2b2lkIHNldFVSSUpNU0RlbGl2ZXJ5TW9kZShib29sZWFuIGVxdWFscykgeworCQl0aGlzLnVyaURlbGl2ZXJ5TW9kZSA9IEJvb2xlYW4udmFsdWVPZihlcXVhbHMpOwkJCisJfQorCisJcHVibGljIEludGVnZXIgZ2V0VVJJSk1TUHJpb3JpdHkoKSB7CisJCXJldHVybiB0aGlzLnVyaUpNU1ByaW9yaXR5OworCX0KKwkKKwlwdWJsaWMgdm9pZCBzZXRVUklKTVNQcmlvcml0eShpbnQgcGFyc2VJbnQpIHsKKwkJdGhpcy51cmlKTVNQcmlvcml0eSA9IEludGVnZXIudmFsdWVPZihwYXJzZUludCk7CQkKKwl9CisKKwlwdWJsaWMgTG9uZyBnZXRVUklKTVNUaW1lVG9MaXZlKCkgeworCQlyZXR1cm4gdGhpcy51cmlKTVNUaW1lVG9MaXZlOworCX0KKwlwdWJsaWMgdm9pZCBzZXRVUklKTVNUaW1lVG9MaXZlKGxvbmcgcGFyc2VMb25nKSB7CisJCXRoaXMudXJpSk1TVGltZVRvTGl2ZSA9IExvbmcudmFsdWVPZihwYXJzZUxvbmcpOworCX0KKworCXB1YmxpYyBCb29sZWFuIGlzSGVhZGVyRGVsaXZlcnlNb2RlUGVyc2lzdGVudCgpIHsKKwkJcmV0dXJuIHRoaXMuaGVhZGVyRGVsaXZlcnlNb2RlOworCX0KKwlwdWJsaWMgdm9pZCBzZXRKTVNIZWFkZXJEZWxpdmVyeU1vZGUoYm9vbGVhbiBiKSB7CisJCXRoaXMuaGVhZGVyRGVsaXZlcnlNb2RlID0gQm9vbGVhbi52YWx1ZU9mKGIpOwkJCisJfQorCisJcHVibGljIExvbmcgZ2V0Sk1TSGVhZGVyVGltZVRvTGl2ZSgpIHsKKwkJcmV0dXJuIHRoaXMuaGVhZGVyVGltZVRvTGl2ZTsKKwl9CisJcHVibGljIHZvaWQgc2V0Sk1TSGVhZGVyVGltZVRvTGl2ZShsb25nIHBhcnNlTG9uZykgeworCQl0aGlzLmhlYWRlclRpbWVUb0xpdmUgPSBMb25nLnZhbHVlT2YocGFyc2VMb25nKTsJCQorCX0KKworCXB1YmxpYyBJbnRlZ2VyIGdldEpNU0hlYWRlclByaW9yaXR5KCkgeworCQlyZXR1cm4gdGhpcy5oZWFkZXJQcmlvcml0eTsKKwl9CisJcHVibGljIHZvaWQgc2V0Sk1TSGVhZGVyUHJpb3JpdHkoaW50IHApIHsKKwkJdGhpcy5oZWFkZXJQcmlvcml0eSA9IEludGVnZXIudmFsdWVPZihwKTsJCQorCX0KKwkKKwlwdWJsaWMgSW50ZWdlciBnZXREZWZhdWx0Sk1TUHJpb3JpdHkoKSB7CisJCXJldHVybiB0aGlzLmRlZmF1bHRQcmlvcml0eTsKKwl9CisKKwlwdWJsaWMgdm9pZCBzZXRJc0Rlc3RpbmF0aW9uU3BlY2lmaWVkKGJvb2xlYW4gYikgeworCQl0aGlzLmlzRGVzdGluYXRpb25TcGVjaWZpZWQgPSBiOwkJCisJfQorCQorCXB1YmxpYyBib29sZWFuIGlzRGVzdGluYXRpb25TcGVjaWZpZWQoKSB7CisJCXJldHVybiB0aGlzLmlzRGVzdGluYXRpb25TcGVjaWZpZWQgOworCX0KKworCXB1YmxpYyB2b2lkIHNldFVSSUpNU1NlbGVjdG9yKFN0cmluZyBzZWxlY3RvcikgeworCQl0aGlzLnVyaUptc1NlbGVjdG9yID0gc2VsZWN0b3I7CQkKKwl9CisJCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNCaW5kaW5nQ29uc3RhbnRzLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNCaW5kaW5nQ29uc3RhbnRzLmphdmEKaW5kZXggODBiYzYxYi4uYzU1ZmE3ZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQmluZGluZ0NvbnN0YW50cy5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0pNU0JpbmRpbmdDb25zdGFudHMuamF2YQpAQCAtMzYsOCArMzYsOCBAQAogICAgIC8vIG1vZGVsIGFuZCBmb3Igc2V0dGluZyB1cCBkZWZhdWx0cwogICAgIFN0cmluZyBCSU5ESU5HX0pNUyA9ICJiaW5kaW5nLmptcyI7CiAgICAgUU5hbWUgQklORElOR19KTVNfUU5BTUUgPSBuZXcgUU5hbWUoQ29uc3RhbnRzLlNDQTExX05TLCBCSU5ESU5HX0pNUyk7Ci0gICAgU3RyaW5nIENPUlJFTEFURV9NU0dfSUQgPSAicmVxdWVzdG1zZ2lkdG9jb3JyZWxpZCI7Ci0gICAgU3RyaW5nIENPUlJFTEFURV9DT1JSRUxBVElPTl9JRCA9ICJyZXF1ZXN0Y29ycmVsaWR0b2NvcnJlbGlkIjsKKyAgICBTdHJpbmcgQ09SUkVMQVRFX01TR19JRCA9ICJtZXNzYWdlSUQiOworICAgIFN0cmluZyBDT1JSRUxBVEVfQ09SUkVMQVRJT05fSUQgPSAiY29ycmVsYXRpb25JRCI7CiAgICAgU3RyaW5nIENPUlJFTEFURV9OT05FID0gIm5vbmUiOwogICAgIExpc3Q8U3RyaW5nPiBWQUxJRF9DT1JSRUxBVElPTl9TQ0hFTUVTID0KICAgICAgICAgQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10ge0NPUlJFTEFURV9NU0dfSUQsIENPUlJFTEFURV9DT1JSRUxBVElPTl9JRCwgQ09SUkVMQVRFX05PTkV9KTsKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10ge0RFU1RJTkFUSU9OX1RZUEVfUVVFVUUsIERFU1RJTkFUSU9OX1RZUEVfVE9QSUN9KTsKICAgICBTdHJpbmcgQ1JFQVRFX0FMV0FZUyA9ICJhbHdheXMiOwogICAgIFN0cmluZyBDUkVBVEVfTkVWRVIgPSAibmV2ZXIiOwotICAgIFN0cmluZyBDUkVBVEVfSUZfTk9UX0VYSVNUID0gImlmbm90ZXhpc3QiOworICAgIFN0cmluZyBDUkVBVEVfSUZfTk9UX0VYSVNUID0gImlmTm90RXhpc3QiOwogICAgIFN0cmluZyBERUZBVUxUX0NPTlRFWFRfRkFDVE9SWV9OQU1FID0gIm9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeSI7CiAgICAgU3RyaW5nIERFRkFVTFRfSk5ESV9VUkwgPSAidGNwOi8vbG9jYWxob3N0OjYxNjE2IjsKICAgICBpbnQgREVGQVVMVF9USU1FX1RPX0xJVkUgPSAyMDAwMDsgLy8gaW4gbWlsbGlzZWNvbmRzCkBAIC02NSw3ICs2NSw3IEBACiAgICAgU3RyaW5nIEZBVUxUX1BST1BFUlRZID0gIm9yZ19hcGFjaGVfdHVzY2FueV9zY2FfZmF1bHQiOwogICAgIAogICAgIFN0cmluZyBDQUxMQkFDS19JRF9QUk9QRVJUWSA9ICJDYWxsYmFja0lEIjsKLSAgICBTdHJpbmcgQ0FMTEJBQ0tfUV9QUk9QRVJUWSA9ICJzY2FDYWxsYmFja1F1ZXVlIjsKKyAgICBTdHJpbmcgQ0FMTEJBQ0tfUV9QUk9QRVJUWSA9ICJzY2FDYWxsYmFja0Rlc3RpbmF0aW9uIjsKICAgICBTdHJpbmcgQ09OVkVSU0FUSU9OX0lEX1BST1BFUlRZID0gInNjYUNvbnZlcnNhdGlvbklkIjsKICAgICAKICAgICAvLyBYTUwgZWxlbWVudCBhbmQgYXR0cmlidXRlIG5hbWVzCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNCaW5kaW5nUHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNCaW5kaW5nUHJvY2Vzc29yLmphdmEKaW5kZXggOTMzZWYzMy4uOTdkZmQ1ZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQmluZGluZ1Byb2Nlc3Nvci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0pNU0JpbmRpbmdQcm9jZXNzb3IuamF2YQpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IHN0YXRpYyBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUNvbnN0YW50cy5TVEFSVF9FTEVNRU5UOwogCiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CkBAIC0zNCw2ICszNSw3IEBACiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Xcml0ZXI7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkJhc2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db25maWd1cmVkT3BlcmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuT3BlcmF0aW9uU2VsZWN0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5PcGVyYXRpb25zQ29uZmlndXJhdG9yOwpAQCAtNDYsNiArNDgsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMud2lyZWZvcm1hdC5XaXJlRm9ybWF0Sk1TT2JqZWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMud2lyZWZvcm1hdC5XaXJlRm9ybWF0Sk1TVGV4dDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU1RleHRYTUw7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24ueG1sLnN0YXguU3RBWEhlbHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQmFzZVN0QVhBcnRpZmFjdFByb2Nlc3NvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjsKQEAgLTExMyw3ICsxMTYsNyBAQAogICogICAgICAgICA8cHJvcGVydHkgbmFtZT0iTk1UT0tFTiIgdHlwZT0iTk1UT0tFTiI+KgogICogICAgIDwvcmVzb3VyY2VBZGFwdGVyPj8KICAqIAotICogICAgIDxvcGVyYXRpb25Qcm9wZXJ0aWVzIG5hbWU9InN0cmluZyIgbmF0aXZlT3BlcmF0aW9uPSJzdHJpbmciPz4KKyAqICAgICA8b3BlcmF0aW9uUHJvcGVydGllcyBuYW1lPSJzdHJpbmciIHNlbGVjdGVkT3BlcmF0aW9uPSJzdHJpbmciPz4KICAqICAgICAgICAgPHByb3BlcnR5IG5hbWU9Ik5NVE9LRU4iIHR5cGU9Ik5NVE9LRU4iPioKICAqICAgICAgICAgPGhlYWRlcnMgdHlwZT0ic3RyaW5nIj8KICAqICAgICAgICAgICAgICAgICAgZGVsaXZlcnlNb2RlPSJzdHJpbmciPwpAQCAtMjA1LDEwICsyMDgsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJlYWQgY29ycmVsYXRpb24gc2NoZW1lCi0gICAgICAgIFN0cmluZyBjb3JyZWxhdGlvblNjaGVtZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiY29ycmVsYXRpb25TY2hlbWUiKTsKLSAgICAgICAgaWYgKGNvcnJlbGF0aW9uU2NoZW1lICE9IG51bGwgJiYgY29ycmVsYXRpb25TY2hlbWUubGVuZ3RoKCkgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoSk1TQmluZGluZ0NvbnN0YW50cy5WQUxJRF9DT1JSRUxBVElPTl9TQ0hFTUVTLmNvbnRhaW5zKGNvcnJlbGF0aW9uU2NoZW1lLnRvTG93ZXJDYXNlKCkpKSB7Ci0gICAgICAgICAgICAgICAgam1zQmluZGluZy5zZXRDb3JyZWxhdGlvblNjaGVtZShjb3JyZWxhdGlvblNjaGVtZSk7CisgICAgICAgIFFOYW1lIGNvcnJlbGF0aW9uU2NoZW1lID0gU3RBWEhlbHBlci5nZXRBdHRyaWJ1dGVBc1FOYW1lKHJlYWRlciwgImNvcnJlbGF0aW9uU2NoZW1lIik7CisgICAgICAgIGlmIChjb3JyZWxhdGlvblNjaGVtZSAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoQmFzZS5TQ0ExMV9OUy5lcXVhbHMoY29ycmVsYXRpb25TY2hlbWUuZ2V0TmFtZXNwYWNlVVJJKCkpICYmIEpNU0JpbmRpbmdDb25zdGFudHMuVkFMSURfQ09SUkVMQVRJT05fU0NIRU1FUy5jb250YWlucyhjb3JyZWxhdGlvblNjaGVtZS5nZXRMb2NhbFBhcnQoKSkpIHsKKyAgICAgICAgICAgICAgICBqbXNCaW5kaW5nLnNldENvcnJlbGF0aW9uU2NoZW1lKGNvcnJlbGF0aW9uU2NoZW1lLmdldExvY2FsUGFydCgpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAJZXJyb3IobW9uaXRvciwgIkludmFsaWRDb3JyZWxhdGlvblNjaGVtZSIsIHJlYWRlciwgY29ycmVsYXRpb25TY2hlbWUpOwogICAgICAgICAgICAgfQpAQCAtMzU2LDI2ICszNTksNDkgQEAKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBwYXJzZVVSSShTdHJpbmcgdXJpLCBKTVNCaW5kaW5nIGptc0JpbmRpbmcsIE1vbml0b3IgbW9uaXRvcikgewotICAgICAgICBpZiAoIXVyaS5zdGFydHNXaXRoKCJqbXM6IikpIHsKLSAgICAgICAgCWVycm9yKG1vbml0b3IsICJNdXN0U3RhcnRXaXRoU2NoZW1hIiwgam1zQmluZGluZywgdXJpKTsKLSAgICAgICAgCXJldHVybjsKKyAgICAgICAgaWYgKCEodXJpLnN0YXJ0c1dpdGgoImptczpqbmRpOiIpIHx8IHVyaS5zdGFydHNXaXRoKCJqbXM6cXVldWU6IikgfHwgdXJpLnN0YXJ0c1dpdGgoImptczp0b3BpYzoiKSkpIHsKKyAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJNdXN0U3RhcnRXaXRoU2NoZW1hIiwgam1zQmluZGluZywgdXJpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBpbnQgaSA9IHVyaS5pbmRleE9mKCc/Jyk7ICAgICAgICAgICAgCiAgICAgICAgIGlmIChpID49IDApIHsKICAgICAgICAgCVN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodXJpLnN1YnN0cmluZyhpKzEpLCImIik7CiAgICAgICAgIAl3aGlsZSAoc3QuaGFzTW9yZVRva2VucygpKSB7CiAgICAgICAgIAkgICAgU3RyaW5nIHMgPSBzdC5uZXh0VG9rZW4oKTsKLSAgICAgICAgCSAgICBpZiAocy5zdGFydHNXaXRoKCJjb25uZWN0aW9uRmFjdG9yeU5hbWU9IikpIHsKLSAgICAgICAgCSAgICAgICAgam1zQmluZGluZy5zZXRDb25uZWN0aW9uRmFjdG9yeU5hbWUocy5zdWJzdHJpbmcoMjIpKTsKLSAgICAgICAgCSAgICB9IGVsc2UgewotICAgICAgICAJICAgICAgICBlcnJvcihtb25pdG9yLCAiVW5rbm93blRva2VuSW5VUkkiLCBqbXNCaW5kaW5nLCBzLCB1cmkpOwotICAgICAgICAgICAgICAgICAJcmV0dXJuOwotICAgICAgICAJICAgICB9Ci0gICAgICAgIAl9Ci0gICAgICAgIAlqbXNCaW5kaW5nLnNldERlc3RpbmF0aW9uTmFtZSh1cmkuc3Vic3RyaW5nKDQsIGkpKTsKKyAgICAgICAgCSAgICBpZiAocy5zdGFydHNXaXRoKCJqbmRpQ29ubmVjdGlvbkZhY3RvcnlOYW1lPSIpKSB7CisgICAgICAgIAkgICAgICAgIGptc0JpbmRpbmcuc2V0Q29ubmVjdGlvbkZhY3RvcnlOYW1lKHMuc3Vic3RyaW5nKDI2KSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdGFydHNXaXRoKCJkZWxpdmVyeU1vZGU9IikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0VVJJSk1TRGVsaXZlcnlNb2RlKCJwZXJzaXN0ZW50Ii5lcXVhbHMocy5zdWJzdHJpbmcoMTMpKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdGFydHNXaXRoKCJwcmlvcml0eT0iKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgam1zQmluZGluZy5zZXRVUklKTVNQcmlvcml0eShJbnRlZ2VyLnBhcnNlSW50KHMuc3Vic3RyaW5nKDkpKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdGFydHNXaXRoKCJ0aW1lVG9MaXZlPSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqbXNCaW5kaW5nLnNldFVSSUpNU1RpbWVUb0xpdmUoTG9uZy5wYXJzZUxvbmcocy5zdWJzdHJpbmcoMTEpKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocy5zdGFydHNXaXRoKCJzZWxlY3Rvcj0nIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzZWxlY3RvciA9IHMuc3Vic3RyaW5nKDEwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5zdGFydHNXaXRoKCJcIiIpIHx8IHNlbGVjdG9yLnN0YXJ0c1dpdGgoIiciKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yID0gc2VsZWN0b3Iuc3Vic3RyaW5nKDEsIHNlbGVjdG9yLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5lbmRzV2l0aCgiXCIiKSB8fCBzZWxlY3Rvci5lbmRzV2l0aCgiJyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5zdWJzdHJpbmcoMCwgc2VsZWN0b3IubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0VVJJSk1TU2VsZWN0b3Ioc2VsZWN0b3IpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMuc3RhcnRzV2l0aCgidHlwZSIpKSB7CisgICAgICAgICAgICAgICAgICAgIAlTdHJpbmcgdHlwZSA9IHMuc3Vic3RyaW5nKDUpOworICAgICAgICAgICAgICAgICAgICAJam1zQmluZGluZy5zZXRKTVNVUklUeXBlKHR5cGUpOyAgICAgICAgICAgICAgICAgICAgCQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAJZXJyb3IobW9uaXRvciwgIlVua25vd25Ub2tlbkluVVJJIiwgam1zQmluZGluZywgcywgdXJpKTsKKyAgICAgICAgICAgICAgICAgICAgCXJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAJCX0KKyAgICAgICAgCWludCBqPXVyaS5pbmRleE9mKCc6JywgNCk7CisgICAgICAgIAlqbXNCaW5kaW5nLnNldERlc3RpbmF0aW9uTmFtZSh1cmkuc3Vic3RyaW5nKGorMSwgaSkpOworICAgICAgICAJam1zQmluZGluZy5zZXREZXN0aW5hdGlvblR5cGUodXJpLnN1YnN0cmluZyg0LCBqKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgIGptc0JpbmRpbmcuc2V0RGVzdGluYXRpb25OYW1lKHVyaS5zdWJzdHJpbmcoNCkpOworICAgICAgICAgICBpbnQgaj11cmkuaW5kZXhPZignOicsIDQpOworICAgICAgICAgICBqbXNCaW5kaW5nLnNldERlc3RpbmF0aW9uTmFtZSh1cmkuc3Vic3RyaW5nKGorMSkpOworICAgICAgICAgICBqbXNCaW5kaW5nLnNldERlc3RpbmF0aW9uVHlwZSh1cmkuc3Vic3RyaW5nKDQsIGopKTsKICAgICAgICAgfQorICAgICAgICBqbXNCaW5kaW5nLnNldEpNU1VSSSh1cmkpOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHJlc29sdmUoSk1TQmluZGluZyBtb2RlbCwgTW9kZWxSZXNvbHZlciByZXNvbHZlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7CkBAIC00MDIsNiArNDI4LDcgQEAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcGFyc2VEZXN0aW5hdGlvbihYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBKTVNCaW5kaW5nIGptc0JpbmRpbmcsIE1vbml0b3IgbW9uaXRvcikgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbiB7CisgICAgCWptc0JpbmRpbmcuc2V0SXNEZXN0aW5hdGlvblNwZWNpZmllZCh0cnVlKTsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBnZXRVUklTdHJpbmcocmVhZGVyLCAiam5kaU5hbWUiKTsKICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBuYW1lLmxlbmd0aCgpID4gMCkgewogICAgICAgICAgICAgam1zQmluZGluZy5zZXREZXN0aW5hdGlvbk5hbWUobmFtZSk7CkBAIC00MjAsMTAgKzQ0NywyMiBAQAogCiAgICAgICAgIFN0cmluZyBjcmVhdGUgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImNyZWF0ZSIpOwogICAgICAgICBpZiAoY3JlYXRlICE9IG51bGwgJiYgY3JlYXRlLmxlbmd0aCgpID4gMCkgeworICAgICAgICAJdmFsaWRhdGVDcmVhdGUoY3JlYXRlLCByZWFkZXIsIG1vbml0b3IpOwogICAgICAgICAgICAgam1zQmluZGluZy5zZXREZXN0aW5hdGlvbkNyZWF0ZShjcmVhdGUpOwogICAgICAgICB9CiAKICAgICAgICAgam1zQmluZGluZy5nZXREZXN0aW5hdGlvblByb3BlcnRpZXMoKS5wdXRBbGwocGFyc2VCaW5kaW5nUHJvcGVydGllcyhyZWFkZXIsIG1vbml0b3IpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldERlc3RpbmF0aW9uQ3JlYXRlKCkuZXF1YWxzKEpNU0JpbmRpbmdDb25zdGFudHMuQ1JFQVRFX0lGX05PVF9FWElTVCkpIHsKKyAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgICAgICBlcnJvcihtb25pdG9yLCAiTWlzc2luZ05hbWVGb3JDUkVBVEVfSUZfTk9UX0VYSVNUIiwgcmVhZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoam1zQmluZGluZy5nZXREZXN0aW5hdGlvbkNyZWF0ZSgpLmVxdWFscyhKTVNCaW5kaW5nQ29uc3RhbnRzLkNSRUFURV9ORVZFUikpIHsKKyAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgICAgICBlcnJvcihtb25pdG9yLCAiTWlzc2luZ05hbWVGb3JDUkVBVEVfTkVWRVIiLCByZWFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHBhcnNlQ29ubmVjdGlvbkZhY3RvcnkoWE1MU3RyZWFtUmVhZGVyIHJlYWRlciwgSk1TQmluZGluZyBqbXNCaW5kaW5nLCBNb25pdG9yIG1vbml0b3IpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24gewpAQCAtNDMzLDE2ICs0NzIsNDggQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJNaXNzaW5nQ29ubmVjdGlvbkZhY3RvcnlOYW1lIiwgcmVhZGVyKTsKICAgICAgICAgfQorCisgICAgICAgIFN0cmluZyBjcmVhdGUgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImNyZWF0ZSIpOworICAgICAgICBpZiAoY3JlYXRlICE9IG51bGwgJiYgY3JlYXRlLmxlbmd0aCgpID4gMCkgeworICAgICAgICAJdmFsaWRhdGVDcmVhdGUoY3JlYXRlLCByZWFkZXIsIG1vbml0b3IpOworICAgICAgICAgICAgam1zQmluZGluZy5zZXRDb25uZWN0aW9uRmFjdG9yeUNyZWF0ZShjcmVhdGUpOworICAgICAgICB9CisgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldENvbm5lY3Rpb25GYWN0b3J5Q3JlYXRlKCkuZXF1YWxzKEpNU0JpbmRpbmdDb25zdGFudHMuQ1JFQVRFX0lGX05PVF9FWElTVCkpIHsKKyAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgICAgICBlcnJvcihtb25pdG9yLCAiTWlzc2luZ05hbWVGb3JDUkVBVEVfSUZfTk9UX0VYSVNUIiwgcmVhZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoam1zQmluZGluZy5nZXRDb25uZWN0aW9uRmFjdG9yeUNyZWF0ZSgpLmVxdWFscyhKTVNCaW5kaW5nQ29uc3RhbnRzLkNSRUFURV9ORVZFUikpIHsKKyAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgICAgICBlcnJvcihtb25pdG9yLCAiTWlzc2luZ05hbWVGb3JDUkVBVEVfTkVWRVIiLCByZWFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAgICBqbXNCaW5kaW5nLmdldENvbm5lY3Rpb25GYWN0b3J5UHJvcGVydGllcygpLnB1dEFsbChwYXJzZUJpbmRpbmdQcm9wZXJ0aWVzKHJlYWRlciwgbW9uaXRvcikpOwogICAgIH0KIAogICAgIHByaXZhdGUgdm9pZCBwYXJzZUFjdGl2YXRpb25TcGVjKFhNTFN0cmVhbVJlYWRlciByZWFkZXIsIEpNU0JpbmRpbmcgam1zQmluZGluZywgTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uIHsKLSAgICAgICAgU3RyaW5nIG5hbWUgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgIm5hbWUiKTsgICAgICAgIAorICAgICAgICBTdHJpbmcgbmFtZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiam5kaU5hbWUiKTsgICAgICAgIAogICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmIG5hbWUubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICBqbXNCaW5kaW5nLnNldEFjdGl2YXRpb25TcGVjTmFtZShuYW1lKTsgICAgICAgICAgICAKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdhcm5pbmcobW9uaXRvciwgIk1pc3NpbmdBY3RpdmF0aW9uU3BlY05hbWUiLCByZWFkZXIpOwogICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIGNyZWF0ZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiY3JlYXRlIik7CisgICAgICAgIGlmIChjcmVhdGUgIT0gbnVsbCAmJiBjcmVhdGUubGVuZ3RoKCkgPiAwKSB7CisgICAgICAgIAl2YWxpZGF0ZUNyZWF0ZShjcmVhdGUsIHJlYWRlciwgbW9uaXRvcik7CisgICAgICAgICAgICBqbXNCaW5kaW5nLnNldEFjdGl2YXRpb25TcGVjQ3JlYXRlKGNyZWF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGptc0JpbmRpbmcuZ2V0QWN0aXZhdGlvblNwZWNDcmVhdGUoKS5lcXVhbHMoSk1TQmluZGluZ0NvbnN0YW50cy5DUkVBVEVfSUZfTk9UX0VYSVNUKSkgeworICAgICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmxlbmd0aCgpIDwgMSkgeworICAgICAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJNaXNzaW5nTmFtZUZvckNSRUFURV9JRl9OT1RfRVhJU1QiLCByZWFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldEFjdGl2YXRpb25TcGVjQ3JlYXRlKCkuZXF1YWxzKEpNU0JpbmRpbmdDb25zdGFudHMuQ1JFQVRFX05FVkVSKSkgeworICAgICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmxlbmd0aCgpIDwgMSkgeworICAgICAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJNaXNzaW5nTmFtZUZvckNSRUFURV9ORVZFUiIsIHJlYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICBqbXNCaW5kaW5nLmdldEFjdGl2YXRpb25TcGVjUHJvcGVydGllcygpLnB1dEFsbChwYXJzZUJpbmRpbmdQcm9wZXJ0aWVzKHJlYWRlciwgbW9uaXRvcikpOwogICAgIH0KIApAQCAtNDY2LDMyICs1MzcsODQgQEAKIAogICAgICAgICBTdHJpbmcgY3JlYXRlID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJjcmVhdGUiKTsKICAgICAgICAgaWYgKGNyZWF0ZSAhPSBudWxsICYmIGNyZWF0ZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgCXZhbGlkYXRlQ3JlYXRlKGNyZWF0ZSwgcmVhZGVyLCBtb25pdG9yKTsKICAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0UmVzcG9uc2VEZXN0aW5hdGlvbkNyZWF0ZShjcmVhdGUpOwogICAgICAgICB9CisgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldFJlc3BvbnNlRGVzdGluYXRpb25DcmVhdGUoKS5lcXVhbHMoSk1TQmluZGluZ0NvbnN0YW50cy5DUkVBVEVfSUZfTk9UX0VYSVNUKSkgeworICAgICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmxlbmd0aCgpIDwgMSkgeworICAgICAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJNaXNzaW5nTmFtZUZvckNSRUFURV9JRl9OT1RfRVhJU1QiLCByZWFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldFJlc3BvbnNlRGVzdGluYXRpb25DcmVhdGUoKS5lcXVhbHMoSk1TQmluZGluZ0NvbnN0YW50cy5DUkVBVEVfTkVWRVIpKSB7CisgICAgICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUubGVuZ3RoKCkgPCAxKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobW9uaXRvciwgIk1pc3NpbmdOYW1lRm9yQ1JFQVRFX05FVkVSIiwgcmVhZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICAgIGptc0JpbmRpbmcuZ2V0UmVzcG9uc2VEZXN0aW5hdGlvblByb3BlcnRpZXMoKS5wdXRBbGwocGFyc2VCaW5kaW5nUHJvcGVydGllcyhyZWFkZXIsIG1vbml0b3IpKTsKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcGFyc2VSZXNwb25zZUNvbm5lY3Rpb25GYWN0b3J5KFhNTFN0cmVhbVJlYWRlciByZWFkZXIsIEpNU0JpbmRpbmcgam1zQmluZGluZywgTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uIHsKKwlwcml2YXRlIHZvaWQgcGFyc2VSZXNwb25zZUNvbm5lY3Rpb25GYWN0b3J5KFhNTFN0cmVhbVJlYWRlciByZWFkZXIsIEpNU0JpbmRpbmcgam1zQmluZGluZywgTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgWE1MU3RyZWFtRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIG5hbWUgPSBnZXRVUklTdHJpbmcocmVhZGVyLCAiam5kaU5hbWUiKTsKICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCAmJiBuYW1lLmxlbmd0aCgpID4gMCkgewogICAgICAgICAgICAgam1zQmluZGluZy5zZXRSZXNwb25zZUNvbm5lY3Rpb25GYWN0b3J5TmFtZShuYW1lKTsgICAgICAgICAgICAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHdhcm5pbmcobW9uaXRvciwgIk1pc3NpbmdSZXNwb25zZUNvbm5lY3Rpb25GYWN0b3J5IiwgcmVhZGVyKTsKICAgICAgICAgfQorICAgICAgICBTdHJpbmcgY3JlYXRlID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJjcmVhdGUiKTsKKyAgICAgICAgaWYgKGNyZWF0ZSAhPSBudWxsICYmIGNyZWF0ZS5sZW5ndGgoKSA+IDApIHsKKyAgICAgICAgCXZhbGlkYXRlQ3JlYXRlKGNyZWF0ZSwgcmVhZGVyLCBtb25pdG9yKTsKKyAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0UmVzcG9uc2VDb25uZWN0aW9uRmFjdG9yeUNyZWF0ZShjcmVhdGUpOworICAgICAgICB9CisgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldFJlc3BvbnNlQ29ubmVjdGlvbkZhY3RvcnlDcmVhdGUoKS5lcXVhbHMoSk1TQmluZGluZ0NvbnN0YW50cy5DUkVBVEVfSUZfTk9UX0VYSVNUKSkgeworICAgICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmxlbmd0aCgpIDwgMSkgeworICAgICAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJNaXNzaW5nTmFtZUZvckNSRUFURV9JRl9OT1RfRVhJU1QiLCByZWFkZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChqbXNCaW5kaW5nLmdldFJlc3BvbnNlQ29ubmVjdGlvbkZhY3RvcnlDcmVhdGUoKS5lcXVhbHMoSk1TQmluZGluZ0NvbnN0YW50cy5DUkVBVEVfTkVWRVIpKSB7CisgICAgICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUubGVuZ3RoKCkgPCAxKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobW9uaXRvciwgIk1pc3NpbmdOYW1lRm9yQ1JFQVRFX05FVkVSIiwgcmVhZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBqbXNCaW5kaW5nLmdldFJlc3BvbnNlQ29ubmVjdGlvbkZhY3RvcnlQcm9wZXJ0aWVzKCkucHV0QWxsKHBhcnNlQmluZGluZ1Byb3BlcnRpZXMocmVhZGVyLCBtb25pdG9yKSk7CiAgICAgfQogCiAgICAgcHJpdmF0ZSB2b2lkIHBhcnNlUmVzcG9uc2VBY3RpdmF0aW9uU3BlYyhYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBKTVNCaW5kaW5nIGptc0JpbmRpbmcsIE1vbml0b3IgbW9uaXRvcikgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIik7CisgICAgICAgIFN0cmluZyBuYW1lID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJqbmRpTmFtZSIpOwogICAgICAgICBpZiAobmFtZSAhPSBudWxsICYmIG5hbWUubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICBqbXNCaW5kaW5nLnNldFJlc3BvbnNlQWN0aXZhdGlvblNwZWNOYW1lKG5hbWUpOyAgICAgICAgICAgIAotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd2FybmluZyhtb25pdG9yLCAiTWlzc2luZ1Jlc3BvbnNlQWN0aXZhdGlvblNwZWMiLCByZWFkZXIpOworICAgICAgICB9CisgICAgICAgIFN0cmluZyBjcmVhdGUgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImNyZWF0ZSIpOworICAgICAgICBpZiAoY3JlYXRlICE9IG51bGwgJiYgY3JlYXRlLmxlbmd0aCgpID4gMCkgeworICAgICAgICAJdmFsaWRhdGVDcmVhdGUoY3JlYXRlLCByZWFkZXIsIG1vbml0b3IpOworICAgICAgICAgICAgam1zQmluZGluZy5zZXRSZXNwb25zZUFjdGl2YXRpb25TcGVjQ3JlYXRlKGNyZWF0ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGptc0JpbmRpbmcuZ2V0UmVzcG9uc2VBY3RpdmF0aW9uU3BlY0NyZWF0ZSgpLmVxdWFscyhKTVNCaW5kaW5nQ29uc3RhbnRzLkNSRUFURV9JRl9OT1RfRVhJU1QpKSB7CisgICAgICAgICAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUubGVuZ3RoKCkgPCAxKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobW9uaXRvciwgIk1pc3NpbmdOYW1lRm9yQ1JFQVRFX0lGX05PVF9FWElTVCIsIHJlYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGptc0JpbmRpbmcuZ2V0UmVzcG9uc2VBY3RpdmF0aW9uU3BlY0NyZWF0ZSgpLmVxdWFscyhKTVNCaW5kaW5nQ29uc3RhbnRzLkNSRUFURV9ORVZFUikpIHsKKyAgICAgICAgICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5sZW5ndGgoKSA8IDEpIHsKKyAgICAgICAgICAgICAgICBlcnJvcihtb25pdG9yLCAiTWlzc2luZ05hbWVGb3JDUkVBVEVfTkVWRVIiLCByZWFkZXIpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGptc0JpbmRpbmcuZ2V0UmVzcG9uc2VBY3RpdmF0aW9uU3BlY1Byb3BlcnRpZXMoKS5wdXRBbGwocGFyc2VCaW5kaW5nUHJvcGVydGllcyhyZWFkZXIsIG1vbml0b3IpKTsKICAgICB9CiAKKyAgICBwcml2YXRlIHZvaWQgdmFsaWRhdGVDcmVhdGUoU3RyaW5nIGNyZWF0ZSwgWE1MU3RyZWFtUmVhZGVyIHJlYWRlciwgTW9uaXRvciBtb25pdG9yKSB7CisgICAgCWlmIChKTVNCaW5kaW5nQ29uc3RhbnRzLkNSRUFURV9BTFdBWVMuZXF1YWxzKGNyZWF0ZSkpIHsKKyAgICAJCXJldHVybjsKKyAgICAJfQorICAgIAlpZiAoSk1TQmluZGluZ0NvbnN0YW50cy5DUkVBVEVfTkVWRVIuZXF1YWxzKGNyZWF0ZSkpIHsKKyAgICAJCXJldHVybjsKKyAgICAJfQorICAgIAlpZiAoSk1TQmluZGluZ0NvbnN0YW50cy5DUkVBVEVfSUZfTk9UX0VYSVNULmVxdWFscyhjcmVhdGUpKSB7CisgICAgCQlyZXR1cm47CisgICAgCX0KKyAgICAJZXJyb3IobW9uaXRvciwgIkludmFsaWRDcmVhdGUiLCByZWFkZXIsIGNyZWF0ZSk7CisJfQorCiAgICAgcHJpdmF0ZSB2b2lkIHBhcnNlUmVzcG9uc2UoWE1MU3RyZWFtUmVhZGVyIHJlYWRlciwgSk1TQmluZGluZyBqbXNCaW5kaW5nLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uLCBYTUxTdHJlYW1FeGNlcHRpb24gewogICAgICAgICAvLyBSZWFkIHN1Yi1lbGVtZW50cyBvZiByZXNwb25zZQogICAgICAgICBNb25pdG9yIG1vbml0b3IgPSBjb250ZXh0LmdldE1vbml0b3IoKTsKQEAgLTU1NSwxNSArNjc4LDE1IEBACiAgICAgcHJpdmF0ZSB2b2lkIHBhcnNlSGVhZGVycyhYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBKTVNCaW5kaW5nIGptc0JpbmRpbmcsIE1vbml0b3IgbW9uaXRvcikgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBqbXNUeXBlID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJ0eXBlIik7CiAgICAgICAgIGlmIChqbXNUeXBlICE9IG51bGwgJiYgam1zVHlwZS5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0Sk1TVHlwZShqbXNUeXBlKTsKKyAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0Sk1TSGVhZGVyVHlwZShqbXNUeXBlKTsKICAgICAgICAgfQogCiAgICAgICAgIFN0cmluZyBqbXNEZWxpdmVyeU1vZGUgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImRlbGl2ZXJ5TW9kZSIpOwogICAgICAgICBpZiAoam1zRGVsaXZlcnlNb2RlICE9IG51bGwgJiYgam1zRGVsaXZlcnlNb2RlLmxlbmd0aCgpID4gMCkgewogICAgICAgICAgICAgaWYgKCJwZXJzaXN0ZW50Ii5lcXVhbHNJZ25vcmVDYXNlKGptc0RlbGl2ZXJ5TW9kZSkpIHsKLSAgICAgICAgICAgICAgICBqbXNCaW5kaW5nLnNldEpNU0RlbGl2ZXJ5TW9kZSh0cnVlKTsKKyAgICAgICAgICAgICAgICBqbXNCaW5kaW5nLnNldEpNU0hlYWRlckRlbGl2ZXJ5TW9kZSh0cnVlKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIm5vbnBlcnNpc3RlbnQiLmVxdWFsc0lnbm9yZUNhc2Uoam1zRGVsaXZlcnlNb2RlKSkgewotICAgICAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0Sk1TRGVsaXZlcnlNb2RlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBqbXNCaW5kaW5nLnNldEpNU0hlYWRlckRlbGl2ZXJ5TW9kZShmYWxzZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJJbnZhbGlkSk1TRGVsaXZlcnlNb2RlIiwgam1zQmluZGluZywgam1zRGVsaXZlcnlNb2RlKTsKICAgICAgICAgICAgIH0KQEAgLTU3MSw3ICs2OTQsNyBAQAogCiAgICAgICAgIFN0cmluZyBqbXNUaW1lVG9MaXZlID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJ0aW1lVG9MaXZlIik7CiAgICAgICAgIGlmIChqbXNUaW1lVG9MaXZlICE9IG51bGwgJiYgam1zVGltZVRvTGl2ZS5sZW5ndGgoKSA+IDApIHsKLSAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0Sk1TVGltZVRvTGl2ZShMb25nLnBhcnNlTG9uZyhqbXNUaW1lVG9MaXZlKSk7CisgICAgICAgICAgICBqbXNCaW5kaW5nLnNldEpNU0hlYWRlclRpbWVUb0xpdmUoTG9uZy5wYXJzZUxvbmcoam1zVGltZVRvTGl2ZSkpOwogICAgICAgICB9CiAKICAgICAgICAgU3RyaW5nIGptc1ByaW9yaXR5ID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJwcmlvcml0eSIpOwpAQCAtNTc5LDcgKzcwMiw3IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGludCBwID0gSW50ZWdlci5wYXJzZUludChqbXNQcmlvcml0eSk7CiAgICAgICAgICAgICAgICAgaWYgKHAgPj0gMCAmJiBwIDw9IDkpIHsKLSAgICAgICAgICAgICAgICAgICAgam1zQmluZGluZy5zZXRKTVNQcmlvcml0eShwKTsKKyAgICAgICAgICAgICAgICAgICAgam1zQmluZGluZy5zZXRKTVNIZWFkZXJQcmlvcml0eShwKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICB3YXJuaW5nKG1vbml0b3IsICJJbnZhbGlkSk1TUHJpb3JpdHkiLCBqbXNCaW5kaW5nLCBqbXNQcmlvcml0eSk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNjA5LDkgKzczMiwxMiBAQAogICAgIHByaXZhdGUgdm9pZCBwYXJzZVByb3BlcnR5KFhNTFN0cmVhbVJlYWRlciByZWFkZXIsIEpNU0JpbmRpbmcgam1zQmluZGluZykgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbiB7CiAgICAgICAgIGptc0JpbmRpbmcuc2V0SGVhZGVycyggdHJ1ZSApOwogICAgICAgICBTdHJpbmcgbmFtZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpOwotICAgICAgICBTdHJpbmcgdHlwZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAidHlwZSIpOyAgICAgICAgCisgICAgICAgIFFOYW1lIHR5cGVOYW1lID0gU3RBWEhlbHBlci5nZXRBdHRyaWJ1dGVBc1FOYW1lKHJlYWRlciwgInR5cGUiKTsKKyAgICAgICAgU3RyaW5nIHR5cGUgPSB0eXBlTmFtZSA9PSBudWxsID8gbnVsbCA6IHR5cGVOYW1lLmdldExvY2FsUGFydCgpOyAKKyAgICAgICAgCiAgICAgICAgIGlmIChuYW1lICE9IG51bGwgJiYgbmFtZS5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHJlYWRlci5nZXRFbGVtZW50VGV4dCgpOworICAgICAgICAgICAKICAgICAgICAgICAgIGlmICgiYm9vbGVhbiIuZXF1YWxzSWdub3JlQ2FzZSh0eXBlKSkgewogICAgICAgICAgICAgICAgIHZhbHVlID0gQm9vbGVhbi5wYXJzZUJvb2xlYW4oKFN0cmluZyl2YWx1ZSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCJieXRlIi5lcXVhbHNJZ25vcmVDYXNlKHR5cGUpKSB7CkBAIC02MzQsNyArNzYwLDcgQEAKICAgICB9CiAKICAgICAvKioKLSAgICAgKiA8b3BlcmF0aW9uUHJvcGVydGllcyBuYW1lPSJzdHJpbmciIG5hdGl2ZU9wZXJhdGlvbj0ic3RyaW5nIj8+CisgICAgICogPG9wZXJhdGlvblByb3BlcnRpZXMgbmFtZT0ic3RyaW5nIiBzZWxlY3RlZE9wZXJhdGlvbj0ic3RyaW5nIj8+CiAgICAgICogICA8cHJvcGVydHkgbmFtZT0iTk1UT0tFTiIgdHlwZT0iTk1UT0tFTiI/PioKICAgICAgKiAgIDxoZWFkZXJzIEpNU1R5cGU9InN0cmluZyI/CiAgICAgICogICAgICAgICAgICBKTVNDb3JyZWxhdGlvbklEPSJzdHJpbmciPwpAQCAtNjUzLDEyICs3NzksMTIgQEAKICAgICAgICAgCiAgICAgICAgIFN0cmluZyBvcE5hbWUgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgIm5hbWUiKTsKICAgICAgICAgaWYgKG9wTmFtZSA9PSBudWxsIHx8IG9wTmFtZS5sZW5ndGgoKSA8IDEpIHsKLSAgICAgICAgICAgIHdhcm5pbmcobW9uaXRvciwgIk1pc3NpbmdKTVNPcGVyYXRpb25Qcm9wZXJ0eU5hbWUiLCBqbXNCaW5kaW5nKTsKKyAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJNaXNzaW5nSk1TT3BlcmF0aW9uUHJvcGVydHlOYW1lIiwgam1zQmluZGluZyk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gU2luY2UgbmF0aXZlT3BOYW1lLCBoZWFkZXJzLCBhbmQgcHJvcGVydHkgZWxlbWVudHMgYXJlIG9wdGlvbmFsLCBtdXN0IGFkZCBvcE5hbWUuCiAgICAgICAgIGptc0JpbmRpbmcuYWRkT3BlcmF0aW9uTmFtZShvcE5hbWUpOwotICAgICAgICBTdHJpbmcgbmF0aXZlT3BOYW1lID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYXRpdmVPcGVyYXRpb24iKTsgLy8gb3B0aW9uYWwKKyAgICAgICAgU3RyaW5nIG5hdGl2ZU9wTmFtZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAic2VsZWN0ZWRPcGVyYXRpb24iKTsgLy8gb3B0aW9uYWwKICAgICAgICAgaWYgKG5hdGl2ZU9wTmFtZSAhPSBudWxsICYmIG5hdGl2ZU9wTmFtZS5sZW5ndGgoKSA+IDApIHsKICAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0TmF0aXZlT3BlcmF0aW9uTmFtZShvcE5hbWUsIG5hdGl2ZU9wTmFtZSk7CiAgICAgICAgIH0KQEAgLTc0OSw3ICs4NzUsOCBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHBhcnNlT3BlcmF0aW9uUHJvcGVydHlQcm9wZXJ0aWVzKFhNTFN0cmVhbVJlYWRlciByZWFkZXIsIEpNU0JpbmRpbmcgam1zQmluZGluZywgU3RyaW5nIG9wTmFtZSkgdGhyb3dzIFhNTFN0cmVhbUV4Y2VwdGlvbiB7CiAgICAgICAgIFN0cmluZyBwcm9wTmFtZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpOwotICAgICAgICBTdHJpbmcgdHlwZSA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAidHlwZSIpOworICAgICAgICBRTmFtZSB0eXBlTmFtZSA9IFN0QVhIZWxwZXIuZ2V0QXR0cmlidXRlQXNRTmFtZShyZWFkZXIsICJ0eXBlIik7CisgICAgICAgIFN0cmluZyB0eXBlID0gdHlwZU5hbWUgPT0gbnVsbCA/IG51bGwgOiB0eXBlTmFtZS5nZXRMb2NhbFBhcnQoKTsgCiAgICAgICAgIGlmIChwcm9wTmFtZSAhPSBudWxsICYmIHByb3BOYW1lLmxlbmd0aCgpID4gMCkgewogICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gcmVhZGVyLmdldEVsZW1lbnRUZXh0KCk7CiAgICAgICAgICAgICBpZiAoImJvb2xlYW4iLmVxdWFsc0lnbm9yZUNhc2UodHlwZSkpIHsKQEAgLTc3NSw3ICs5MDIsNyBAQAogCiAgICAgcHJpdmF0ZSB2b2lkIHBhcnNlU3Vic2NyaXB0aW9uSGVhZGVycyhYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBKTVNCaW5kaW5nIGptc0JpbmRpbmcpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgam1zU2VsZWN0b3IgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInNlbGVjdG9yIik7Ci0gICAgICAgIGlmIChqbXNTZWxlY3RvciAhPSBudWxsICYmIGptc1NlbGVjdG9yLmxlbmd0aCgpID4gMCkgeworICAgICAgICBpZiAoam1zU2VsZWN0b3IgIT0gbnVsbCAmJiBqbXNTZWxlY3Rvci5sZW5ndGgoKSA+IDAgJiYgam1zQmluZGluZy5nZXRKTVNTZWxlY3RvcigpID09IG51bGwpIHsKICAgICAgICAgICAgIGptc0JpbmRpbmcuc2V0Sk1TU2VsZWN0b3Ioam1zU2VsZWN0b3IpOwogICAgICAgICB9CiAgICAgICAgIApAQCAtODcxLDYgKzk5OCwzOSBAQAogICAgICAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJDb25uZWN0aW9uRmFjdG9yeUFjdGl2YXRpb25TcGVjQ29udHJhZGljdGlvbiIsIGptc0JpbmRpbmcsIGNvbm5lY3Rpb25GYWN0b3J5TmFtZSwgYWN0aXZhdGlvblNwZWNOYW1lICk7ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZiBVUkkgaXMgc3BlY2lmaWVkLCBkZXN0aW5hdGlvbiBzaG91bGQgbm90IGJlIHByZXNlbnQKKyAgICAgICAgaWYgKCAoIGptc0JpbmRpbmcuZ2V0Sk1TVVJJKCkgIT0gbnVsbCApICYmICggam1zQmluZGluZy5nZXRKTVNVUkkoKS5sZW5ndGgoKSA+IDApICYmCisgICAgICAgIAkJKGptc0JpbmRpbmcuaXNEZXN0aW5hdGlvblNwZWNpZmllZCgpKSkgeworICAgICAgICAJZXJyb3IobW9uaXRvciwgIkRlc3RpbmF0aW9uVVJJQ29udHJhZGljdGlvbiIsIGptc0JpbmRpbmcsIGptc0JpbmRpbmcuZ2V0Sk1TVVJJKCksIGptc0JpbmRpbmcuZ2V0RGVzdGluYXRpb25OYW1lKCkpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZiBhY3RpdmF0aW9uIHNwZWMgYW5kIGRlc3RpbmF0aW9uIGFyZSBib3RoIHNwZWNpZmllZCwgdGhleSBoYXZlIHRvIG1hdGNoCisgICAgICAgIGlmICggKCBqbXNCaW5kaW5nLmdldEFjdGl2YXRpb25TcGVjTmFtZSgpICE9IG51bGwgKSAmJiAoam1zQmluZGluZy5nZXRBY3RpdmF0aW9uU3BlY05hbWUoKS5sZW5ndGgoKSA+IDAgKSAmJgorICAgICAgICAJCShqbXNCaW5kaW5nLmdldERlc3RpbmF0aW9uTmFtZSgpICE9IG51bGwpICYmIChqbXNCaW5kaW5nLmdldERlc3RpbmF0aW9uTmFtZSgpLmxlbmd0aCgpID4gMCApICkgeworICAgICAgICAJaWYgKCAham1zQmluZGluZy5nZXRBY3RpdmF0aW9uU3BlY05hbWUoKS5lcXVhbHMoam1zQmluZGluZy5nZXREZXN0aW5hdGlvbk5hbWUoKSkpIHsKKyAgICAgICAgCQllcnJvcihtb25pdG9yLCAiQWN0aXZhdGlvblNwZWNBbmREZXN0aW5hdGlvbk1pc21hdGNoIiwgam1zQmluZGluZywgam1zQmluZGluZy5nZXRBY3RpdmF0aW9uU3BlY05hbWUoKSwgam1zQmluZGluZy5nZXREZXN0aW5hdGlvbk5hbWUoKSk7CisgICAgICAgIAl9CisgICAgICAgIH0KKworICAgICAgICBpZiAoICggam1zQmluZGluZy5nZXRSZXNwb25zZUFjdGl2YXRpb25TcGVjTmFtZSgpICE9IG51bGwgKSAmJiAoam1zQmluZGluZy5nZXRSZXNwb25zZUFjdGl2YXRpb25TcGVjTmFtZSgpLmxlbmd0aCgpID4gMCApICYmCisgICAgICAgIAkJKGptc0JpbmRpbmcuZ2V0UmVzcG9uc2VEZXN0aW5hdGlvbk5hbWUoKSAhPSBudWxsICkgJiYgKGptc0JpbmRpbmcuZ2V0UmVzcG9uc2VEZXN0aW5hdGlvbk5hbWUoKS5sZW5ndGgoKSA+IDAgKSApIHsKKyAgICAgICAgCWlmICggIWptc0JpbmRpbmcuZ2V0UmVzcG9uc2VBY3RpdmF0aW9uU3BlY05hbWUoKS5lcXVhbHMoam1zQmluZGluZy5nZXRSZXNwb25zZURlc3RpbmF0aW9uTmFtZSgpKSkgeworICAgICAgICAJCWVycm9yKG1vbml0b3IsICJBY3RpdmF0aW9uU3BlY0FuZERlc3RpbmF0aW9uTWlzbWF0Y2giLCBqbXNCaW5kaW5nLCBqbXNCaW5kaW5nLmdldFJlc3BvbnNlQWN0aXZhdGlvblNwZWNOYW1lKCksIGptc0JpbmRpbmcuZ2V0UmVzcG9uc2VEZXN0aW5hdGlvbk5hbWUoKSk7CisgICAgICAgIAl9CisgICAgICAgIH0KKyAgICAgICAgLy8gSWYgYWN0aXZhdGlvbiBzcGVjIGV4aXN0cyB3aXRoIGNyZWF0ZT1hbHdheXMsIGEgam5kaU5hbWUgbXVzdCBiZSBzcGVjaWZpZWQKKyAgICAgICAgaWYgKEpNU0JpbmRpbmdDb25zdGFudHMuQ1JFQVRFX0FMV0FZUy5lcXVhbHMoam1zQmluZGluZy5nZXRBY3RpdmF0aW9uU3BlY0NyZWF0ZSgpKSAmJgorICAgICAgICAJCShqbXNCaW5kaW5nLmdldEFjdGl2YXRpb25TcGVjTmFtZSgpID09IG51bGwpKSB7CisgICAgICAgIAllcnJvcihtb25pdG9yLCAiQWN0aXZhdGlvblNwZWNOYW1lUmVxdWlyZWRGb3JDcmVhdGVBbHdheXMiLCBqbXNCaW5kaW5nKTsKKyAgICAgICAgfQorICAgICAgICAvLyBJZiBDb25uZWN0aW9uIGZhY3Rvcnkgc3BlY2lmaWVkIHRoZW4gZGVzdGluYXRpb24gbmFtZSBtdXN0IGFsc28gYmUKKyAgICAgICAgaWYgKCggY29ubmVjdGlvbkZhY3RvcnlOYW1lICE9IG51bGwgKSAmJiAoIGNvbm5lY3Rpb25GYWN0b3J5TmFtZS5sZW5ndGgoKSA+IDAgKSkgeworICAgICAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uTmFtZSA9IGptc0JpbmRpbmcuZ2V0RGVzdGluYXRpb25OYW1lKCk7CisgICAgICAgICAgICBpZiAoKGRlc3RpbmF0aW9uTmFtZSA9PSBudWxsKSB8fCAoZGVzdGluYXRpb25OYW1lLmxlbmd0aCgpIDwgMSApKSB7CisgICAgICAgICAgICAgICAgZXJyb3IobW9uaXRvciwgIkNvbm5lY3Rpb25GYWN0b3J5RGVzdGluYXRpb25Db250cmFkaWN0aW9uIiwgam1zQmluZGluZywgY29ubmVjdGlvbkZhY3RvcnlOYW1lKTsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICAvLyBHaXZlbiBhIHJlc3BvbnNlIGNvbm5lY3Rpb24gbmFtZSBhdHRyaWJ1dGUsIHRoZXJlIG11c3Qgbm90IGJlIGEgcmVzcG9uc2UgZWxlbWVudC4KICAgICAgICAgLy8gMTU2ICAvYmluZGluZy5qbXMvQHJlc3BvbnNlQ29ubmVjdGlvbiAtIGlkZW50aWZpZXMgYSBiaW5kaW5nLmptcyBlbGVtZW50IHRoYXQgaXMgcHJlc2VudCBpbiBhCkBAIC04ODQsNiArMTA0NCwxMyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgLy8gW0JKTTMwMDI5XSBUaGUgdmFsdWUgb2YgdGhlIG9wZXJhdGlvblByb3BlcnRpZXMvQHNlbGVjdGVkT3BlcmF0aW9uIGF0dHJpYnV0ZSBNVVNUIGJlIHVuaXF1ZSBhY3Jvc3MgdGhlIGNvbnRhaW5pbmcgYmluZGluZy5qbXMgZWxlbWVudAorICAgICAgICBTZXQ8U3RyaW5nPiBvcHMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KGptc0JpbmRpbmcuZ2V0TmF0aXZlT3BlcmF0aW9uTmFtZXMoKS52YWx1ZXMoKSk7CisgICAgICAgIGlmIChvcHMuc2l6ZSgpICE9IGptc0JpbmRpbmcuZ2V0TmF0aXZlT3BlcmF0aW9uTmFtZXMoKS52YWx1ZXMoKS5zaXplKCkpIHsKKyAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJCSk0zMDAyOSIsIGptc0JpbmRpbmcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgCiAgICAgICAgIC8vIE90aGVyIGptc0JpbmRpbmcgbW9kZWwgdmFsaWRhdGlvbiBtYXkgYmUgYWRkZWQgaGVyZS4KIAogICAgIH0KQEAgLTkxNiw4ICsxMDgzLDEwIEBACiAgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoIm5hbWUiLCBqbXNCaW5kaW5nLmdldE5hbWUoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoam1zQmluZGluZy5nZXRVUkkoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoInVyaSIsIGptc0JpbmRpbmcuZ2V0VVJJKCkpOworICAgICAgICBpZiAoam1zQmluZGluZy5nZXRKTVNVUkkoKSAhPSBudWxsKSB7CisgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoInVyaSIsIGptc0JpbmRpbmcuZ2V0Sk1TVVJJKCkpOworICAgICAgICAgICAgd3JpdGVFbmQod3JpdGVyKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vU3RyaW5nIGRlc3QgPSBqbXNCaW5kaW5nLmdldERlc3RpbmF0aW9uTmFtZSgpOwpAQCAtMTAxMCwxMiArMTE3OSwxMiBAQAogCiAgICAgICAgIHdyaXRlci53cml0ZVN0YXJ0RWxlbWVudChDb25zdGFudHMuU0NBMTFfTlMsIEpNU0JpbmRpbmdDb25zdGFudHMuSEVBREVSUyk7CiAKLSAgICAgICAgU3RyaW5nIGptc1R5cGUgPSBqbXNCaW5kaW5nLmdldEpNU1R5cGUoKTsKKyAgICAgICAgU3RyaW5nIGptc1R5cGUgPSBqbXNCaW5kaW5nLmdldEpNU0hlYWRlclR5cGUoKTsKICAgICAgICAgaWYgKGptc1R5cGUgIT0gbnVsbCAmJiBqbXNUeXBlLmxlbmd0aCgpID4gMCkgewogICAgICAgICAgICAgd3JpdGVyLndyaXRlQXR0cmlidXRlKCJ0eXBlIiwgam1zVHlwZSk7CiAgICAgICAgIH0KIAotICAgICAgICBCb29sZWFuIGptc0RlbGl2ZXJ5TW9kZSA9IGptc0JpbmRpbmcuaXNkZWxpdmVyeU1vZGVQZXJzaXN0ZW50KCk7CisgICAgICAgIEJvb2xlYW4gam1zRGVsaXZlcnlNb2RlID0gam1zQmluZGluZy5pc0hlYWRlckRlbGl2ZXJ5TW9kZVBlcnNpc3RlbnQoKTsKICAgICAgICAgaWYgKGptc0RlbGl2ZXJ5TW9kZSAhPSBudWxsKSB7CiAgICAgICAgICAgICBpZiAoIGptc0RlbGl2ZXJ5TW9kZS5ib29sZWFuVmFsdWUoKSApCiAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoImRlbGl2ZXJ5TW9kZSIsICJwZXJzaXN0ZW50Iik7CkBAIC0xMDIzLDEyICsxMTkyLDEyIEBACiAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoImRlbGl2ZXJ5TW9kZSIsICJub25wZXJzaXN0ZW50Iik7CiAgICAgICAgIH0KIAotICAgICAgICBMb25nIGptc1RpbWVUb0xpdmUgPSBqbXNCaW5kaW5nLmdldEpNU1RpbWVUb0xpdmUoKTsKKyAgICAgICAgTG9uZyBqbXNUaW1lVG9MaXZlID0gam1zQmluZGluZy5nZXRKTVNIZWFkZXJUaW1lVG9MaXZlKCk7CiAgICAgICAgIGlmIChqbXNUaW1lVG9MaXZlICE9IG51bGwpIHsKICAgICAgICAgICAgIHdyaXRlci53cml0ZUF0dHJpYnV0ZSgidGltZVRvTGl2ZSIsIGptc1RpbWVUb0xpdmUudG9TdHJpbmcoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBJbnRlZ2VyIGptc1ByaW9yaXR5ID0gam1zQmluZGluZy5nZXRKTVNQcmlvcml0eSgpOworICAgICAgICBJbnRlZ2VyIGptc1ByaW9yaXR5ID0gam1zQmluZGluZy5nZXRKTVNIZWFkZXJQcmlvcml0eSgpOwogICAgICAgICBpZiAoam1zUHJpb3JpdHkgIT0gbnVsbCkgewogICAgICAgICAgICAgd3JpdGVyLndyaXRlQXR0cmlidXRlKCJwcmlvcml0eSIsIGptc1ByaW9yaXR5LnRvU3RyaW5nKCkpOwogICAgICAgICB9CkBAIC0xMTA0LDcgKzEyNzMsNyBAQAogICAgIC8qKgogICAgICAqIFdyaXRlcyBvcGVyYXRpb24gcHJvcGVydGllcyBpZiB0aGVyZSBhcmUgYW55LgogICAgICAqIAotICAgICAqICAgICA8b3BlcmF0aW9uUHJvcGVydGllcyBuYW1lPSJzdHJpbmciIG5hdGl2ZU9wZXJhdGlvbj0ic3RyaW5nIj8+CisgICAgICogICAgIDxvcGVyYXRpb25Qcm9wZXJ0aWVzIG5hbWU9InN0cmluZyIgc2VsZWN0ZWRPcGVyYXRpb249InN0cmluZyI/PgogICAgICAqICAgICAgICAgPHByb3BlcnR5IG5hbWU9Ik5NVE9LRU4iIHR5cGU9Ik5NVE9LRU4iPioKICAgICAgKiAgICAgICAgIDxoZWFkZXJzIEpNU1R5cGU9InN0cmluZyI/CiAgICAgICogICAgICAgICAgICAgICAgICBKTVNDb3JyZWxhdGlvbklEPSJzdHJpbmciPwpAQCAtMTEzNCw3ICsxMzAzLDcgQEAKICAgICAgICAgICAgIFN0cmluZyBuYXRpdmVPcGVyYXRpb24gPSBqbXNCaW5kaW5nLmdldE5hdGl2ZU9wZXJhdGlvbk5hbWUob3BOYW1lKTsKICAgICAgICAgICAgIGlmIChuYXRpdmVPcGVyYXRpb24gIT0gbnVsbCAmJiBuYXRpdmVPcGVyYXRpb24ubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAgaWYgKCAhbmF0aXZlT3BlcmF0aW9uLmVxdWFscyggb3BOYW1lICkpIHsKLSAgICAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoIm5hdGl2ZU9wZXJhdGlvbiIsIG5hdGl2ZU9wZXJhdGlvbik7CisgICAgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlQXR0cmlidXRlKCJzZWxlY3RlZE9wZXJhdGlvbiIsIG5hdGl2ZU9wZXJhdGlvbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9PcGVyYXRpb25TZWxlY3RvckpNU0RlZmF1bHQuamF2YSBiL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL09wZXJhdGlvblNlbGVjdG9ySk1TRGVmYXVsdC5qYXZhCmluZGV4IGEwMmRlY2QuLjk1NzNkZGYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL09wZXJhdGlvblNlbGVjdG9ySk1TRGVmYXVsdC5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL09wZXJhdGlvblNlbGVjdG9ySk1TRGVmYXVsdC5qYXZhCkBAIC0zMCw3ICszMCw3IEBACiAgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKICAqLwogcHVibGljIGNsYXNzIE9wZXJhdGlvblNlbGVjdG9ySk1TRGVmYXVsdCBpbXBsZW1lbnRzIE9wZXJhdGlvblNlbGVjdG9yIHsKLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIE9QRVJBVElPTl9TRUxFQ1RPUl9KTVNfREVGQVVMVF9RTkFNRSA9IG5ldyBRTmFtZShDb25zdGFudHMuU0NBMTFfVFVTQ0FOWV9OUywgIm9wZXJhdGlvblNlbGVjdG9yLmptc2RlZmF1bHQiKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIE9QRVJBVElPTl9TRUxFQ1RPUl9KTVNfREVGQVVMVF9RTkFNRSA9IG5ldyBRTmFtZShDb25zdGFudHMuU0NBMTFfTlMsICJvcGVyYXRpb25TZWxlY3Rvci5qbXNEZWZhdWx0Iik7CiAgICAgCiAgICAgcHVibGljIFFOYW1lIGdldFNjaGVtYU5hbWUoKSB7CiAgICAgICAgIHJldHVybiBPUEVSQVRJT05fU0VMRUNUT1JfSk1TX0RFRkFVTFRfUU5BTUU7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy93aXJlZm9ybWF0L1dpcmVGb3JtYXRKTVNEZWZhdWx0LmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy93aXJlZm9ybWF0L1dpcmVGb3JtYXRKTVNEZWZhdWx0LmphdmEKaW5kZXggNWMzM2EzZS4uM2I0MjllNSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvd2lyZWZvcm1hdC9XaXJlRm9ybWF0Sk1TRGVmYXVsdC5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3dpcmVmb3JtYXQvV2lyZUZvcm1hdEpNU0RlZmF1bHQuamF2YQpAQCAtMjgsNyArMjgsNyBAQAogICogQHZlcnNpb24gJFJldiQgJERhdGUkCiAgKi8KIHB1YmxpYyBjbGFzcyBXaXJlRm9ybWF0Sk1TRGVmYXVsdCBpbXBsZW1lbnRzIFdpcmVGb3JtYXQgewotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgUU5hbWUgV0lSRV9GT1JNQVRfSk1TX0RFRkFVTFRfUU5BTUUgPSBuZXcgUU5hbWUoQ29uc3RhbnRzLlNDQTExX1RVU0NBTllfTlMsICJ3aXJlRm9ybWF0Lmptc2RlZmF1bHQiKTsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFFOYW1lIFdJUkVfRk9STUFUX0pNU19ERUZBVUxUX1FOQU1FID0gbmV3IFFOYW1lKENvbnN0YW50cy5TQ0ExMV9OUywgIndpcmVGb3JtYXQuam1zRGVmYXVsdCIpOwogICAgIAogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFdJUkVfRk9STUFUX0pNU19ERUZBVUxUX0ZPUk1BVF9BVFRSID0gInNlbmRGb3JtYXQiOwogICAgIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvciBiL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IKaW5kZXggM2U2YjJkOC4uOGU5ODRjNSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgorKysgYi9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yCkBAIC0xNywxMyArMTcsMTMgQEAKIA0KICMgSW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRoZSBhcnRpZmFjdCBwcm9jZXNzb3IgZXh0ZW5zaW9uDQogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nUHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiNiaW5kaW5nLmptcyxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmcNCi1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU0RlZmF1bHRQcm9jZXNzb3I7cW5hbWU9aHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xI3dpcmVGb3JtYXQuam1zZGVmYXVsdCxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU0RlZmF1bHQNCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU0RlZmF1bHRQcm9jZXNzb3I7cW5hbWU9aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyI3dpcmVGb3JtYXQuam1zRGVmYXVsdCxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU0RlZmF1bHQNCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU1RleHRYTUxQcm9jZXNzb3I7cW5hbWU9aHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xI3dpcmVGb3JtYXQuam1zVGV4dFhNTCxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU1RleHRYTUwNCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU0J5dGVzUHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSN3aXJlRm9ybWF0Lmptc0J5dGVzLG1vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMud2lyZWZvcm1hdC5XaXJlRm9ybWF0Sk1TQnl0ZXMNCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU0J5dGVzWE1MUHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSN3aXJlRm9ybWF0Lmptc0J5dGVzWE1MLG1vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMud2lyZWZvcm1hdC5XaXJlRm9ybWF0Sk1TQnl0ZXNYTUwNCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU1RleHRQcm9jZXNzb3I7cW5hbWU9aHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xI3dpcmVGb3JtYXQuam1zVGV4dCxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU1RleHQNCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLndpcmVmb3JtYXQuV2lyZUZvcm1hdEpNU09iamVjdFByb2Nlc3NvcjtxbmFtZT1odHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEjd2lyZUZvcm1hdC5qbXNPYmplY3QsbW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy53aXJlZm9ybWF0LldpcmVGb3JtYXRKTVNPYmplY3QNCi1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLm9wZXJhdGlvbnNlbGVjdG9yLk9wZXJhdGlvblNlbGVjdG9ySk1TRGVmYXVsdFByb2Nlc3NvcjtxbmFtZT1odHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEjb3BlcmF0aW9uU2VsZWN0b3Iuam1zZGVmYXVsdCxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLm9wZXJhdGlvbnNlbGVjdG9yLk9wZXJhdGlvblNlbGVjdG9ySk1TRGVmYXVsdA0KK29yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMub3BlcmF0aW9uc2VsZWN0b3IuT3BlcmF0aW9uU2VsZWN0b3JKTVNEZWZhdWx0UHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiNvcGVyYXRpb25TZWxlY3Rvci5qbXNEZWZhdWx0LG1vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMub3BlcmF0aW9uc2VsZWN0b3IuT3BlcmF0aW9uU2VsZWN0b3JKTVNEZWZhdWx0DQogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5vcGVyYXRpb25zZWxlY3Rvci5PcGVyYXRpb25TZWxlY3RvckpNU1VzZXJQcm9wUHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSNvcGVyYXRpb25TZWxlY3Rvci5qbXNVc2VyUHJvcCxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLm9wZXJhdGlvbnNlbGVjdG9yLk9wZXJhdGlvblNlbGVjdG9ySk1TVXNlclByb3ANCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLnBvbGljeS5hdXRoZW50aWNhdGlvbi50b2tlbi5KTVNUb2tlbkF1dGhlbnRpY2F0aW9uUG9saWN5UHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSNqbXNUb2tlbkF1dGhlbnRpY2F0aW9uLG1vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMucG9saWN5LmF1dGhlbnRpY2F0aW9uLnRva2VuLkpNU1Rva2VuQXV0aGVudGljYXRpb25Qb2xpY3kNCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLnBvbGljeS5oZWFkZXIuSk1TSGVhZGVyUG9saWN5UHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSNqbXNIZWFkZXIsbW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5wb2xpY3kuaGVhZGVyLkpNU0hlYWRlclBvbGljeQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zIGIvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kZWZpbml0aW9ucy54bWwuRGVmaW5pdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFiNDViZgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zCkBAIC0wLDAgKzEsMTcgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCitvcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3BvbGljeS9kZWZpbml0aW9ucy54bWwNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlNDQURlZmluaXRpb25zUHJvdmlkZXIgYi9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlNDQURlZmluaXRpb25zUHJvdmlkZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMGRhNjQuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5TQ0FEZWZpbml0aW9uc1Byb3ZpZGVyCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotIyANCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotIyANCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KLQ0KLSMgSW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIFNDQSBEZWZpbml0aW9ucyBQcm92aWRlcnMNCi1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLnBvbGljeS5KTVNCaW5kaW5nRGVmaW5pdGlvbnNQcm92aWRlcg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vcmVzb3VyY2VzL2JpbmRpbmctam1zLXZhbGlkYXRpb24tbWVzc2FnZXMucHJvcGVydGllcyBiL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vcmVzb3VyY2VzL2JpbmRpbmctam1zLXZhbGlkYXRpb24tbWVzc2FnZXMucHJvcGVydGllcwppbmRleCAzM2Q2YTlkLi42ZmU1NWYxIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL3Jlc291cmNlcy9iaW5kaW5nLWptcy12YWxpZGF0aW9uLW1lc3NhZ2VzLnByb3BlcnRpZXMKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZy1qbXMtdmFsaWRhdGlvbi1tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0zMyw3ICszMyw3IEBACiBNaXNzaW5nQWN0aXZhdGlvblNwZWNOYW1lID0gTWlzc2luZyBBY3RpdmF0aW9uU3BlYyBOYW1lCiBNaXNzaW5nUmVzcG9uc2VBY3RpdmF0aW9uU3BlYyA9IE1pc3NpbmcgcmVzcG9uc2UgQWN0aXZhdGlvblNwZWMgbmFtZQogVW5rbm93blRva2VuSW5VUkkgPSBVbmtub3duIHRva2VuIHswfSBpbiB1cmk6IHsxfQotTXVzdFN0YXJ0V2l0aFNjaGVtYSA9IFVSSSBtdXN0IHN0YXJ0IHdpdGggdGhlIHNjaGVtZSAnam1zOicgZm9yIHVyaTogezB9CitNdXN0U3RhcnRXaXRoU2NoZW1hID0gVVJJIG11c3Qgc3RhcnQgd2l0aCB0aGUgc2NoZW1lICdqbXM6am5kaTonIG9yICdqbXM6cXVldWU6JyBvciAnam1zOnRvcGljOicgIGZvciB1cmk6IHswfQogSW52YWxpZENvcnJlbGF0aW9uU2NoZW1lID0gSW52YWxpZCBjb3JyZWxhdGlvblNjaGVtZTogezB9CiBVbmV4cGVjdGVkRWxlbWVudCA9IEluY29tcGxldGUgYmluZGluZy5qbXMgZGVmaW5pdGlvbiBmb3VuZCB1bmV4cGVjdGVkIGVsZW1lbnQ6IHswfQogVW5leHBlY3RlZFJlc3BvbnNlRWxlbWVudCA9IEluY29tcGxldGUgYmluZGluZy5qbXMvcmVzcG9uc2UgZGVmaW5pdGlvbiBmb3VuZCB1bmV4cGVjdGVkIGVsZW1lbnQ6IHswfQpAQCAtNDQsMTAgKzQ0LDE4IEBACiBJbnZhbGlkT1BKTVNQcmlvcml0eSA9IEludmFsaWQgT1BKTVNQcmlvcml0eTogezB9CiBEZXN0aW5hdGlvblF1ZXVlQ29udHJhZGljdGlvbiA9IERlc3RpbmF0aW9uIHR5cGUgcXVldWUgY29udHJhZGljdHMgY29ubmVjdGlvbiBmYWN0b3J5IG5hbWU6IHswfQogRGVzdGluYXRpb25Ub3BpY0NvbnRyYWRpY3Rpb24gPSBEZXN0aW5hdGlvbiB0eXBlIHRvcGljIGNvbnRyYWRpY3RzIGNvbm5lY3Rpb24gZmFjdG9yeSBuYW1lOiB7MH0KK0Rlc3RpbmF0aW9uVVJJQ29udHJhZGljdGlvbiA9IERlc3RpbmF0aW9uIHsxfSBjYW4gbm90IGJlIHNwZWNpZmllZCB3aGVuIFVSSSB7MH0gaXMgcHJlc2VudAogQ29ubmVjdGlvbkZhY3RvcnlBY3RpdmF0aW9uU3BlY0NvbnRyYWRpY3Rpb24gPSBDb25uZWN0aW9uIGZhY3RvcnkgXCJ7MH1cIiBhbmQgYWN0aXZhdGlvbiBzcGVjaWZpY2F0aW9uIFwiezB9XCIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAgICAgICAgICAgICAgICAKK0Nvbm5lY3Rpb25GYWN0b3J5RGVzdGluYXRpb25Db250cmFkaWN0aW9uID0gV2hlbiBjb25uZWN0aW9uIGZhY3RvcnkgXCJ7MH1cIiBlbGVtZW50IGlzIHByZXNlbnQgdGhlbiBhIGRlc3RpbmF0aW9uIG5hbWUgbXVzdCBhbHNvIGJlIGRlZmluZWQgICAgICAgICAgICAgICAgCiBSZXNwb25zZUF0dHJFbGVtZW50ID0gUmVzcG9uc2UgY29ubmVjdGlvbiBcInswfVwiIGFuZCByZXNwb25zZSBlbGVtZW50IFwiezF9XCIgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIEJpbmRpbmdOb3RGb3VuZCA9IHswfSByZWZlcnMgdG8gYSBiaW5kaW5nIGRlZmluaXRpb24gezF9IHdoaWNoIGlzIG5vdCBmb3VuZAogRHVwbGljYXRlT3BlcmF0aW9uUHJvcGVydGllcyA9IE11c3Qgbm90IHVzZSBib3RoIG9wZXJhdGlvblByb3BlcnRpZXMgYXR0cmlidXRlIGFuZCBvcGVyYXRpb25Qcm9wZXJ0aWVzIGVsZW1lbnQKIFdpcmVGb3JtYXRBbHJlYWR5RGVmaW5lZCA9IFRoZSByZXF1ZXN0IHdpcmVmb3JtYXQgaGFzIGFscmVhZHkgYmVlbiBkZWZpbmVkLiBPbmx5IG9uZSByZXF1ZXN0IHdpcmUgZm9ybWF0IGNhbiBiZSBzcGVjaWZpZWQuCiBPcFNlbGVjdG9yQWxyZWFkeURlZmluZWQgPSBNb3JlIHRoYW4gb25lIG9wZXJhdGlvbiBzZWxlY3RvciBoYXMgYmVlbiBzcGVjaWZpZWQuIE9ubHkgb25lIG9wZXJhdGlvbiBzZWxlY3RvciBjYW4gYmUgc3BlY2lmaWVkLgogUmVzcG9uc2VXaXJlZm9ybWF0QWxyZWFkeURlZmluZWQgPSBUaGUgcmVzcG9uc2Ugd2lyZWZvcm1hdCBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuIE9ubHkgb25lIHJlc3BvbnNlIHdpcmUgZm9ybWF0IGNhbiBiZSBzcGVjaWZpZWQuCitNaXNzaW5nTmFtZUZvckNSRUFURV9ORVZFUiA9IE11c3Qgc3BlY2lmeSBqbmRpTmFtZSBhdHRyaWJ1dGUgd2hlbiBjcmVhdGUgbW9kZSBpcyAibmV2ZXIiCitNaXNzaW5nTmFtZUZvckNSRUFURV9JRl9OT1RfRVhJU1QgPSBNdXN0IHNwZWNpZnkgam5kaU5hbWUgYXR0cmlidXRlIHdoZW4gY3JlYXRlIG1vZGUgaXMgImlmTm90RXhpc3QiCitJbnZhbGlkQ3JlYXRlID0gQXR0cmlidXRlIGNyZWF0ZSB7MH0gaW52YWxpZCwgbXVzdCBiZSAnYWx3YXlzJywgJ25ldmVyJywgb3IgJ2lmTm90RXhpc3QnCitBY3RpdmF0aW9uU3BlY0FuZERlc3RpbmF0aW9uTWlzbWF0Y2ggPSBBY3RpdmF0aW9uIHNwZWMgbmFtZSB7MH0gbXVzdCBtYXRjaCBkZXN0aW5hdGlvbiBuYW1lIHsxfQorQWN0aXZhdGlvblNwZWNOYW1lUmVxdWlyZWRGb3JDcmVhdGVBbHdheXMgPSBBIEpOREkgbmFtZSBtdXN0IGJlIHNwZWNpZmllZCB3aGVuIGFuIEFjdGl2YXRpb25TcGVjIGhhcyBhIGNyZWF0ZSBtb2RlIG9mICJhbHdheXMiCitCSk0zMDAyOSA9IHRoZSBzZWxlY3RlZE9wZXJhdGlvbiBhdHRyaWJ1dGUgTVVTVCBiZSB1bmlxdWUgYWNyb3NzIHRoZSBjb250YWluaW5nIGJpbmRpbmcuam1zIGVsZW1lbnQKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcG9saWN5L2RlZmluaXRpb25zLnhtbCBiL21vZHVsZXMvYmluZGluZy1qbXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvcG9saWN5L2RlZmluaXRpb25zLnhtbAppbmRleCAxYjk0ZjEzLi4zNDNiNGZjIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL3BvbGljeS9kZWZpbml0aW9ucy54bWwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9wb2xpY3kvZGVmaW5pdGlvbnMueG1sCkBAIC0xNyw3MyArMTcsMTMgQEAKICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKIC0tPgotPGRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vd3d3Lm9zb2Eub3JnL3htbG5zL3NjYS8xLjAiCi0gCQkJIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5vc29hLm9yZy94bWxucy9zY2EvMS4wIgotIAkJCSB4bWxuczpzY2E9Imh0dHA6Ly93d3cub3NvYS5vcmcveG1sbnMvc2NhLzEuMCI+Cis8c2NhOmRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisgICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKKyAgICAgICAgICAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICAgICAgICAgICAgeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIj4KIAotICAgIDwhLS0gaW50ZW50cyBub3QgeWV0IGVuYWJsZWQgLS0+Ci0gICAgPCEtLXNjYTpiaW5kaW5nVHlwZSB0eXBlPSJzY2E6YmluZGluZy5qbXMiICAKLSAgICAgICAgICAgICAgICAgICAgIGFsd2F5c1Byb3ZpZGVzPSJKTVMiCi0gICAgICAgICAgICAgICAgICAgICBtYXlQcm92aWRlPSJhdExlYXN0T25jZSBhdE1vc3RPbmNlIG9yZGVyZWQgY29udmVyc2F0aW9uIiAvLS0+Ci0gICAgICAgICAgICAgICAgICAgICAKLSAgICA8IS0tIE1KRSAyMi8wNi8yMDEwIC0gYWRkIGFzeW5jSW52b2NhdGlvbiB0byB0aGUgQG1heVByb3ZpZGUgbGlzdCwgZm9yIGFzeW5jIHNlcnZpY2VzIHN1cHBvcnQgLS0+CiAgICAgPHNjYTpiaW5kaW5nVHlwZSB0eXBlPSJzY2E6YmluZGluZy5qbXMiICAKLSAgICAgICAgICAgICAgICAgICAgIGFsd2F5c1Byb3ZpZGVzPSIiCi0gICAgICAgICAgICAgICAgICAgICBtYXlQcm92aWRlPSJzY2E6YXN5bmNJbnZvY2F0aW9uIiAvPgorICAgICAgICAgICAgICAgICAgICAgYWx3YXlzUHJvdmlkZXM9InNjYTpKTVMiCisgICAgICAgICAgICAgICAgICAgICBtYXlQcm92aWRlPSJzY2E6YXRMZWFzdE9uY2Ugc2NhOmF0TW9zdE9uY2Ugc2NhOm9yZGVyZWQgc2NhOmFzeW5jSW52b2NhdGlvbiIgLz4KIAotICAgIDwhLS0gUG9saWN5SW50ZW50cyBkZWZpbmVkIGJ5IHRoZSBTQ0EgUnVudGltZSBFeHRlbnNpb24gZm9yIEpNUyBCaW5kaW5nIC0tPgotICAgIAotICAgIDxzY2E6aW50ZW50IG5hbWU9IkpNUyIgY29uc3RyYWlucz0ic2NhOmJpbmRpbmcuam1zIj4KLSAgICAgICAgPHNjYTpkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgIENvbW11bmljYXRpb24gdGhyb3VnaCB0aGlzIGJpbmRpbmcgcmVxdWlyZXMgSk1TCi0gICAgICAgIDwvc2NhOmRlc2NyaXB0aW9uPgotICAgIDwvc2NhOmludGVudD4KLSAgICAKLSAgICA8IS0tIGRlbGl2ZXJ5IG1vZGUgLS0+Ci0gICAgPGludGVudCBuYW1lPSJkZWxpdmVyeU1vZGUiIAotICAgICAgICAgICAgY29uc3RyYWlucz0ic2NhOmJpbmRpbmcuam1zIj4KLSAgICAgICAgPGRlc2NyaXB0aW9uPgotICAgICAgICAgICAgVGhpcyBpbnRlbnQgaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGUgZGVsaXZlciBtb2RlCi0gICAgICAgICAgICBvZiB0aGUgc2VudCBtZXNzYWdlCi0gICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgPC9pbnRlbnQ+Ci0gICAgCi0gICAgPGludGVudCBuYW1lPSJkZWxpdmVyeU1vZGUucGVyc2lzdGVudCI+Ci0gICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgIE1lc3NhZ2UgYXJlIHNlbnQgcGVyc2lzdGVudGx5Ci0gICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgPC9pbnRlbnQ+Ci0gICAgCi0gICAgPGludGVudCBuYW1lPSJkZWxpdmVyeU1vZGUubm9uUGVyc2lzdGVudCI+Ci0gICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgIE1lc3NhZ2UgYXJlIHNlbnQgbm9uLXBlcnNpc3RlbnRseQotICAgICAgICA8L2Rlc2NyaXB0aW9uPgotICAgIDwvaW50ZW50PgotICAgICAgICAKLSAgICA8IS0tIHByaW9yaXR5IC0tPgotCTxpbnRlbnQgbmFtZT0icHJpb3JpdHkiIAotCSAJCWNvbnN0cmFpbnM9InNjYTpiaW5kaW5nLmptcyI+Ci0JCTxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgIFRoaXMgaW50ZW50IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIHByaW9yaXR5IG9mIHRoZSAKLSAgICAgICAgICAgIHNlbnQgbWVzc2FnZQotCQk8L2Rlc2NyaXB0aW9uPgotCTwvaW50ZW50PgotICAgIAotICAgIDxpbnRlbnQgbmFtZT0icHJpb3JpdHkuaGlnaCI+Ci0gICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgIE1lc3NhZ2VzIGFyZSBoaWdoIHByaW9yaXR5Ci0gICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgPC9pbnRlbnQ+ICAgCi0gICAgCi0gICAgPGludGVudCBuYW1lPSJwcmlvcml0eS5tZWRpdW0iPgotICAgICAgICA8ZGVzY3JpcHRpb24+Ci0gICAgICAgICAgICBNZXNzYWdlcyBhcmUgbWVkaXVtIHByaW9yaXR5Ci0gICAgICAgIDwvZGVzY3JpcHRpb24+Ci0gICAgPC9pbnRlbnQ+Ci0JICAKLSAgICA8aW50ZW50IG5hbWU9InByaW9yaXR5LmxvdyI+Ci0gICAgICAgIDxkZXNjcmlwdGlvbj4KLSAgICAgICAgICAgIE1lc3NhZ2VzIGFyZSBsb3cgcHJpb3JpdHkKLSAgICAgICAgPC9kZXNjcmlwdGlvbj4KLSAgICA8L2ludGVudD4gICAgICAKLTwvZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9zY2E6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWptcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQmluZGluZ1Byb2Nlc3NvclRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNCaW5kaW5nUHJvY2Vzc29yVGVzdENhc2UuamF2YQppbmRleCA2N2ExNDA2Li5jMWZiODlkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNCaW5kaW5nUHJvY2Vzc29yVGVzdENhc2UuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctam1zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNCaW5kaW5nUHJvY2Vzc29yVGVzdENhc2UuamF2YQpAQCAtNTMsNyArNTMsNyBAQAogICAgICAgICAgICAgKyAiIDxjb21wb25lbnQgbmFtZT1cIkhlbGxvV29ybGRDb21wb25lbnRcIj4iCiAgICAgICAgICAgICArICIgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz1cInNlcnZpY2VzLkhlbGxvV29ybGRcIi8+IgogICAgICAgICAgICAgKyAiICAgICAgPHNlcnZpY2UgbmFtZT1cIkhlbGxvV29ybGRTZXJ2aWNlXCI+IgotICAgICAgICAgICAgKyAiICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9XCJqbXM6dGVzdFF1ZXVlXCIgLz4iCisgICAgICAgICAgICArICIgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT1cImptczpqbmRpOnRlc3RRdWV1ZVwiIC8+IgogICAgICAgICAgICAgKyAiICAgICAgPC9zZXJ2aWNlPiIKICAgICAgICAgICAgICsgIiA8L2NvbXBvbmVudD4iCiAgICAgICAgICAgICArICI8L2NvbXBvc2l0ZT4iOwpAQCAtNDI2LDEwICs0MjYsMTAgQEAKICAgICAgICAgSk1TQmluZGluZyBiaW5kaW5nID0gKEpNU0JpbmRpbmcpICAgY29tcG9zaXRlLmdldENvbXBvbmVudHMoKS5nZXQoMCkuZ2V0U2VydmljZXMoKS5nZXQoMCkuZ2V0QmluZGluZ3MoKS5nZXQoMCk7CiAgICAgICAgIAogICAgICAgICBhc3NlcnROb3ROdWxsKGJpbmRpbmcpOwotICAgICAgICBhc3NlcnRFcXVhbHMoIm15VHlwZSIsIGJpbmRpbmcuZ2V0Sk1TVHlwZSgpKTsKLSAgICAgICAgYXNzZXJ0VHJ1ZShiaW5kaW5nLmlzZGVsaXZlcnlNb2RlUGVyc2lzdGVudCgpKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKDU0MzIxLCBiaW5kaW5nLmdldEpNU1RpbWVUb0xpdmUoKS5sb25nVmFsdWUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscyg1LCBiaW5kaW5nLmdldEpNU1ByaW9yaXR5KCkuaW50VmFsdWUoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygibXlUeXBlIiwgYmluZGluZy5nZXRKTVNIZWFkZXJUeXBlKCkpOworICAgICAgICBhc3NlcnRUcnVlKGJpbmRpbmcuaXNIZWFkZXJEZWxpdmVyeU1vZGVQZXJzaXN0ZW50KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoNTQzMjEsIGJpbmRpbmcuZ2V0Sk1TSGVhZGVyVGltZVRvTGl2ZSgpLmxvbmdWYWx1ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDUsIGJpbmRpbmcuZ2V0Sk1TSGVhZGVyUHJpb3JpdHkoKS5pbnRWYWx1ZSgpKTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCB0ZXN0UHJvcGVydGllczEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3BvbS54bWwgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9wb20ueG1sCmluZGV4IGQyNjUyYmIuLjUyMTc1ZGIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3BvbS54bWwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvcG9tLnhtbApAQCAtMzYsMjAgKzM2LDI4IEBACiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAorICAgICAgICA8IS0tIGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWh0dHAtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5LS0+ICAgCisKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWh0dHA8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgIAorICAgICAgICAgICAgICAgIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5qYWNrc29uPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+amFja3Nvbi1jb3JlLWFzbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuNS40PC92ZXJzaW9uPgorICAgICAgICAgICAgPHZlcnNpb24+MS42LjA8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLmphY2tzb248L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLW1hcHBlci1hc2w8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjUuNDwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICAgICAgPGRlcGVuZGVuY3k+CkBAIC01Nyw2ICs2NSwxMyBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+aHR0cGNsaWVudDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjQuMDwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZy1qc29uPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgCiAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPgpAQCAtODQsNyArOTksNyBAQAogICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAKIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9ydW50aW1lL0pTT05QSW52b2tlci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnAvcnVudGltZS9KU09OUEludm9rZXIuamF2YQppbmRleCBlNjhkOGU2Li42YjBiZmVjIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9ydW50aW1lL0pTT05QSW52b2tlci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25wL3J1bnRpbWUvSlNPTlBJbnZva2VyLmphdmEKQEAgLTY2LDEyICs2NiwxMyBAQAogCiAgICAgcHVibGljIE1lc3NhZ2UgZG9JbnZva2UoTWVzc2FnZSBtc2cpIHRocm93cyBKc29uR2VuZXJhdGlvbkV4Y2VwdGlvbiwgSnNvbk1hcHBpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBFbmNvZGVyRXhjZXB0aW9uIHsKICAgICAgICAgU3RyaW5nIHVyaSA9IGVuZHBvaW50LmdldEJpbmRpbmcoKS5nZXRVUkkoKSArICIvIiArIG9wZXJhdGlvbi5nZXROYW1lKCk7Ci0gICAgICAgIFN0cmluZ1tdIGpzb25BcmdzID0gb2JqZWN0c1RvSlNPTigoT2JqZWN0W10pbXNnLmdldEJvZHkoKSk7CisgICAgICAgIC8vU3RyaW5nW10ganNvbkFyZ3MgPSBvYmplY3RzVG9KU09OKChPYmplY3RbXSltc2cuZ2V0Qm9keSgpKTsKKyAgICAgICAgU3RyaW5nW10ganNvbkFyZ3MgPSBvYmplY3RzVG9KU09OU3RyaW5ncygoT2JqZWN0W10pbXNnLmdldEJvZHkoKSk7CiAKICAgICAgICAgU3RyaW5nIHJlc3BvbnNlSlNPTiA9IGludm9rZUhUVFBSZXF1ZXN0KHVyaSwganNvbkFyZ3MpOwogCi0gICAgICAgIE9iamVjdCByZXNwb25zZSA9IGpzb25Ub09iamVjdHMocmVzcG9uc2VKU09OKVswXTsKLSAgICAgICAgbXNnLnNldEJvZHkocmVzcG9uc2UpOworICAgICAgICAvL09iamVjdCByZXNwb25zZSA9IGpzb25Ub09iamVjdHMocmVzcG9uc2VKU09OKVswXTsKKyAgICAgICAgbXNnLnNldEJvZHkocmVzcG9uc2VKU09OKTsKIAogICAgICAgICByZXR1cm4gbXNnOwogICAgIH0KQEAgLTE0Miw2ICsxNDMsNyBAQAogICAgICAgICAgcmV0dXJuIHJlc3BvbnNlSlNPTi50b1N0cmluZygpOwogICAgIH0KIAorLyogTm90IHJlcXVpcmVkIG5vdyBKU09OIGNvbnZlcnNpb24gaXMgZGVsZWdhdGVkIHRvIGRhdGFiaW5kaW5nICAgCiAgICAgcHJvdGVjdGVkIFN0cmluZ1tdIG9iamVjdHNUb0pTT04oT2JqZWN0W10gbXNnQXJncykgdGhyb3dzIEpzb25HZW5lcmF0aW9uRXhjZXB0aW9uLCBKc29uTWFwcGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICBTdHJpbmdbXSBqc29uQXJncyA9IG5ldyBTdHJpbmdbbXNnQXJncy5sZW5ndGhdOwogICAgICAgICBmb3IgKGludCBpPTA7IGk8bXNnQXJncy5sZW5ndGg7IGkrKykgewpAQCAtMTUxLDExICsxNTMsMjIgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4ganNvbkFyZ3M7CiAgICAgfQorKi8KKyAgICAKKyAgICBwcm90ZWN0ZWQgU3RyaW5nW10gb2JqZWN0c1RvSlNPTlN0cmluZ3MoT2JqZWN0W10gbXNnQXJncykgdGhyb3dzIEpzb25HZW5lcmF0aW9uRXhjZXB0aW9uLCBKc29uTWFwcGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICBTdHJpbmdbXSBqc29uQXJncyA9IG5ldyBTdHJpbmdbbXNnQXJncy5sZW5ndGhdOworICAgICAgICBmb3IgKGludCBpPTA7IGk8bXNnQXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAganNvbkFyZ3NbaV0gPSBtc2dBcmdzW2ldLnRvU3RyaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGpzb25BcmdzOworICAgIH0gICAgCiAKKy8qIE5vdCByZXF1aXJlZCBub3cgSlNPTiBjb252ZXJzaW9uIGlzIGRlbGVnYXRlZCB0byBkYXRhYmluZGluZyAgICAKICAgICBwcm90ZWN0ZWQgT2JqZWN0W10ganNvblRvT2JqZWN0cyhTdHJpbmcganNvblJlcXVlc3QpIHRocm93cyBKc29uUGFyc2VFeGNlcHRpb24sIEpzb25NYXBwaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIENsYXNzPD8+IGMgPSBuZXcgT2JqZWN0WzBdLmdldENsYXNzKCk7CiAgICAgICAgIE9iamVjdFtdIGFyZ3MgPSAoT2JqZWN0W10pbWFwcGVyLnJlYWRWYWx1ZSgiWyIgKyBqc29uUmVxdWVzdCArIl0iLCBjKTsKICAgICAgICAgcmV0dXJuIGFyZ3M7CiAgICAgfQorKi8KICAgICAKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25wL3J1bnRpbWUvSlNPTlBSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25wL3J1bnRpbWUvSlNPTlBSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQppbmRleCA5NjgyYjMzLi5lZGE3MGUyIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9ydW50aW1lL0pTT05QUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnAvcnVudGltZS9KU09OUFJlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCkBAIC0yOCw5ICsyOCwxNyBAQAogcHVibGljIGNsYXNzIEpTT05QUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyIGltcGxlbWVudHMgUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyIHsKIAogICAgIHByaXZhdGUgRW5kcG9pbnRSZWZlcmVuY2UgZW5kcG9pbnQ7CisgICAgcHJpdmF0ZSBJbnRlcmZhY2VDb250cmFjdCBjb250cmFjdDsKIAogICAgIHB1YmxpYyBKU09OUFJlZmVyZW5jZUJpbmRpbmdQcm92aWRlcihFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludCkgewogICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgY29udHJhY3QgPSAoSW50ZXJmYWNlQ29udHJhY3QpZW5kcG9pbnQuZ2V0Q29tcG9uZW50UmVmZXJlbmNlSW50ZXJmYWNlQ29udHJhY3QoKS5jbG9uZSgpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpeworICAgICAgICAgICAgLy8gd2Uga25vdyB0aGlzIHN1cHBvcnRzIGNsb25lCisgICAgICAgIH0KKyAgICAgICAgY29udHJhY3QuZ2V0SW50ZXJmYWNlKCkucmVzZXREYXRhQmluZGluZygiSlNPTiIpOwogICAgIH0KICAgICBwdWJsaWMgSW52b2tlciBjcmVhdGVJbnZva2VyKE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKICAgICAgICAgcmV0dXJuIG5ldyBKU09OUEludm9rZXIob3BlcmF0aW9uLCBlbmRwb2ludCk7CkBAIC00Myw3ICs1MSw3IEBACiAgICAgfQogCiAgICAgcHVibGljIEludGVyZmFjZUNvbnRyYWN0IGdldEJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHJldHVybiBjb250cmFjdDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c09uZVdheUludm9jYXRpb24oKSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9ydW50aW1lL0pTT05QU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnAvcnVudGltZS9KU09OUFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YQppbmRleCA0ZTNmNzMyLi45OTFhZWIzIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9ydW50aW1lL0pTT05QU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25wL3J1bnRpbWUvSlNPTlBTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKQEAgLTMxLDEwICszMSwxOCBAQAogCiAgICAgcHJpdmF0ZSBSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQ7CiAgICAgcHJpdmF0ZSBTZXJ2bGV0SG9zdCBzZXJ2bGV0SG9zdDsKKyAgICBwcml2YXRlIEludGVyZmFjZUNvbnRyYWN0IGNvbnRyYWN0OwogCiAgICAgcHVibGljIEpTT05QU2VydmljZUJpbmRpbmdQcm92aWRlcihSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQsIFNlcnZsZXRIb3N0IHNlcnZsZXRIb3N0KSB7CiAgICAgICAgIHRoaXMuZW5kcG9pbnQgPSBlbmRwb2ludDsKICAgICAgICAgdGhpcy5zZXJ2bGV0SG9zdCA9IHNlcnZsZXRIb3N0OworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGNvbnRyYWN0ID0gKEludGVyZmFjZUNvbnRyYWN0KWVuZHBvaW50LmdldENvbXBvbmVudFNlcnZpY2VJbnRlcmZhY2VDb250cmFjdCgpLmNsb25lKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCl7CisgICAgICAgICAgICAvLyB3ZSBrbm93IHRoaXMgc3VwcG9ydHMgY2xvbmUKKyAgICAgICAgfQorICAgICAgICBjb250cmFjdC5nZXRJbnRlcmZhY2UoKS5yZXNldERhdGFCaW5kaW5nKCJKU09OIik7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc3RhcnQoKSB7CkBAIC01OCw3ICs2Niw3IEBACiAKICAgICAvLyBUT0RPOiBXaHkgYXJlIHRoZXNlIHR3byBzdGlsbCBvbiB0aGUgU2VydmljZUJpbmRpbmdQcm92aWRlciBpbnRlcmZhY2U/CiAgICAgcHVibGljIEludGVyZmFjZUNvbnRyYWN0IGdldEJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHJldHVybiBjb250cmFjdDsKICAgICB9CiAKICAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c09uZVdheUludm9jYXRpb24oKSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9ydW50aW1lL0pTT05QU2VydmxldC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnAvcnVudGltZS9KU09OUFNlcnZsZXQuamF2YQppbmRleCBiNzgyODc1Li4zMjA0ODFhIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9ydW50aW1lL0pTT05QU2VydmxldC5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25wL3J1bnRpbWUvSlNPTlBTZXJ2bGV0LmphdmEKQEAgLTIyLDYgKzIyLDcgQEAKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29tcGFyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwpAQCAtNTYsMTYgKzU3LDE5IEBACiAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgdm9pZCBzZXJ2aWNlKFNlcnZsZXRSZXF1ZXN0IHNlcnZsZXRSZXF1ZXN0LCBTZXJ2bGV0UmVzcG9uc2Ugc2VydmxldFJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICBTdHJpbmcganNvblJlcXVlc3QgPSBnZXRKU09OUmVxdWVzdChzZXJ2bGV0UmVxdWVzdCk7Ci0gICAgICAgIE9iamVjdFtdIGFyZ3MgPSBqc29uVG9PYmplY3RzKGpzb25SZXF1ZXN0KTsKKyAgICAgICAgLy9TdHJpbmcganNvblJlcXVlc3QgPSBnZXRKU09OUmVxdWVzdChzZXJ2bGV0UmVxdWVzdCk7CisgICAgICAgIC8vT2JqZWN0W10gYXJncyA9IGpzb25Ub09iamVjdHMoanNvblJlcXVlc3QpOworICAgICAgICBPYmplY3RbXSBhcmdzID0gZ2V0SlNPTlJlcXVlc3RTdHJpbmdBcnJheShzZXJ2bGV0UmVxdWVzdCk7CiAgICAgICAgIE9iamVjdCByZXNwb25zZSA9IGludm9rZVNlcnZpY2UoYXJncyk7ICAgICAgICAKLSAgICAgICAgU3RyaW5nIGpzb25SZXNwb25zZSA9IGdldEpTT05SZXNwb25zZShzZXJ2bGV0UmVxdWVzdCwgcmVzcG9uc2UpOworICAgICAgICAvL1N0cmluZyBqc29uUmVzcG9uc2UgPSBnZXRKU09OUmVzcG9uc2Uoc2VydmxldFJlcXVlc3QsIHJlc3BvbnNlKTsKKyAgICAgICAgU3RyaW5nIGpzb25SZXNwb25zZSA9IGdldEpTT05SZXNwb25zZUFzU3RyaW5nKHNlcnZsZXRSZXF1ZXN0LCByZXNwb25zZSk7CiAgICAgICAgIHNlcnZsZXRSZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKS5wcmludGxuKGpzb25SZXNwb25zZSk7CiAgICAgfQogCiAgICAgLyoqCiAgICAgICogVHVybiB0aGUgcmVxdWVzdCBpbnRvIEpTT04gCiAgICAgICovCisvKiBOb3QgcmVxdWlyZWQgbm93IEpTT04gY29udmVyc2lvbiBpcyBkZWxlZ2F0ZWQgdG8gZGF0YWJpbmRpbmcgICAgICAgCiAgICAgcHJvdGVjdGVkIFN0cmluZyBnZXRKU09OUmVxdWVzdChTZXJ2bGV0UmVxdWVzdCBzZXJ2bGV0UmVxdWVzdCkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUGFyc2VFeGNlcHRpb24sIEpzb25NYXBwaW5nRXhjZXB0aW9uIHsKICAgICAgICAgCiAgICAgICAgIExpc3Q8RGF0YVR5cGU+IHR5cGVzID0gb3BlcmF0aW9uLmdldElucHV0VHlwZSgpLmdldExvZ2ljYWwoKTsKQEAgLTk2LDYgKzEwMCw0MyBAQAogCiAgICAgICAgIHJldHVybiAiWyIgKyBqc29uUmVxdWVzdCArICJdIjsKICAgICB9CisqLworICAgIAorICAgIC8qKgorICAgICAqIFR1cm4gdGhlIHJlcXVlc3QgaW50byBhIHN0cmluZyBhcnJheSBvZiBKU09OIHN0cnVjdHVyZXMuIFRoZSBEYXRhYmluZGluZworICAgICAqIGxheWVyIHdpbGwgdGhlbiBjb252ZXJ0IGVhY2ggb2YgdGhlIGluZGl2aWR1YWwgcGFyYW1ldGVycyBpbnRvIHRoZSBhcHByb3ByaWF0ZQorICAgICAqIHR5cGVzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gaW50ZXJmYWNlCisgICAgICogCisgICAgICovCisgICAgcHJvdGVjdGVkIE9iamVjdFtdIGdldEpTT05SZXF1ZXN0U3RyaW5nQXJyYXkoU2VydmxldFJlcXVlc3Qgc2VydmxldFJlcXVlc3QpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvblBhcnNlRXhjZXB0aW9uLCBKc29uTWFwcGluZ0V4Y2VwdGlvbiB7CisgICAgICAgIAorICAgICAgICBMaXN0PERhdGFUeXBlPiB0eXBlcyA9IG9wZXJhdGlvbi5nZXRJbnB1dFR5cGUoKS5nZXRMb2dpY2FsKCk7CisgICAgICAgIGludCB0eXBlc0luZGV4ID0gMDsKKyAgICAgICAgCisgICAgICAgIExpc3Q8U3RyaW5nPiBqc29uUmVxdWVzdEFycmF5ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIAorICAgICAgICBmb3IgKFN0cmluZyBuYW1lIDogZ2V0T3JkZXJlZFBhcmFtZXRlck5hbWVzKHNlcnZsZXRSZXF1ZXN0KSkgeworICAgICAgICAgICAgU3RyaW5nIGpzb25SZXF1ZXN0ID0gIiI7CisgICAgICAgICAgICBpZiAoIW5hbWUuc3RhcnRzV2l0aCgiXyIpICYmICEiY2FsbGJhY2siLmVxdWFscyhuYW1lKSkgeworCisgICAgICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBxdW90ZSBzdHJpbmcgcGFyYW1ldGVycyBzbyBjbGllbnRzIHdvcmsgaW4gdGhlIHVzdWFsIGphdmFzY3JpcHQgd2F5ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHR5cGVzSW5kZXggPCB0eXBlcy5zaXplKCkgJiYgU3RyaW5nLmNsYXNzLmVxdWFscyh0eXBlcy5nZXQodHlwZXNJbmRleCsrKS5nZXRHZW5lcmljVHlwZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgeCA9IHNlcnZsZXRSZXF1ZXN0LmdldFBhcmFtZXRlcihuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogZG8gdGhpcyBtb3JlIHByb3Blcmx5CisgICAgICAgICAgICAgICAgICAgIGlmICgheC5zdGFydHNXaXRoKCJcIiIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqc29uUmVxdWVzdCArPSAiXCIiICsgeCArICJcIiI7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBqc29uUmVxdWVzdCArPSB4OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAganNvblJlcXVlc3QgKz0gc2VydmxldFJlcXVlc3QuZ2V0UGFyYW1ldGVyKG5hbWUpOworICAgICAgICAgICAgICAgIH0gIAorICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0QXJyYXkuYWRkKGpzb25SZXF1ZXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBqc29uUmVxdWVzdEFycmF5LnRvQXJyYXkoKTsKKyAgICB9ICAgIAogCiAgICAgLyoqCiAgICAgICogR2V0IHRoZSByZXF1ZXN0IHBhcmFtZXRlciBuYW1lcyBpbiB0aGUgY29ycmVjdCBvcmRlci4KQEAgLTEyNyw2ICsxNjgsNyBAQAogICAgIC8qKgogICAgICAqIFR1cm4gdGhlIHJlc3BvbnNlIG9iamVjdCBpbnRvIEpTT04gCiAgICAgICovCisvKiBOb3QgcmVxdWlyZWQgbm93IEpTT04gY29udmVyc2lvbiBpcyBkZWxlZ2F0ZWQgdG8gZGF0YWJpbmRpbmcgICAKICAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldEpTT05SZXNwb25zZShTZXJ2bGV0UmVxdWVzdCBzZXJ2bGV0UmVxdWVzdCwgT2JqZWN0IHJlc3BvbnNlKSB0aHJvd3MgSU9FeGNlcHRpb24sIEpzb25QYXJzZUV4Y2VwdGlvbiB7CiAgICAgICAgIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgbWFwcGVyLndyaXRlVmFsdWUob3MgLCByZXNwb25zZSk7CkBAIC0xMzksMTUgKzE4MSwzNCBAQAogCiAgICAgICAgIHJldHVybiBqc29uUmVzcG9uc2U7CiAgICAgfQorKi8KKyAgICAKKyAgICAvKioKKyAgICAgKiBUaGUgZGF0YWJpbmRpbmcgbGF5ZXIgd2lsbCBoYXZlIGNvbnZlcnRlcnRlZCB0aGUgcmV0dXJuIHR5cGUgaW50byBhIEpTT04gc3RyaW5nIHNvIHNpbXBseSAKKyAgICAgKiBhZGQgd3JhcCBpdCBmb3IgcmV0dXJuLgorICAgICAqLworICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0SlNPTlJlc3BvbnNlQXNTdHJpbmcoU2VydmxldFJlcXVlc3Qgc2VydmxldFJlcXVlc3QsIE9iamVjdCByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBKc29uUGFyc2VFeGNlcHRpb24geworICAgICAgICBTdHJpbmcganNvblJlc3BvbnNlID0gcmVzcG9uc2UudG9TdHJpbmcoKTsKKworICAgICAgICBTdHJpbmcgY2FsbGJhY2sgPSBzZXJ2bGV0UmVxdWVzdC5nZXRQYXJhbWV0ZXIoImNhbGxiYWNrIik7CisgICAgICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIGNhbGxiYWNrLmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAganNvblJlc3BvbnNlID0gY2FsbGJhY2sgKyAiKCIgKyBqc29uUmVzcG9uc2UgKyAiKTsiOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGpzb25SZXNwb25zZTsKKyAgICB9ICAgIAogCiAgICAgLyoqCiAgICAgICogVHVybiB0aGUgcmVxdWVzdCBKU09OIGludG8gb2JqZWN0cyAKICAgICAgKi8KKy8qIE5vdCByZXF1aXJlZCBub3cgSlNPTiBjb252ZXJzaW9uIGlzIGRlbGVnYXRlZCB0byBkYXRhYmluZGluZyAgICAgICAKICAgICBwcm90ZWN0ZWQgT2JqZWN0W10ganNvblRvT2JqZWN0cyhTdHJpbmcganNvblJlcXVlc3QpIHRocm93cyBJT0V4Y2VwdGlvbiwgSnNvblBhcnNlRXhjZXB0aW9uLCBKc29uTWFwcGluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIENsYXNzPD8+IGMgPSBuZXcgT2JqZWN0WzBdLmdldENsYXNzKCk7CiAgICAgICAgIE9iamVjdFtdIGFyZ3MgPSAoT2JqZWN0W10pbWFwcGVyLnJlYWRWYWx1ZShqc29uUmVxdWVzdCwgYyk7CiAgICAgICAgIHJldHVybiBhcmdzOwogICAgIH0KKyovCisgICAgCiAKICAgICAvKioKICAgICAgKiBTZW5kIHRoZSByZXF1ZXN0IGRvd24gdGhlIHdpcmUgdG8gaW52b2tlIHRoZSBzZXJ2aWNlIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeSBiL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3RvcnkKaW5kZXggZjVkOWRlMi4uZGE4NGYxYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5CkBAIC0xNiw1ICsxNiw1IEBACiAjIHVuZGVyIHRoZSBMaWNlbnNlLiANCiANCiAjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgYmluZGluZyBleHRlbnNpb24NCi1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnAucnVudGltZS5KU09OUEJpbmRpbmdQcm92aWRlckZhY3Rvcnk7bW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmpzb25wLkpTT05QQmluZGluZw0KK29yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qc29ucC5ydW50aW1lLkpTT05QQmluZGluZ1Byb3ZpZGVyRmFjdG9yeTttb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnAuSlNPTlBCaW5kaW5nLHJhbmtpbmc9MjAwDQogDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0JlYW5BLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvQmVhbkEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGZkMzY1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0JlYW5BLmphdmEKQEAgLTAsMCArMSw2MCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgaGVsbG93b3JsZDsNCisNCitwdWJsaWMgY2xhc3MgQmVhbkEgew0KKw0KKyAgICBwcm90ZWN0ZWQgQm9vbGVhbiBiOw0KKyAgICBwcm90ZWN0ZWQgU3RyaW5nIHM7DQorICAgIHByb3RlY3RlZCBpbnQgeDsNCisgICAgcHJvdGVjdGVkIEludGVnZXIgeTsNCisgICAgDQorICAgIHB1YmxpYyBCb29sZWFuIGdldEIoKSB7DQorICAgICAgICByZXR1cm4gYjsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIHZvaWQgc2V0QihCb29sZWFuIGIpIHsNCisgICAgICAgIHRoaXMuYiA9IGI7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0UygpIHsNCisgICAgICAgIHJldHVybiBzOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBzZXRTKFN0cmluZyBzKSB7DQorICAgICAgICB0aGlzLnMgPSBzOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgaW50IGdldFgoKSB7DQorICAgICAgICByZXR1cm4geDsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIHZvaWQgc2V0WChpbnQgeCkgew0KKyAgICAgICAgdGhpcy54ID0geDsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIEludGVnZXIgZ2V0WSgpIHsNCisgICAgICAgIHJldHVybiB5Ow0KKyAgICB9DQorDQorICAgIHB1YmxpYyB2b2lkIHNldFkoSW50ZWdlciB5KSB7DQorICAgICAgICB0aGlzLnkgPSB5Ow0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCmluZGV4IDk3YzUwODQuLmY0YTIwMjMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YQpAQCAtMzQsNCArMzQsMTEgQEAKICAgICAgICAgcmV0dXJuIHJlZi5zYXlIZWxsbzIoZmlyc3ROYW1lLCBsYXN0TmFtZSk7CiAgICAgfQogCisgICAgcHVibGljIEJlYW5BIHNheUhlbGxvMyhCZWFuQSBiZWFuKSB7CisgICAgICAgIHJldHVybiByZWYuc2F5SGVsbG8zKGJlYW4pOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgaW50IHNheUhlbGxvNChib29sZWFuIGZsYWcpIHsKKyAgICAgICAgcmV0dXJuIHJlZi5zYXlIZWxsbzQoZmxhZyk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YQppbmRleCA5OWYyOTU4Li5mNzNiMTg1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YQpAQCAtMjksNCArMjksMTMgQEAKICAgICAgICAgcmV0dXJuICJIZWxsbyAiICsgZmlyc3ROYW1lICsgIiAiICsgbGFzdE5hbWU7CiAgICAgfQogICAgIAorICAgIHB1YmxpYyBCZWFuQSBzYXlIZWxsbzMoQmVhbkEgYmVhbikgeworICAgICAgICBiZWFuLnNldFMoIlhZWiIpOworICAgICAgICByZXR1cm4gYmVhbjsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IHNheUhlbGxvNChib29sZWFuIGZsYWcpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQppbmRleCBiMjUyZWRkLi43OTBmZGQ3IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpAQCAtMjYsNSArMjYsOSBAQAogICAgIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgbmFtZSk7CiAKICAgICBTdHJpbmcgc2F5SGVsbG8yKFN0cmluZyBmaXJzdE5hbWUsIFN0cmluZyBsYXN0TmFtZSk7CisgICAgCisgICAgQmVhbkEgc2F5SGVsbG8zKEJlYW5BIGJlYW4pOworICAgIAorICAgIGludCBzYXlIZWxsbzQoYm9vbGVhbiBmbGFnKTsKIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS90ZXN0L0JpbmRpbmdUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS90ZXN0L0JpbmRpbmdUZXN0Q2FzZS5qYXZhCmluZGV4IGVmZWM1NmIuLjAyNTlmZGYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy90ZXN0L2phdmEvdGVzdC9CaW5kaW5nVGVzdENhc2UuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9qYXZhL3Rlc3QvQmluZGluZ1Rlc3RDYXNlLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogcGFja2FnZSB0ZXN0OwogCitpbXBvcnQgaGVsbG93b3JsZC5CZWFuQTsKIGltcG9ydCBoZWxsb3dvcmxkLkhlbGxvV29ybGRTZXJ2aWNlOwogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKQEAgLTMzLDYgKzM0LDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7CiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOworaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKIHB1YmxpYyBjbGFzcyBCaW5kaW5nVGVzdENhc2UgewpAQCAtNTUsMjIgKzU3LDUyIEBACiAgICAgICAgIFN0cmluZyByZXNwb25zZSA9IGJyLnJlYWRMaW5lKCk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImZvbyhcIkhlbGxvIHBldHJhIGFybm9sZFwiKTsiLCByZXNwb25zZSk7CiAKLSAgICB9CisgICAgfSAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFJlZmVyZW5jZSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgCi0gICAgICAgIEhlbGxvV29ybGRTZXJ2aWNlIGNsaWVudCA9IG5vZGUuZ2V0U2VydmljZShIZWxsb1dvcmxkU2VydmljZS5jbGFzcywgIkhlbGxvV29ybGRDbGllbnQiKTsKKyAgICAgICAgSGVsbG9Xb3JsZFNlcnZpY2UgY2xpZW50ID0gbm9kZS5nZXRTZXJ2aWNlKEhlbGxvV29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG9Xb3JsZENsaWVudC9IZWxsb1dvcmxkU2VydmljZS9zY2EiKTsKIAogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJIZWxsbyBiZWF0ZSIsIGNsaWVudC5zYXlIZWxsbygiYmVhdGUiKSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkhlbGxvIGJlYXRlIGFybm9sZCIsIGNsaWVudC5zYXlIZWxsbzIoImJlYXRlIiwgImFybm9sZCIpKTsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygwLCBjbGllbnQuc2F5SGVsbG80KHRydWUpKTsKKyAgICB9CisgICAgCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q29tcGxleFBhcmFtcygpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKyAgICAgICAgCisgICAgICAgIEhlbGxvV29ybGRTZXJ2aWNlIGNsaWVudCA9IG5vZGUuZ2V0U2VydmljZShIZWxsb1dvcmxkU2VydmljZS5jbGFzcywgIkhlbGxvV29ybGRDbGllbnQvSGVsbG9Xb3JsZFNlcnZpY2Uvc2NhIik7CiAKKyAgICAgICAgQmVhbkEgYmVhbiA9IG5ldyBCZWFuQSgpOworICAgICAgICBiZWFuLnNldEIodHJ1ZSk7CisgICAgICAgIGJlYW4uc2V0UygiRnJlZCIpOworICAgICAgICBiZWFuLnNldFgoMik7CisgICAgICAgIGJlYW4uc2V0WCg1KTsKKworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJYWVoiLCBjbGllbnQuc2F5SGVsbG8zKGJlYW4pLmdldFMoKSk7CisgICAgfSAgCisgICAgCisgICAgLyoKKyAgICAgKiBVbmNvbW1lbnQgdG8ga2VlcCB0aGUgc2VydmVyIHJ1bm5pbmcgc28geW91IGNhbiBwaW5nIGl0IG1hbnVhbGx5IGZyb20gYSBicm93c2VyCisgICAgICogdHJ5OgorICAgICAqICAgaHR0cDovL2xvY2FsaG9zdDo4MDg1L0hlbGxvV29ybGRDb21wb25lbnQvSGVsbG9Xb3JsZFNlcnZpY2Uvc2F5SGVsbG8zP2JlYW49eyUyMmIlMjI6JTIydHJ1ZSUyMiwlMjJzJTIyOiUyMmElMjBzdHJpbmclMjIsJTIyeCUyMjolMjIyNyUyMiwlMjJ5JTIyOiUyMjEzJTIyfSZjYWxsYmFjaz1zdWJtaXRTdWNlc3MKKyAgICAgKi8KKyAgICBAVGVzdAorICAgIEBJZ25vcmUKKyAgICBwdWJsaWMgdm9pZCB3YWl0Rm9ySW5wdXQoKXsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQcmVzcyBhIGtleSIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgU3lzdGVtLmluLnJlYWQoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KXsKKyAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICAgICAgfQogICAgIH0KIAogICAgIEBCZWZvcmVDbGFzcwogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBpbml0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgIEpldHR5U2VydmVyLnBvcnREZWZhdWx0ID0gODA4NTsKLSAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgiaGVsbG93b3JsZC5jb21wb3NpdGUiKS5zdGFydCgpOworICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJqc29ucC9oZWxsb3dvcmxkLmNvbXBvc2l0ZSIpLnN0YXJ0KCk7CiAgICAgfQogICAgIAogICAgIEBBZnRlckNsYXNzCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2NWU4ODguLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gLS0+Ci08Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0JICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKLSAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiCi0gICAgICAgICAgIG5hbWU9IkhlbGxvV29ybGRDb21wb3NpdGUiPgotICAgICAgICAgICAKLSAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRDb21wb25lbnQiPgotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iaGVsbG93b3JsZC5IZWxsb1dvcmxkSW1wbCIvPgotICAgICAgICA8c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkU2VydmljZSIgPgotICAgICAgICAgICAgPHR1c2Nhbnk6YmluZGluZy5qc29ucCAvPgotICAgICAgICA8L3NlcnZpY2U+Ci0gICAgPC9jb21wb25lbnQ+ICAgCi0gIAotICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG9Xb3JsZENsaWVudCI+Ci0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJoZWxsb3dvcmxkLkhlbGxvV29ybGRDbGllbnQiLz4KLSAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJyZWYiID4KLSAgICAgICAgICAgIDx0dXNjYW55OmJpbmRpbmcuanNvbnAgdXJpPSJodHRwOi8vbG9jYWxob3N0OjgwODUvSGVsbG9Xb3JsZENvbXBvbmVudC9IZWxsb1dvcmxkU2VydmljZSIvPgotICAgICAgICA8L3JlZmVyZW5jZT4KLSAgICA8L2NvbXBvbmVudD4gICAKLQotPC9jb21wb3NpdGU+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvanNvbnAvaGVsbG93b3JsZC5jb21wb3NpdGUgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvanNvbnAvaGVsbG93b3JsZC5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwNjExNAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucC1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9qc29ucC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAtLT4KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKwkgICAgICAgeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIgorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCIKKyAgICAgICAgICAgbmFtZT0iSGVsbG9Xb3JsZENvbXBvc2l0ZSI+CisgICAgICAgICAgIAorICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG9Xb3JsZENvbXBvbmVudCI+CisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJoZWxsb3dvcmxkLkhlbGxvV29ybGRJbXBsIi8+CisgICAgICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIiA+CisgICAgICAgICAgICA8YmluZGluZy5zY2EgbmFtZT0ic2NhIi8+CisgICAgICAgICAgICA8dHVzY2FueTpiaW5kaW5nLmpzb25wIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIi8+CisgICAgICAgIDwvc2VydmljZT4KKyAgICA8L2NvbXBvbmVudD4gICAKKyAgCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkQ2xpZW50Ij4KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImhlbGxvd29ybGQuSGVsbG9Xb3JsZENsaWVudCIvPgorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InJlZiIgPgorICAgICAgICAgICAgPGJpbmRpbmcuc2NhIG5hbWU9InNjYSIvPgorICAgICAgICAgICAgPHR1c2Nhbnk6YmluZGluZy5qc29ucCBuYW1lPSJIZWxsb1dvcmxkU2VydmljZSIgdXJpPSJodHRwOi8vbG9jYWxob3N0OjgwODUvSGVsbG9Xb3JsZENvbXBvbmVudC9IZWxsb1dvcmxkU2VydmljZSIvPgorICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICA8L2NvbXBvbmVudD4gICAKKworPC9jb21wb3NpdGU+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggMDE5Y2ZkYS4uNGZkZDkyMCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMTEsNyArMTEsMTAgQEAKIEltcG9ydC1QYWNrYWdlOiBqYXZheC54bWwubmFtZXNwYWNlLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLmltcGw7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnA7dmVyc2lvbj0iMi4wLjAiDQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmpzb25wDQogQnVuZGxlLURvY1VSTDogaHR0cDovL3d3dy5hcGFjaGUub3JnLw0KLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNSxKYXZhU0UtMS42CitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUsSmF2YVNFLTEuNg0KKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wL3BvbS54bWwgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAvcG9tLnhtbAppbmRleCBlNjM4Y2IzLi43YTIxZmJlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnAvcG9tLnhtbAorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAvcG9tLnhtbApAQCAtMzIsNyArMzIsNyBAQAogCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctaHR0cDwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnAvSlNPTlBCaW5kaW5nLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnAvSlNPTlBCaW5kaW5nLmphdmEKaW5kZXggODg3MmQ3OC4uNDU4NzhmNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25wL0pTT05QQmluZGluZy5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9KU09OUEJpbmRpbmcuamF2YQpAQCAtMTksMTMgKzE5LDIwIEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmpzb25wOwogCi1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQmluZGluZzsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5IVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5odHRwLkhUVFBEZWZhdWx0V2lyZUZvcm1hdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5pbXBsLkhUVFBCaW5kaW5nSW1wbDsKIAogLyoqCiAgKiBKU09OUCBCaW5kaW5nIG1vZGVsCiAgKi8KLXB1YmxpYyBpbnRlcmZhY2UgSlNPTlBCaW5kaW5nIGV4dGVuZHMgQmluZGluZyB7Ci0gICAgUU5hbWUgVFlQRSA9IG5ldyBRTmFtZShTQ0ExMV9UVVNDQU5ZX05TLCAiYmluZGluZy5qc29ucCIpOworcHVibGljIGNsYXNzIEpTT05QQmluZGluZyBleHRlbmRzIEhUVFBCaW5kaW5nSW1wbCB7CisgICAgcHVibGljIEpTT05QQmluZGluZygpIHsKKyAgICAgICAgc3VwZXIoKTsKKworICAgICAgICAvLyBjb25maWd1cmUgdGhlIEhUVFAgYmluZGluZyBmb3IgSlNPTlAgKHdoaWNoIGZvciB0aGUgbW9tZW50IGlzIHRoZSBkZWZhdWx0IHdpcmVGb3JtYXQpCisgICAgICAgIHNldE9wZXJhdGlvblNlbGVjdG9yKG5ldyBIVFRQRGVmYXVsdE9wZXJhdGlvblNlbGVjdG9yKCkpOworICAgICAgICBzZXRSZXF1ZXN0V2lyZUZvcm1hdChuZXcgSFRUUERlZmF1bHRXaXJlRm9ybWF0KCkpOworICAgICAgICBzZXRSZXNwb25zZVdpcmVGb3JtYXQobmV3IEhUVFBEZWZhdWx0V2lyZUZvcm1hdCgpKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnAvSlNPTlBCaW5kaW5nRmFjdG9yeS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25wL0pTT05QQmluZGluZ0ZhY3RvcnkuamF2YQppbmRleCAyZThiZWJlLi5jOTRhNjZkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnAvSlNPTlBCaW5kaW5nRmFjdG9yeS5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9KU09OUEJpbmRpbmdGYWN0b3J5LmphdmEKQEAgLTE5LDEzICsxOSwxMyBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qc29ucDsKIAorCiAvKioKICAqIEZhY3RvcnkgdG8gY3JlYXRlIEpTT05QQmluZGluZyBpbnN0YW5jZXMKICAqLwotcHVibGljIGludGVyZmFjZSBKU09OUEJpbmRpbmdGYWN0b3J5IHsKK3B1YmxpYyBjbGFzcyBKU09OUEJpbmRpbmdGYWN0b3J5IHsKIAotICAgIC8qKgotICAgICAqIENyZWF0ZSBKU09OUEJpbmRpbmcgbW9kZWwKLSAgICAgKi8KLSAgICBKU09OUEJpbmRpbmcgY3JlYXRlSlNPTlBCaW5kaW5nKCk7CisgICAgcHVibGljIEpTT05QQmluZGluZyBjcmVhdGVKU09OUEJpbmRpbmcoKSB7CisgICAgICAgIHJldHVybiBuZXcgSlNPTlBCaW5kaW5nKCk7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25wL2ltcGwvSlNPTlBCaW5kaW5nRmFjdG9yeUltcGwuamF2YSBiL21vZHVsZXMvYmluZGluZy1qc29ucC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9pbXBsL0pTT05QQmluZGluZ0ZhY3RvcnlJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlNzRhMjguLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25wL2ltcGwvSlNPTlBCaW5kaW5nRmFjdG9yeUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmpzb25wLmltcGw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnAuSlNPTlBCaW5kaW5nOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qc29ucC5KU09OUEJpbmRpbmdGYWN0b3J5OwotCi0vKioKLSAqIEZhY3RvcnkgaW1wbGVtZW50YXRpb24gdG8gY3JlYXRlIEpTT05QIE1vZGVscwotICovCi1wdWJsaWMgY2xhc3MgSlNPTlBCaW5kaW5nRmFjdG9yeUltcGwgaW1wbGVtZW50cyBKU09OUEJpbmRpbmdGYWN0b3J5IHsKLQotICAgIHB1YmxpYyBKU09OUEJpbmRpbmcgY3JlYXRlSlNPTlBCaW5kaW5nKCkgewotICAgICAgICByZXR1cm4gbmV3IEpTT05QQmluZGluZ0ltcGwoKTsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qc29ucC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9pbXBsL0pTT05QQmluZGluZ0ltcGwuamF2YSBiL21vZHVsZXMvYmluZGluZy1qc29ucC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucC9pbXBsL0pTT05QQmluZGluZ0ltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQwZjAzZi4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnAvaW1wbC9KU09OUEJpbmRpbmdJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnAuaW1wbDsKLQotaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5Lk9wZXJhdGlvblNlbGVjdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuV2lyZUZvcm1hdDsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnAuSlNPTlBCaW5kaW5nOwotCi0vKioKLSAqIFJlcHJlc2VudHMgYSBiaW5kaW5nIHRvIGFuIFJNSSBzZXJ2aWNlLgotICoKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgSlNPTlBCaW5kaW5nSW1wbCBpbXBsZW1lbnRzIEpTT05QQmluZGluZyB7Ci0KLSAgICBwcml2YXRlIFN0cmluZyBuYW1lOwotICAgIHByaXZhdGUgU3RyaW5nIHVyaTsKLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLSAgICAgICAgcmV0dXJuIG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVUkkoKSB7Ci0gICAgICAgIHJldHVybiB1cmk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VVJJKFN0cmluZyB1cmkpIHsKLSAgICAgICAgdGhpcy51cmkgPSB1cmk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewotICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwotICAgIH0KLQotICAgIEBPdmVycmlkZQotICAgIHB1YmxpYyBPYmplY3QgY2xvbmUoKSB0aHJvd3MgQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gc3VwZXIuY2xvbmUoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1VucmVzb2x2ZWQoKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXRVbnJlc29sdmVkKGJvb2xlYW4gYXJnMCkgewotICAgIH0KLQotICAgIHB1YmxpYyBRTmFtZSBnZXRUeXBlKCkgewotICAgICAgICByZXR1cm4gVFlQRTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFdpcmVGb3JtYXQgZ2V0UmVxdWVzdFdpcmVGb3JtYXQoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRSZXF1ZXN0V2lyZUZvcm1hdChXaXJlRm9ybWF0IHdpcmVGb3JtYXQpIHsgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgV2lyZUZvcm1hdCBnZXRSZXNwb25zZVdpcmVGb3JtYXQoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRSZXNwb25zZVdpcmVGb3JtYXQoV2lyZUZvcm1hdCB3aXJlRm9ybWF0KSB7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBPcGVyYXRpb25TZWxlY3RvciBnZXRPcGVyYXRpb25TZWxlY3RvcigpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldE9wZXJhdGlvblNlbGVjdG9yKE9wZXJhdGlvblNlbGVjdG9yIG9wZXJhdGlvblNlbGVjdG9yKSB7Ci0gICAgfSAgICAKLQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnAuSlNPTlBCaW5kaW5nRmFjdG9yeSBiL21vZHVsZXMvYmluZGluZy1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmpzb25wLkpTT05QQmluZGluZ0ZhY3RvcnkKaW5kZXggZTFlOGM2ZC4uNTc5MDhiMyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnAuSlNPTlBCaW5kaW5nRmFjdG9yeQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnAvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qc29ucC5KU09OUEJpbmRpbmdGYWN0b3J5CkBAIC0xNiw1ICsxNiw2IEBACiAjIHVuZGVyIHRoZSBMaWNlbnNlLiAKIAogIyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgbW9kZWwgZmFjdG9yeQotb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmpzb25wLmltcGwuSlNPTlBCaW5kaW5nRmFjdG9yeUltcGwKK29yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qc29ucC5KU09OUEJpbmRpbmdGYWN0b3J5CisKIA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5IGIvbW9kdWxlcy9iaW5kaW5nLWpzb25wL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ1ODA5YQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5CkBAIC0wLDAgKzEsMjAgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCisjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgYmluZGluZyBleHRlbnNpb24NCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuaHR0cC5wcm92aWRlci5IVFRQQmluZGluZ1Byb3ZpZGVyRmFjdG9yeTttb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnAuSlNPTlBCaW5kaW5nDQorDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtanMtZG9qby9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL2pzL2Rvam8vSlNPTlJQQ0JpbmRpbmdKYXZhc2NyaXB0UHJveHlGYWN0b3J5SW1wbC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtanMtZG9qby9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL2pzL2Rvam8vSlNPTlJQQ0JpbmRpbmdKYXZhc2NyaXB0UHJveHlGYWN0b3J5SW1wbC5qYXZhCmluZGV4IDAzODhjOGIuLmY0YzMyZTggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qc29ucnBjLWpzLWRvam8vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9qcy9kb2pvL0pTT05SUENCaW5kaW5nSmF2YXNjcmlwdFByb3h5RmFjdG9yeUltcGwuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1qcy1kb2pvL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvanMvZG9qby9KU09OUlBDQmluZGluZ0phdmFzY3JpcHRQcm94eUZhY3RvcnlJbXBsLmphdmEKQEAgLTYsMTUgKzYsMTUgQEAKICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAorICoKICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKKyAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmpzb25ycGMuanMuZG9qbzsKQEAgLTM0LDggKzM0LDggQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLndlYi5qYXZhc2NyaXB0LkphdmFzY3JpcHRQcm94eUZhY3Rvcnk7CiAKIHB1YmxpYyBjbGFzcyBKU09OUlBDQmluZGluZ0phdmFzY3JpcHRQcm94eUZhY3RvcnlJbXBsIGltcGxlbWVudHMgSmF2YXNjcmlwdFByb3h5RmFjdG9yeSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgUU5hbWUgTkFNRSA9IG5ldyBRTmFtZSgiaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIiwgImJpbmRpbmcuanNvbnJwYyIpOwotICAgIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFFOYW1lIE5BTUUgPSBKU09OUlBDQmluZGluZy5UWVBFOworCiAgICAgcHVibGljIENsYXNzPD8+IGdldE1vZGVsVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIEpTT05SUENCaW5kaW5nLmNsYXNzOwogICAgIH0KQEAgLTUxLDExICs1MSwxMSBAQAogICAgIHB1YmxpYyBJbnB1dFN0cmVhbSBnZXRKYXZhc2NyaXB0UHJveHlGaWxlQXNTdHJlYW0oKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICByZXR1cm4gbnVsbDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUphdmFzY3JpcHRIZWFkZXIoQ29tcG9uZW50UmVmZXJlbmNlIGNvbXBvbmVudFJlZmVyZW5jZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuICJkb2pvLnJlcXVpcmUoJ2Rvam8ucnBjLkpzb25TZXJ2aWNlJyk7IjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGNyZWF0ZUphdmFzY3JpcHRSZWZlcmVuY2UoQ29tcG9uZW50UmVmZXJlbmNlIGNvbXBvbmVudFJlZmVyZW5jZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgRW5kcG9pbnRSZWZlcmVuY2UgZXByID0gY29tcG9uZW50UmVmZXJlbmNlLmdldEVuZHBvaW50UmVmZXJlbmNlcygpLmdldCgwKTsKICAgICAgICAgRW5kcG9pbnQgdGFyZ2V0RW5kcG9pbnQgPSBlcHIuZ2V0VGFyZ2V0RW5kcG9pbnQoKTsKQEAgLTY1LDEzICs2NSwxMyBAQAogICAgICAgICAgICAgKChSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UpIGVwcikuZ2V0SW52b2NhdGlvbkNoYWlucygpOwogICAgICAgICAgICAgdGFyZ2V0RW5kcG9pbnQgPSBlcHIuZ2V0VGFyZ2V0RW5kcG9pbnQoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSB0YXJnZXRFbmRwb2ludC5nZXRCaW5kaW5nKCk7Ci0gICAgICAgIAorCiAgICAgICAgIFVSSSB0YXJnZXRVUkkgPSBVUkkuY3JlYXRlKGJpbmRpbmcuZ2V0VVJJKCkpOwogICAgICAgICBTdHJpbmcgdGFyZ2V0UGF0aCA9IHRhcmdldFVSSS5nZXRQYXRoKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gImRvam8ucnBjLkpzb25TZXJ2aWNlKFwiIiArIHRhcmdldFBhdGggKyAiP3NtZFwiKSI7ICAgICAgICAKKworICAgICAgICByZXR1cm4gImRvam8ucnBjLkpzb25TZXJ2aWNlKFwiIiArIHRhcmdldFBhdGggKyAiP3NtZFwiKSI7CiAgICAgfQogCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAwZTUyMTQxLi43YzdiOGUxIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTI4LDYgKzI4LDcgQEAKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3QuaHR0cDt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YTt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLnV0aWw7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb247dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGU7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyO3ZlcnNpb249IjIuMC4wIiwNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvcHJvdmlkZXIvSlNPTlJQQ0JpbmRpbmdJbnZva2VyLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvcHJvdmlkZXIvSlNPTlJQQ0JpbmRpbmdJbnZva2VyLmphdmEKaW5kZXggYjVlYTZiMS4uZWNjYTA5ZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL3Byb3ZpZGVyL0pTT05SUENCaW5kaW5nSW52b2tlci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9wcm92aWRlci9KU09OUlBDQmluZGluZ0ludm9rZXIuamF2YQpAQCAtMjcsNiArMjcsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC51dGlsLkVudGl0eVV0aWxzOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuRW5kcG9pbnRSZWZlcmVuY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmpzb25ycGMuSlNPTlJQQ0JpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5qc29uLkpTT05EYXRhQmluZGluZzsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2U7CkBAIC01Nyw0OCArNTgsNTkgQEAKICAgICAgICAgSHR0cFBvc3QgcG9zdCA9IG51bGw7CiAgICAgICAgIEh0dHBSZXNwb25zZSByZXNwb25zZSA9IG51bGw7CiAgICAgICAgIHRyeSB7Ci0KLSAgICAgICAgICAgIEpTT05PYmplY3QganNvblJlcXVlc3QgPSBudWxsOzsKICAgICAgICAgICAgIFN0cmluZyByZXF1ZXN0SWQgPSAiMSI7Ci0gICAgICAgICAgICBPYmplY3RbXSBhcmdzID0gbnVsbDsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgbWV0aG9kCi0gICAgICAgICAgICAgICAganNvblJlcXVlc3QgPSBuZXcgSlNPTk9iamVjdCgpOwotICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0LnB1dE9wdCgibWV0aG9kIiwgIlNlcnZpY2UiICsgIi4iICsgbXNnLmdldE9wZXJhdGlvbigpLmdldE5hbWUoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHRoZSBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICBhcmdzID0gbXNnLmdldEJvZHkoKTsKLSAgICAgICAgICAgICAgICBKU09OQXJyYXkgYXJyYXkgPSBuZXcgSlNPTkFycmF5KCk7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGFycmF5LnB1dChhcmdzW2ldKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAganNvblJlcXVlc3QucHV0T3B0KCJwYXJhbXMiLCBhcnJheSk7Ci0gICAgICAgICAgICAgICAganNvblJlcXVlc3QucHV0KCJpZCIsIHJlcXVlc3RJZCk7Ci0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBwYXJzZSBKU09OIHBhcmFtZXRlciIsIGUpOwotICAgICAgICAgICAgfQotCiAgICAgICAgICAgICBwb3N0ID0gbmV3IEh0dHBQb3N0KHVyaSk7Ci0gICAgICAgICAgICBTdHJpbmcgcmVxID0ganNvblJlcXVlc3QudG9TdHJpbmcoKTsKLSAgICAgICAgICAgIFN0cmluZ0VudGl0eSBlbnRpdHkgPSBuZXcgU3RyaW5nRW50aXR5KHJlcSwgImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXRcIlVURi04XCIiKTsKKworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGRiID0gbXNnLmdldE9wZXJhdGlvbigpLmdldFdyYXBwZXIoKS5nZXREYXRhQmluZGluZygpOworICAgICAgICAgICAgU3RyaW5nIHJlcTsKKyAgICAgICAgICAgIGlmICghZGIuZXF1YWxzKEpTT05EYXRhQmluZGluZy5OQU1FKSkgeworICAgICAgICAgICAgCQorCisgICAgICAgICAgICAgICAgSlNPTk9iamVjdCBqc29uUmVxdWVzdCA9IG51bGw7OworICAgICAgICAgICAgICAgIE9iamVjdFtdIGFyZ3MgPSBudWxsOworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIG1ldGhvZAorICAgICAgICAgICAgICAgICAgICBqc29uUmVxdWVzdCA9IG5ldyBKU09OT2JqZWN0KCk7CisgICAgICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0LnB1dE9wdCgibWV0aG9kIiwgIlNlcnZpY2UiICsgIi4iICsgbXNnLmdldE9wZXJhdGlvbigpLmdldE5hbWUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgYXJndW1lbnRzCisgICAgICAgICAgICAgICAgICAgIGFyZ3MgPSBtc2cuZ2V0Qm9keSgpOworICAgICAgICAgICAgICAgICAgICBKU09OQXJyYXkgYXJyYXkgPSBuZXcgSlNPTkFycmF5KCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkucHV0KGFyZ3NbaV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGpzb25SZXF1ZXN0LnB1dE9wdCgicGFyYW1zIiwgYXJyYXkpOworICAgICAgICAgICAgICAgICAgICBqc29uUmVxdWVzdC5wdXQoImlkIiwgcmVxdWVzdElkKTsKKworICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gcGFyc2UgSlNPTiBwYXJhbWV0ZXIiLCBlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmVxID0ganNvblJlcXVlc3QudG9TdHJpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAJcmVxID0gKFN0cmluZykoKE9iamVjdFtdKW1zZy5nZXRCb2R5KCkpWzBdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nRW50aXR5IGVudGl0eSA9IG5ldyBTdHJpbmdFbnRpdHkocmVxLCAiVVRGLTgiKTsKICAgICAgICAgICAgIHBvc3Quc2V0RW50aXR5KGVudGl0eSk7CiAKICAgICAgICAgICAgIHJlc3BvbnNlID0gaHR0cENsaWVudC5leGVjdXRlKHBvc3QpOwogCiAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZ2V0U3RhdHVzTGluZSgpLmdldFN0YXR1c0NvZGUoKSA9PSBIdHRwU3RhdHVzLlNDX09LKSB7CiAgICAgICAgICAgICAgICAgLy9zdWNjZXNzIAotICAgICAgICAgICAgICAgIEpTT05PYmplY3QganNvblJlc3BvbnNlID0gbnVsbDsKICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIAlTdHJpbmcgZW50aXR5UmVzcG9uc2UgPSBFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSk7ICAgICAgICAgICAgICAgIAkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFkYi5lcXVhbHMoSlNPTkRhdGFCaW5kaW5nLk5BTUUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBKU09OT2JqZWN0IGpzb25SZXNwb25zZSA9IG5ldyBKU09OT2JqZWN0KGVudGl0eVJlc3BvbnNlKTsKIAotICAgICAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UgPSBuZXcgSlNPTk9iamVjdChFbnRpdHlVdGlscy50b1N0cmluZyhyZXNwb25zZS5nZXRFbnRpdHkoKSkpOworCSAgICAgICAgICAgICAgICAgICAgLy9jaGVjayByZXF1ZXN0SWQKKwkgICAgICAgICAgICAgICAgICAgIGlmICghIGpzb25SZXNwb25zZS5nZXRTdHJpbmcoImlkIikuZXF1YWxzSWdub3JlQ2FzZShyZXF1ZXN0SWQpKSB7CisJICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIkludmFsaWQgcmVzcG9uc2UgaWQ6IiArIHJlcXVlc3RJZCApOworCSAgICAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIC8vY2hlY2sgcmVxdWVzdElkCi0gICAgICAgICAgICAgICAgICAgIGlmICghIGpzb25SZXNwb25zZS5nZXRTdHJpbmcoImlkIikuZXF1YWxzSWdub3JlQ2FzZShyZXF1ZXN0SWQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBpZDoiICsgcmVxdWVzdElkICk7CisJICAgICAgICAgICAgICAgICAgICBtc2cuc2V0Qm9keShqc29uUmVzcG9uc2UuZ2V0KCJyZXN1bHQiKSk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICBtc2cuc2V0Qm9keShlbnRpdHlSZXNwb25zZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBtc2cuc2V0Qm9keShqc29uUmVzcG9uc2UuZ2V0KCJyZXN1bHQiKSk7CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vRklYTUUgRXhjZXB0aW9ucyBhcmUgbm90IGhhbmRsZWQgY29ycmVjdGx5IGhlcmUKICAgICAgICAgICAgICAgICAgICAgLy8gVGhleSBzaG91bGQgYmUgcmVwb3J0ZWQgdG8gdGhlIGNsaWVudCBKYXZhU2NyaXB0IGFzIHByb3BlcgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL3Byb3ZpZGVyL0pTT05SUENEYXRhYmluZGluZ0hlbHBlci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL3Byb3ZpZGVyL0pTT05SUENEYXRhYmluZGluZ0hlbHBlci5qYXZhCmluZGV4IDNjZGNiMzIuLmY5YjM3ZjMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9wcm92aWRlci9KU09OUlBDRGF0YWJpbmRpbmdIZWxwZXIuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvcHJvdmlkZXIvSlNPTlJQQ0RhdGFiaW5kaW5nSGVscGVyLmphdmEKQEAgLTE5LDYgKzE5LDcgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuanNvbnJwYy5wcm92aWRlcjsKIAoraW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5qYXZhYmVhbnMuU2ltcGxlSmF2YURhdGFCaW5kaW5nOwpAQCAtNDUsMTQgKzQ2LDE2IEBACiAgICAgICAgICAgICBpZiAoaW5wdXRUeXBlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBMaXN0PERhdGFUeXBlPiBsb2dpY2FsID0gaW5wdXRUeXBlLmdldExvZ2ljYWwoKTsKICAgICAgICAgICAgICAgICBmb3IgKERhdGFUeXBlIGluQXJnIDogbG9naWNhbCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIVNpbXBsZUphdmFEYXRhQmluZGluZy5OQU1FLmVxdWFscyhpbkFyZy5nZXREYXRhQmluZGluZygpKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVNpbXBsZUphdmFEYXRhQmluZGluZy5OQU1FLmVxdWFscyhpbkFyZy5nZXREYXRhQmluZGluZygpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgaW5BcmcuZ2V0UGh5c2ljYWwoKSA9PSBCaWdEZWNpbWFsLmNsYXNzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbkFyZy5zZXREYXRhQmluZGluZyhKU09ORGF0YUJpbmRpbmcuTkFNRSk7CiAgICAgICAgICAgICAgICAgICAgIH0gCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgRGF0YVR5cGUgb3V0cHV0VHlwZSA9IG9wZXJhdGlvbi5nZXRPdXRwdXRUeXBlKCk7CiAgICAgICAgICAgICBpZiAob3V0cHV0VHlwZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFTaW1wbGVKYXZhRGF0YUJpbmRpbmcuTkFNRS5lcXVhbHMob3V0cHV0VHlwZS5nZXREYXRhQmluZGluZygpKSkgeworICAgICAgICAgICAgICAgIGlmICghU2ltcGxlSmF2YURhdGFCaW5kaW5nLk5BTUUuZXF1YWxzKG91dHB1dFR5cGUuZ2V0RGF0YUJpbmRpbmcoKSkgfHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0VHlwZS5nZXRQaHlzaWNhbCgpID09IEJpZ0RlY2ltYWwuY2xhc3MgICApIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cHV0VHlwZS5zZXREYXRhQmluZGluZyhKU09ORGF0YUJpbmRpbmcuTkFNRSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL3Byb3ZpZGVyL0pTT05SUENSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9wcm92aWRlci9KU09OUlBDUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyLmphdmEKaW5kZXggY2QxNzlhMC4uYWRjMTkyMCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL3Byb3ZpZGVyL0pTT05SUENSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvcHJvdmlkZXIvSlNPTlJQQ1JlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCkBAIC02LDE1ICs2LDE1IEBACiAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCiAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKKyAqCiAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCisgKgogICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQogICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCiBwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qc29ucnBjLnByb3ZpZGVyOwpAQCAtMzMsNiArMzMsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5wYXJhbXMuSHR0cFByb3RvY29sUGFyYW1zOwogaW1wb3J0IG9yZy5hcGFjaGUuaHR0cC5wcm90b2NvbC5IVFRQOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuRW5kcG9pbnRSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKQEAgLTQxLDcgKzQyLDcgQEAKIAogLyoqCiAgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgSlNPTlJQQyBCaW5kaW5nIFByb3ZpZGVyIGZvciBSZWZlcmVuY2VzCi0gKiAKKyAqCiAgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKICAqLwogcHVibGljIGNsYXNzIEpTT05SUENSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgaW1wbGVtZW50cyBSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgewpAQCAtNTYsNyArNTcsNyBAQAogCiAgICAgICAgIHRoaXMuZW5kcG9pbnRSZWZlcmVuY2UgPSBlbmRwb2ludFJlZmVyZW5jZTsKICAgICAgICAgdGhpcy5yZWZlcmVuY2UgPSAoUnVudGltZUNvbXBvbmVudFJlZmVyZW5jZSkgZW5kcG9pbnRSZWZlcmVuY2UuZ2V0UmVmZXJlbmNlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vY2xvbmUgdGhlIHNlcnZpY2UgY29udHJhY3QgdG8gYXZvaWQgZGF0YWJpbmRpbmcgaXNzdWVzCiAgICAgICAgIC8qCiAgICAgICAgIHRyeSB7CkBAIC02NCwyMCArNjUsMjAgQEAKICAgICAgICAgfSBjYXRjaChDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZUNvbnRyYWN0ID0gcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgSlNPTlJQQ0RhdGFiaW5kaW5nSGVscGVyLnNldERhdGFCaW5kaW5nKHJlZmVyZW5jZUNvbnRyYWN0LmdldEludGVyZmFjZSgpKTsKICAgICAgICAgKi8KLSAgICAgICAgCisKICAgICAgICAgLy8gQ3JlYXRlIGFuIEhUVFAgY2xpZW50CiAgICAgICAgIEh0dHBQYXJhbXMgZGVmYXVsdFBhcmFtZXRlcnMgPSBuZXcgQmFzaWNIdHRwUGFyYW1zKCk7CiAgICAgICAgIC8vZGVmYXVsdFBhcmFtZXRlcnMuc2V0SW50UGFyYW1ldGVyKEh0dHBDb25uZWN0aW9uTWFuYWdlclBhcmFtcy5NQVhfVE9UQUxfQ09OTkVDVElPTlMsIDEwKTsKICAgICAgICAgSHR0cFByb3RvY29sUGFyYW1zLnNldENvbnRlbnRDaGFyc2V0KGRlZmF1bHRQYXJhbWV0ZXJzLCBIVFRQLlVURl84KTsKICAgICAgICAgSHR0cENvbm5lY3Rpb25QYXJhbXMuc2V0Q29ubmVjdGlvblRpbWVvdXQoZGVmYXVsdFBhcmFtZXRlcnMsIDYwMDAwKTsKICAgICAgICAgSHR0cENvbm5lY3Rpb25QYXJhbXMuc2V0U29UaW1lb3V0KGRlZmF1bHRQYXJhbWV0ZXJzLCA2MDAwMCk7Ci0gICAgICAgIAorCiAgICAgICAgIFNjaGVtZVJlZ2lzdHJ5IHN1cHBvcnRlZFNjaGVtZXMgPSBuZXcgU2NoZW1lUmVnaXN0cnkoKTsKICAgICAgICAgc3VwcG9ydGVkU2NoZW1lcy5yZWdpc3RlcihuZXcgU2NoZW1lKEh0dHBIb3N0LkRFRkFVTFRfU0NIRU1FX05BTUUsIFBsYWluU29ja2V0RmFjdG9yeS5nZXRTb2NrZXRGYWN0b3J5KCksIDgwKSk7Ci0gICAgICAgIAorCiAgICAgICAgIENsaWVudENvbm5lY3Rpb25NYW5hZ2VyIGNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IFRocmVhZFNhZmVDbGllbnRDb25uTWFuYWdlcihkZWZhdWx0UGFyYW1ldGVycywgc3VwcG9ydGVkU2NoZW1lcyk7CiAKICAgICAgICAgaHR0cENsaWVudCA9IG5ldyBEZWZhdWx0SHR0cENsaWVudChjb25uZWN0aW9uTWFuYWdlciwgZGVmYXVsdFBhcmFtZXRlcnMpOwpAQCAtODksNiArOTAsMTAgQEAKICAgICB9CiAKICAgICBwdWJsaWMgSW52b2tlciBjcmVhdGVJbnZva2VyKE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKKyAgICAJZmluYWwgSW50ZXJmYWNlIGludGYgPSByZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKS5nZXRJbnRlcmZhY2UoKTsKKyAgICAJaWYgKGludGYuaXNEeW5hbWljKCkpIHsKKyAgICAJCXJldHVybiBuZXcgSlNPTlJQQ0JpbmRpbmdJbnZva2VyKGVuZHBvaW50UmVmZXJlbmNlLCBvcGVyYXRpb24sIGh0dHBDbGllbnQpOworICAgIAl9CiAgICAgICAgIHJldHVybiBuZXcgSlNPTlJQQ0NsaWVudEludm9rZXIoZW5kcG9pbnRSZWZlcmVuY2UsIG9wZXJhdGlvbiwgaHR0cENsaWVudCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvcHJvdmlkZXIvSlNPTlJQQ1NlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9wcm92aWRlci9KU09OUlBDU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCmluZGV4IDEwZTkzNjguLmI2ZGNlMjIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9wcm92aWRlci9KU09OUlBDU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9wcm92aWRlci9KU09OUlBDU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCkBAIC0yMiw2ICsyMiw4IEBACiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAoraW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldDsKKwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qc29ucnBjLkpTT05SUENCaW5kaW5nOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5odHRwLlNlcnZsZXRIb3N0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZTsKQEAgLTgwLDcgKzgyLDggQEAKICAgICAKICAgICBwdWJsaWMgdm9pZCBzdGFydCgpIHsKICAgICAgICAgLy8gU2V0IGRlZmF1bHQgZGF0YWJpbmRpbmcgdG8ganNvbgotICAgICAgICAvLyBzZXJ2aWNlQ29udHJhY3QuZ2V0SW50ZXJmYWNlKCkucmVzZXREYXRhQmluZGluZyhKU09ORGF0YUJpbmRpbmcuTkFNRSk7CisgICAgICAgIC8vIHJlcGxhY2VkIGJ5IEpTT05SUENEYXRhYmluZGluZ0hlbHBlci5zZXREYXRhQmluZGluZyhzZXJ2aWNlQ29udHJhY3QuZ2V0SW50ZXJmYWNlKCkpOyBhYm92ZQorICAgICAgICAvL3NlcnZpY2VDb250cmFjdC5nZXRJbnRlcmZhY2UoKS5yZXNldERhdGFCaW5kaW5nKEpTT05EYXRhQmluZGluZy5OQU1FKTsKIAogICAgICAgICAvLyBEZXRlcm1pbmUgdGhlIHNlcnZpY2UgYnVzaW5lc3MgaW50ZXJmYWNlCiAgICAgICAgIENsYXNzPD8+IHNlcnZpY2VJbnRlcmZhY2UgPSBnZXRUYXJnZXRKYXZhQ2xhc3Moc2VydmljZUNvbnRyYWN0LmdldEludGVyZmFjZSgpKTsKQEAgLTkxLDE4ICs5NCwyOCBAQAogICAgICAgICAvLyBDcmVhdGUgYW5kIHJlZ2lzdGVyIGEgU2VydmxldCBmb3IgdGhpcyBzZXJ2aWNlCiAgICAgICAgIEpTT05SUENTZXJ2aWNlU2VydmxldCBzZXJ2aWNlU2VydmxldCA9CiAgICAgICAgICAgICBuZXcgSlNPTlJQQ1NlcnZpY2VTZXJ2bGV0KG1lc3NhZ2VGYWN0b3J5LCBlbmRwb2ludCwgc2VydmljZUludGVyZmFjZSwgcHJveHkpOwotICAgICAgICBTdHJpbmcgbWFwcGluZyA9IGJpbmRpbmcuZ2V0VVJJKCk7Ci0gICAgICAgIGlmICghbWFwcGluZy5lbmRzV2l0aCgiLyIpKSB7Ci0gICAgICAgICAgICBtYXBwaW5nICs9ICIvIjsKKyAgICAgICAgU3RyaW5nIG1hcHBpbmcgPSByZWdpc3RlclNlcnZsZXQoc2VydmljZVNlcnZsZXQpOworICAgICAgICBzZXJ2bGV0TWFwcGluZ3MuYWRkKG1hcHBpbmcpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIHJlZ2lzdGVyU2VydmxldChTZXJ2bGV0IHNlcnZsZXQpIHsKKyAgICAgICAgLy8gQ3JlYXRlIG91ciBIVFRQIHNlcnZpY2UgbGlzdGVuZXIgU2VydmxldCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUKKyAgICAgICAgLy8gU2VydmxldCBob3N0CisgICAgICAgIFN0cmluZyBzZXJ2bGV0TWFwcGluZyA9IGJpbmRpbmcuZ2V0VVJJKCk7CisgICAgICAgIGlmICghc2VydmxldE1hcHBpbmcuZW5kc1dpdGgoIi8iKSkgeworICAgICAgICAgICAgc2VydmxldE1hcHBpbmcgKz0gIi8iOwogICAgICAgICB9Ci0gICAgICAgIGlmICghbWFwcGluZy5lbmRzV2l0aCgiKiIpKSB7Ci0gICAgICAgICAgICBtYXBwaW5nICs9ICIqIjsKKyAgICAgICAgaWYgKCFzZXJ2bGV0TWFwcGluZy5lbmRzV2l0aCgiKiIpKSB7CisgICAgICAgICAgICBzZXJ2bGV0TWFwcGluZyArPSAiKiI7CiAgICAgICAgIH0KIAotICAgICAgICBzZXJ2bGV0SG9zdC5hZGRTZXJ2bGV0TWFwcGluZyhtYXBwaW5nLCBzZXJ2aWNlU2VydmxldCk7Ci0gICAgICAgIHNlcnZsZXRNYXBwaW5ncy5hZGQobWFwcGluZyk7Ci0gICAgICAgIHNlcnZsZXRIb3N0LmFkZFNlcnZsZXRNYXBwaW5nKGJpbmRpbmcuZ2V0VVJJKCksIHNlcnZpY2VTZXJ2bGV0KTsKLSAgICAgICAgc2VydmxldE1hcHBpbmdzLmFkZChiaW5kaW5nLmdldFVSSSgpKTsKKyAgICAgICAgU3RyaW5nIG1hcHBlZFVSSSA9IHNlcnZsZXRIb3N0LmFkZFNlcnZsZXRNYXBwaW5nKHNlcnZsZXRNYXBwaW5nLCBzZXJ2bGV0KTsKKyAgICAgICAgU3RyaW5nIGRlcGxveWVkVVJJID0gbWFwcGVkVVJJOworICAgICAgICBpZiAoZGVwbG95ZWRVUkkuZW5kc1dpdGgoIioiKSkgeworICAgICAgICAgICAgZGVwbG95ZWRVUkkgPSBkZXBsb3llZFVSSS5zdWJzdHJpbmcoMCwgZGVwbG95ZWRVUkkubGVuZ3RoKCkgLSAxKTsKKyAgICAgICAgfQorICAgICAgICBiaW5kaW5nLnNldFVSSShkZXBsb3llZFVSSSk7CisgICAgICAgIHJldHVybiBtYXBwZWRVUkk7CiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9wcm92aWRlci9KU09OUlBDU2VydmljZVNlcnZsZXQuamF2YSBiL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9wcm92aWRlci9KU09OUlBDU2VydmljZVNlcnZsZXQuamF2YQppbmRleCA3NDJhMjdlLi45YzM3OWJkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvcHJvdmlkZXIvSlNPTlJQQ1NlcnZpY2VTZXJ2bGV0LmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL3Byb3ZpZGVyL0pTT05SUENTZXJ2aWNlU2VydmxldC5qYXZhCkBAIC0zNyw2ICszNyw3IEBACiAKIGltcG9ydCBvcmcuYXBhY2hlLmNvbW1vbnMuY29kZWMuYmluYXJ5LkJhc2U2NDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkJpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5qc29uLkpTT05EYXRhQmluZGluZzsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2VGYWN0b3J5OwpAQCAtOTksNiArMTAwLDggQEAKICAgICAgICAgICAgICAgICBpZiAocmUuZ2V0Q2F1c2UoKSBpbnN0YW5jZW9mIGphdmF4LnNlY3VyaXR5LmF1dGgubG9naW4uTG9naW5FeGNlcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJXV1ctQXV0aGVudGljYXRlIiwgIkJBU0lDIHJlYWxtPVwiIiArICJsZGFwLXJlYWxtIiArICJcIiIpOwogICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgCXJlLnByaW50U3RhY2tUcmFjZSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICAgSHR0cFNlc3Npb24gc2Vzc2lvbiA9IHJlcXVlc3QuZ2V0U2Vzc2lvbihmYWxzZSk7CkBAIC0yOTksNyArMzAyLDExIEBACiAKICAgICAgICAgcmVxdWVzdE1lc3NhZ2UuZ2V0SGVhZGVycygpLnB1dCgiUmVxdWVzdE1lc3NhZ2UiLCByZXF1ZXN0KTsKIAotICAgICAgICByZXF1ZXN0TWVzc2FnZS5zZXRCb2R5KGFyZ3MpOworICAgICAgICBpZiAoanNvbk9wZXJhdGlvbi5nZXRXcmFwcGVyKCkuZ2V0RGF0YUJpbmRpbmcoKS5lcXVhbHMoSlNPTkRhdGFCaW5kaW5nLk5BTUUpKSB7CisgICAgICAgIAlyZXF1ZXN0TWVzc2FnZS5zZXRCb2R5KG5ldyBPYmplY3RbXXtqc29uUmVxLnRvU3RyaW5nKCl9KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgCXJlcXVlc3RNZXNzYWdlLnNldEJvZHkoYXJncyk7CisgICAgICAgIH0KIAogICAgICAgICAvL3Jlc3VsdCA9IHdpcmUuaW52b2tlKGpzb25PcGVyYXRpb24sIGFyZ3MpOwogICAgICAgICBNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSA9IG51bGw7CkBAIC0zMTcsMTUgKzMyNCwzNCBAQAogCiAgICAgICAgIGlmICghcmVzcG9uc2VNZXNzYWdlLmlzRmF1bHQoKSkgewogICAgICAgICAgICAgLy9zdWNjZXNzZnVsIGV4ZWN1dGlvbiBvZiB0aGUgaW52b2NhdGlvbgotICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGlmIChqc29uT3BlcmF0aW9uLmdldFdyYXBwZXIoKS5nZXREYXRhQmluZGluZygpLmVxdWFscyhKU09ORGF0YUJpbmRpbmcuTkFNRSkpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXNwb25zZU1lc3NhZ2UuZ2V0Qm9keSgpOwotICAgICAgICAgICAgICAgIEpTT05PYmplY3QganNvblJlc3BvbnNlID0gbmV3IEpTT05PYmplY3QoKTsKLSAgICAgICAgICAgICAgICBqc29uUmVzcG9uc2UucHV0KCJyZXN1bHQiLCByZXN1bHQpOwotICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZS5wdXRPcHQoImlkIiwgaWQpOwotICAgICAgICAgICAgICAgIC8vZ2V0IHJlc3BvbnNlIHRvIHNlbmQgdG8gY2xpZW50Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGpzb25SZXNwb25zZS50b1N0cmluZygpLmdldEJ5dGVzKCJVVEYtOCIpOwotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBjcmVhdGUgSlNPTiByZXNwb25zZSIsIGUpOworICAgICAgICAgICAgCXJldHVybiByZXN1bHQudG9TdHJpbmcoKS5nZXRCeXRlcygiVVRGLTgiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGpzb25PcGVyYXRpb24uZ2V0T3V0cHV0VHlwZSgpID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gdm9pZCBvcGVyYXRpb24gKGpzb24tcnBjIG5vdGlmaWNhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTT05PYmplY3QganNvblJlc3BvbnNlID0gbmV3IEpTT05PYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZS5wdXQoInJlc3VsdCIsICIiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vZ2V0IHJlc3BvbnNlIHRvIHNlbmQgdG8gY2xpZW50CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvblJlc3BvbnNlLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoIlVURi04Iik7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBjcmVhdGUgSlNPTiByZXNwb25zZSIsIGUpOworICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIHJlZ3VsYXIgb3BlcmF0aW9uIHJldHVybmluZyBzb21lIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXNwb25zZU1lc3NhZ2UuZ2V0Qm9keSgpOworICAgICAgICAgICAgICAgICAgICAgICAgSlNPTk9iamVjdCBqc29uUmVzcG9uc2UgPSBuZXcgSlNPTk9iamVjdCgpOworICAgICAgICAgICAgICAgICAgICAgICAganNvblJlc3BvbnNlLnB1dCgicmVzdWx0IiwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGpzb25SZXNwb25zZS5wdXRPcHQoImlkIiwgaWQpOworICAgICAgICAgICAgICAgICAgICAgICAgLy9nZXQgcmVzcG9uc2UgdG8gc2VuZCB0byBjbGllbnQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uUmVzcG9uc2UudG9TdHJpbmcoKS5nZXRCeXRlcygiVVRGLTgiKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbigiVW5hYmxlIHRvIGNyZWF0ZSBKU09OIHJlc3BvbnNlIiwgZSk7CisgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vZXhjZXB0aW9uIHRocm93biB3aGlsZSBleGVjdXRpbmcgdGhlIGludm9jYXRpb24KQEAgLTM1NCw2ICszODAsOCBAQAogICAgICAgICAKICAgICAgICAgT3BlcmF0aW9uIHJlc3VsdCA9IG51bGw7CiAgICAgICAgIGZvciAoT3BlcmF0aW9uIG8gOiBvcGVyYXRpb25zKSB7CisgICAgICAgIAlpZiAoby5pc0R5bmFtaWMoKSkKKyAgICAgICAgCQlyZXR1cm4gbzsKICAgICAgICAgICAgIGlmIChvLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKG1ldGhvZCkpIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvdGVzdC9qYXZhL2VjaG8vRWNoby5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvdGVzdC9qYXZhL2VjaG8vRWNoby5qYXZhCmluZGV4IDMyMjAwOGQuLmJiNDdiOWUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9lY2hvL0VjaG8uamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvZWNoby9FY2hvLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogcGFja2FnZSBlY2hvOwogCitpbXBvcnQgamF2YS5tYXRoLkJpZ0RlY2ltYWw7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKQEAgLTM4LDEyICszOSwxNiBAQAogcHVibGljIGludGVyZmFjZSBFY2hvIHsKIAogICAgIFN0cmluZyBlY2hvKFN0cmluZyBtc2cpOwotCisgICAgCisgICAgdm9pZCBlY2hvVm9pZCgpOworICAgIAogICAgIHZvaWQgZWNob1J1bnRpbWVFeGNlcHRpb24oKSB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbjsKIAogICAgIHZvaWQgZWNob0J1c2luZXNzRXhjZXB0aW9uKCkgdGhyb3dzIEVjaG9CdXNpbmVzc0V4Y2VwdGlvbjsKIAogICAgIGludCBlY2hvSW50KGludCBwYXJhbSk7CisgICAgCisgICAgZG91YmxlIGVjaG9Eb3VibGUoZG91YmxlIHBhcmFtKTsKIAogICAgIGJvb2xlYW4gZWNob0Jvb2xlYW4oYm9vbGVhbiBwYXJhbSk7CiAKQEAgLTYxLDQgKzY2LDUgQEAKIAogICAgIHZvaWQgZ2V0XHUwM2E5XHUwM2JiXHUwM2MwKCk7CiAKKyAgICBCaWdEZWNpbWFsIGVjaG9CaWdEZWNpbWFsKEJpZ0RlY2ltYWwgcGFyYW0pOwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvdGVzdC9qYXZhL2VjaG8vRWNob0NsaWVudEltcGwuamF2YSBiL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9lY2hvL0VjaG9DbGllbnRJbXBsLmphdmEKaW5kZXggZjc2ZWM3NC4uOWEyZDQxMSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvdGVzdC9qYXZhL2VjaG8vRWNob0NsaWVudEltcGwuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvZWNoby9FY2hvQ2xpZW50SW1wbC5qYXZhCkBAIC02LDE5ICs2LDIwIEBACiAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCiAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCiAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKKyAqCiAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCisgKgogICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAogICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQogICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKiB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCiBwYWNrYWdlIGVjaG87CiAKK2ltcG9ydCBqYXZhLm1hdGguQmlnRGVjaW1hbDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwpAQCAtMzcsNiArMzgsMTAgQEAKICAgICBwdWJsaWMgU3RyaW5nIGVjaG8oU3RyaW5nIG1zZykgewogICAgICAgICByZXR1cm4gZWNob1JlZmVyZW5jZS5lY2hvKG1zZyk7CiAgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIGVjaG9Wb2lkKCkgeworICAgICAgICBlY2hvUmVmZXJlbmNlLmVjaG9Wb2lkKCk7CisgICAgfQogCiAgICAgcHVibGljIGludFtdIGVjaG9BcnJheUludChpbnRbXSBpbnRBcnJheSkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlVOc3VwcG9ydGVkICEiKTsKQEAgLTYyLDYgKzY3LDEwIEBACiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiVU5zdXBwb3J0ZWQgISIpOwogICAgIH0KIAorICAgIHB1YmxpYyBkb3VibGUgZWNob0RvdWJsZShkb3VibGUgcGFyYW0pIHsKKyAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJVTnN1cHBvcnRlZCAhIik7CisgICAgfQorCiAgICAgcHVibGljIExpc3QgZWNob0xpc3QoQXJyYXlMaXN0IGxpc3QpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJVTnN1cHBvcnRlZCAhIik7CiAgICAgfQpAQCAtODIsNCArOTEsNyBAQAogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlVOc3VwcG9ydGVkICEiKTsKICAgICB9CiAKKyAgICBwdWJsaWMgQmlnRGVjaW1hbCBlY2hvQmlnRGVjaW1hbChCaWdEZWNpbWFsIHBhcmFtKSB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiVU5zdXBwb3J0ZWQgISIpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9lY2hvL0VjaG9Db21wb25lbnRJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvZWNoby9FY2hvQ29tcG9uZW50SW1wbC5qYXZhCmluZGV4IDA4Y2NiNmUuLmI4YjYzOTAgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9lY2hvL0VjaG9Db21wb25lbnRJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvdGVzdC9qYXZhL2VjaG8vRWNob0NvbXBvbmVudEltcGwuamF2YQpAQCAtNiwxOCArNiwxOSBAQAogICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCisgKgogICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAorICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQogICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2UgZWNobzsKIAoraW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CkBAIC0zMCwxNiArMzEsMjEgQEAKIAogLyoqCiAgKiBBIHNpbXBsZSBjbGllbnQgY29tcG9uZW50IHRoYXQgdXNlcyBhIHJlZmVyZW5jZSB3aXRoIGFuIEpTT05SUEMgYmluZGluZy4KLSAqIAorICoKICAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAogICovCi1wdWJsaWMgY2xhc3MgRWNob0NvbXBvbmVudEltcGwgaW1wbGVtZW50cyBFY2hvIHsgICAgCitwdWJsaWMgY2xhc3MgRWNob0NvbXBvbmVudEltcGwgaW1wbGVtZW50cyBFY2hvIHsKIAotICAgIHB1YmxpYyBTdHJpbmcgZWNobyhTdHJpbmcgbXNnKSB7ICAgICAgICAKKyAgICBwdWJsaWMgU3RyaW5nIGVjaG8oU3RyaW5nIG1zZykgewogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVjaG86ICIrIG1zZyk7CiAgICAgICAgIHJldHVybiAiZWNobzogIiArIG1zZzsKICAgICB9CiAKKyAgICAKKyAgICBwdWJsaWMgdm9pZCBlY2hvVm9pZCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFY2hvOiBWT0lEIik7CisgICAgfQorCiAgICAgcHVibGljIHZvaWQgZWNob0J1c2luZXNzRXhjZXB0aW9uKCkgdGhyb3dzIEVjaG9CdXNpbmVzc0V4Y2VwdGlvbiB7CiAgICAgICAgIHRocm93IG5ldyBFY2hvQnVzaW5lc3NFeGNlcHRpb24oIkJ1c2luZXNzIEV4Y2VwdGlvbiIpOwogCkBAIC01NCw2ICs2MCwxMSBAQAogICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgfQogCisgICAgcHVibGljIGRvdWJsZSBlY2hvRG91YmxlKGRvdWJsZSBwYXJhbSkgeworICAgIAlkb3VibGUgdmFsdWUgPSBwYXJhbTsKKyAgICAJcmV0dXJuIHBhcmFtOworICAgIH0KKwogICAgIHB1YmxpYyBib29sZWFuIGVjaG9Cb29sZWFuKGJvb2xlYW4gcGFyYW0pIHsKICAgICAgICAgYm9vbGVhbiB2YWx1ZSA9IHBhcmFtOwogICAgICAgICByZXR1cm4gdmFsdWU7CkBAIC05Niw4ICsxMDcsMTEgQEAKIAogICAgIH0KIAotCiAgICAgcHVibGljIHZvaWQgZ2V0XHUwM2E5XHUwM2JiXHUwM2MwKCkgewogCiAgICAgfQorCisgICAgcHVibGljIEJpZ0RlY2ltYWwgZWNob0JpZ0RlY2ltYWwoQmlnRGVjaW1hbCBwYXJhbSkgeworICAgICAgICByZXR1cm4gcGFyYW07CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL0pTT05SUENEYXRhVHlwZVRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvSlNPTlJQQ0RhdGFUeXBlVGVzdENhc2UuamF2YQppbmRleCAwZmQ2MjJkLi5kMDliY2U2IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvSlNPTlJQQ0RhdGFUeXBlVGVzdENhc2UuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvSlNPTlJQQ0RhdGFUeXBlVGVzdENhc2UuamF2YQpAQCAtMTk5LDQgKzE5OSwyMSBAQAogCiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoInJlZCIsIGpzb25SZXNwLmdldEpTT05BcnJheSgicmVzdWx0IikuZ2V0KDApKTsKICAgICB9CisgICAgCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0QmlnRGVjaW1hbCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBKU09OT2JqZWN0IGpzb25SZXF1ZXN0ID0gbmV3IEpTT05PYmplY3QoCisgICAgICAgICAgICAgICAgInsgXCJtZXRob2RcIjogXCJlY2hvQmlnRGVjaW1hbFwiLCBcInBhcmFtc1wiOiBbXCIxMjM0NS42N1wiXSwgXCJpZFwiOiA0fSIpOworCisgICAgICAgIFdlYkNvbnZlcnNhdGlvbiB3YyA9IG5ldyBXZWJDb252ZXJzYXRpb24oKTsKKyAgICAgICAgV2ViUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFBvc3RNZXRob2RXZWJSZXF1ZXN0KFNFUlZJQ0VfVVJMLAorICAgICAgICAgICAgICAgIG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShqc29uUmVxdWVzdC50b1N0cmluZygpLmdldEJ5dGVzKCJVVEYtOCIpKSwgImFwcGxpY2F0aW9uL2pzb24iKTsKKyAgICAgICAgV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSB3Yy5nZXRSZXNvdXJjZShyZXF1ZXN0KTsKKworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0UmVzcG9uc2VDb2RlKCkpOworCisgICAgICAgIEpTT05PYmplY3QganNvblJlc3AgPSBuZXcgSlNPTk9iamVjdChyZXNwb25zZS5nZXRUZXh0KCkpOworCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjEyMzQ1LjY3IiwganNvblJlc3AuZ2V0KCJyZXN1bHQiKSk7CisgICAgfSAgICAKIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvSlNPTlJQQ1JlZmVyZW5jZVRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvSlNPTlJQQ1JlZmVyZW5jZVRlc3RDYXNlLmphdmEKaW5kZXggZWZkYjBhMi4uYzYzOWQzZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL0pTT05SUENSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9KU09OUlBDUmVmZXJlbmNlVGVzdENhc2UuamF2YQpAQCAtNjcsNCArNjcsMjAgQEAKICAgICAgICAgICAgIG5vZGUuc3RvcCgpOwogICAgICAgICB9CiAgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW52b2tlUmVmZXJlbmNlVm9pZE9wZXJhdGlvbigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBOb2RlIG5vZGUgPSBudWxsOworCisgICAgICAgIFN0cmluZyBjb250cmlidXRpb24gPSBDb250cmlidXRpb25Mb2NhdGlvbkhlbHBlci5nZXRDb250cmlidXRpb25Mb2NhdGlvbihKU09OUlBDUmVmZXJlbmNlVGVzdENhc2UuY2xhc3MpOworICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJKU09OUlBDUmVmZXJlbmNlLmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oInRlc3RDbGllbnQiLCBjb250cmlidXRpb24pKTsKKyAgICAgICAgbm9kZS5zdGFydCgpOworCisgICAgICAgIEVjaG8gZWNob0NvbXBvbmVudCA9IG5vZGUuZ2V0U2VydmljZShFY2hvLmNsYXNzLCJFY2hvQ29tcG9uZW50V2l0aFJlZmVyZW5jZSIpOworICAgICAgICBlY2hvQ29tcG9uZW50LmVjaG9Wb2lkKCk7CisKKyAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvSlNPTlJQQ1NlcnZpY2VUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLWpzb25ycGMtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qc29ucnBjL0pTT05SUENTZXJ2aWNlVGVzdENhc2UuamF2YQppbmRleCA3YzZiYTZhLi44YjhkNjg5IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctanNvbnJwYy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2pzb25ycGMvSlNPTlJQQ1NlcnZpY2VUZXN0Q2FzZS5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1qc29ucnBjLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvanNvbnJwYy9KU09OUlBDU2VydmljZVRlc3RDYXNlLmphdmEKQEAgLTQyLDcgKzQyLDcgQEAKIC8qKgogICogQHZlcnNpb24gJFJldiQgJERhdGUkCiAgKi8KLXB1YmxpYyBjbGFzcyBKU09OUlBDU2VydmljZVRlc3RDYXNleworcHVibGljIGNsYXNzIEpTT05SUENTZXJ2aWNlVGVzdENhc2UgewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfUEFUSCA9ICIvRWNob1NlcnZpY2UiOwogCkBAIC02Nyw3ICs2Nyw3IEBACiAgICAgfQogCiAgICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0SlNPTlJQQ0JpbmRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RWNob1dpdGhKU09OUlBDQmluZGluZygpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBKU09OT2JqZWN0IGpzb25SZXF1ZXN0ID0gbmV3IEpTT05PYmplY3QoInsgXCJtZXRob2RcIjogXCJlY2hvXCIsIFwicGFyYW1zXCI6IFtcIkhlbGxvIEpTT04tUlBDXCJdLCBcImlkXCI6IDF9Iik7CiAKICAgICAgICAgV2ViQ29udmVyc2F0aW9uIHdjID0gbmV3IFdlYkNvbnZlcnNhdGlvbigpOwpAQCAtNzksNyArNzksNyBAQAogICAgICAgICBKU09OT2JqZWN0IGpzb25SZXNwID0gbmV3IEpTT05PYmplY3QocmVzcG9uc2UuZ2V0VGV4dCgpKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiZWNobzogSGVsbG8gSlNPTi1SUEMiLCBqc29uUmVzcC5nZXRTdHJpbmcoInJlc3VsdCIpKTsKICAgICB9Ci0gICAgCisKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RKU09OUlBDQmluZGluZ0dFVCgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBTdHJpbmcgcGFyYW1zID0gQmFzZTY0LmVuY29kZSgiW1wiSGVsbG8gSlNPTi1SUENcIl0iLmdldEJ5dGVzKCkpOwpAQCAtOTUsNyArOTUsMTcgQEAKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiZWNobzogSGVsbG8gSlNPTi1SUEMiLCBqc29uUmVzcC5nZXRTdHJpbmcoInJlc3VsdCIpKTsKICAgICB9CiAgICAgCi0gICAgCi0gICAgCi0gICAgCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RWNob1ZvaWRXaXRoSlNPTlJQQ0JpbmRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgSlNPTk9iamVjdCBqc29uUmVxdWVzdCA9IG5ldyBKU09OT2JqZWN0KCJ7IFwibWV0aG9kXCI6IFwiZWNob1ZvaWRcIiwgXCJwYXJhbXNcIjogW10sIFwiaWRcIjogMX0iKTsKKworICAgICAgICBXZWJDb252ZXJzYXRpb24gd2MgPSBuZXcgV2ViQ29udmVyc2F0aW9uKCk7CisgICAgICAgIFdlYlJlcXVlc3QgcmVxdWVzdCAgID0gbmV3IFBvc3RNZXRob2RXZWJSZXF1ZXN0KCBTRVJWSUNFX1VSTCwgbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGpzb25SZXF1ZXN0LnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoIlVURi04IikpLCJhcHBsaWNhdGlvbi9qc29uIik7CisgICAgICAgIFdlYlJlc3BvbnNlIHJlc3BvbnNlID0gd2MuZ2V0UmVzb3VyY2UocmVxdWVzdCk7CisKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFJlc3BvbnNlQ29kZSgpKTsKKyAgICAgICAgCisgICAgICAgIEpTT05PYmplY3QganNvblJlc3AgPSBuZXcgSlNPTk9iamVjdChyZXNwb25zZS5nZXRUZXh0KCkpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIGpzb25SZXNwLmdldFN0cmluZygicmVzdWx0IikubGVuZ3RoKCkpOworICAgIH0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcmVzdC1qcy1kb2pvL0xJQ0VOU0UgYi9tb2R1bGVzL2JpbmRpbmctcmVzdC1qcy1kb2pvL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhOTA2YwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1yZXN0LWpzLWRvam8vTElDRU5TRQpAQCAtMCwwICsxLDIwNSBAQAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yZXN0LWpzLWRvam8vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2JpbmRpbmctcmVzdC1qcy1kb2pvL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZmJmMmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2JpbmRpbmctcmVzdC1qcy1kb2pvL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMTcgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KK1NDQS1WZXJzaW9uOiAxLjENCitCdW5kbGUtTmFtZTogQXBhY2hlIFR1c2NhbnkgU0NBIFJFU1QgQmluZGluZyBKYXZhU2NyaXB0IHVzaW5nIERvam8NCitCdW5kbGUtVmVuZG9yOiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24NCitCdW5kbGUtVmVyc2lvbjogMi4wLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLUxpY2Vuc2U6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC50eHQNCitCdW5kbGUtRGVzY3JpcHRpb246IEFwYWNoZSBUdXNjYW55IFNDQSBSRVNUIEJpbmRpbmcgSmF2YVNjcmlwdCB1c2kNCisgbmcgRG9qbw0KK0ltcG9ydC1QYWNrYWdlOiBqYXZheC54bWwubmFtZXNwYWNlLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucmVzdDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eud2ViLmphdmFzY3JpcHQ7dmVyc2lvbj0iMi4wLjAiDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJlc3QtanMuZG9qbw0KK0J1bmRsZS1Eb2NVUkw6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8NCisNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvTk9USUNFIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3QtanMtZG9qby9OT1RJQ0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9OT1RJQ0UKcmVuYW1lIHRvIG1vZHVsZXMvYmluZGluZy1yZXN0LWpzLWRvam8vTk9USUNFCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcmVzdC1qcy1kb2pvL3BvbS54bWwgYi9tb2R1bGVzL2JpbmRpbmctcmVzdC1qcy1kb2pvL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y1NTJhOAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvYmluZGluZy1yZXN0LWpzLWRvam8vcG9tLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktbW9kdWxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1yZXN0LWpzLWRvam88L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFJFU1QgRmVlZCBCaW5kaW5nIEphdmFTY3JpcHQgdXNpbmcgRG9qbzwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1yZXN0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS13ZWItamF2YXNjcmlwdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAKKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICA8L2RlcGVuZGVuY2llcz4gICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcmVzdC1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3QtcnVudGltZS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA0MTUzNTdjLi40ZWE2ZDk2IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcmVzdC1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL21vZHVsZXMvYmluZGluZy1yZXN0LXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIzLDI5ICsyMywzMyBAQAogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yZXN0LndpcmVmb3JtYXQueG1sO3ZlcnNpb249IjIuMC4wIiwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi5odHRwO3ZlcnNpb249IjIuMC4wIiwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmU7dmVyc2lvbj0iMi4wLjAiLAorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5pbnZvY2F0aW9uO3ZlcnNpb249IjIuMC4wIiwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nO3ZlcnNpb249IjIuMC4wIiwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLmphdmFiZWFuczt2ZXJzaW9uPSIyLjAuMCIsCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy54bWw7dmVyc2lvbj0iMi4wLjAiLAorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZXh0ZW5zaWJpbGl0eTt2ZXJzaW9uPSIyLjAuMCIsCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0Lmh0dHA7dmVyc2lvbj0iMi4wLjAiLAogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmO3ZlcnNpb249IjIuMC4wIiwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5pbXBsO3ZlcnNpb249IjIuMC4wIiwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhO3ZlcnNpb249IjIuMC4wIiwKKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmpheHJzO3ZlcnNpb249IjIuMC4wIiwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsO3ZlcnNpb249IjIuMC4wIiwKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb247dmVyc2lvbj0iMi4wLjAiLAogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXI7dmVyc2lvbj0iMi4wLjAiLAogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZTt2ZXJzaW9uPSIyLjAuMCIsCi0gb3JnLmFwYWNoZS53aW5rLmNsaWVudCwKLSBvcmcuYXBhY2hlLndpbmsuY2xpZW50LmhhbmRsZXJzLAotIG9yZy5hcGFjaGUud2luay5jb21tb24sCi0gb3JnLmFwYWNoZS53aW5rLmNvbW1vbi5pbnRlcm5hbC5yZWdpc3RyeSwKLSBvcmcuYXBhY2hlLndpbmsuY29tbW9uLmludGVybmFsLnJlZ2lzdHJ5Lm1ldGFkYXRhLAotIG9yZy5hcGFjaGUud2luay5zZXJ2ZXIuaW50ZXJuYWwsCi0gb3JnLmFwYWNoZS53aW5rLnNlcnZlci5pbnRlcm5hbC5yZWdpc3RyeSwKLSBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmludGVybmFsLnNlcnZsZXQsCi0gb3JnLmFwYWNoZS53aW5rLnNlcnZlci51dGlscywKKyBvcmcuYXBhY2hlLndpbmsuY2xpZW50O3ZlcnNpb249IjEuMS4xLmluY3ViYXRpbmciLAorIG9yZy5hcGFjaGUud2luay5jbGllbnQuaGFuZGxlcnM7dmVyc2lvbj0iMS4xLjEuaW5jdWJhdGluZyIsCisgb3JnLmFwYWNoZS53aW5rLmNvbW1vbjt2ZXJzaW9uPSIxLjEuMS5pbmN1YmF0aW5nIiwKKyBvcmcuYXBhY2hlLndpbmsuY29tbW9uLmludGVybmFsLnJlZ2lzdHJ5O3ZlcnNpb249IjEuMS4xLmluY3ViYXRpbmciLAorIG9yZy5hcGFjaGUud2luay5jb21tb24uaW50ZXJuYWwucmVnaXN0cnkubWV0YWRhdGE7dmVyc2lvbj0iMS4xLjEuaW5jdWJhdGluZyIsCisgb3JnLmFwYWNoZS53aW5rLnNlcnZlci5pbnRlcm5hbDt2ZXJzaW9uPSIxLjEuMS5pbmN1YmF0aW5nIiwKKyBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmludGVybmFsLnJlZ2lzdHJ5O3ZlcnNpb249IjEuMS4xLmluY3ViYXRpbmciLAorIG9yZy5hcGFjaGUud2luay5zZXJ2ZXIuaW50ZXJuYWwuc2VydmxldDt2ZXJzaW9uPSIxLjEuMS5pbmN1YmF0aW5nIiwKKyBvcmcuYXBhY2hlLndpbmsuc2VydmVyLnV0aWxzO3ZlcnNpb249IjEuMS4xLmluY3ViYXRpbmciLAogIG9yZy5vYXNpc29wZW4uc2NhO3ZlcnNpb249IjIuMC4wIiwKICBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uO3ZlcnNpb249IjIuMC4wIgogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJlc3QucnVudGltZQogQnVuZGxlLURvY1VSTDogaHR0cDovL3d3dy5hcGFjaGUub3JnLwogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYKK1JlcXVpcmUtQnVuZGxlOiBvcmcuYXBhY2hlLndpbmsuc2VydmVyCiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yZXN0LXJ1bnRpbWUvcG9tLnhtbCBiL21vZHVsZXMvYmluZGluZy1yZXN0LXJ1bnRpbWUvcG9tLnhtbAppbmRleCBlOThkOWU5Li45N2QyNTk1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcmVzdC1ydW50aW1lL3BvbS54bWwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3QtcnVudGltZS9wb20ueG1sCkBAIC0zNiwxMyArMzYsNiBAQAogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmphdmF4LndzLnJzPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anNyMzExLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YS1hcGk8L2FydGlmYWN0SWQ+CkBAIC05Miw2ICs4NSwzNiBAQAogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbnRlcmZhY2UtamF2YS1qYXhyczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgud3MucnM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qc3IzMTEtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4xPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndpbms8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD53aW5rLXNlcnZlcjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4xLWluY3ViYXRpbmc8L3ZlcnNpb24+CisgICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnN1bi54bWwuYmluZDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4Yi1pbXBsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgPC9leGNsdXNpb25zPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndpbms8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD53aW5rLWNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4xLWluY3ViYXRpbmc8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KQEAgLTEwNywzNSArMTMwLDE2IEBACiAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbnRlcmZhY2UtamF2YS1qYXhyczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndpbms8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD53aW5rLXNlcnZlcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4xLWluY3ViYXRpbmc8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUud2luazwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPndpbmstY2xpZW50PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS4xLjEtaW5jdWJhdGluZzwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yZXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcmVzdC9wcm92aWRlci9SRVNUQmluZGluZ0xpc3RlbmVyU2VydmxldC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3QtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yZXN0L3Byb3ZpZGVyL1JFU1RCaW5kaW5nTGlzdGVuZXJTZXJ2bGV0LmphdmEKaW5kZXggNDU4M2IxMS4uZTBhNjgxZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJlc3QtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yZXN0L3Byb3ZpZGVyL1JFU1RCaW5kaW5nTGlzdGVuZXJTZXJ2bGV0LmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3QtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yZXN0L3Byb3ZpZGVyL1JFU1RCaW5kaW5nTGlzdGVuZXJTZXJ2bGV0LmphdmEKQEAgLTYsMTUgKzYsMTUgQEAKICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAorICoKICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKKyAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJlc3QucHJvdmlkZXI7CkBAIC02Niw3ICs2Niw3IEBACiAgICAgcHJpdmF0ZSBJbnZva2VyIGNvbmRpdGlvbmFsUG9zdEludm9rZXI7CiAgICAgcHJpdmF0ZSBJbnZva2VyIGRlbGV0ZUludm9rZXI7CiAgICAgcHJpdmF0ZSBJbnZva2VyIGNvbmRpdGlvbmFsRGVsZXRlSW52b2tlcjsKLSAgICAKKwogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgUkVTVFNlcnZpY2VMaXN0ZW5lclNlcnZsZXQuCiAgICAgICovCkBAIC05Miw3ICs5Miw3IEBACiAgICAgICAgICAgICBNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSA9IGJpbmRpbmdJbnZva2VyLmludm9rZShyZXF1ZXN0TWVzc2FnZSk7CiAKICAgICAgICAgICAgIC8vIHJldHVybiByZXNwb25zZSB0byBjbGllbnQKLSAgICAgICAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UuaXNGYXVsdCgpKSB7ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocmVzcG9uc2VNZXNzYWdlLmlzRmF1bHQoKSkgewogICAgICAgICAgICAgICAgIC8vIFR1cm4gYSBmYXVsdCBpbnRvIGFuIGV4Y2VwdGlvbgogICAgICAgICAgICAgICAgIFRocm93YWJsZSBlID0gKFRocm93YWJsZSlyZXNwb25zZU1lc3NhZ2UuZ2V0Qm9keSgpOwogICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlLlNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUiwgZS50b1N0cmluZygpKTsKQEAgLTExNywyNSArMTE3LDI2IEBACiAgICAgICAgICAgICAgICAgLy9oYW5kbGUgdm9pZCBvcGVyYXRpb25zCiAgICAgICAgICAgICAgICAgd3JpdGUocmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCksIHJlc3BvbnNlTWVzc2FnZS5nZXRCb2R5KCkpOwogICAgICAgICAgICAgICAgIHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpLmZsdXNoKCk7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkuY2xvc2UoKTsgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCkuY2xvc2UoKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN1cGVyLnNlcnZpY2UocmVxdWVzdCwgcmVzcG9uc2UpOwogICAgICAgICB9CiAKIAotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIC8vIEdldCB0aGUgcmVxdWVzdCBwYXRoCi0gICAgICAgIFN0cmluZyBwYXRoID0gVVJMRGVjb2Rlci5kZWNvZGUocmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCkuc3Vic3RyaW5nKHJlcXVlc3QuZ2V0U2VydmxldFBhdGgoKS5sZW5ndGgoKSksICJVVEYtOCIpOwotICAgICAgICBpZiAocGF0aC5sZW5ndGgoKSA9PTApIHsgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIHBhdGhJbmZvID0gcmVxdWVzdC5nZXRQYXRoSW5mbygpOworICAgICAgICBpZiAocGF0aEluZm8gPT0gbnVsbCB8fCBwYXRoSW5mby5sZW5ndGgoKSA9PSAwKSB7CiAgICAgICAgICAgICAvLyBSZWRpcmVjdCB0byBhIFVSTCBlbmRpbmcgd2l0aCAvIHRvIG1ha2UgcmVsYXRpdmUgaHJlZnMgd29yawogICAgICAgICAgICAgLy8gcmVsYXRpdmUgdG8gdGhlIHNlcnZlZCByZXNvdXJjZS4KICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmRSZWRpcmVjdChyZXF1ZXN0LmdldFJlcXVlc3RVUkwoKS5hcHBlbmQoJy8nKS50b1N0cmluZygpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQorICAgICAgICBTdHJpbmcgcGF0aCA9IFVSTERlY29kZXIuZGVjb2RlKHBhdGhJbmZvLCAiVVRGLTgiKTsKIAogICAgICAgICAvLyBJbnZva2UgdGhlIGdldCBvcGVyYXRpb24gb24gdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24KICAgICAgICAgTWVzc2FnZSByZXF1ZXN0TWVzc2FnZSA9IG1lc3NhZ2VGYWN0b3J5LmNyZWF0ZU1lc3NhZ2UoKTsKQEAgLTE0NCw5ICsxNDUsOSBAQAogCiAgICAgICAgIE1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlID0gbnVsbDsKICAgICAgICAgSFRUUENhY2hlQ29udGV4dCBjYWNoZUNvbnRleHQgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGNhY2hlQ29udGV4dCA9IEhUVFBDYWNoZUNvbnRleHQuY3JlYXRlQ2FjaGVDb250ZXh0RnJvbVJlcXVlc3QocmVxdWVzdCk7Ci0gICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsgCisgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKIAogICAgICAgICB9CiAKQEAgLTE4NSwxMiArMTg2LDEyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIC0xIDwgKGluZGV4ID0gYm9keS5nZXRDbGFzcygpLmdldE5hbWUoKS5pbmRleE9mKCAiUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uIikpICkgewotICAgICAgICAgICAgICAgIGlmICggaW5kZXggPiAtMSApIHsgCisgICAgICAgICAgICAgICAgaWYgKCBpbmRleCA+IC0xICkgewogICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZW5kRXJyb3IoIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfUFJFQ09ORElUSU9OX0ZBSUxFRCwgYm9keS50b1N0cmluZygpLnN1YnN0cmluZyggaW5kZXggKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKCBIdHRwU2VydmxldFJlc3BvbnNlLlNDX1BSRUNPTkRJVElPTl9GQUlMRUQgKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAkJCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigoVGhyb3dhYmxlKXJlc3BvbnNlTWVzc2FnZS5nZXRCb2R5KCkpOwpAQCAtMjA3LDcgKzIwOCw3IEBACiAgICAgICAgIC8vIFdyaXRlIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHRvIHRoZSByZXNwb25zZQogICAgICAgICAvLyBvdXRwdXQgc3RyZWFtCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gKElucHV0U3RyZWFtKXJlc3BvbnNlTWVzc2FnZS5nZXRCb2R5KCk7Ci0gICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpOyAKKyAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsyMDQ4XTsKICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgaW50IG4gPSBpcy5yZWFkKGJ1ZmZlcik7CkBAIC0yMTYsMTQgKzIxNywxNCBAQAogICAgICAgICAgICAgb3Mud3JpdGUoYnVmZmVyLCAwLCBuKTsKICAgICAgICAgfQogICAgICAgICBvcy5mbHVzaCgpOwotICAgICAgICBvcy5jbG9zZSgpOyAgICAgICAgCisgICAgICAgIG9zLmNsb3NlKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9EZWxldGUoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIC8vIEdldCB0aGUgcmVxdWVzdCBwYXRoCiAgICAgICAgIFN0cmluZyBwYXRoID0gVVJMRGVjb2Rlci5kZWNvZGUocmVxdWVzdC5nZXRSZXF1ZXN0VVJJKCkuc3Vic3RyaW5nKHJlcXVlc3QuZ2V0U2VydmxldFBhdGgoKS5sZW5ndGgoKSksICJVVEYtOCIpOwotICAgICAgICBpZiAocGF0aC5sZW5ndGgoKSA9PTApIHsgICAgICAgICAgICAKKyAgICAgICAgaWYgKHBhdGgubGVuZ3RoKCkgPT0wKSB7CiAgICAgICAgICAgICAvLyBSZWRpcmVjdCB0byBhIFVSTCBlbmRpbmcgd2l0aCAvIHRvIG1ha2UgcmVsYXRpdmUgaHJlZnMgd29yawogICAgICAgICAgICAgLy8gcmVsYXRpdmUgdG8gdGhlIHNlcnZlZCByZXNvdXJjZS4KICAgICAgICAgICAgIHJlc3BvbnNlLnNlbmRSZWRpcmVjdChyZXF1ZXN0LmdldFJlcXVlc3RVUkwoKS5hcHBlbmQoJy8nKS50b1N0cmluZygpKTsKQEAgLTIzNiwxMyArMjM3LDEzIEBACiAKICAgICAgICAgTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UgPSBudWxsOwogICAgICAgICBIVFRQQ2FjaGVDb250ZXh0IGNhY2hlQ29udGV4dCA9IG51bGw7Ci0gICAgICAgIHRyeSB7IAorICAgICAgICB0cnkgewogICAgICAgICAgICAgY2FjaGVDb250ZXh0ID0gSFRUUENhY2hlQ29udGV4dC5jcmVhdGVDYWNoZUNvbnRleHRGcm9tUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeyAgICAgICAgCQorICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBSb3V0ZSBtZXNzYWdlIGJhc2VkIG9uIGF2YWlsYWJpbGl0eSBvZiBjYWNoZSBpbmZvIGFuZCBjYWNoZSBtZXRob2RzCi0gICAgICAgIGlmICgoIGNhY2hlQ29udGV4dCAhPSBudWxsICkgJiYgKGNhY2hlQ29udGV4dC5pc0VuYWJsZWQoKSkgJiYgKGNvbmRpdGlvbmFsRGVsZXRlSW52b2tlciAhPSBudWxsICkpIHsgICAgICAgIAorICAgICAgICBpZiAoKCBjYWNoZUNvbnRleHQgIT0gbnVsbCApICYmIChjYWNoZUNvbnRleHQuaXNFbmFibGVkKCkpICYmIChjb25kaXRpb25hbERlbGV0ZUludm9rZXIgIT0gbnVsbCApKSB7CiAgICAgICAgICAgICByZXF1ZXN0TWVzc2FnZS5zZXRCb2R5KG5ldyBPYmplY3RbXSB7aWQsIGNhY2hlQ29udGV4dH0pOwogICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlID0gY29uZGl0aW9uYWxEZWxldGVJbnZva2VyLmludm9rZShyZXF1ZXN0TWVzc2FnZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0yNjYsOCArMjY3LDggQEAKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZW5kRXJyb3IoIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfUFJFQ09ORElUSU9OX0ZBSUxFRCApOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47ICAgICAgICAgICAgCQkKLSAgICAgICAgICAgIH0gICAgICAgIAkJCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigoVGhyb3dhYmxlKXJlc3BvbnNlTWVzc2FnZS5nZXRCb2R5KCkpOwogICAgICAgICB9CkBAIC0yNzUsNyArMjc2LDcgQEAKICAgICAgICAgLy8gV3JpdGUgdGhlIHJlc3BvbnNlIGZyb20gdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24gdG8gdGhlIHJlc3BvbnNlCiAgICAgICAgIC8vIG91dHB1dCBzdHJlYW0KICAgICAgICAgSW5wdXRTdHJlYW0gaXMgPSAoSW5wdXRTdHJlYW0pcmVzcG9uc2VNZXNzYWdlLmdldEJvZHkoKTsKLSAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7IAorICAgICAgICBPdXRwdXRTdHJlYW0gb3MgPSByZXNwb25zZS5nZXRPdXRwdXRTdHJlYW0oKTsKICAgICAgICAgYnl0ZVtdIGJ1ZmZlciA9IG5ldyBieXRlWzIwNDhdOwogICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBpbnQgbiA9IGlzLnJlYWQoYnVmZmVyKTsKQEAgLTI4NCwxNCArMjg1LDE0IEBACiAgICAgICAgICAgICBvcy53cml0ZShidWZmZXIsIDAsIG4pOwogICAgICAgICB9CiAgICAgICAgIG9zLmZsdXNoKCk7Ci0gICAgICAgIG9zLmNsb3NlKCk7ICAgICAgICAKKyAgICAgICAgb3MuY2xvc2UoKTsKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKICAgICBwcm90ZWN0ZWQgdm9pZCBkb1B1dChIdHRwU2VydmxldFJlcXVlc3QgcmVxdWVzdCwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFNlcnZsZXRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKICAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0IHBhdGgKICAgICAgICAgU3RyaW5nIHBhdGggPSBVUkxEZWNvZGVyLmRlY29kZShyZXF1ZXN0LmdldFJlcXVlc3RVUkkoKS5zdWJzdHJpbmcocmVxdWVzdC5nZXRTZXJ2bGV0UGF0aCgpLmxlbmd0aCgpKSwgIlVURi04Iik7Ci0gICAgICAgIGlmIChwYXRoLmxlbmd0aCgpID09MCkgeyAgICAgICAgICAgIAorICAgICAgICBpZiAocGF0aC5sZW5ndGgoKSA9PTApIHsKICAgICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIGEgVVJMIGVuZGluZyB3aXRoIC8gdG8gbWFrZSByZWxhdGl2ZSBocmVmcyB3b3JrCiAgICAgICAgICAgICAvLyByZWxhdGl2ZSB0byB0aGUgc2VydmVkIHJlc291cmNlLgogICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZFJlZGlyZWN0KHJlcXVlc3QuZ2V0UmVxdWVzdFVSTCgpLmFwcGVuZCgnLycpLnRvU3RyaW5nKCkpOwpAQCAtMzA0LDEzICszMDUsMTMgQEAKIAogICAgICAgICBNZXNzYWdlIHJlc3BvbnNlTWVzc2FnZSA9IG51bGw7CiAgICAgICAgIEhUVFBDYWNoZUNvbnRleHQgY2FjaGVDb250ZXh0ID0gbnVsbDsKLSAgICAgICAgdHJ5IHsgCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBjYWNoZUNvbnRleHQgPSBIVFRQQ2FjaGVDb250ZXh0LmNyZWF0ZUNhY2hlQ29udGV4dEZyb21SZXF1ZXN0KHJlcXVlc3QpOwotICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7ICAgICAgICAJCisgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFJvdXRlIG1lc3NhZ2UgYmFzZWQgb24gYXZhaWxhYmlsaXR5IG9mIGNhY2hlIGluZm8gYW5kIGNhY2hlIG1ldGhvZHMKLSAgICAgICAgaWYgKCggY2FjaGVDb250ZXh0ICE9IG51bGwgKSAmJiAoY2FjaGVDb250ZXh0LmlzRW5hYmxlZCgpKSAmJiAoY29uZGl0aW9uYWxQdXRJbnZva2VyICE9IG51bGwgKSkgeyAgICAgICAgCisgICAgICAgIGlmICgoIGNhY2hlQ29udGV4dCAhPSBudWxsICkgJiYgKGNhY2hlQ29udGV4dC5pc0VuYWJsZWQoKSkgJiYgKGNvbmRpdGlvbmFsUHV0SW52b2tlciAhPSBudWxsICkpIHsKICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLnNldEJvZHkobmV3IE9iamVjdFtdIHtpZCwgY2FjaGVDb250ZXh0fSk7CiAgICAgICAgICAgICByZXNwb25zZU1lc3NhZ2UgPSBjb25kaXRpb25hbFB1dEludm9rZXIuaW52b2tlKHJlcXVlc3RNZXNzYWdlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMyOSwxMyArMzMwLDEzIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoIC0xIDwgKGluZGV4ID0gYm9keS5nZXRDbGFzcygpLmdldE5hbWUoKS5pbmRleE9mKCAiUHJlY29uZGl0aW9uRmFpbGVkRXhjZXB0aW9uIikpICkgewotICAgICAgICAgICAgICAgIGlmICggaW5kZXggPiAtMSApIHsgCisgICAgICAgICAgICAgICAgaWYgKCBpbmRleCA+IC0xICkgewogICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5zZW5kRXJyb3IoIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfUFJFQ09ORElUSU9OX0ZBSUxFRCwgYm9keS50b1N0cmluZygpLnN1YnN0cmluZyggaW5kZXggKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKCBIdHRwU2VydmxldFJlc3BvbnNlLlNDX1BSRUNPTkRJVElPTl9GQUlMRUQgKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgIAkJCi0gICAgICAgICAgICB9ICAgICAgICAJCQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZsZXRFeGNlcHRpb24oKFRocm93YWJsZSlyZXNwb25zZU1lc3NhZ2UuZ2V0Qm9keSgpKTsKICAgICAgICAgfQpAQCAtMzQzLDcgKzM0NCw3IEBACiAgICAgICAgIC8vIFdyaXRlIHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHRvIHRoZSByZXNwb25zZQogICAgICAgICAvLyBvdXRwdXQgc3RyZWFtCiAgICAgICAgIElucHV0U3RyZWFtIGlzID0gKElucHV0U3RyZWFtKXJlc3BvbnNlTWVzc2FnZS5nZXRCb2R5KCk7Ci0gICAgICAgIE91dHB1dFN0cmVhbSBvcyA9IHJlc3BvbnNlLmdldE91dHB1dFN0cmVhbSgpOyAKKyAgICAgICAgT3V0cHV0U3RyZWFtIG9zID0gcmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCk7CiAgICAgICAgIGJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsyMDQ4XTsKICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgaW50IG4gPSBpcy5yZWFkKGJ1ZmZlcik7CkBAIC0zNTIsMTQgKzM1MywxNCBAQAogICAgICAgICAgICAgb3Mud3JpdGUoYnVmZmVyLCAwLCBuKTsKICAgICAgICAgfQogICAgICAgICBvcy5mbHVzaCgpOwotICAgICAgICBvcy5jbG9zZSgpOyAgICAgICAgCisgICAgICAgIG9zLmNsb3NlKCk7CiAgICAgfQogCiAgICAgQE92ZXJyaWRlCiAgICAgcHJvdGVjdGVkIHZvaWQgZG9Qb3N0KEh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBIdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3QgcGF0aAogICAgICAgICBTdHJpbmcgcGF0aCA9IFVSTERlY29kZXIuZGVjb2RlKHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpLnN1YnN0cmluZyhyZXF1ZXN0LmdldFNlcnZsZXRQYXRoKCkubGVuZ3RoKCkpLCAiVVRGLTgiKTsKLSAgICAgICAgaWYgKHBhdGgubGVuZ3RoKCkgPT0wKSB7ICAgICAgICAgICAgCisgICAgICAgIGlmIChwYXRoLmxlbmd0aCgpID09MCkgewogICAgICAgICAgICAgLy8gUmVkaXJlY3QgdG8gYSBVUkwgZW5kaW5nIHdpdGggLyB0byBtYWtlIHJlbGF0aXZlIGhyZWZzIHdvcmsKICAgICAgICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzZXJ2ZWQgcmVzb3VyY2UuCiAgICAgICAgICAgICByZXNwb25zZS5zZW5kUmVkaXJlY3QocmVxdWVzdC5nZXRSZXF1ZXN0VVJMKCkuYXBwZW5kKCcvJykudG9TdHJpbmcoKSk7CkBAIC0zNjksMTYgKzM3MCwxNiBAQAogICAgICAgICAvLyBJbnZva2UgdGhlIGdldCBvcGVyYXRpb24gb24gdGhlIHNlcnZpY2UgaW1wbGVtZW50YXRpb24KICAgICAgICAgTWVzc2FnZSByZXF1ZXN0TWVzc2FnZSA9IG1lc3NhZ2VGYWN0b3J5LmNyZWF0ZU1lc3NhZ2UoKTsKICAgICAgICAgLy8gU3RyaW5nIGlkID0gcGF0aC5zdWJzdHJpbmcoMSk7Ci0gICAgICAgIAorCiAgICAgICAgIE1lc3NhZ2UgcmVzcG9uc2VNZXNzYWdlID0gbnVsbDsKICAgICAgICAgSFRUUENhY2hlQ29udGV4dCBjYWNoZUNvbnRleHQgPSBudWxsOwotICAgICAgICB0cnkgeyAKKyAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY2FjaGVDb250ZXh0ID0gSFRUUENhY2hlQ29udGV4dC5jcmVhdGVDYWNoZUNvbnRleHRGcm9tUmVxdWVzdChyZXF1ZXN0KTsKLSAgICAgICAgfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gZSkgeyAgICAgICAgCQorICAgICAgICB9IGNhdGNoIChQYXJzZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gUm91dGUgbWVzc2FnZSBiYXNlZCBvbiBhdmFpbGFiaWxpdHkgb2YgY2FjaGUgaW5mbyBhbmQgY2FjaGUgbWV0aG9kcwotICAgICAgICBpZiAoKCBjYWNoZUNvbnRleHQgIT0gbnVsbCApICYmIChjYWNoZUNvbnRleHQuaXNFbmFibGVkKCkpICYmIChjb25kaXRpb25hbFBvc3RJbnZva2VyICE9IG51bGwgKSkgeyAgICAgICAgCisgICAgICAgIGlmICgoIGNhY2hlQ29udGV4dCAhPSBudWxsICkgJiYgKGNhY2hlQ29udGV4dC5pc0VuYWJsZWQoKSkgJiYgKGNvbmRpdGlvbmFsUG9zdEludm9rZXIgIT0gbnVsbCApKSB7CiAgICAgICAgIAlyZXF1ZXN0TWVzc2FnZS5zZXRCb2R5KG5ldyBPYmplY3RbXSB7Y2FjaGVDb250ZXh0fSk7CiAgICAgICAgIAlyZXNwb25zZU1lc3NhZ2UgPSBjb25kaXRpb25hbFBvc3RJbnZva2VyLmludm9rZShyZXF1ZXN0TWVzc2FnZSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC0zODcsMjIgKzM4OCwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UuaXNGYXVsdCgpKSB7CiAgICAgICAgIAlPYmplY3QgYm9keSA9IHJlc3BvbnNlTWVzc2FnZS5nZXRCb2R5KCk7Ci0gICAgICAgIAkKKwogICAgICAgICAJaW50IGluZGV4ID0gLTE7CiAgICAgICAgIAlpZiAoIC0xIDwgKGluZGV4ID0gYm9keS5nZXRDbGFzcygpLmdldE5hbWUoKS5pbmRleE9mKCAiTm90TW9kaWZpZWRFeGNlcHRpb24iKSkgKSB7Ci0gICAgICAgIAkJaWYgKCBpbmRleCA+IC0xICkgCisgICAgICAgIAkJaWYgKCBpbmRleCA+IC0xICkKICAgICAgICAgICAgIAkJcmVzcG9uc2Uuc2VuZEVycm9yKCBIdHRwU2VydmxldFJlc3BvbnNlLlNDX05PVF9NT0RJRklFRCwgYm9keS50b1N0cmluZygpLnN1YnN0cmluZyggaW5kZXggKSk7CiAgICAgICAgIAkJZWxzZQogICAgICAgICAgICAgCQlyZXNwb25zZS5zZW5kRXJyb3IoIEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9UX01PRElGSUVEICk7CiAgICAgICAgIAkJcmV0dXJuOwogICAgICAgICAJfSBlbHNlIGlmICggLTEgPCAoaW5kZXggPSBib2R5LmdldENsYXNzKCkuZ2V0TmFtZSgpLmluZGV4T2YoICJQcmVjb25kaXRpb25GYWlsZWRFeGNlcHRpb24iKSkgKSB7Ci0gICAgICAgIAkJaWYgKCBpbmRleCA+IC0xICkgCisgICAgICAgIAkJaWYgKCBpbmRleCA+IC0xICkKICAgICAgICAgICAgIAkJcmVzcG9uc2Uuc2VuZEVycm9yKCBIdHRwU2VydmxldFJlc3BvbnNlLlNDX1BSRUNPTkRJVElPTl9GQUlMRUQsIGJvZHkudG9TdHJpbmcoKS5zdWJzdHJpbmcoIGluZGV4ICkpOwogICAgICAgICAJCWVsc2UKICAgICAgICAgICAgIAkJcmVzcG9uc2Uuc2VuZEVycm9yKCBIdHRwU2VydmxldFJlc3BvbnNlLlNDX1BSRUNPTkRJVElPTl9GQUlMRUQgKTsKLSAgICAgICAgCQlyZXR1cm47ICAgICAgICAgICAgCQkKLSAgICAgICAgICAgIH0gICAgICAgIAkJCi0gICAgICAgIAkKKyAgICAgICAgCQlyZXR1cm47CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKChUaHJvd2FibGUpcmVzcG9uc2VNZXNzYWdlLmdldEJvZHkoKSk7CiAgICAgICAgIH0KIApAQCAtNDI1LDE1ICs0MjYsMTUgQEAKICAgICAJfQogICAgIH0KIAotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0SW52b2tlcihJbnZva2VyIGludm9rZXIpIHsKICAgICAgICAgdGhpcy5pbnZva2VyID0gaW52b2tlcjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgSW52b2tlciBnZXRJbnZva2VyKCkgewogICAgICAgICByZXR1cm4gaW52b2tlcjsKICAgICB9Ci0gICAgCisKIAogICAgIC8qKgogICAgICAqIEByZXR1cm4gdGhlIGdldEludm9rZXIKQEAgLTU0OCwxMyArNTQ5LDEzIEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogCisgICAgICoKICAgICAgKiBVdGlsaXR5IG1ldGhvZHMKLSAgICAgKiAKKyAgICAgKgogICAgICAqLwotICAgIAotICAgIAotICAgIAorCisKKwogICAgIHByaXZhdGUgdm9pZCB3cml0ZShPdXRwdXRTdHJlYW0gb3V0LCBPYmplY3Qgb2JqKSB0aHJvd3MgSU9FeGNlcHRpb24gewogICAgICAgICBpZiAob2JqID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTU3Nyw2ICs1NzgsNiBAQAogICAgICAgICAgICAgb3V0LndyaXRlKG9iai50b1N0cmluZygpLmdldEJ5dGVzKCJVVEYtOCIpKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcmVzdC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jlc3QvcHJvdmlkZXIvUkVTVFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1yZXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcmVzdC9wcm92aWRlci9SRVNUU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCmluZGV4IDlhOWU1YTEuLmVjNjA3ZTkgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1yZXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcmVzdC9wcm92aWRlci9SRVNUU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1yZXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcmVzdC9wcm92aWRlci9SRVNUU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCkBAIC0yMTEsOSArMjExLDEzIEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJObyBnZXQgb3Igc2VydmljZSBtZXRob2QgZm91bmQgb24gdGhlIHNlcnZpY2UiKTsKICAgICAgICAgfQogCisgICAgICAgIHNlcnZsZXRNYXBwaW5nID0gcmVnaXN0ZXJTZXJ2bGV0KHNlcnZsZXQpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgcmVnaXN0ZXJTZXJ2bGV0KFNlcnZsZXQgc2VydmxldCkgewogICAgICAgICAvLyBDcmVhdGUgb3VyIEhUVFAgc2VydmljZSBsaXN0ZW5lciBTZXJ2bGV0IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZQogICAgICAgICAvLyBTZXJ2bGV0IGhvc3QKLSAgICAgICAgc2VydmxldE1hcHBpbmcgPSBiaW5kaW5nLmdldFVSSSgpOworICAgICAgICBTdHJpbmcgc2VydmxldE1hcHBpbmcgPSBiaW5kaW5nLmdldFVSSSgpOwogICAgICAgICBpZiAoIXNlcnZsZXRNYXBwaW5nLmVuZHNXaXRoKCIvIikpIHsKICAgICAgICAgICAgIHNlcnZsZXRNYXBwaW5nICs9ICIvIjsKICAgICAgICAgfQpAQCAtMjIxLDcgKzIyNSwxMyBAQAogICAgICAgICAgICAgc2VydmxldE1hcHBpbmcgKz0gIioiOwogICAgICAgICB9CiAKLSAgICAgICAgc2VydmxldEhvc3QuYWRkU2VydmxldE1hcHBpbmcoc2VydmxldE1hcHBpbmcsIHNlcnZsZXQpOworICAgICAgICBTdHJpbmcgbWFwcGVkVVJJID0gc2VydmxldEhvc3QuYWRkU2VydmxldE1hcHBpbmcoc2VydmxldE1hcHBpbmcsIHNlcnZsZXQpOworICAgICAgICBTdHJpbmcgZGVwbG95ZWRVUkkgPSBtYXBwZWRVUkk7CisgICAgICAgIGlmIChkZXBsb3llZFVSSS5lbmRzV2l0aCgiKiIpKSB7CisgICAgICAgICAgICBkZXBsb3llZFVSSSA9IGRlcGxveWVkVVJJLnN1YnN0cmluZygwLCBkZXBsb3llZFVSSS5sZW5ndGgoKSAtIDEpOworICAgICAgICB9CisgICAgICAgIGJpbmRpbmcuc2V0VVJJKGRlcGxveWVkVVJJKTsKKyAgICAgICAgcmV0dXJuIG1hcHBlZFVSSTsKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewpAQCAtMjU2LDE5ICsyNjYsMTAgQEAKICAgICAgICAgICAgIGlmIChpc0pBWFJTKSB7CiAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24gPSBuZXcgU2ltcGxlQXBwbGljYXRpb24oaW50ZXJmYXplKTsKIAotICAgICAgICAgICAgICAgIFR1c2NhbnlSRVNUU2VydmxldCByZXN0U2VydmxldCA9IG5ldyBUdXNjYW55UkVTVFNlcnZsZXQoZXh0ZW5zaW9uUG9pbnRzLCBhcHBsaWNhdGlvbi5yZXNvdXJjZUNsYXNzKTsKKyAgICAgICAgICAgICAgICBUdXNjYW55UkVTVFNlcnZsZXQgcmVzdFNlcnZsZXQgPSBuZXcgVHVzY2FueVJFU1RTZXJ2bGV0KGV4dGVuc2lvblBvaW50cywgYmluZGluZywgYXBwbGljYXRpb24ucmVzb3VyY2VDbGFzcyk7CiAKLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgb3VyIEhUVFAgc2VydmljZSBsaXN0ZW5lciBTZXJ2bGV0IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZQotICAgICAgICAgICAgICAgIC8vIFNlcnZsZXQgaG9zdAotICAgICAgICAgICAgICAgIHNlcnZsZXRNYXBwaW5nID0gYmluZGluZy5nZXRVUkkoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXNlcnZsZXRNYXBwaW5nLmVuZHNXaXRoKCIvIikpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VydmxldE1hcHBpbmcgKz0gIi8iOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXNlcnZsZXRNYXBwaW5nLmVuZHNXaXRoKCIqIikpIHsKLSAgICAgICAgICAgICAgICAgICAgc2VydmxldE1hcHBpbmcgKz0gIioiOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHNlcnZsZXRIb3N0LmFkZFNlcnZsZXRNYXBwaW5nKHNlcnZsZXRNYXBwaW5nLCByZXN0U2VydmxldCk7CisgICAgICAgICAgICAgICAgc2VydmxldE1hcHBpbmcgPSByZWdpc3RlclNlcnZsZXQocmVzdFNlcnZsZXQpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFJlZ2lzdHJhdGlvblV0aWxzLnJlZ2lzdGVyQXBwbGljYXRpb24oYXBwbGljYXRpb24sIHJlc3RTZXJ2bGV0LmdldFNlcnZsZXRDb250ZXh0KCkpOwogICAgICAgICAgICAgICAgIHJldHVybiBhcHBsaWNhdGlvbjsKICAgICAgICAgICAgIH0gZWxzZSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcmVzdC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jlc3QvcHJvdmlkZXIvVHVzY2FueVJFU1RTZXJ2bGV0LmphdmEgYi9tb2R1bGVzL2JpbmRpbmctcmVzdC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jlc3QvcHJvdmlkZXIvVHVzY2FueVJFU1RTZXJ2bGV0LmphdmEKaW5kZXggMjNiOTUxYy4uZmI5YzI0NSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJlc3QtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yZXN0L3Byb3ZpZGVyL1R1c2NhbnlSRVNUU2VydmxldC5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy1yZXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcmVzdC9wcm92aWRlci9UdXNjYW55UkVTVFNlcnZsZXQuamF2YQpAQCAtNiw1NCArNiwxMjUgQEAKICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAorICoKICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKKyAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJlc3QucHJvdmlkZXI7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5EYXRlOwogaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuR3JlZ29yaWFuQ2FsZW5kYXI7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogCiBpbXBvcnQgamF2YXguc2VydmxldC5GaWx0ZXJDb25maWc7CiBpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CitpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsKIGltcG9ydCBqYXZheC53cy5ycy5IdHRwTWV0aG9kOworaW1wb3J0IGphdmF4LndzLnJzLmNvcmUuQXBwbGljYXRpb247CiBpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkJpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJlc3QuUkVTVEJpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24uaHR0cC5IVFRQQ2FjaGVDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29tbW9uLmh0dHAuSFRUUEhlYWRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmV4dGVuc2liaWxpdHkuQ2xhc3NMb2FkZXJDb250ZXh0OwogaW1wb3J0IG9yZy5hcGFjaGUud2luay5jb21tb24uaW50ZXJuYWwucmVnaXN0cnkuUHJvdmlkZXJzUmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS53aW5rLmNvbW1vbi5pbnRlcm5hbC5yZWdpc3RyeS5tZXRhZGF0YS5NZXRob2RNZXRhZGF0YTsKK2ltcG9ydCBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmhhbmRsZXJzLkhhbmRsZXJzQ2hhaW47CitpbXBvcnQgb3JnLmFwYWNoZS53aW5rLnNlcnZlci5oYW5kbGVycy5IYW5kbGVyc0ZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS53aW5rLnNlcnZlci5oYW5kbGVycy5NZXNzYWdlQ29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmhhbmRsZXJzLlJlcXVlc3RIYW5kbGVyOworaW1wb3J0IG9yZy5hcGFjaGUud2luay5zZXJ2ZXIuaGFuZGxlcnMuUmVzcG9uc2VIYW5kbGVyOwogaW1wb3J0IG9yZy5hcGFjaGUud2luay5zZXJ2ZXIuaW50ZXJuYWwuRGVwbG95bWVudENvbmZpZ3VyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS53aW5rLnNlcnZlci5pbnRlcm5hbC5SZXF1ZXN0UHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUud2luay5zZXJ2ZXIuaW50ZXJuYWwuaGFuZGxlcnMuQ2hlY2tMb2NhdGlvbkhlYWRlckhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS53aW5rLnNlcnZlci5pbnRlcm5hbC5yZWdpc3RyeS5SZXNvdXJjZVJlY29yZDsKIGltcG9ydCBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmludGVybmFsLnNlcnZsZXQuUmVzdFNlcnZsZXQ7CiAKIC8qKgotICogCisgKgogICovCiBwdWJsaWMgY2xhc3MgVHVzY2FueVJFU1RTZXJ2bGV0IGV4dGVuZHMgUmVzdFNlcnZsZXQgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFR1c2NhbnlSRVNUU2VydmxldC5jbGFzcy5nZXROYW1lKCkpOworICAgIAogICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDg5OTk3MjMzMTMzOTY0OTE1TDsKICAgICBwcml2YXRlIEV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnk7CisgICAgcHJpdmF0ZSBSRVNUQmluZGluZyBiaW5kaW5nOwogICAgIHByaXZhdGUgQ2xhc3M8Pz4gcmVzb3VyY2VDbGFzczsKICAgICBwcml2YXRlIGJvb2xlYW4gZml4ZWQ7CiAKLSAgICBwdWJsaWMgVHVzY2FueVJFU1RTZXJ2bGV0KEV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnksIENsYXNzPD8+IHJlc291cmNlQ2xhc3MpIHsKKyAgICBwdWJsaWMgVHVzY2FueVJFU1RTZXJ2bGV0KEV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnksIEJpbmRpbmcgYmluZGluZywgQ2xhc3M8Pz4gcmVzb3VyY2VDbGFzcykgewogICAgICAgICBzdXBlcigpOwogICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7CisgICAgICAgIHRoaXMuYmluZGluZyA9IChSRVNUQmluZGluZykgYmluZGluZzsKICAgICAgICAgdGhpcy5yZXNvdXJjZUNsYXNzID0gcmVzb3VyY2VDbGFzczsKICAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgaW5pdCgpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wgPQorICAgICAgICAgICAgQ2xhc3NMb2FkZXJDb250ZXh0LnNldENvbnRleHRDbGFzc0xvYWRlcihUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeS5nZXRTZXJ2aWNlRGlzY292ZXJ5KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvTUVUQS1JTkYvc2VydmVyL3dpbmstcHJvdmlkZXJzIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdXBlci5pbml0KCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoY2wgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIHJldHVybiBwcmV2aW91cyBjbGFzc0xvYWRlcgorICAgICAgICAgICAgICAgIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKGNsKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgVHVzY2FueSBvd24gRGVwbG95bWVudENvbmZpZ3VyYXRpb24gaW4gb3JkZXIgdG8gYmUgYWJsZSB0byAKKyAgICAgKiBhZGQgUmVzcG9uc2VIYW5kbGVyIHRvIHRoZSBXaW5rIEhhbmRsZXJDaGFpbgorICAgICAqLworICAgIHB1YmxpYyBEZXBsb3ltZW50Q29uZmlndXJhdGlvbiBjcmVhdGVEZXBsb3ltZW50Q29uZmlndXJhdGlvbigpIHRocm93cyBDbGFzc05vdEZvdW5kRXhjZXB0aW9uLCBJbnN0YW50aWF0aW9uRXhjZXB0aW9uLCBJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIHsgCisgICAgICAgIHJldHVybiBuZXcgVHVzY2FueURlcGxveW1lbnRDb25maWd1cmF0aW9uKCk7CisgICAgfQogCisgICAgQFN1cHByZXNzV2FybmluZ3MoeyJ1bmNoZWNrZWQiLCAicmF3dHlwZXMifSkKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgRGVwbG95bWVudENvbmZpZ3VyYXRpb24gZ2V0RGVwbG95bWVudENvbmZpZ3VyYXRpb24oKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiwgSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiwKICAgICAgICAgSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotICAgICAgICBEZXBsb3ltZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBzdXBlci5nZXREZXBsb3ltZW50Q29uZmlndXJhdGlvbigpOworCisKKyAgICAgICAgLy8gc2V0dXAgcHJvcGVyIGNsYXNzTG9hZGVyIHRvIHdvcmsgb24gT1NHaSBlbnZpcm9ubWVudAorICAgICAgICBDbGFzc0xvYWRlciBjbCA9CisgICAgICAgICAgICBDbGFzc0xvYWRlckNvbnRleHQuc2V0Q29udGV4dENsYXNzTG9hZGVyKFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LmdldFNlcnZpY2VEaXNjb3ZlcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImphdmF4LndzLnJzLmV4dC5SdW50aW1lRGVsZWdhdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL01FVEEtSU5GL3dpbmstYWx0ZXJuYXRlLXNob3J0Y3V0cy5wcm9wZXJ0aWVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9NRVRBLUlORi9zZXJ2ZXIvd2luay1wcm92aWRlcnMiKTsKKworICAgICAgICBEZXBsb3ltZW50Q29uZmlndXJhdGlvbiBjb25maWcgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY29uZmlnID0gc3VwZXIuZ2V0RGVwbG95bWVudENvbmZpZ3VyYXRpb24oKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIGlmIChjbCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHByZXZpb3VzIGNsYXNzTG9hZGVyCisgICAgICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoY2wpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgLy8gW3JmZW5nXSBGSVhNRTogVGhpcyBpcyBhIGhhY2sgdG8gZm9vbCBBcGFjaGUgd2luayB0byBub3QgcmVtb3ZlIHRoZSBzZXJ2bGV0IHBhdGgKICAgICAgICAgY29uZmlnLnNldEZpbHRlckNvbmZpZyhuZXcgRmlsdGVyQ29uZmlnKCkgewpAQCAtNzgsNyArMTQ5LDcgQEAKICAgICAgICAgUHJvdmlkZXJzUmVnaXN0cnkgcHJvdmlkZXJzID0gY29uZmlnLmdldFByb3ZpZGVyc1JlZ2lzdHJ5KCk7CiAgICAgICAgIHByb3ZpZGVycy5hZGRQcm92aWRlcihuZXcgRGF0YUJpbmRpbmdKQVhSU1JlYWRlcihyZWdpc3RyeSksIDAuMDAxLCB0cnVlKTsKICAgICAgICAgcHJvdmlkZXJzLmFkZFByb3ZpZGVyKG5ldyBEYXRhQmluZGluZ0pBWFJTV3JpdGVyKHJlZ2lzdHJ5KSwgMC4wMDEsIHRydWUpOwotCisgICAgICAgIAogICAgICAgICByZXR1cm4gY29uZmlnOwogICAgIH0KIApAQCAtMTIzLDUgKzE5NCw1OSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwcm9jZXNzb3I7CiAgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFR1c2NhbnlEZXBsb3ltZW50Q29uZmlndXJhdGlvbgorICAgICAqIAorICAgICAqIFJlcXVpcmVkIHRvIGluamVjdCBUdXNjYW55UmVzcG9uc2VIYW5kbGVyIHRvIHRoZSBIYW5kbGVyQ2hhaW4KKyAgICAgKi8KKyAgICBjbGFzcyBUdXNjYW55RGVwbG95bWVudENvbmZpZ3VyYXRpb24gZXh0ZW5kcyBEZXBsb3ltZW50Q29uZmlndXJhdGlvbiB7CisgICAgICAgIAorICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIExpc3Q8UmVzcG9uc2VIYW5kbGVyPiBpbml0UmVzcG9uc2VVc2VySGFuZGxlcnMoKSB7CisgICAgICAgICAgICBMaXN0PFJlc3BvbnNlSGFuZGxlcj4gbGlzdCA9IHN1cGVyLmluaXRSZXNwb25zZVVzZXJIYW5kbGVycygpOworICAgICAgICAgICAgbGlzdC5hZGQobmV3IFR1c2NhbnlSZXNwb25zZUhhbmRsZXIoKSk7CisgICAgICAgICAgICByZXR1cm4gbGlzdDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBUdXNjYW55UmVzcG9uc2VIYW5kbGVyCisgICAgICogCisgICAgICogUmVxdWlyZWQgdG8gc3VwcG9ydCBkZWNsYXJ0aXZlIEhUVFAgSGVhZGVycworICAgICAqLworICAgIGNsYXNzIFR1c2NhbnlSZXNwb25zZUhhbmRsZXIgaW1wbGVtZW50cyBSZXNwb25zZUhhbmRsZXIgeworICAgICAgICBwdWJsaWMgdm9pZCBoYW5kbGVSZXNwb25zZShNZXNzYWdlQ29udGV4dCBjb250ZXh0LCBIYW5kbGVyc0NoYWluIGNoYWluKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gYXNzZXJ0IHJlc3BvbnNlIGlzIG5vdCBjb21taXR0ZWQKKyAgICAgICAgICAgIGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgaHR0cFJlc3BvbnNlID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoSHR0cFNlcnZsZXRSZXNwb25zZS5jbGFzcyk7CisgICAgICAgICAgICBpZiAoaHR0cFJlc3BvbnNlLmlzQ29tbWl0dGVkKCkpIHsKKyAgICAgICAgICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkUsICJUaGUgcmVzcG9uc2UgaXMgYWxyZWFkeSBjb21taXR0ZWQuIE5vdGhpbmcgdG8gZG8uIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvL3Byb2Nlc3MgZGVjbGFyYXRpdmUgaGVhZGVycworICAgICAgICAgICAgZm9yKEhUVFBIZWFkZXIgaGVhZGVyIDogYmluZGluZy5nZXRIdHRwSGVhZGVycygpKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vdHJlYXQgc3BlY2lhbCBoZWFkZXJzIHRoYXQgbmVlZCB0byBiZSBjYWxjdWxhdGVkCisgICAgICAgICAgICAgICAgaWYoaGVhZGVyLmdldE5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJFeHBpcmVzIikpIHsKKyAgICAgICAgICAgICAgICAgICAgR3JlZ29yaWFuQ2FsZW5kYXIgY2FsZW5kYXIgPSBuZXcgR3JlZ29yaWFuQ2FsZW5kYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXIuc2V0VGltZShuZXcgRGF0ZSgpKTsKKworICAgICAgICAgICAgICAgICAgICBjYWxlbmRhci5hZGQoQ2FsZW5kYXIuSE9VUiwgSW50ZWdlci5wYXJzZUludChoZWFkZXIuZ2V0VmFsdWUoKSkpOworCisgICAgICAgICAgICAgICAgICAgIGh0dHBSZXNwb25zZS5zZXRIZWFkZXIoIkV4cGlyZXMiLCBIVFRQQ2FjaGVDb250ZXh0LlJGQzgyMkRhdGVGb3JtYXQuZm9ybWF0KCBjYWxlbmRhci5nZXRUaW1lKCkgKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy9kZWZhdWx0IGJlaGF2aW91ciB0byBwYXNzIHRoZSBoZWFkZXIgdmFsdWUgdG8gSFRUUCByZXNwb25zZQorICAgICAgICAgICAgICAgICAgICBodHRwUmVzcG9uc2Uuc2V0SGVhZGVyKGhlYWRlci5nZXROYW1lKCksIGhlYWRlci5nZXRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9ICAgICAKKworICAgICAgICAgICAgY2hhaW4uZG9DaGFpbihjb250ZXh0KTsKKyAgICAgICAgfQorCisgICAgICAgIHB1YmxpYyB2b2lkIGluaXQoUHJvcGVydGllcyBwcm9wcykgeworCisgICAgICAgIH0gICAgICAgIAorICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJlc3QtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yZXN0L3dpcmVmb3JtYXQveG1sL0N1c3RvbWVyU2VydmljZVRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctcmVzdC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jlc3Qvd2lyZWZvcm1hdC94bWwvQ3VzdG9tZXJTZXJ2aWNlVGVzdENhc2UuamF2YQppbmRleCBhN2NiZGEyLi5jNmU0ODc1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcmVzdC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jlc3Qvd2lyZWZvcm1hdC94bWwvQ3VzdG9tZXJTZXJ2aWNlVGVzdENhc2UuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctcmVzdC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jlc3Qvd2lyZWZvcm1hdC94bWwvQ3VzdG9tZXJTZXJ2aWNlVGVzdENhc2UuamF2YQpAQCAtODgsOCArODgsOCBAQAogICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiPj4+IiArIHJlc3BvbnNlLmdldFRleHQoKSk7CiAKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFJlc3BvbnNlQ29kZSgpKTsKLS8vICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJuby1jYWNoZSIsIHJlc3BvbnNlLmdldEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9sIikpOwotLy8gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoInR1c2NhbnkiLCByZXNwb25zZS5nZXRIZWFkZXJGaWVsZCgiWC1UdXNjYW55IikpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJuby1jYWNoZSIsIHJlc3BvbnNlLmdldEhlYWRlckZpZWxkKCJDYWNoZS1Db250cm9sIikpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJ0dXNjYW55IiwgcmVzcG9uc2UuZ2V0SGVhZGVyRmllbGQoIlgtVHVzY2FueSIpKTsKICAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyhHRVRfUkVTUE9OU0UsIHJlc3BvbnNlLmdldFRleHQoKSk7CiAgICAgICAgIAogICAgIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNzY3ODQ0Zi4uMjU5NGUwMCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTE1LDYgKzE1LDcgQEAKICBqYXZheC54bWwubmFtZXNwYWNlLA0KICBqYXZheC54bWwuc3RyZWFtLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucmVzdDt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29tbW9uLmh0dHA7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3I7dmVyc2lvbj0iMi4wLjAiLA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jlc3Qvd2lyZWZvcm1hdC9qc29uL2ltcGwvSlNPTldpcmVGb3JtYXRJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctcmVzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yZXN0L3dpcmVmb3JtYXQvanNvbi9pbXBsL0pTT05XaXJlRm9ybWF0SW1wbC5qYXZhCmluZGV4IDJjZTNiOTUuLjA1ODg0NzcgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1yZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jlc3Qvd2lyZWZvcm1hdC9qc29uL2ltcGwvSlNPTldpcmVGb3JtYXRJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcmVzdC93aXJlZm9ybWF0L2pzb24vaW1wbC9KU09OV2lyZUZvcm1hdEltcGwuamF2YQpAQCAtNiwxNSArNiwxNSBAQAogICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCisgKgogICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAorICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQogICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucmVzdC53aXJlZm9ybWF0Lmpzb24uaW1wbDsKQEAgLTI1LDcgKzI1LDcgQEAKIAogLyoqCiAgKiBKU09OIFdpcmVmb3JtYXQgaW1wbGVtZW50YXRpb24gZm9yIFJFU1QgQmluZGluZwotICogCisgKgogICogQHZlcnNpb24gJFJldiQgJERhdGUkCiAgKi8KIHB1YmxpYyBjbGFzcyBKU09OV2lyZUZvcm1hdEltcGwgaW1wbGVtZW50cyBKU09OV2lyZUZvcm1hdCB7CkBAIC00MSw0ICs0MSw4IEBACiAgICAgcHVibGljIHZvaWQgc2V0VW5yZXNvbHZlZChib29sZWFuIHVucmVzb2x2ZWQpIHsKICAgICAgICAgLy8gbm8gb3AKICAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL2pzb24iOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yZXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jlc3Qvd2lyZWZvcm1hdC94bWwvaW1wbC9YTUxXaXJlRm9ybWF0SW1wbC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcmVzdC93aXJlZm9ybWF0L3htbC9pbXBsL1hNTFdpcmVGb3JtYXRJbXBsLmphdmEKaW5kZXggM2Y1MWZiOC4uYzQxOTkwOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcmVzdC93aXJlZm9ybWF0L3htbC9pbXBsL1hNTFdpcmVGb3JtYXRJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLXJlc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcmVzdC93aXJlZm9ybWF0L3htbC9pbXBsL1hNTFdpcmVGb3JtYXRJbXBsLmphdmEKQEAgLTYsMTUgKzYsMTUgQEAKICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAorICoKICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKKyAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJlc3Qud2lyZWZvcm1hdC54bWwuaW1wbDsKQEAgLTI1LDcgKzI1LDcgQEAKIAogLyoqCiAgKiBYTUwgV2lyZWZvcm1hdCBpbXBsZW1lbnRhdGlvbiBmb3IgUkVTVCBCaW5kaW5nCi0gKiAKKyAqCiAgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKICAqLwogcHVibGljIGNsYXNzIFhNTFdpcmVGb3JtYXRJbXBsIGltcGxlbWVudHMgWE1MV2lyZUZvcm1hdCB7CkBAIC00MSw0ICs0MSw4IEBACiAgICAgcHVibGljIHZvaWQgc2V0VW5yZXNvbHZlZChib29sZWFuIHVucmVzb2x2ZWQpIHsKICAgICAgICAgLy8gbm8gb3AKICAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3htbCI7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJtaS1ydW50aW1lL3BvbS54bWwgYi9tb2R1bGVzL2JpbmRpbmctcm1pLXJ1bnRpbWUvcG9tLnhtbAppbmRleCA1NzI5NTJmLi40N2I1OTcwIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcm1pLXJ1bnRpbWUvcG9tLnhtbAorKysgYi9tb2R1bGVzL2JpbmRpbmctcm1pLXJ1bnRpbWUvcG9tLnhtbApAQCAtMzIsMTMgKzMyLDE1IEBACiAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXJtaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWludGVyZmFjZS1qYXZhPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXJtaTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogCkBAIC00NywzMCArNDksMTIgQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1ybWk8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmNnbGliPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y2dsaWI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjI8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmFzbTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFzbTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJtaS9wb20ueG1sIGIvbW9kdWxlcy9iaW5kaW5nLXJtaS9wb20ueG1sCmluZGV4IDIzOTk3ZTIuLjNlM2Y4NWIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1ybWkvcG9tLnhtbAorKysgYi9tb2R1bGVzL2JpbmRpbmctcm1pL3BvbS54bWwKQEAgLTMyLDggKzMyLDEwIEBACiAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1hc3NlbWJseTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgIDwvZGVwZW5kZW5jaWVzPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzg4NzVlLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMA0KLUV4cG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLmNvbGxlY3Rpb24NCi1TQ0EtVmVyc2lvbjogMS4xDQotQnVuZGxlLU5hbWU6IEFwYWNoZSBUdXNjYW55IFNDQSBSU1MgRmVlZCBCaW5kaW5nIEV4dGVuc2lvbg0KLUJ1bmRsZS1WZW5kb3I6IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbg0KLUJ1bmRsZS1WZXJzaW9uOiAyLjAuMA0KLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCi1CdW5kbGUtTGljZW5zZTogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dA0KLUJ1bmRsZS1EZXNjcmlwdGlvbjogQXBhY2hlIFR1c2NhbnkgU0NBIFJTUyBGZWVkIEJpbmRpbmcgRXh0ZW5zaW9uDQotSW1wb3J0LVBhY2thZ2U6IGphdmF4LnhtbC5uYW1lc3BhY2UsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHk7dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbDt2ZXJzaW9uPSIyLjAuMCIsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3M7dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5pbXBsLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3INCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLnJ1bnRpbWUNCi1CdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvcG9tLnhtbCBiL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzNmODRlLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1tb2R1bGVzPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXJzcy1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBSU1MgRmVlZCBCaW5kaW5nIEV4dGVuc2lvbjwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcnNzPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbnRlcmZhY2UtamF2YTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmUtc3BpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1odHRwPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1odHRwY2xpZW50PC9ncm91cElkPgotICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWh0dHBjbGllbnQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgIDx2ZXJzaW9uPjMuMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+cm9tZTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnJvbWU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjA8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWNvZGVjPC9ncm91cElkPgotICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWNvZGVjPC9hcnRpZmFjdElkPgotICAgICAgICAgICA8dmVyc2lvbj4xLjM8L3ZlcnNpb24+Ci0gICAgICAgICAgIDxleGNsdXNpb25zPgotICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWNvZGVjPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY29kZWM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgPC9leGNsdXNpb25zPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtbG9nZ2luZzwvZ3JvdXBJZD4KLSAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPgotICAgICAgICAgICA8dmVyc2lvbj4xLjEuMTwvdmVyc2lvbj4KLSAgICAgICAgICAgPGV4Y2x1c2lvbnM+Ci0gICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+YXZhbG9uLWZyYW1ld29yazwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hdmFsb24tZnJhbWV3b3JrPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgPC9leGNsdXNpb24+Ci0gICAgICAgICAgIDwvZXhjbHVzaW9ucz4KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPiAKLSAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICAgICAgICAgCi0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLQotICAgIDxidWlsZD4KLSAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZmVsaXg8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYnVuZGxlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAuMTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGluc3RydWN0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxCdW5kbGUtVmVyc2lvbj4ke3R1c2NhbnkudmVyc2lvbn08L0J1bmRsZS1WZXJzaW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1TeW1ib2xpY05hbWU+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5yb21lPC9CdW5kbGUtU3ltYm9saWNOYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgPEJ1bmRsZS1EZXNjcmlwdGlvbj4ke3BvbS5uYW1lfTwvQnVuZGxlLURlc2NyaXB0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPEV4cG9ydC1QYWNrYWdlPm9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3MqPC9FeHBvcnQtUGFja2FnZT4KLSAgICAgICAgICAgICAgICAgICAgPC9pbnN0cnVjdGlvbnM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL2NvbGxlY3Rpb24vQ29sbGVjdGlvbi5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9jb2xsZWN0aW9uL0NvbGxlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxYWU1OS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL2NvbGxlY3Rpb24vQ29sbGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5jb2xsZWN0aW9uOwotCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7Ci0KLWltcG9ydCBjb20uc3VuLnN5bmRpY2F0aW9uLmZlZWQuc3luZC5TeW5kRW50cnk7Ci1pbXBvcnQgY29tLnN1bi5zeW5kaWNhdGlvbi5mZWVkLnN5bmQuU3luZEZlZWQ7Ci0KLQotLyoqCi0gKiBQcm92aWRlcyBhY2Nlc3MgdG8gYSBjb2xsZWN0aW9uIG9mIHJlc291cmNlcyB1c2luZyBSU1MuCi0gKiAKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1AUmVtb3RhYmxlCi1wdWJsaWMgaW50ZXJmYWNlIENvbGxlY3Rpb24gewotCi0gICAgLyoqCi0gICAgICogR2V0IGFuIFJTUyBmZWVkIGZvciBhIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2VzLgotICAgICAqIAotICAgICAqIEByZXR1cm4gdGhlIFJTUyBmZWVkCi0gICAgICovCi0gICAgU3luZEZlZWQgZ2V0RmVlZCgpOwotCi0gICAgLyoqCi0gICAgICogR2V0IGFuIFJTUyBmZWVkIGZvciBhIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2VzIHJlc3VsdGluZyBmcm9tIGEgcXVlcnkuCi0gICAgICogCi0gICAgICogQHBhcmFtIHF1ZXJ5U3RyaW5nIHRoZSBxdWVyeSBzdHJpbmcKLSAgICAgKiBAcmV0dXJuIHRoZSBSU1MgZmVlZAotICAgICAqLwotICAgIFN5bmRGZWVkIHF1ZXJ5KFN0cmluZyBxdWVyeVN0cmluZyk7Ci0KLSAgICAvKioKLSAgICAgKiBSZXRyaWV2ZXMgYW4gUlNTIGVudHJ5LgotICAgICAqIAotICAgICAqIEBwYXJhbSBpZCBUaGUgZW50cnkgSUQKLSAgICAgKiBAcmV0dXJuIFRoZSByZXF1ZXN0ZWQgZW50cnkKLSAgICAgKiBAdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uIE5vIGVudHJ5IGZvdW5kIHdpdGggdGhlIGdpdmVuIElECi0gICAgICovCi0gICAgU3luZEVudHJ5IGdldChTdHJpbmcgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvY29sbGVjdGlvbi9NZWRpYUNvbGxlY3Rpb24uamF2YSBiL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvY29sbGVjdGlvbi9NZWRpYUNvbGxlY3Rpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJiODM0Ni4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL2NvbGxlY3Rpb24vTWVkaWFDb2xsZWN0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLmNvbGxlY3Rpb247Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7Ci0KLWltcG9ydCBjb20uc3VuLnN5bmRpY2F0aW9uLmZlZWQuYXRvbS5FbnRyeTsKLQotLyoqCi0gKiBQcm92aWRlcyBhY2Nlc3MgdG8gYSBjb2xsZWN0aW9uIG9mIHJlc291cmNlcyB1c2luZyBBdG9tLgotICogCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotQFJlbW90YWJsZQotcHVibGljIGludGVyZmFjZSBNZWRpYUNvbGxlY3Rpb24gZXh0ZW5kcyBDb2xsZWN0aW9uIHsKLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBuZXcgbWVkaWEgZW50cnkKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gdGl0bGUKLSAgICAgKiBAcGFyYW0gc2x1ZwotICAgICAqIEBwYXJhbSBjb250ZW50VHlwZQotICAgICAqIEBwYXJhbSBtZWRpYQotICAgICAqLwotICAgIEVudHJ5IHBvc3RNZWRpYShTdHJpbmcgdGl0bGUsIFN0cmluZyBzbHVnLCBTdHJpbmcgY29udGVudFR5cGUsIElucHV0U3RyZWFtIG1lZGlhKTsKLQotICAgIC8qKgotICAgICAqIFVwZGF0ZSBhIG1lZGlhIGVudHJ5LgotICAgICAqIAotICAgICAqIEBwYXJhbSBpZAotICAgICAqIEBwYXJhbSBjb250ZW50VHlwZQotICAgICAqIEBwYXJhbSBtZWRpYQotICAgICAqIEByZXR1cm4KLSAgICAgKi8KLSAgICB2b2lkIHB1dE1lZGlhKFN0cmluZyBpZCwgU3RyaW5nIGNvbnRlbnRUeXBlLCBJbnB1dFN0cmVhbSBtZWRpYSkgdGhyb3dzIE5vdEZvdW5kRXhjZXB0aW9uOwotCi19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL2NvbGxlY3Rpb24vTm90Rm91bmRFeGNlcHRpb24uamF2YSBiL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvY29sbGVjdGlvbi9Ob3RGb3VuZEV4Y2VwdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOTEyODc4Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvY29sbGVjdGlvbi9Ob3RGb3VuZEV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLmNvbGxlY3Rpb247Ci0KLS8qKgotICogSW5kaWNhdGVzIHRoYXQgYSByZXNvdXJjZSBjb3VsZCBub3QgYmUgZm91bmQuCi0gKiAKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgTm90Rm91bmRFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24gewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC01MDQ2MDI3Njc0MTI4NjI3MzgzTDsKLQotICAgIHB1YmxpYyBOb3RGb3VuZEV4Y2VwdGlvbigpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTm90Rm91bmRFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UpIHsKLSAgICAgICAgc3VwZXIobWVzc2FnZSk7Ci0gICAgfQotCi0gICAgcHVibGljIE5vdEZvdW5kRXhjZXB0aW9uKFRocm93YWJsZSBjYXVzZSkgewotICAgICAgICBzdXBlcihjYXVzZSk7Ci0gICAgfQotCi0gICAgcHVibGljIE5vdEZvdW5kRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgY2F1c2UpIHsKLSAgICAgICAgc3VwZXIobWVzc2FnZSwgY2F1c2UpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9wcm92aWRlci9SU1NCaW5kaW5nSW52b2tlci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9wcm92aWRlci9SU1NCaW5kaW5nSW52b2tlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2ExNzcxLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvcHJvdmlkZXIvUlNTQmluZGluZ0ludm9rZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3MucHJvdmlkZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkRhdGFFeGNoYW5nZVNlbWFudGljczsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsKLQotaW1wb3J0IGNvbS5zdW4uc3luZGljYXRpb24uZmVlZC5zeW5kLlN5bmRGZWVkOwotaW1wb3J0IGNvbS5zdW4uc3luZGljYXRpb24uaW8uRmVlZEV4Y2VwdGlvbjsKLWltcG9ydCBjb20uc3VuLnN5bmRpY2F0aW9uLmlvLlN5bmRGZWVkSW5wdXQ7Ci1pbXBvcnQgY29tLnN1bi5zeW5kaWNhdGlvbi5pby5YbWxSZWFkZXI7Ci0KLS8qKgotICogSW52b2tlciBmb3IgdGhlIFJTUyBiaW5kaW5nLgotICoKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1jbGFzcyBSU1NCaW5kaW5nSW52b2tlciBpbXBsZW1lbnRzIEludm9rZXIgLCBEYXRhRXhjaGFuZ2VTZW1hbnRpY3MgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKFJTU0JpbmRpbmdJbnZva2VyLmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgCi0gICAgcHJpdmF0ZSBTdHJpbmcgdXJpOwotCi0gICAgUlNTQmluZGluZ0ludm9rZXIoU3RyaW5nIHVyaSwgU3RyaW5nIGZlZWRUeXBlKSB7Ci0gICAgICAgIHRoaXMudXJpID0gdXJpOwotICAgIH0KLQotICAgIHB1YmxpYyBNZXNzYWdlIGludm9rZShNZXNzYWdlIG1zZykgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgbG9nZ2VyLmZpbmUoImludm9rZSAiICsgdXJpKTsKLQotICAgICAgICAgICAgLy8gUmVhZCBhbiBSU1MgZmVlZCBpbnRvIGEgU3luZCBmZWVkCi0gICAgICAgICAgICBTeW5kRmVlZElucHV0IGlucHV0ID0gbmV3IFN5bmRGZWVkSW5wdXQoKTsKLSAgICAgICAgICAgIFN5bmRGZWVkIGZlZWQgPSBpbnB1dC5idWlsZChuZXcgWG1sUmVhZGVyKG5ldyBVUkwodXJpKSkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvL0ZJWE1FIFN1cHBvcnQgY29udmVyc2lvbiB0byBkYXRhLWFwaSBlbnRyaWVzCi0gICAgICAgICAgICAKLSAgICAgICAgICAgIG1zZy5zZXRCb2R5KGZlZWQpOwotCi0gICAgICAgIH0gY2F0Y2ggKE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBtc2cuc2V0RmF1bHRCb2R5KGUpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgbXNnLnNldEZhdWx0Qm9keShlKTsKLSAgICAgICAgfSBjYXRjaCAoRmVlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBtc2cuc2V0RmF1bHRCb2R5KGUpOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBtc2cuc2V0RmF1bHRCb2R5KGUpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtc2c7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gYWxsb3dzUGFzc0J5UmVmZXJlbmNlKCkgewotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL3Byb3ZpZGVyL1JTU0JpbmRpbmdMaXN0ZW5lclNlcnZsZXQuamF2YSBiL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvcHJvdmlkZXIvUlNTQmluZGluZ0xpc3RlbmVyU2VydmxldC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGM4NGNlLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvcHJvdmlkZXIvUlNTQmluZGluZ0xpc3RlbmVyU2VydmxldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzk3ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3MucHJvdmlkZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkxEZWNvZGVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7Ci0KLWltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci1pbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5iaW5hcnkuQmFzZTY0OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGF0YS5jb2xsZWN0aW9uLkl0ZW07Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5NZWRpYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5EYXRhVHlwZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuaW1wbC5EYXRhVHlwZUltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYudXRpbC5YTUxUeXBlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZvY2F0aW9uQ2hhaW47Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2VGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5JbnZvY2FibGU7Ci0KLWltcG9ydCBjb20uc3VuLnN5bmRpY2F0aW9uLmZlZWQuc3luZC5TeW5kQ29udGVudDsKLWltcG9ydCBjb20uc3VuLnN5bmRpY2F0aW9uLmZlZWQuc3luZC5TeW5kQ29udGVudEltcGw7Ci1pbXBvcnQgY29tLnN1bi5zeW5kaWNhdGlvbi5mZWVkLnN5bmQuU3luZEVudHJ5OwotaW1wb3J0IGNvbS5zdW4uc3luZGljYXRpb24uZmVlZC5zeW5kLlN5bmRFbnRyeUltcGw7Ci1pbXBvcnQgY29tLnN1bi5zeW5kaWNhdGlvbi5mZWVkLnN5bmQuU3luZEZlZWQ7Ci1pbXBvcnQgY29tLnN1bi5zeW5kaWNhdGlvbi5mZWVkLnN5bmQuU3luZEZlZWRJbXBsOwotaW1wb3J0IGNvbS5zdW4uc3luZGljYXRpb24uZmVlZC5zeW5kLlN5bmRMaW5rOwotaW1wb3J0IGNvbS5zdW4uc3luZGljYXRpb24uZmVlZC5zeW5kLlN5bmRMaW5rSW1wbDsKLWltcG9ydCBjb20uc3VuLnN5bmRpY2F0aW9uLmlvLkZlZWRFeGNlcHRpb247Ci1pbXBvcnQgY29tLnN1bi5zeW5kaWNhdGlvbi5pby5TeW5kRmVlZE91dHB1dDsKLQotLyoqCi0gKiBBbiBSU1MgYmluZGluZyBsaXN0ZW5lciwgaW1wbGVtZW50ZWQgYXMgYSBTZXJ2bGV0IGFuZAotICogcmVnaXN0ZXJlZCBpbiBhIFNlcnZsZXQgaG9zdCBwcm92aWRlZCBieSB0aGUgU0NBIGhvc3RpbmcgcnVudGltZS4KLSAqCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotY2xhc3MgUlNTQmluZGluZ0xpc3RlbmVyU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcihSU1NCaW5kaW5nTGlzdGVuZXJTZXJ2bGV0LmNsYXNzLmdldE5hbWUoKSk7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgICBwcml2YXRlIEludm9jYWJsZSB3aXJlOwotICAgIHByaXZhdGUgSW52b2tlciBnZXRGZWVkSW52b2tlcjsKLSAgICBwcml2YXRlIEludm9rZXIgZ2V0QWxsSW52b2tlcjsKLSAgICBwcml2YXRlIEludm9rZXIgcXVlcnlJbnZva2VyOwotICAgIHByaXZhdGUgTWVzc2FnZUZhY3RvcnkgbWVzc2FnZUZhY3Rvcnk7Ci0gICAgcHJpdmF0ZSBNZWRpYXRvciBtZWRpYXRvcjsKLSAgICBwcml2YXRlIERhdGFUeXBlPD8+IGl0ZW1DbGFzc1R5cGU7Ci0gICAgcHJpdmF0ZSBEYXRhVHlwZTw/PiBpdGVtWE1MVHlwZTsKLSAgICBwcml2YXRlIGJvb2xlYW4gc3VwcG9ydHNGZWVkRW50cmllczsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdHMgYSBuZXcgYmluZGluZyBsaXN0ZW5lci4KLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gd2lyZQotICAgICAqIEBwYXJhbSBtZXNzYWdlRmFjdG9yeQotICAgICAqLwotICAgIFJTU0JpbmRpbmdMaXN0ZW5lclNlcnZsZXQoSW52b2NhYmxlIHdpcmUsIE1lc3NhZ2VGYWN0b3J5IG1lc3NhZ2VGYWN0b3J5LCBNZWRpYXRvciBtZWRpYXRvcikgewotICAgICAgICB0aGlzLndpcmUgPSB3aXJlOwotICAgICAgICB0aGlzLm1lc3NhZ2VGYWN0b3J5ID0gbWVzc2FnZUZhY3Rvcnk7Ci0gICAgICAgIHRoaXMubWVkaWF0b3IgPSBtZWRpYXRvcjsKLQotICAgICAgICAvLyBHZXQgdGhlIGludm9rZXJzIGZvciB0aGUgc3VwcG9ydGVkIG9wZXJhdGlvbnMKLSAgICAgICAgT3BlcmF0aW9uIGdldE9wZXJhdGlvbiA9IG51bGw7Ci0gICAgICAgIGZvciAoSW52b2NhdGlvbkNoYWluIGludm9jYXRpb25DaGFpbiA6IHRoaXMud2lyZS5nZXRJbnZvY2F0aW9uQ2hhaW5zKCkpIHsKLSAgICAgICAgICAgIGludm9jYXRpb25DaGFpbi5zZXRBbGxvd3NQYXNzQnlSZWZlcmVuY2UodHJ1ZSk7Ci0gICAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gaW52b2NhdGlvbkNoYWluLmdldFRhcmdldE9wZXJhdGlvbigpOwotICAgICAgICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcGVyYXRpb24uZ2V0TmFtZSgpOwotICAgICAgICAgICAgaWYgKG9wZXJhdGlvbk5hbWUuZXF1YWxzKCJnZXRGZWVkIikpIHsKLSAgICAgICAgICAgICAgICBnZXRGZWVkSW52b2tlciA9IGludm9jYXRpb25DaGFpbi5nZXRIZWFkSW52b2tlcigpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb25OYW1lLmVxdWFscygiZ2V0QWxsIikpIHsKLSAgICAgICAgICAgICAgICBnZXRBbGxJbnZva2VyID0gaW52b2NhdGlvbkNoYWluLmdldEhlYWRJbnZva2VyKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbk5hbWUuZXF1YWxzKCJxdWVyeSIpKSB7Ci0gICAgICAgICAgICAgICAgcXVlcnlJbnZva2VyID0gaW52b2NhdGlvbkNoYWluLmdldEhlYWRJbnZva2VyKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbk5hbWUuZXF1YWxzKCJnZXQiKSkgewotICAgICAgICAgICAgICAgIGdldE9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIERldGVybWluZSB0aGUgY29sbGVjdGlvbiBpdGVtIHR5cGUKLSAgICAgICAgaWYgKGdldE9wZXJhdGlvbiAhPSBudWxsKSB7Ci0gICAgICAgICAgICBpdGVtWE1MVHlwZSA9IG5ldyBEYXRhVHlwZUltcGw8Q2xhc3M8Pz4+KFN0cmluZy5jbGFzcy5nZXROYW1lKCksIFN0cmluZy5jbGFzcywgU3RyaW5nLmNsYXNzKTsKLSAgICAgICAgICAgIENsYXNzPD8+IGl0ZW1DbGFzcyA9IGdldE9wZXJhdGlvbi5nZXRPdXRwdXRUeXBlKCkuZ2V0UGh5c2ljYWwoKTsKLSAgICAgICAgICAgIGlmIChpdGVtQ2xhc3MgPT0gU3luZEVudHJ5LmNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgc3VwcG9ydHNGZWVkRW50cmllcyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBEYXRhVHlwZTxYTUxUeXBlPiBvdXRwdXRUeXBlID0gZ2V0T3BlcmF0aW9uLmdldE91dHB1dFR5cGUoKTsKLSAgICAgICAgICAgIFFOYW1lIHFuYW1lID0gb3V0cHV0VHlwZS5nZXRMb2dpY2FsKCkuZ2V0RWxlbWVudE5hbWUoKTsKLSAgICAgICAgICAgIHFuYW1lID0gbmV3IFFOYW1lKHFuYW1lLmdldE5hbWVzcGFjZVVSSSgpLCBpdGVtQ2xhc3MuZ2V0U2ltcGxlTmFtZSgpKTsKLSAgICAgICAgICAgIGl0ZW1DbGFzc1R5cGUgPSBuZXcgRGF0YVR5cGVJbXBsPFhNTFR5cGU+KCJqYXZhOmNvbXBsZXhUeXBlIiwgaXRlbUNsYXNzLCBuZXcgWE1MVHlwZShxbmFtZSwgbnVsbCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcG9uc2UpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLSAgICAgICAgLy8gTm8gYXV0aGVudGljYXRpb24gcmVxdWlyZWQgZm9yIGEgZ2V0IHJlcXVlc3QKLQotICAgICAgICAvLyBHZXQgdGhlIHJlcXVlc3QgcGF0aAotICAgICAgICBTdHJpbmcgcGF0aCA9IFVSTERlY29kZXIuZGVjb2RlKHJlcXVlc3QuZ2V0UmVxdWVzdFVSSSgpLnN1YnN0cmluZyhyZXF1ZXN0LmdldFNlcnZsZXRQYXRoKCkubGVuZ3RoKCkpLCAiVVRGLTgiKTsKLQotICAgICAgICBsb2dnZXIuZmluZSgiZ2V0ICIgKyByZXF1ZXN0LmdldFJlcXVlc3RVUkkoKSk7Ci0KLSAgICAgICAgLy8gSGFuZGxlIGFuIFJTUyByZXF1ZXN0Ci0gICAgICAgIGlmIChwYXRoID09IG51bGwgfHwgcGF0aC5sZW5ndGgoKSA9PSAwIHx8IHBhdGguZXF1YWxzKCIvIikpIHsKLQotICAgICAgICAgICAgLy8gUmV0dXJuIGFuIFJTUyBmZWVkIGNvbnRhaW5pbmcgdGhlIGVudHJpZXMgaW4gdGhlIGNvbGxlY3Rpb24KLSAgICAgICAgICAgIFN5bmRGZWVkIGZlZWQgPSBudWxsOwotICAgICAgICAgICAgaWYgKHN1cHBvcnRzRmVlZEVudHJpZXMpIHsKLQotICAgICAgICAgICAgICAgIC8vIFRoZSBzZXJ2aWNlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIGZlZWQgZW50cmllcywgaW52b2tlIGl0cyBnZXRGZWVkIG9wZXJhdGlvbgotICAgICAgICAgICAgICAgIE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UgPSBtZXNzYWdlRmFjdG9yeS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgICAgTWVzc2FnZSByZXNwb25zZU1lc3NhZ2UgPSBnZXRGZWVkSW52b2tlci5pbnZva2UocmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZU1lc3NhZ2UuaXNGYXVsdCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKChUaHJvd2FibGUpcmVzcG9uc2VNZXNzYWdlLmdldEJvZHkoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGZlZWQgPSAoU3luZEZlZWQpcmVzcG9uc2VNZXNzYWdlLmdldEJvZHkoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGUgc2VydmljZSBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGZlZWQgZW50cmllcywgaW52b2tlIGl0cwotICAgICAgICAgICAgICAgIC8vIGdldEFsbCBvcGVyYXRpb24gdG8gZ2V0IHRoZSBkYXRhIGl0ZW0gY29sbGVjdGlvbi4gdGhlbiBjcmVhdGUgZmVlZCBlbnRyaWVzCi0gICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgZGF0YSBpdGVtcwotICAgICAgICAgICAgICAgIE1lc3NhZ2UgcmVxdWVzdE1lc3NhZ2UgPSBtZXNzYWdlRmFjdG9yeS5jcmVhdGVNZXNzYWdlKCk7Ci0gICAgICAgICAgICAgICAgTWVzc2FnZSByZXNwb25zZU1lc3NhZ2U7Ci0gICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QuZ2V0UXVlcnlTdHJpbmcoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RNZXNzYWdlLnNldEJvZHkobmV3IE9iamVjdFtdIHtyZXF1ZXN0LmdldFF1ZXJ5U3RyaW5nKCl9KTsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlID0gcXVlcnlJbnZva2VyLmludm9rZShyZXF1ZXN0TWVzc2FnZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VNZXNzYWdlID0gZ2V0QWxsSW52b2tlci5pbnZva2UocmVxdWVzdE1lc3NhZ2UpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2VNZXNzYWdlLmlzRmF1bHQoKSkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbigoVGhyb3dhYmxlKXJlc3BvbnNlTWVzc2FnZS5nZXRCb2R5KCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGEuY29sbGVjdGlvbi5FbnRyeTxPYmplY3QsIE9iamVjdD5bXSBjb2xsZWN0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgKG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGF0YS5jb2xsZWN0aW9uLkVudHJ5PE9iamVjdCwgT2JqZWN0PltdKXJlc3BvbnNlTWVzc2FnZS5nZXRCb2R5KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24gIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGZlZWQKLSAgICAgICAgICAgICAgICAgICAgZmVlZCA9IG5ldyBTeW5kRmVlZEltcGwoKTsKLSAgICAgICAgICAgICAgICAgICAgZmVlZC5zZXRUaXRsZSgiRmVlZCIpOwotICAgICAgICAgICAgICAgICAgICBmZWVkLnNldERlc2NyaXB0aW9uKCJGZWVkIGRlc2NyaXB0aW9uIik7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBmb3IgKG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGF0YS5jb2xsZWN0aW9uLkVudHJ5PE9iamVjdCwgT2JqZWN0PiBlbnRyeTogY29sbGVjdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgU3luZEVudHJ5IGZlZWRFbnRyeSA9IGNyZWF0ZUZlZWRFbnRyeShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmZWVkLmdldEVudHJpZXMoKS5hZGQoZmVlZEVudHJ5KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gQ29udmVydCB0byBhbiBSU1MgZmVlZAotICAgICAgICAgICAgaWYgKGZlZWQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIHJlc3BvbnNlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9yc3MreG1sOyBjaGFyc2V0PXV0Zi04Iik7Ci0gICAgICAgICAgICAgICAgZmVlZC5zZXRGZWVkVHlwZSgicnNzXzIuMCIpOwotICAgICAgICAgICAgICAgIGZlZWQuc2V0TGluayhwYXRoKTsKLSAgICAgICAgICAgICAgICBTeW5kRmVlZE91dHB1dCBzeW5kT3V0cHV0ID0gbmV3IFN5bmRGZWVkT3V0cHV0KCk7Ci0gICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgc3luZE91dHB1dC5vdXRwdXQoZmVlZCwgZ2V0V3JpdGVyKHJlc3BvbnNlKSk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoRmVlZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2bGV0RXhjZXB0aW9uKGUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmVzcG9uc2Uuc2VuZEVycm9yKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfTk9UX0ZPVU5EKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlc3BvbnNlLnNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlLlNDX05PVF9GT1VORCk7Ci0gICAgICAgIH0KLQotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZSBhbiBSU1MgZW50cnkgZnJvbSBhIGRhdGEgY29sbGVjdGlvbiBlbnRyeS4KLSAgICAgKiBAcGFyYW0gZW50cnkgCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHByaXZhdGUgU3luZEVudHJ5IGNyZWF0ZUZlZWRFbnRyeShvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGEuY29sbGVjdGlvbi5FbnRyeTxPYmplY3QsIE9iamVjdD4gZW50cnkpIHsKLSAgICAgICAgT2JqZWN0IGtleSA9IGVudHJ5LmdldEtleSgpOwotICAgICAgICBPYmplY3QgZGF0YSA9IGVudHJ5LmdldERhdGEoKTsKLSAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBJdGVtKSB7Ci0gICAgICAgICAgICBJdGVtIGl0ZW0gPSAoSXRlbSlkYXRhOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBTeW5kRW50cnkgZmVlZEVudHJ5ID0gbmV3IFN5bmRFbnRyeUltcGwoKTsKLSAgICAgICAgICAgIGZlZWRFbnRyeS5zZXRVcmkoa2V5LnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgZmVlZEVudHJ5LnNldFRpdGxlKGl0ZW0uZ2V0VGl0bGUoKSk7Ci0gICAgCi0gICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBpdGVtLmdldENvbnRlbnRzKCk7Ci0gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgIFN5bmRDb250ZW50IGNvbnRlbnQgPSBuZXcgU3luZENvbnRlbnRJbXBsKCk7Ci0gICAgICAgICAgICAgICAgY29udGVudC5zZXRUeXBlKCJ0ZXh0L3htbCIpOwotICAgICAgICAgICAgICAgIGNvbnRlbnQuc2V0VmFsdWUodmFsdWUpOwotICAgICAgICAgICAgICAgIExpc3Q8U3luZENvbnRlbnQ+IGNvbnRlbnRzID0gbmV3IEFycmF5TGlzdDxTeW5kQ29udGVudD4oKTsKLSAgICAgICAgICAgICAgICBjb250ZW50cy5hZGQoY29udGVudCk7Ci0gICAgICAgICAgICAgICAgZmVlZEVudHJ5LnNldENvbnRlbnRzKGNvbnRlbnRzKTsKLSAgICAgICAgICAgIH0KLSAgICAKLSAgICAgICAgICAgIFN0cmluZyBocmVmID0gaXRlbS5nZXRMaW5rKCk7Ci0gICAgICAgICAgICBpZiAoaHJlZiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaHJlZiA9IGtleS50b1N0cmluZygpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgU3luZExpbmsgbGluayA9IG5ldyBTeW5kTGlua0ltcGwoKTsKLSAgICAgICAgICAgIGxpbmsuc2V0UmVsKCJlZGl0Iik7Ci0gICAgICAgICAgICBsaW5rLnNldEhyZWYoaHJlZik7Ci0gICAgICAgICAgICBmZWVkRW50cnkuZ2V0TGlua3MoKS5hZGQobGluayk7Ci0gICAgICAgICAgICBsaW5rID0gbmV3IFN5bmRMaW5rSW1wbCgpOwotICAgICAgICAgICAgbGluay5zZXRSZWwoImFsdGVybmF0ZSIpOwotICAgICAgICAgICAgbGluay5zZXRIcmVmKGhyZWYpOwotICAgICAgICAgICAgZmVlZEVudHJ5LmdldExpbmtzKCkuYWRkKGxpbmspOwotICAgICAgICAgICAgZmVlZEVudHJ5LnNldExpbmsoaHJlZik7Ci0gICAgCi0gICAgICAgICAgICBEYXRlIGRhdGUgPSBpdGVtLmdldERhdGUoKTsKLSAgICAgICAgICAgIGlmIChkYXRlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZlZWRFbnRyeS5zZXRQdWJsaXNoZWREYXRlKGRhdGUpOwotICAgICAgICAgICAgcmV0dXJuIGZlZWRFbnRyeTsKLSAgICAgICAgICAgIAotICAgICAgICB9IGVsc2UgaWYgKGRhdGEgIT0gbnVsbCkgewotICAgICAgICAgICAgU3luZEVudHJ5IGZlZWRFbnRyeSA9IG5ldyBTeW5kRW50cnlJbXBsKCk7Ci0gICAgICAgICAgICBmZWVkRW50cnkuc2V0VXJpKGtleS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGZlZWRFbnRyeS5zZXRUaXRsZSgiaXRlbSIpOwotICAgIAotICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgaXRlbSB0byBYTUwKLSAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IG1lZGlhdG9yLm1lZGlhdGUoZGF0YSwgaXRlbUNsYXNzVHlwZSwgaXRlbVhNTFR5cGUsIG51bGwpLnRvU3RyaW5nKCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFN5bmRDb250ZW50IGNvbnRlbnQgPSBuZXcgU3luZENvbnRlbnRJbXBsKCk7Ci0gICAgICAgICAgICBjb250ZW50LnNldFR5cGUoInRleHQveG1sIik7Ci0gICAgICAgICAgICBjb250ZW50LnNldFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgIExpc3Q8U3luZENvbnRlbnQ+IGNvbnRlbnRzID0gbmV3IEFycmF5TGlzdDxTeW5kQ29udGVudD4oKTsKLSAgICAgICAgICAgIGNvbnRlbnRzLmFkZChjb250ZW50KTsKLSAgICAgICAgICAgIGZlZWRFbnRyeS5zZXRDb250ZW50cyhjb250ZW50cyk7Ci0gICAgCi0gICAgICAgICAgICBTeW5kTGluayBsaW5rID0gbmV3IFN5bmRMaW5rSW1wbCgpOwotICAgICAgICAgICAgbGluay5zZXRSZWwoImVkaXQiKTsKLSAgICAgICAgICAgIGxpbmsuc2V0SHJlZihrZXkudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICBmZWVkRW50cnkuZ2V0TGlua3MoKS5hZGQobGluayk7Ci0gICAgICAgICAgICBsaW5rID0gbmV3IFN5bmRMaW5rSW1wbCgpOwotICAgICAgICAgICAgbGluay5zZXRSZWwoImFsdGVybmF0ZSIpOwotICAgICAgICAgICAgbGluay5zZXRIcmVmKGtleS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGZlZWRFbnRyeS5nZXRMaW5rcygpLmFkZChsaW5rKTsKLSAgICAKLSAgICAgICAgICAgIGZlZWRFbnRyeS5zZXRQdWJsaXNoZWREYXRlKG5ldyBEYXRlKCkpOwotICAgICAgICAgICAgcmV0dXJuIGZlZWRFbnRyeTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQ3JlYXRlIGEgZGF0YSBjb2xsZWN0aW9uIGVudHJ5IGZyb20gYW4gUlNTIGVudHJ5LgotICAgICAqIEBwYXJhbSBmZWVkRW50cnkKLSAgICAgKiBAcmV0dXJuCi0gICAgICovCi0gICAgcHJpdmF0ZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGEuY29sbGVjdGlvbi5FbnRyeTxPYmplY3QsIE9iamVjdD4gY3JlYXRlRW50cnkoU3luZEVudHJ5IGZlZWRFbnRyeSkgewotICAgICAgICBpZiAoZmVlZEVudHJ5ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGlmIChpdGVtQ2xhc3NUeXBlLmdldFBoeXNpY2FsKCkgPT0gSXRlbS5jbGFzcykgewotICAgICAgICAgICAgICAgIFN0cmluZyBrZXkgPSBmZWVkRW50cnkuZ2V0VXJpKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgSXRlbSBpdGVtID0gbmV3IEl0ZW0oKTsKLSAgICAgICAgICAgICAgICBpdGVtLnNldFRpdGxlKGZlZWRFbnRyeS5nZXRUaXRsZSgpKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBMaXN0PD8+IGNvbnRlbnRzID0gZmVlZEVudHJ5LmdldENvbnRlbnRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjb250ZW50cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3luZENvbnRlbnQgY29udGVudCA9IChTeW5kQ29udGVudCljb250ZW50cy5nZXQoMCk7Ci0gICAgICAgICAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IGNvbnRlbnQuZ2V0VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaXRlbS5zZXRDb250ZW50cyh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoT2JqZWN0IGwgOiBmZWVkRW50cnkuZ2V0TGlua3MoKSkgewotICAgICAgICAgICAgICAgICAgICBTeW5kTGluayBsaW5rID0gKFN5bmRMaW5rKWw7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsaW5rLmdldFJlbCgpID09IG51bGwgfHwgImVkaXQiLmVxdWFscyhsaW5rLmdldFJlbCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGhyZWYgPSBsaW5rLmdldEhyZWYoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChocmVmLnN0YXJ0c1dpdGgoIm51bGwvIikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmID0gaHJlZi5zdWJzdHJpbmcoNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpdGVtLnNldExpbmsoaHJlZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpdGVtLnNldERhdGUoZmVlZEVudHJ5LmdldFB1Ymxpc2hlZERhdGUoKSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGEuY29sbGVjdGlvbi5FbnRyeTxPYmplY3QsIE9iamVjdD4oa2V5LCBpdGVtKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGtleSA9IGZlZWRFbnRyeS5nZXRVcmkoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGl0ZW0gZnJvbSBYTUwKLSAgICAgICAgICAgICAgICBMaXN0PD8+IGNvbnRlbnRzID0gZmVlZEVudHJ5LmdldENvbnRlbnRzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnRzLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgU3luZENvbnRlbnQgY29udGVudCA9IChTeW5kQ29udGVudCljb250ZW50cy5nZXQoMCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gY29udGVudC5nZXRWYWx1ZSgpOwotICAgICAgICAgICAgICAgIE9iamVjdCBkYXRhID0gbWVkaWF0b3IubWVkaWF0ZSh2YWx1ZSwgaXRlbVhNTFR5cGUsIGl0ZW1DbGFzc1R5cGUsIG51bGwpOwotCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGEuY29sbGVjdGlvbi5FbnRyeTxPYmplY3QsIE9iamVjdD4oa2V5LCBkYXRhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICBwcml2YXRlIFdyaXRlciBnZXRXcml0ZXIoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAgICAgICAgV3JpdGVyIHdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIocmVzcG9uc2UuZ2V0T3V0cHV0U3RyZWFtKCksICJVVEYtOCIpOwotICAgICAgICByZXR1cm4gd3JpdGVyOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFByb2Nlc3MgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyCi0gICAgICogCi0gICAgICogQHBhcmFtIHJlcXVlc3QKLSAgICAgKiBAcmV0dXJuCi0gICAgICogQHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uCi0gICAgICovCi0gICAgcHJpdmF0ZSBTdHJpbmcgcHJvY2Vzc0F1dGhvcml6YXRpb25IZWFkZXIoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QpIHRocm93cyBTZXJ2bGV0RXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIFN0cmluZyBhdXRob3JpemF0aW9uID0gcmVxdWVzdC5nZXRIZWFkZXIoIkF1dGhvcml6YXRpb24iKTsKLSAgICAgICAgICAgIGlmIChhdXRob3JpemF0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmdUb2tlbml6ZXIgdG9rZW5zID0gbmV3IFN0cmluZ1Rva2VuaXplcihhdXRob3JpemF0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAodG9rZW5zLmhhc01vcmVUb2tlbnMoKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYmFzaWMgPSB0b2tlbnMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChiYXNpYy5lcXVhbHNJZ25vcmVDYXNlKCJCYXNpYyIpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY3JlZGVudGlhbHMgPSB0b2tlbnMubmV4dFRva2VuKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXNlckFuZFBhc3N3b3JkID0gbmV3IFN0cmluZyhCYXNlNjQuZGVjb2RlQmFzZTY0KGNyZWRlbnRpYWxzLmdldEJ5dGVzKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb2xvbiA9IHVzZXJBbmRQYXNzd29yZC5pbmRleE9mKCI6Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sb24gIT0gLTEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXNlciA9IHVzZXJBbmRQYXNzd29yZC5zdWJzdHJpbmcoMCwgY29sb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXNzd29yZCA9IHVzZXJBbmRQYXNzd29yZC5zdWJzdHJpbmcoY29sb24gKyAxKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF1dGhlbnRpY2F0ZSB0aGUgVXNlci4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aGVudGljYXRlKHVzZXIsIHBhc3N3b3JkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXNlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldEV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBBdXRoZW50aWNhdGUgYSB1c2VyLgotICAgICAqIAotICAgICAqIEBwYXJhbSB1c2VyCi0gICAgICogQHBhcmFtIHBhc3N3b3JkCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBhdXRoZW50aWNhdGUoU3RyaW5nIHVzZXIsIFN0cmluZyBwYXNzd29yZCkgewotCi0gICAgICAgIC8vIFRPRE8gSGFuZGxlIHRoaXMgdXNpbmcgU0NBIHNlY3VyaXR5IHBvbGljaWVzCi0gICAgICAgIC8vRklYTUUgV2h5IGFyZSB3ZSB1c2luZyBlbmRzV2l0aCBpbnN0ZWFkIG9mIGVxdWFscyBoZXJlPz8KLSAgICAgICAgcmV0dXJuICgiYWRtaW4iLmVuZHNXaXRoKHVzZXIpICYmICJhZG1pbiIuZXF1YWxzKHBhc3N3b3JkKSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmVqZWN0IGFuIHVuYXV0aG9yaXplZCByZXF1ZXN0LgotICAgICAqIAotICAgICAqIEBwYXJhbSByZXNwb25zZQotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCB1bmF1dGhvcml6ZWQoSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLSAgICAgICAgcmVzcG9uc2Uuc2V0SGVhZGVyKCJXV1ctQXV0aGVudGljYXRlIiwgIkJBU0lDIHJlYWxtPVwiVHVzY2FueVwiIik7Ci0gICAgICAgIHJlc3BvbnNlLnNlbmRFcnJvcihIdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOQVVUSE9SSVpFRCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9wcm92aWRlci9SU1NCaW5kaW5nUHJvdmlkZXJGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL3Byb3ZpZGVyL1JTU0JpbmRpbmdQcm92aWRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiYWZkZC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL3Byb3ZpZGVyL1JTU0JpbmRpbmdQcm92aWRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5wcm92aWRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3MuUlNTQmluZGluZzsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRmFjdG9yeUV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5VdGlsaXR5RXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5NZWRpYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3QuaHR0cC5TZXJ2bGV0SG9zdDsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3QuaHR0cC5TZXJ2bGV0SG9zdEV4dGVuc2lvblBvaW50OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5SZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5TZXJ2aWNlQmluZGluZ1Byb3ZpZGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lRW5kcG9pbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZTsKLQotLyoqCi0gKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlNTIGJpbmRpbmcgcHJvdmlkZXIgZmFjdG9yeS4KLSAqCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotcHVibGljIGNsYXNzIFJTU0JpbmRpbmdQcm92aWRlckZhY3RvcnkgaW1wbGVtZW50cyBCaW5kaW5nUHJvdmlkZXJGYWN0b3J5PFJTU0JpbmRpbmc+IHsKLQotICAgIHByaXZhdGUgTWVzc2FnZUZhY3RvcnkgbWVzc2FnZUZhY3Rvcnk7Ci0gICAgcHJpdmF0ZSBNZWRpYXRvciBtZWRpYXRvcjsKLSAgICBwcml2YXRlIFNlcnZsZXRIb3N0IHNlcnZsZXRIb3N0OwotCi0gICAgcHVibGljIFJTU0JpbmRpbmdQcm92aWRlckZhY3RvcnkoRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSBleHRlbnNpb25Qb2ludHMpIHsKLSAgICAgICAgU2VydmxldEhvc3RFeHRlbnNpb25Qb2ludCBzZXJ2bGV0SG9zdHMgPSBleHRlbnNpb25Qb2ludHMuZ2V0RXh0ZW5zaW9uUG9pbnQoU2VydmxldEhvc3RFeHRlbnNpb25Qb2ludC5jbGFzcyk7Ci0gICAgICAgIHRoaXMuc2VydmxldEhvc3QgPSBzZXJ2bGV0SG9zdHMuZ2V0U2VydmxldEhvc3RzKCkuZ2V0KDApOwotICAgICAgICBGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMgPSBleHRlbnNpb25Qb2ludHMuZ2V0RXh0ZW5zaW9uUG9pbnQoRmFjdG9yeUV4dGVuc2lvblBvaW50LmNsYXNzKTsKLSAgICAgICAgdGhpcy5tZXNzYWdlRmFjdG9yeSA9IG1vZGVsRmFjdG9yaWVzLmdldEZhY3RvcnkoTWVzc2FnZUZhY3RvcnkuY2xhc3MpOwotICAgICAgICB0aGlzLm1lZGlhdG9yID0gZXh0ZW5zaW9uUG9pbnRzLmdldEV4dGVuc2lvblBvaW50KFV0aWxpdHlFeHRlbnNpb25Qb2ludC5jbGFzcykuZ2V0VXRpbGl0eShNZWRpYXRvci5jbGFzcyk7Ci0gICAgfQotCi0gICAgcHVibGljIFJlZmVyZW5jZUJpbmRpbmdQcm92aWRlciBjcmVhdGVSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIoUnVudGltZUVuZHBvaW50UmVmZXJlbmNlIGVuZHBvaW50UmVmZXJlbmNlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgUlNTUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyKGVuZHBvaW50UmVmZXJlbmNlLCBtZWRpYXRvcik7Ci0gICAgfQotCi0gICAgcHVibGljIFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIgY3JlYXRlU2VydmljZUJpbmRpbmdQcm92aWRlcihSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBSU1NTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyKGVuZHBvaW50LCBtZXNzYWdlRmFjdG9yeSwgbWVkaWF0b3IsIHNlcnZsZXRIb3N0KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2xhc3M8UlNTQmluZGluZz4gZ2V0TW9kZWxUeXBlKCkgewotICAgICAgICByZXR1cm4gUlNTQmluZGluZy5jbGFzczsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL3Byb3ZpZGVyL1JTU1JlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9wcm92aWRlci9SU1NSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIzNGEwYy4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL3Byb3ZpZGVyL1JTU1JlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLnByb3ZpZGVyOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5FbmRwb2ludFJlZmVyZW5jZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLlJTU0JpbmRpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5NZWRpYXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2VDb250cmFjdDsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5SZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnRSZWZlcmVuY2U7Ci0KLS8qKgotICogSW1wbGVtZW50YXRpb24gb2YgdGhlIFJTUyBiaW5kaW5nIHByb3ZpZGVyLgotICoKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1jbGFzcyBSU1NSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgaW1wbGVtZW50cyBSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgewotCi0gICAgcHJpdmF0ZSBFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludFJlZmVyZW5jZTsKLSAgICAKLSAgICBwcml2YXRlIFJ1bnRpbWVDb21wb25lbnRSZWZlcmVuY2UgcmVmZXJlbmNlOwotICAgIHByaXZhdGUgUlNTQmluZGluZyBiaW5kaW5nOwotCi0gICAgUlNTUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyKEVuZHBvaW50UmVmZXJlbmNlIGVuZHBvaW50UmVmZXJlbmNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZWRpYXRvciBtZWRpYXRvcikgewotICAgICAgICB0aGlzLmVuZHBvaW50UmVmZXJlbmNlID0gZW5kcG9pbnRSZWZlcmVuY2U7Ci0gICAgICAgIHRoaXMucmVmZXJlbmNlID0gKFJ1bnRpbWVDb21wb25lbnRSZWZlcmVuY2UpIGVuZHBvaW50UmVmZXJlbmNlLmdldFJlZmVyZW5jZSgpOwotICAgICAgICB0aGlzLmJpbmRpbmcgPSAoUlNTQmluZGluZykgZW5kcG9pbnRSZWZlcmVuY2UuZ2V0QmluZGluZygpOwotICAgIH0KLQotICAgIHB1YmxpYyBJbnZva2VyIGNyZWF0ZUludm9rZXIoT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAgICAgICByZXR1cm4gbmV3IFJTU0JpbmRpbmdJbnZva2VyKGJpbmRpbmcuZ2V0VVJJKCksICJyc3NfMi4wIik7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNPbmVXYXlJbnZvY2F0aW9uKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIEludGVyZmFjZUNvbnRyYWN0IGdldEJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCgpIHsKLSAgICAgICAgcmV0dXJuIHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzdGFydCgpIHsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9wcm92aWRlci9SU1NTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL3Byb3ZpZGVyL1JTU1NlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhYjkzOS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL3Byb3ZpZGVyL1JTU1NlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5wcm92aWRlcjsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3MuUlNTQmluZGluZzsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLk1lZGlhdG9yOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5odHRwLlNlcnZsZXRIb3N0OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlNlcnZpY2VCaW5kaW5nUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkludm9jYWJsZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50OwotCi0vKioKLSAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBSU1MgYmluZGluZyBwcm92aWRlci4KLSAqCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotY2xhc3MgUlNTU2VydmljZUJpbmRpbmdQcm92aWRlciBpbXBsZW1lbnRzIFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIgewotCi0gICAgcHJpdmF0ZSBSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQ7Ci0gICAgCi0gICAgLy9wcml2YXRlIFJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2U7Ci0gICAgcHJpdmF0ZSBSU1NCaW5kaW5nIGJpbmRpbmc7Ci0gICAgCi0gICAgcHJpdmF0ZSBNZXNzYWdlRmFjdG9yeSBtZXNzYWdlRmFjdG9yeTsKLSAgICBwcml2YXRlIE1lZGlhdG9yIG1lZGlhdG9yOwotICAgIHByaXZhdGUgU2VydmxldEhvc3Qgc2VydmxldEhvc3Q7Ci0gICAgCi0gICAgcHJpdmF0ZSBTdHJpbmcgc2VydmxldE1hcHBpbmc7Ci0gICAgCi0gICAgUlNTU2VydmljZUJpbmRpbmdQcm92aWRlcihSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkgbWVzc2FnZUZhY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVkaWF0b3IgbWVkaWF0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmxldEhvc3Qgc2VydmxldEhvc3QpIHsKLSAgICAgICAgdGhpcy5lbmRwb2ludCA9IGVuZHBvaW50OwotICAgICAgICAKLSAgICAgICAgLy90aGlzLnNlcnZpY2UgPSAoUnVudGltZUNvbXBvbmVudFNlcnZpY2UpZW5kcG9pbnQuZ2V0U2VydmljZSgpOwotICAgICAgICB0aGlzLmJpbmRpbmcgPSAoUlNTQmluZGluZykgZW5kcG9pbnQuZ2V0QmluZGluZygpOwotICAgICAgICB0aGlzLnNlcnZsZXRIb3N0ID0gc2VydmxldEhvc3Q7Ci0gICAgICAgIHRoaXMubWVzc2FnZUZhY3RvcnkgPSBtZXNzYWdlRmFjdG9yeTsKLSAgICAgICAgdGhpcy5tZWRpYXRvciA9IG1lZGlhdG9yOwotICAgIH0KLQotICAgIHB1YmxpYyBJbnRlcmZhY2VDb250cmFjdCBnZXRCaW5kaW5nSW50ZXJmYWNlQ29udHJhY3QoKSB7Ci0gICAgICAgIHJldHVybiBlbmRwb2ludC5nZXRDb21wb25lbnRUeXBlU2VydmljZUludGVyZmFjZUNvbnRyYWN0KCk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzT25lV2F5SW52b2NhdGlvbigpIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgewotICAgICAgICBJbnZvY2FibGUgd2lyZSA9IChSdW50aW1lRW5kcG9pbnQpIGVuZHBvaW50OwotCi0gICAgICAgIFJTU0JpbmRpbmdMaXN0ZW5lclNlcnZsZXQgc2VydmxldCA9Ci0gICAgICAgICAgICBuZXcgUlNTQmluZGluZ0xpc3RlbmVyU2VydmxldCh3aXJlLCBtZXNzYWdlRmFjdG9yeSwgbWVkaWF0b3IpOwotCi0gICAgICAgIHNlcnZsZXRNYXBwaW5nID0gYmluZGluZy5nZXRVUkkoKTsKLSAgICAgICAgaWYgKCFzZXJ2bGV0TWFwcGluZy5lbmRzV2l0aCgiLyIpKSB7Ci0gICAgICAgICAgICBzZXJ2bGV0TWFwcGluZyArPSAiLyI7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFzZXJ2bGV0TWFwcGluZy5lbmRzV2l0aCgiKiIpKSB7Ci0gICAgICAgICAgICBzZXJ2bGV0TWFwcGluZyArPSAiKiI7Ci0gICAgICAgIH0KLSAgICAgICAgc2VydmxldEhvc3QuYWRkU2VydmxldE1hcHBpbmcoc2VydmxldE1hcHBpbmcsIHNlcnZsZXQpOwotCi0gICAgICAgIC8vIFNhdmUgdGhlIGFjdHVhbCBiaW5kaW5nIFVSSSBpbiB0aGUgYmluZGluZwotICAgICAgICAvL2JpbmRpbmcuc2V0VVJJKHNlcnZsZXRIb3N0LmdldFVSTE1hcHBpbmcoYmluZGluZy5nZXRVUkkoKSkudG9TdHJpbmcoKSk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICAgICAgc2VydmxldEhvc3QucmVtb3ZlU2VydmxldE1hcHBpbmcoc2VydmxldE1hcHBpbmcpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3RvcnkgYi9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTYwZGMyOC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMgDQotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMgDQotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0jIHVuZGVyIHRoZSBMaWNlbnNlLiANCi0NCi0jIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgYmluZGluZyBleHRlbnNpb24NCi1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLnByb3ZpZGVyLlJTU0JpbmRpbmdQcm92aWRlckZhY3Rvcnk7bW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5SU1NCaW5kaW5nDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9Db25zdW1lci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9Db25zdW1lci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWU0NTE1Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvQ29uc3VtZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzczsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKLQotCi1wdWJsaWMgY2xhc3MgQ29uc3VtZXIgewotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLSAgICAgICAgU3RyaW5nIGNvbnRyaWJ1dGlvbiA9IENvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyLmdldENvbnRyaWJ1dGlvbkxvY2F0aW9uKENvbnN1bWVyLmNsYXNzKTsKLSAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJvcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvZmVlZC9Db25zdW1lci5jb21wb3NpdGUiLCBuZXcgQ29udHJpYnV0aW9uKCJjb25zdW1lciIsIGNvbnRyaWJ1dGlvbikpOwotICAgICAgICAKLSAgICAgICAgbm9kZS5zdGFydCgpOwotCi0gICAgICAgIEN1c3RvbWVyQ2xpZW50IHRlc3RTZXJ2aWNlID0gbm9kZS5nZXRTZXJ2aWNlKEN1c3RvbWVyQ2xpZW50LmNsYXNzLCAiQ3VzdG9tZXJDbGllbnQiKTsKLSAgICAgICAgdGVzdFNlcnZpY2UudGVzdEN1c3RvbWVyQ29sbGVjdGlvbigpOwotCi0gICAgICAgIG5vZGUuc3RvcCgpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvQ3VzdG9tZXJDbGllbnQuamF2YSBiL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvQ3VzdG9tZXJDbGllbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY4NzE1NS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL0N1c3RvbWVyQ2xpZW50LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3M7Ci0KLXB1YmxpYyBpbnRlcmZhY2UgQ3VzdG9tZXJDbGllbnQgewotCi0gICAgdm9pZCB0ZXN0Q3VzdG9tZXJDb2xsZWN0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbjsKLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvQ3VzdG9tZXJDbGllbnRJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL0N1c3RvbWVyQ2xpZW50SW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODBmNzIxLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvQ3VzdG9tZXJDbGllbnRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3M7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLmNvbGxlY3Rpb24uQ29sbGVjdGlvbjsKLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsKLQotaW1wb3J0IGNvbS5zdW4uc3luZGljYXRpb24uZmVlZC5zeW5kLlN5bmRFbnRyeTsKLWltcG9ydCBjb20uc3VuLnN5bmRpY2F0aW9uLmZlZWQuc3luZC5TeW5kRmVlZDsKLQotCi1wdWJsaWMgY2xhc3MgQ3VzdG9tZXJDbGllbnRJbXBsIGltcGxlbWVudHMgQ3VzdG9tZXJDbGllbnQgewotCi0gICAgQFJlZmVyZW5jZQotICAgIHB1YmxpYyBDb2xsZWN0aW9uIHJlc291cmNlQ29sbGVjdGlvbjsKLQotICAgIHB1YmxpYyB2b2lkIHRlc3RDdXN0b21lckNvbGxlY3Rpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBnZXQgY29sbGVjdGlvbiIpOwotICAgICAgICBTeW5kRmVlZCBmZWVkID0gcmVzb3VyY2VDb2xsZWN0aW9uLmdldEZlZWQoKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI8PDwgZ2V0IGNvbGxlY3Rpb24iKTsKLSAgICAgICAgZm9yIChPYmplY3QgbyA6IGZlZWQuZ2V0RW50cmllcygpKSB7Ci0gICAgICAgICAgICBTeW5kRW50cnkgZSA9IChTeW5kRW50cnkpbzsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiaWQgPSAiICsgZS5nZXRVcmkoKSArICIgZW50cnkgPSAiICsgZS5nZXRUaXRsZSgpKTsKLSAgICAgICAgfQotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9DdXN0b21lckNvbGxlY3Rpb25JbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL0N1c3RvbWVyQ29sbGVjdGlvbkltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI1YmYzNy4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL0N1c3RvbWVyQ29sbGVjdGlvbkltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3M7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5VVUlEOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5jb2xsZWN0aW9uLkNvbGxlY3Rpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5jb2xsZWN0aW9uLk5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2NvcGU7Ci0KLWltcG9ydCBjb20uc3VuLnN5bmRpY2F0aW9uLmZlZWQuc3luZC5TeW5kQ29udGVudDsKLWltcG9ydCBjb20uc3VuLnN5bmRpY2F0aW9uLmZlZWQuc3luZC5TeW5kQ29udGVudEltcGw7Ci1pbXBvcnQgY29tLnN1bi5zeW5kaWNhdGlvbi5mZWVkLnN5bmQuU3luZEVudHJ5OwotaW1wb3J0IGNvbS5zdW4uc3luZGljYXRpb24uZmVlZC5zeW5kLlN5bmRFbnRyeUltcGw7Ci1pbXBvcnQgY29tLnN1bi5zeW5kaWNhdGlvbi5mZWVkLnN5bmQuU3luZEZlZWQ7Ci1pbXBvcnQgY29tLnN1bi5zeW5kaWNhdGlvbi5mZWVkLnN5bmQuU3luZEZlZWRJbXBsOwotaW1wb3J0IGNvbS5zdW4uc3luZGljYXRpb24uZmVlZC5zeW5kLlN5bmRMaW5rOwotaW1wb3J0IGNvbS5zdW4uc3luZGljYXRpb24uZmVlZC5zeW5kLlN5bmRMaW5rSW1wbDsKLQotQFNjb3BlKCJDT01QT1NJVEUiKQotcHVibGljIGNsYXNzIEN1c3RvbWVyQ29sbGVjdGlvbkltcGwgaW1wbGVtZW50cyBDb2xsZWN0aW9uIHsKLQotICAgIHByaXZhdGUgTWFwPFN0cmluZywgU3luZEVudHJ5PiBlbnRyaWVzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTeW5kRW50cnk+KCk7Ci0KLSAgICBwdWJsaWMgQ3VzdG9tZXJDb2xsZWN0aW9uSW1wbCgpIHsKLQotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewotICAgICAgICAgICAgU3RyaW5nIGlkID0gInVybjp1dWlkOmN1c3RvbWVyLSIgKyBVVUlELnJhbmRvbVVVSUQoKS50b1N0cmluZygpOwotCi0gICAgICAgICAgICBTeW5kRW50cnkgZW50cnkgPSBuZXcgU3luZEVudHJ5SW1wbCgpOwotICAgICAgICAgICAgZW50cnkuc2V0VGl0bGUoImN1c3RvbWVyICIgKyAiSmFuZSBEb2VfIiArIFN0cmluZy52YWx1ZU9mKGkpKTsKLSAgICAgICAgICAgIGVudHJ5LnNldFVyaShpZCk7Ci0KLSAgICAgICAgICAgIFN5bmRDb250ZW50IGNvbnRlbnQgPSBuZXcgU3luZENvbnRlbnRJbXBsKCk7Ci0gICAgICAgICAgICBjb250ZW50LnNldFZhbHVlKCJKYW5lIERvZV8iICsgU3RyaW5nLnZhbHVlT2YoaSkpOwotICAgICAgICAgICAgY29udGVudC5zZXRUeXBlKCJ0ZXh0Iik7Ci0gICAgICAgICAgICBlbnRyeS5zZXRDb250ZW50cyhDb2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0KGNvbnRlbnQpKTsKLQotICAgICAgICAgICAgTGlzdDxTeW5kTGluaz4gbGlua3MgPSBuZXcgQXJyYXlMaXN0PFN5bmRMaW5rPigpOwotICAgICAgICAgICAgU3luZExpbmsgbGluayA9IG5ldyBTeW5kTGlua0ltcGwoKTsKLSAgICAgICAgICAgIGxpbmsuc2V0UmVsKCJlZGl0Iik7Ci0gICAgICAgICAgICBsaW5rLnNldEhyZWYoIiIgKyBpZCk7Ci0gICAgICAgICAgICBsaW5rcy5hZGQobGluayk7Ci0gICAgICAgICAgICBlbnRyeS5zZXRMaW5rcyhsaW5rcyk7Ci0KLSAgICAgICAgICAgIGxpbmtzID0gbmV3IEFycmF5TGlzdDxTeW5kTGluaz4oKTsKLSAgICAgICAgICAgIGxpbmsgPSBuZXcgU3luZExpbmtJbXBsKCk7Ci0gICAgICAgICAgICBsaW5rLnNldFJlbCgiYWx0ZXJuYXRlIik7Ci0gICAgICAgICAgICBsaW5rLnNldEhyZWYoIiIgKyBpZCk7Ci0gICAgICAgICAgICBsaW5rcy5hZGQobGluayk7Ci0gICAgICAgICAgICBlbnRyeS5zZXRMaW5rcyhsaW5rcyk7Ci0KLSAgICAgICAgICAgIGVudHJ5LnNldFB1Ymxpc2hlZERhdGUobmV3IERhdGUoKSk7Ci0KLSAgICAgICAgICAgIGVudHJpZXMucHV0KGlkLCBlbnRyeSk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBpZD0iICsgaWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIFN5bmRGZWVkIGdldEZlZWQoKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IEN1c3RvbWVyQ29sbGVjdGlvbkltcGwuZ2V0RmVlZCIpOwotCi0gICAgICAgIFN5bmRGZWVkIGZlZWQgPSBuZXcgU3luZEZlZWRJbXBsKCk7Ci0gICAgICAgIGZlZWQuc2V0VGl0bGUoImN1c3RvbWVycyIpOwotICAgICAgICBmZWVkLnNldERlc2NyaXB0aW9uKCJUaGlzIGlzIGEgc2FtcGxlIGZlZWQiKTsKLSAgICAgICAgZmVlZC5nZXRFbnRyaWVzKCkuYWRkQWxsKGVudHJpZXMudmFsdWVzKCkpOwotICAgICAgICByZXR1cm4gZmVlZDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3luZEZlZWQgcXVlcnkoU3RyaW5nIHF1ZXJ5U3RyaW5nKSB7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+IEN1c3RvbWVyQ29sbGVjdGlvbkltcGwucXVlcnkiKTsKLQotICAgICAgICBTeW5kRmVlZCBmZWVkID0gbmV3IFN5bmRGZWVkSW1wbCgpOwotICAgICAgICBmZWVkLnNldFRpdGxlKCJjdXN0b21lcnMiKTsKLSAgICAgICAgZmVlZC5zZXREZXNjcmlwdGlvbigiVGhpcyBpcyBhIHNhbXBsZSBmZWVkIik7Ci0gICAgICAgIGZlZWQuZ2V0RW50cmllcygpLmFkZEFsbChlbnRyaWVzLnZhbHVlcygpKTsKLSAgICAgICAgcmV0dXJuIGZlZWQ7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIHtAaW5oZXJpdERvY30KLSAgICAgKi8KLSAgICBwdWJsaWMgU3luZEVudHJ5IGdldChTdHJpbmcgaWQpIHRocm93cyBOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0gICAgICAgIGZpbmFsIFN5bmRFbnRyeSBlbnRyeSA9IGVudHJpZXMuZ2V0KGlkKTsKLSAgICAgICAgaWYgKGlkID09IG51bGwpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBOb3RGb3VuZEV4Y2VwdGlvbigiTm8gZW50cnkgZm91bmQgd2l0aCBJRCAiICsgaWQpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvUHJvdmlkZXIuamF2YSBiL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvUHJvdmlkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRjMjNhYy4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL1Byb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3M7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uTG9jYXRpb25IZWxwZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OwotCi1wdWJsaWMgY2xhc3MgUHJvdmlkZXIgewotCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIFN0cmluZyBjb250cmlidXRpb24gPSBDb250cmlidXRpb25Mb2NhdGlvbkhlbHBlci5nZXRDb250cmlidXRpb25Mb2NhdGlvbihQcm92aWRlci5jbGFzcyk7Ci0gICAgICAgIE5vZGUgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgib3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ZlZWQvUHJvdmlkZXIuY29tcG9zaXRlIiwgbmV3IENvbnRyaWJ1dGlvbigicHJvdmlkZXIiLCBjb250cmlidXRpb24pKTsKLQotICAgICAgICBub2RlLnN0YXJ0KCk7ICAgICAgICAKLQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByb3ZpZGVyLmNvbXBvc2l0ZSByZWFkeS4uLiIpOwotCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBTeXN0ZW0uaW4ucmVhZCgpOwotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgbm9kZS5zdG9wKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9SU1NHZXRUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9SU1NHZXRUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTc4NmYzLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvUlNTR2V0VGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb25Mb2NhdGlvbkhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOwotaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7Ci1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci0KLS8qKgotICogQmFzaWMgdGVzdCBjYXNlIHRoYXQgd2lsbCBnZXQgdGhlIGZlZWQgZW50cmllcyBmcm9tIGFuIFJTUyBmZWVkLgotICovCi1wdWJsaWMgY2xhc3MgUlNTR2V0VGVzdENhc2UgewotICAgIHByb3RlY3RlZCBzdGF0aWMgTm9kZSBzY2FDb25zdW1lck5vZGU7Ci0gICAgcHJvdGVjdGVkIHN0YXRpYyBOb2RlIHNjYVByb3ZpZGVyTm9kZTsKLSAgICBwcm90ZWN0ZWQgc3RhdGljIEN1c3RvbWVyQ2xpZW50IHRlc3RTZXJ2aWNlOwotCi0gICAgQEJlZm9yZUNsYXNzCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIGluaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj5SU1NHZXRUZXN0Q2FzZS5pbml0IGVudHJ5Iik7Ci0gICAgICAgIFN0cmluZyBjb250cmlidXRpb24gPSBDb250cmlidXRpb25Mb2NhdGlvbkhlbHBlci5nZXRDb250cmlidXRpb25Mb2NhdGlvbihSU1NHZXRUZXN0Q2FzZS5jbGFzcyk7Ci0KLSAgICAgICAgc2NhUHJvdmlkZXJOb2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJvcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL1Byb3ZpZGVyLmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oInByb3ZpZGVyIiwgY29udHJpYnV0aW9uKSk7Ci0gICAgICAgIHNjYVByb3ZpZGVyTm9kZS5zdGFydCgpOwotCi0gICAgICAgIHNjYUNvbnN1bWVyTm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgib3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9Db25zdW1lci5jb21wb3NpdGUiLCBuZXcgQ29udHJpYnV0aW9uKCJjb25zdW1lciIsIGNvbnRyaWJ1dGlvbikpOwotICAgICAgICBzY2FDb25zdW1lck5vZGUuc3RhcnQoKTsKLQotICAgICAgICB0ZXN0U2VydmljZSA9IHNjYUNvbnN1bWVyTm9kZS5nZXRTZXJ2aWNlKEN1c3RvbWVyQ2xpZW50LmNsYXNzLCAiQ3VzdG9tZXJDbGllbnQiKTsKLSAgICB9Ci0KLSAgICBAQWZ0ZXJDbGFzcwotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBkZXN0cm95KCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+UlNTR2V0VGVzdENhc2UuZGVzdHJveSBlbnRyeSIpOwotICAgICAgICBpZiAoc2NhQ29uc3VtZXJOb2RlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHNjYUNvbnN1bWVyTm9kZS5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNjYVByb3ZpZGVyTm9kZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBzY2FQcm92aWRlck5vZGUuc3RvcCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0UHJlbGltKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKHNjYVByb3ZpZGVyTm9kZSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKHNjYUNvbnN1bWVyTm9kZSk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKHRlc3RTZXJ2aWNlKTsKLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIEBJZ25vcmUoIlRVU0NBTlktMzUzNyIpCi0gICAgcHVibGljIHZvaWQgdGVzdFJTU0dldCgpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB0ZXN0U2VydmljZS50ZXN0Q3VzdG9tZXJDb2xsZWN0aW9uKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL0NvbnN1bWVyLmNvbXBvc2l0ZSBiL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9Db25zdW1lci5jb21wb3NpdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIyMTQxODAuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL0NvbnN1bWVyLmNvbXBvc2l0ZQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0gICAgICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKLQkgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9jdXN0b21lciIKLQkgICBuYW1lPSJDb25zdW1lciI+Ci0gICAgCi0gICAgPGNvbXBvbmVudCBuYW1lPSJDdXN0b21lckNsaWVudCI+Ci0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLkN1c3RvbWVyQ2xpZW50SW1wbCIvPgotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InJlc291cmNlQ29sbGVjdGlvbiI+Ci0gICAgICAgIAk8dHVzY2FueTpiaW5kaW5nLnJzcyB1cmk9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4NC9jdXN0b21lciIvPgotICAgICAgICA8L3JlZmVyZW5jZT4KLSAgICA8L2NvbXBvbmVudD4KLQotPC9jb21wb3NpdGU+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvUHJvdmlkZXIuY29tcG9zaXRlIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL1Byb3ZpZGVyLmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJiMWYzZC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvUHJvdmlkZXIuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0gICAgICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCi0JICAgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9jdXN0b21lciIKLQkgICBuYW1lPSJQcm92aWRlciI+DQotDQotCTxzZXJ2aWNlIG5hbWU9ImN1c3RvbWVyIiBwcm9tb3RlPSJDdXN0b21lckNvbGxlY3Rpb24iPg0KLQkJPHR1c2Nhbnk6YmluZGluZy5yc3MgdXJpID0gImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NC9jdXN0b21lciIvPg0KLQk8L3NlcnZpY2U+DQotCQ0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkN1c3RvbWVyQ29sbGVjdGlvbiI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5DdXN0b21lckNvbGxlY3Rpb25JbXBsIi8+DQotICAgIDwvY29tcG9uZW50Pg0KLQ0KLTwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yc3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2JpbmRpbmctcnNzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDg4NjAxLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy1yc3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1FeHBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzczsNCi0gdXNlczo9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkiO3ZlcnNpb249IjIuMC4wIg0KLVNDQS1WZXJzaW9uOiAxLjENCi1CdW5kbGUtTmFtZTogQXBhY2hlIFR1c2NhbnkgU0NBIFJTUyBGZWVkIEJpbmRpbmcgRXh0ZW5zaW9uDQotQnVuZGxlLVZlbmRvcjogVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQotQnVuZGxlLVZlcnNpb246IDIuMC4wDQotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KLUJ1bmRsZS1MaWNlbnNlOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0DQotQnVuZGxlLURlc2NyaXB0aW9uOiBBcGFjaGUgVHVzY2FueSBTQ0EgUlNTIEZlZWQgQmluZGluZyBFeHRlbnNpb24NCi1JbXBvcnQtUGFja2FnZTogamF2YXgueG1sLm5hbWVzcGFjZSwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseTt2ZXJzaW9uPSIyLjAuMCIsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkueG1sO3ZlcnNpb249IjIuMC4wIiwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzczt2ZXJzaW9uPSIyLjAuMCIsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZSwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yDQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcw0KLUJ1bmRsZS1Eb2NVUkw6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8NCi1CdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUsSmF2YVNFLTEuNg0KLQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yc3MvTk9USUNFIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy9OT1RJQ0UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkMmJhNDAuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJzcy9OT1RJQ0UKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSR7cG9tLm5hbWV9Ci1Db3B5cmlnaHQgKGMpIDIwMDUgLSAyMDEwIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgotCi1UaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5Ci1UaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLgotCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzL3BvbS54bWwgYi9tb2R1bGVzL2JpbmRpbmctcnNzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMjFkNTEuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJzcy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW1vZHVsZXM8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcnNzPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBSU1MgRmVlZCBCaW5kaW5nIEV4dGVuc2lvbjwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWludGVyZmFjZS1qYXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1zcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8L2RlcGVuZGVuY2llcz4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yc3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL1JTU0JpbmRpbmcuamF2YSBiL21vZHVsZXMvYmluZGluZy1yc3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL1JTU0JpbmRpbmcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmRhMzIxMC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9SU1NCaW5kaW5nLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3M7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5CaW5kaW5nOwotCi0vKioKLSAqIFJTUyBGZWVkIGJpbmRpbmcgbW9kZWwuCi0gKiAKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgaW50ZXJmYWNlIFJTU0JpbmRpbmcgZXh0ZW5kcyBCaW5kaW5nIHsKLSAgICBRTmFtZSBUWVBFID0gbmV3IFFOYW1lKFNDQTExX1RVU0NBTllfTlMsICJiaW5kaW5nLnJzcyIpOwotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvUlNTQmluZGluZ0ZhY3RvcnkuamF2YSBiL21vZHVsZXMvYmluZGluZy1yc3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvcnNzL1JTU0JpbmRpbmdGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNjkxZTYuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvUlNTQmluZGluZ0ZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzczsKLQotLyoqCi0gKiBGYWN0b3J5IGZvciB0aGUgUlNTIGJpbmRpbmcKLSAqCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotcHVibGljIGludGVyZmFjZSBSU1NCaW5kaW5nRmFjdG9yeSB7Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbmV3IFJTUyBiaW5kaW5nLgotICAgICAqIEByZXR1cm4gdGhlIG5ldyBSU1MgYmluZGluZwotICAgICAqLwotICAgIFJTU0JpbmRpbmcgY3JlYXRlUlNTQmluZGluZygpOwotCi19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9pbXBsL1JTU0JpbmRpbmdGYWN0b3J5SW1wbC5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvaW1wbC9SU1NCaW5kaW5nRmFjdG9yeUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTRlNmE4Mi4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9pbXBsL1JTU0JpbmRpbmdGYWN0b3J5SW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLmltcGw7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLlJTU0JpbmRpbmc7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5SU1NCaW5kaW5nRmFjdG9yeTsKLQotLyoqCi0gKiBGYWN0b3J5IGZvciB0aGUgUlNTIGJpbmRpbmcgbW9kZWwuCi0gKgotICogQHZlcnNpb24gJFJldiQgJERhdGUkCi0gKi8KLXB1YmxpYyBjbGFzcyBSU1NCaW5kaW5nRmFjdG9yeUltcGwgaW1wbGVtZW50cyBSU1NCaW5kaW5nRmFjdG9yeSB7Ci0KLSAgICBwdWJsaWMgUlNTQmluZGluZyBjcmVhdGVSU1NCaW5kaW5nKCkgewotICAgICAgICByZXR1cm4gbmV3IFJTU0JpbmRpbmdJbXBsKCk7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9pbXBsL1JTU0JpbmRpbmdJbXBsLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctcnNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3Jzcy9pbXBsL1JTU0JpbmRpbmdJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwYWJmZmEuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJzcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9yc3MvaW1wbC9SU1NCaW5kaW5nSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcucnNzLmltcGw7Ci0KLWltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5PcGVyYXRpb25TZWxlY3RvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LldpcmVGb3JtYXQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5SU1NCaW5kaW5nOwotCi0vKioKLSAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBSU1MgRmVlZCBiaW5kaW5nIG1vZGVsLgotICogCi0gKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKLSAqLwotY2xhc3MgUlNTQmluZGluZ0ltcGwgaW1wbGVtZW50cyBSU1NCaW5kaW5nIHsKLQotICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7Ci0gICAgcHJpdmF0ZSBTdHJpbmcgdXJpOwotCi0gICAgcHVibGljIFFOYW1lIGdldFR5cGUoKSB7Ci0gICAgICAgIHJldHVybiBSU1NCaW5kaW5nLlRZUEU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewotICAgICAgICByZXR1cm4gbmFtZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRVUkkoKSB7Ci0gICAgICAgIHJldHVybiB1cmk7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VVJJKFN0cmluZyB1cmkpIHsKLSAgICAgICAgdGhpcy51cmkgPSB1cmk7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNVbnJlc29sdmVkKCkgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgc2V0VW5yZXNvbHZlZChib29sZWFuIHVucmVzb2x2ZWQpIHsKLSAgICAgICAgLy8gVGhlIGJpbmRpbmcgaXMgYWx3YXlzIHJlc29sdmVkCi0gICAgfQotCi0gICAgcHVibGljIFdpcmVGb3JtYXQgZ2V0UmVxdWVzdFdpcmVGb3JtYXQoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRSZXF1ZXN0V2lyZUZvcm1hdChXaXJlRm9ybWF0IHdpcmVGb3JtYXQpIHsgIAotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgV2lyZUZvcm1hdCBnZXRSZXNwb25zZVdpcmVGb3JtYXQoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCBzZXRSZXNwb25zZVdpcmVGb3JtYXQoV2lyZUZvcm1hdCB3aXJlRm9ybWF0KSB7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBPcGVyYXRpb25TZWxlY3RvciBnZXRPcGVyYXRpb25TZWxlY3RvcigpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIHNldE9wZXJhdGlvblNlbGVjdG9yKE9wZXJhdGlvblNlbGVjdG9yIG9wZXJhdGlvblNlbGVjdG9yKSB7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBzdXBlci5jbG9uZSgpOwotICAgIH0gICAgIAotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5SU1NCaW5kaW5nRmFjdG9yeSBiL21vZHVsZXMvYmluZGluZy1yc3Mvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3MuUlNTQmluZGluZ0ZhY3RvcnkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczYzQ3YTMuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXJzcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5SU1NCaW5kaW5nRmFjdG9yeQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIyAKLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMgCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0jIHVuZGVyIHRoZSBMaWNlbnNlLiAKLQotIyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdGhlIG1vZGVsIGZhY3RvcnkKLW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5yc3MuaW1wbC5SU1NCaW5kaW5nRmFjdG9yeUltcGwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yIGIvbW9kdWxlcy9iaW5kaW5nLXJzcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI5OGMxNi4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctcnNzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jIAotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSMgdW5kZXIgdGhlIExpY2Vuc2UuIAotCi0jIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgYXJ0aWZhY3QgcHJvY2Vzc29yIGV4dGVuc2lvbgotb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWwuRGVmYXVsdEJlYW5Nb2RlbFByb2Nlc3NvcjtxbmFtZT1odHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEjYmluZGluZy5yc3MsbW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5SU1NCaW5kaW5nLGZhY3Rvcnk9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLnJzcy5SU1NCaW5kaW5nRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXNjYS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9wcm92aWRlci9SdW50aW1lU0NBUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctc2NhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3Byb3ZpZGVyL1J1bnRpbWVTQ0FSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQppbmRleCA4OGM2ODg4Li4wOGYyYmVlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctc2NhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3Byb3ZpZGVyL1J1bnRpbWVTQ0FSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctc2NhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3Byb3ZpZGVyL1J1bnRpbWVTQ0FSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpAQCAtMTU0LDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgLy8gaXQgdHVybnMgb3V0IHRoYXQgdGhlIGNoYWluIHNvdXJjZSBhbmQgdGFyZ2V0IG9wZXJhdGlvbnMgYXJlIHRoZSBzYW1lLCBhbmQgYXJlIHRoZSBvcGVyYXRpb24gCiAgICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgdGFyZ2V0LCBub3Qgc3VyZSBpZiB0aGF0cyBieSBkZXNpZ24gb3IgYSBidWcuIFRoZSBTQ0EgYmluZGluZyBpbnZva2VyIG5lZWRzIHRvIGtub3cgCiAgICAgICAgICAgICAgICAgLy8gdGhlIHNvdXJjZSBhbmQgdGFyZ2V0IGNsYXNzIGxvYWRlcnMgc28gcGFzcyBpbiB0aGUgcmVhbCBzb3VyY2Ugb3BlcmF0aW9uIGluIHRoZSBjb25zdHJ1Y3RvciAKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW4gPT0gbnVsbCA/IG51bGwgOiBuZXcgU0NBQmluZGluZ0ludm9rZXIoY2hhaW4sIG9wZXJhdGlvbiwgbWVkaWF0b3IsIHBhc3NCeVZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW4gPT0gbnVsbCA/IG51bGwgOiBuZXcgU0NBQmluZGluZ0ludm9rZXIoY2hhaW4sIG9wZXJhdGlvbiwgbWVkaWF0b3IsIHBhc3NCeVZhbHVlLCBlcHIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXNjYS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9wcm92aWRlci9TQ0FCaW5kaW5nSW52b2tlci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXNjYS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9wcm92aWRlci9TQ0FCaW5kaW5nSW52b2tlci5qYXZhCmluZGV4IGEwYjk3NmMuLmMyYTkwMzggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy1zY2EtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvcHJvdmlkZXIvU0NBQmluZGluZ0ludm9rZXIuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctc2NhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3Byb3ZpZGVyL1NDQUJpbmRpbmdJbnZva2VyLmphdmEKQEAgLTI2LDYgKzI2LDggQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uUGhhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50UmVmZXJlbmNlOwogCiAvKioKICAqIEB2ZXJzaW9uICRSZXYkICREYXRlJApAQCAtMzYsMTcgKzM4LDIxIEBACiAgICAgcHJpdmF0ZSBPcGVyYXRpb24gc291cmNlT3BlcmF0aW9uOwogICAgIHByaXZhdGUgT3BlcmF0aW9uIHRhcmdldE9wZXJhdGlvbjsKICAgICBwcml2YXRlIGJvb2xlYW4gcGFzc0J5VmFsdWU7CisgICAgcHJpdmF0ZSBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgZXByOworICAgIHByaXZhdGUgUnVudGltZUVuZHBvaW50IGVwOwogCiAgICAgLyoqCiAgICAgICogQ29uc3RydWN0IGEgU0NBQmluZGluZ0ludm9rZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIHNlcnZpY2UgaW52b2NhaXRvbiBjaGFpbgogICAgICAqLwotICAgIHB1YmxpYyBTQ0FCaW5kaW5nSW52b2tlcihJbnZvY2F0aW9uQ2hhaW4gY2hhaW4sIE9wZXJhdGlvbiBzb3VyY2VPcGVyYXRpb24sIE1lZGlhdG9yIG1lZGlhdG9yLCBib29sZWFuIHBhc3NCeVZhbHVlKSB7CisgICAgcHVibGljIFNDQUJpbmRpbmdJbnZva2VyKEludm9jYXRpb25DaGFpbiBjaGFpbiwgT3BlcmF0aW9uIHNvdXJjZU9wZXJhdGlvbiwgTWVkaWF0b3IgbWVkaWF0b3IsIGJvb2xlYW4gcGFzc0J5VmFsdWUsIFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSBlcHIpIHsKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5jaGFpbiA9IGNoYWluOwogICAgICAgICB0aGlzLm1lZGlhdG9yID0gbWVkaWF0b3I7CiAgICAgICAgIHRoaXMuc291cmNlT3BlcmF0aW9uID0gc291cmNlT3BlcmF0aW9uOwogICAgICAgICB0aGlzLnRhcmdldE9wZXJhdGlvbiA9IGNoYWluLmdldFRhcmdldE9wZXJhdGlvbigpOwogICAgICAgICB0aGlzLnBhc3NCeVZhbHVlID0gcGFzc0J5VmFsdWU7CisgICAgICAgIHRoaXMuZXByID0gZXByOworICAgICAgICB0aGlzLmVwID0gKFJ1bnRpbWVFbmRwb2ludCllcHIuZ2V0VGFyZ2V0RW5kcG9pbnQoKTsKICAgICB9CiAKICAgICAvKioKQEAgLTcxLDYgKzc3LDEzIEBACiAgICAgICAgIGlmIChwYXNzQnlWYWx1ZSkgewogICAgICAgICAgICAgbXNnLnNldEJvZHkobWVkaWF0b3IuY29weUlucHV0KG1zZy5nZXRCb2R5KCksIHNvdXJjZU9wZXJhdGlvbiwgdGFyZ2V0T3BlcmF0aW9uKSk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGVwLmdldEludm9jYXRpb25DaGFpbnMoKTsKKyAgICAgICAgaWYgKCAhZXAuZ2V0Q2FsbGJhY2tFbmRwb2ludFJlZmVyZW5jZXMoKS5pc0VtcHR5KCkgKSB7CisgICAgICAgICAgICBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgYXN5bmNFUFIgPSAoUnVudGltZUVuZHBvaW50UmVmZXJlbmNlKSBlcC5nZXRDYWxsYmFja0VuZHBvaW50UmVmZXJlbmNlcygpLmdldCgwKTsKKyAgICAgICAgICAgIC8vIFBsYWNlIGEgbGluayB0byB0aGUgY2FsbGJhY2sgRVBSIGludG8gdGhlIG1lc3NhZ2UgaGVhZGVycy4uLgorICAgICAgICAgICAgbXNnLmdldEhlYWRlcnMoKS5wdXQoIkFTWU5DX0NBTExCQUNLIiwgYXN5bmNFUFIgKTsKKyAgICAgICAgfSAKIAogICAgICAgICBNZXNzYWdlIHJlc3VsdE1zZyA9IGdldE5leHQoKS5pbnZva2UobXNnKTsKIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczIvcG9tLnhtbCBiL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyL3BvbS54bWwKaW5kZXggZmJhM2U3OS4uY2FkODZmZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczIvcG9tLnhtbAorKysgYi9tb2R1bGVzL2JpbmRpbmctd3MtcnVudGltZS1heGlzMi9wb20ueG1sCkBAIC0yOSw5MiArMjksMjkgQEAKICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3MtcnVudGltZS1heGlzMjwvYXJ0aWZhY3RJZD4KICAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgQXhpczItMS41LWJhc2VkIFdTIEJpbmRpbmcgUnVudGltZTwvbmFtZT4KIAotICAgIDxyZXBvc2l0b3JpZXM+Ci0gICAgICAgIDxyZXBvc2l0b3J5PgotICAgICAgICAgICAgPGlkPmFwYWNoZS53czwvaWQ+Ci0gICAgICAgICAgICA8bmFtZT5BcGFjaGUgV2ViU2VydmljZXMgUmVwb3NpdG9yeTwvbmFtZT4KLSAgICAgICAgICAgIDx1cmw+aHR0cDovL3dzLnpvbmVzLmFwYWNoZS5vcmcvcmVwb3NpdG9yeS88L3VybD4KLSAgICAgICAgICAgIDxsYXlvdXQ+bGVnYWN5PC9sYXlvdXQ+Ci0gICAgICAgIDwvcmVwb3NpdG9yeT4KLSAgICA8L3JlcG9zaXRvcmllcz4KIAogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDwhLS0gIENvbXBpbGUgZGVwZW5kZW5jaWVzIC0tPgogICAgIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmUtcnVudGltZS1wb208L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWludGVyZmFjZS13c2RsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1hc3NlbWJseS14bWw8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3M8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gIAogCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy13c2RsZ2VuPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlLWRhdGFiaW5kaW5nPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YWJpbmRpbmctYXhpb208L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nLWpheGItYXhpb208L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtaHR0cDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnkteHNkPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAKKyAgICAgICAgICAgICAgCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktcG9saWN5LXNlY3VyaXR5PC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgIAogCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5heGlzMjwvZ3JvdXBJZD4KQEAgLTMwMSw2ICsyMzgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+eG1sLWFwaXM8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnhtbC1hcGlzPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9wZW5zYW1sPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vcGVuc2FtbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KICAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogCkBAIC0zNjUsNiArMzA2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPnhtbC1hcGlzPC9ncm91cElkPgogICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD54bWwtYXBpczwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcGVuc2FtbDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3BlbnNhbWw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CiAgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIApAQCAtNDAwLDM2ICszNDUsNDYgQEAKICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KICAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPCEtLSAgUnVudGltZSBkZXBlbmRlbmNpZXMgLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YWJpbmRpbmctYXhpb208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nLWpheGItYXhpb208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIAogCiAgICAgICAgIDwhLS0gIFRlc3QgZGVwZW5kZW5jaWVzIC0tPgotICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+IAorCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1qZXR0eTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgCisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgIAorICAgCis8IS0tICAgICAgICAgCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgogICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1qbXNfMS4xX3NwZWM8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4xPC92ZXJzaW9uPgogICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgICAKKyAgICAgICAgPC9kZXBlbmRlbmN5PiAKKy0tPgogCiAgICAgPC9kZXBlbmRlbmNpZXM+CiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3Byb3ZpZGVyL0F4aXMyUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctd3MtcnVudGltZS1heGlzMi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9wcm92aWRlci9BeGlzMlJlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhCmluZGV4IGQ5M2Y0ZWQuLjIwZjVlMDAgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3Byb3ZpZGVyL0F4aXMyUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcHJvdmlkZXIvQXhpczJSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpAQCAtMTQ2LDcgKzE0Niw3IEBACiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIFdTREwgaXMgbm90IHVzaW5nIFNPQVAgdjEuMiBpZiByZXF1aXJlcz0iU09BUC52MV8xIiBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAgICAgaWYgKCBpc1NPQVAxMVJlcXVpcmVkICkgewogICAgICAgICAJRGVmaW5pdGlvbiBkZWYgPSB3c0JpbmRpbmcuZ2V0R2VuZXJhdGVkV1NETERvY3VtZW50KCk7Ci0gICAgICAgIAlCaW5kaW5nIGJpbmRpbmcgPSBkZWYuZ2V0QmluZGluZyh3c0JpbmRpbmcuZ2V0QmluZGluZ05hbWUoKSk7CisgICAgICAgIAlCaW5kaW5nIGJpbmRpbmcgPSBkZWYuZ2V0QmluZGluZyh3c0JpbmRpbmcuZ2V0QmluZGluZygpLmdldFFOYW1lKCkpOwogICAgICAgICAJZm9yICggT2JqZWN0IGV4dCA6IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgKSB7CiAgICAgICAgIAkJaWYgKCBleHQgaW5zdGFuY2VvZiBTT0FQMTJCaW5kaW5nICkKICAgICAgICAgCQkJdGhyb3cgbmV3IFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uKCJXU0RMIGRvY3VtZW50IGlzIHVzaW5nIFNPQVAgdjEuMiBidXQgU09BUCB2MS4xICIgKwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgIC8vIFZhbGlkYXRlIHRoYXQgdGhlIFdTREwgaXMgbm90IHVzaW5nIFNPQVAgdjEuMSBpZiByZXF1aXJlcz0iU09BUC52MV8yIiBoYXMgYmVlbiBzcGVjaWZpZWQKICAgICAgICAgaWYgKCBpc1NPQVAxMlJlcXVpcmVkICkgewogICAgICAgICAJRGVmaW5pdGlvbiBkZWYgPSB3c0JpbmRpbmcuZ2V0R2VuZXJhdGVkV1NETERvY3VtZW50KCk7Ci0gICAgICAgIAlCaW5kaW5nIGJpbmRpbmcgPSBkZWYuZ2V0QmluZGluZyh3c0JpbmRpbmcuZ2V0QmluZGluZ05hbWUoKSk7CisgICAgICAgIAlCaW5kaW5nIGJpbmRpbmcgPSBkZWYuZ2V0QmluZGluZyh3c0JpbmRpbmcuZ2V0QmluZGluZygpLmdldFFOYW1lKCkpOwogICAgICAgICAJZm9yICggT2JqZWN0IGV4dCA6IGJpbmRpbmcuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCkgKSB7CiAgICAgICAgIAkJaWYgKCBleHQgaW5zdGFuY2VvZiBTT0FQQmluZGluZyApCiAgICAgICAgIAkJCXRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbigiV1NETCBkb2N1bWVudCBpcyB1c2luZyBTT0FQIHYxLjEgYnV0IFNPQVAgdjEuMiAiICsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLnhtbC5EZWZpbml0aW9ucyBiL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLnhtbC5EZWZpbml0aW9ucwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDkwYjI1NS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctd3MtcnVudGltZS1heGlzMi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kZWZpbml0aW9ucy54bWwuRGVmaW5pdGlvbnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0jDQotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMNCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSMgdW5kZXIgdGhlIExpY2Vuc2UuDQotb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2RlZmluaXRpb25zLnhtbA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWpheHdzLXJpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL3JpL0pBWFdTU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtamF4d3Mtcmkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvcmkvSkFYV1NTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKaW5kZXggNTE2Y2E2Mi4uOTFkNGJjYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtamF4d3Mtcmkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvcmkvSkFYV1NTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKKysrIGIvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtamF4d3Mtcmkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvcmkvSkFYV1NTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKQEAgLTExMiwxNyArMTEyLDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c0JpbmRpbmcuZ2V0UG9ydCgpLmdldE5hbWUoKSk7CiAgICAgICAgIHByb3BlcnRpZXMucHV0KEVuZHBvaW50LldTRExfUE9SVCwgcG9ydE5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICBRTmFtZSBiaW5kaW5nU2VydmljZU5hbWUgPSB3c0JpbmRpbmcuZ2V0U2VydmljZU5hbWUoKSA9PSBudWxsID8gd3NCaW5kaW5nLmdldFNlcnZpY2UoKS5nZXRRTmFtZSgpIDogd3NCaW5kaW5nLmdldFNlcnZpY2VOYW1lKCk7CiAgICAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gbmV3IFFOYW1lKHRhcmdldE5hbWVzcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NCaW5kaW5nLmdldFNlcnZpY2UoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nU2VydmljZU5hbWUuZ2V0TG9jYWxQYXJ0KCkpOyAKICAgICAgICAgcHJvcGVydGllcy5wdXQoRW5kcG9pbnQuV1NETF9TRVJWSUNFLCBzZXJ2aWNlTmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIHdzRW5kcG9pbnQuc2V0TWV0YWRhdGEobWV0YWRhdGEpOwogICAgICAgICB3c0VuZHBvaW50LnNldFByb3BlcnRpZXMocHJvcGVydGllcyk7ICAgICAgICAgICAgICAgCiAgICAgICAgCiAgICAgICAgIC8vIFN0YXJ0IHVwIHRoZSBlbmRwb2ludAorICAgCiAgICAgICAgIHdzRW5kcG9pbnQucHVibGlzaCh3c0JpbmRpbmcuZ2V0VVJJKCkpOwotICAgICAgICAKKyAgICAgCisgICAgICAgCiAgICAgICAgIGpheHdzQmluZGluZ1Byb3ZpZGVyLnN0YXJ0KCk7ICAgICAgICAKKyAgICAgICAKICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtamF4d3Mtcmkvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zIGIvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtamF4d3Mtcmkvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTJjOWYyLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWpheHdzLXJpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLnhtbC5EZWZpbml0aW9ucworKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMNCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotIw0KLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotIyB1bmRlciB0aGUgTGljZW5zZS4NCi1vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvcmkvZGVmaW5pdGlvbnMueG1sDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtamF4d3Mtcmkvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9yaS9kZWZpbml0aW9ucy54bWwgYi9tb2R1bGVzL2JpbmRpbmctd3MtcnVudGltZS1qYXh3cy1yaS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL3JpL2RlZmluaXRpb25zLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzRhMzU2My4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2JpbmRpbmctd3MtcnVudGltZS1qYXh3cy1yaS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL3JpL2RlZmluaXRpb25zLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci0KLTwhLS0gJFJldjogOTA3NjM2ICQgJERhdGU6IDIwMTAtMDItMDkgMDE6Mzk6MTYgKzEzMDAgKFR1ZSwgMDkgRmViIDIwMTApICQgLS0+Ci0KLTxzY2E6ZGVmaW5pdGlvbnMgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLSAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIgotICAgICAgICAgICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0gICAgICAgICAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiPgotICAgICAgICAgICAgCi0gICAgPHNjYTpiaW5kaW5nVHlwZSB0eXBlPSJzY2E6YmluZGluZy53cyIgIG1heVByb3ZpZGU9InNjYTpTT0FQIHNjYTpTT0FQLnYxXzEgc2NhOlNPQVAudjFfMiB0dXNjYW55Ok1UT00iIGFsd2F5c1Byb3ZpZGVzPSIiLz4KLQotICAgIDwhLS0gc2VlIHRoZSBmaWxlIHNjYS1wb2xpY3ktMS4xLWludGVudHMtZGVmaW5pdGlvbnMueG1sIGluIHRoZSAtLT4KLSAgICA8IS0tIGFzc2VtYmx5LXhzZCBtb2R1bGUgZm9yIHNwZWMgZGVmaW5lZCBpbnRlbnRzICAgICAgICAgICAgICAgLS0+Ci0gICAgCi0gICAgPCEtLSBQb2xpY3lJbnRlbnRzIGRlZmluZWQgYnkgdGhlIFNDQSBSdW50aW1lIEV4dGVuc2lvbiBmb3IgV1MgQmluZGluZyBBeGlzIDIgLS0+Ci0gICAgCi0gICAgPHNjYTppbnRlbnQgbmFtZT0iTVRPTSIgY29uc3RyYWlucz0ic2NhOmJpbmRpbmcud3MiPgotICAgICAgICA8c2NhOmRlc2NyaXB0aW9uPgotICAgICAgICAgICAgQ29tbXVuaWNhdGlvbiB0aHJvdWdoIHRoaXMgYmluZGluZyByZXF1aXJlcyBNVE9NIHN1cHBvcnQKLSAgICAgICAgPC9zY2E6ZGVzY3JpcHRpb24+Ci0gICAgPC9zY2E6aW50ZW50PgotICAgIAotIDwvc2NhOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXdzLXdzZGxnZW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3Mvd3NkbGdlbi9XU0RMRGVmaW5pdGlvbkdlbmVyYXRvci5qYXZhIGIvbW9kdWxlcy9iaW5kaW5nLXdzLXdzZGxnZW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3Mvd3NkbGdlbi9XU0RMRGVmaW5pdGlvbkdlbmVyYXRvci5qYXZhCmluZGV4IDU2ZmQwMmEuLjUzMDhiM2MgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy13cy13c2RsZ2VuL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL3dzZGxnZW4vV1NETERlZmluaXRpb25HZW5lcmF0b3IuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctd3Mtd3NkbGdlbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy93c2RsZ2VuL1dTRExEZWZpbml0aW9uR2VuZXJhdG9yLmphdmEKQEAgLTUxLDYgKzUxLDcgQEAKIGltcG9ydCBqYXZheC53c2RsLnhtbC5XU0RMUmVhZGVyOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuV2ViU2VydmljZUJpbmRpbmc7CiBpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKIAogLyoqCkBAIC04MSwxMCArODIsMTYgQEAKICAgICBwcml2YXRlIFFOYW1lIHNvYXBCb2R5OwogICAgIHByaXZhdGUgUU5hbWUgc29hcEZhdWx0OwogICAgIHByaXZhdGUgUU5hbWUgc29hcE9wZXJhdGlvbjsKLQotICAgIHB1YmxpYyBXU0RMRGVmaW5pdGlvbkdlbmVyYXRvcihib29sZWFuIHJlcXVpcmVzU09BUDEyKSB7CisgICAgcHJpdmF0ZSBTdHJpbmcgd3NCaW5kaW5nTmFtZTsKKyAgICAKKyAgICBwdWJsaWMgV1NETERlZmluaXRpb25HZW5lcmF0b3IoV2ViU2VydmljZUJpbmRpbmcgd3NCaW5kaW5nKSB7CisgICAgCXRoaXMoQmluZGluZ1dTRExHZW5lcmF0b3IucmVxdWlyZXNTT0FQMTIod3NCaW5kaW5nKSk7CisgICAgCXdzQmluZGluZ05hbWUgPSB3c0JpbmRpbmcuZ2V0TmFtZSgpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgV1NETERlZmluaXRpb25HZW5lcmF0b3IoYm9vbGVhbiBpc1NPQVAxMikgewogICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLnJlcXVpcmVzU09BUDEyID0gcmVxdWlyZXNTT0FQMTI7CisgICAgICAgIHRoaXMucmVxdWlyZXNTT0FQMTIgPSBpc1NPQVAxMjsKICAgICAgICAgc29hcEFkZHJlc3MgPSByZXF1aXJlc1NPQVAxMiA/IFNPQVAxMl9BRERSRVNTIDogU09BUF9BRERSRVNTOwogICAgICAgICBzb2FwQmluZGluZyA9IHJlcXVpcmVzU09BUDEyID8gU09BUDEyX0JJTkRJTkcgOiBTT0FQX0JJTkRJTkc7CiAgICAgICAgIHNvYXBCb2R5ID0gcmVxdWlyZXNTT0FQMTIgPyBTT0FQMTJfQk9EWSA6IFNPQVBfQk9EWTsKQEAgLTEyNyw2ICsxMzQsMTQgQEAKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBjb25maWd1cmVCaW5kaW5nKERlZmluaXRpb24gZGVmaW5pdGlvbiwgQmluZGluZyBiaW5kaW5nLCBQb3J0VHlwZSBwb3J0VHlwZSkgdGhyb3dzIFdTRExFeGNlcHRpb24geworICAgIAlpZiAoIHdzQmluZGluZ05hbWUgIT0gbnVsbCApIHsKKyAgICAJCVFOYW1lIG5hbWUgPSBuZXcgUU5hbWUoZGVmaW5pdGlvbi5nZXRUYXJnZXROYW1lc3BhY2UoKSwgd3NCaW5kaW5nTmFtZSArIGdldFNPQVBWZXJzaW9uU3RyaW5nKCkgKyBCSU5ESU5HX1NVRkZJWCk7CisgICAgCQlpZiAoIGRlZmluaXRpb24uZ2V0QmluZGluZyhuYW1lKSA9PSBudWxsICkgeworICAgIAkJCWJpbmRpbmcuc2V0UU5hbWUobmFtZSk7CisgICAgCQkJcmV0dXJuOworICAgIAkJfQorICAgIAl9CisgICAgCQogICAgICAgICBRTmFtZSBwb3J0VHlwZU5hbWUgPSBwb3J0VHlwZS5nZXRRTmFtZSgpOwogICAgICAgICBpZiAocG9ydFR5cGVOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgIC8vIENob29zZSA8cG9ydHR5cGU+QmluZGluZyBpZiBhdmFpbGFibGUuICBJZiB0aGlzIG5hbWUgaXMgaW4gdXNlLCBpbnNlcnQKQEAgLTIzNSwxMSArMjUwLDEwIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBwdWJsaWMgU2VydmljZSBjcmVhdGVTZXJ2aWNlKERlZmluaXRpb24gZGVmaW5pdGlvbiwgUG9ydFR5cGUgcG9ydFR5cGUpIHsKKyAgICBwdWJsaWMgU2VydmljZSBjcmVhdGVTZXJ2aWNlKERlZmluaXRpb24gZGVmaW5pdGlvbiwgUG9ydFR5cGUgcG9ydFR5cGUsIFN0cmluZyBzZXJ2aWNlTmFtZSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gZGVmaW5pdGlvbi5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBjb25maWd1cmVTZXJ2aWNlKGRlZmluaXRpb24sIHNlcnZpY2UsIHBvcnRUeXBlKTsKLSAgICAgICAgICAgIC8vIGNyZWF0ZVBvcnQoZGVmaW5pdGlvbiwgYmluZGluZywgc2VydmljZSk7CisgICAgICAgICAgICBjb25maWd1cmVTZXJ2aWNlKGRlZmluaXRpb24sIHNlcnZpY2UsIHBvcnRUeXBlLCBzZXJ2aWNlTmFtZSk7CiAgICAgICAgICAgICBkZWZpbml0aW9uLmFkZFNlcnZpY2Uoc2VydmljZSk7CiAgICAgICAgICAgICByZXR1cm4gc2VydmljZTsKICAgICAgICAgfSBjYXRjaCAoV1NETEV4Y2VwdGlvbiBlKSB7CkBAIC0yNDcsMTEgKzI2MSwxMCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcHVibGljIFNlcnZpY2UgY3JlYXRlU2VydmljZShEZWZpbml0aW9uIGRlZmluaXRpb24sIEJpbmRpbmcgYmluZGluZykgeworICAgIHB1YmxpYyBTZXJ2aWNlIGNyZWF0ZVNlcnZpY2UoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBCaW5kaW5nIGJpbmRpbmcsIFN0cmluZyBzZXJ2aWNlTmFtZSkgewogICAgICAgICB0cnkgewogICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gZGVmaW5pdGlvbi5jcmVhdGVTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBjb25maWd1cmVTZXJ2aWNlKGRlZmluaXRpb24sIHNlcnZpY2UsIGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSk7Ci0gICAgICAgICAgICAvLyBjcmVhdGVQb3J0KGRlZmluaXRpb24sIGJpbmRpbmcsIHNlcnZpY2UpOworICAgICAgICAgICAgY29uZmlndXJlU2VydmljZShkZWZpbml0aW9uLCBzZXJ2aWNlLCBiaW5kaW5nLmdldFBvcnRUeXBlKCksIHNlcnZpY2VOYW1lKTsKICAgICAgICAgICAgIGRlZmluaXRpb24uYWRkU2VydmljZShzZXJ2aWNlKTsKICAgICAgICAgICAgIHJldHVybiBzZXJ2aWNlOwogICAgICAgICB9IGNhdGNoIChXU0RMRXhjZXB0aW9uIGUpIHsKQEAgLTI1OSw3ICsyNzIsMTUgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVNlcnZpY2UoRGVmaW5pdGlvbiBkZWZpbml0aW9uLCBTZXJ2aWNlIHNlcnZpY2UsIFBvcnRUeXBlIHBvcnRUeXBlKSB0aHJvd3MgV1NETEV4Y2VwdGlvbiB7CisgICAgcHJvdGVjdGVkIHZvaWQgY29uZmlndXJlU2VydmljZShEZWZpbml0aW9uIGRlZmluaXRpb24sIFNlcnZpY2Ugc2VydmljZSwgUG9ydFR5cGUgcG9ydFR5cGUsIFN0cmluZyBzZXJ2aWNlTmFtZSkgdGhyb3dzIFdTRExFeGNlcHRpb24geworICAgIAlpZiAoIHNlcnZpY2VOYW1lICE9IG51bGwgKSB7CisgICAgCQlRTmFtZSBuYW1lID0gbmV3IFFOYW1lKGRlZmluaXRpb24uZ2V0VGFyZ2V0TmFtZXNwYWNlKCksIHNlcnZpY2VOYW1lKTsKKyAgICAJCWlmICggZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKG5hbWUpID09IG51bGwgKSB7CisgICAgCQkJc2VydmljZS5zZXRRTmFtZShuYW1lKTsKKyAgICAJCQlyZXR1cm47CisgICAgCQl9CisgICAgCX0KKyAgICAJCiAgICAgICAgIFFOYW1lIHBvcnRUeXBlTmFtZSA9IHBvcnRUeXBlLmdldFFOYW1lKCk7CiAgICAgICAgIGlmIChwb3J0VHlwZU5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICAgLy8gQ2hvb3NlIDxwb3J0dHlwZT5TZXJ2aWNlIGlmIGF2YWlsYWJsZS4gIElmIHRoaXMgbmFtZSBpcyBpbiB1c2UsIGluc2VydApAQCAtMjk3LDkgKzMxOCwxOSBAQAogICAgIH0KIAogICAgIHByb3RlY3RlZCB2b2lkIGNvbmZpZ3VyZVBvcnQoUG9ydCBwb3J0LCBCaW5kaW5nIGJpbmRpbmcpIHRocm93cyBXU0RMRXhjZXB0aW9uIHsKLSAgICAgICAgaWYgKGJpbmRpbmcuZ2V0UG9ydFR5cGUoKSAhPSBudWxsICYmIGJpbmRpbmcuZ2V0UG9ydFR5cGUoKS5nZXRRTmFtZSgpICE9IG51bGwpIHsKKyAgICAJaWYgKCB3c0JpbmRpbmdOYW1lICE9IG51bGwgKSB7CisgICAgCQlwb3J0LnNldE5hbWUod3NCaW5kaW5nTmFtZSArIGdldFNPQVBWZXJzaW9uU3RyaW5nKCkgKyBQT1JUX1NVRkZJWCk7CisgICAgCX0gZWxzZSBpZiAoYmluZGluZy5nZXRQb3J0VHlwZSgpICE9IG51bGwgJiYgYmluZGluZy5nZXRQb3J0VHlwZSgpLmdldFFOYW1lKCkgIT0gbnVsbCkgewogICAgICAgICAgICAgcG9ydC5zZXROYW1lKGJpbmRpbmcuZ2V0UG9ydFR5cGUoKS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpICsgUE9SVF9TVUZGSVgpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHByaXZhdGUgU3RyaW5nIGdldFNPQVBWZXJzaW9uU3RyaW5nKCkgeworICAgIAlpZiAoIHJlcXVpcmVzU09BUDEyICkgeworICAgIAkJcmV0dXJuICJTT0FQMTIiOworICAgIAl9IGVsc2UgeworICAgIAkJcmV0dXJuICJTT0FQMTEiOworICAgIAl9CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctd3Mtd3NkbGdlbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy93c2RsZ2VuL1dTRExTZXJ2aWNlR2VuZXJhdG9yLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctd3Mtd3NkbGdlbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy93c2RsZ2VuL1dTRExTZXJ2aWNlR2VuZXJhdG9yLmphdmEKaW5kZXggM2JjNzg0NC4uYzZmMWRiNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9iaW5kaW5nLXdzLXdzZGxnZW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3Mvd3NkbGdlbi9XU0RMU2VydmljZUdlbmVyYXRvci5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy13cy13c2RsZ2VuL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL3dzZGxnZW4vV1NETFNlcnZpY2VHZW5lcmF0b3IuamF2YQpAQCAtMjQ5LDEwICsyNDksMTAgQEAKIAogICAgICAgICAvLyBhZGQgYSBzZXJ2aWNlIGFuZCBwb3J0cyB0byB0aGUgZ2VuZXJhdGVkIGRlZmluaXRpb24gIAogICAgICAgICBXU0RMRGVmaW5pdGlvbkdlbmVyYXRvciBoZWxwZXIgPQotICAgICAgICAgICAgICAgIG5ldyBXU0RMRGVmaW5pdGlvbkdlbmVyYXRvcihCaW5kaW5nV1NETEdlbmVyYXRvci5yZXF1aXJlc1NPQVAxMih3c0JpbmRpbmcpKTsKKyAgICAgICAgICAgICAgICBuZXcgV1NETERlZmluaXRpb25HZW5lcmF0b3Iod3NCaW5kaW5nKTsKICAgICAgICAgV1NETEludGVyZmFjZSB3aSA9IChXU0RMSW50ZXJmYWNlKXdzQmluZGluZy5nZXRCaW5kaW5nSW50ZXJmYWNlQ29udHJhY3QoKS5nZXRJbnRlcmZhY2UoKTsKICAgICAgICAgUG9ydFR5cGUgcG9ydFR5cGUgPSB3aS5nZXRQb3J0VHlwZSgpOwotICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBoZWxwZXIuY3JlYXRlU2VydmljZShkZWYsIHBvcnRUeXBlKTsKKyAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gaGVscGVyLmNyZWF0ZVNlcnZpY2UoZGVmLCBwb3J0VHlwZSwgY29udHJhY3QuZ2V0TmFtZSgpKTsKICAgICAgICAgaWYgKHdzQmluZGluZy5nZXRCaW5kaW5nKCkgPT0gbnVsbCAmJiBwb3J0cy5zaXplKCkgPT0gMCkgewogICAgICAgICAgICAgQmluZGluZyBiaW5kaW5nID0gaGVscGVyLmNyZWF0ZUJpbmRpbmcoZGVmLCBwb3J0VHlwZSk7CiAgICAgICAgICAgICBpZiAoQmluZGluZ1dTRExHZW5lcmF0b3IucmVxdWlyZXNTT0FQMTIod3NCaW5kaW5nKSkgewpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXdzLXdzZGxnZW4vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3Mvd3NkbGdlbi9CaW5kaW5nV1NETEdlbmVyYXRvclRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2JpbmRpbmctd3Mtd3NkbGdlbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy93c2RsZ2VuL0JpbmRpbmdXU0RMR2VuZXJhdG9yVGVzdENhc2UuamF2YQppbmRleCBkMTQ3ZDg1Li5mOTA1YzEwIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctd3Mtd3NkbGdlbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy93c2RsZ2VuL0JpbmRpbmdXU0RMR2VuZXJhdG9yVGVzdENhc2UuamF2YQorKysgYi9tb2R1bGVzL2JpbmRpbmctd3Mtd3NkbGdlbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy93c2RsZ2VuL0JpbmRpbmdXU0RMR2VuZXJhdG9yVGVzdENhc2UuamF2YQpAQCAtNTgsNyArNTgsNyBAQAogICAgICAgICBKYXZhSW50ZXJmYWNlIGlmYWNlID0gZmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKEhlbGxvV29ybGQuY2xhc3MpOwogICAgICAgICBEZWZhdWx0RGF0YUJpbmRpbmdFeHRlbnNpb25Qb2ludCBkYXRhQmluZGluZ3MgPSBuZXcgRGVmYXVsdERhdGFCaW5kaW5nRXh0ZW5zaW9uUG9pbnQocmVnaXN0cnkpOwogICAgICAgICBKQVhXU0ZhdWx0RXhjZXB0aW9uTWFwcGVyIGZhdWx0RXhjZXB0aW9uTWFwcGVyID0gbmV3IEpBWFdTRmF1bHRFeGNlcHRpb25NYXBwZXIoZGF0YUJpbmRpbmdzLCBudWxsKTsKLSAgICAgICAgbmV3IEpBWFdTSmF2YUludGVyZmFjZVByb2Nlc3NvcihkYXRhQmluZGluZ3MsIGZhdWx0RXhjZXB0aW9uTWFwcGVyLCBudWxsKS52aXNpdEludGVyZmFjZShpZmFjZSk7CisgICAgICAgIG5ldyBKQVhXU0phdmFJbnRlcmZhY2VQcm9jZXNzb3IocmVnaXN0cnkpLnZpc2l0SW50ZXJmYWNlKGlmYWNlKTsKICAgICAgICAgbmV3IERhdGFCaW5kaW5nSmF2YUludGVyZmFjZVByb2Nlc3NvcihyZWdpc3RyeSkudmlzaXRJbnRlcmZhY2UoaWZhY2UpOwogICAgICAgICBqYXZhSUMuc2V0SW50ZXJmYWNlKGlmYWNlKTsKICAgICAgICAgV1NETEludGVyZmFjZUNvbnRyYWN0IHdzZGxJQyA9IEJpbmRpbmdXU0RMR2VuZXJhdG9yLmNyZWF0ZVdTRExJbnRlcmZhY2VDb250cmFjdChqYXZhSUMsIGZhbHNlLCBuZXcgWFNETW9kZWxSZXNvbHZlcihudWxsLCBudWxsKSwgZGF0YUJpbmRpbmdzLCB3c2RsRmFjdG9yeSwgeHNkRmFjdG9yeSwgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeSwgbnVsbCk7CkBAIC03MSw3ICs3MSw3IEBACiAgCiAgICAgICAgIEphdmFJbnRlcmZhY2VDb250cmFjdCBqYXZhSUMyID0gZmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlQ29udHJhY3QoKTsKICAgICAgICAgSmF2YUludGVyZmFjZSBpZmFjZTIgPSBmYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2UoVGVzdEphdmFJbnRlcmZhY2UuY2xhc3MpOwotICAgICAgICBuZXcgSkFYV1NKYXZhSW50ZXJmYWNlUHJvY2Vzc29yKGRhdGFCaW5kaW5ncywgZmF1bHRFeGNlcHRpb25NYXBwZXIsIG51bGwpLnZpc2l0SW50ZXJmYWNlKGlmYWNlMik7CisgICAgICAgIG5ldyBKQVhXU0phdmFJbnRlcmZhY2VQcm9jZXNzb3IocmVnaXN0cnkpLnZpc2l0SW50ZXJmYWNlKGlmYWNlMik7CiAgICAgICAgIG5ldyBEYXRhQmluZGluZ0phdmFJbnRlcmZhY2VQcm9jZXNzb3IocmVnaXN0cnkpLnZpc2l0SW50ZXJmYWNlKGlmYWNlMik7CiAgICAgICAgIGphdmFJQzIuc2V0SW50ZXJmYWNlKGlmYWNlMik7CiAgICAgICAgIFdTRExJbnRlcmZhY2VDb250cmFjdCB3c2RsSUMyID0gQmluZGluZ1dTRExHZW5lcmF0b3IuY3JlYXRlV1NETEludGVyZmFjZUNvbnRyYWN0KGphdmFJQzIsIGZhbHNlLCBuZXcgWFNETW9kZWxSZXNvbHZlcihudWxsLCBudWxsKSwgZGF0YUJpbmRpbmdzLCB3c2RsRmFjdG9yeSwgeHNkRmFjdG9yeSwgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeSwgbnVsbCk7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctd3Mtd3NkbGdlbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy93c2RsZ2VuL0ludGVyZmFjZTJXU0RMR2VuZXJhdG9yVGVzdENhc2UuamF2YSBiL21vZHVsZXMvYmluZGluZy13cy13c2RsZ2VuL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL3dzZGxnZW4vSW50ZXJmYWNlMldTRExHZW5lcmF0b3JUZXN0Q2FzZS5qYXZhCmluZGV4IDMzZDViZWEuLmM4MGE5MjkgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYmluZGluZy13cy13c2RsZ2VuL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL3dzZGxnZW4vSW50ZXJmYWNlMldTRExHZW5lcmF0b3JUZXN0Q2FzZS5qYXZhCisrKyBiL21vZHVsZXMvYmluZGluZy13cy13c2RsZ2VuL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL3dzZGxnZW4vSW50ZXJmYWNlMldTRExHZW5lcmF0b3JUZXN0Q2FzZS5qYXZhCkBAIC01NSw3ICs1NSw3IEBACiAgICAgICAgIEphdmFJbnRlcmZhY2UgaWZhY2UgPSBpRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKFRlc3RKYXZhSW50ZXJmYWNlLmNsYXNzKTsKICAgICAgICAgRGVmYXVsdERhdGFCaW5kaW5nRXh0ZW5zaW9uUG9pbnQgZGF0YUJpbmRpbmdzID0gbmV3IERlZmF1bHREYXRhQmluZGluZ0V4dGVuc2lvblBvaW50KG5ldyBEZWZhdWx0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSgpKTsKICAgICAgICAgSkFYV1NGYXVsdEV4Y2VwdGlvbk1hcHBlciBmYXVsdEV4Y2VwdGlvbk1hcHBlciA9IG5ldyBKQVhXU0ZhdWx0RXhjZXB0aW9uTWFwcGVyKGRhdGFCaW5kaW5ncywgbnVsbCk7Ci0gICAgICAgIG5ldyBKQVhXU0phdmFJbnRlcmZhY2VQcm9jZXNzb3IoZGF0YUJpbmRpbmdzLCBmYXVsdEV4Y2VwdGlvbk1hcHBlciwgbnVsbCkudmlzaXRJbnRlcmZhY2UoaWZhY2UpOworICAgICAgICBuZXcgSkFYV1NKYXZhSW50ZXJmYWNlUHJvY2Vzc29yKHJlZ2lzdHJ5KS52aXNpdEludGVyZmFjZShpZmFjZSk7CiAgICAgICAgIG5ldyBEYXRhQmluZGluZ0phdmFJbnRlcmZhY2VQcm9jZXNzb3IocmVnaXN0cnkpLnZpc2l0SW50ZXJmYWNlKGlmYWNlKTsKICAgICAgICAgRGVmYXVsdEZhY3RvcnlFeHRlbnNpb25Qb2ludCBtb2RlbEZhY3RvcmllcyA9IG5ldyBEZWZhdWx0RmFjdG9yeUV4dGVuc2lvblBvaW50KHJlZ2lzdHJ5KTsKICAgICAgICAgV1NETEZhY3Rvcnkgd0ZhY3RvcnkgPSBuZXcgRGVmYXVsdFdTRExGYWN0b3J5KHJlZ2lzdHJ5KTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy13cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvYmluZGluZy13cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAyZGYwZjBmLi4wNjcyY2FlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctd3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvbW9kdWxlcy9iaW5kaW5nLXdzL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC03LDcgKzcsOCBAQAogICAgb3JnLnczYy5kb20sDQogICAgamF2YXgud3NkbCwNCiAgICBqYXZheC54bWwubmFtZXNwYWNlIiwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmFkZHJlc3Npbmc7dmVyc2lvbj0iMi4wLjAiO3VzZXM6PSJqYXZheC54bWwubmFtZXNwYWNlIg0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuYWRkcmVzc2luZzt2ZXJzaW9uPSIyLjAuMCI7dXNlczo9ImphdmF4LnhtbC5uYW1lc3BhY2UiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MueG1sDQogUHJpdmF0ZS1QYWNrYWdlOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuaW1wbDt2ZXJzaW9uPSIyLjAuMCINCiBTQ0EtVmVyc2lvbjogMS4xDQogQnVuZGxlLU5hbWU6IEFwYWNoZSBUdXNjYW55IFNDQSBXUyBCaW5kaW5nIE1vZGVsDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXdzL3BvbS54bWwgYi9tb2R1bGVzL2JpbmRpbmctd3MvcG9tLnhtbAppbmRleCBiOTc0N2QyLi4xNjgwNDVkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2JpbmRpbmctd3MvcG9tLnhtbAorKysgYi9tb2R1bGVzL2JpbmRpbmctd3MvcG9tLnhtbApAQCAtNTIsMjggKzUyLDcgQEAKICAgICAgICAgICAgICA8Z3JvdXBJZD53c2RsNGo8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3NkbDRqPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi4yPC92ZXJzaW9uPgotICAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYnVpbGRlcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgCi0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXNjYS1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgCisgICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKIAogICAgIDwvZGVwZW5kZW5jaWVzPgogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctd3Mvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zIGIvbW9kdWxlcy9iaW5kaW5nLXdzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLnhtbC5EZWZpbml0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODE3ZmNhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9iaW5kaW5nLXdzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLnhtbC5EZWZpbml0aW9ucwpAQCAtMCwwICsxLDE3IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMNCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyMgdW5kZXIgdGhlIExpY2Vuc2UuDQorb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2RlZmluaXRpb25zLnhtbA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy13cy1ydW50aW1lLWF4aXMyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvZGVmaW5pdGlvbnMueG1sIGIvbW9kdWxlcy9iaW5kaW5nLXdzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvZGVmaW5pdGlvbnMueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2JpbmRpbmctd3MtcnVudGltZS1heGlzMi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2RlZmluaXRpb25zLnhtbApyZW5hbWUgdG8gbW9kdWxlcy9iaW5kaW5nLXdzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvZGVmaW5pdGlvbnMueG1sCmRpZmYgLS1naXQgYS9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2J1aWxkZXIvaW1wbC9Db21wb25lbnRCdWlsZGVySW1wbC5qYXZhIGIvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvQ29tcG9uZW50QnVpbGRlckltcGwuamF2YQppbmRleCA2OTRlY2UyLi5jOTgwMDFkIDEwMDY0NAotLS0gYS9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2J1aWxkZXIvaW1wbC9Db21wb25lbnRCdWlsZGVySW1wbC5qYXZhCisrKyBiL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL0NvbXBvbmVudEJ1aWxkZXJJbXBsLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJ1aWxkZXIuaW1wbDsKIAoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKIGltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKIGltcG9ydCBqYXZhLm5ldC5VUkk7CkBAIC0xODEsNiArMTgyLDggQEAKICAgICAgICAgICAgIGNvbmZpZ3VyZVJlZmVyZW5jZXMoY29tcG9uZW50LCBjb250ZXh0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTk9URTogY29uZmlndXJlU2VydmljZXMvY29uZmlndXJlUmVmZXJlbmNlcyBtYXkgYWRkIGNhbGxiYWNrIHJlZmVyZW5jZXMgYW5kIHNlcnZpY2VzCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGluaGVyaXQgdGhlIGludGVudHMgYW5kIHBvbGljeSBzZXRzIGZyb20gdGhlIGNvbXBvbmVudCB0eXBlCiAgICAgICAgICAgICBwb2xpY3lCdWlsZGVyLmNvbmZpZ3VyZShjb21wb25lbnQsIGNvbnRleHQpOwogICAgICAgICAgICAgCiAgICAgICAgIH0gZmluYWxseSB7CkBAIC0yNjYsMTAgKzI2OSwxMCBAQAogICAgICAgICAgICAgY2FsY3VsYXRlU2VydmljZUludGVyZmFjZUNvbnRyYWN0KGNvbXBvbmVudCwgY29tcG9uZW50U2VydmljZSwgY29tcG9uZW50VHlwZVNlcnZpY2UsIG1vbml0b3IpOwogCiAgICAgICAgICAgICAvLyBiaW5kaW5ncwotICAgICAgICAgICAgY2FsY3VsYXRlQmluZGluZ3MoY29tcG9uZW50LCBjb21wb25lbnRTZXJ2aWNlLCBjb21wb25lbnRUeXBlU2VydmljZSwgbW9uaXRvcik7CisgICAgICAgICAgICBjYWxjdWxhdGVCaW5kaW5ncyhjb21wb25lbnQsIGNvbXBvbmVudFNlcnZpY2UsIGNvbXBvbmVudFR5cGVTZXJ2aWNlLCBjb250ZXh0KTsKIAogICAgICAgICAgICAgLy8gYWRkIGNhbGxiYWNrIHJlZmVyZW5jZSBtb2RlbCBvYmplY3RzCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1JlZmVyZW5jZShjb21wb25lbnQsIGNvbXBvbmVudFNlcnZpY2UpOworICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tSZWZlcmVuY2UoY29tcG9uZW50LCBjb21wb25lbnRTZXJ2aWNlLCBtb25pdG9yKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzExLDcgKzMxNCw3IEBACiAgICAgICAgICAgICBjYWxjdWxhdGVCaW5kaW5ncyhjb21wb25lbnRSZWZlcmVuY2UsIGNvbXBvbmVudFR5cGVSZWZlcmVuY2UpOwogCiAgICAgICAgICAgICAvLyBhZGQgY2FsbGJhY2sgc2VydmljZSBtb2RlbCBvYmplY3RzCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1NlcnZpY2UoY29tcG9uZW50LCBjb21wb25lbnRSZWZlcmVuY2UpOworICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tTZXJ2aWNlKGNvbXBvbmVudCwgY29tcG9uZW50UmVmZXJlbmNlLCBtb25pdG9yKTsKIAogICAgICAgICAgICAgLy8gUHJvcGFnYXRlIGF1dG93aXJlIHNldHRpbmcgZnJvbSB0aGUgY29tcG9uZW50IGRvd24gdGhlIHN0cnVjdHVyYWwgCiAgICAgICAgICAgICAvLyBoaWVyYXJjaHkKQEAgLTgwNywxMzggKzgxMCwyNTcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbml0b3IgbW9uaXRvcikgewogICAgICAgICBTdHJpbmcgc291cmNlID0gY29tcG9uZW50UHJvcGVydHkuZ2V0U291cmNlKCk7CiAKLSAgICAgICAgaWYgKHNvdXJjZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAvLyAkPG5hbWU+Ly4uLgotICAgICAgICAgICAgaW50IGluZGV4ID0gc291cmNlLmluZGV4T2YoJy8nKTsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSAtMSkgewotICAgICAgICAgICAgICAgIC8vIFRvbGVyYXRpbmcgJHByb3AKLSAgICAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UgKyAiLyI7Ci0gICAgICAgICAgICAgICAgaW5kZXggPSBzb3VyY2UubGVuZ3RoKCkgLSAxOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNvdXJjZS5jaGFyQXQoMCkgPT0gJyQnKSB7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBzb3VyY2Uuc3Vic3RyaW5nKDEsIGluZGV4KTsKLSAgICAgICAgICAgICAgICBQcm9wZXJ0eSBzb3VyY2VQcm9wID0gbnVsbDsKLSAgICAgICAgICAgICAgICBpZiAob3V0ZXJDb21wb25lbnQgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBzb3VyY2VQcm9wID0gb3V0ZXJDb21wb25lbnQuZ2V0UHJvcGVydHkobmFtZSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc291cmNlUHJvcCA9IHBhcmVudENvbXBvc2l0ZS5nZXRQcm9wZXJ0eShuYW1lKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHNvdXJjZVByb3AgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICBNb25pdG9yLmVycm9yKG1vbml0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5BU1NFTUJMWV9WQUxJREFUSU9OLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9wZXJ0eVNvdXJjZU5vdEZvdW5kIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UHJvcGVydHkuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm47CisgICAgICAgIAorICAgICAgICB0cnkgeworICAgICAgICAgICAgU3RyaW5nIHNvdXJjZU5hbWUgPSBleHRyYWN0U291cmNlUHJvcGVydHlOYW1lKCBzb3VyY2UgKTsKIAotICAgICAgICAgICAgICAgIERvY3VtZW50IHNvdXJjZVByb3BWYWx1ZSA9IChEb2N1bWVudClzb3VyY2VQcm9wLmdldFZhbHVlKCk7Ci0KLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogSG93IHRvIGRlYWwgd2l0aCBuYW1lc3BhY2VzPwotICAgICAgICAgICAgICAgICAgICBEb2N1bWVudCBub2RlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlWFBhdGgoc291cmNlUHJvcFZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRQcm9wZXJ0eS5nZXRTb3VyY2VYUGF0aEV4cHJlc3Npb24oKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UHJvcGVydHkuc2V0VmFsdWUobm9kZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBNb25pdG9yLndhcm5pbmcobW9uaXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLkFTU0VNQkxZX1ZBTElEQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3BlcnR5WHBhdGhFeHByZXNzaW9uUmV0dXJuZWROdWxsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFByb3BlcnR5LmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRQcm9wZXJ0eS5nZXRTb3VyY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKLSAgICAgICAgICAgICAgICAgICAgTW9uaXRvci5lcnJvcihtb25pdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuQVNTRU1CTFlfVkFMSURBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvcGVydHlTb3VyY2VYcGF0aEludmFsaWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRQcm9wZXJ0eS5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmdldE5hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleCk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgUHJvcGVydHkgc291cmNlUHJvcCA9IG51bGw7CisgICAgICAgICAgICBpZiAob3V0ZXJDb21wb25lbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNvdXJjZVByb3AgPSBvdXRlckNvbXBvbmVudC5nZXRQcm9wZXJ0eShzb3VyY2VOYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc291cmNlUHJvcCA9IHBhcmVudENvbXBvc2l0ZS5nZXRQcm9wZXJ0eShzb3VyY2VOYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChzb3VyY2VQcm9wID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBNb25pdG9yLmVycm9yKG1vbml0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZXMuQVNTRU1CTFlfVkFMSURBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9wZXJ0eVNvdXJjZVZhbHVlSW52YWxpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvcGVydHlTb3VyY2VOb3RGb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRQcm9wZXJ0eS5nZXROYW1lKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuZ2V0TmFtZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisKKwkgICAgICAgICAgICBEb2N1bWVudCBzb3VyY2VQcm9wVmFsdWUgPSAoRG9jdW1lbnQpc291cmNlUHJvcC5nZXRWYWx1ZSgpOworCQorCSAgICAgICAgICAgIHRyeSB7CisJICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIb3cgdG8gZGVhbCB3aXRoIG5hbWVzcGFjZXM/CisJICAgICAgICAgICAgICAgIERvY3VtZW50IG5vZGUgPQorCSAgICAgICAgICAgICAgICAgICAgZXZhbHVhdGVYUGF0aDIoc291cmNlUHJvcFZhbHVlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRQcm9wZXJ0eS5nZXRTb3VyY2VYUGF0aEV4cHJlc3Npb24oKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRCdWlsZGVyRmFjdG9yeSk7CisJCisJICAgICAgICAgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsKKwkgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFByb3BlcnR5LnNldFZhbHVlKG5vZGUpOworCSAgICAgICAgICAgICAgICB9IGVsc2UgeworCSAgICAgICAgICAgICAgICAgICAgTW9uaXRvci53YXJuaW5nKG1vbml0b3IsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5BU1NFTUJMWV9WQUxJREFUSU9OLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9wZXJ0eVhwYXRoRXhwcmVzc2lvblJldHVybmVkTnVsbCIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmdldE5hbWUoKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRQcm9wZXJ0eS5nZXROYW1lKCksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UHJvcGVydHkuZ2V0U291cmNlKCkpOworCSAgICAgICAgICAgICAgICB9IC8vIGVuZCBpZgorCSAgICAgICAgICAgCisJICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisJICAgICAgICAgICAgICAgIE1vbml0b3IuZXJyb3IobW9uaXRvciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLkFTU0VNQkxZX1ZBTElEQVRJT04sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb3BlcnR5U291cmNlWHBhdGhJbnZhbGlkIiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UHJvcGVydHkuZ2V0TmFtZSgpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5nZXROYW1lKCksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXgpOworCSAgICAgICAgICAgIH0gLy8gZW5kIHRyeQorICAgICAgICAgICAgfSAvLyBlbmQgaWYKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUgKSB7CisgICAgICAgICAgICBNb25pdG9yLmVycm9yKG1vbml0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLkFTU0VNQkxZX1ZBTElEQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9wZXJ0eVNvdXJjZVZhbHVlSW52YWxpZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UHJvcGVydHkuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuZ2V0TmFtZSgpKTsKKyAgICAgICAgfSAvLyBlbmQgdHJ5IAorICAgIH0gLy8gZW5kIG1ldGhvZAorICAgIAorICAgIC8qKgorICAgICAqIEV4dHJhY3RzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgcHJvcGVydHkgZnJvbSB0aGUgdmFsdWUgb2YgYW4gQHNvdXJjZSBhdHRyaWJ1dGUgc3RyaW5nCisgICAgICogQHBhcmFtIHNvdXJjZSAtIHRoZSB2YWx1ZSBvZiB0aGUgQHNvdXJjZSBhdHRyaWJ1dGUKKyAgICAgKiBAcmV0dXJuIC0gdGhlIHNvdXJjZSBwcm9wZXJ0eSBuYW1lIGFzIGEgU3RyaW5nCisgICAgICovCisgICAgcHJpdmF0ZSBTdHJpbmcgZXh0cmFjdFNvdXJjZVByb3BlcnR5TmFtZSggU3RyaW5nIHNvdXJjZSApIHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24geworICAgIAlTdHJpbmcgcHJvcGVydHlOYW1lID0gbnVsbDsKKyAgICAJCisgICAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlIHNvdXJjZSBzdHJpbmc6CisgICAgCS8vIGEpICRuYW1lCisgICAgCS8vIGIpICRuYW1lL2V4cHJlc3Npb24KKyAgICAJLy8gYykgJG5hbWVbeHhdCisgICAgCS8vIGQpICRuYW1lW3h4XS9leHByZXNzaW9uCisgICAgCS8vIC4uLmFuZCBub3RlIHRoYXQgdGhlIGV4cHJlc3Npb24gTUFZIGNvbnRhaW4gJy8nIGFuZCAnWycgY2hhcmFjdGVycworICAgIAlpZiggc291cmNlLmNoYXJBdCgwKSAhPSAnJCcgKSB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTb3VyY2UgdmFsdWUgZG9lcyBub3Qgc3RhcnQgd2l0aCAnJCciKTsJCisgICAgCQorICAgICAgICBpbnQgaW5kZXggPSBzb3VyY2UuaW5kZXhPZignLycpOworICAgICAgICBpbnQgYnJhY2tldCA9IHNvdXJjZS5pbmRleE9mKCdbJyk7CisgICAgICAgIAorICAgICAgICBpZiggaW5kZXggPT0gLTEgJiYgYnJhY2tldCA9PSAtMSApIHsKKyAgICAgICAgCS8vIEZvcm1hdCBhKSAtIHNpbXBseSByZW1vdmUgdGhlICckJworICAgICAgICAJcHJvcGVydHlOYW1lID0gc291cmNlLnN1YnN0cmluZygxKTsKKyAgICAgICAgfSBlbHNlIGlmICggYnJhY2tldCA9PSAtMSApIHsKKyAgICAgICAgCS8vIEZvcm1hdCBiKSAtIHJlbW92ZSB0aGUgJyQnIGFuZCB0aGUgJy8nIGFuZCBldmVyeXRoaW5nIGZvbGxvd2luZyBpdAorICAgICAgICAJcHJvcGVydHlOYW1lID0gc291cmNlLnN1YnN0cmluZygxLCBpbmRleCk7CisgICAgICAgIH0gZWxzZSBpZiAoIGluZGV4ID09IC0xICkgeworICAgICAgICAJLy8gRm9ybWF0IGMpIC0gcmVtb3ZlIHRoZSAnJCcgYW5kIHRoZSAnWycgYW5kIGV2ZXJ5dGhpbmcgZm9sbG93aW5nIGl0CisgICAgICAgIAlwcm9wZXJ0eU5hbWUgPSBzb3VyY2Uuc3Vic3RyaW5nKDEsIGJyYWNrZXQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAJLy8gRm9ybWF0IGQpIC0gYnV0IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlICdbJyBpcyBCRUZPUkUgdGhlICcvJworICAgICAgICAJaWYoIGJyYWNrZXQgPCBpbmRleCApIHsKKyAgICAgICAgCQkvLyBGb3JtYXQgZCkgLSByZW1vdmUgdGhlICckJyBhbmQgdGhlICdbJyBhbmQgZXZlcnl0aGluZyBmb2xsb3dpbmcgaXQKKyAgICAgICAgCQlwcm9wZXJ0eU5hbWUgPSBzb3VyY2Uuc3Vic3RyaW5nKDEsIGJyYWNrZXQpOworICAgICAgICAJfSBlbHNlIHsKKyAgICAgICAgCQkvLyBGb3JtYXQgYikgdmFyaWFudCB3aGVyZSB0aGVyZSBpcyBhICdbJyBpbiB0aGUgZXhwcmVzc2lvbi4uLgorICAgICAgICAJCXByb3BlcnR5TmFtZSA9IHNvdXJjZS5zdWJzdHJpbmcoMSwgaW5kZXgpOworICAgICAgICAJfSAvLyBlbmQgaWYKKyAgICAgICAgfSAvLyBlbmQgaWYKKyAgICAgICAgCisgICAgCXJldHVybiBwcm9wZXJ0eU5hbWU7CisgICAgfSAvLyBlbmQgbWV0aG9kIGV4dHJhY3RTb3VyY2VQcm9wZXJ0eU5hbWUoIHNvdXJjZSwgbW9uaXRvciApCiAKICAgICAvKioKLSAgICAgKiBJZiB0aGUgcHJvcGVydHkgaGFzIGEgZmlsZSBhdHRyaWJ1dGUgdXNlIHRoaXMgdG8gcmV0cmlldmUgdGhlIHZhbHVlIGZyb20gYSAKLSAgICAgKiBsb2NhbCBmaWxlCi0KKyAgICAgKiBJZiB0aGUgcHJvcGVydHkgaGFzIGEgZmlsZSBhdHRyaWJ1dGUgdXNlIHRoaXMgdG8gcmV0cmlldmUgdGhlIHByb3BlcnR5IHZhbHVlIGZyb20gYSBsb2NhbCBmaWxlCisgICAgICogRm9ybWF0IG9mIHRoZSBwcm9wZXJ0eSB2YWx1ZSBmaWxlIGlzIGRlZmluZWQgaW4gdGhlIFNDQSBBc3NlbWJseSBzcGVjaWZpY2F0aW9uIGluIEFTTTUwMDQ2CiAgICAgICogCi0gICAgICogQHBhcmFtIHBhcmVudENvbXBvZW50IHRoZSBjb21wb3NpdGUgdGhhdCBjb250YWlucyB0aGUgY29tcG9uZW50Ci0gICAgICogQHBhcmFtIGNvbXBvbmVudAorICAgICAqIEBwYXJhbSBjb21wb25lbnQgdGhlIGNvbXBvbmVudCBob2xkaW5nIHRoZSBwcm9wZXJ0eQorICAgICAqIEBwYXJhbSBjb21wb25lbnRQcm9wZXJ0eSAtIHRoZSBwcm9wZXJ0eSAKKyAgICAgKiBAcGFyYW0gbW9uaXRvciAtIGEgTW9uaXRvciBvYmplY3QgZm9yIHJlcG9ydGluZyBwcm9ibGVtcworICAgICAqLworICAgIC8qKgorICAgICAqIFByb3BlcnR5IGZpbGUgZm9ybWF0OgorICAgICAqIE1VU1QgY29udGFpbiBhIDxzY2E6dmFsdWVzLz4gZWxlbWVudAorICAgICAqIC0gZWl0aGVyIGNvbnRhaW5zIG9uZSBvciBtb3JlIDxzY2E6dmFsdWUvPiBzdWJlbGVtZW50cyAobWFuZGF0b3J5IGZvciBwcm9wZXJ0eSB3aXRoIGEgc2ltcGxlIFhNTCB0eXBlKQorICAgICAqIC0gb3IgY29udGFpbnMgb25lIG9yIG1vcmUgZ2xvYmFsIGVsZW1lbnRzIG9mIHRoZSB0eXBlIG9mIHRoZSBwcm9wZXJ0eQorICAgICAqIAorICAgICAqIGVnLgorICAgICAqIAk8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorICAgICAqICA8dmFsdWVzPgorICAgICAqICAgICA8dmFsdWU+TXlWYWx1ZTwvdmFsdWU+CisgICAgICogIDwvdmFsdWVzPgorICAgICAqICAKKyAgICAgKiAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKyAgICAgKiAgPHZhbHVlcz4KKyAgICAgKiAgICAgPGZvbzpmb29FbGVtZW50PgorICAgICAqICAgICAgICA8Zm9vOmE+QVZhbHVlPC9mb286YT4KKyAgICAgKiAgICAgICAgPGZvbzpiPkludGVyZXN0aW5nVVJJPC9mb286Yj4KKyAgICAgKiAgICAgPC9mb286Zm9vRWxlbWVudD4KKyAgICAgKiAgPC92YWx1ZXMvPgogICAgICAqLwogICAgIHByaXZhdGUgdm9pZCBwcm9jZXNzUHJvcGVydHlGaWxlQXR0cmlidXRlKENvbXBvbmVudCBjb21wb25lbnQsIENvbXBvbmVudFByb3BlcnR5IGNvbXBvbmVudFByb3BlcnR5LCBNb25pdG9yIG1vbml0b3IpIHsKICAgICAgICAgU3RyaW5nIGZpbGUgPSBjb21wb25lbnRQcm9wZXJ0eS5nZXRGaWxlKCk7Ci0gICAgICAgIGlmIChmaWxlICE9IG51bGwpIHsKKyAgICAgICAgaWYgKGZpbGUgPT0gbnVsbCkgcmV0dXJuOworICAgICAgICB0cnkgeworLyogICAgICAgIAkKKyAgICAgICAgICAgIFVSSSB1cmkgPSBVUkkuY3JlYXRlKGZpbGUpOworICAgICAgICAgICAgLy8gVVJJIHJlc29sdXRpb24gZm9yIHJlbGF0aXZlIFVSSXMgaXMgZG9uZSB3aGVuIHRoZSBjb21wb3NpdGUgaXMgcmVzb2x2ZWQuCisgICAgICAgICAgICBVUkwgdXJsID0gdXJpLnRvVVJMKCk7CisgICAgICAgICAgICBVUkxDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSB1cmwub3BlbkNvbm5lY3Rpb24oKTsKKyAgICAgICAgICAgIGNvbm5lY3Rpb24uc2V0VXNlQ2FjaGVzKGZhbHNlKTsKKyAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsgICAgICAgICAgIAogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBVUkkgdXJpID0gVVJJLmNyZWF0ZShmaWxlKTsKLSAgICAgICAgICAgICAgICAvLyBVUkkgcmVzb2x1dGlvbiBmb3IgcmVsYXRpdmUgVVJJcyBpcyBkb25lIHdoZW4gdGhlIGNvbXBvc2l0ZSBpcyByZXNvbHZlZC4KLSAgICAgICAgICAgICAgICBVUkwgdXJsID0gdXJpLnRvVVJMKCk7Ci0gICAgICAgICAgICAgICAgVVJMQ29ubmVjdGlvbiBjb25uZWN0aW9uID0gdXJsLm9wZW5Db25uZWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgY29ubmVjdGlvbi5zZXRVc2VDYWNoZXMoZmFsc2UpOwotICAgICAgICAgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBpcyA9IGNvbm5lY3Rpb24uZ2V0SW5wdXRTdHJlYW0oKTsKIAotICAgICAgICAgICAgICAgICAgICBTb3VyY2Ugc3RyZWFtU291cmNlID0gbmV3IFNBWFNvdXJjZShuZXcgSW5wdXRTb3VyY2UoaXMpKTsKLSAgICAgICAgICAgICAgICAgICAgRE9NUmVzdWx0IHJlc3VsdCA9IG5ldyBET01SZXN1bHQoKTsKLSAgICAgICAgICAgICAgICAgICAgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyRmFjdG9yeS5uZXdUcmFuc2Zvcm1lcigpOwotICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lci50cmFuc2Zvcm0oc3RyZWFtU291cmNlLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGlzID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpOwogCi0gICAgICAgICAgICAgICAgICAgIERvY3VtZW50IGRvY3VtZW50ID0gKERvY3VtZW50KXJlc3VsdC5nZXROb2RlKCk7CisgICAgICAgICAgICAgICAgU291cmNlIHN0cmVhbVNvdXJjZSA9IG5ldyBTQVhTb3VyY2UobmV3IElucHV0U291cmNlKGlzKSk7CisgICAgICAgICAgICAgICAgRE9NUmVzdWx0IHJlc3VsdCA9IG5ldyBET01SZXN1bHQoKTsKKyAgICAgICAgICAgICAgICBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gdHJhbnNmb3JtZXJGYWN0b3J5Lm5ld1RyYW5zZm9ybWVyKCk7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKHN0cmVhbVNvdXJjZSwgcmVzdWx0KTsKIAotICAgICAgICAgICAgICAgICAgICAvLyBUVVNDQU5ZLTIzNzcsIEFkZCBhIGZha2UgdmFsdWUgZWxlbWVudCBzbyBpdCdzIGNvbnNpc3RlbnQgd2l0aAotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgRE9NIHRyZWUgbG9hZGVkIGZyb20gaW5zaWRlIFNDREwKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoInZhbHVlIikpewotICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudCByb290ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG51bGwsICJ2YWx1ZSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbGwgdGhlIGNoaWxkIG5vZGVzIGFzIHRoZXkgd2lsbCBiZSByZXBsYWNlZCBieSAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSAidmFsdWUiIG5vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGVMaXN0IGNoaWxkcmVuID0gZG9jdW1lbnQuZ2V0Q2hpbGROb2RlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgY2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGkrKyl7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGRyZW4uaXRlbShpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgdmFsdWUgbm9kZSBiYWNrIGluCi0gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKKyAgICAgICAgICAgICAgICBEb2N1bWVudCBkb2N1bWVudCA9IChEb2N1bWVudClyZXN1bHQuZ2V0Tm9kZSgpOworKi8gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSByZWFkUHJvcGVydHlGaWxlRGF0YSggZmlsZSApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEVsZW1lbnQgZG9jRWxlbWVudCA9IGRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpOworICAgICAgICAgICAgICAgIGlmKCBkb2NFbGVtZW50ID09IG51bGwgKSB0aHJvdyBuZXcgRXhjZXB0aW9uKCJQcm9wZXJ0eSBGaWxlIGhhcyBubyBYTUwgZG9jdW1lbnQgZWxlbWVudCIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmKCAhInZhbHVlcyIuZXF1YWxzKCBkb2NFbGVtZW50LmdldExvY2FsTmFtZSgpICkgKSB7CisgICAgICAgICAgICAgICAgCXRocm93IG5ldyBFeGNlcHRpb24oIlByb3BlcnR5IEZpbGUgZG9lcyBub3Qgc3RhcnQgd2l0aCA8dmFsdWVzLz4gZWxlbWVudCIpOworICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHZhbHVlIGlzIHRoZSBzdWJlbGVtZW50KHMpIG9mIHRoZSA8dmFsdWVzLz4gZWxlbWVudAorICAgICAgICAgICAgICAgIE5vZGVMaXN0IHZhbHVlcyA9IGRvY0VsZW1lbnQuZ2V0Q2hpbGROb2RlcygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIERvY3VtZW50IG5ld2RvYyA9IGRvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCkubmV3RG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICBFbGVtZW50IG5ld1Byb3BlcnR5ID0gbmV3ZG9jLmNyZWF0ZUVsZW1lbnROUyhTQ0ExMV9OUywgInByb3BlcnR5Iik7CisgICAgICAgICAgICAgICAgbmV3ZG9jLmFwcGVuZENoaWxkKCBuZXdQcm9wZXJ0eSApOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQ29weSB0aGUgcHJvcGVydHkgdmFsdWVzIHVuZGVyIHRoZSBuZXcgPHByb3BlcnR5Lz4gZWxlbWVudAorICAgICAgICAgICAgICAgIGZvciggaW50IGkgPSAwIDsgaSA8IHZhbHVlcy5nZXRMZW5ndGgoKSA7IGkrKyApIHsKKyAgICAgICAgICAgICAgICAJTm9kZSB2YWx1ZU5vZGUgPSB2YWx1ZXMuaXRlbShpKTsKKyAgICAgICAgICAgICAgICAJLy8gT25seSA8dmFsdWUvPiBlbGVtZW50cyBvciBnbG9iYWwgZWxlbWVudHMgYXJlIHZhbGlkIHZhbHVlcy4uLgorICAgICAgICAgICAgICAgIAlpZiggdmFsdWVOb2RlLmdldE5vZGVUeXBlKCkgPT0gTm9kZS5FTEVNRU5UX05PREUgKSB7CisgICAgICAgICAgICAgICAgCQluZXdQcm9wZXJ0eS5hcHBlbmRDaGlsZChuZXdkb2MuaW1wb3J0Tm9kZSh2YWx1ZXMuaXRlbShpKSwgdHJ1ZSkpOworICAgICAgICAgICAgICAgIAkJY291bnQrKzsKKyAgICAgICAgICAgICAgICAJfSAvLyBlbmQgaWYKKyAgICAgICAgICAgICAgICB9IC8vIGVuZCBmb3IKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiggY291bnQgPT0gMCApIHsKKyAgICAgICAgICAgICAgICAJdGhyb3cgbmV3IEV4Y2VwdGlvbigiUHJvcGVydHkgRmlsZSBoYXMgbm8gcHJvcGVydHkgdmFsdWVzIik7CisgICAgICAgICAgICAgICAgfSAvLyBlbmQgaWYgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29tcG9uZW50UHJvcGVydHkuc2V0VmFsdWUobmV3ZG9jKTsKKyAgICAgICAgICAgICAgICAKKy8qCisgICAgICAgICAgICAgICAgLy8gVFVTQ0FOWS0yMzc3LCBBZGQgYSBmYWtlIHZhbHVlIGVsZW1lbnQgc28gaXQncyBjb25zaXN0ZW50IHdpdGgKKyAgICAgICAgICAgICAgICAvLyB0aGUgRE9NIHRyZWUgbG9hZGVkIGZyb20gaW5zaWRlIFNDREwKKyAgICAgICAgICAgICAgICBpZiAoIWRvY3VtZW50LmdldERvY3VtZW50RWxlbWVudCgpLmdldExvY2FsTmFtZSgpLmVxdWFscygidmFsdWUiKSl7CisgICAgICAgICAgICAgICAgICAgIEVsZW1lbnQgcm9vdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhudWxsLCAidmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgcm9vdC5hcHBlbmRDaGlsZChkb2N1bWVudC5nZXREb2N1bWVudEVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgYWxsIHRoZSBjaGlsZCBub2RlcyBhcyB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlICJ2YWx1ZSIgbm9kZQorICAgICAgICAgICAgICAgICAgICBOb2RlTGlzdCBjaGlsZHJlbiA9IGRvY3VtZW50LmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgY2hpbGRyZW4uZ2V0TGVuZ3RoKCk7IGkrKyl7CisgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVDaGlsZChjaGlsZHJlbi5pdGVtKGkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50UHJvcGVydHkuc2V0VmFsdWUoZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgIH0gZmluYWxseSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpcyAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0gICAgICAgICAgICAgICAgTW9uaXRvci5lcnJvcihtb25pdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLkFTU0VNQkxZX1ZBTElEQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvcGVydHlGaWxlVmFsdWVJbnZhbGlkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRQcm9wZXJ0eS5nZXROYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuZ2V0TmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXgpOworICAgICAgICAgICAgICAgICAgICAvLyBhZGQgdGhlIHZhbHVlIG5vZGUgYmFjayBpbgorICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5hcHBlbmRDaGlsZChyb290KTsKKyAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY29tcG9uZW50UHJvcGVydHkuc2V0VmFsdWUoZG9jdW1lbnQpOyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICAgICBpZiAoaXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpcy5jbG9zZSgpOworICAgICAgICAgICAgICAgIH0gIAorICAgICAgICAgICAgfSAvLyBlbmQgdHJ5CisqLyAgICAgICAgICAgICAgICAKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICBNb25pdG9yLmVycm9yKG1vbml0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2VzLkFTU0VNQkxZX1ZBTElEQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9wZXJ0eUZpbGVWYWx1ZUludmFsaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRQcm9wZXJ0eS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4KTsKKyAgICAgICAgfSAvLyBlbmQgdHJ5CisgICAgfSAvLyBlbmQgbWV0aG9kIHByb2Nlc3NQcm9wZXJ0eUZpbGVBdHRyaWJ1dGUKKyAgICAKKyAgICBwcml2YXRlIERvY3VtZW50IHJlYWRQcm9wZXJ0eUZpbGVEYXRhKCBTdHJpbmcgZmlsZSApIHRocm93cyBFeGNlcHRpb24geworICAgIAlEb2N1bWVudCBkb2MgPSBudWxsOworICAgIAkKKyAgICAJVVJJIHVyaSA9IFVSSS5jcmVhdGUoZmlsZSk7CisgICAgICAgIC8vIFVSSSByZXNvbHV0aW9uIGZvciByZWxhdGl2ZSBVUklzIGlzIGRvbmUgd2hlbiB0aGUgY29tcG9zaXRlIGlzIHJlc29sdmVkLgorICAgICAgICBVUkwgdXJsID0gdXJpLnRvVVJMKCk7CisgICAgICAgIFVSTENvbm5lY3Rpb24gY29ubmVjdGlvbiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOworICAgICAgICBjb25uZWN0aW9uLnNldFVzZUNhY2hlcyhmYWxzZSk7CisgICAgICAgIElucHV0U3RyZWFtIGlzID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKwkgICAgICAgIGlzID0gY29ubmVjdGlvbi5nZXRJbnB1dFN0cmVhbSgpOworCQorCSAgICAgICAgU291cmNlIHN0cmVhbVNvdXJjZSA9IG5ldyBTQVhTb3VyY2UobmV3IElucHV0U291cmNlKGlzKSk7CisJICAgICAgICBET01SZXN1bHQgcmVzdWx0ID0gbmV3IERPTVJlc3VsdCgpOworCSAgICAgICAgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lciB0cmFuc2Zvcm1lciA9IHRyYW5zZm9ybWVyRmFjdG9yeS5uZXdUcmFuc2Zvcm1lcigpOworCSAgICAgICAgdHJhbnNmb3JtZXIudHJhbnNmb3JtKHN0cmVhbVNvdXJjZSwgcmVzdWx0KTsKKwkgICAgICAgIAorCSAgICAgICAgZG9jID0gKERvY3VtZW50KXJlc3VsdC5nZXROb2RlKCk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBpZiAoaXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlzLmNsb3NlKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfSAvLyBlbmQgdHJ5CiAKLSAgICB9CisgICAgICAgIHJldHVybiBkb2M7CisgICAgfSAvLyBlbmQgbWV0aG9kIHJlYWRQcm9wZXJ0eUZpbGVEYXRhCiAKICAgICAvKioKICAgICAgKiBFdmFsdWF0ZSBhbiBYUGF0aCBleHByZXNzaW9uIGFnYWluc3QgYSBQcm9wZXJ0eSB2YWx1ZSwgcmV0dXJuaW5nIHRoZSByZXN1bHQgYXMgYSBQcm9wZXJ0eSB2YWx1ZQpAQCAtOTg0LDYgKzExMDYsNTEgQEAKICAgICAgICAgICAgIHJldHVybiBkb2N1bWVudDsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBFdmFsdWF0ZSBhbiBYUGF0aCBleHByZXNzaW9uIGFnYWluc3QgYSBQcm9wZXJ0eSB2YWx1ZSwgcmV0dXJuaW5nIHRoZSByZXN1bHQgYXMgYSBQcm9wZXJ0eSB2YWx1ZQorICAgICAqIC0gZGVhbHMgd2l0aCBtdWx0aS12YWx1ZWQgaW5wdXQgcHJvcGVydHkgdmFsdWVzIGFuZCB3aXRoIG11bHRpLXZhbHVlZCBvdXRwdXQgcHJvcGVydHkgdmFsdWVzCisgICAgICogQHBhcmFtIG5vZGUgLSB0aGUgZG9jdW1lbnQgcm9vdCBlbGVtZW50IG9mIGEgUHJvcGVydHkgdmFsdWUKKyAgICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIHRoZSBYUGF0aCBleHByZXNzaW9uCisgICAgICogQHBhcmFtIGRvY3VtZW50QnVpbGRlckZhY3RvcnkgLSBhIERPTSBkb2N1bWVudCBidWlsZGVyIGZhY3RvcnkKKyAgICAgKiBAcmV0dXJuIC0gYSBET00gRG9jdW1lbnQgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24gYXMgYSBQcm9wZXJ0eSB2YWx1ZQorICAgICAqIEB0aHJvd3MgWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uCisgICAgICogQHRocm93cyBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uCisgICAgICovCisgICAgcHJpdmF0ZSBEb2N1bWVudCBldmFsdWF0ZVhQYXRoMihEb2N1bWVudCBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYUGF0aEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5KSB0aHJvd3MgWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uLAorICAgICAgICBQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKKworICAgICAgICAvLyBUaGUgZG9jdW1lbnQgZWxlbWVudCBpcyBhIDxzY2E6cHJvcGVydHkvPiBlbGVtZW50CisgICAgICAgIEVsZW1lbnQgcHJvcGVydHkgPSBub2RlLmdldERvY3VtZW50RWxlbWVudCgpOworCisgICAgICAgIE5vZGVMaXN0IHJlc3VsdCA9IChOb2RlTGlzdClleHByZXNzaW9uLmV2YWx1YXRlKHByb3BlcnR5LCBYUGF0aENvbnN0YW50cy5OT0RFU0VUKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IHJlc3VsdC5nZXRMZW5ndGgoKSA9PSAwKSByZXR1cm4gbnVsbDsKKworICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgRG9jdW1lbnQpIHsKKyAgICAgICAgICAgIHJldHVybiAoRG9jdW1lbnQpcmVzdWx0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBkb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0RvY3VtZW50QnVpbGRlcigpLm5ld0RvY3VtZW50KCk7CisgICAgICAgICAgICBFbGVtZW50IG5ld1Byb3BlcnR5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNDQTExX05TLCAicHJvcGVydHkiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDAgOyBpIDwgcmVzdWx0LmdldExlbmd0aCgpIDsgaSsrICkgeworCQkgICAgICAgIGlmIChyZXN1bHQuaXRlbShpKS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CisJCSAgICAgICAgICAgIC8vIElmIHRoZSByZXN1bHQgaXMgYW4gZWxlbWVudCwgdXNlIGl0IGRpcmVjdGx5IGluIHRoZSByZXN1bHQKKwkJICAgICAgICAgICAgbmV3UHJvcGVydHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuaW1wb3J0Tm9kZShyZXN1bHQuaXRlbShpKSwgdHJ1ZSkpOworCQkgICAgICAgIH0gZWxzZSB7CisJCSAgICAgICAgICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IGFuIGVsZW1lbnQsIGNyZWF0ZSBhIDx2YWx1ZS8+IGVsZW1lbnQgdG8gY29udGFpbiB0aGUgcmVzdWx0CisJCSAgICAgICAgICAgIEVsZW1lbnQgbmV3VmFsdWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoU0NBMTFfTlMsICJ2YWx1ZSIpOworCQkgICAgICAgICAgICBuZXdWYWx1ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5pbXBvcnROb2RlKHJlc3VsdC5pdGVtKGkpLCB0cnVlKSk7CisJCSAgICAgICAgICAgIG5ld1Byb3BlcnR5LmFwcGVuZENoaWxkKG5ld1ZhbHVlKTsKKwkJICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICAgICAgfSAvLyBlbmQgZm9yCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRvY3VtZW50LmFwcGVuZENoaWxkKG5ld1Byb3BlcnR5KTsKKworICAgICAgICAgICAgcmV0dXJuIGRvY3VtZW50OworICAgICAgICB9IC8vIGVuZCBpZgorICAgIH0gLy8gZW5kIG1ldGhvZAogCiAgICAgLyoqCiAgICAgICogQ3JlYXRlIGEgY2FsbGJhY2sgcmVmZXJlbmNlIGZvciBhIGNvbXBvbmVudCBzZXJ2aWNlCkBAIC05OTEsMTIgKzExNTgsMTIgQEAKICAgICAgKiBAcGFyYW0gY29tcG9uZW50CiAgICAgICogQHBhcmFtIHNlcnZpY2UKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlQ2FsbGJhY2tSZWZlcmVuY2UoQ29tcG9uZW50IGNvbXBvbmVudCwgQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlKSB7CisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZUNhbGxiYWNrUmVmZXJlbmNlKENvbXBvbmVudCBjb21wb25lbnQsIENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSwgTW9uaXRvciBtb25pdG9yKSB7CiAKICAgICAgICAgLy8gaWYgdGhlIHNlcnZpY2UgaGFzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIGNyZWF0ZSBhIHJlZmVyZW5jZQogICAgICAgICAvLyB0byByZXByZXNlbnQgdGhlIGNhbGxiYWNrIAogICAgICAgICBpZiAoc2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpICE9IG51bGwgJiYgLy8gY2FuIGJlIG51bGwgaW4gdW5pdCB0ZXN0cwotICAgICAgICBzZXJ2aWNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuZ2V0Q2FsbGJhY2tJbnRlcmZhY2UoKSAhPSBudWxsKSB7CisgICAgICAgICAgICBzZXJ2aWNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuZ2V0Q2FsbGJhY2tJbnRlcmZhY2UoKSAhPSBudWxsKSB7CiAKICAgICAgICAgICAgIENvbXBvbmVudFJlZmVyZW5jZSBjYWxsYmFja1JlZmVyZW5jZSA9IGFzc2VtYmx5RmFjdG9yeS5jcmVhdGVDb21wb25lbnRSZWZlcmVuY2UoKTsKICAgICAgICAgICAgIGNhbGxiYWNrUmVmZXJlbmNlLnNldEZvckNhbGxiYWNrKHRydWUpOwpAQCAtMTAzMiw3ICsxMTk5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgIGlmICgoKENvbXBvc2l0ZVNlcnZpY2UpaW1wbFNlcnZpY2UpLmdldFByb21vdGVkU2VydmljZSgpLmlzVW5yZXNvbHZlZCgpID09IGZhbHNlKXsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWZlcmVuY2VOYW1lID0gKChDb21wb3NpdGVTZXJ2aWNlKWltcGxTZXJ2aWNlKS5nZXRQcm9tb3RlZFNlcnZpY2UoKS5nZXROYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb25lbnRSZWZlcmVuY2UgcHJvbW90ZWRSZWZlcmVuY2UgPSAoKENvbXBvc2l0ZVNlcnZpY2UpaW1wbFNlcnZpY2UpLmdldFByb21vdGVkQ29tcG9uZW50KCkuZ2V0UmVmZXJlbmNlKHJlZmVyZW5jZU5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgaW1wbENvbXBSZWZlcmVuY2UuZ2V0UHJvbW90ZWRSZWZlcmVuY2VzKCkuYWRkKHByb21vdGVkUmVmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb21vdGVkUmVmZXJlbmNlICE9IG51bGwpeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxDb21wUmVmZXJlbmNlLmdldFByb21vdGVkUmVmZXJlbmNlcygpLmFkZChwcm9tb3RlZFJlZmVyZW5jZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbml0b3IuZXJyb3IobW9uaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5BU1NFTUJMWV9WQUxJREFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb21vdGVkQ2FsbGJhY2tSZWZlcmVuY2VOb3RGb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENvbXBvc2l0ZVNlcnZpY2UpaW1wbFNlcnZpY2UpLmdldFByb21vdGVkQ29tcG9uZW50KCkuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpbXBsUmVmZXJlbmNlID0gaW1wbENvbXBSZWZlcmVuY2U7CiAgICAgICAgICAgICAgICAgICAgIApAQCAtMTA5OCw3ICsxMjc3LDcgQEAKICAgICAgKiBAcGFyYW0gY29tcG9uZW50CiAgICAgICogQHBhcmFtIHNlcnZpY2UKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgY3JlYXRlQ2FsbGJhY2tTZXJ2aWNlKENvbXBvbmVudCBjb21wb25lbnQsIENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKKyAgICBwcml2YXRlIHZvaWQgY3JlYXRlQ2FsbGJhY2tTZXJ2aWNlKENvbXBvbmVudCBjb21wb25lbnQsIENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UsIE1vbml0b3IgbW9uaXRvcikgewogICAgICAgICBpZiAocmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkgIT0gbnVsbCAmJiAvLyBjYW4gYmUgbnVsbCBpbiB1bml0IHRlc3RzCiAgICAgICAgICAgICByZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKS5nZXRDYWxsYmFja0ludGVyZmFjZSgpICE9IG51bGwpIHsKICAgICAgICAgICAgIENvbXBvbmVudFNlcnZpY2UgY2FsbGJhY2tTZXJ2aWNlID0gYXNzZW1ibHlGYWN0b3J5LmNyZWF0ZUNvbXBvbmVudFNlcnZpY2UoKTsKQEAgLTExMzQsNyArMTMxMywxOSBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoKChDb21wb3NpdGVSZWZlcmVuY2UpaW1wbFJlZmVyZW5jZSkuZ2V0UHJvbW90ZWRSZWZlcmVuY2VzKCkuZ2V0KDApLmlzVW5yZXNvbHZlZCgpID09IGZhbHNlKXsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9ICgoQ29tcG9zaXRlUmVmZXJlbmNlKWltcGxSZWZlcmVuY2UpLmdldFByb21vdGVkUmVmZXJlbmNlcygpLmdldCgwKS5nZXROYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb25lbnRTZXJ2aWNlIHByb21vdGVkU2VydmljZSA9ICgoQ29tcG9zaXRlUmVmZXJlbmNlKWltcGxSZWZlcmVuY2UpLmdldFByb21vdGVkQ29tcG9uZW50cygpLmdldCgwKS5nZXRTZXJ2aWNlKHNlcnZpY2VOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGltcGxDb21wU2VydmljZS5zZXRQcm9tb3RlZFNlcnZpY2UocHJvbW90ZWRTZXJ2aWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb21vdGVkU2VydmljZSAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsQ29tcFNlcnZpY2Uuc2V0UHJvbW90ZWRTZXJ2aWNlKHByb21vdGVkU2VydmljZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbml0b3IuZXJyb3IobW9uaXRvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlcy5BU1NFTUJMWV9WQUxJREFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb21vdGVkQ2FsbGJhY2tTZXJ2aWNlTm90Rm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LmdldE5hbWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKENvbXBvc2l0ZVJlZmVyZW5jZSlpbXBsUmVmZXJlbmNlKS5nZXRQcm9tb3RlZENvbXBvbmVudHMoKS5nZXQoMCkuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZU5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpbXBsU2VydmljZSA9IGltcGxDb21wU2VydmljZTsKQEAgLTEzMjAsNyArMTUxMSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFRPRE8gLSB0aGVyZSBpcyBhbiBpc3N1ZSB3aXRoIHRoZSBmb2xsb3dpbmcgY29kZSBpZiB0aGUgCi0gICAgICAgICAgICAvLyAgICAgICAgY29udHJhY3RzIG9mIG9mIGRpZmZlcmVudCB0eXBlcy4gTmVlZCB0byB1c2UgdGhlIAorICAgICAgICAgICAgLy8gICAgICAgIGNvbnRyYWN0cyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLiBOZWVkIHRvIHVzZSB0aGUgCiAgICAgICAgICAgICAvLyAgICAgICAgbm9ybWFsaXplZCBmb3JtCiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIGZpeCB1cCB0aGUgZm9yd2FyZCBpbnRlcmZhY2UgYmFzZWQgb24gdGhlIHByb21vdGVkIGNvbXBvbmVudApAQCAtMTQwNCwxNCArMTU5NSwxNiBAQAogICAgICAqIEBwYXJhbSBjb21wb25lbnRTZXJ2aWNlIHRoZSB0b3Agc2VydmljZSAKICAgICAgKiBAcGFyYW0gY29tcG9uZW50VHlwZVNlcnZpY2UgdGhlIGJvdHRvbSBzZXJ2aWNlCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGNhbGN1bGF0ZUJpbmRpbmdzKENvbXBvbmVudCBjb21wb25lbnQsIFNlcnZpY2UgY29tcG9uZW50U2VydmljZSwgU2VydmljZSBjb21wb25lbnRUeXBlU2VydmljZSwgTW9uaXRvciBtb25pdG9yKSB7CisgICAgcHJpdmF0ZSB2b2lkIGNhbGN1bGF0ZUJpbmRpbmdzKENvbXBvbmVudCBjb21wb25lbnQsIFNlcnZpY2UgY29tcG9uZW50U2VydmljZSwgU2VydmljZSBjb21wb25lbnRUeXBlU2VydmljZSwgQnVpbGRlckNvbnRleHQgY29udGV4dCkgeworICAgIAlNb25pdG9yIG1vbml0b3IgPSBjb250ZXh0LmdldE1vbml0b3IoKTsKKyAgICAJCiAgICAgICAgIC8vIGZvcndhcmQgYmluZGluZ3MKICAgICAgICAgaWYgKGNvbXBvbmVudFNlcnZpY2UuZ2V0QmluZGluZ3MoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNvbXBvbmVudFNlcnZpY2UuZ2V0QmluZGluZ3MoKS5hZGRBbGwoY29tcG9uZW50VHlwZVNlcnZpY2UuZ2V0QmluZGluZ3MoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoY29tcG9uZW50U2VydmljZS5nZXRCaW5kaW5ncygpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgY3JlYXRlU0NBQmluZGluZyhjb21wb25lbnRTZXJ2aWNlLCBudWxsKTsKKyAgICAgICAgICAgIGNyZWF0ZVNDQUJpbmRpbmcoY29tcG9uZW50U2VydmljZSwgY29udGV4dC5nZXREZWZpbml0aW9ucygpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIGNhbGxiYWNrIGJpbmRpbmdzCkBAIC0xNDY1LDcgKzE2NTgsNyBAQAogICAgIH0gIAogICAgIAogICAgIC8qKgotICAgICAqIEEgbG9jYWwgd3JhcHBlciBmb3IgdGhlIGludGVyYWNlIGNvbnRyYWN0IG1hcHBlciBhcyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSB0aGUgCisgICAgICogQSBsb2NhbCB3cmFwcGVyIGZvciB0aGUgaW50ZXJmYWNlIGNvbnRyYWN0IG1hcHBlciBhcyB3ZSBuZWVkIHRvIG5vcm1hbGl6ZSB0aGUgCiAgICAgICogaW50ZXJmYWNlIGNvbnRyYWN0cyBpZiBhcHByb3ByaWF0ZSBhbmQgdGhlIG1hcHBlciBkb2Vzbid0IGhhdmUgdGhlIHJpZ2h0CiAgICAgICogZGVwZW5kZW5jaWVzIHRvIGJlIGFibGUgdG8gZG8gaXQuIAogICAgICAqIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvQ29tcG9uZW50UG9saWN5QnVpbGRlckltcGwuamF2YSBiL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL0NvbXBvbmVudFBvbGljeUJ1aWxkZXJJbXBsLmphdmEKaW5kZXggZTkwODEyMi4uNmNlMGEzYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvQ29tcG9uZW50UG9saWN5QnVpbGRlckltcGwuamF2YQorKysgYi9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2J1aWxkZXIvaW1wbC9Db21wb25lbnRQb2xpY3lCdWlsZGVySW1wbC5qYXZhCkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGludGVudHMgYXJlIG1lcmdlZCBhbmQgdGhlIGV4Y2x1c2lvbiBjaGVjayB3aWxsIGJlIGRvbmUgYWZ0ZXIKICAgICAgICAgICAgICAgICAgICAgZm9yIChJbnRlbnQgaW50ZW50IDogc3ViamVjdC5nZXRSZXF1aXJlZEludGVudHMoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwb2xpY3lTdWJqZWN0LmdldFJlcXVpcmVkSW50ZW50cygpLmNvbnRhaW5zKGludGVudCkpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnRUeXBlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGludGVudC5nZXRUeXBlKCkgIT0gbnVsbCkgJiYgKGludGVudFR5cGUgIT0gbnVsbCkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlbnQuZ2V0VHlwZSgpLmVxdWFscyhpbnRlbnRUeXBlKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lTdWJqZWN0LmdldFJlcXVpcmVkSW50ZW50cygpLmFkZChpbnRlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0zOTIsNyArMzkyLDcgQEAKICAgICAgICAgICAgICAgICBzdWJqZWN0LmdldFJlcXVpcmVkSW50ZW50cygpLnJlbW92ZShpKTsKICAgICAgICAgICAgICAgICBzdWJqZWN0LmdldFJlcXVpcmVkSW50ZW50cygpLmFkZChpLmdldERlZmF1bHRRdWFsaWZpZWRJbnRlbnQoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgfSAgICAgICAKICAgICB9CiAgICAgcHJvdGVjdGVkIHZvaWQgcmVzb2x2ZUFuZE5vcm1hbGl6ZShQb2xpY3lTdWJqZWN0IHN1YmplY3QsIEJ1aWxkZXJDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgRGVmaW5pdGlvbnMgZGVmaW5pdGlvbnMgPSBjb250ZXh0LmdldERlZmluaXRpb25zKCk7CkBAIC00NjksOSArNDY5LDEzIEBACiAgICAgICAgIGlmKGV4dGVuc2lvblR5cGUgIT0gbnVsbCl7CiAgICAgICAgICAgICBMaXN0PEludGVudD4gY29weSA9IG5ldyBBcnJheUxpc3Q8SW50ZW50PihpbnRlbnRzKTsKICAgICAgICAgICAgIGZvciAoSW50ZW50IGkgOiBjb3B5KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkuZ2V0Q29uc3RyYWluZWRUeXBlcygpLnNpemUoKSA+IDApeworICAgICAgICAgICAgCUxpc3Q8RXh0ZW5zaW9uVHlwZT4gY29uc3RyYWluZWRUeXBlcyA9IGkuZ2V0Q29uc3RyYWluZWRUeXBlcygpOworICAgICAgICAgICAgCWlmICgoIGNvbnN0cmFpbmVkVHlwZXMuc2l6ZSgpID09IDAgKSAmJiAoIGkuZ2V0UXVhbGlmaWFibGVJbnRlbnQoKSAhPSBudWxsICkgKSAgCisgICAgICAgICAgICAJCWNvbnN0cmFpbmVkVHlwZXMgPSBpLmdldFF1YWxpZmlhYmxlSW50ZW50KCkuZ2V0Q29uc3RyYWluZWRUeXBlcygpOworICAgICAgICAgICAgCQorICAgICAgICAgICAgICAgIGlmIChjb25zdHJhaW5lZFR5cGVzLnNpemUoKSA+IDApewogICAgICAgICAgICAgICAgICAgICBib29sZWFuIGNvbnN0cmFpbnRGb3VuZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBmb3IgKEV4dGVuc2lvblR5cGUgY29uc3RyYWluZWRUeXBlIDogaS5nZXRDb25zdHJhaW5lZFR5cGVzKCkpeworICAgICAgICAgICAgICAgICAgICBmb3IgKEV4dGVuc2lvblR5cGUgY29uc3RyYWluZWRUeXBlIDogY29uc3RyYWluZWRUeXBlcyl7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RyYWluZWRUeXBlLmdldFR5cGUoKS5lcXVhbHMoZXh0ZW5zaW9uVHlwZS5nZXRUeXBlKCkpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWluZWRUeXBlLmdldFR5cGUoKS5lcXVhbHMoZXh0ZW5zaW9uVHlwZS5nZXRCYXNlVHlwZSgpKSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludEZvdW5kID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL0NvbXBvc2l0ZUNvbXBvbmVudFR5cGVCdWlsZGVySW1wbC5qYXZhIGIvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvQ29tcG9zaXRlQ29tcG9uZW50VHlwZUJ1aWxkZXJJbXBsLmphdmEKaW5kZXggMWRlZWMxYi4uZjg3ODU0YyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvQ29tcG9zaXRlQ29tcG9uZW50VHlwZUJ1aWxkZXJJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvQ29tcG9zaXRlQ29tcG9uZW50VHlwZUJ1aWxkZXJJbXBsLmphdmEKQEAgLTY1Nyw3ICs2NTcsNyBAQAogICAgIH0KICAgICAKICAgICAvKioKLSAgICAgKiBBIGxvY2FsIHdyYXBwZXIgZm9yIHRoZSBpbnRlcmFjZSBjb250cmFjdCBtYXBwZXIgYXMgd2UgbmVlZCB0byBub3JtYWxpemUgdGhlIAorICAgICAqIEEgbG9jYWwgd3JhcHBlciBmb3IgdGhlIGludGVyZmFjZSBjb250cmFjdCBtYXBwZXIgYXMgd2UgbmVlZCB0byBub3JtYWxpemUgdGhlIAogICAgICAqIGludGVyZmFjZSBjb250cmFjdHMgaWYgYXBwcm9wcmlhdGUgYW5kIHRoZSBtYXBwZXIgZG9lc24ndCBoYXZlIHRoZSByaWdodAogICAgICAqIGRlcGVuZGVuY2llcyB0byBiZSBhYmxlIHRvIGRvIGl0LiAKICAgICAgKiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL0NvbXBvc2l0ZVBvbGljeUJ1aWxkZXJJbXBsLmphdmEgYi9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2J1aWxkZXIvaW1wbC9Db21wb3NpdGVQb2xpY3lCdWlsZGVySW1wbC5qYXZhCmluZGV4IGU2NDQ0NzIuLjljNGRhNTEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL0NvbXBvc2l0ZVBvbGljeUJ1aWxkZXJJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvQ29tcG9zaXRlUG9saWN5QnVpbGRlckltcGwuamF2YQpAQCAtMzcsNyArMzcsOSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuYnVpbGRlci5Db21wb3NpdGVCdWlsZGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuYnVpbGRlci5Db21wb3NpdGVCdWlsZGVyRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuYnVpbGRlci5Qb2xpY3lCdWlsZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkueG1sLkNvbnN0YW50czsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLk1vbml0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuSW50ZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeVNldDsKQEAgLTEwMywxOCArMTA1LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChFbmRwb2ludCBlcCA6IGNvbXBvbmVudFNlcnZpY2UuZ2V0RW5kcG9pbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudFNlcnZpY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmhlcml0IGZyb20gdGhlIGNvbXBvbmVudC5zZXJ2aWNlLmludGVyZmFjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdChlcCwgSW50ZW50LlR5cGUuaW50ZXJhY3Rpb24sIHRydWUsIGNvbXBvbmVudFNlcnZpY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKS5nZXRJbnRlcmZhY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdCBmcm9tIGJpbmRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdChlcCwgSW50ZW50LlR5cGUuaW50ZXJhY3Rpb24sIHRydWUsIGVwLmdldEJpbmRpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXQoZXAsIG51bGwsIHRydWUsIGVwLmdldEJpbmRpbmcoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmhlcml0IGZyb20gY29tcG9zaXRlL2NvbXBvbmVudC9zZXJ2aWNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXQoZXAsIEludGVudC5UeXBlLmludGVyYWN0aW9uLCB0cnVlLCBlcC5nZXRTZXJ2aWNlKCksIGVwLmdldENvbXBvbmVudCgpLCBjb21wb3NpdGUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdChlcCwgbnVsbCwgdHJ1ZSwgZXAuZ2V0U2VydmljZSgpLCBlcC5nZXRDb21wb25lbnQoKSwgY29tcG9zaXRlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRTZXJ2aWNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdCBmcm9tIHRoZSBjb21wb25lbnQuc2VydmljZS5pbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCS8vIERvIG5vdCBjaGVjayBtdXR1YWwgZXhjbHVzaW9uIGhlcmUuLiBpbnRlcmZhY2VzIGRvIG5vdCBmb2xsb3cgbm9ybWFsIHJ1bGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkvLyBvZiB0aGUgc3RydWN0dXJhbCBoaWVyYXJjaHkgKFBvbGljeSBzcGVjIDQuMTApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0KGVwLCBudWxsLCBmYWxzZSwgY29tcG9uZW50U2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpLmdldEludGVyZmFjZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgcHJvZmlsZSBpbnRlbnRzIHdpdGggdGhlaXIgcmVxdWlyZWQgaW50ZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHVucXVhbGlmaWVkIGludGVudHMgaWYgdGhlcmUgaXMgYSBxdWFsaWZpZWQgaW50ZW50IGluIHRoZSBsaXN0CkBAIC0xNTcsMTkgKzE2MSwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRW5kcG9pbnRSZWZlcmVuY2UgZXByIDogY29tcG9uZW50UmVmZXJlbmNlLmdldEVuZHBvaW50UmVmZXJlbmNlcygpKSB7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdCBmcm9tIHRoZSBjb21wb25lbnQucmVmZXJlbmNlLmludGVyZmFjZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50UmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdChlcHIsIEludGVudC5UeXBlLmludGVyYWN0aW9uLCB0cnVlLCBjb21wb25lbnRSZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKS5nZXRJbnRlcmZhY2UoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluaGVyaXQgZnJvbSBiaW5kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXQoZXByLCBJbnRlbnQuVHlwZS5pbnRlcmFjdGlvbiwgdHJ1ZSwgZXByLmdldEJpbmRpbmcoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXQoZXByLCBudWxsLCB0cnVlLCBlcHIuZ2V0QmluZGluZygpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbmhlcml0IGZyb20gY29tcG9zaXRlL2NvbXBvbmVudC9yZWZlcmVuY2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdChlcHIsIEludGVudC5UeXBlLmludGVyYWN0aW9uLCB0cnVlLCAgZXByLmdldFJlZmVyZW5jZSgpLCBlcHIuZ2V0Q29tcG9uZW50KCksICBjb21wb3NpdGUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmhlcml0KGVwciwgbnVsbCwgdHJ1ZSwgIGVwci5nZXRSZWZlcmVuY2UoKSwgZXByLmdldENvbXBvbmVudCgpLCAgY29tcG9zaXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5oZXJpdCBmcm9tIHRoZSBjb21wb25lbnQucmVmZXJlbmNlLmludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50UmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJLy8gRG8gbm90IGNoZWNrIG11dHVhbCBleGNsdXNpb24gaGVyZS4uIGludGVyZmFjZXMgZG8gbm90IGZvbGxvdyBub3JtYWwgcnVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCS8vIG9mIHRoZSBzdHJ1Y3R1cmFsIGhpZXJhcmNoeSAoUG9saWN5IHNwZWMgNC4xMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaGVyaXQoZXByLCBudWxsLCB0cnVlLCBjb21wb25lbnRSZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKS5nZXRJbnRlcmZhY2UoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gIAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgcHJvZmlsZSBpbnRlbnRzIHdpdGggdGhlaXIgcmVxdWlyZWQgaW50ZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHVucXVhbGlmaWVkIGludGVudHMgaWYgdGhlcmUgaXMgYSBxdWFsaWZpZWQgaW50ZW50IGluIHRoZSBsaXN0CkBAIC0xOTUsMTQgKzE5OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiAoaW1wbGVtZW50YXRpb24gaW5zdGFuY2VvZiBDb21wb3NpdGUpIHsKLSAgICAgICAgICAgICAgICAgICAgCQotICAgICAgICAgICAgICAgICAgICAJLy8gUE9MLTQwMDkgY29tcG9uZW50VHlwZSBhdHRhY2hlZCBwb2xpY3lTZXRzIGFyZSBpZ25vcmVkIHdoZW4gcG9saWN5U2V0cyBhcmUgCi0gICAgICAgICAgICAgICAgICAgIAkvLyBhdHRhY2hlZCB0byB0aGUgdXNpbmcgY29tcG9uZW50IGRlZmluaXRpb24uCi0gICAgICAgICAgICAgICAgICAgIAlpZiAoICFjb21wb25lbnQuZ2V0UG9saWN5U2V0cygpLmlzRW1wdHkoKSB8fCAhY29tcG9zaXRlLmdldFBvbGljeVNldHMoKS5pc0VtcHR5KCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIAkJaW1wbGVtZW50YXRpb24uZ2V0UG9saWN5U2V0cygpLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIAl9Ci0gICAgICAgICAgICAgICAgICAgIAkJCisgICAgICAgICAgICAgICAgICAgIGlmIChpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZW9mIENvbXBvc2l0ZSkgeyAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgICAgICAgIAkJCisgICAgICAgICAgICAgICAgICAgIAlyZXNvbHZlQW5kQ2hlY2soaW1wbGVtZW50YXRpb24sIGNvbnRleHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5oZXJpdChpbXBsZW1lbnRhdGlvbiwgSW50ZW50LlR5cGUuaW1wbGVtZW50YXRpb24sIHRydWUsIGNvbXBvbmVudCwgY29tcG9zaXRlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVQb2xpY2llcygoQ29tcG9zaXRlKWltcGxlbWVudGF0aW9uLCBjb250ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZERlZmF1bHRJbnRlbnRzKGltcGxlbWVudGF0aW9uLGNvbnRleHQpOwpAQCAtMjI4LDEyICsyMjYsMTMzIEBACiAgICAgICAgICAgICAgICAgICAgIG1vbml0b3IucG9wQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJlbW92ZUNvbnN0cmFpbmVkSW50ZW50cyhjb21wb3NpdGUsIGNvbnRleHQpOwogICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgbW9uaXRvci5wb3BDb250ZXh0KCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSB2b2lkIGNoZWNrRm9yTm9MaXN0ZW5lckludGVudChFbmRwb2ludCBlcCwgQnVpbGRlckNvbnRleHQgY29udGV4dCkgeworIAorICAgIHByaXZhdGUgdm9pZCB2YWxpZGF0ZVRyYW5zYWN0aW9uSW50ZW50cyhDb21wb3NpdGUgY29tcG9zaXRlLCBCdWlsZGVyQ29udGV4dCBjb250ZXh0KSB7ICAgIAkgICAgCQkgICAgICAgCSAgIAorICAgIAkgCisgICAgCWZvciAoIENvbXBvbmVudCBjb21wb25lbnQgOiBjb21wb3NpdGUuZ2V0Q29tcG9uZW50cygpICkgeyAgICAJCisgICAgCQlpZiAoIGNvbXBvbmVudC5nZXRJbXBsZW1lbnRhdGlvbigpICE9IG51bGwgKSB7CisgICAgCQkJaWYgKCBjb21wb25lbnQuZ2V0SW1wbGVtZW50YXRpb24oKSBpbnN0YW5jZW9mIENvbXBvc2l0ZSApIAorICAgIAkJCQl2YWxpZGF0ZVRyYW5zYWN0aW9uSW50ZW50cygoQ29tcG9zaXRlKSBjb21wb25lbnQuZ2V0SW1wbGVtZW50YXRpb24oKSwgY29udGV4dCk7ICAgIAkJICAgCisgICAgCQkJCisgICAgCQkJZm9yICggSW50ZW50IGltcGxJbnRlbnQgOiBjb21wb25lbnQuZ2V0SW1wbGVtZW50YXRpb24oKS5nZXRSZXF1aXJlZEludGVudHMoKSApIHsKKyAgICAJCQkJaWYgKCBDb25zdGFudHMuTUFOQUdFRF9UUkFOU0FDVElPTl9MT0NBTF9JTlRFTlQuZXF1YWxzKGltcGxJbnRlbnQuZ2V0TmFtZSgpICkgKSB7CisgICAgCQkJCQlmb3IgKCBDb21wb25lbnRSZWZlcmVuY2UgcmVmZXJlbmNlIDogY29tcG9uZW50LmdldFJlZmVyZW5jZXMoKSApIHsKKyAgICAJCQkJCQlmb3IgKCBFbmRwb2ludFJlZmVyZW5jZSBlcHIgOiByZWZlcmVuY2UuZ2V0RW5kcG9pbnRSZWZlcmVuY2VzKCkgKSB7CisgICAgCQkJCQkJCWZvciAoIEludGVudCBlcHJJbnRlbnQgOiBlcHIuZ2V0UmVxdWlyZWRJbnRlbnRzKCkgKSB7CisgICAgCQkJCQkJCQlpZiAoIENvbnN0YW50cy5UUkFOU0FDVEVEX09ORV9XQVlfSU5URU5ULmVxdWFscyhlcHJJbnRlbnQuZ2V0TmFtZSgpKSkgeworICAgIAkJCQkJCQkJCWVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLCAKKyAgICAJCQkJCQkJCQkJIlRyYW5zYWN0ZWRPbmVXYXlXaXRoTWFuYWdlZFRyYW5zYWN0aW9uTG9jYWwiLCAKKyAgICAJCSAgICAJCQkgICAgCQkJdGhpcywKKyAgICAJCSAgICAJCQkgICAgCQkJInJlZmVyZW5jZSIsCisgICAgCQkgICAgCQkJICAgIAkJCWVwci5nZXRDb21wb25lbnQoKS5nZXROYW1lKCksCisgICAgCQkgICAgCQkJICAgIAkJCWVwci5nZXRSZWZlcmVuY2UoKS5nZXROYW1lKCkpOworICAgIAkJCQkJCQkJfSBlbHNlIGlmICggQ29uc3RhbnRzLlBST1BBR0FURVNfVFJBTlNBQ1RJT05fSU5URU5ULmVxdWFscyhlcHJJbnRlbnQuZ2V0TmFtZSgpKSkgeworICAgIAkJCQkJCQkJCWVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLAorICAgIAkJCQkJCQkJCQkJIlByb3BhZ2F0ZXNUcmFuc2FjdGlvbldpdGhMb2NhbFRyYW4iLAorICAgIAkJCQkJCQkJCQkJdGhpcywKKyAgICAJCQkJCQkJCQkJCSJyZWZlcmVuY2UiLAorICAgIAkJCQkJCQkJCQkJZXByLmdldENvbXBvbmVudCgpLmdldE5hbWUoKSwKKyAgICAJCQkJCQkJCQkJCWVwci5nZXRSZWZlcmVuY2UoKS5nZXROYW1lKCkpOworICAgIAkJCQkJCQkJfQorICAgIAkJCQkJCQl9CisgICAgCQkJCQkJfQorICAgIAkJCQkJfSAgICAJCisgICAgCQkJCQlmb3IgKCBDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnQuZ2V0U2VydmljZXMoKSApIHsKKyAgICAJCQkJCQlmb3IgKCBFbmRwb2ludCBlcCA6IHNlcnZpY2UuZ2V0RW5kcG9pbnRzKCkgKSB7CisgICAgCQkJCQkJCWZvciAoIEludGVudCBlcEludGVudCA6IGVwLmdldFJlcXVpcmVkSW50ZW50cygpICkgeworICAgIAkJCQkJCQkJaWYgKCBDb25zdGFudHMuVFJBTlNBQ1RFRF9PTkVfV0FZX0lOVEVOVC5lcXVhbHMoZXBJbnRlbnQuZ2V0TmFtZSgpKSkgeworICAgIAkJCQkJCQkJCWVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLAorICAgIAkJCQkJCQkJCQkJIlRyYW5zYWN0ZWRPbmVXYXlXaXRoTWFuYWdlZFRyYW5zYWN0aW9uTG9jYWwiLAorICAgIAkJCQkJCQkJCQkJdGhpcywKKyAgICAJCQkJCQkJCQkJCSJzZXJ2aWNlIiwKKyAgICAJCQkJCQkJCQkJCWVwLmdldENvbXBvbmVudCgpLmdldE5hbWUoKSwKKyAgICAJCQkJCQkJCQkJCWVwLmdldFNlcnZpY2UoKS5nZXROYW1lKCkpOworICAgIAkJCQkJCQkJfSBlbHNlIGlmICggQ29uc3RhbnRzLlBST1BBR0FURVNfVFJBTlNBQ1RJT05fSU5URU5ULmVxdWFscyhlcEludGVudC5nZXROYW1lKCkpKSB7CisgICAgCQkJCQkJCQkJZXJyb3IoY29udGV4dC5nZXRNb25pdG9yKCksCisgICAgCQkJCQkJCQkJCQkiUHJvcGFnYXRlc1RyYW5zYWN0aW9uV2l0aExvY2FsVHJhbiIsCisgICAgCQkJCQkJCQkJCQl0aGlzLAorICAgIAkJCQkJCQkJCQkJInNlcnZpY2UiLAorICAgIAkJCQkJCQkJCQkJZXAuZ2V0Q29tcG9uZW50KCkuZ2V0TmFtZSgpLAorICAgIAkJCQkJCQkJCQkJZXAuZ2V0U2VydmljZSgpLmdldE5hbWUoKSk7CisgICAgCQkJCQkJCQl9CisgICAgCQkJCQkJCX0KKyAgICAJCQkJCQl9CisgICAgCQkJCQl9CisgICAgCQkJCX0gZWxzZSBpZiAoIENvbnN0YW50cy5OT19NQU5BR0VEX1RSQU5TQUNUSU9OX0lOVEVOVC5lcXVhbHMoaW1wbEludGVudC5nZXROYW1lKCkpKSB7CisgICAgCQkJCQlmb3IgKCBDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnQuZ2V0U2VydmljZXMoKSApIHsKKyAgICAJCQkJCQlmb3IgKCBFbmRwb2ludCBlcCA6IHNlcnZpY2UuZ2V0RW5kcG9pbnRzKCkgKSB7CisgICAgCQkJCQkJCWZvciAoIEludGVudCBlcEludGVudCA6IGVwLmdldFJlcXVpcmVkSW50ZW50cygpICkgeworICAgIAkJCQkJCQkJaWYgKCBDb25zdGFudHMuUFJPUEFHQVRFU19UUkFOU0FDVElPTl9JTlRFTlQuZXF1YWxzKGVwSW50ZW50LmdldE5hbWUoKSkpIHsKKyAgICAJCQkJCQkJCQllcnJvcihjb250ZXh0LmdldE1vbml0b3IoKSwgCisgICAgCQkJCQkJCQkJCSJQcm9wYWdhdGVzVHJhbnNhY3Rpb25XaXRoTm9NYW5hZ2VkVHJhbiIsIAorICAgIAkJICAgIAkJCSAgICAJCQl0aGlzLAorICAgIAkJICAgIAkJCSAgICAJCQkic2VydmljZSIsCisgICAgCQkgICAgCQkJICAgIAkJCWVwLmdldENvbXBvbmVudCgpLmdldE5hbWUoKSwKKyAgICAJCSAgICAJCQkgICAgCQkJZXAuZ2V0U2VydmljZSgpLmdldE5hbWUoKSk7CisgICAgCQkJCQkJCQl9CisgICAgCQkJCQkJCX0KKyAgICAJCQkJCQl9CisgICAgCQkJCQl9CisgICAgCQkJCQlmb3IgKCBDb21wb25lbnRSZWZlcmVuY2UgcmVmZXJlbmNlIDogY29tcG9uZW50LmdldFJlZmVyZW5jZXMoKSApIHsKKyAgICAJCQkJCQlmb3IgKCBFbmRwb2ludFJlZmVyZW5jZSBlcHIgOiByZWZlcmVuY2UuZ2V0RW5kcG9pbnRSZWZlcmVuY2VzKCkgKSB7CisgICAgCQkJCQkJCWZvciAoIEludGVudCBlcHJJbnRlbnQgOiBlcHIuZ2V0UmVxdWlyZWRJbnRlbnRzKCkgKSB7CisgICAgCQkJCQkJCQlpZiAoIENvbnN0YW50cy5QUk9QQUdBVEVTX1RSQU5TQUNUSU9OX0lOVEVOVC5lcXVhbHMoZXBySW50ZW50LmdldE5hbWUoKSkpIHsKKyAgICAJCQkJCQkJCQllcnJvcihjb250ZXh0LmdldE1vbml0b3IoKSwKKyAgICAJCQkJCQkJCQkJCSJQcm9wYWdhdGVzVHJhbnNhY3Rpb25XaXRoTm9NYW5hZ2VkVHJhbiIsCisgICAgCQkJCQkJCQkJCQl0aGlzLAorICAgIAkJCQkJCQkJCQkJInJlZmVyZW5jZSIsCisgICAgCQkJCQkJCQkJCQllcHIuZ2V0Q29tcG9uZW50KCkuZ2V0TmFtZSgpLAorICAgIAkJCQkJCQkJCQkJZXByLmdldFJlZmVyZW5jZSgpLmdldE5hbWUoKSk7CisgICAgCQkJCQkJCQl9CisgICAgCQkJCQkJCX0KKyAgICAJCQkJCQl9CisgICAgCQkJCQl9CisgICAgCQkJCX0KKyAgICAJCQl9CisgICAgCQkJICAgICAJCQorICAgIAkJCQorICAgICAgIAkJCWZvciAoIENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnQuZ2V0UmVmZXJlbmNlcygpKSB7CisgICAgCQkJCWZvciAoIEVuZHBvaW50UmVmZXJlbmNlIGVwciA6IHJlZmVyZW5jZS5nZXRFbmRwb2ludFJlZmVyZW5jZXMoKSApIHsKKyAgICAJCQkJCWZvciAoIEludGVudCBlcHJJbnRlbnQgOiBlcHIuZ2V0UmVxdWlyZWRJbnRlbnRzKCkgKSB7CisgICAgCQkJCQkJaWYgKCBDb25zdGFudHMuVFJBTlNBQ1RFRF9PTkVfV0FZX0lOVEVOVC5lcXVhbHMoZXBySW50ZW50LmdldE5hbWUoKSkgKSB7CisgICAgCQkJCQkJCWZvciAoIE9wZXJhdGlvbiBvIDogZXByLmdldENvbXBvbmVudFJlZmVyZW5jZUludGVyZmFjZUNvbnRyYWN0KCkuZ2V0SW50ZXJmYWNlKCkuZ2V0T3BlcmF0aW9ucygpICkgeworICAgIAkJCQkJCQkJaWYgKCAhby5pc05vbkJsb2NraW5nKCkgKSB7CisgICAgCQkJCQkJCQkJZXJyb3IoY29udGV4dC5nZXRNb25pdG9yKCksCisgICAgCQkJCQkJCQkJCQkiVHJhbnNhY3RlZE9uZVdheVdpdGhUd29XYXlPcCIsCisgICAgCQkJCQkJCQkJCQl0aGlzLAorICAgIAkJCQkJCQkJCQkJcmVmZXJlbmNlLmdldE5hbWUoKSwKKyAgICAJCQkJCQkJCQkJCW8uZ2V0TmFtZSgpKTsKKyAgICAJCQkJCQkJCX0KKyAgICAJCQkJCQkJCQkKKyAgICAJCQkJCQkJfQorICAgIAkJCQkJCX0gZWxzZSBpZiAoIENvbnN0YW50cy5JTU1FRElBVEVfT05FX1dBWV9JTlRFTlQuZXF1YWxzKGVwckludGVudC5nZXROYW1lKCkpKSB7CisgICAgCQkJCQkJCWZvciAoIE9wZXJhdGlvbiBvIDogZXByLmdldENvbXBvbmVudFJlZmVyZW5jZUludGVyZmFjZUNvbnRyYWN0KCkuZ2V0SW50ZXJmYWNlKCkuZ2V0T3BlcmF0aW9ucygpICkgeworICAgIAkJCQkJCQkJaWYgKCAhby5pc05vbkJsb2NraW5nKCkgKSB7CisgICAgCQkJCQkJCQkJZXJyb3IoY29udGV4dC5nZXRNb25pdG9yKCksCisgICAgCQkJCQkJCQkJCQkiSW1tZWRpYXRlT25lV2F5V2l0aFR3b1dheU9wIiwKKyAgICAJCQkJCQkJCQkJCXRoaXMsCisgICAgCQkJCQkJCQkJCQlyZWZlcmVuY2UuZ2V0TmFtZSgpLAorICAgIAkJCQkJCQkJCQkJby5nZXROYW1lKCkpOworICAgIAkJCQkJCQkJfQorICAgIAkJCQkJCQkJCQorICAgIAkJCQkJCQl9CisgICAgCQkJCQkJfQorICAgIAkJCQkJfQorICAgIAkJCQkJCisgICAgCQkJCX0KKyAgICAJCQl9CisgICAgCQl9ICAgCisgICAgCX0KKyAgICB9CisgICAgCSAgICAgICAgCQkJCQkgCQorICAgCisKKwlwcml2YXRlIHZvaWQgY2hlY2tGb3JOb0xpc3RlbmVySW50ZW50KEVuZHBvaW50IGVwLCBCdWlsZGVyQ29udGV4dCBjb250ZXh0KSB7CiAJCVBvbGljeUhlbHBlciBoZWxwZXIgPSBuZXcgUG9saWN5SGVscGVyKCk7CiAJCWlmICggaGVscGVyLmdldEludGVudChlcCwgTk9MSVNURU5FUl9JTlRFTlQpICE9IG51bGwgKSB7CiAJCQkgIGVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLCAKQEAgLTI0OCwxNCArMzY3LDE2IEBACiAJCQlCdWlsZGVyQ29udGV4dCBjb250ZXh0KSB7CiAgICAgCWJvb2xlYW4gZm91bmRFeHRlcm5hbFBvbGljeVNldCA9IGZhbHNlOwogCQlmb3IgKFBvbGljeVNldCBwcyA6IHN1YmplY3QuZ2V0UG9saWN5U2V0cygpICkgewotCQkJaWYgKCBwcy5nZXRBdHRhY2hUbygpICE9IG51bGwgKSAKKwkJCWlmICggcHMuaXNFeHRlcm5hbEF0dGFjaG1lbnQoKSApIHsKIAkJCQlmb3VuZEV4dGVybmFsUG9saWN5U2V0ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCX0KIAkJfQogCQkKIAkJaWYgKCBmb3VuZEV4dGVybmFsUG9saWN5U2V0ICkgewogCQkJTGlzdDxQb2xpY3lTZXQ+IGNvcHkgPSBuZXcgQXJyYXlMaXN0PFBvbGljeVNldD4oc3ViamVjdC5nZXRQb2xpY3lTZXRzKCkpOwogCQkJZm9yICggUG9saWN5U2V0IHBzIDogY29weSApIHsKLQkJCQlpZiAoIHBzLmdldEF0dGFjaFRvKCkgPT0gbnVsbCApIHsKKwkJCQlpZiAoICFwcy5pc0V4dGVybmFsQXR0YWNobWVudCgpICkgewogCQkJCQlzdWJqZWN0LmdldFBvbGljeVNldHMoKS5yZW1vdmUocHMpOwogCQkJCX0KIAkJCX0KQEAgLTI3Miw2ICszOTMsNyBAQAogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIGNoZWNrUG9saWNpZXMoQ29tcG9zaXRlIGNvbXBvc2l0ZSwgQnVpbGRlckNvbnRleHQgY29udGV4dCkgdGhyb3dzIENvbXBvc2l0ZUJ1aWxkZXJFeGNlcHRpb257CiAgICAgICAgIHBvbGljeUFwcGxpZXNUb0J1aWxkZXIuYnVpbGQoY29tcG9zaXRlLCBjb250ZXh0KTsKKyAgICAgICAgdmFsaWRhdGVUcmFuc2FjdGlvbkludGVudHMoY29tcG9zaXRlLCBjb250ZXh0KTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgdm9pZCBidWlsZFBvbGljaWVzKENvbXBvc2l0ZSBjb21wb3NpdGUsIEJ1aWxkZXJDb250ZXh0IGNvbnRleHQpIHsKZGlmZiAtLWdpdCBhL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL01vZGVsQnVpbGRlckltcGwuamF2YSBiL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL01vZGVsQnVpbGRlckltcGwuamF2YQppbmRleCA4OWZkYzA5Li5jZjFjOWNiIDEwMDY0NAotLS0gYS9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2J1aWxkZXIvaW1wbC9Nb2RlbEJ1aWxkZXJJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvTW9kZWxCdWlsZGVySW1wbC5qYXZhCkBAIC05NywxNSArOTcsMTQgQEAKICAgICAgICAgICAgIGNvbXBvc2l0ZSA9IGNvbXBvc2l0ZUluY2x1ZGVCdWlsZGVyLmJ1aWxkKGNvbXBvc2l0ZSwgY29udGV4dCk7CiAKICAgICAgICAgICAgIC8vIFNldCB1cCB0aGUgc3RydWN0dXJhbCBVUklzIGZvciBjb21wb25lbnRzIChzZXJ2aWNlcy9yZWZlcmVuY2VzL2JpbmRpbmdzKQotICAgICAgICAgICAgLy8gVE9ETyBkb2VzIHRoaXMgbmVlZCB0byBoYXBwZW4gYmVmb3JlIHBvbGljeSBhdHRhY2htZW50CiAgICAgICAgICAgICBjb21wb3NpdGUgPSBzdHJ1Y3R1cmFsVVJJQnVpbGRlci5idWlsZChjb21wb3NpdGUsIGNvbnRleHQpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBBcHBseSBwb2xpY3kgZXh0ZXJuYWwgYXR0YWNobWVudC4gSGFwcGVucyBiZWZvcmUgdGhlIGNvbXBvc2l0ZSB0eXBlCiAgICAgICAgICAgICAvLyBpcyBjcmVhdGVkIHNvIHRoYXQgc3VpdGFibGUgcHJvbW90aW9uIGFuZCBzdHJ1Y3R1cmFsIHByb2Nlc3NpbmcgaXMKICAgICAgICAgICAgIC8vIGFwcGxpZWQgdG8gdGhlIGF0dGFjaGVkIHBvbGljaWVzCi0gICAgICAgICAgICAvLyBUT0RPIC0gSSBkb24ndCB0aGluayB0aGlzIGlzIGNvcnJlY3QuIFRoZSBwb2xpY3kgc3BlYyAoNC4xMi4xKWltcGxpZXMgdGhhdAotICAgICAgICAgICAgLy8gICAgICAgIHBvbGljeSBhdHRhY2htZW50IGhhcHBlbnMgaW5kZXBlbmRlbnRseSBvZiBpbXBsZW1lbnRhdGlvbiBvciAKLSAgICAgICAgICAgIC8vICAgICAgICBzdHJ1Y3R1cmFsIGluaGVyaXRhbmNlCisgICAgICAgICAgICAvLyBUT0RPIC0gQ2FuIHlvdSBhdHRhY2ggYSBwb2xpY3kgdG8gYSBjb21wb25lbnQgYW5kIGhhdmUgaXQgcHJvbW90ZWQgdG8gdGhlIAorICAgICAgICAgICAgLy8gICAgICAgIGNvbXBvbmVudHMgc2VydmljZXMgYW5kIHJlZmVyZW5jZXMuIElmIHllcyB0aGlzIGNhbGwgaXMgaW4gdGhlIAorICAgICAgICAgICAgLy8gICAgICAgIHJpZ2h0IHBsYWNlCiAgICAgICAgICAgICBjb21wb3NpdGUgPSBwb2xpY3lBdHRhY2htZW50QnVpbGRlci5idWlsZChjb21wb3NpdGUsIGNvbnRleHQpOwogCiAgICAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBpbXBsZW1lbnRhdGlvbiBoaWVyYXJjaHkgYnkgY2FsY3VsYXRpbmcgdGhlIGNvbXBvbmVudCB0eXBlIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvUG9saWN5QXBwbGllc1RvQnVpbGRlckltcGwuamF2YSBiL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL1BvbGljeUFwcGxpZXNUb0J1aWxkZXJJbXBsLmphdmEKaW5kZXggMjQxNzk0MC4uMWM5NThmNyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9idWlsZGVyL2ltcGwvUG9saWN5QXBwbGllc1RvQnVpbGRlckltcGwuamF2YQorKysgYi9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2J1aWxkZXIvaW1wbC9Qb2xpY3lBcHBsaWVzVG9CdWlsZGVySW1wbC5qYXZhCkBAIC04Myw0NCArODMsNTEgQEAKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBwcml2YXRlIENvbXBvc2l0ZSBjaGVja0FwcGxpZXNUbyhEb2N1bWVudCBkb2N1bWVudCwgTWFwPFBvbGljeVNldCwgTGlzdDxQb2xpY3lTdWJqZWN0Pj4gYXBwbGllc1RvU3ViamVjdHMsIENvbXBvc2l0ZSBjb21wb3NpdGUsIEJ1aWxkZXJDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICAvLyBsb29rIGF0IHBvbGljaWVzIHJlY3Vyc2l2ZWx5Ci0gICAgICAgIGZvciAoQ29tcG9uZW50IGNvbXBvbmVudCA6IGNvbXBvc2l0ZS5nZXRDb21wb25lbnRzKCkpIHsKLSAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uID0gY29tcG9uZW50LmdldEltcGxlbWVudGF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoaW1wbGVtZW50YXRpb24gaW5zdGFuY2VvZiBDb21wb3NpdGUpIHsKLSAgICAgICAgICAgICAgICBjaGVja0FwcGxpZXNUbyhkb2N1bWVudCwgYXBwbGllc1RvU3ViamVjdHMsIChDb21wb3NpdGUpaW1wbGVtZW50YXRpb24sIGNvbnRleHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgcHJpdmF0ZSBDb21wb3NpdGUgY2hlY2tBcHBsaWVzVG8oRG9jdW1lbnQgZG9jdW1lbnQsIE1hcDxQb2xpY3lTZXQsIExpc3Q8UG9saWN5U3ViamVjdD4+IGFwcGxpZXNUb1N1YmplY3RzLCBDb21wb3NpdGUgdG9wQ29tcG9zaXRlLCBCdWlsZGVyQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAKKyAgICAJZm9yICggQ29tcG9uZW50IGNvbXBvbmVudCA6IHRvcENvbXBvc2l0ZS5nZXRDb21wb25lbnRzKCkgKSB7CisgICAgCQlpZiAoIGNvbXBvbmVudC5nZXRJbXBsZW1lbnRhdGlvbigpIGluc3RhbmNlb2YgQ29tcG9zaXRlICkgeworICAgIAkJCUNvbXBvc2l0ZSBuZXN0ZWQgPSAoQ29tcG9zaXRlKSBjb21wb25lbnQuZ2V0SW1wbGVtZW50YXRpb24oKTsKKyAgICAJCQljaGVja0FwcGxpZXNUbyhzYXZlQXNET00obmVzdGVkKSxuZXcgSGFzaE1hcDxQb2xpY3lTZXQsIExpc3Q8UG9saWN5U3ViamVjdD4+KCksIG5lc3RlZCwgY29udGV4dCApOworICAgIAkJfQorICAgIAl9CiAKLSAgICAgICAgZm9yIChDb21wb25lbnQgY29tcG9uZW50IDogY29tcG9zaXRlLmdldENvbXBvbmVudHMoKSkgeworICAgIAlmb3IgKENvbXBvbmVudCBjb21wb25lbnQgOiB0b3BDb21wb3NpdGUuZ2V0Q29tcG9uZW50cygpKSB7CiAKLSAgICAgICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBjb21wb25lbnRTZXJ2aWNlIDogY29tcG9uZW50LmdldFNlcnZpY2VzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKEVuZHBvaW50IGVwIDogY29tcG9uZW50U2VydmljZS5nZXRFbmRwb2ludHMoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXAuZ2V0QmluZGluZygpIGluc3RhbmNlb2YgUG9saWN5U3ViamVjdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBcHBsaWVzVG9TdWJqZWN0KGRvY3VtZW50LCBhcHBsaWVzVG9TdWJqZWN0cywgY29tcG9zaXRlLCAoUG9saWN5U3ViamVjdCllcC5nZXRCaW5kaW5nKCksIGVwLmdldFBvbGljeVNldHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgCQlmb3IgKENvbXBvbmVudFNlcnZpY2UgY29tcG9uZW50U2VydmljZSA6IGNvbXBvbmVudC5nZXRTZXJ2aWNlcygpKSB7CisgICAgCQkJZm9yIChFbmRwb2ludCBlcCA6IGNvbXBvbmVudFNlcnZpY2UuZ2V0RW5kcG9pbnRzKCkpIHsKKyAgICAJCQkgICAgTGlzdDxQb2xpY3lTZXQ+IHBvbGljeVNldHNUb1JlbW92ZSA9IGNoZWNrQXBwbGllc1RvU3ViamVjdChkb2N1bWVudCwgYXBwbGllc1RvU3ViamVjdHMsIHRvcENvbXBvc2l0ZSwgKFBvbGljeVN1YmplY3QpZXAuZ2V0U2VydmljZSgpLCBlcC5nZXRTZXJ2aWNlKCkuZ2V0UG9saWN5U2V0cygpKTsKKyAgICAJCQkgICAgZXAuZ2V0UG9saWN5U2V0cygpLnJlbW92ZUFsbChwb2xpY3lTZXRzVG9SZW1vdmUpOworICAgIAkJCQlpZiAoZXAuZ2V0QmluZGluZygpIGluc3RhbmNlb2YgUG9saWN5U3ViamVjdCkgeworICAgIAkJCQkgICAgcG9saWN5U2V0c1RvUmVtb3ZlID0gY2hlY2tBcHBsaWVzVG9TdWJqZWN0KGRvY3VtZW50LCBhcHBsaWVzVG9TdWJqZWN0cywgdG9wQ29tcG9zaXRlLCAoUG9saWN5U3ViamVjdCllcC5nZXRCaW5kaW5nKCksICgoUG9saWN5U3ViamVjdCllcC5nZXRCaW5kaW5nKCkpLmdldFBvbGljeVNldHMoKSk7CisgICAgCQkJCSAgICBlcC5nZXRQb2xpY3lTZXRzKCkucmVtb3ZlQWxsKHBvbGljeVNldHNUb1JlbW92ZSk7CisgICAgCQkJCX0KKyAgICAJCQl9CisgICAgCQl9CiAKLSAgICAgICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIGNvbXBvbmVudFJlZmVyZW5jZSA6IGNvbXBvbmVudC5nZXRSZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgICAgICBmb3IgKEVuZHBvaW50UmVmZXJlbmNlIGVwciA6IGNvbXBvbmVudFJlZmVyZW5jZS5nZXRFbmRwb2ludFJlZmVyZW5jZXMoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZXByLmdldEJpbmRpbmcoKSBpbnN0YW5jZW9mIFBvbGljeVN1YmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQXBwbGllc1RvU3ViamVjdChkb2N1bWVudCwgYXBwbGllc1RvU3ViamVjdHMsIGNvbXBvc2l0ZSwgKFBvbGljeVN1YmplY3QpZXByLmdldEJpbmRpbmcoKSwgZXByLmdldFBvbGljeVNldHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgCQlmb3IgKENvbXBvbmVudFJlZmVyZW5jZSBjb21wb25lbnRSZWZlcmVuY2UgOiBjb21wb25lbnQuZ2V0UmVmZXJlbmNlcygpKSB7CisgICAgCQkJZm9yIChFbmRwb2ludFJlZmVyZW5jZSBlcHIgOiBjb21wb25lbnRSZWZlcmVuY2UuZ2V0RW5kcG9pbnRSZWZlcmVuY2VzKCkpIHsKKyAgICAJCQkgICAgTGlzdDxQb2xpY3lTZXQ+IHBvbGljeVNldHNUb1JlbW92ZSA9IGNoZWNrQXBwbGllc1RvU3ViamVjdChkb2N1bWVudCwgYXBwbGllc1RvU3ViamVjdHMsIHRvcENvbXBvc2l0ZSwgKFBvbGljeVN1YmplY3QpZXByLmdldFJlZmVyZW5jZSgpLCBlcHIuZ2V0UmVmZXJlbmNlKCkuZ2V0UG9saWN5U2V0cygpKTsKKyAgICAJCQkgICAgZXByLmdldFBvbGljeVNldHMoKS5yZW1vdmVBbGwocG9saWN5U2V0c1RvUmVtb3ZlKTsKKyAgICAJCQkJaWYgKGVwci5nZXRCaW5kaW5nKCkgaW5zdGFuY2VvZiBQb2xpY3lTdWJqZWN0KSB7CisgICAgCQkJCSAgICBwb2xpY3lTZXRzVG9SZW1vdmUgPSBjaGVja0FwcGxpZXNUb1N1YmplY3QoZG9jdW1lbnQsIGFwcGxpZXNUb1N1YmplY3RzLCB0b3BDb21wb3NpdGUsIChQb2xpY3lTdWJqZWN0KWVwci5nZXRCaW5kaW5nKCksICgoUG9saWN5U3ViamVjdCllcHIuZ2V0QmluZGluZygpKS5nZXRQb2xpY3lTZXRzKCkpOworICAgIAkJCQkgICAgZXByLmdldFBvbGljeVNldHMoKS5yZW1vdmVBbGwocG9saWN5U2V0c1RvUmVtb3ZlKTsKKyAgICAJCQkJfSAKKyAgICAJCQl9CisgICAgCQl9CiAKLSAgICAgICAgICAgIEltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uID0gY29tcG9uZW50LmdldEltcGxlbWVudGF0aW9uKCk7Ci0gICAgICAgICAgICBpZiAoaW1wbGVtZW50YXRpb24gIT0gbnVsbCAmJiAKLSAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZW9mIFBvbGljeVN1YmplY3QpIHsKLSAgICAgICAgICAgICAgICBjaGVja0FwcGxpZXNUb1N1YmplY3QoZG9jdW1lbnQsIGFwcGxpZXNUb1N1YmplY3RzLCBjb21wb3NpdGUsIGltcGxlbWVudGF0aW9uLCBpbXBsZW1lbnRhdGlvbi5nZXRQb2xpY3lTZXRzKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gY29tcG9zaXRlOworICAgIAkJSW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb24gPSBjb21wb25lbnQuZ2V0SW1wbGVtZW50YXRpb24oKTsKKyAgICAJCWlmIChpbXBsZW1lbnRhdGlvbiAhPSBudWxsICYmIAorICAgIAkJCQlpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZW9mIFBvbGljeVN1YmplY3QpIHsKKyAgICAJCQljaGVja0FwcGxpZXNUb1N1YmplY3QoZG9jdW1lbnQsIGFwcGxpZXNUb1N1YmplY3RzLCB0b3BDb21wb3NpdGUsIGltcGxlbWVudGF0aW9uLCBpbXBsZW1lbnRhdGlvbi5nZXRQb2xpY3lTZXRzKCkpOworICAgIAkJfQorICAgIAl9CisKKyAgICAgICAgcmV0dXJuIHRvcENvbXBvc2l0ZTsKICAgICB9CiAgICAgCi0gICAgLyoqCisKKwkvKioKICAgICAgKiBDaGVja3MgdGhhdCBhbGwgdGhlIHByb3ZpZGVkIHBvbGljeSBzZXRzIGFwcGx5IHRvIHRoZSBwcm92aWRlZCBwb2xpY3kgc3ViamVjdAogICAgICAqIAogICAgICAqIEBwYXJhbSBkb2N1bWVudApAQCAtMTMwLDcgKzEzNyw3IEBACiAgICAgICogQHJldHVybgogICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGNoZWNrQXBwbGllc1RvU3ViamVjdChEb2N1bWVudCBkb2N1bWVudCwgTWFwPFBvbGljeVNldCwgTGlzdDxQb2xpY3lTdWJqZWN0Pj4gYXBwbGllc1RvU3ViamVjdHMsIENvbXBvc2l0ZSBjb21wb3NpdGUsIFBvbGljeVN1YmplY3QgcG9saWN5U3ViamVjdCwgTGlzdDxQb2xpY3lTZXQ+IHBvbGljeVNldHMpIHRocm93cyBFeGNlcHRpb24geworICAgIHByaXZhdGUgTGlzdDxQb2xpY3lTZXQ+IGNoZWNrQXBwbGllc1RvU3ViamVjdChEb2N1bWVudCBkb2N1bWVudCwgTWFwPFBvbGljeVNldCwgTGlzdDxQb2xpY3lTdWJqZWN0Pj4gYXBwbGllc1RvU3ViamVjdHMsIENvbXBvc2l0ZSBjb21wb3NpdGUsIFBvbGljeVN1YmplY3QgcG9saWN5U3ViamVjdCwgTGlzdDxQb2xpY3lTZXQ+IHBvbGljeVNldHMpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBMaXN0PFBvbGljeVNldD4gcG9saWN5U2V0c1RvUmVtb3ZlID0gbmV3IEFycmF5TGlzdDxQb2xpY3lTZXQ+KCk7CiAgICAgICAgIAogICAgICAgICBmb3IgKFBvbGljeVNldCBwb2xpY3lTZXQgOiBwb2xpY3lTZXRzKXsKQEAgLTE1MCw3ICsxNTcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSBub2RlID0gbm9kZXMuaXRlbShpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBpbmRleCA9IGdldFN0cnVjdHVyYWxVUkkobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBQb2xpY3lTdWJqZWN0IHN1YmplY3QgPSBsb29rdXAoY29tcG9zaXRlLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0cy5hZGQoc3ViamVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHN1YmplY3QgIT0gbnVsbCApIAorICAgICAgICAgICAgICAgICAgICAgICAgCXN1YmplY3RzLmFkZChzdWJqZWN0KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE2Niw2ICsxNzQsNyBAQAogCiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIHBvbGljeVNldHMucmVtb3ZlQWxsKHBvbGljeVNldHNUb1JlbW92ZSk7ICAgICAgCisgICAgICAgIHBvbGljeVNldHMucmVtb3ZlQWxsKHBvbGljeVNldHNUb1JlbW92ZSk7IAorICAgICAgICByZXR1cm4gcG9saWN5U2V0c1RvUmVtb3ZlOwogICAgIH0gICAgCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2J1aWxkZXIvaW1wbC9Qb2xpY3lBdHRhY2htZW50QnVpbGRlckltcGwuamF2YSBiL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL1BvbGljeUF0dGFjaG1lbnRCdWlsZGVySW1wbC5qYXZhCmluZGV4IGU5YTQ5YzguLjRkMWE3ZDUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL1BvbGljeUF0dGFjaG1lbnRCdWlsZGVySW1wbC5qYXZhCisrKyBiL21vZHVsZXMvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9pbXBsL1BvbGljeUF0dGFjaG1lbnRCdWlsZGVySW1wbC5qYXZhCkBAIC0yMSw3ICsyMSw4IEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247CkBAIC00OSw2ICs1MCw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kZWZpbml0aW9ucy5EZWZpbml0aW9uczsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuTW9uaXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5FeHRlcm5hbEF0dGFjaG1lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuUG9saWN5U2V0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeVN1YmplY3Q7CiBpbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7CkBAIC0xMDksODAgKzExMSw1MiBAQAogICAgICAgICBtb25pdG9yLnB1c2hDb250ZXh0KCJDb21wb3NpdGU6ICIgKyBjb21wb3NpdGUuZ2V0TmFtZSgpLnRvU3RyaW5nKCkpOwogICAgICAgICAKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChkZWZpbml0aW9ucyA9PSBudWxsIHx8IGRlZmluaXRpb25zLmdldFBvbGljeVNldHMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChkZWZpbml0aW9ucyA9PSBudWxsIHx8IChkZWZpbml0aW9ucy5nZXRQb2xpY3lTZXRzKCkuaXNFbXB0eSgpICYmIGRlZmluaXRpb25zLmdldEV4dGVybmFsQXR0YWNobWVudHMoKS5pc0VtcHR5KCkpICkgewogICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3NpdGU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBhcHBseSB0aGUgeHBhdGggYWdhaW5zdCB0aGUgY29tcG9zaXRlcyByZWZlcmVuY2VkIGJ5IDxpbXBsZW1lbnRhdGlvbi5jb21wb3NpdGU+Ci0gICAgICAgICAgICBmb3IgKENvbXBvbmVudCBjb21wb25lbnQgOiBjb21wb3NpdGUuZ2V0Q29tcG9uZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgSW1wbGVtZW50YXRpb24gaW1wbCA9IGNvbXBvbmVudC5nZXRJbXBsZW1lbnRhdGlvbigpOwotICAgICAgICAgICAgICAgIGlmIChpbXBsIGluc3RhbmNlb2YgQ29tcG9zaXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZSBwYXRjaGVkID0gYXBwbHlYUGF0aCgoQ29tcG9zaXRlKWltcGwsIGRlZmluaXRpb25zLCBtb25pdG9yKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBhdGNoZWQgIT0gaW1wbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNldEltcGxlbWVudGF0aW9uKHBhdGNoZWQpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorICAgICAKKyAgICAgICAgICAgIAogICAgICAgICAgICAgRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwogICAgIAogICAgICAgICAgICAgZm9yIChQb2xpY3lTZXQgcHMgOiBkZWZpbml0aW9ucy5nZXRQb2xpY3lTZXRzKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGaXJzdCBjYWxjdWxhdGUgdGhlIGFwcGxpY2FibGUgbm9kZXMKLSAgICAgICAgICAgICAgICBTZXQ8Tm9kZT4gYXBwbGljYWJsZU5vZGVzID0gbnVsbDsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgIFhQYXRoRXhwcmVzc2lvbiBhcHBsaWVzVG8gPSBwcy5nZXRBcHBsaWVzVG9YUGF0aEV4cHJlc3Npb24oKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbGllc1RvICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZU5vZGVzID0gbmV3IEhhc2hTZXQ8Tm9kZT4oKTsKLSAgICAgICAgICAgICAgICAgICAgTm9kZUxpc3Qgbm9kZXMgPSAoTm9kZUxpc3QpYXBwbGllc1RvLmV2YWx1YXRlKGRvY3VtZW50LCBYUGF0aENvbnN0YW50cy5OT0RFU0VUKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2Rlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlTm9kZXMuYWRkKG5vZGVzLml0ZW0oaSkpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgWFBhdGhFeHByZXNzaW9uIGV4cCA9IHBzLmdldEF0dGFjaFRvWFBhdGhFeHByZXNzaW9uKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4cCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudCA9IHNhdmVBc0RPTShjb21wb3NpdGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIE5vZGVMaXN0IG5vZGVzID0gKE5vZGVMaXN0KWV4cC5ldmFsdWF0ZShkb2N1bWVudCwgWFBhdGhDb25zdGFudHMuTk9ERVNFVCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotICAgICAgICAgICAgICAgICAgICAgICAgTm9kZSBub2RlID0gbm9kZXMuaXRlbShpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgLy8gUE9MXzQwMDAyIC0geW91IGNhbid0IGF0dGFjaCBhIHBvbGljeSB0byBhIHByb3BlcnR5IG5vZGUKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIG9yIG9uZSBvZiBpdCdzIGNoaWxkcmVuCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyB3YWxrIGJhY2t3YXJkcyB1cCB0aGUgbm9kZSB0cmVlIGxvb2tpbmcgZm9yIGFuIGVsZW1lbnQgY2FsbGVkIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgcmFpc2UgYW4gZXJyb3IgaWYgd2UgZmluZCBvbmUKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vZGUgdGVzdE5vZGUgPSBub2RlOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRlc3ROb2RlICE9IG51bGwpewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgobm9kZS5nZXROb2RlVHlwZSgpID09IE5vZGUuRUxFTUVOVF9OT0RFKSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobm9kZS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoInByb3BlcnR5IikpKXsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9uaXRvci5lcnJvcihtb25pdG9yLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCVUlMREVSX1ZBTElEQVRJT05fQlVORExFLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUG9saWN5QXR0YWNoZWRUb1Byb3BlcnR5IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHMuZ2V0TmFtZSgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAJCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdE5vZGUgPSB0ZXN0Tm9kZS5nZXRQYXJlbnROb2RlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhYmxlTm9kZXMgPT0gbnVsbCB8fCBhcHBsaWNhYmxlTm9kZXMuY29udGFpbnMobm9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbm9kZSBjYW4gYmUgYSBjb21wb25lbnQsIHNlcnZpY2UsIHJlZmVyZW5jZSBvciBiaW5kaW5nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGluZGV4ID0gZ2V0U3RydWN0dXJhbFVSSShub2RlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb2xpY3lTdWJqZWN0IHN1YmplY3QgPSBsb29rdXAoY29tcG9zaXRlLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1YmplY3QgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmdldFBvbGljeVNldHMoKS5hZGQocHMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCS8vIHJhaXNlIGEgd2FybmluZyB0aGF0IHRoZSBYUGF0aCBub2RlIGRpZG4ndCBtYXRjaCBhIG5vZGUgaW4gdGhlIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkvLyBtb2RlbHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9uaXRvci53YXJuaW5nKG1vbml0b3IsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJVSUxERVJfVkFMSURBVElPTl9CVU5ETEUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQb2xpY3lET01Nb2RlbE1pc3NtYXRjaCIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzLmdldE5hbWUoKS50b1N0cmluZygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAJWFBhdGhFeHByZXNzaW9uIGV4cCA9IHBzLmdldEF0dGFjaFRvWFBhdGhFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAJaWYgKCBleHAgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIAkJaWYgKCBkb2N1bWVudCA9PSBudWxsICkgeworICAgICAgICAgICAgCQkJZG9jdW1lbnQgPSBzYXZlQXNET00oY29tcG9zaXRlKTsKKyAgICAgICAgICAgIAkJfQorICAgICAgICAgICAgCQlOb2RlTGlzdCBub2RlcyA9IChOb2RlTGlzdCkgZXhwLmV2YWx1YXRlKGRvY3VtZW50LCBYUGF0aENvbnN0YW50cy5OT0RFU0VUKTsKKyAgICAgICAgICAgIAkJYXR0YWNoUG9saWN5U2V0VG9Ob2Rlcyhjb21wb3NpdGUsIG1vbml0b3IsIG5vZGVzLCBwcyk7CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKCBFeHRlcm5hbEF0dGFjaG1lbnQgZWEgOiBkZWZpbml0aW9ucy5nZXRFeHRlcm5hbEF0dGFjaG1lbnRzKCkgKSB7CisgICAgICAgICAgICAJWFBhdGhFeHByZXNzaW9uIGV4cCA9IGVhLmdldEF0dGFjaFRvWFBhdGhFeHByZXNzaW9uKCk7CisgICAgICAgICAgICAJaWYgKCBleHAgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIAkJaWYgKCBkb2N1bWVudCA9PSBudWxsICkgeworICAgICAgICAgICAgCQkJZG9jdW1lbnQgPSBzYXZlQXNET00oY29tcG9zaXRlKTsKKyAgICAgICAgICAgIAkJfQorICAgICAgICAgICAgCQlOb2RlTGlzdCBub2RlcyA9IChOb2RlTGlzdCkgZXhwLmV2YWx1YXRlKGRvY3VtZW50LCBYUGF0aENvbnN0YW50cy5OT0RFU0VUKTsKKyAgICAgICAgICAgIAkJZm9yICggUG9saWN5U2V0IHBzIDogZWEuZ2V0UG9saWN5U2V0cygpICkgeyAgICAgICAgICAgIAkJICAgICAgICAgICAgCQkgICAgICAgICAgICAgICAgCQkgICAgICAgICAgICAgICAgCQkKKyAgICAgICAgICAgICAgICAJCWF0dGFjaFBvbGljeVNldFRvTm9kZXMoY29tcG9zaXRlLCBtb25pdG9yLCBub2RlcywgcHMpOworICAgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAJfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBhcHBseSB0aGUgeHBhdGggYWdhaW5zdCB0aGUgY29tcG9zaXRlcyByZWZlcmVuY2VkIGJ5IDxpbXBsZW1lbnRhdGlvbi5jb21wb3NpdGU+CisgICAgICAgICAgICAvLyBJZiB0aGUgY29tcG9zaXRlIG9yIGNvbXBvbmVudCBoYXMgcG9saWN5IHNldHMgYXR0YWNoZWQsIHdlIGhhdmUgdG8gaWdub3JlIHBvbGljeSBzZXRzCisgICAgICAgICAgICAvLyBhdHRhY2hlZCB0byB0aGUgaW5uZXIgY29tcG9zaXRlLiAKKyAgICAgICAgICAgIGlmICggY29tcG9zaXRlLmdldFBvbGljeVNldHMoKS5pc0VtcHR5KCkgKSB7CisgICAgICAgICAgICAJZm9yIChDb21wb25lbnQgY29tcG9uZW50IDogY29tcG9zaXRlLmdldENvbXBvbmVudHMoKSkgeworICAgICAgICAgICAgCQlpZiAoIGNvbXBvbmVudC5nZXRQb2xpY3lTZXRzKCkuaXNFbXB0eSgpICkgeworICAgICAgICAgICAgCQkJSW1wbGVtZW50YXRpb24gaW1wbCA9IGNvbXBvbmVudC5nZXRJbXBsZW1lbnRhdGlvbigpOworICAgICAgICAgICAgCQkJaWYgKGltcGwgaW5zdGFuY2VvZiBDb21wb3NpdGUpIHsgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgIAorICAgICAgICAgICAgCQkJCUNvbXBvc2l0ZSBwYXRjaGVkID0gYXBwbHlYUGF0aCgoQ29tcG9zaXRlKWltcGwsIGRlZmluaXRpb25zLCBtb25pdG9yKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIAkJCQlpZiAocGF0Y2hlZCAhPSBpbXBsKSB7ICAgICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgICAgICAJCisgICAgICAgICAgICAJCQkJCWNvbXBvbmVudC5zZXRJbXBsZW1lbnRhdGlvbihwYXRjaGVkKTsKKyAgICAgICAgICAgIAkJCQl9CisgICAgICAgICAgICAJCQl9CisgICAgICAgICAgICAJCX0KKyAgICAgICAgICAgIAl9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHJldHVybiBjb21wb3NpdGU7CkBAIC0xOTEsNiArMTY1LDY5IEBACiAgICAgICAgIH0gICAgICAgICAgICAKICAgICB9CiAKKwlwcml2YXRlIHZvaWQgYXR0YWNoUG9saWN5U2V0VG9Ob2RlcyhDb21wb3NpdGUgY29tcG9zaXRlLAorCQkJTW9uaXRvciBtb25pdG9yLCBOb2RlTGlzdCBub2RlcywgUG9saWN5U2V0IHBzKSB7CQorCQkJCQkgIAkJIAorCQkgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2Rlcy5nZXRMZW5ndGgoKTsgaSsrKSB7CisJCSAgICAgICAgTm9kZSBub2RlID0gbm9kZXMuaXRlbShpKTsKKwkJICAgICAgICAKKwkJICAgICAgICBpZiAoIGlzQXR0YWNoZWRUb1Byb3BlcnR5KG5vZGUpICkgeworCQkgICAgICAgIAkgICBNb25pdG9yLmVycm9yKG1vbml0b3IsIAorCQkJICAgICAgICAgICAgICAgICAgICAgIHRoaXMsIAorCQkJICAgICAgICAgICAgICAgICAgICAgIEJVSUxERVJfVkFMSURBVElPTl9CVU5ETEUsIAorCQkJICAgICAgICAgICAgICAgICAgICAgICJQb2xpY3lBdHRhY2hlZFRvUHJvcGVydHkiLCAKKwkJCSAgICAgICAgICAgICAgICAgICAgICBwcy5nZXROYW1lKCkudG9TdHJpbmcoKSk7CQkgICAgICAgIAorCQkgICAgICAgIH0KKwkJICAgICAgICAKKwkJICAgICAgCisJCSAgICAgICAgLy8gVGhlIG5vZGUgY2FuIGJlIGEgY29tcG9uZW50LCBzZXJ2aWNlLCByZWZlcmVuY2Ugb3IgYmluZGluZworCQkgICAgICAgIFN0cmluZyBpbmRleCA9IGdldFN0cnVjdHVyYWxVUkkobm9kZSk7CisJCSAgICAgICAgUG9saWN5U3ViamVjdCBzdWJqZWN0ID0gbG9va3VwKGNvbXBvc2l0ZSwgaW5kZXgpOworCQkgICAgICAgIGlmIChzdWJqZWN0ICE9IG51bGwpIHsKKwkJICAgICAgICAJcHMuc2V0SXNFeHRlcm5hbEF0dGFjaG1lbnQodHJ1ZSk7CisJCSAgICAgICAgCS8vIFJlbW92ZSBhbnkgUG9saWN5U2V0cyB3aXRoIHRoZSBzYW1lIG5hbWUgdGhhdCBtYXkgaGF2ZSBiZWVuIGFkZGVkCisJCSAgICAgICAgCUxpc3Q8UG9saWN5U2V0PiBzdWJqZWN0UFNDb3B5ID0gbmV3IEFycmF5TGlzdDxQb2xpY3lTZXQ+KHN1YmplY3QuZ2V0UG9saWN5U2V0cygpKTsKKwkJICAgICAgICAJZm9yICggUG9saWN5U2V0IGV4aXN0aW5nUFMgOiBzdWJqZWN0UFNDb3B5ICkgeworCQkgICAgICAgIAkJaWYgKCBleGlzdGluZ1BTLmdldE5hbWUoKS5lcXVhbHMocHMuZ2V0TmFtZSgpKSApIHsKKwkJICAgICAgICAJCQlzdWJqZWN0LmdldFBvbGljeVNldHMoKS5yZW1vdmUoZXhpc3RpbmdQUyk7CisJCSAgICAgICAgCQl9CisJCSAgICAgICAgCX0KKwkJICAgICAgICAJc3ViamVjdC5nZXRQb2xpY3lTZXRzKCkuYWRkKHBzKTsKKwkJICAgICAgICB9IGVsc2UgeworCQkgICAgICAgIAkvLyByYWlzZSBhIHdhcm5pbmcgdGhhdCB0aGUgWFBhdGggbm9kZSBkaWRuJ3QgbWF0Y2ggYSBub2RlIGluIHRoZSAKKwkJICAgICAgICAJLy8gbW9kZWxzCisJCSAgICAgICAgCU1vbml0b3Iud2FybmluZyhtb25pdG9yLCAKKwkJICAgICAgICAJCQl0aGlzLCAKKwkJICAgICAgICAJCQlCVUlMREVSX1ZBTElEQVRJT05fQlVORExFLCAKKwkJICAgICAgICAJCQkiUG9saWN5RE9NTW9kZWxNaXNzbWF0Y2giLCAKKwkJICAgICAgICAJCQlwcy5nZXROYW1lKCkudG9TdHJpbmcoKSwKKwkJICAgICAgICAJCQlpbmRleCk7CisJCSAgICAgICAgfQorCQkgICAgICAgIAorCQkgICAgfQkJCQkKKwl9CisKKwkvKioKKwkgKiAJUE9MXzQwMDAyIC0geW91IGNhbid0IGF0dGFjaCBhIHBvbGljeSB0byBhIHByb3BlcnR5IG5vZGUgCisJICogb3Igb25lIG9mIGl0J3MgY2hpbGRyZW4uIHdhbGsgYmFja3dhcmRzIHVwIHRoZSBub2RlIHRyZWUgCisJICogbG9va2luZyBmb3IgYW4gZWxlbWVudCBjYWxsZWQgcHJvcGVydHkgYW5kIHJhaXNlIGFuIGVycm9yIAorCSAqIGlmIHdlIGZpbmQgb25lCisJICogQHBhcmFtIG5vZGUKKwkgKiBAcmV0dXJuCisJICovCisJcHJpdmF0ZSBib29sZWFuIGlzQXR0YWNoZWRUb1Byb3BlcnR5KE5vZGUgbm9kZSkgeworCisJCU5vZGUgdGVzdE5vZGUgPSBub2RlOworCQl3aGlsZSAodGVzdE5vZGUgIT0gbnVsbCl7CisJCSAgICBpZiAoKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkgJiYKKwkJICAgICAgICAobm9kZS5nZXRMb2NhbE5hbWUoKS5lcXVhbHMoInByb3BlcnR5IikpKXsKKwkJICAgIAlyZXR1cm4gdHJ1ZTsJCSAgICAgICAKKwkJICAgIH0gICAgICAgICAgICAgICAgICAgIAkKKwkJICAgIHRlc3ROb2RlID0gdGVzdE5vZGUuZ2V0UGFyZW50Tm9kZSgpOworCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKICAgICBwcm90ZWN0ZWQgRG9jdW1lbnQgc2F2ZUFzRE9NKENvbXBvc2l0ZSBjb21wb3NpdGUpIHRocm93cyBYTUxTdHJlYW1FeGNlcHRpb24sIENvbnRyaWJ1dGlvbldyaXRlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwKICAgICAgICAgU0FYRXhjZXB0aW9uIHsKICAgICAgICAgLy8gRmlyc3Qgd3JpdGUgdGhlIGNvbXBvc2l0ZSBpbnRvIGEgRE9NIGRvY3VtZW50IHNvIHRoYXQgd2UgY2FuIGFwcGx5IHRoZSB4cGF0aApAQCAtMjI4LDYgKzI2NSw4IEBACiAgICAgICAgICAgICAgICAgU3RyaW5nIHVyaSA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGVOUyhudWxsLCAidXJpIik7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHJlZmVyZW5jZSA9ICgoRWxlbWVudClub2RlKS5nZXRBdHRyaWJ1dGVOUyhudWxsLCAibmFtZSIpOwogICAgICAgICAgICAgICAgIHJldHVybiB1cmkgKyAiI3JlZmVyZW5jZSgiICsgcmVmZXJlbmNlICsgIikiOworICAgICAgICAgICAgfSBlbHNlIGlmICggbmV3IFFOYW1lKEJhc2UuU0NBMTFfTlMsICJjb21wb3NpdGUiKS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgIAlyZXR1cm4gIiI7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFN0cmluZyBsb2NhbE5hbWUgPSBub2RlLmdldExvY2FsTmFtZSgpOwogICAgICAgICAgICAgICAgIGlmIChsb2NhbE5hbWUuc3RhcnRzV2l0aCgiYmluZGluZy4iKSkgewpAQCAtMjQxLDYgKzI4MCwxMiBAQAogICAgICAgICAgICAgICAgICAgICBFbGVtZW50IGNvbXBvbmVudCA9IChFbGVtZW50KW5vZGUuZ2V0UGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gY29tcG9uZW50LmdldEF0dHJpYnV0ZU5TKG51bGwsICJ1cmkiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVyaSArICIjaW1wbGVtZW50YXRpb24oKSI7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbE5hbWUuc3RhcnRzV2l0aCgiaW50ZXJmYWNlLiIpKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIAlFbGVtZW50IGNvbnRyYWN0ID0gKEVsZW1lbnQpbm9kZS5nZXRQYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgCVN0cmluZyBjb250cmFjdE5hbWUgPSBjb250cmFjdC5nZXRBdHRyaWJ1dGVOUyhudWxsLCAibmFtZSIpOworICAgICAgICAgICAgICAgIAlFbGVtZW50IGNvbXBvbmVudCA9IChFbGVtZW50KW5vZGUuZ2V0UGFyZW50Tm9kZSgpLmdldFBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAgICAJU3RyaW5nIHVyaSA9IGNvbXBvbmVudC5nZXRBdHRyaWJ1dGVOUyhudWxsLCAidXJpIik7CisgICAgICAgICAgICAgICAgCXJldHVybiB1cmkgKyAiIyIgKyBjb250cmFjdE5hbWUgKyAiI2ludGVyZmFjZSgpIjsgLy8oIiArIGNvbnRyYWN0TmFtZSArICIvIiArIGludGVyZmFjZU5hbWUgKyAiKSIKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI1OSwxMiArMzA0LDE1IEBACiAgICAgcHJvdGVjdGVkIFBvbGljeVN1YmplY3QgbG9va3VwKENvbXBvc2l0ZSBjb21wb3NpdGUsIFN0cmluZyBzdHJ1Y3R1cmFsVVJJKSB7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmFsVVJJID09IG51bGwpIHsKICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9IGVsc2UgaWYgKCBzdHJ1Y3R1cmFsVVJJLmVxdWFscygiIikpIHsKKyAgICAgICAgCXJldHVybiBjb21wb3NpdGU7CiAgICAgICAgIH0KICAgICAgICAgaW50IGluZGV4ID0gc3RydWN0dXJhbFVSSS5pbmRleE9mKCcjJyk7CiAgICAgICAgIFN0cmluZyBjb21wb25lbnRVUkkgPSBzdHJ1Y3R1cmFsVVJJOwogICAgICAgICBTdHJpbmcgc2VydmljZSA9IG51bGw7CiAgICAgICAgIFN0cmluZyByZWZlcmVuY2UgPSBudWxsOwogICAgICAgICBTdHJpbmcgYmluZGluZyA9IG51bGw7CisgICAgICAgIGJvb2xlYW4gaXNJbnRlcmZhY2UgPSBmYWxzZTsKICAgICAgICAgYm9vbGVhbiBpbXBsID0gZmFsc2U7CiAKICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CkBAIC0yOTIsNiArMzQwLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgPSBwYXRoOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCJyZWZlcmVuY2UiLmVxdWFscyhwcmVmaXgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UgPSBwYXRoOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBwcmVmaXguaW5kZXhPZigiI2ludGVyZmFjZSIpICE9IC0xICkgeworICAgICAgICAgICAgICAgICAgICAJc2VydmljZSA9IHByZWZpeC5zdWJzdHJpbmcoMCwgcHJlZml4LmluZGV4T2YoIiNpbnRlcmZhY2UiKSk7CisgICAgICAgICAgICAgICAgICAgIAlpc0ludGVyZmFjZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMDAsNyArMzUxLDkgQEAKICAgICAgICAgICAgIGlmIChjb21wb25lbnQuZ2V0VVJJKCkuZXF1YWxzKGNvbXBvbmVudFVSSSkpIHsKICAgICAgICAgICAgICAgICBpZiAoc2VydmljZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudFNlcnZpY2UgY29tcG9uZW50U2VydmljZSA9IGNvbXBvbmVudC5nZXRTZXJ2aWNlKHNlcnZpY2UpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYmluZGluZyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICggaXNJbnRlcmZhY2UgKSB7CisgICAgICAgICAgICAgICAgICAgIAlyZXR1cm4gY29tcG9uZW50U2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpLmdldEludGVyZmFjZSgpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpbmRpbmcgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgQmluZGluZyBiID0gZ2V0QmluZGluZyhjb21wb25lbnRTZXJ2aWNlLCBiaW5kaW5nKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiIGluc3RhbmNlb2YgUG9saWN5U3ViamVjdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoUG9saWN5U3ViamVjdCliOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2J1aWxkZXIvYnVpbGRlci12YWxpZGF0aW9uLW1lc3NhZ2VzLnByb3BlcnRpZXMgYi9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9idWlsZGVyLXZhbGlkYXRpb24tbWVzc2FnZXMucHJvcGVydGllcwppbmRleCA2MjI4MGFjLi4yZDUxOWEyIDEwMDY0NAotLS0gYS9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9idWlsZGVyLXZhbGlkYXRpb24tbWVzc2FnZXMucHJvcGVydGllcworKysgYi9tb2R1bGVzL2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYnVpbGRlci9idWlsZGVyLXZhbGlkYXRpb24tbWVzc2FnZXMucHJvcGVydGllcwpAQCAtMzIsNCArMzIsOCBAQAogTXV0dWFsbHlFeGNsdXNpdmVJbnRlbnRzQXRCdWlsZCA9IFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHswfSBhbmQgezF9IGFyZSBtdXR1YWxseSBleGNsdXNpdmUKIEludGVudE5vdEZvdW5kQXRCdWlsZCA9IEludGVudCB7MH0gaXMgbm90IGRlZmluZWQgaW4gU0NBIGRlZmluaXRpb25zCiBOb0xpc3RlbmVySW50ZW50U3BlY2lmaWVkT25TZXJ2aWNlID0gVGhlIG5vTGlzdGVuZXIgaW50ZW50IG1heSBvbmx5IGJlIHNwZWNpZmllZCBvbiBhIHJlZmVyZW5jZS4KLQorVHJhbnNhY3RlZE9uZVdheVdpdGhNYW5hZ2VkVHJhbnNhY3Rpb25Mb2NhbCA9IFRoZSBDb21wb25lbnQgezB9IHsyfSBjYW4gbm90IHJlcXVpcmUgdHJhbnNhY3RlZE9uZVdheSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgQ29tcG9uZW50IHsxfSByZXF1aXJlcyBtYW5hZ2VkVHJhbnNhY3Rpb24ubG9jYWwKK1Byb3BhZ2F0ZXNUcmFuc2FjdGlvbldpdGhOb01hbmFnZWRUcmFuID0gVGhlIGNvbXBvbmVudCB7MH0gezJ9IGNhbiBub3QgcmVxdWlyZSBwcm9wYWdhdGVzVHJhbnNhY3Rpb24gYmVjYXVzZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGNvbXBvbmVudCB7MX0gcmVxdWlyZXMgbm9NYW5hZ2VkVHJhbnNhY3Rpb24KK1RyYW5zYWN0ZWRPbmVXYXlXaXRoVHdvV2F5T3AgPSBUaGUgY29tcG9uZW50IHJlZmVyZW5jZSB7MH0gY2FuIG5vdCByZXF1aXJlIHRyYW5zYWN0ZWRPbmVXYXkgYmVjYXVzZSB0aGUgb3BlcmF0aW9uIHsxfSBpcyBhIHR3byB3YXkgb3BlcmF0aW9uCitJbW1lZGlhdGVPbmVXYXlXaXRoVHdvV2F5T3AgPSBUaGUgY29tcG9uZW50IHJlZmVyZW5jZSB7MH0gY2FuIG5vdCByZXF1aXJlIGltbWVkaWF0ZU9uZVdheSBiZWNhdXNlIHRoZSBvcGVyYXRpb24gezF9IGlzIGEgdHdvIHdheSBvcGVyYXRpb24KK1Byb3BhZ2F0ZXNUcmFuc2FjdGlvbldpdGhMb2NhbFRyYW4gPSBUaGUgY29tcG9uZW50IHswfSB7Mn0gY2FuIG5vdCByZXF1aXJlIHByb3BhZ2F0ZXNUcmFuc2FjdGlvbiBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgY29tcG9uZW50IHsxfSByZXF1aXJlcyBtYW5hZ2VkVHJhbnNhY3Rpb24ubG9jYWwKZGlmZiAtLWdpdCBhL21vZHVsZXMvY29tbW9uLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbW1vbi9odHRwL0hUVFBIZWFkZXIuamF2YSBiL21vZHVsZXMvY29tbW9uLWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbW1vbi9odHRwL0hUVFBIZWFkZXIuamF2YQppbmRleCA0MDY5MWRmLi42M2Y2MmQxIDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvbW1vbi1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb21tb24vaHR0cC9IVFRQSGVhZGVyLmphdmEKKysrIGIvbW9kdWxlcy9jb21tb24taHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29tbW9uL2h0dHAvSFRUUEhlYWRlci5qYXZhCkBAIC03MCw0ICs3MCw5IEBACiAgICAgcHVibGljIHZvaWQgc2V0VmFsdWUoU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gIkhUVFBIZWFkZXIgW25hbWU9IiArIG5hbWUgKyAiLCB2YWx1ZT0iICsgdmFsdWUgKyAiXSI7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb21tb24teG1sL3BvbS54bWwgYi9tb2R1bGVzL2NvbW1vbi14bWwvcG9tLnhtbAppbmRleCA1OTQ0OTQ4Li5hN2EzZDg1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvbW1vbi14bWwvcG9tLnhtbAorKysgYi9tb2R1bGVzL2NvbW1vbi14bWwvcG9tLnhtbApAQCAtNjEsNyArNjEsNyBAQAogICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPndzdHgtYXNsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjIuNDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+My4yLjY8L3ZlcnNpb24+CiAgICAgICAgICAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CiAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb250cmlidXRpb24tb3NnaS9wb20ueG1sIGIvbW9kdWxlcy9jb250cmlidXRpb24tb3NnaS9wb20ueG1sCmluZGV4IDdmYzQ0MDYuLmQxYTQzM2QgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29udHJpYnV0aW9uLW9zZ2kvcG9tLnhtbAorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1vc2dpL3BvbS54bWwKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3R4LWFzbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPgorICAgICAgICAgICAgPHZlcnNpb24+My4yLjY8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CiAgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2UvTElDRU5TRSBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL0xJQ0VOU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFhOTA2YwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL0xJQ0VOU0UKQEAgLTAsMCArMSwyMDUgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKworCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjNmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDM2IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitFeHBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2UNCitTQ0EtVmVyc2lvbjogMS4xDQorQnVuZGxlLU5hbWU6IEFwYWNoZSBUdXNjYW55IFNDQSBSZXNvdXJjZSBJbXBvcnQvRXhwb3J0IE1vZGVsDQorQnVuZGxlLVZlbmRvcjogVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQorQnVuZGxlLVZlcnNpb246IDIuMC4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1MaWNlbnNlOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0DQorQnVuZGxlLURlc2NyaXB0aW9uOiBBcGFjaGUgVHVzY2FueSBTQ0EgUmVzb3VyY2UgSW1wb3J0L0V4cG9ydCBNb2RlbA0KK0ltcG9ydC1QYWNrYWdlOiBqYXZheC54bWwubmFtZXNwYWNlLA0KKyBqYXZheC54bWwucGFyc2VycywNCisgamF2YXgueG1sLnN0cmVhbSwNCisgamF2YXgueG1sLnN0cmVhbS5ldmVudHMsDQorIGphdmF4LnhtbC5zdHJlYW0udXRpbCwNCisgamF2YXgueG1sLnRyYW5zZm9ybSwNCisgamF2YXgueG1sLnRyYW5zZm9ybS5zYXgsDQorIGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLA0KKyBqYXZheC54bWwudmFsaWRhdGlvbiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseTt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuaW1wbCwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54c2Q7dmVyc2lvbj0iMi4wLjAiO3Jlc29sdXRpb246PW9wdGlvbmFsLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi5qYXZhLmlvO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24ueG1sO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24ueG1sLnN0YXg7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvcjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLnczYy5kb20sDQorIG9yZy53M2MuZG9tLmxzLA0KKyBvcmcueG1sLnNheCwNCisgb3JnLnhtbC5zYXguaGVscGVycw0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlDQorQnVuZGxlLURvY1VSTDogaHR0cDovL3d3dy5hcGFjaGUub3JnLw0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNSxKYXZhU0UtMS42CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9OT1RJQ0UgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViYjg5YwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL05PVElDRQpAQCAtMCwwICsxLDYgQEAKKyR7cG9tLm5hbWV9CitDb3B5cmlnaHQgKGMpIDIwMDUgLSAyMDA5IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorCitUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5CitUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLgorCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9wb20ueG1sIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2UvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmY2MDAzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2UvcG9tLnhtbApAQCAtMCwwICsxLDU3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktbW9kdWxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbnRyaWJ1dGlvbi1yZXNvdXJjZTwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgUmVzb3VyY2UgSW1wb3J0L0V4cG9ydCBNb2RlbDwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmUtc3BpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3R4LWFzbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+c3RheDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RheC1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvUmVzb3VyY2VFeHBvcnQuamF2YSBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvUmVzb3VyY2VFeHBvcnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTY1YjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9SZXNvdXJjZUV4cG9ydC5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2U7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uRXhwb3J0OworCisKKy8qKgorICogVGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuIHJlc291cmNlIGV4cG9ydC4KKyAqCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGludGVyZmFjZSBSZXNvdXJjZUV4cG9ydCBleHRlbmRzIEV4cG9ydCB7CisJUU5hbWUgVFlQRSA9IG5ldyBRTmFtZShTQ0ExMV9UVVNDQU5ZX05TLCAiZXhwb3J0LnJlc291cmNlIik7CisKKyAgICAvKioKKyAgICAgKiBHZXQgUmVzb3VyY2UgVVJJIHRoYXQgaWRlbnRpZmllcyB0aGUgZXhwb3J0LgorICAgICAqCisgICAgICogQHJldHVybiBUaGUgZXhwb3J0ZWQgcmVzb3VyY2UgVVJJCisgICAgICovCisgICAgU3RyaW5nIGdldFVSSSgpOworCisgICAgLyoqCisgICAgICogU2V0IFJlc291cmNlIFVSSSB0aGF0IGlkZW50aWZpZXMgdGhlIGV4cG9ydC4KKyAgICAgKgorICAgICAqIEBwYXJhbSB1cmkgVGhlIGV4cG9ydGVkIHJlc291cmNlIFVSSQorICAgICAqLworICAgIHZvaWQgc2V0VVJJKFN0cmluZyB1cmkpOworCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL1Jlc291cmNlSW1wb3J0LmphdmEgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL1Jlc291cmNlSW1wb3J0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiYTk0OAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvUmVzb3VyY2VJbXBvcnQuamF2YQpAQCAtMCwwICsxLDYyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlOworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkltcG9ydDsKKworLyoqCisgKiBUaGUgcmVwcmVzZW50YXRpb24gb2YgYW4gcmVzb3VyY2UgaW1wb3J0LgorICoKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgaW50ZXJmYWNlIFJlc291cmNlSW1wb3J0IGV4dGVuZHMgSW1wb3J0IHsKKwlRTmFtZSBUWVBFID0gbmV3IFFOYW1lKFNDQTExX1RVU0NBTllfTlMsICJpbXBvcnQucmVzb3VyY2UiKTsKKworICAgIC8qKgorICAgICAqIEdldCB0aGUgbG9jYXRpb24gdXNlZCB0byByZXNvbHZlIHRoZSBkZWZpbml0aW9ucyBmb3IgdGhpcyBpbXBvcnQKKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGltcG9ydCBsb2NhdGlvbgorICAgICAqLworICAgIFN0cmluZyBnZXRMb2NhdGlvbigpOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSBsb2NhdGlvbiB1c2VkIHRvIHJlc29sdmUgdGhlIGRlZmluaXRpb25zIGZvciB0aGlzIGltcG9ydAorICAgICAqCisgICAgICogQHBhcmFtIGxvY2F0aW9uIFRoZSBpbXBvcnQgbG9jYXRpb24KKyAgICAgKi8KKyAgICB2b2lkIHNldExvY2F0aW9uKFN0cmluZyBsb2NhdGlvbik7CisKKyAgICAvKioKKyAgICAgKiBHZXQgVVJJIHRoYXQgaWRlbnRpZmllcyB0aGUgcmVzb3VyY2UgaW1wb3J0CisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBVUkkKKyAgICAgKi8KKyAgICBTdHJpbmcgZ2V0VVJJKCk7CisKKyAgICAvKioKKyAgICAgKiBTZXQgVVJJIHRoYXQgaWRlbnRpZmllcyB0aGUgcmVzb3VyY2UgaW1wb3J0CisgICAgICoKKyAgICAgKiBAcGFyYW0gdXJpIFRoZSByZXNvdXJjZSBVUkkKKyAgICAgKi8KKyAgICB2b2lkIHNldFVSSShTdHJpbmcgdXJpKTsKKworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvUmVzb3VyY2VJbXBvcnRFeHBvcnRGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL1Jlc291cmNlSW1wb3J0RXhwb3J0RmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMTljMzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL1Jlc291cmNlSW1wb3J0RXhwb3J0RmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2U7CisKKy8qKgorICogQmFzZSBSZXNvdXJjZSBpbXBvcnQvZXhwb3J0IG1vZGVsIGZhY3RvcnkKKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgUmVzb3VyY2VJbXBvcnRFeHBvcnRGYWN0b3J5IHsKKworICAgIC8qKgorICAgICAqIENyZWF0ZSBhIHJlc291cmNlIGltcG9ydCBtb2RlbCBvYmplY3QKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIFRoZSBuZXcgUmVzb3VyY2VJbXBvcnQgbW9kZWwgb2JqZWN0CisgICAgICovCisgICAgUmVzb3VyY2VJbXBvcnQgY3JlYXRlUmVzb3VyY2VJbXBvcnQoKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBDcmVhdGUgYSByZXNvdXJjZSBleHBvcnQgbW9kZWwgb2JqZWN0CisgICAgICogCisgICAgICogQHJldHVybiBUaGUgbmV3IFJlc291cmNlRXhwb3J0IG1vZGVsIG9iamVjdAorICAgICAqLworICAgIFJlc291cmNlRXhwb3J0IGNyZWF0ZVJlc291cmNlRXhwb3J0KCk7Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL2ltcGwvQXJ0aWZhY3RNb2RlbFJlc29sdmVyLmphdmEgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL2ltcGwvQXJ0aWZhY3RNb2RlbFJlc29sdmVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RjZGZkMwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvaW1wbC9BcnRpZmFjdE1vZGVsUmVzb2x2ZXIuamF2YQpAQCAtMCwwICsxLDg4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLmltcGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQXJ0aWZhY3Q7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQ29udHJpYnV0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkltcG9ydDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuUHJvY2Vzc29yQ29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvbHZlci5Nb2RlbFJlc29sdmVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLlJlc291cmNlSW1wb3J0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5GYWN0b3J5RXh0ZW5zaW9uUG9pbnQ7CisKKy8qKgorICogQSBNb2RlbCBSZXNvbHZlciBmb3IgY29udHJpYnV0aW9uIGFydGlmYWN0cy4KKyAqCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIEFydGlmYWN0TW9kZWxSZXNvbHZlciBpbXBsZW1lbnRzIE1vZGVsUmVzb2x2ZXIgeworICAgIHByaXZhdGUgQ29udHJpYnV0aW9uIGNvbnRyaWJ1dGlvbjsKKyAgICBwcml2YXRlIE1hcDxTdHJpbmcsIEFydGlmYWN0PiBtYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIEFydGlmYWN0PigpOworCisgICAgcHVibGljIEFydGlmYWN0TW9kZWxSZXNvbHZlcihDb250cmlidXRpb24gY29udHJpYnV0aW9uLCBGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMpIHsKKyAgICAJdGhpcy5jb250cmlidXRpb24gPSBjb250cmlidXRpb247CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkTW9kZWwoT2JqZWN0IHJlc29sdmVkLCAgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB7CisgICAgCUFydGlmYWN0IGFydGlmYWN0ID0gKEFydGlmYWN0KXJlc29sdmVkOworICAgIAltYXAucHV0KGFydGlmYWN0LmdldFVSSSgpLCBhcnRpZmFjdCk7CisgICAgfQorCisgICAgcHVibGljIE9iamVjdCByZW1vdmVNb2RlbChPYmplY3QgcmVzb2x2ZWQsICBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHsKKyAgICAJcmV0dXJuIG1hcC5yZW1vdmUoKChBcnRpZmFjdClyZXNvbHZlZCkuZ2V0VVJJKCkpOworICAgIH0KKworICAgIHB1YmxpYyA8VD4gVCByZXNvbHZlTW9kZWwoQ2xhc3M8VD4gbW9kZWxDbGFzcywgVCB1bnJlc29sdmVkLCAgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB7CisKKyAgICAJLy8gR2V0IHRoZSBhcnRpZmFjdCBVUkkKKyAgICAgICAgU3RyaW5nIHVyaSA9ICgoQXJ0aWZhY3QpdW5yZXNvbHZlZCkuZ2V0VVJJKCk7CisgICAgICAgIGlmICh1cmkgPT0gbnVsbCkgeworICAgICAgICAJcmV0dXJuIChUKXVucmVzb2x2ZWQ7CisgICAgICAgIH0KKworICAgICAgICAvLyBMb29rdXAgdGhlIGFydGlmYWN0CisgICAgICAgIEFydGlmYWN0IHJlc29sdmVkID0gKEFydGlmYWN0KSBtYXAuZ2V0KHVyaSk7CisgICAgICAgIGlmIChyZXNvbHZlZCAhPSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbW9kZWxDbGFzcy5jYXN0KHJlc29sdmVkKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIG5vdCBmb3VuZCwgZGVsZWdhdGUgdGhlIHJlc29sdXRpb24gdG8gdGhlIGltcG9ydHMgKGluIHRoaXMgY2FzZSBiYXNlZCBvbiB0aGUgcmVzb3VyY2UgaW1wb3J0cykKKyAgICAgICAgZm9yIChJbXBvcnQgaW1wb3J0XyA6IHRoaXMuY29udHJpYnV0aW9uLmdldEltcG9ydHMoKSkgeworICAgICAgICAgICAgaWYgKGltcG9ydF8gaW5zdGFuY2VvZiBSZXNvdXJjZUltcG9ydCkgeworICAgICAgICAgICAgCVJlc291cmNlSW1wb3J0IHJlc291cmNlSW1wb3J0ID0gKFJlc291cmNlSW1wb3J0KWltcG9ydF87CisgICAgICAgICAgICAJLy9jaGVjayB0aGUgaW1wb3J0IGxvY2F0aW9uIGFnYWluc3QgdGhlIGNvbXB1dGVkIHBhY2thZ2UgbmFtZSBmcm9tIHRoZSBjb21wb25lbnRUeXBlIFVSSQorICAgICAgICAgICAgICAgIGlmICgocmVzb3VyY2VJbXBvcnQuZ2V0VVJJKCkuZXF1YWxzKHVyaSkpICYmCisgICAgICAgICAgICAgICAgICAgIChyZXNvdXJjZUltcG9ydC5nZXRNb2RlbFJlc29sdmVyKCkgIT0gbnVsbCkpeworICAgICAgICAgICAgICAgICAgICAvLyBEZWxlZ2F0ZSB0aGUgcmVzb2x1dGlvbiB0byB0aGUgaW1wb3J0IHJlc29sdmVyCisgICAgICAgICAgICAgICAgICAgIHJlc29sdmVkID0gcmVzb3VyY2VJbXBvcnQuZ2V0TW9kZWxSZXNvbHZlcigpLnJlc29sdmVNb2RlbChBcnRpZmFjdC5jbGFzcywgKEFydGlmYWN0KXVucmVzb2x2ZWQsIGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc29sdmVkLmlzVW5yZXNvbHZlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWxDbGFzcy5jYXN0KHJlc29sdmVkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoVCl1bnJlc29sdmVkOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9pbXBsL1Jlc291cmNlRXhwb3J0SW1wbC5qYXZhIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9pbXBsL1Jlc291cmNlRXhwb3J0SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYmE1YmMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL2ltcGwvUmVzb3VyY2VFeHBvcnRJbXBsLmphdmEKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5pbXBsOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5pbXBsLkV4dGVuc2libGVJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLk1vZGVsUmVzb2x2ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2UuUmVzb3VyY2VFeHBvcnQ7CisKKy8qKgorICogVGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGV4cG9ydCBmb3IgdGhlIGNvbnRyaWJ1dGlvbgorICoKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgUmVzb3VyY2VFeHBvcnRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUltcGwgaW1wbGVtZW50cyBSZXNvdXJjZUV4cG9ydCB7CisgICAgLyoqCisgICAgICogVGhlIHJlc291cmNlIFVSSSB0byBiZSBleHBvcnRlZAorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIHVyaTsKKworICAgIHByaXZhdGUgTW9kZWxSZXNvbHZlciBtb2RlbFJlc29sdmVyOworCisgICAgcHJvdGVjdGVkIFJlc291cmNlRXhwb3J0SW1wbCgpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpIHsKKyAgICAgICAgcmV0dXJuIHVyaTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVUkkoU3RyaW5nIHVyaSkgeworICAgICAgICB0aGlzLnVyaSA9IHVyaTsKKyAgICB9CisKKyAgICBwdWJsaWMgTW9kZWxSZXNvbHZlciBnZXRNb2RlbFJlc29sdmVyKCkgeworICAgICAgICByZXR1cm4gbW9kZWxSZXNvbHZlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRNb2RlbFJlc29sdmVyKE1vZGVsUmVzb2x2ZXIgbW9kZWxSZXNvbHZlcikgeworICAgICAgICB0aGlzLm1vZGVsUmVzb2x2ZXIgPSBtb2RlbFJlc29sdmVyOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9pbXBsL1Jlc291cmNlRXhwb3J0TW9kZWxSZXNvbHZlci5qYXZhIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9pbXBsL1Jlc291cmNlRXhwb3J0TW9kZWxSZXNvbHZlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ZWU1NWUKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL2ltcGwvUmVzb3VyY2VFeHBvcnRNb2RlbFJlc29sdmVyLmphdmEKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5pbXBsOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQXJ0aWZhY3Q7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlByb2Nlc3NvckNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb2x2ZXIuTW9kZWxSZXNvbHZlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5SZXNvdXJjZUV4cG9ydDsKKworLyoqCisgKiBBIG1vZGVsIHJlc29sdmVyIGZvciByZXNvdXJjZSBleHBvcnRzLgorICoKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgUmVzb3VyY2VFeHBvcnRNb2RlbFJlc29sdmVyIGltcGxlbWVudHMgTW9kZWxSZXNvbHZlciB7CisKKyAgICBwcml2YXRlIFJlc291cmNlRXhwb3J0IGV4cG9ydDsKKyAgICBwcml2YXRlIE1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXI7CisKKyAgICBwdWJsaWMgUmVzb3VyY2VFeHBvcnRNb2RlbFJlc29sdmVyKFJlc291cmNlRXhwb3J0IGV4cG9ydCwgTW9kZWxSZXNvbHZlciByZXNvbHZlcikgeworICAgICAgICB0aGlzLmV4cG9ydCA9IGV4cG9ydDsKKyAgICAgICAgdGhpcy5yZXNvbHZlciA9IHJlc29sdmVyOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZE1vZGVsKE9iamVjdCByZXNvbHZlZCwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IHJlbW92ZU1vZGVsKE9iamVjdCByZXNvbHZlZCwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBwdWJsaWMgPFQ+IFQgcmVzb2x2ZU1vZGVsKENsYXNzPFQ+IG1vZGVsQ2xhc3MsIFQgdW5yZXNvbHZlZCwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB7CisKKyAgICAgICAgLy8gRmlsdGVyIGJhc2VkIG9uIHRoZSBhcnRpZmFjdCBVUkkKKyAgICAgICAgQXJ0aWZhY3QgYXJ0aWZhY3QgPSAoQXJ0aWZhY3QpdW5yZXNvbHZlZDsKKyAgICAgICAgaWYgKGV4cG9ydC5nZXRVUkkoKS5lcXVhbHMoYXJ0aWZhY3QuZ2V0VVJJKCkpKSB7CisKKyAgICAgICAgICAgIC8vIFRoZSBhcnRpZmFjdCBVUkkgbWF0Y2hlcyB0aGUgZXhwb3J0ZWQgVVJJLCBkZWxlZ2F0ZSB0byB0aGUKKyAgICAgICAgICAgIC8vIGNvbnRyaWJ1dGlvbidzIHJlc29sdmVyCisgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZXIucmVzb2x2ZU1vZGVsKG1vZGVsQ2xhc3MsIHVucmVzb2x2ZWQsIGNvbnRleHQpOworICAgICAgICB9IGVsc2UgeworCisgICAgICAgICAgICAvLyBUaGUgYXJ0aWZhY3QgVVJJIGlzIG5vdCBleHBvcnRlZCwgcmV0dXJuIHRoZSB1bnJlc29sdmVkIG9iamVjdAorICAgICAgICAgICAgcmV0dXJuIHVucmVzb2x2ZWQ7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvaW1wbC9SZXNvdXJjZUV4cG9ydFByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9pbXBsL1Jlc291cmNlRXhwb3J0UHJvY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE1MzM4YwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvaW1wbC9SZXNvdXJjZUV4cG9ydFByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLmltcGw7CisKK2ltcG9ydCBzdGF0aWMgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuU1RBUlRfRUxFTUVOVDsKKworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHM7CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Xcml0ZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uV3JpdGVFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlByb2Nlc3NvckNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvbHZlci5Nb2RlbFJlc29sdmVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLlJlc291cmNlRXhwb3J0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLlJlc291cmNlSW1wb3J0RXhwb3J0RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRmFjdG9yeUV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Nb25pdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Qcm9ibGVtOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Qcm9ibGVtLlNldmVyaXR5OworCisvKioKKyAqIEFydGlmYWN0IHByb2Nlc3NvciBmb3IgUmVzb3VyY2UgZXhwb3J0CisgKgorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBSZXNvdXJjZUV4cG9ydFByb2Nlc3NvciBpbXBsZW1lbnRzIFN0QVhBcnRpZmFjdFByb2Nlc3NvcjxSZXNvdXJjZUV4cG9ydD4geworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVSSSA9ICJ1cmkiOworCisgICAgcHJpdmF0ZSBmaW5hbCBSZXNvdXJjZUltcG9ydEV4cG9ydEZhY3RvcnkgZmFjdG9yeTsKKworICAgIHB1YmxpYyBSZXNvdXJjZUV4cG9ydFByb2Nlc3NvcihGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMpIHsKKyAgICAgICAgdGhpcy5mYWN0b3J5ID0gbW9kZWxGYWN0b3JpZXMuZ2V0RmFjdG9yeShSZXNvdXJjZUltcG9ydEV4cG9ydEZhY3RvcnkuY2xhc3MpOworICAgIH0KKworCisgICAgLyoqCisgICAgICogUmVwb3J0IGEgZXJyb3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvYmxlbXMKKyAgICAgKiBAcGFyYW0gbWVzc2FnZQorICAgICAqIEBwYXJhbSBtb2RlbAorICAgICAqLworICAgICBwcml2YXRlIHZvaWQgZXJyb3IoTW9uaXRvciBtb25pdG9yLCBTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IG1vZGVsLCBPYmplY3QuLi4gbWVzc2FnZVBhcmFtZXRlcnMpIHsKKyAgICAJIGlmIChtb25pdG9yICE9IG51bGwpIHsKKwkgICAgICAgIFByb2JsZW0gcHJvYmxlbSA9IG1vbml0b3IuY3JlYXRlUHJvYmxlbSh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLCAiY29udHJpYnV0aW9uLXJlc291cmNlLXZhbGlkYXRpb24tbWVzc2FnZXMiLCBTZXZlcml0eS5FUlJPUiwgbW9kZWwsIG1lc3NhZ2UsIChPYmplY3RbXSltZXNzYWdlUGFyYW1ldGVycyk7CisJICAgICAgICBtb25pdG9yLnByb2JsZW0ocHJvYmxlbSk7CisgICAgCSB9CisgICAgIH0KKworICAgIHB1YmxpYyBRTmFtZSBnZXRBcnRpZmFjdFR5cGUoKSB7CisgICAgICAgIHJldHVybiBSZXNvdXJjZUV4cG9ydC5UWVBFOworICAgIH0KKworICAgIHB1YmxpYyBDbGFzczxSZXNvdXJjZUV4cG9ydD4gZ2V0TW9kZWxUeXBlKCkgeworICAgICAgICByZXR1cm4gUmVzb3VyY2VFeHBvcnQuY2xhc3M7CisgICAgfQorCisgICAgLyoqCisgICAgICogUHJvY2VzcyA8ZXhwb3J0LnJlc291cmNlIHVyaT0iIi8+CisgICAgICovCisgICAgcHVibGljIFJlc291cmNlRXhwb3J0IHJlYWQoWE1MU3RyZWFtUmVhZGVyIHJlYWRlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7CisgICAgCVJlc291cmNlRXhwb3J0IHJlc291cmNlRXhwb3J0ID0gdGhpcy5mYWN0b3J5LmNyZWF0ZVJlc291cmNlRXhwb3J0KCk7CisgICAgICAgIFFOYW1lIGVsZW1lbnQgPSBudWxsOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAocmVhZGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIGludCBldmVudCA9IHJlYWRlci5nZXRFdmVudFR5cGUoKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU1RBUlRfRUxFTUVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSByZWFkZXIuZ2V0TmFtZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIDxleHBvcnQucmVzb3VyY2U+CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVzb3VyY2VFeHBvcnQuVFlQRS5lcXVhbHMoZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIFVSSSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVyaSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLCAiQXR0cmlidXRlVVJJTWlzc2luZyIsIHJlYWRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oIkF0dHJpYnV0ZSAndXJpJyBpcyBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlRXhwb3J0LnNldFVSSSh1cmkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBYTUxTdHJlYW1Db25zdGFudHMuRU5EX0VMRU1FTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVzb3VyY2VFeHBvcnQuVFlQRS5lcXVhbHMocmVhZGVyLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb3VyY2VFeHBvcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSBuZXh0IGVsZW1lbnQKKyAgICAgICAgICAgICAgICBpZiAocmVhZGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgICAgICByZWFkZXIubmV4dCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjYXRjaCAoWE1MU3RyZWFtRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24gZXggPSBuZXcgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbihlKTsKKyAgICAgICAgICAgIGVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLCAiWE1MU3RyZWFtRXhjZXB0aW9uIiwgcmVhZGVyLCBleCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzb3VyY2VFeHBvcnQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgd3JpdGUoUmVzb3VyY2VFeHBvcnQgcmVzb3VyY2VFeHBvcnQsIFhNTFN0cmVhbVdyaXRlciB3cml0ZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgdGhyb3dzIENvbnRyaWJ1dGlvbldyaXRlRXhjZXB0aW9uLCBYTUxTdHJlYW1FeGNlcHRpb24geworCisgICAgICAgIC8vIFdyaXRlIDxleHBvcnQucmVzb3VyY2U+CisgICAgICAgIHdyaXRlci53cml0ZVN0YXJ0RWxlbWVudChSZXNvdXJjZUV4cG9ydC5UWVBFLmdldE5hbWVzcGFjZVVSSSgpLCBSZXNvdXJjZUV4cG9ydC5UWVBFLmdldExvY2FsUGFydCgpKTsKKworICAgICAgICBpZiAocmVzb3VyY2VFeHBvcnQuZ2V0VVJJKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgd3JpdGVyLndyaXRlQXR0cmlidXRlKFVSSSwgcmVzb3VyY2VFeHBvcnQuZ2V0VVJJKCkpOworICAgICAgICB9CisKKyAgICAgICAgd3JpdGVyLndyaXRlRW5kRWxlbWVudCgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlc29sdmUoUmVzb3VyY2VFeHBvcnQgcmVzb3VyY2VFeHBvcnQsIE1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgdGhyb3dzIENvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24geworCisgICAgICAgIGlmIChyZXNvdXJjZUV4cG9ydC5nZXRVUkkoKSAhPSBudWxsKQorICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZXhwb3J0J3MgbW9kZWwgcmVzb2x2ZXIKKyAgICAgICAgICAgIHJlc291cmNlRXhwb3J0LnNldE1vZGVsUmVzb2x2ZXIobmV3IFJlc291cmNlRXhwb3J0TW9kZWxSZXNvbHZlcihyZXNvdXJjZUV4cG9ydCwgcmVzb2x2ZXIpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL2ltcGwvUmVzb3VyY2VJbXBvcnRFeHBvcnRGYWN0b3J5SW1wbC5qYXZhIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9pbXBsL1Jlc291cmNlSW1wb3J0RXhwb3J0RmFjdG9yeUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODBmNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9pbXBsL1Jlc291cmNlSW1wb3J0RXhwb3J0RmFjdG9yeUltcGwuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLmltcGw7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5SZXNvdXJjZUV4cG9ydDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5SZXNvdXJjZUltcG9ydDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5SZXNvdXJjZUltcG9ydEV4cG9ydEZhY3Rvcnk7CisKKy8qKgorICogUmVzb3VyY2UgSW1wb3J0L0V4cG9ydCBtb2RlbCBmYWN0b3J5IGltcGxlbWVudGF0aW9uCisgKiAKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgUmVzb3VyY2VJbXBvcnRFeHBvcnRGYWN0b3J5SW1wbCBpbXBsZW1lbnRzIFJlc291cmNlSW1wb3J0RXhwb3J0RmFjdG9yeSB7CisKKyAgICBwdWJsaWMgUmVzb3VyY2VJbXBvcnQgY3JlYXRlUmVzb3VyY2VJbXBvcnQoKSB7CisgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VJbXBvcnRJbXBsKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBSZXNvdXJjZUV4cG9ydCBjcmVhdGVSZXNvdXJjZUV4cG9ydCgpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBSZXNvdXJjZUV4cG9ydEltcGwoKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvaW1wbC9SZXNvdXJjZUltcG9ydEltcGwuamF2YSBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvaW1wbC9SZXNvdXJjZUltcG9ydEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTg2MmEyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9pbXBsL1Jlc291cmNlSW1wb3J0SW1wbC5qYXZhCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLmltcGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuaW1wbC5FeHRlbnNpYmxlSW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5Db250cmlidXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uRXhwb3J0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLk1vZGVsUmVzb2x2ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2UuUmVzb3VyY2VFeHBvcnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2UuUmVzb3VyY2VJbXBvcnQ7CisKKy8qKgorICogVGhlIHJlcHJlc2VudGF0aW9uIG9mIGFuIGltcG9ydCBmb3IgdGhlIGNvbnRyaWJ1dGlvbgorICoKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgUmVzb3VyY2VJbXBvcnRJbXBsIGV4dGVuZHMgRXh0ZW5zaWJsZUltcGwgaW1wbGVtZW50cyBSZXNvdXJjZUltcG9ydCB7CisgICAgLyoqCisgICAgICogVGhlIHJlc291cmNlIFVSSSB0byBiZSBpbXBvcnRlZAorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIHVyaTsKKworICAgIHByaXZhdGUgTW9kZWxSZXNvbHZlciBtb2RlbFJlc29sdmVyOworICAgIHByaXZhdGUgTGlzdDxDb250cmlidXRpb24+IGV4cG9ydENvbnRyaWJ1dGlvbnM7CisKKyAgICAvKioKKyAgICAgKiBPcHRpb25hbCBsb2NhdGlvbiBVUkkgcG9pbnRpbmcgdG8gYSBDb250cmlidXRpb24gdGhhdCBleHBvcnRzIHRoZSByZXNvdXJjZQorICAgICAqLworICAgIHByaXZhdGUgU3RyaW5nIGxvY2F0aW9uOworCisgICAgcHJvdGVjdGVkIFJlc291cmNlSW1wb3J0SW1wbCgpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkgeworICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TG9jYXRpb24oU3RyaW5nIGxvY2F0aW9uKSB7CisgICAgICAgIHRoaXMubG9jYXRpb24gPSBsb2NhdGlvbjsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpIHsKKyAgICAgICAgcmV0dXJuIHVyaTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRVUkkoU3RyaW5nIHVyaSkgeworICAgICAgICB0aGlzLnVyaSA9IHVyaTsKKyAgICB9CisKKyAgICBwdWJsaWMgTW9kZWxSZXNvbHZlciBnZXRNb2RlbFJlc29sdmVyKCkgeworICAgICAgICByZXR1cm4gbW9kZWxSZXNvbHZlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRNb2RlbFJlc29sdmVyKE1vZGVsUmVzb2x2ZXIgbW9kZWxSZXNvbHZlcikgeworICAgICAgICB0aGlzLm1vZGVsUmVzb2x2ZXIgPSBtb2RlbFJlc29sdmVyOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PENvbnRyaWJ1dGlvbj4gZ2V0RXhwb3J0Q29udHJpYnV0aW9ucygpIHsKKyAgICAgICAgcmV0dXJuIGV4cG9ydENvbnRyaWJ1dGlvbnM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0RXhwb3J0Q29udHJpYnV0aW9ucyhMaXN0PENvbnRyaWJ1dGlvbj4gY29udHJpYnV0aW9ucykgeworICAgICAgICB0aGlzLmV4cG9ydENvbnRyaWJ1dGlvbnMgPSBjb250cmlidXRpb25zOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1hdGNoIGEgUmVzb3VyY2VJbXBvcnQgdG8gYSBnaXZlbiBSZXNvdXJjZUV4cG9ydCBiYXNlZCBvbiA6CisgICAgICogICAgbG9jYXRpb24gaXMgbm90IHByb3ZpZGVkCisgICAgICogICAgaW1wb3J0IGFuZCBleHBvcnQgcmVzb3VyY2UgVVJJIG1hdGNoCisgICAgICovCisgICAgcHVibGljIGJvb2xlYW4gbWF0Y2goRXhwb3J0IGV4cG9ydCkgeworICAgICAgICBpZiAoZXhwb3J0IGluc3RhbmNlb2YgUmVzb3VyY2VFeHBvcnQpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmdldExvY2F0aW9uKCkgPT0gbnVsbCB8fCB0aGlzLmdldExvY2F0aW9uKCkubGVuZ3RoKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFVSSSgpLmVxdWFscygoKFJlc291cmNlRXhwb3J0KWV4cG9ydCkuZ2V0VVJJKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICByZXR1cm4gU3RyaW5nLnZhbHVlT2YodXJpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL2ltcGwvUmVzb3VyY2VJbXBvcnRQcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvaW1wbC9SZXNvdXJjZUltcG9ydFByb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMzQxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL2ltcGwvUmVzb3VyY2VJbXBvcnRQcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5pbXBsOworCitpbXBvcnQgc3RhdGljIGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLlNUQVJUX0VMRU1FTlQ7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzOworaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtV3JpdGVyOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvbldyaXRlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Qcm9jZXNzb3JDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb2x2ZXIuTW9kZWxSZXNvbHZlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5SZXNvdXJjZUltcG9ydDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5SZXNvdXJjZUltcG9ydEV4cG9ydEZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkZhY3RvcnlFeHRlbnNpb25Qb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuTW9uaXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuUHJvYmxlbTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuUHJvYmxlbS5TZXZlcml0eTsKKworLyoqCisgKiBBcnRpZmFjdCBwcm9jZXNzb3IgZm9yIE5hbWVzcGFjZSBpbXBvcnQKKyAqCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFJlc291cmNlSW1wb3J0UHJvY2Vzc29yICBpbXBsZW1lbnRzIFN0QVhBcnRpZmFjdFByb2Nlc3NvcjxSZXNvdXJjZUltcG9ydD4geworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVUkkgPSAidXJpIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTE9DQVRJT04gPSAibG9jYXRpb24iOworCisgICAgcHJpdmF0ZSBmaW5hbCBSZXNvdXJjZUltcG9ydEV4cG9ydEZhY3RvcnkgZmFjdG9yeTsKKworICAgIHB1YmxpYyBSZXNvdXJjZUltcG9ydFByb2Nlc3NvcihGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMpIHsKKyAgICAgICAgdGhpcy5mYWN0b3J5ID0gbW9kZWxGYWN0b3JpZXMuZ2V0RmFjdG9yeShSZXNvdXJjZUltcG9ydEV4cG9ydEZhY3RvcnkuY2xhc3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlcG9ydCBhIGVycm9yLgorICAgICAqCisgICAgICogQHBhcmFtIHByb2JsZW1zCisgICAgICogQHBhcmFtIG1lc3NhZ2UKKyAgICAgKiBAcGFyYW0gbW9kZWwKKyAgICAgKi8KKyAgICAgcHJpdmF0ZSB2b2lkIGVycm9yKE1vbml0b3IgbW9uaXRvciwgU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBtb2RlbCwgT2JqZWN0Li4uIG1lc3NhZ2VQYXJhbWV0ZXJzKSB7CisgICAgCSBpZiAobW9uaXRvciAhPSBudWxsKSB7CisJICAgICAgICBQcm9ibGVtIHByb2JsZW0gPSBtb25pdG9yLmNyZWF0ZVByb2JsZW0odGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwgImNvbnRyaWJ1dGlvbi1yZXNvdXJjZS12YWxpZGF0aW9uLW1lc3NhZ2VzIiwgU2V2ZXJpdHkuRVJST1IsIG1vZGVsLCBtZXNzYWdlLCAoT2JqZWN0W10pbWVzc2FnZVBhcmFtZXRlcnMpOworCSAgICAgICAgbW9uaXRvci5wcm9ibGVtKHByb2JsZW0pOworICAgIAkgfQorICAgICB9CisKKyAgICBwdWJsaWMgUU5hbWUgZ2V0QXJ0aWZhY3RUeXBlKCkgeworICAgICAgICByZXR1cm4gUmVzb3VyY2VJbXBvcnQuVFlQRTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2xhc3M8UmVzb3VyY2VJbXBvcnQ+IGdldE1vZGVsVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIFJlc291cmNlSW1wb3J0LmNsYXNzOworICAgIH0KKworICAgIC8qKgorICAgICAqIFByb2Nlc3MgPGltcG9ydC5yZXNvdXJjZSB1cmk9IiIgbG9jYXRpb249IiIvPgorICAgICAqLworICAgIHB1YmxpYyBSZXNvdXJjZUltcG9ydCByZWFkKFhNTFN0cmVhbVJlYWRlciByZWFkZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24geworICAgIAlSZXNvdXJjZUltcG9ydCByZXNvdXJjZUltcG9ydCA9IHRoaXMuZmFjdG9yeS5jcmVhdGVSZXNvdXJjZUltcG9ydCgpOworICAgICAgICBRTmFtZSBlbGVtZW50OworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB3aGlsZSAocmVhZGVyLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIGludCBldmVudCA9IHJlYWRlci5nZXRFdmVudFR5cGUoKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGV2ZW50KSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU1RBUlRfRUxFTUVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSByZWFkZXIuZ2V0TmFtZSgpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIDxpbXBvcnQ+CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVzb3VyY2VJbXBvcnQuVFlQRS5lcXVhbHMoZWxlbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIFVSSSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVyaSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLCAiQXR0cmlidXRlVVJJTWlzc2luZyIsIHJlYWRlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oIkF0dHJpYnV0ZSAndXJpJyBpcyBtaXNzaW5nIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291cmNlSW1wb3J0LnNldFVSSSh1cmkpOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsIExPQ0FUSU9OKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUltcG9ydC5zZXRMb2NhdGlvbihsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgWE1MU3RyZWFtQ29uc3RhbnRzLkVORF9FTEVNRU5UOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJlc291cmNlSW1wb3J0LlRZUEUuZXF1YWxzKHJlYWRlci5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlSW1wb3J0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgbmV4dCBlbGVtZW50CisgICAgICAgICAgICAgICAgaWYgKHJlYWRlci5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVhZGVyLm5leHQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2F0Y2ggKFhNTFN0cmVhbUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIGV4ID0gbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oZSk7CisgICAgICAgICAgICBlcnJvcihjb250ZXh0LmdldE1vbml0b3IoKSwgIlhNTFN0cmVhbUV4Y2VwdGlvbiIsIHJlYWRlciwgZXgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc291cmNlSW1wb3J0OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHdyaXRlKFJlc291cmNlSW1wb3J0IHJlc291cmNlSW1wb3J0LCBYTUxTdHJlYW1Xcml0ZXIgd3JpdGVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uIHsKKworICAgICAgICAvLyBXcml0ZSA8aW1wb3J0PgorICAgICAgICB3cml0ZXIud3JpdGVTdGFydEVsZW1lbnQoUmVzb3VyY2VJbXBvcnQuVFlQRS5nZXROYW1lc3BhY2VVUkkoKSwgUmVzb3VyY2VJbXBvcnQuVFlQRS5nZXRMb2NhbFBhcnQoKSk7CisKKyAgICAgICAgaWYgKHJlc291cmNlSW1wb3J0LmdldFVSSSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIHdyaXRlci53cml0ZUF0dHJpYnV0ZShVUkksIHJlc291cmNlSW1wb3J0LmdldFVSSSgpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzb3VyY2VJbXBvcnQuZ2V0TG9jYXRpb24oKSAhPSBudWxsKSB7CisgICAgICAgICAgICB3cml0ZXIud3JpdGVBdHRyaWJ1dGUoTE9DQVRJT04sIHJlc291cmNlSW1wb3J0LmdldExvY2F0aW9uKCkpOworICAgICAgICB9CisKKyAgICAgICAgd3JpdGVyLndyaXRlRW5kRWxlbWVudCgpOworICAgIH0KKworCisgICAgcHVibGljIHZvaWQgcmVzb2x2ZShSZXNvdXJjZUltcG9ydCBtb2RlbCwgTW9kZWxSZXNvbHZlciByZXNvbHZlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmE1MGNkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IKQEAgLTAsMCArMSwxOSBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLgorCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5pbXBsLlJlc291cmNlSW1wb3J0UHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSNpbXBvcnQucmVzb3VyY2UsbW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2UuUmVzb3VyY2VJbXBvcnQKK29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLmltcGwuUmVzb3VyY2VFeHBvcnRQcm9jZXNzb3I7cW5hbWU9aHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xI2V4cG9ydC5yZXNvdXJjZSxtb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5SZXNvdXJjZUV4cG9ydApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvbHZlci5Nb2RlbFJlc29sdmVyIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLk1vZGVsUmVzb2x2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkMmIxYwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvbHZlci5Nb2RlbFJlc29sdmVyCkBAIC0wLDAgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5pbXBsLkFydGlmYWN0TW9kZWxSZXNvbHZlcjttb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5BcnRpZmFjdApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5SZXNvdXJjZUltcG9ydEV4cG9ydEZhY3RvcnkgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2UuUmVzb3VyY2VJbXBvcnRFeHBvcnRGYWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzOWE1MDYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2UuUmVzb3VyY2VJbXBvcnRFeHBvcnRGYWN0b3J5CkBAIC0wLDAgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvdXJjZS5pbXBsLlJlc291cmNlSW1wb3J0RXhwb3J0RmFjdG9yeUltcGwNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uc2VydmljZS5Db250cmlidXRpb25MaXN0ZW5lciBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5zZXJ2aWNlLkNvbnRyaWJ1dGlvbkxpc3RlbmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzUxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uc2VydmljZS5Db250cmlidXRpb25MaXN0ZW5lcgpAQCAtMCwwICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorDQorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2UuaW1wbC5SZXNvdXJjZUltcG9ydEV4cG9ydExpc3RlbmVyDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS12YWxpZGF0aW9uLW1lc3NhZ2VzLnByb3BlcnRpZXMgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvY29udHJpYnV0aW9uLXJlc291cmNlLXZhbGlkYXRpb24tbWVzc2FnZXMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY2NmNjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS12YWxpZGF0aW9uLW1lc3NhZ2VzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwyMyBAQAorIworIworIyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjICAgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiBTZWUgdGhlIE5PVElDRSBmaWxlCisjICAgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjICAgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyAgICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICAgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgICAgd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjICAgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICAgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyAgICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyAgICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorIworIworQXR0cmlidXRlVVJJTWlzc2luZyA9IEF0dHJpYnV0ZSAndXJpJyBpcyBtaXNzaW5nCitYTUxTdHJlYW1FeGNlcHRpb24gPSBYTUxTdHJlYW1FeGNlcHRpb24gb2NjdXJlZCBkdWUgdG8gOiB7MH0KKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb250cmlidXRpb24tcmVzb3VyY2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvdXJjZS9pbXBsL1Jlc291cmNlRXhwb3J0UHJvY2Vzc29yVGVzdENhc2UuamF2YSBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvaW1wbC9SZXNvdXJjZUV4cG9ydFByb2Nlc3NvclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThiZDQ2MAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvaW1wbC9SZXNvdXJjZUV4cG9ydFByb2Nlc3NvclRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb3VyY2UuaW1wbDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworCitpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7CisKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTElucHV0RmFjdG9yeTsKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5FeHRlbnNpYmxlU3RBWEFydGlmYWN0UHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Qcm9jZXNzb3JDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLlJlc291cmNlRXhwb3J0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5EZWZhdWx0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuTW9uaXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuUHJvYmxlbTsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogVGVzdCBOYW1lc3BhY2VFeHBvcnRQcm9jZXNzb3JUZXN0Q2FzZQorICoKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgUmVzb3VyY2VFeHBvcnRQcm9jZXNzb3JUZXN0Q2FzZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURfWE1MID0KKyAgICAgICAgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIkFTQ0lJXCI/PiIKKyAgICAgICAgICAgICsgIjxleHBvcnQucmVzb3VyY2UgeG1sbnM9XCJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjFcIiB4bWxuczpucz1cImh0dHA6Ly9uc1wiIHVyaT1cImhlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuY29tcG9uZW50VHlwZVwiLz4iOworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIElOVkFMSURfWE1MID0KKyAgICAgICAgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIkFTQ0lJXCI/PiIKKyAgICAgICAgICAgICsgIjxleHBvcnQucmVzb3VyY2UgeG1sbnM9XCJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjFcIiB4bWxuczpucz1cImh0dHA6Ly9uc1wiLz4iOworCisgICAgcHJpdmF0ZSBzdGF0aWMgWE1MSW5wdXRGYWN0b3J5IGlucHV0RmFjdG9yeTsKKyAgICBwcml2YXRlIHN0YXRpYyBTdEFYQXJ0aWZhY3RQcm9jZXNzb3I8T2JqZWN0PiBzdGF4UHJvY2Vzc29yOworICAgIHByaXZhdGUgc3RhdGljIE1vbml0b3IgbW9uaXRvcjsKKyAgICBwcml2YXRlIHN0YXRpYyBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQ7CisKKyAgICBAQmVmb3JlQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSBleHRlbnNpb25Qb2ludHMgPSBuZXcgRGVmYXVsdEV4dGVuc2lvblBvaW50UmVnaXN0cnkoKTsKKyAgICAgICAgY29udGV4dCA9IG5ldyBQcm9jZXNzb3JDb250ZXh0KGV4dGVuc2lvblBvaW50cyk7CisgICAgICAgIG1vbml0b3IgPSBjb250ZXh0LmdldE1vbml0b3IoKTsKKyAgICAgICAgaW5wdXRGYWN0b3J5ID0gWE1MSW5wdXRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisKKyAgICAgICAgU3RBWEFydGlmYWN0UHJvY2Vzc29yRXh0ZW5zaW9uUG9pbnQgc3RheFByb2Nlc3NvcnMgPSBleHRlbnNpb25Qb2ludHMuZ2V0RXh0ZW5zaW9uUG9pbnQoU3RBWEFydGlmYWN0UHJvY2Vzc29yRXh0ZW5zaW9uUG9pbnQuY2xhc3MpOworICAgICAgICBzdGF4UHJvY2Vzc29yID0gbmV3IEV4dGVuc2libGVTdEFYQXJ0aWZhY3RQcm9jZXNzb3Ioc3RheFByb2Nlc3NvcnMsIGlucHV0RmFjdG9yeSwgbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGVzdCBsb2FkaW5nIGEgdmFsaWQgZXhwb3J0IGVsZW1lbnQgZnJvbSBhIGNvbnRyaWJ1dGlvbiBtZXRhZGF0YSBzdHJlYW0KKyAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbgorICAgICAqLworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdExvYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgWE1MU3RyZWFtUmVhZGVyIHJlYWRlciA9IGlucHV0RmFjdG9yeS5jcmVhdGVYTUxTdHJlYW1SZWFkZXIobmV3IFN0cmluZ1JlYWRlcihWQUxJRF9YTUwpKTsKKyAgICAgICAgUmVzb3VyY2VFeHBvcnQgcmVzb3VyY2VFeHBvcnQgPSAoUmVzb3VyY2VFeHBvcnQpc3RheFByb2Nlc3Nvci5yZWFkKHJlYWRlciwgY29udGV4dCk7CisgICAgICAgIGFzc2VydEVxdWFscygiaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5jb21wb25lbnRUeXBlIiwgcmVzb3VyY2VFeHBvcnQuZ2V0VVJJKCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRlc3QgbG9hZGluZyBhbiBJTlZBTElEIGV4cG9ydCBlbGVtZW50IGZyb20gYSBjb250cmlidXRpb24gbWV0YWRhdGEgc3RyZWFtCisgICAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICAgKi8KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkSW52YWxpZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBYTUxTdHJlYW1SZWFkZXIgcmVhZGVyID0gaW5wdXRGYWN0b3J5LmNyZWF0ZVhNTFN0cmVhbVJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKElOVkFMSURfWE1MKSk7CisgICAgICAgIC8qdHJ5IHsKKyAgICAgICAgICAgIHN0YXhQcm9jZXNzb3IucmVhZChyZWFkZXIpOworICAgICAgICAgICAgZmFpbCgicmVhZGVyRXhjZXB0aW9uIHNob3VsZCBoYXZlIGJlZW4gdGhyb3duIik7CisgICAgICAgIH0gY2F0Y2ggKENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0cnVlKTsKKyAgICAgICAgfSovCisgICAgICAgIHN0YXhQcm9jZXNzb3IucmVhZChyZWFkZXIsIGNvbnRleHQpOworICAgICAgICBQcm9ibGVtIHByb2JsZW0gPSBtb25pdG9yLmdldExhc3RQcm9ibGVtKCk7CisgICAgICAgIGFzc2VydE5vdE51bGwocHJvYmxlbSk7CisgICAgICAgIGFzc2VydEVxdWFscygiQXR0cmlidXRlVVJJTWlzc2luZyIsIHByb2JsZW0uZ2V0TWVzc2FnZUlkKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uLXJlc291cmNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb3VyY2UvaW1wbC9SZXNvdXJjZUltcG9ydFByb2Nlc3NvclRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL2ltcGwvUmVzb3VyY2VJbXBvcnRQcm9jZXNzb3JUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZmYwMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi1yZXNvdXJjZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc291cmNlL2ltcGwvUmVzb3VyY2VJbXBvcnRQcm9jZXNzb3JUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLmltcGw7CisKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworCitpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7CisKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTElucHV0RmFjdG9yeTsKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5FeHRlbnNpYmxlU3RBWEFydGlmYWN0UHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Qcm9jZXNzb3JDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc291cmNlLlJlc291cmNlSW1wb3J0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5EZWZhdWx0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuTW9uaXRvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuUHJvYmxlbTsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogVGVzdCBOYW1lc3BhY2VJbXBvcnRQcm9jZXNzb3JUZXN0Q2FzZQorICoKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgUmVzb3VyY2VJbXBvcnRQcm9jZXNzb3JUZXN0Q2FzZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMSURfWE1MID0KKyAgICAgICAgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIkFTQ0lJXCI/PiIKKyAgICAgICAgICAgICsgIjxpbXBvcnQucmVzb3VyY2UgeG1sbnM9XCJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjFcIiB4bWxuczpucz1cImh0dHA6Ly9uc1wiIHVyaT1cImhlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuY29tcG9uZW50VHlwZVwiIGxvY2F0aW9uPVwic2NhOi8vY29udHJpYnV0aW9ucy8wMDFcIi8+IjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBJTlZBTElEX1hNTCA9CisgICAgICAgICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJBU0NJSVwiPz4iCisgICAgICAgICAgICArICI8aW1wb3J0LnJlc291cmNlIHhtbG5zPVwiaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xXCIgeG1sbnM6bnM9XCJodHRwOi8vbnNcIiBsb2NhdGlvbj1cInNjYTovL2NvbnRyaWJ1dGlvbnMvMDAxXCIvPiI7CisKKyAgICBwcml2YXRlIHN0YXRpYyBYTUxJbnB1dEZhY3RvcnkgaW5wdXRGYWN0b3J5OworICAgIHByaXZhdGUgc3RhdGljIFN0QVhBcnRpZmFjdFByb2Nlc3NvcjxPYmplY3Q+IHN0YXhQcm9jZXNzb3I7CisgICAgcHJpdmF0ZSBzdGF0aWMgTW9uaXRvciBtb25pdG9yOworICAgIHByaXZhdGUgc3RhdGljIFByb2Nlc3NvckNvbnRleHQgY29udGV4dDsKKworICAgIEBCZWZvcmVDbGFzcworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIAlFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGV4dGVuc2lvblBvaW50cyA9IG5ldyBEZWZhdWx0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSgpOworICAgICAgICBjb250ZXh0ID0gbmV3IFByb2Nlc3NvckNvbnRleHQoZXh0ZW5zaW9uUG9pbnRzKTsKKyAgICAgICAgbW9uaXRvciA9IGNvbnRleHQuZ2V0TW9uaXRvcigpOworICAgICAgICBpbnB1dEZhY3RvcnkgPSBYTUxJbnB1dEZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKworICAgICAgICBTdEFYQXJ0aWZhY3RQcm9jZXNzb3JFeHRlbnNpb25Qb2ludCBzdGF4UHJvY2Vzc29ycyA9IGV4dGVuc2lvblBvaW50cy5nZXRFeHRlbnNpb25Qb2ludChTdEFYQXJ0aWZhY3RQcm9jZXNzb3JFeHRlbnNpb25Qb2ludC5jbGFzcyk7CisgICAgICAgIHN0YXhQcm9jZXNzb3IgPSBuZXcgRXh0ZW5zaWJsZVN0QVhBcnRpZmFjdFByb2Nlc3NvcihzdGF4UHJvY2Vzc29ycywgaW5wdXRGYWN0b3J5LCBudWxsKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IGxvYWRpbmcgYSB2YWxpZCBpbXBvcnQgZWxlbWVudCBmcm9tIGEgY29udHJpYnV0aW9uIG1ldGFkYXRhIHN0cmVhbQorICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCisgICAgICovCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0TG9hZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBYTUxTdHJlYW1SZWFkZXIgcmVhZGVyID0gaW5wdXRGYWN0b3J5LmNyZWF0ZVhNTFN0cmVhbVJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKFZBTElEX1hNTCkpOworICAgICAgICBSZXNvdXJjZUltcG9ydCBuYW1lc3BhY2VJbXBvcnQgPSAoUmVzb3VyY2VJbXBvcnQpc3RheFByb2Nlc3Nvci5yZWFkKHJlYWRlciwgY29udGV4dCk7CisgICAgICAgIGFzc2VydEVxdWFscygiaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5jb21wb25lbnRUeXBlIiwgbmFtZXNwYWNlSW1wb3J0LmdldFVSSSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJzY2E6Ly9jb250cmlidXRpb25zLzAwMSIsIG5hbWVzcGFjZUltcG9ydC5nZXRMb2NhdGlvbigpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0IGxvYWRpbmcgYSBJTlZBTElEIGltcG9ydCBlbGVtZW50IGZyb20gYSBjb250cmlidXRpb24gbWV0YWRhdGEgc3RyZWFtCisgICAgICogQHRocm93cyBFeGNlcHRpb24KKyAgICAgKi8KKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkSW52YWxpZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBYTUxTdHJlYW1SZWFkZXIgcmVhZGVyID0gaW5wdXRGYWN0b3J5LmNyZWF0ZVhNTFN0cmVhbVJlYWRlcihuZXcgU3RyaW5nUmVhZGVyKElOVkFMSURfWE1MKSk7CisgICAgICAgIC8qdHJ5IHsKKyAgICAgICAgICAgIHN0YXhQcm9jZXNzb3IucmVhZChyZWFkZXIpOworICAgICAgICAgICAgZmFpbCgicmVhZGVyRXhjZXB0aW9uIHNob3VsZCBoYXZlIGJlZW4gdGhyb3duIik7CisgICAgICAgIH0gY2F0Y2ggKENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgYXNzZXJ0VHJ1ZSh0cnVlKTsKKyAgICAgICAgfSovCisgICAgICAgIHN0YXhQcm9jZXNzb3IucmVhZChyZWFkZXIsIGNvbnRleHQpOworICAgICAgICBQcm9ibGVtIHByb2JsZW0gPSBtb25pdG9yLmdldExhc3RQcm9ibGVtKCk7CisgICAgICAgIGFzc2VydE5vdE51bGwocHJvYmxlbSk7CisgICAgICAgIGFzc2VydEVxdWFscygiQXR0cmlidXRlVVJJTWlzc2luZyIsIHByb2JsZW0uZ2V0TWVzc2FnZUlkKCkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vamF2YS9pbXBsL0NsYXNzTG9hZGVyTW9kZWxSZXNvbHZlci5qYXZhIGIvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9qYXZhL2ltcGwvQ2xhc3NMb2FkZXJNb2RlbFJlc29sdmVyLmphdmEKaW5kZXggZjljOGRjYi4uMWJhMzk0ZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9qYXZhL2ltcGwvQ2xhc3NMb2FkZXJNb2RlbFJlc29sdmVyLmphdmEKKysrIGIvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9qYXZhL2ltcGwvQ2xhc3NMb2FkZXJNb2RlbFJlc29sdmVyLmphdmEKQEAgLTQ5LDYgKzQ5LDEwIEBACiAgICAgcHJpdmF0ZSBXZWFrUmVmZXJlbmNlPENvbnRyaWJ1dGlvbj4gY29udHJpYnV0aW9uOwogICAgIHByaXZhdGUgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0OwogICAgIHByaXZhdGUgTWFwPFN0cmluZywgTW9kZWxSZXNvbHZlcj4gaW1wb3J0UmVzb2x2ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBNb2RlbFJlc29sdmVyPigpOworICAgIAorICAgIC8vIGEgc3BhY2UgdG8gcGFzcyBiYWNrIHRoZSBjb250cmlidXRpb24gdGhhdCB3YXMgdXNlZCB0byByZXNvbHZlCisgICAgLy8gYSBjbGFzcyB2aWEgYW4gaW1wb3J0CisgICAgcHJpdmF0ZSBDb250cmlidXRpb24gY29udHJpYnV0aW9uQ29udGFpbmluZ0NsYXNzOwogCiAgICAgcHJpdmF0ZSBzdGF0aWMgQ2xhc3NMb2FkZXIgcGFyZW50Q2xhc3NMb2FkZXIoQ29udHJpYnV0aW9uIGNvbnRyaWJ1dGlvbikgewogICAgICAgICBpZiAoY29udHJpYnV0aW9uLmdldENsYXNzTG9hZGVyKCkgIT0gbnVsbCkgewpAQCAtMTA3LDEwICsxMTEsMTUgQEAKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsKKyAgICAgICAgICAgIGNvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzcyA9IGNvbnRyaWJ1dGlvbi5nZXQoKTsKKyAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gTG9hZCB0aGUgY2xhc3MgYW5kIHJldHVybiBhIGNsYXNzIHJlZmVyZW5jZSBmb3IgaXQKICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSAoKENsYXNzUmVmZXJlbmNlKXVucmVzb2x2ZWQpLmdldENsYXNzTmFtZSgpOwotICAgICAgICAgICAgQ2xhc3M8Pz4gY2xhenogPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgdHJ1ZSwgdGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gbW9kZWxDbGFzcy5jYXN0KG5ldyBDbGFzc1JlZmVyZW5jZShjbGF6eikpOworICAgICAgICAgICAgQ2xhc3M8Pz4gY2xhenogPSBDbGFzcy5mb3JOYW1lKGNsYXNzTmFtZSwgZmFsc2UsIHRoaXMpOworICAgICAgICAgICAgQ2xhc3NSZWZlcmVuY2UgY2xhc3NSZWZlcmVuY2UgPSBuZXcgQ2xhc3NSZWZlcmVuY2UoY2xhenopOworICAgICAgICAgICAgY2xhc3NSZWZlcmVuY2Uuc2V0Q29udHJpYnV0aW9uQ29udGFpbmluZ0NsYXNzKGNvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzcyk7CisgICAgICAgICAgICBjb250cmlidXRpb25Db250YWluaW5nQ2xhc3MgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIG1vZGVsQ2xhc3MuY2FzdChjbGFzc1JlZmVyZW5jZSk7CiAKICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICByZXR1cm4gdW5yZXNvbHZlZDsKQEAgLTE2MCw2ICsxNjksNyBAQAogICAgICAgICBpZiAoaW1wb3J0UmVzb2x2ZXIgIT0gbnVsbCkgewogICAgICAgICAgICAgQ2xhc3NSZWZlcmVuY2UgY2xhc3NSZWZlcmVuY2UgPSBpbXBvcnRSZXNvbHZlci5yZXNvbHZlTW9kZWwoQ2xhc3NSZWZlcmVuY2UuY2xhc3MsIG5ldyBDbGFzc1JlZmVyZW5jZShuYW1lKSwgY29udGV4dCk7CiAgICAgICAgICAgICBpZiAoIWNsYXNzUmVmZXJlbmNlLmlzVW5yZXNvbHZlZCgpKSB7CisgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uQ29udGFpbmluZ0NsYXNzID0gY2xhc3NSZWZlcmVuY2UuZ2V0Q29udHJpYnV0aW9uQ29udGFpbmluZ0NsYXNzKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGNsYXNzUmVmZXJlbmNlLmdldEphdmFDbGFzcygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Byb2Nlc3Nvci9FeHRlbnNpYmxlU3RBWEF0dHJpYnV0ZVByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9wcm9jZXNzb3IvRXh0ZW5zaWJsZVN0QVhBdHRyaWJ1dGVQcm9jZXNzb3IuamF2YQppbmRleCBhYTE1OWFjLi41YmY3ZTg4IDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Byb2Nlc3Nvci9FeHRlbnNpYmxlU3RBWEF0dHJpYnV0ZVByb2Nlc3Nvci5qYXZhCisrKyBiL21vZHVsZXMvY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcHJvY2Vzc29yL0V4dGVuc2libGVTdEFYQXR0cmlidXRlUHJvY2Vzc29yLmphdmEKQEAgLTE0MCw3ICsxNDAsNyBAQAogICAgICAgICAvLyBEZWxlZ2F0ZSB0byB0aGUgcHJvY2Vzc29yIGFzc29jaWF0ZWQgd2l0aCB0aGUgYXR0cmlidXRlIFFOYW1lCiAgICAgICAgIGludCBldmVudCA9IHNvdXJjZS5nZXRFdmVudFR5cGUoKTsKICAgICAgICAgaWYgKGV2ZW50ID09IFhNTFN0cmVhbUNvbnN0YW50cy5TVEFSVF9ET0NVTUVOVCkgewotICAgICAgICAgICAgc291cmNlLm5leHRUYWcoKTsKKyAgICAgICAgICAgIHdoaWxlIChzb3VyY2UubmV4dCgpICE9IFhNTFN0cmVhbVJlYWRlci5TVEFSVF9FTEVNRU5UKTsKICAgICAgICAgfQogCiAgICAgICAgIFN0QVhBdHRyaWJ1dGVQcm9jZXNzb3I8Pz4gcHJvY2Vzc29yID0gbnVsbDsKZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcHJvY2Vzc29yL1Byb2Nlc3NvckNvbnRleHQuamF2YSBiL21vZHVsZXMvY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcHJvY2Vzc29yL1Byb2Nlc3NvckNvbnRleHQuamF2YQppbmRleCA3NWNmYWI0Li5kNDY0YWY0IDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Byb2Nlc3Nvci9Qcm9jZXNzb3JDb250ZXh0LmphdmEKKysrIGIvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9wcm9jZXNzb3IvUHJvY2Vzc29yQ29udGV4dC5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yOwogCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQXJ0aWZhY3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQ29udHJpYnV0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5VdGlsaXR5RXh0ZW5zaW9uUG9pbnQ7CkBAIC0zMiw2ICszMyw3IEBACiAgKi8KIHB1YmxpYyBjbGFzcyBQcm9jZXNzb3JDb250ZXh0IHsKICAgICBwcm90ZWN0ZWQgQ29udHJpYnV0aW9uIGNvbnRyaWJ1dGlvbjsKKyAgICBwcm90ZWN0ZWQgQXJ0aWZhY3QgYXJ0aWZhY3Q7CiAgICAgcHJvdGVjdGVkIE1vbml0b3IgbW9uaXRvcjsKICAgICBwcm90ZWN0ZWQgT2JqZWN0IHBhcmVudE1vZGVsOwogCkBAIC02MiwxMCArNjQsMTkgQEAKICAgICAgICAgdGhpcy5tb25pdG9yID0gbmV3IERlZmF1bHRNb25pdG9yRmFjdG9yeSgpLmNyZWF0ZU1vbml0b3IoKTsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgY29udHJpYnV0aW9uCisgICAgICogQHJldHVybiBUaGUgY3VycmVudCBjb250cmlidXRpb24KKyAgICAgKi8KICAgICBwdWJsaWMgQ29udHJpYnV0aW9uIGdldENvbnRyaWJ1dGlvbigpIHsKICAgICAgICAgcmV0dXJuIGNvbnRyaWJ1dGlvbjsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBTZXQgdGhlIGN1cnJlbnQgY29udHJpYnV0aW9uCisgICAgICogQHBhcmFtIGNvbnRyaWJ1dGlvbgorICAgICAqIEByZXR1cm4KKyAgICAgKi8KICAgICBwdWJsaWMgQ29udHJpYnV0aW9uIHNldENvbnRyaWJ1dGlvbihDb250cmlidXRpb24gY29udHJpYnV0aW9uKSB7CiAgICAgICAgIENvbnRyaWJ1dGlvbiBvbGQgPSB0aGlzLmNvbnRyaWJ1dGlvbjsKICAgICAgICAgdGhpcy5jb250cmlidXRpb24gPSBjb250cmlidXRpb247CkBAIC05Miw0ICsxMDMsMjUgQEAKICAgICAgICAgcmV0dXJuIG9sZDsKICAgICB9CiAKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIGN1cnJlbnQgYXJ0aWZhY3QKKyAgICAgKiBAcmV0dXJuIFRoZSBjdXJyZW50IGFydGlmYWN0CisgICAgICovCisgICAgcHVibGljIEFydGlmYWN0IGdldEFydGlmYWN0KCkgeworICAgICAgICByZXR1cm4gYXJ0aWZhY3Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjdXJyZW50IGFydGlmYWN0LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYnkgVVJMQXJ0aWZhY3RQcm9jZXNzb3IgdG8gc2V0IHRoZSBkb2N1bWVudAorICAgICAqIGNvbnRleHQgKHN1Y2ggYXMgdGhlIFVSSSBvZiB0aGUgY29tcG9zaXRlIGZpbGUpLgorICAgICAqIAorICAgICAqIEBwYXJhbSBhcnRpZmFjdCBUaGUgbmV3IGFydGlmYWN0CisgICAgICogQHJldHVybiBUaGUgb2xkIGFydGlmYWN0CisgICAgICovCisgICAgcHVibGljIEFydGlmYWN0IHNldEFydGlmYWN0KEFydGlmYWN0IGFydGlmYWN0KSB7CisgICAgICAgIEFydGlmYWN0IG9sZCA9IHRoaXMuYXJ0aWZhY3Q7CisgICAgICAgIHRoaXMuYXJ0aWZhY3QgPSBhcnRpZmFjdDsKKyAgICAgICAgcmV0dXJuIG9sZDsKKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcHJvY2Vzc29yL2ltcGwvQ29udHJpYnV0aW9uQ29udGVudFByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9wcm9jZXNzb3IvaW1wbC9Db250cmlidXRpb25Db250ZW50UHJvY2Vzc29yLmphdmEKaW5kZXggMjMyYmY5Yy4uNmU2MzQ2ZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9wcm9jZXNzb3IvaW1wbC9Db250cmlidXRpb25Db250ZW50UHJvY2Vzc29yLmphdmEKKysrIGIvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9wcm9jZXNzb3IvaW1wbC9Db250cmlidXRpb25Db250ZW50UHJvY2Vzc29yLmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBqYXZhLm5ldC5VUklTeW50YXhFeGNlcHRpb247CiBpbXBvcnQgamF2YS5uZXQuVVJMOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0SXRlcmF0b3I7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvc2l0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5BcnRpZmFjdDsKQEAgLTEzOSw3ICsxNDAsNyBAQAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIG1vbml0b3IucHVzaENvbnRleHQoIkFydGlmYWN0OiAiICsgYXJ0aWZhY3QuZ2V0VVJJKCkpOwogICAgIAotICAgICAgICAgICAgICAgIG9sZCA9IGNvbnRleHQuc2V0Q29udHJpYnV0aW9uKGNvbnRyaWJ1dGlvbik7CisgICAgICAgICAgICAgICAgQXJ0aWZhY3Qgb2xkQXJ0aWZhY3QgPSBjb250ZXh0LnNldEFydGlmYWN0KGFydGlmYWN0KTsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIGVhY2ggYXJ0aWZhY3QKICAgICAgICAgICAgICAgICAgICAgVVJMIGFydGlmYWN0TG9jYXRpb25VUkwgPSBudWxsOwpAQCAtMTY5LDcgKzE3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICAgICBtb25pdG9yLnBvcENvbnRleHQoKTsKLSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRDb250cmlidXRpb24ob2xkKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBcnRpZmFjdChvbGRBcnRpZmFjdCk7CiAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE5MSw2ICsxOTIsMTkgQEAKICAgICAgICAgICAgICAgICBjb250cmlidXRpb24uZ2V0SW1wb3J0cygpLmFkZChkZWZhdWx0SW1wb3J0KTsKICAgICAgICAgICAgICAgICBEZWZhdWx0RXhwb3J0IGRlZmF1bHRFeHBvcnQgPSBjb250cmlidXRpb25GYWN0b3J5LmNyZWF0ZURlZmF1bHRFeHBvcnQoKTsKICAgICAgICAgICAgICAgICBjb250cmlidXRpb24uZ2V0RXhwb3J0cygpLmFkZChkZWZhdWx0RXhwb3J0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRyaWJ1dGlvbi5nZXREZXBsb3lhYmxlcygpLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBkZXBsb3lhYmxlIENvbXBvc2l0ZSBvYmplY3RzIHdpdGggdGhlIGNvcnJlY3QgQ29tcG9zaXRlIG9iamVjdCBmb3IgdGhlIGFydGlmYWN0CisgICAgICAgICAgICAgICAgICAgIGZvciAoQXJ0aWZhY3QgYSA6IGNvbnRyaWJ1dGlvbi5nZXRBcnRpZmFjdHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGEuZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIENvbXBvc2l0ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoTGlzdEl0ZXJhdG9yPENvbXBvc2l0ZT4gbGl0ID0gY29udHJpYnV0aW9uLmdldERlcGxveWFibGVzKCkubGlzdEl0ZXJhdG9yKCk7IGxpdC5oYXNOZXh0KCk7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXQubmV4dCgpLmdldE5hbWUoKS5lcXVhbHMoKChDb21wb3NpdGUpYS5nZXRNb2RlbCgpKS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXQuc2V0KChDb21wb3NpdGUpYS5nZXRNb2RlbCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgIG1vbml0b3IucG9wQ29udGV4dCgpOwpAQCAtMjUyLDIzICsyNjYsMzIgQEAKIAkgICAgICAgIGZvciAoQXJ0aWZhY3QgYXJ0aWZhY3QgOiBjb250cmlidXRpb24uZ2V0QXJ0aWZhY3RzKCkpIHsKIAkgICAgICAgICAgICBPYmplY3QgbW9kZWwgPSBhcnRpZmFjdC5nZXRNb2RlbCgpOwogCSAgICAgICAgICAgIGlmIChtb2RlbCAhPSBudWxsKSB7CisJICAgICAgICAgICAgICAgIEFydGlmYWN0IG9sZEFydGlmYWN0ID0gY29udGV4dC5zZXRBcnRpZmFjdChhcnRpZmFjdCk7CiAJICAgICAgICAgICAgICAgIHRyeSB7CiAJICAgICAgICAgICAgICAgICAgIGFydGlmYWN0UHJvY2Vzc29yLnJlc29sdmUobW9kZWwsIGNvbnRyaWJ1dGlvblJlc29sdmVyLCBjb250ZXh0KTsKIAkgICAgICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKIAkgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uKGUpOworCSAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworCSAgICAgICAgICAgICAgICAgICAgY29udGV4dC5zZXRBcnRpZmFjdChvbGRBcnRpZmFjdCk7CiAJICAgICAgICAgICAgICAgIH0KIAkgICAgICAgICAgICB9CiAJICAgICAgICB9CiAJCi0JICAgICAgICAvLyBSZXNvbHZlIGRlcGxveWFibGUgY29tcG9zaXRlcwotCSAgICAgICAgTGlzdDxDb21wb3NpdGU+IGRlcGxveWFibGVzID0gY29udHJpYnV0aW9uLmdldERlcGxveWFibGVzKCk7Ci0JICAgICAgICBmb3IgKGludCBpID0gMCwgbiA9IGRlcGxveWFibGVzLnNpemUoKTsgaSA8IG47IGkrKykgewotCSAgICAgICAgICAgIENvbXBvc2l0ZSBkZXBsb3lhYmxlID0gZGVwbG95YWJsZXMuZ2V0KGkpOwotCSAgICAgICAgICAgIENvbXBvc2l0ZSByZXNvbHZlZCA9IChDb21wb3NpdGUpY29udHJpYnV0aW9uUmVzb2x2ZXIucmVzb2x2ZU1vZGVsKENvbXBvc2l0ZS5jbGFzcywgZGVwbG95YWJsZSwgY29udGV4dCk7Ci0JICAgICAgICAgICAgaWYgKHJlc29sdmVkICE9IGRlcGxveWFibGUpIHsKLQkgICAgICAgICAgICAgICAgZGVwbG95YWJsZXMuc2V0KGksIHJlc29sdmVkKTsKLQkgICAgICAgICAgICB9Ci0JICAgICAgICB9IC8vIGVuZCBmb3IKKyAgICAgICAgICAgIC8vIFJlc29sdmUgZGVwbG95YWJsZSBjb21wb3NpdGVzCisgICAgICAgICAgICBMaXN0PENvbXBvc2l0ZT4gZGVwbG95YWJsZXMgPSBjb250cmlidXRpb24uZ2V0RGVwbG95YWJsZXMoKTsKKyAgICAgICAgICAgIEFydGlmYWN0IG9sZEFydGlmYWN0ID0gY29udGV4dC5zZXRBcnRpZmFjdChjb250cmlidXRpb24pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMCwgbiA9IGRlcGxveWFibGVzLnNpemUoKTsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGUgZGVwbG95YWJsZSA9IGRlcGxveWFibGVzLmdldChpKTsKKyAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlIHJlc29sdmVkID0KKyAgICAgICAgICAgICAgICAgICAgICAgIChDb21wb3NpdGUpY29udHJpYnV0aW9uUmVzb2x2ZXIucmVzb2x2ZU1vZGVsKENvbXBvc2l0ZS5jbGFzcywgZGVwbG95YWJsZSwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyZXNvbHZlZCAhPSBkZXBsb3lhYmxlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXBsb3lhYmxlcy5zZXQoaSwgcmVzb2x2ZWQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAvLyBlbmQgZm9yCisgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgIGNvbnRleHQuc2V0QXJ0aWZhY3Qob2xkQXJ0aWZhY3QpOworICAgICAgICAgICAgfQogICAgIAl9IGZpbmFsbHkgewogICAgIAkJbW9uaXRvci5wb3BDb250ZXh0KCk7CiAgICAgCQljb250ZXh0LnNldENvbnRyaWJ1dGlvbihvbGQpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvbHZlci9DbGFzc1JlZmVyZW5jZS5qYXZhIGIvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9yZXNvbHZlci9DbGFzc1JlZmVyZW5jZS5qYXZhCmluZGV4IGZhOTE3ODQuLjdkOGYyZWYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vcmVzb2x2ZXIvQ2xhc3NSZWZlcmVuY2UuamF2YQorKysgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3Jlc29sdmVyL0NsYXNzUmVmZXJlbmNlLmphdmEKQEAgLTIyLDYgKzIyLDcgQEAKIGltcG9ydCBqYXZhLmxhbmcucmVmLldlYWtSZWZlcmVuY2U7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkJhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQ29udHJpYnV0aW9uOwogCiAvKioKICAqIEEgd2VhayByZWZlcmVuY2UgdG8gYSBjbGFzcywgd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gcmVnaXN0ZXIgY2xhc3NlcwpAQCAtMzcsNiArMzgsNyBAQAogICAgIAogICAgIHByaXZhdGUgV2Vha1JlZmVyZW5jZTxDbGFzczw/Pj4gY2xheno7CiAgICAgcHJpdmF0ZSBTdHJpbmcgY2xhc3NOYW1lOworICAgIHByaXZhdGUgQ29udHJpYnV0aW9uIGNvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzczsKIAogICAgIC8qKgogICAgICAqIENvbnN0cnVjdHMgYSBuZXcgQ2xhc3NSZWZlcmVuY2UuCkBAIC0xMDQsNSArMTA2LDI0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQSBKYXZhIGNsYXNzIG1heSByZWZlcmVuY2UgYSBXU0RMIGZpbGUgdmlhIGEgSkFYV1MgYW5ub3RhdGlvbi4gV2UgbmVlZCB0byByZXNvbHZlCisgICAgICogdGhlIFdTREwgZmlsZSBsb2NhdGlvbiBpbiB0aGUgY29udGV4dCBvZiB0aGUgc2FtZSBjb250cmlidXRpb24gdGhhdCBob2xkcyB0aGUgCisgICAgICogSmF2YSBmaWxlLiBJbiBvcmRlciB0byBkbyB0aGlzIHdlIG5lZWQgdG8gcGFzcyBiYWNrIHRoZSBhY3R1YWwgY29udHJpYnV0aW9uIHRoYXQKKyAgICAgKiB3YXMgdXNlZCB0byByZXNvbHZlIGEgSmF2YSBjbGFzcy4gSXQncyBwb3NzaWJsZSB0aGF0IG11bHRpcGxlIGNvbnRyaWJ1dGlvbnMgaG9sZAorICAgICAqIHRoZSBzYW1lIGNsYXNzIHNvIGp1c3Qgc2Nhbm5pbmcgdGhlIGFydGlmYWN0cyBpbiBhbGwgdGhlIGNvbnRyaWJ1dGlvbiBpcyBub3QgZ29vZCAKKyAgICAgKiBlbm91Z2gKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIENvbnRyaWJ1dGlvbiBnZXRDb250cmlidXRpb25Db250YWluaW5nQ2xhc3MoKSB7CisgICAgICAgIHJldHVybiBjb250cmlidXRpb25Db250YWluaW5nQ2xhc3M7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldENvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzcygKKyAgICAgICAgICAgIENvbnRyaWJ1dGlvbiBjb250cmlidXRpb25Db250YWluaW5nQ2xhc3MpIHsKKyAgICAgICAgdGhpcy5jb250cmlidXRpb25Db250YWluaW5nQ2xhc3MgPSBjb250cmlidXRpb25Db250YWluaW5nQ2xhc3M7CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3NjYW5uZXIvaW1wbC9EaXJlY3RvcnlDb250cmlidXRpb25TY2FubmVyLmphdmEgYi9tb2R1bGVzL2NvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3NjYW5uZXIvaW1wbC9EaXJlY3RvcnlDb250cmlidXRpb25TY2FubmVyLmphdmEKaW5kZXggNGExYTIyMi4uNGEwNjRjOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb250cmlidXRpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi9zY2FubmVyL2ltcGwvRGlyZWN0b3J5Q29udHJpYnV0aW9uU2Nhbm5lci5qYXZhCisrKyBiL21vZHVsZXMvY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vc2Nhbm5lci9pbXBsL0RpcmVjdG9yeUNvbnRyaWJ1dGlvblNjYW5uZXIuamF2YQpAQCAtMjQsOCArMjQsMTMgQEAKIGltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247CiBpbXBvcnQgamF2YS5uZXQuVVJJOwogaW1wb3J0IGphdmEubmV0LlVSSVN5bnRheEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LkFjY2Vzc0NvbnRyb2xFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOworaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkFydGlmYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkNvbnRyaWJ1dGlvbjsKQEAgLTQwLDggKzQ1LDEwIEBACiAgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKICAqLwogcHVibGljIGNsYXNzIERpcmVjdG9yeUNvbnRyaWJ1dGlvblNjYW5uZXIgaW1wbGVtZW50cyBDb250cmlidXRpb25TY2FubmVyIHsKLSAgICBwcml2YXRlIENvbnRyaWJ1dGlvbkZhY3RvcnkgY29udHJpYnV0aW9uRmFjdG9yeTsgCi0gICAgICAgIAorCXByaXZhdGUgc3RhdGljIGZpbmFsIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKERpcmVjdG9yeUNvbnRyaWJ1dGlvblNjYW5uZXIuY2xhc3MuZ2V0TmFtZSgpKTsKKworICAgIHByaXZhdGUgQ29udHJpYnV0aW9uRmFjdG9yeSBjb250cmlidXRpb25GYWN0b3J5OworCiAgICAgcHVibGljIERpcmVjdG9yeUNvbnRyaWJ1dGlvblNjYW5uZXIoQ29udHJpYnV0aW9uRmFjdG9yeSBjb250cmlidXRpb25GYWN0b3J5KSB7CiAgICAgICAgIHRoaXMuY29udHJpYnV0aW9uRmFjdG9yeSA9IGNvbnRyaWJ1dGlvbkZhY3Rvcnk7CiAgICAgfQpAQCAtNjEsNyArNjgsNyBAQAogICAgICAgICAgICAgICAgIEFydGlmYWN0IGFydGlmYWN0ID0gY29udHJpYnV0aW9uRmFjdG9yeS5jcmVhdGVBcnRpZmFjdCgpOwogICAgICAgICAgICAgICAgIGFydGlmYWN0LnNldFVSSSh1cmkpOwogICAgICAgICAgICAgICAgIGFydGlmYWN0LnNldExvY2F0aW9uKGZpbGUudG9VUkkoKS50b1VSTCgpLnRvU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgYXJ0aWZhY3RzLmFkZChhcnRpZmFjdCk7CiAgICAgICAgICAgICB9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uKGUpOwpAQCAtNzIsMTAgKzc5LDEwIEBACiAgICAgICAgIHJldHVybiBhcnRpZmFjdHM7CiAgICAgfQogCi0gICAgCisKICAgICAvKioKICAgICAgKiBTY2FuIHRoZSBjb250cmlidXRpb24gdG8gcmV0cmlldmUgYWxsIGFydGlmYWN0IHVyaXMKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBjb250cmlidXRpb24KICAgICAgKiBAcmV0dXJuCiAgICAgICogQHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uCkBAIC04Myw0NSArOTAsNjMgQEAKICAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBzY2FuQ29udHJpYnV0aW9uQXJ0aWZhY3RzKENvbnRyaWJ1dGlvbiBjb250cmlidXRpb24pIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIHsKICAgICAgICAgRmlsZSBkaXJlY3RvcnkgPSBkaXJlY3RvcnkoY29udHJpYnV0aW9uKTsKICAgICAgICAgTGlzdDxTdHJpbmc+IGFydGlmYWN0cyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICAvLyBbcmZlbmddIFRoZXJlIGFyZSBjYXNlcyB0aGF0IHRoZSBmb2xkZXIgY29udGFpbnMgc3ltYm9saWMgbGlua3MgdGhhdCBwb2ludCB0byB0aGUgc2FtZSBwaHlzaWNhbCBkaXJlY3RvcnkKKyAgICAgICAgU2V0PEZpbGU+IHZpc2l0ZWQgPSBuZXcgSGFzaFNldDxGaWxlPigpOwogICAgICAgICB0cnkgewotICAgICAgICAgICAgdHJhdmVyc2UoYXJ0aWZhY3RzLCBkaXJlY3RvcnksIGRpcmVjdG9yeSk7CisgICAgICAgICAgICB0cmF2ZXJzZShhcnRpZmFjdHMsIGRpcmVjdG9yeSwgZGlyZWN0b3J5LCB2aXNpdGVkKTsKICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIGFydGlmYWN0czsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZWN1cnNpdmVseSB0cmF2ZXJzZSBhIHJvb3QgZGlyZWN0b3J5CiAgICAgICoKICAgICAgKiBAcGFyYW0gZmlsZUxpc3QKICAgICAgKiBAcGFyYW0gZmlsZQogICAgICAqIEBwYXJhbSByb290CisgICAgICogQHBhcmFtIHZpc2l0ZWQgVGhlIHZpc2l0ZWQgZGlyZWN0b3JpZXMKICAgICAgKiBAdGhyb3dzIElPRXhjZXB0aW9uCiAgICAgICovCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCB0cmF2ZXJzZShMaXN0PFN0cmluZz4gZmlsZUxpc3QsIEZpbGUgZmlsZSwgRmlsZSByb290KSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBpZiAoZmlsZS5pc0ZpbGUoKSkgewotICAgICAgICAgICAgZmlsZUxpc3QuYWRkKHJvb3QudG9VUkkoKS5yZWxhdGl2aXplKGZpbGUudG9VUkkoKSkudG9TdHJpbmcoKSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdXJpID0gcm9vdC50b1VSSSgpLnJlbGF0aXZpemUoZmlsZS50b1VSSSgpKS50b1N0cmluZygpOwotICAgICAgICAgICAgaWYgKHVyaS5lbmRzV2l0aCgiLyIpKSB7Ci0gICAgICAgICAgICAgICAgdXJpID0gdXJpLnN1YnN0cmluZygwLCB1cmkubGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZpbGVMaXN0LmFkZCh1cmkpOworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgdHJhdmVyc2UoTGlzdDxTdHJpbmc+IGZpbGVMaXN0LCBGaWxlIGZpbGUsIEZpbGUgcm9vdCwgU2V0PEZpbGU+IHZpc2l0ZWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKLSAgICAgICAgICAgIEZpbGVbXSBmaWxlcyA9IGZpbGUubGlzdEZpbGVzKCk7Ci0gICAgICAgICAgICBmb3IgKEZpbGUgZjogZmlsZXMpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWYuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIi4iKSkgewotICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZShmaWxlTGlzdCwgZiwgcm9vdCk7CisgICAgCS8vVFVTQ0FOWS0zNjY3IC0gR29vZ2xlIGFkZCBzb21lIHByaXZhdGUgZGlyZWN0b3JpZXMgd2hlbiB5b3UgZGVwbG95IHlvdXIgYXBwbGljYXRpb24KKyAgICAJLy90byBHQUUgYW5kIHRyeWluZyB0byBleGVjdXRlIGZpbGUgSU8gb3BlcmF0aW9ucyBvbiBpdCdzIGNvbnRlbnRzIGZhaWxzIHdpdGggQWNjZXNzQ29udHJvbEV4Y2VwdGlvbgorICAgIAl0cnkgeworICAgICAgICAgICAgaWYgKGZpbGUuaXNGaWxlKCkpIHsKKyAgICAgICAgICAgICAgICBmaWxlTGlzdC5hZGQocm9vdC50b1VSSSgpLnJlbGF0aXZpemUoZmlsZS50b1VSSSgpKS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKSB7CisgICAgICAgICAgICAgICAgRmlsZSBkaXIgPSBmaWxlLmdldENhbm9uaWNhbEZpbGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXZpc2l0ZWQuY29udGFpbnMoZGlyKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBbcmZlbmddIEFkZCB0aGUgY2Fub25pY2FsIGZpbGUgaW50byB0aGUgdmlzaXRlZCBzZXQgdG8gYXZvaWQgZHVwbGljYXRlIG5hdmlnYXRpb24gb2YgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSBzeW1ib2xpYyBsaW5rcworICAgICAgICAgICAgICAgICAgICB2aXNpdGVkLmFkZChkaXIpOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgdXJpID0gcm9vdC50b1VSSSgpLnJlbGF0aXZpemUoZmlsZS50b1VSSSgpKS50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICBpZiAodXJpLmVuZHNXaXRoKCIvIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoMCwgdXJpLmxlbmd0aCgpIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmlsZUxpc3QuYWRkKHVyaSk7CisKKyAgICAgICAgICAgICAgICAgICAgRmlsZVtdIGZpbGVzID0gZmlsZS5saXN0RmlsZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChGaWxlIGYgOiBmaWxlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmLmdldE5hbWUoKS5zdGFydHNXaXRoKCIuIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZShmaWxlTGlzdCwgZiwgcm9vdCwgdmlzaXRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAJfSBjYXRjaCAoQWNjZXNzQ29udHJvbEV4Y2VwdGlvbiBlKSB7CisgICAgCQkvL1RVU0NBTlktMzY2NyAtIExvZyB0aGUgQWNjZXNzQ29udHJvbEV4Y2VwdGlvbiBlcnJvciBhbmQgY29udGludWUgd2l0aG91dCBwcm9jZXNzaW5nIHRoZSBmaWxlL2RpcmVjdG9yeQorICAgIAkJbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiRXJyb3IgdHJhdmVyc2luZyBmaWxlOiIgKyBmaWxlLmdldFBhdGgoKSk7CisgICAgCX0KKwogICAgIH0KLSAgICAgICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbiBhcyBhIGZpbGUKLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBjb250cmlidXRpb24KICAgICAgKiBAcmV0dXJuCiAgICAgICogQHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uCkBAIC0xNDMsNiArMTY4LDYgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmlsZTsKICAgICB9Ci0gICAgCisKIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlLWRhdGFiaW5kaW5nL3BvbS54bWwgYi9tb2R1bGVzL2NvcmUtZGF0YWJpbmRpbmcvcG9tLnhtbAppbmRleCAyYjVhNzVhLi5jNjY5NzcwIDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvcmUtZGF0YWJpbmRpbmcvcG9tLnhtbAorKysgYi9tb2R1bGVzL2NvcmUtZGF0YWJpbmRpbmcvcG9tLnhtbApAQCAtNzcsNyArNzcsNyBAQAogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3N0eC1hc2w8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjIuNDwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi42PC92ZXJzaW9uPgogICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CiAgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+c3RheDwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29yZS1kYXRhYmluZGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9kYXRhYmluZGluZy9wcm9jZXNzb3IvRGF0YUJpbmRpbmdKYXZhSW50ZXJmYWNlUHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2NvcmUtZGF0YWJpbmRpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvZGF0YWJpbmRpbmcvcHJvY2Vzc29yL0RhdGFCaW5kaW5nSmF2YUludGVyZmFjZVByb2Nlc3Nvci5qYXZhCmluZGV4IDAxYTNjMTguLjIzZjEzM2IgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29yZS1kYXRhYmluZGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9kYXRhYmluZGluZy9wcm9jZXNzb3IvRGF0YUJpbmRpbmdKYXZhSW50ZXJmYWNlUHJvY2Vzc29yLmphdmEKKysrIGIvbW9kdWxlcy9jb3JlLWRhdGFiaW5kaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2RhdGFiaW5kaW5nL3Byb2Nlc3Nvci9EYXRhQmluZGluZ0phdmFJbnRlcmZhY2VQcm9jZXNzb3IuamF2YQpAQCAtMjEsOSArMjEsNyBAQAogCiBpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLk1hcDsKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGF0YWJpbmRpbmcuRGF0YUJpbmRpbmdFeHRlbnNpb25Qb2ludDsKQEAgLTY2LDI2ICs2NCwxNyBAQAogICAgICAgICAgICAgd3JhcHBlclN0eWxlID0gZGF0YUJpbmRpbmcud3JhcHBlZCgpOwogICAgICAgICB9CiAKLSAgICAgICAgTWFwPFN0cmluZywgT3BlcmF0aW9uPiBvcE1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgT3BlcmF0aW9uPigpOwogICAgICAgICBmb3IgKE9wZXJhdGlvbiBvcCA6IGphdmFJbnRlcmZhY2UuZ2V0T3BlcmF0aW9ucygpKSB7Ci0gICAgICAgICAgICBvcE1hcC5wdXQob3AuZ2V0TmFtZSgpLCBvcCk7CisgICAgICAgICAgICBKYXZhT3BlcmF0aW9uIG9wZXJhdGlvbiA9IChKYXZhT3BlcmF0aW9uKSBvcDsKICAgICAgICAgICAgIC8vIEluIHRoZSBjYXNlIG9mIEBXZWJNZXRob2QsIHRoZSBtZXRob2QgbmFtZSBjYW4gYmUgZGlmZmVyZW50IGZyb20gdGhlIG9wZXJhdGlvbiBuYW1lCi0gICAgICAgICAgICBpZiAob3AgaW5zdGFuY2VvZiBKYXZhT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgb3BNYXAucHV0KCgoSmF2YU9wZXJhdGlvbilvcCkuZ2V0SmF2YU1ldGhvZCgpLmdldE5hbWUoKSwgb3ApOwotICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoZGF0YUJpbmRpbmdJZCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgb3Auc2V0RGF0YUJpbmRpbmcoZGF0YUJpbmRpbmdJZCk7CiAgICAgICAgICAgICAgICAgb3Auc2V0V3JhcHBlclN0eWxlKHdyYXBwZXJTdHlsZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChNZXRob2QgbWV0aG9kIDogY2xhenouZ2V0TWV0aG9kcygpKSB7Ci0gICAgICAgICAgICBpZiAobWV0aG9kLmdldERlY2xhcmluZ0NsYXNzKCkgPT0gT2JqZWN0LmNsYXNzKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uID0gb3BNYXAuZ2V0KG1ldGhvZC5nZXROYW1lKCkpOwotICAgICAgICAgICAgaWYgKG9wZXJhdGlvbiA9PSBudWxsKSB7IC8vIEBXZWJNZXRob2QgZXhjbHVkZT10cnVlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE1ldGhvZCBtZXRob2QgPSBvcGVyYXRpb24uZ2V0SmF2YU1ldGhvZCgpOworCiAgICAgICAgICAgICBEYXRhQmluZGluZyBtZXRob2REYXRhQmluZGluZyA9IGNsYXp6LmdldEFubm90YXRpb24oRGF0YUJpbmRpbmcuY2xhc3MpOwogICAgICAgICAgICAgaWYgKG1ldGhvZERhdGFCaW5kaW5nID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBtZXRob2REYXRhQmluZGluZyA9IGRhdGFCaW5kaW5nOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlLWRhdGFiaW5kaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2RhdGFiaW5kaW5nL3dpcmUvRGF0YVRyYW5zZm9ybWF0aW9uSW50ZXJjZXB0b3IuamF2YSBiL21vZHVsZXMvY29yZS1kYXRhYmluZGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9kYXRhYmluZGluZy93aXJlL0RhdGFUcmFuc2Zvcm1hdGlvbkludGVyY2VwdG9yLmphdmEKaW5kZXggZGUyOTA4OC4uN2JmOTgzMyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb3JlLWRhdGFiaW5kaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2RhdGFiaW5kaW5nL3dpcmUvRGF0YVRyYW5zZm9ybWF0aW9uSW50ZXJjZXB0b3IuamF2YQorKysgYi9tb2R1bGVzL2NvcmUtZGF0YWJpbmRpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvZGF0YWJpbmRpbmcvd2lyZS9EYXRhVHJhbnNmb3JtYXRpb25JbnRlcmNlcHRvci5qYXZhCkBAIC0xOSwxMSArMTksMTYgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuZGF0YWJpbmRpbmcud2lyZTsKIAoraW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5UeXBlOwogaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLk1lZGlhdG9yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkRhdGFUeXBlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFPcGVyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludGVyY2VwdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZva2VyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlOwpAQCAtNTAsNiArNTUsMjEgQEAKICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5zb3VyY2VPcGVyYXRpb24gPSBzb3VyY2VPcGVyYXRpb247CiAgICAgICAgIHRoaXMudGFyZ2V0T3BlcmF0aW9uID0gdGFyZ2V0T3BlcmF0aW9uOworICAgICAgICBpZiAoIHNvdXJjZU9wZXJhdGlvbiBpbnN0YW5jZW9mIEphdmFPcGVyYXRpb24gKSB7CisgICAgICAgIAlKYXZhT3BlcmF0aW9uIGphdmFPcCA9IChKYXZhT3BlcmF0aW9uKSBzb3VyY2VPcGVyYXRpb247CisgICAgICAgIAlNZXRob2Qgc291cmNlTWV0aG9kID0gamF2YU9wLmdldEphdmFNZXRob2QoKTsKKyAgICAgICAgfQorICAgICAgICAvLyBIb2xkZXIgcGF0dGVybi4gSW4gb3JkZXIgdG8gcGVyZm9ybSBkYXRhIG1lZGlhdGlvbiBvbiBIb2xkZXIgcmV0dXJuIHR5cGVzLCBpdCBpcworICAgICAgICAvLyBuZWNlc3NhcnkgdG8gc2V0IHVwIGEgZGF0YSB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgSG9sZGVyPFQ+IGNsYXNzIFQuIG9uIHJldHVybi4KKyAgICAgICAgRGF0YVR5cGU8RGF0YVR5cGU+IHJldHVyblRhcmdldFR5cGUgPSBnZXRGaXJzdEhvbGRlclR5cGUoIHNvdXJjZU9wZXJhdGlvbi5nZXRJbnB1dFR5cGUoKSApOworICAgICAgICBpZiAoIHJldHVyblRhcmdldFR5cGUgIT0gbnVsbCApIHsKKyAgICAgICAgCXRoaXMuc291cmNlT3BlcmF0aW9uLnNldE91dHB1dFR5cGUocmV0dXJuVGFyZ2V0VHlwZSk7ICAgICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuVGFyZ2V0VHlwZSA9IGdldEZpcnN0SG9sZGVyVHlwZSggdGFyZ2V0T3BlcmF0aW9uLmdldElucHV0VHlwZSgpICk7CisgICAgICAgIGlmICggcmV0dXJuVGFyZ2V0VHlwZSAhPSBudWxsICkgeworICAgICAgICAJdGhpcy50YXJnZXRPcGVyYXRpb24uc2V0T3V0cHV0VHlwZShyZXR1cm5UYXJnZXRUeXBlKTsgICAgICAgICAgICAgICAKKyAgICAgICAgfQorICAgICAgICAJICAgICAgICAKICAgICAgICAgdGhpcy5tZWRpYXRvciA9IG1lZGlhdG9yOwogICAgICAgICB0aGlzLmludm9jYWJsZSA9IGludm9jYWJsZTsKICAgICB9CkBAIC02NCwxMiArODQsMTQgQEAKICAgICAgICAgT2JqZWN0IGlucHV0ID0gbWVkaWF0b3IubWVkaWF0ZUlucHV0KG1zZy5nZXRCb2R5KCksIHNvdXJjZU9wZXJhdGlvbiwgdGFyZ2V0T3BlcmF0aW9uLCBtZXRhZGF0YSk7CiAgICAgICAgIG1zZy5zZXRCb2R5KGlucHV0KTsKICAgICAgICAgTWVzc2FnZSByZXN1bHRNc2cgPSBuZXh0Lmludm9rZShtc2cpOwotICAgICAgICBPYmplY3QgcmVzdWx0ID0gcmVzdWx0TXNnLmdldEJvZHkoKTsKKyAgICAgICAKICAgICAgICAgaWYgKHNvdXJjZU9wZXJhdGlvbi5pc05vbkJsb2NraW5nKCkpIHsKICAgICAgICAgICAgIC8vIE5vdCB0byByZXNldCB0aGUgbWVzc2FnZSBib2R5CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0TXNnOwogICAgICAgICB9CiAKKyAgICAgICAgT2JqZWN0IHJlc3VsdCA9IHJlc3VsdE1zZy5nZXRCb2R5KCk7CisgICAgICAgIAogICAgICAgICBpZiAocmVzdWx0TXNnLmlzRmF1bHQoKSkgewogICAgICAgICAgICAgT2JqZWN0IHRyYW5zZm9ybWVkRmF1bHQgPSBudWxsOwogICAgICAgICAgICAgaWYgKChyZXN1bHQgaW5zdGFuY2VvZiBFeGNlcHRpb24pICYmICEocmVzdWx0IGluc3RhbmNlb2YgUnVudGltZUV4Y2VwdGlvbikpIHsKQEAgLTk1LDQgKzExNywzMiBAQAogICAgICAgICB0aGlzLm5leHQgPSBuZXh0OwogICAgIH0KIAorICAgIC8qKgorICAgICAqIFJldHVybnMgcmV0dXJuIHR5cGUgZm9yIGZpcnN0IEhvbGRlciBpbiBpbnB1dCBsaXN0LgorICAgICAqIFJldHVybnMgbnVsbCBpZiB0aGUgaW5wdXRzIGRvIG5vdCBjb250YWluIGEgSG9sZGVyLgorICAgICAqLworICAgIHByb3RlY3RlZCBzdGF0aWMgRGF0YVR5cGU8RGF0YVR5cGU+IGdldEZpcnN0SG9sZGVyVHlwZSggRGF0YVR5cGU8TGlzdDxEYXRhVHlwZT4+IGlucHV0VHlwZXMgKSB7CisgICAgCWlmIChpbnB1dFR5cGVzICE9IG51bGwpIHsKKyAgICAJCUxpc3Q8RGF0YVR5cGU+IGxvZ2ljYWxUeXBlID0gaW5wdXRUeXBlcy5nZXRMb2dpY2FsKCk7CisgICAgCQlpZiAobG9naWNhbFR5cGUgIT0gbnVsbCkgeworICAgIAkJCWZvciAoaW50IGkgPSAwOyBpIDwgbG9naWNhbFR5cGUuc2l6ZSgpOyBpKyspIHsKKyAgICAJCQkJRGF0YVR5cGUgZGF0YVR5cGUgPSBsb2dpY2FsVHlwZS5nZXQoaSk7CisgICAgCQkJCWlmIChpc0hvbGRlcihkYXRhVHlwZS5nZXRHZW5lcmljVHlwZSgpKSkgeworICAgIAkJCQkJLy8gRml4IHVwIG91dHB1dCBmcm9tIHZvaWQgdG8gcmV0dXJuZWQgZGF0YSB0eXBlLgorICAgIAkJCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJEYXRhVHJhbnNmb3JtYXRpb25JbnRlcmNlcHRvci48PiBzb3VyY2UgaW5wdXRbIiArIGkgKyAiXSBpcyBIb2xkZXIsIGxvZ2ljYWxUeXBlPSIgKyBkYXRhVHlwZSk7CisgICAgCQkJCQlyZXR1cm4gZGF0YVR5cGU7CisgICAgCQkJCX0KKyAgICAJCQl9CisgICAgCQl9CisgICAgCX0KKyAgICAJcmV0dXJuIG51bGw7CisgICAgfQorICAgIAorICAgIHByb3RlY3RlZCBzdGF0aWMgYm9vbGVhbiBpc0hvbGRlciggVHlwZSB0eXBlICkgeworICAgIAlTdHJpbmcgdHlwZVN0cmluZyA9IHR5cGUudG9TdHJpbmcoKTsKKyAgICAJaWYgKCB0eXBlU3RyaW5nLnN0YXJ0c1dpdGgoICJqYXZheC54bWwud3MuSG9sZGVyIiApICkgeworICAgIAkJcmV0dXJuIHRydWU7CisgICAgCX0KKyAgICAJcmV0dXJuIGZhbHNlOyAgICAgICAgCisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlLXJ1bnRpbWUtcG9tL3BvbS54bWwgYi9tb2R1bGVzL2NvcmUtcnVudGltZS1wb20vcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGJjMDE3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9jb3JlLXJ1bnRpbWUtcG9tL3BvbS54bWwKQEAgLTAsMCArMSwxOTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW1vZHVsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIENvcmUgUnVudGltZSBQT008L25hbWU+DQorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQorDQorICAgIDwhLS0gDQorICAgICAgICAgVGhlIGNvcmUgVHVzY2FueSBtb2R1bGVzIHRoYXQgYXJlIGdlbmVyYWxseSByZXF1aXJlZCBpbiBvcmRlcg0KKyAgICAgICAgIHRvIGJ1aWxkIGFuIGV4dGVuc2lvbi4gVGhpcyBzZXQgb2YgbW9kdWxlIGNvbnRhaW5zIHRoZSBUdXNjYW55DQorICAgICAgICAgU1BJDQorICAgIC0tPg0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5LXhtbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1hc3NlbWJseS14c2Q8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8IS0tIGluY2x1ZGVkIGJlY2F1c2UgYmluZGluZy13cy13c2RsZ2VuIG5lZWRzIGl0IC0tPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3M8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8IS0tIGluY2x1ZGVkIGFzIHRoZSBydW50aW1lIG5vcm1hbGl6ZXMgaW50ZXJmYWNlcyB0byBXU0RMIC0tPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3Mtd3NkbGdlbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1idWlsZGVyPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbW1vbi1qYXZhPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbW1vbi1odHRwPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbW1vbi14bWw8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1kYXRhYmluZGluZzwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlLXNwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZzwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZy1qYXhiPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRlcGxveW1lbnQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZXh0ZW5zaWJpbGl0eTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWh0dHA8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW50ZXJmYWNlLWphdmE8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW50ZXJmYWNlLWphdmEtamF4d3M8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW50ZXJmYWNlLXdzZGw8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktbW9uaXRvcjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXhzZDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFIGIvbW9kdWxlcy9jb3JlLXJ1bnRpbWUtcG9tL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKY29weSB0byBtb2R1bGVzL2NvcmUtcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UgYi9tb2R1bGVzL2NvcmUtcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL05PVElDRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UKY29weSB0byBtb2R1bGVzL2NvcmUtcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL05PVElDRQpkaWZmIC0tZ2l0IGEvc2hhZGVzL2Jhc2Uvc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQgYi9tb2R1bGVzL2NvcmUtcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzaGFkZXMvYmFzZS9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dApjb3B5IHRvIG1vZHVsZXMvY29yZS1ydW50aW1lLXBvbS9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlLXNwaS9wb20ueG1sIGIvbW9kdWxlcy9jb3JlLXNwaS9wb20ueG1sCmluZGV4IDI2OGEyZmIuLjgyNzgwYmQgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29yZS1zcGkvcG9tLnhtbAorKysgYi9tb2R1bGVzL2NvcmUtc3BpL3BvbS54bWwKQEAgLTU2LDcgKzU2LDcgQEAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3R4LWFzbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPgorICAgICAgICAgICAgPHZlcnNpb24+My4yLjY8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CiAgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgpAQCAtNjksNyArNjksNyBAQAogICAgIDwvZGVwZW5kZW5jaWVzPgogCiAgIDxidWlsZD4KLSAgICA8cGx1Z2lucz4KKyAgICA8IS0tIHBsdWdpbnM+CiAgICAgICA8cGx1Z2luPgogICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KICAgICAgICAgPGFydGlmYWN0SWQ+YnVpbGRudW1iZXItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgpAQCAtMTEyLDcgKzExMiw3IEBACiAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgPC9leGVjdXRpb25zPgogICAgICAgIDwvcGx1Z2luPgotICAgIDwvcGx1Z2lucz4KKyAgICA8L3BsdWdpbnMtLT4KICAgPC9idWlsZD4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udGV4dC9Db21wb3NpdGVDb250ZXh0LmphdmEgYi9tb2R1bGVzL2NvcmUtc3BpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250ZXh0L0NvbXBvc2l0ZUNvbnRleHQuamF2YQppbmRleCAyM2E1MGU1Li42NjA1ZmYzIDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvcmUtc3BpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250ZXh0L0NvbXBvc2l0ZUNvbnRleHQuamF2YQorKysgYi9tb2R1bGVzL2NvcmUtc3BpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250ZXh0L0NvbXBvc2l0ZUNvbnRleHQuamF2YQpAQCAtMzUsNyArMzUsNyBAQAogICogQHZlcnNpb24gJFJldiQgJERhdGUkCiAgKi8KIHB1YmxpYyBjbGFzcyBDb21wb3NpdGVDb250ZXh0IHsKLSAgICBwcm90ZWN0ZWQgZmluYWwgc3RhdGljIEluaGVyaXRhYmxlVGhyZWFkTG9jYWw8Q29tcG9zaXRlQ29udGV4dD4gY29udGV4dCA9IG5ldyBJbmhlcml0YWJsZVRocmVhZExvY2FsPENvbXBvc2l0ZUNvbnRleHQ+KCk7CisKICAgICBwcm90ZWN0ZWQgRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSBleHRlbnNpb25Qb2ludFJlZ2lzdHJ5OwogICAgIHByb3RlY3RlZCBFbmRwb2ludFJlZ2lzdHJ5IGVuZHBvaW50UmVnaXN0cnk7CiAgICAgcHJvdGVjdGVkIENvbXBvbmVudENvbnRleHRGYWN0b3J5IGNvbXBvbmVudENvbnRleHRGYWN0b3J5OwpAQCAtODQsMTAgKzg0LDYgQEAKICAgICAgICAgICAgIFJ1bnRpbWVDb21wb25lbnRDb250ZXh0IGNvbXBvbmVudENvbnRleHQgPSBjb21wb25lbnQuZ2V0Q29tcG9uZW50Q29udGV4dCgpOwogICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudENvbnRleHQuZ2V0Q29tcG9zaXRlQ29udGV4dCgpOwogICAgICAgICB9Ci0gICAgICAgIENvbXBvc2l0ZUNvbnRleHQgY29tcG9zaXRlQ29udGV4dCA9IGNvbnRleHQuZ2V0KCk7Ci0gICAgICAgIGlmIChjb21wb3NpdGVDb250ZXh0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJldHVybiBjb21wb3NpdGVDb250ZXh0OwotICAgICAgICB9CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KIApAQCAtMTI0LDE0ICsxMjAsNiBAQAogICAgICAgICByZXR1cm4gZG9tYWluQ29tcG9zaXRlOyAKICAgICB9CiAgICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFRocmVhZENvbXBvc2l0ZUNvbnRleHQoQ29tcG9zaXRlQ29udGV4dCB2YWx1ZSkgewotICAgICAgICBjb250ZXh0LnNldCh2YWx1ZSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCByZW1vdmVDb21wb3NpdGVDb250ZXh0KCkgewotICAgICAgICBjb250ZXh0LnJlbW92ZSgpOwotICAgIH0KLQogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Tm9kZVVSSSgpIHsKICAgICAgICAgcmV0dXJuIG5vZGVVUkk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcHJvdmlkZXIvQmFzZUJpbmRpbmdJbXBsLmphdmEgYi9tb2R1bGVzL2NvcmUtc3BpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wcm92aWRlci9CYXNlQmluZGluZ0ltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDQ3YmQyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcHJvdmlkZXIvQmFzZUJpbmRpbmdJbXBsLmphdmEKQEAgLTAsMCArMSw5NCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlcjsNCisNCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5CaW5kaW5nOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5Lk9wZXJhdGlvblNlbGVjdG9yOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LldpcmVGb3JtYXQ7DQorDQorLyoqDQorICogQmFzZSBhYnN0cmFjdCBpbXBsIGZvciBhIGJpbmRpbmcgbW9kZWwuDQorICovDQorcHVibGljIGFic3RyYWN0IGNsYXNzIEJhc2VCaW5kaW5nSW1wbCBpbXBsZW1lbnRzIEJpbmRpbmcgew0KKw0KKyAgICBwcml2YXRlIFN0cmluZyBuYW1lOw0KKyAgICBwcml2YXRlIFN0cmluZyB1cmk7DQorICAgIHByaXZhdGUgYm9vbGVhbiB1bnJlc29sdmVkOw0KKyAgICBwcml2YXRlIE9wZXJhdGlvblNlbGVjdG9yIG9wZXJhdGlvblNlbGVjdG9yOw0KKyAgICBwcml2YXRlIFdpcmVGb3JtYXQgcmVxdWVzdFdpcmVGb3JtYXQ7DQorICAgIHByaXZhdGUgV2lyZUZvcm1hdCByZXNwb25zZVdpcmVGb3JtYXQ7DQorDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsNCisgICAgICAgIHJldHVybiBuYW1lOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkgew0KKyAgICAgICAgcmV0dXJuIHVyaTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBzZXRVUkkoU3RyaW5nIHVyaSkgew0KKyAgICAgICAgdGhpcy51cmkgPSB1cmk7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgew0KKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsNCisgICAgfQ0KKw0KKyAgICBAT3ZlcnJpZGUNCisgICAgcHVibGljIE9iamVjdCBjbG9uZSgpIHRocm93cyBDbG9uZU5vdFN1cHBvcnRlZEV4Y2VwdGlvbiB7DQorICAgICAgICByZXR1cm4gc3VwZXIuY2xvbmUoKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgYm9vbGVhbiBpc1VucmVzb2x2ZWQoKSB7DQorICAgICAgICByZXR1cm4gdW5yZXNvbHZlZDsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBzZXRVbnJlc29sdmVkKGJvb2xlYW4gdW5yZXNvbHZlZCkgew0KKyAgICAgICAgdGhpcy51bnJlc29sdmVkID0gdW5yZXNvbHZlZDsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgYWJzdHJhY3QgUU5hbWUgZ2V0VHlwZSgpOw0KKyAgICANCisgICAgcHVibGljIFdpcmVGb3JtYXQgZ2V0UmVxdWVzdFdpcmVGb3JtYXQoKSB7DQorICAgICAgICByZXR1cm4gcmVxdWVzdFdpcmVGb3JtYXQ7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIHNldFJlcXVlc3RXaXJlRm9ybWF0KFdpcmVGb3JtYXQgd2lyZUZvcm1hdCkgeyAgDQorICAgICAgICB0aGlzLnJlcXVlc3RXaXJlRm9ybWF0ID0gd2lyZUZvcm1hdDsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIFdpcmVGb3JtYXQgZ2V0UmVzcG9uc2VXaXJlRm9ybWF0KCkgew0KKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlV2lyZUZvcm1hdDsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIHZvaWQgc2V0UmVzcG9uc2VXaXJlRm9ybWF0KFdpcmVGb3JtYXQgd2lyZUZvcm1hdCkgew0KKyAgICAgICAgdGhpcy5yZXNwb25zZVdpcmVGb3JtYXQgPSB3aXJlRm9ybWF0Ow0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgT3BlcmF0aW9uU2VsZWN0b3IgZ2V0T3BlcmF0aW9uU2VsZWN0b3IoKSB7DQorICAgICAgICByZXR1cm4gb3BlcmF0aW9uU2VsZWN0b3I7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIHNldE9wZXJhdGlvblNlbGVjdG9yKE9wZXJhdGlvblNlbGVjdG9yIG9wZXJhdGlvblNlbGVjdG9yKSB7DQorICAgICAgICB0aGlzLm9wZXJhdGlvblNlbGVjdG9yID0gb3BlcmF0aW9uU2VsZWN0b3I7DQorICAgIH0gICAgDQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29yZS1zcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Byb3ZpZGVyL0RlZmF1bHRQcm92aWRlckZhY3RvcnlFeHRlbnNpb25Qb2ludC5qYXZhIGIvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcHJvdmlkZXIvRGVmYXVsdFByb3ZpZGVyRmFjdG9yeUV4dGVuc2lvblBvaW50LmphdmEKaW5kZXggNmFhZDY3OC4uNDBiNjI3NSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcHJvdmlkZXIvRGVmYXVsdFByb3ZpZGVyRmFjdG9yeUV4dGVuc2lvblBvaW50LmphdmEKKysrIGIvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcHJvdmlkZXIvRGVmYXVsdFByb3ZpZGVyRmFjdG9yeUV4dGVuc2lvblBvaW50LmphdmEKQEAgLTY1LDcgKzY1LDEwIEBACiAgICAgICAgIGlmKHByb3ZpZGVyRmFjdG9yeSBpbnN0YW5jZW9mIFBvbGljeVByb3ZpZGVyRmFjdG9yeSkgewogICAgICAgICAgICAgcG9saWN5UHJvdmlkZXJGYWN0b3JpZXMuYWRkKChQb2xpY3lQcm92aWRlckZhY3RvcnkpcHJvdmlkZXJGYWN0b3J5KTsKICAgICAgICAgfSAKLSAgICAgICAgcHJvdmlkZXJGYWN0b3JpZXMucHV0KHByb3ZpZGVyRmFjdG9yeS5nZXRNb2RlbFR5cGUoKSwgcHJvdmlkZXJGYWN0b3J5KTsKKyAgICAgICAgLy8gT25seSBhZGQgdGhlIDFzdCBpbnN0YW5jZSBzbyB0aGF0IHRoZSBvbmVzIHdpdGggaGlnaGVyIHJhbmtpbmcgd2l0aCBwcmV2YWlsCisgICAgICAgIGlmICghcHJvdmlkZXJGYWN0b3JpZXMuY29udGFpbnNLZXkocHJvdmlkZXJGYWN0b3J5LmdldE1vZGVsVHlwZSgpKSkgeworICAgICAgICAgICAgcHJvdmlkZXJGYWN0b3JpZXMucHV0KHByb3ZpZGVyRmFjdG9yeS5nZXRNb2RlbFR5cGUoKSwgcHJvdmlkZXJGYWN0b3J5KTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qKgpAQCAtMTQ4LDkgKzE1MSw2IEBACiAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKGUpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gR2V0IHRoZSB0YXJnZXQgZXh0ZW5zaW9uIHBvaW50Ci0gICAgICAgIFByb3ZpZGVyRmFjdG9yeUV4dGVuc2lvblBvaW50IGZhY3RvcnlFeHRlbnNpb25Qb2ludCA9Ci0gICAgICAgICAgICByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChQcm92aWRlckZhY3RvcnlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CiAgICAgICAgIExpc3Q8UHJvdmlkZXJGYWN0b3J5PiBmYWN0b3JpZXMgPSBuZXcgQXJyYXlMaXN0PFByb3ZpZGVyRmFjdG9yeT4oKTsKIAogICAgICAgICBmb3IgKFNlcnZpY2VEZWNsYXJhdGlvbiBmYWN0b3J5RGVjbGFyYXRpb24gOiBmYWN0b3J5RGVjbGFyYXRpb25zKSB7CkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBwcm92aWRlciBmYWN0b3J5IHdyYXBwZXIgYW5kIHJlZ2lzdGVyIGl0CiAgICAgICAgICAgICAgICAgSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkgZmFjdG9yeSA9CiAgICAgICAgICAgICAgICAgICAgIG5ldyBMYXp5SW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkocmVnaXN0cnksIG1vZGVsVHlwZU5hbWUsIGZhY3RvcnlEZWNsYXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgZmFjdG9yeUV4dGVuc2lvblBvaW50LmFkZFByb3ZpZGVyRmFjdG9yeShmYWN0b3J5KTsKKyAgICAgICAgICAgICAgICBhZGRQcm92aWRlckZhY3RvcnkoZmFjdG9yeSk7CiAgICAgICAgICAgICAgICAgZmFjdG9yaWVzLmFkZChmYWN0b3J5KTsKIAogICAgICAgICAgICAgfSBlbHNlIGlmIChmYWN0b3J5Q2xhc3MgPT0gQmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5jbGFzcykgewpAQCAtMTc0LDcgKzE3NCw3IEBACiAgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgcHJvdmlkZXIgZmFjdG9yeSB3cmFwcGVyIGFuZCByZWdpc3RlciBpdAogICAgICAgICAgICAgICAgIEJpbmRpbmdQcm92aWRlckZhY3RvcnkgZmFjdG9yeSA9CiAgICAgICAgICAgICAgICAgICAgIG5ldyBMYXp5QmluZGluZ1Byb3ZpZGVyRmFjdG9yeShyZWdpc3RyeSwgbW9kZWxUeXBlTmFtZSwgZmFjdG9yeURlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICBmYWN0b3J5RXh0ZW5zaW9uUG9pbnQuYWRkUHJvdmlkZXJGYWN0b3J5KGZhY3RvcnkpOworICAgICAgICAgICAgICAgIGFkZFByb3ZpZGVyRmFjdG9yeShmYWN0b3J5KTsKICAgICAgICAgICAgICAgICBmYWN0b3JpZXMuYWRkKGZhY3RvcnkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChmYWN0b3J5Q2xhc3MgPT0gUG9saWN5UHJvdmlkZXJGYWN0b3J5LmNsYXNzKSB7CiAgICAgICAgICAgICAgICAgLy8gTG9hZCBhIHBvbGljeSBwcm92aWRlciBmYWN0b3J5CkBAIC0xODMsNyArMTgzLDcgQEAKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBwcm92aWRlciBmYWN0b3J5IHdyYXBwZXIgYW5kIHJlZ2lzdGVyIGl0CiAgICAgICAgICAgICAgICAgUG9saWN5UHJvdmlkZXJGYWN0b3J5IGZhY3RvcnkgPQogICAgICAgICAgICAgICAgICAgICBuZXcgTGF6eVBvbGljeVByb3ZpZGVyRmFjdG9yeShyZWdpc3RyeSwgbW9kZWxUeXBlTmFtZSwgZmFjdG9yeURlY2xhcmF0aW9uKTsKLSAgICAgICAgICAgICAgICBmYWN0b3J5RXh0ZW5zaW9uUG9pbnQuYWRkUHJvdmlkZXJGYWN0b3J5KGZhY3RvcnkpOworICAgICAgICAgICAgICAgIGFkZFByb3ZpZGVyRmFjdG9yeShmYWN0b3J5KTsKICAgICAgICAgICAgICAgICBmYWN0b3JpZXMuYWRkKGZhY3RvcnkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChmYWN0b3J5Q2xhc3MgPT0gV2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeS5jbGFzcykgewogCkBAIC0xOTMsNyArMTkzLDcgQEAKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBwcm92aWRlciBmYWN0b3J5IHdyYXBwZXIgYW5kIHJlZ2lzdGVyIGl0CiAgICAgICAgICAgICAgICAgV2lyZUZvcm1hdFByb3ZpZGVyRmFjdG9yeSBmYWN0b3J5ID0KICAgICAgICAgICAgICAgICAgICAgbmV3IExhenlXaXJlRm9ybWF0UHJvdmlkZXJGYWN0b3J5KHJlZ2lzdHJ5LCBtb2RlbFR5cGVOYW1lLCBmYWN0b3J5RGVjbGFyYXRpb24pOwotICAgICAgICAgICAgICAgIGZhY3RvcnlFeHRlbnNpb25Qb2ludC5hZGRQcm92aWRlckZhY3RvcnkoZmFjdG9yeSk7CisgICAgICAgICAgICAgICAgYWRkUHJvdmlkZXJGYWN0b3J5KGZhY3RvcnkpOwogICAgICAgICAgICAgICAgIGZhY3Rvcmllcy5hZGQoZmFjdG9yeSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGZhY3RvcnlDbGFzcyA9PSBPcGVyYXRpb25TZWxlY3RvclByb3ZpZGVyRmFjdG9yeS5jbGFzcykgewogCkBAIC0yMDMsNyArMjAzLDcgQEAKICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBwcm92aWRlciBmYWN0b3J5IHdyYXBwZXIgYW5kIHJlZ2lzdGVyIGl0CiAgICAgICAgICAgICAgICAgT3BlcmF0aW9uU2VsZWN0b3JQcm92aWRlckZhY3RvcnkgZmFjdG9yeSA9CiAgICAgICAgICAgICAgICAgICAgIG5ldyBMYXp5T3BlcmF0aW9uU2VsZWN0b3JQcm92aWRlckZhY3RvcnkocmVnaXN0cnksIG1vZGVsVHlwZU5hbWUsIGZhY3RvcnlEZWNsYXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgZmFjdG9yeUV4dGVuc2lvblBvaW50LmFkZFByb3ZpZGVyRmFjdG9yeShmYWN0b3J5KTsKKyAgICAgICAgICAgICAgICBhZGRQcm92aWRlckZhY3RvcnkoZmFjdG9yeSk7CiAgICAgICAgICAgICAgICAgZmFjdG9yaWVzLmFkZChmYWN0b3J5KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcnVudGltZS9SdW50aW1lRW5kcG9pbnQuamF2YSBiL21vZHVsZXMvY29yZS1zcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3J1bnRpbWUvUnVudGltZUVuZHBvaW50LmphdmEKaW5kZXggZjQ0MTFkNy4uNzhmMmQ5NSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcnVudGltZS9SdW50aW1lRW5kcG9pbnQuamF2YQorKysgYi9tb2R1bGVzL2NvcmUtc3BpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ydW50aW1lL1J1bnRpbWVFbmRwb2ludC5qYXZhCkBAIC03Miw0ICs3MiwxMiBAQAogICAgICAqLwogICAgIENvbXBvc2l0ZUNvbnRleHQgZ2V0Q29tcG9zaXRlQ29udGV4dCgpOwogICAgIAorICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSBub3JtYWxpemVkIFdTREwgY29udHJhY3QgcmVsYXRpbmcgdG8gdGhlIGlucHV0IFdTREwgY29udHJhY3QKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gaW50ZXJmYWNlQ29udHJhY3QKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIEludGVyZmFjZUNvbnRyYWN0IGdldEdlbmVyYXRlZFdTRExDb250cmFjdChJbnRlcmZhY2VDb250cmFjdCBpbnRlcmZhY2VDb250cmFjdCk7ICAgIAorICAgIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcnVudGltZS9SdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UuamF2YSBiL21vZHVsZXMvY29yZS1zcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3J1bnRpbWUvUnVudGltZUVuZHBvaW50UmVmZXJlbmNlLmphdmEKaW5kZXggMTk3YTQ2Yi4uNDJlNzMyOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb3JlLXNwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcnVudGltZS9SdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UuamF2YQorKysgYi9tb2R1bGVzL2NvcmUtc3BpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ydW50aW1lL1J1bnRpbWVFbmRwb2ludFJlZmVyZW5jZS5qYXZhCkBAIC02OSw0ICs2OSwxMiBAQAogICAgIGJvb2xlYW4gaXNPdXRPZkRhdGUoKTsKICAgICB2b2lkIHJlYnVpbGQoKTsKICAgICBib29sZWFuIGlzU3RhcnRlZCgpOworICAgIAorICAgIC8qKgorICAgICAqIFJldHJpZXZlIHRoZSBub3JtYWxpemVkIFdTREwgY29udHJhY3QgcmVsYXRpbmcgdG8gdGhlIGlucHV0IFdTREwgY29udHJhY3QKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gaW50ZXJmYWNlQ29udHJhY3QKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgcHVibGljIEludGVyZmFjZUNvbnRyYWN0IGdldEdlbmVyYXRlZFdTRExDb250cmFjdChJbnRlcmZhY2VDb250cmFjdCBpbnRlcmZhY2VDb250cmFjdCk7CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvcmUtc3BpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS93b3JrL1dvcmtTY2hlZHVsZXIuamF2YSBiL21vZHVsZXMvY29yZS1zcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3dvcmsvV29ya1NjaGVkdWxlci5qYXZhCmluZGV4IDJjNWZiNTUuLmY4YTFlZjQgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29yZS1zcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3dvcmsvV29ya1NjaGVkdWxlci5qYXZhCisrKyBiL21vZHVsZXMvY29yZS1zcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3dvcmsvV29ya1NjaGVkdWxlci5qYXZhCkBAIC0xOCw2ICsxOCw4IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS53b3JrOwogCitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOworCiAvKioKICAqIERlZmluZXMgdGhlIGNvbnRyYWN0IGZvciBzY2hlZHVsaW5nIGFzeW5jaHJvbm91cyB1bml0cyBvZiB3b3JrLgogICoKQEAgLTUwLDUgKzUyLDExIEBACiAgICAgICogQHBhcmFtIHdvcmsgVGhlIHVuaXQgb2Ygd29yayB0aGF0IG5lZWRzIHRvIGJlIGFzeW5jaHJvbm91c2x5IGV4ZWN1dGVkLgogICAgICAqLwogICAgIDxUIGV4dGVuZHMgUnVubmFibGU+dm9pZCBzY2hlZHVsZVdvcmsoVCB3b3JrKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgZ2V0RXhlY3V0b3JTZXJ2aWNlCisgICAgICogQHJldHVybgorICAgICAqLworICAgIEV4ZWN1dG9yU2VydmljZSBnZXRFeGVjdXRvclNlcnZpY2UoKTsKIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9jb3JlL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDYyZmMxODMuLmRiMDVkZTMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29yZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9tb2R1bGVzL2NvcmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTEsNSArMSw2IEBACiBNYW5pZmVzdC1WZXJzaW9uOiAxLjANCiBFeHBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIjt1c2VzOj0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseSxvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbDt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5jb250ZXh0O3ZlcnNpb249IjIuMC4wIjsNCiAgIHVzZXM6PSJqYXZheC54bWwuc3RyZWFtLA0KICAgIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZSwNCkBAIC0zMyw2ICszNCw3IEBACiBJbXBvcnQtUGFja2FnZTogamF2YXguc2VjdXJpdHkuYXV0aCwNCiAgamF2YXgueG1sLm5hbWVzcGFjZSwNCiAgamF2YXgueG1sLnN0cmVhbSwNCisgamF2YXgueG1sLnRyYW5zZm9ybSwNCiAgbmV0LnNmLmNnbGliLnByb3h5O3Jlc29sdXRpb246PW9wdGlvbmFsLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5idWlsZGVyO3ZlcnNpb249IjIuMC4wIiwNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvcmUvcG9tLnhtbCBiL21vZHVsZXMvY29yZS9wb20ueG1sCmluZGV4IDg4MzJhMDAuLjQ4ZDc2YTYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29yZS9wb20ueG1sCisrKyBiL21vZHVsZXMvY29yZS9wb20ueG1sCkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3N0eC1hc2w8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjIuNDwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi42PC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgogICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CiAgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9hc3NlbWJseS9pbXBsL1J1bnRpbWVFbmRwb2ludEltcGwuamF2YSBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9hc3NlbWJseS9pbXBsL1J1bnRpbWVFbmRwb2ludEltcGwuamF2YQppbmRleCBmZTllNDM3Li45MTkzYzE1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvYXNzZW1ibHkvaW1wbC9SdW50aW1lRW5kcG9pbnRJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2Fzc2VtYmx5L2ltcGwvUnVudGltZUVuZHBvaW50SW1wbC5qYXZhCkBAIC0yMTIsNiArMjEyLDEyIEBACiAgICAgICAgICAgICBiaW5kaW5nSW52b2NhdGlvbkNoYWluID0gbmV3IEludm9jYXRpb25DaGFpbkltcGwobnVsbCwgbnVsbCwgZmFsc2UsIHBoYXNlTWFuYWdlcik7CiAgICAgICAgICAgICBpbml0U2VydmljZUJpbmRpbmdJbnZvY2F0aW9uQ2hhaW5zKCk7CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEluaXQgdGhlIG9wZXJhdGlvbiBpbnZvY2F0aW9uIGNoYWlucyBub3cuIFdlIGtub3cgdGhleSB3aWxsIAorICAgICAgICAvLyBiZSBuZWVkZWQgYXMgd2VsbCBhcyB0aGUgYmluZGluZyBpbnZvY2F0aW9uIGNoYWluIGFuZCB0aGlzCisgICAgICAgIC8vIG1ha2VzIHRoZSB3aXJlIHByb2Nlc3NvcnMgcnVuCisgICAgICAgIGdldEludm9jYXRpb25DaGFpbnMoKTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiBiaW5kaW5nSW52b2NhdGlvbkNoYWluOwogICAgIH0KIApAQCAtMjM1LDYgKzI0MSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbkNoYWluTWFwLnB1dChvcGVyYXRpb24sIGNoYWluKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbjsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJmYWNlQ29udHJhY3RNYXBwZXIuaXNDb21wYXRpYmxlKG9wZXJhdGlvbiwgb3AsIENvbXBhdGliaWxpdHkuU1VCU0VUKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbkNoYWluTWFwLnB1dChvcGVyYXRpb24sIGNoYWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFtyZmVuZ10gV2UgbmVlZCB0byBydW4gdGhlIGNvbXBhdGliaWxpdHkgY2hlY2sgZm9yIGxvY2FsIG9wZXJhdGlvbnMgYXMgdGhleSAKICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIGJlIG92ZXJsb2FkZWQKQEAgLTQ4OCwyNyArNDk4LDMyIEBACiAgICAgICAgIAogICAgICAgICBJbnRlcmZhY2VDb250cmFjdCBzZXJ2aWNlQ29udHJhY3QgPSBnZXRDb21wb25lbnRTZXJ2aWNlSW50ZXJmYWNlQ29udHJhY3QoKTsKICAgICAgICAgSW50ZXJmYWNlQ29udHJhY3QgYmluZGluZ0NvbnRyYWN0ID0gZ2V0QmluZGluZ0ludGVyZmFjZUNvbnRyYWN0KCk7Ci0KKyAgICAgICAgICAgICAgICAKICAgICAgICAgaWYgKChzZXJ2aWNlQ29udHJhY3QgIT0gbnVsbCkgJiYKICAgICAgICAgICAgIChiaW5kaW5nQ29udHJhY3QgIT0gbnVsbCkpewogICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2xlYW4gYmluZGluZ0hhc0NhbGxiYWNrID0gYmluZGluZ0NvbnRyYWN0LmdldENhbGxiYWNrSW50ZXJmYWNlKCkgIT0gbnVsbDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBpZiAoKHNlcnZpY2VDb250cmFjdC5nZXRDbGFzcygpICE9IGJpbmRpbmdDb250cmFjdC5nZXRDbGFzcygpKSAmJgotICAgICAgICAgICAgICAgICAgICAoc2VydmljZUNvbnRyYWN0IGluc3RhbmNlb2YgSmF2YUludGVyZmFjZUNvbnRyYWN0KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlQ29udHJhY3RNYXBwZXIuY2hlY2tDb21wYXRpYmlsaXR5KGdldEdlbmVyYXRlZFdTRExDb250cmFjdChzZXJ2aWNlQ29udHJhY3QpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nQ29udHJhY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhdGliaWxpdHkuU1VCU0VULCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYmluZGluZ0hhc0NhbGxiYWNrLCAvLyBpZ25vcmUgY2FsbGJhY2tzIGlmIGJpbmRpbmcgZG9lc24ndCBoYXZlIG9uZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VDb250cmFjdE1hcHBlci5jaGVja0NvbXBhdGliaWxpdHkoc2VydmljZUNvbnRyYWN0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nQ29udHJhY3QsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBhdGliaWxpdHkuU1VCU0VULCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYmluZGluZ0hhc0NhbGxiYWNrLCAvLyBpZ25vcmUgY2FsbGJhY2tzIGlmIGJpbmRpbmcgZG9lc24ndCBoYXZlIG9uZSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7ICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHRyeSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBVc2UgdGhlIG5vcm1hbGl6ZWQgY29udHJhY3QgaWYgdGhlIGludGVyZmFjZSB0eXBlcyBhcmUgZGlmZmVyZW50IG9yIGlmIAorICAgICAgICAgICAgICAgIC8vIGEgbm9ybWFsaXplZCBjb250cmFjdCBoYXMgYmVlbiBwcmV2aW91c2x5IGdlbmVyYXRlLCBmb3IgZXhhbXBsZSwgYnkgdmlydHVlCisgICAgICAgICAgICAgICAgLy8gb2YgZmluZGluZyBhIEpBWFdTIGFubm90YXRpb24gb24gYSBKYXZhIGNsYXNzIHRoYXQgcmVmZXJlbmNlcyBhIFdTREwgZmlsZQorICAgICAgICAgICAgICAgIGlmIChzZXJ2aWNlQ29udHJhY3QuZ2V0Q2xhc3MoKSAhPSBiaW5kaW5nQ29udHJhY3QuZ2V0Q2xhc3MoKSB8fAorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlQ29udHJhY3QuZ2V0Tm9ybWFsaXplZFdTRExDb250cmFjdCgpICE9IG51bGwgfHwKKyAgICAgICAgICAgICAgICAgICAgYmluZGluZ0NvbnRyYWN0LmdldE5vcm1hbGl6ZWRXU0RMQ29udHJhY3QoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZUNvbnRyYWN0TWFwcGVyLmNoZWNrQ29tcGF0aWJpbGl0eShnZXRHZW5lcmF0ZWRXU0RMQ29udHJhY3Qoc2VydmljZUNvbnRyYWN0KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRHZW5lcmF0ZWRXU0RMQ29udHJhY3QoYmluZGluZ0NvbnRyYWN0KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXRpYmlsaXR5LlNVQlNFVCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYmluZGluZ0hhc0NhbGxiYWNrLCAvLyBpZ25vcmUgY2FsbGJhY2tzIGlmIGJpbmRpbmcgZG9lc24ndCBoYXZlIG9uZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VDb250cmFjdE1hcHBlci5jaGVja0NvbXBhdGliaWxpdHkoc2VydmljZUNvbnRyYWN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdDb250cmFjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXRpYmlsaXR5LlNVQlNFVCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYmluZGluZ0hhc0NhbGxiYWNrLCAvLyBpZ25vcmUgY2FsbGJhY2tzIGlmIGJpbmRpbmcgZG9lc24ndCBoYXZlIG9uZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgfSAgCiAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbigiQ29tcG9uZW50ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbXBvbmVudCgpLmdldE5hbWUoKSArCkBAIC02MjAsNyArNjM1LDYgQEAKICAgICAgICAgICAgIGZvciAoUG9saWN5UHJvdmlkZXIgcCA6IHBwcykgewogICAgICAgICAgICAgICAgIEludGVyY2VwdG9yIGludGVyY2VwdG9yID0gcC5jcmVhdGVJbnRlcmNlcHRvcihvcGVyYXRpb24pOwogICAgICAgICAgICAgICAgIGlmIChpbnRlcmNlcHRvciAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vY2hhaW4uYWRkSW50ZXJjZXB0b3IocC5jcmVhdGVJbnRlcmNlcHRvcihvcGVyYXRpb24pKTsKICAgICAgICAgICAgICAgICAgICAgY2hhaW4uYWRkSW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTgxMSw3ICs4MjUsNyBAQAogICAgICAgICAgICAgICAgIGlmIChjb250cmFjdEJ1aWxkZXIgPT0gbnVsbCl7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbigiQ29udHJhY3QgYnVpbGRlciBub3QgZm91bmQgd2hpbGUgY2FsY3VsYXRpbmcgV1NETCBjb250cmFjdCBmb3IgIiArIHRoaXMudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNvbnRyYWN0QnVpbGRlci5idWlsZChnZXRDb21wb25lbnRTZXJ2aWNlSW50ZXJmYWNlQ29udHJhY3QoKSwgbnVsbCk7CisgICAgICAgICAgICAgICAgY29udHJhY3RCdWlsZGVyLmJ1aWxkKGludGVyZmFjZUNvbnRyYWN0LCBudWxsKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKZGlmZiAtLWdpdCBhL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9hc3NlbWJseS9pbXBsL1J1bnRpbWVFbmRwb2ludFJlZmVyZW5jZUltcGwuamF2YSBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9hc3NlbWJseS9pbXBsL1J1bnRpbWVFbmRwb2ludFJlZmVyZW5jZUltcGwuamF2YQppbmRleCAzODczMTg1Li4zNjQ4MGYzIDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvYXNzZW1ibHkvaW1wbC9SdW50aW1lRW5kcG9pbnRSZWZlcmVuY2VJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2Fzc2VtYmx5L2ltcGwvUnVudGltZUVuZHBvaW50UmVmZXJlbmNlSW1wbC5qYXZhCkBAIC0zOCw3ICszOCw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db250cmFjdDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkVuZHBvaW50UmVmZXJlbmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuYnVpbGRlci5CdWlsZGVyRXh0ZW5zaW9uUG9pbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5idWlsZGVyLkNvbnRyYWN0QnVpbGRlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGwuRW5kcG9pbnRSZWZlcmVuY2VJbXBsOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udGV4dC5Db21wb3NpdGVDb250ZXh0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OwpAQCAtNTMsNyArNTIsNiBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0TWFwcGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlQ29udHJhY3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludGVyY2VwdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZvY2F0aW9uQ2hhaW47CkBAIC02MSw3ICs1OSw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2VGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5QaGFzZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuTW9uaXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5FbmRwb2ludFJlZmVyZW5jZVByb3ZpZGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuUG9saWN5UHJvdmlkZXI7CkBAIC0zMjUsMTUgKzMyMiwxOCBAQAogICAgICAgICAKICAgICAgICBpZiAoKHJlZmVyZW5jZUNvbnRyYWN0ICE9IG51bGwpICYmCiAgICAgICAgICAgIChiaW5kaW5nQ29udHJhY3QgIT0gbnVsbCkpewotICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgYm9vbGVhbiBiaW5kaW5nSGFzQ2FsbGJhY2sgPSBiaW5kaW5nQ29udHJhY3QuZ2V0Q2FsbGJhY2tJbnRlcmZhY2UoKSAhPSBudWxsOwogCiAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgIGlmICgocmVmZXJlbmNlQ29udHJhY3QuZ2V0Q2xhc3MoKSAhPSBiaW5kaW5nQ29udHJhY3QuZ2V0Q2xhc3MoKSkgJiYKLSAgICAgICAgICAgICAgICAgICAocmVmZXJlbmNlQ29udHJhY3QgaW5zdGFuY2VvZiBKYXZhSW50ZXJmYWNlQ29udHJhY3QpKSB7CisgICAgICAgICAgICAgICAvLyBVc2UgdGhlIG5vcm1hbGl6ZWQgY29udHJhY3QgaWYgdGhlIGludGVyZmFjZSB0eXBlcyBhcmUgZGlmZmVyZW50IG9yIGlmIAorICAgICAgICAgICAgICAgLy8gYSBub3JtYWxpemVkIGNvbnRyYWN0IGhhcyBiZWVuIHByZXZpb3VzbHkgZ2VuZXJhdGUsIGZvciBleGFtcGxlLCBieSB2aXJ0dWUKKyAgICAgICAgICAgICAgIC8vIG9mIGZpbmRpbmcgYSBKQVhXUyBhbm5vdGF0aW9uIG9uIGEgSmF2YSBjbGFzcyB0aGF0IHJlZmVyZW5jZXMgYSBXU0RMIGZpbGUKKyAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VDb250cmFjdC5nZXRDbGFzcygpICE9IGJpbmRpbmdDb250cmFjdC5nZXRDbGFzcygpIHx8CisgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlQ29udHJhY3QuZ2V0Tm9ybWFsaXplZFdTRExDb250cmFjdCgpICE9IG51bGwgfHwKKyAgICAgICAgICAgICAgICAgICBiaW5kaW5nQ29udHJhY3QuZ2V0Tm9ybWFsaXplZFdTRExDb250cmFjdCgpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VDb250cmFjdE1hcHBlci5jaGVja0NvbXBhdGliaWxpdHkoZ2V0R2VuZXJhdGVkV1NETENvbnRyYWN0KHJlZmVyZW5jZUNvbnRyYWN0KSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdDb250cmFjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldEdlbmVyYXRlZFdTRExDb250cmFjdChiaW5kaW5nQ29udHJhY3QpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGF0aWJpbGl0eS5TVUJTRVQsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYmluZGluZ0hhc0NhbGxiYWNrLCAvLyBpZ25vcmUgY2FsbGJhY2tzIGlmIGJpbmRpbmcgZG9lc24ndCBoYXZlIG9uZSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UpOwpAQCAtMzQ0LDcgKzM0NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFiaW5kaW5nSGFzQ2FsbGJhY2ssIC8vIGlnbm9yZSBjYWxsYmFja3MgaWYgYmluZGluZyBkb2Vzbid0IGhhdmUgb25lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7ICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgfSAgCi0KICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KXsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbigiQ29tcG9uZW50ICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29tcG9uZW50KCkuZ2V0TmFtZSgpICsKQEAgLTUzOSw3ICs1MzgsMTAgQEAKICAgICAgICAgaWYgKGJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCAhPSBudWxsKSB7CiAgICAgICAgICAgICByZXR1cm4gYmluZGluZ0ludGVyZmFjZUNvbnRyYWN0OwogICAgICAgICB9Ci0gICAgICAgIGJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCA9IGdldEJpbmRpbmdQcm92aWRlcigpLmdldEJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCgpOworICAgICAgICBSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgcHJvdmlkZXIgPSBnZXRCaW5kaW5nUHJvdmlkZXIoKTsKKyAgICAgICAgaWYgKHByb3ZpZGVyICE9IG51bGwpIHsKKyAgICAgICAgICAgIGJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCA9IHByb3ZpZGVyLmdldEJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCgpOworICAgICAgICB9CiAgICAgICAgIGlmIChiaW5kaW5nSW50ZXJmYWNlQ29udHJhY3QgPT0gbnVsbCkgewogICAgICAgICAgICAgYmluZGluZ0ludGVyZmFjZUNvbnRyYWN0ID0gZ2V0Q29tcG9uZW50UmVmZXJlbmNlSW50ZXJmYWNlQ29udHJhY3QoKTsKICAgICAgICAgfQpAQCAtNjA4LDcgKzYxMCw3IEBACiAgICAgICAgICAgICAgICAgaWYgKGNvbnRyYWN0QnVpbGRlciA9PSBudWxsKXsKICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uKCJDb250cmFjdCBidWlsZGVyIG5vdCBmb3VuZCB3aGlsZSBjYWxjdWxhdGluZyBXU0RMIGNvbnRyYWN0IGZvciAiICsgdGhpcy50b1N0cmluZygpKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY29udHJhY3RCdWlsZGVyLmJ1aWxkKGdldENvbXBvbmVudFJlZmVyZW5jZUludGVyZmFjZUNvbnRyYWN0KCksIG51bGwpOworICAgICAgICAgICAgICAgIGNvbnRyYWN0QnVpbGRlci5idWlsZChpbnRlcmZhY2VDb250cmFjdCwgbnVsbCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvY29udGV4dC9pbXBsL0NvbXBvbmVudENvbnRleHRJbXBsLmphdmEgYi9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvY29udGV4dC9pbXBsL0NvbXBvbmVudENvbnRleHRJbXBsLmphdmEKaW5kZXggOTk5ODU0YS4uY2ZhMmEzYyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2NvbnRleHQvaW1wbC9Db21wb25lbnRDb250ZXh0SW1wbC5qYXZhCisrKyBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9jb250ZXh0L2ltcGwvQ29tcG9uZW50Q29udGV4dEltcGwuamF2YQpAQCAtNDcsNiArNDcsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludmFsaWRJbnRlcmZhY2VFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZUNvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkNvbXBvc2l0ZUFjdGl2YXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRW5kcG9pbnRSZWZlcmVuY2VCaW5kZXI7CkBAIC01OSw2ICs2MCw4IEBACiBpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJlZmVyZW5jZTsKIGltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjsKIAoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0TWFwcGVyOworCiAvKioKICAqIEltcGxlbWVudGF0aW9uIG9mIENvbXBvbmVudENvbnRleHQgdGhhdCBkZWxlZ2F0ZXMgdG8gYSBDb21wb25lbnRDb250ZXh0UHJvdmlkZXIuCiAgKgpAQCAtNzUsNiArNzgsNyBAQAogICAgIHByaXZhdGUgZmluYWwgSmF2YUludGVyZmFjZUZhY3RvcnkgamF2YUludGVyZmFjZUZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBmaW5hbCBQcm9wZXJ0eVZhbHVlRmFjdG9yeSBwcm9wZXJ0eUZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBmaW5hbCBFbmRwb2ludFJlZmVyZW5jZUJpbmRlciBlcHJCaW5kZXI7CisgICAgcHJpdmF0ZSBmaW5hbCBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5OwogCiAgICAgcHVibGljIENvbXBvbmVudENvbnRleHRJbXBsKEV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvc2l0ZUNvbnRleHQgY29tcG9zaXRlQ29udGV4dCwKQEAgLTk2LDYgKzEwMCw3IEBACiAKICAgICAgICAgdGhpcy5lcHJCaW5kZXIgPSB1dGlsaXRpZXMuZ2V0VXRpbGl0eShFbmRwb2ludFJlZmVyZW5jZUJpbmRlci5jbGFzcyk7CiAKKyAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkgewpAQCAtMTA2LDEyICsxMTEsMTggQEAKICAgICAgICAgcmV0dXJuIHByb3h5RmFjdG9yeS5jYXN0KHRhcmdldCk7CiAgICAgfQogCi0gICAgcHVibGljIDxCPiBCIGdldFNlcnZpY2UoQ2xhc3M8Qj4gYnVzaW5lc3NJbnRlcmZhY2UsIFN0cmluZyByZWZlcmVuY2VOYW1lKSB7Ci0gICAgICAgIFNlcnZpY2VSZWZlcmVuY2U8Qj4gc2VydmljZVJlZiA9IGdldFNlcnZpY2VSZWZlcmVuY2UoYnVzaW5lc3NJbnRlcmZhY2UsIHJlZmVyZW5jZU5hbWUpOwotICAgICAgICByZXR1cm4gc2VydmljZVJlZi5nZXRTZXJ2aWNlKCk7CisgICAgcHVibGljIDxCPiBCIGdldFNlcnZpY2UoQ2xhc3M8Qj4gYnVzaW5lc3NJbnRlcmZhY2UsIFN0cmluZyByZWZlcmVuY2VOYW1lKSB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKKyAgICAJQiBzZXJ2aWNlID0gbnVsbDsKKyAgICAJCisgICAgIAlTZXJ2aWNlUmVmZXJlbmNlPEI+IHNlcnZpY2VSZWYgPSBnZXRTZXJ2aWNlUmVmZXJlbmNlKGJ1c2luZXNzSW50ZXJmYWNlLCByZWZlcmVuY2VOYW1lKTsKKyAgICAgCWlmKHNlcnZpY2VSZWYgIT0gbnVsbCkgeworICAgICAgICAgICAgc2VydmljZSA9IHNlcnZpY2VSZWYuZ2V0U2VydmljZSgpOworICAgICAJfQorCisgICAgICAgIHJldHVybiBzZXJ2aWNlOwogICAgIH0KIAotICAgIHB1YmxpYyA8Qj4gU2VydmljZVJlZmVyZW5jZTxCPiBnZXRTZXJ2aWNlUmVmZXJlbmNlKENsYXNzPEI+IGJ1c2luZXNzSW50ZXJmYWNlLCBTdHJpbmcgcmVmZXJlbmNlTmFtZSkgeworICAgIHB1YmxpYyA8Qj4gU2VydmljZVJlZmVyZW5jZTxCPiBnZXRTZXJ2aWNlUmVmZXJlbmNlKENsYXNzPEI+IGJ1c2luZXNzSW50ZXJmYWNlLCBTdHJpbmcgcmVmZXJlbmNlTmFtZSkgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7CiAKICAgICAgICAgZm9yIChDb21wb25lbnRSZWZlcmVuY2UgcmVmIDogY29tcG9uZW50LmdldFJlZmVyZW5jZXMoKSkgewogICAgICAgICAgICAgaWYgKHJlZmVyZW5jZU5hbWUuZXF1YWxzKHJlZi5nZXROYW1lKCkpKSB7CkBAIC0xMjEsMTAgKzEzMiwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKyAiIGhhcyBtdWx0aXBsaWNpdHkgIgogICAgICAgICAgICAgICAgICAgICAgICAgKyBtdWx0aXBsaWNpdHkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U2VydmljZVJlZmVyZW5jZShidXNpbmVzc0ludGVyZmFjZSwgKFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSlnZXRFbmRwb2ludFJlZmVyZW5jZShyZWYpKTsKKyAgICAgICAgICAgICAgICBpZiAocmVmLmdldEVuZHBvaW50UmVmZXJlbmNlcygpLnNpemUoKSA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNlcnZpY2VSZWZlcmVuY2U8Qj4gc3IgPSBnZXRTZXJ2aWNlUmVmZXJlbmNlKGJ1c2luZXNzSW50ZXJmYWNlLCAoUnVudGltZUVuZHBvaW50UmVmZXJlbmNlKWdldEVuZHBvaW50UmVmZXJlbmNlKHJlZikpOworICAgICAgICAgICAgICAgIGlmIChzciA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlJlZmVyZW5jZSAiICsgcmVmZXJlbmNlTmFtZSArICIgaXMgbnVsbCIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gc3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgdGhyb3cgbmV3IFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uKCJSZWZlcmVuY2Ugbm90IGZvdW5kOiAiICsgcmVmZXJlbmNlTmFtZSk7CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIltKQ0E4MDAxMV0gUmVmZXJlbmNlIG5vdCBmb3VuZDogIiArIHJlZmVyZW5jZU5hbWUpOwogCiAgICAgfQogCkBAIC0yMDEsMTAgKzIxOSwxMCBAQAogICAgIHB1YmxpYyA8Qj4gQiBnZXRQcm9wZXJ0eShDbGFzczxCPiB0eXBlLCBTdHJpbmcgcHJvcGVydHlOYW1lKSB7CiAgICAgICAgIGZvciAoQ29tcG9uZW50UHJvcGVydHkgcCA6IGNvbXBvbmVudC5nZXRQcm9wZXJ0aWVzKCkpIHsKICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWUuZXF1YWxzKHAuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eUZhY3RvcnkuY3JlYXRlUHJvcGVydHlWYWx1ZShwLCB0eXBlKTsKKyAgICAgICAgICAgIAlyZXR1cm4gcHJvcGVydHlGYWN0b3J5LmNyZWF0ZVByb3BlcnR5VmFsdWUocCwgdHlwZSk7ICAgICAgICAgICAKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB0aHJvdyBuZXcgU2VydmljZVJ1bnRpbWVFeGNlcHRpb24oIlByb3BlcnR5IG5vdCBmb3VuZDogIiArIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlByb3BlcnR5IG5vdCBmb3VuZDogIiArIHByb3BlcnR5TmFtZSk7CiAgICAgfQogCiAgICAgLyoqCkBAIC0yMzgsNiArMjU2LDggQEAKICAgICAgICAgQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlID0gZ2V0U2luZ2xlU2VydmljZShjb21wb25lbnQpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVNlbGZSZWZlcmVuY2UoYnVzaW5lc3NJbnRlcmZhY2UsIHNlcnZpY2UpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIAl0aHJvdyBpYWU7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVJ1bnRpbWVFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwogICAgICAgICB9CkBAIC0yNjMsNyArMjgzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFNlcnZpY2VSZWZlcmVuY2UoYnVzaW5lc3NJbnRlcmZhY2UsIChSdW50aW1lRW5kcG9pbnQpZW5kcG9pbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbigiU2VydmljZSBub3QgZm91bmQ6ICIgKyBzZXJ2aWNlTmFtZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJTZXJ2aWNlIG5vdCBmb3VuZDogIiArIHNlcnZpY2VOYW1lKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlhZSkgeworICAgICAgICAJdGhyb3cgaWFlOwogICAgICAgICB9IGNhdGNoIChTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBlOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewpAQCAtMjgzLDYgKzMwNSw4IEBACiAgICAgICAgICAgICAgICAgKFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSljcmVhdGVFbmRwb2ludFJlZmVyZW5jZShjb21wb25lbnQsIHNlcnZpY2UsIG51bGwsIGJ1c2luZXNzSW50ZXJmYWNlKTsKICAgICAgICAgICAgIHJlZi5zZXRDb21wb25lbnQoY29tcG9uZW50KTsKICAgICAgICAgICAgIHJldHVybiBnZXRTZXJ2aWNlUmVmZXJlbmNlKGJ1c2luZXNzSW50ZXJmYWNlLCByZWYpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlKSB7CisgICAgICAgIAl0aHJvdyBpYWU7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVJ1bnRpbWVFeGNlcHRpb24oZSk7CiAgICAgICAgIH0KQEAgLTMwNSw2ICszMjksOCBAQAogICAgICAqLwogICAgIHB1YmxpYyA8Qj4gU2VydmljZVJlZmVyZW5jZTxCPiBnZXRTZXJ2aWNlUmVmZXJlbmNlKENsYXNzPEI+IGJ1c2luZXNzSW50ZXJmYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludFJlZmVyZW5jZSkgeworICAgIAlTZXJ2aWNlUmVmZXJlbmNlPEI+IHJlc3VsdCA9IG51bGw7CisgICAgCQogICAgICAgICB0cnkgewogICAgICAgICAgICAgSW50ZXJmYWNlQ29udHJhY3QgaW50ZXJmYWNlQ29udHJhY3QgPSBlbmRwb2ludFJlZmVyZW5jZS5nZXRDb21wb25lbnRUeXBlUmVmZXJlbmNlSW50ZXJmYWNlQ29udHJhY3QoKTsKICAgICAgICAgICAgIGlmIChidXNpbmVzc0ludGVyZmFjZSA9PSBudWxsKSB7CkBAIC0zMTIsMjAgKzMzOCwyNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgUnVudGltZUNvbXBvbmVudFJlZmVyZW5jZSByZWYgPSAoUnVudGltZUNvbXBvbmVudFJlZmVyZW5jZSllbmRwb2ludFJlZmVyZW5jZS5nZXRSZWZlcmVuY2UoKTsKICAgICAgICAgICAgIEludGVyZmFjZUNvbnRyYWN0IHJlZkludGVyZmFjZUNvbnRyYWN0ID0gZ2V0SW50ZXJmYWNlQ29udHJhY3QoaW50ZXJmYWNlQ29udHJhY3QsIGJ1c2luZXNzSW50ZXJmYWNlKTsKLSAgICAgICAgICAgIGlmIChyZWZJbnRlcmZhY2VDb250cmFjdCAhPSBpbnRlcmZhY2VDb250cmFjdCkgewotICAgICAgICAgICAgICAgIHJlZiA9IChSdW50aW1lQ29tcG9uZW50UmVmZXJlbmNlKXJlZi5jbG9uZSgpOwotICAgICAgICAgICAgICAgIGlmIChpbnRlcmZhY2VDb250cmFjdCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlZi5zZXRJbnRlcmZhY2VDb250cmFjdChpbnRlcmZhY2VDb250cmFjdCk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmVmLnNldEludGVyZmFjZUNvbnRyYWN0KHJlZkludGVyZmFjZUNvbnRyYWN0KTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmVmSW50ZXJmYWNlQ29udHJhY3QgIT0gbnVsbCkgeworCSAgICAgICAgICAgIGlmIChyZWZJbnRlcmZhY2VDb250cmFjdCAhPSBpbnRlcmZhY2VDb250cmFjdCkgeworCSAgICAgICAgICAgICAgICByZWYgPSAoUnVudGltZUNvbXBvbmVudFJlZmVyZW5jZSlyZWYuY2xvbmUoKTsKKwkgICAgICAgICAgICAgICAgaWYgKGludGVyZmFjZUNvbnRyYWN0ICE9IG51bGwpIHsKKwkgICAgICAgICAgICAgICAgICAgIHJlZi5zZXRJbnRlcmZhY2VDb250cmFjdChpbnRlcmZhY2VDb250cmFjdCk7CisJICAgICAgICAgICAgICAgIH0gZWxzZSB7CisJICAgICAgICAgICAgICAgICAgICByZWYuc2V0SW50ZXJmYWNlQ29udHJhY3QocmVmSW50ZXJmYWNlQ29udHJhY3QpOworCSAgICAgICAgICAgICAgICB9CisJICAgICAgICAgICAgfQorIAorCSAgICAgICAgICAgIHJlZi5zZXRDb21wb25lbnQoY29tcG9uZW50KTsKKwkgICAgICAgICAgICByZXN1bHQgPSBuZXcgU2VydmljZVJlZmVyZW5jZUltcGw8Qj4oYnVzaW5lc3NJbnRlcmZhY2UsIGVuZHBvaW50UmVmZXJlbmNlLCBjb21wb25lbnQuZ2V0Q29tcG9uZW50Q29udGV4dCgpLmdldENvbXBvc2l0ZUNvbnRleHQoKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZWYuc2V0Q29tcG9uZW50KGNvbXBvbmVudCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3IFNlcnZpY2VSZWZlcmVuY2VJbXBsPEI+KGJ1c2luZXNzSW50ZXJmYWNlLCBlbmRwb2ludFJlZmVyZW5jZSwgY29tcG9uZW50LmdldENvbXBvbmVudENvbnRleHQoKQotICAgICAgICAgICAgICAgIC5nZXRDb21wb3NpdGVDb250ZXh0KCkpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWFlICkgeworICAgICAgICAJdGhyb3cgaWFlOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uKGUpOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIHB1YmxpYyA8Qj4gU2VydmljZVJlZmVyZW5jZTxCPiBnZXRTZXJ2aWNlUmVmZXJlbmNlKENsYXNzPEI+IGJ1c2luZXNzSW50ZXJmYWNlLCBSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQpIHsKQEAgLTMzOCw2ICszNzAsOCBAQAogICAgICAgICAgICAgICAgIChSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UpY3JlYXRlRW5kcG9pbnRSZWZlcmVuY2UoZW5kcG9pbnQsIGJ1c2luZXNzSW50ZXJmYWNlKTsKICAgICAgICAgICAgIHJlZi5zZXRDb21wb25lbnQoY29tcG9uZW50KTsKICAgICAgICAgICAgIHJldHVybiBuZXcgU2VydmljZVJlZmVyZW5jZUltcGw8Qj4oYnVzaW5lc3NJbnRlcmZhY2UsIHJlZiwgY29tcG9zaXRlQ29udGV4dCk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgCXRocm93IGlhZTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbihlKTsKICAgICAgICAgfQpAQCAtNDEyLDYgKzQ0NiwxMSBAQAogICAgICAgICBpZiAoYnVzaW5lc3NJbnRlcmZhY2UgPT0gbnVsbCkgewogICAgICAgICAgICAgcmV0dXJuIGludGVyZmFjZUNvbnRyYWN0OwogICAgICAgICB9CisgICAgICAgIGlmIChpbnRlcmZhY2VDb250cmFjdCA9PSBudWxsKSB7CisgICAgICAgICAgICBKYXZhSW50ZXJmYWNlQ29udHJhY3QgaWMgPSBqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlQ29udHJhY3QoKTsKKyAgICAgICAgICAgIGljLnNldEludGVyZmFjZShqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKGJ1c2luZXNzSW50ZXJmYWNlKSk7CisgICAgICAgICAgICByZXR1cm4gaWM7CisgICAgICAgIH0KICAgICAgICAgYm9vbGVhbiBjb21wYXRpYmxlID0gZmFsc2U7CiAgICAgICAgIGlmIChpbnRlcmZhY2VDb250cmFjdCAhPSBudWxsICYmIGludGVyZmFjZUNvbnRyYWN0LmdldEludGVyZmFjZSgpICE9IG51bGwpIHsKICAgICAgICAgICAgIEludGVyZmFjZSBpbnRlcmZhemUgPSBpbnRlcmZhY2VDb250cmFjdC5nZXRJbnRlcmZhY2UoKTsKQEAgLTQyMCwxOCArNDU5LDI0IEBACiAgICAgICAgICAgICAgICAgaWYgKGJ1c2luZXNzSW50ZXJmYWNlLmlzQXNzaWduYWJsZUZyb20oY2xzKSkgewogICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYoIWNvbXBhdGlibGUpIHsKKyAgICAgICAgICAgICAgICAgICAgSW50ZXJmYWNlQ29udHJhY3QgYmlDb250cmFjdCA9IGphdmFJbnRlcmZhY2VGYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2VDb250cmFjdCgpOworICAgICAgICAgICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGNhbGxJbnRlcmZhY2UgPSBqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKGJ1c2luZXNzSW50ZXJmYWNlKTsKKyAgICAgICAgICAgICAgICAgICAgYmlDb250cmFjdC5zZXRJbnRlcmZhY2UoY2FsbEludGVyZmFjZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsSW50ZXJmYWNlLmdldENhbGxiYWNrQ2xhc3MoKSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBiaUNvbnRyYWN0LnNldENhbGxiYWNrSW50ZXJmYWNlKGphdmFJbnRlcmZhY2VGYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2UoY2FsbEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRDYWxsYmFja0NsYXNzKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAlJbnRlcmZhY2VDb250cmFjdE1hcHBlciBpZmNtID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoSW50ZXJmYWNlQ29udHJhY3RNYXBwZXIuY2xhc3MpOworICAgICAgICAgICAgICAgIAljb21wYXRpYmxlID0gaWZjbS5pc0NvbXBhdGlibGVTdWJzZXQoYmlDb250cmFjdCAsIGludGVyZmFjZUNvbnRyYWN0KTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0gICAgICAgIGlmICghY29tcGF0aWJsZSkgewotICAgICAgICAgICAgLy8gVGhlIGludGVyZmFjZSBpcyBub3QgYXNzaWduYWJsZSBmcm9tIHRoZSBpbnRlcmZhY2UgY29udHJhY3QKLSAgICAgICAgICAgIGludGVyZmFjZUNvbnRyYWN0ID0gamF2YUludGVyZmFjZUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZUNvbnRyYWN0KCk7Ci0gICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGNhbGxJbnRlcmZhY2UgPSBqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKGJ1c2luZXNzSW50ZXJmYWNlKTsKLSAgICAgICAgICAgIGludGVyZmFjZUNvbnRyYWN0LnNldEludGVyZmFjZShjYWxsSW50ZXJmYWNlKTsKLSAgICAgICAgICAgIGlmIChjYWxsSW50ZXJmYWNlLmdldENhbGxiYWNrQ2xhc3MoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgaW50ZXJmYWNlQ29udHJhY3Quc2V0Q2FsbGJhY2tJbnRlcmZhY2UoamF2YUludGVyZmFjZUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZShjYWxsSW50ZXJmYWNlCi0gICAgICAgICAgICAgICAgICAgIC5nZXRDYWxsYmFja0NsYXNzKCkpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmKCFjb21wYXRpYmxlKSB7CisgICAgICAgIAkvLyBKQ0EtOTAxMQorICAgICAgICAJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQnVzaW5lc3MgaW50ZXJmYWNlICIgKyBidXNpbmVzc0ludGVyZmFjZS5nZXROYW1lKCkgKyAiIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggIiArIGludGVyZmFjZUNvbnRyYWN0LmdldEludGVyZmFjZSgpLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHJldHVybiBpbnRlcmZhY2VDb250cmFjdDsKQEAgLTQ2NSw2ICs1MTAsMTEgQEAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZiA6IGNvbXBvbmVudC5nZXRSZWZlcmVuY2VzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlTmFtZS5lcXVhbHMocmVmLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAJaWYgKCByZWYuZ2V0TXVsdGlwbGljaXR5KCkgPT0gTXVsdGlwbGljaXR5Lk9ORV9PTkUgKSAKKyAgICAgICAgICAgICAgICAJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlJlZmVyZW5jZSAiICsgcmVmZXJlbmNlTmFtZSArICIgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yIGdldFNlcnZpY2VSZWZlcmVuY2VzIGJlY2F1c2UgaXQgaGFzIGEgbXVsdGlwbGljaXR5IG9mIDEuLjEiKTsKKyAgICAgICAgICAgICAgICAJaWYgKHJlZi5nZXRNdWx0aXBsaWNpdHkoKSA9PSBNdWx0aXBsaWNpdHkuWkVST19PTkUpCisgICAgICAgICAgICAgICAgCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSZWZlcmVuY2UgIiArIHJlZmVyZW5jZU5hbWUgKyAiIGlzIG5vdCBhIHZhbGlkIGFyZ3VtZW50IGZvciBnZXRTZXJ2aWNlUmVmZXJlbmNlcyBiZWNhdXNlIGl0IGhhcyBhIG11bHRpcGxpY2l0eSBvZiAwLi4xIik7CisgICAgICAgICAgICAgICAgCQkKICAgICAgICAgICAgICAgICAgICAgQXJyYXlMaXN0PFNlcnZpY2VSZWZlcmVuY2U8Qj4+IHNlcnZpY2VSZWZzID0gbmV3IEFycmF5TGlzdDxTZXJ2aWNlUmVmZXJlbmNlPEI+PigpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKEVuZHBvaW50UmVmZXJlbmNlIGVuZHBvaW50UmVmZXJlbmNlIDogcmVmLmdldEVuZHBvaW50UmVmZXJlbmNlcygpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgZXByID0gKFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSllbmRwb2ludFJlZmVyZW5jZTsKQEAgLTQ3Myw3ICs1MjMsOSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VydmljZVJlZnM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgdGhyb3cgbmV3IFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uKCJSZWZlcmVuY2Ugbm90IGZvdW5kOiAiICsgcmVmZXJlbmNlTmFtZSk7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJSZWZlcmVuY2Ugbm90IGZvdW5kOiAiICsgcmVmZXJlbmNlTmFtZSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpYWUpIHsKKyAgICAgICAgCXRocm93IGlhZTsKICAgICAgICAgfSBjYXRjaCAoU2VydmljZVJ1bnRpbWVFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgZTsKICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKZGlmZiAtLWdpdCBhL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9pbnZvY2F0aW9uL0RlZmF1bHRQcm94eUZhY3RvcnlFeHRlbnNpb25Qb2ludC5qYXZhIGIvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2ludm9jYXRpb24vRGVmYXVsdFByb3h5RmFjdG9yeUV4dGVuc2lvblBvaW50LmphdmEKaW5kZXggYWY2ZjAzOS4uMDM1MDVkYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2ludm9jYXRpb24vRGVmYXVsdFByb3h5RmFjdG9yeUV4dGVuc2lvblBvaW50LmphdmEKKysrIGIvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2ludm9jYXRpb24vRGVmYXVsdFByb3h5RmFjdG9yeUV4dGVuc2lvblBvaW50LmphdmEKQEAgLTM5LDIxICszOSwyMSBAQAogICAgIHByaXZhdGUgUHJveHlGYWN0b3J5IGludGVyZmFjZUZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBQcm94eUZhY3RvcnkgY2xhc3NGYWN0b3J5OwogCi0gICAgcHVibGljIERlZmF1bHRQcm94eUZhY3RvcnlFeHRlbnNpb25Qb2ludChFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGV4dGVuc2lvblBvaW50cykgewotICAgICAgICBVdGlsaXR5RXh0ZW5zaW9uUG9pbnQgdXRpbGl0aWVzID0gZXh0ZW5zaW9uUG9pbnRzLmdldEV4dGVuc2lvblBvaW50KFV0aWxpdHlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CisgICAgcHVibGljIERlZmF1bHRQcm94eUZhY3RvcnlFeHRlbnNpb25Qb2ludChFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7CisgICAgICAgIFV0aWxpdHlFeHRlbnNpb25Qb2ludCB1dGlsaXRpZXMgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChVdGlsaXR5RXh0ZW5zaW9uUG9pbnQuY2xhc3MpOwogICAgICAgICB0aGlzLmludGVyZmFjZUNvbnRyYWN0TWFwcGVyID0gdXRpbGl0aWVzLmdldFV0aWxpdHkoSW50ZXJmYWNlQ29udHJhY3RNYXBwZXIuY2xhc3MpOwogCi0gICAgICAgIEZhY3RvcnlFeHRlbnNpb25Qb2ludCBtb2RlbEZhY3RvcmllcyA9IGV4dGVuc2lvblBvaW50cy5nZXRFeHRlbnNpb25Qb2ludChGYWN0b3J5RXh0ZW5zaW9uUG9pbnQuY2xhc3MpOworICAgICAgICBGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChGYWN0b3J5RXh0ZW5zaW9uUG9pbnQuY2xhc3MpOwogICAgICAgICB0aGlzLm1lc3NhZ2VGYWN0b3J5ID0gbW9kZWxGYWN0b3JpZXMuZ2V0RmFjdG9yeShNZXNzYWdlRmFjdG9yeS5jbGFzcyk7CiAKLSAgICAgICAgaW50ZXJmYWNlRmFjdG9yeSA9IG5ldyBKREtQcm94eUZhY3RvcnkobWVzc2FnZUZhY3RvcnksIGludGVyZmFjZUNvbnRyYWN0TWFwcGVyKTsKKyAgICAgICAgaW50ZXJmYWNlRmFjdG9yeSA9IG5ldyBKREtQcm94eUZhY3RvcnkocmVnaXN0cnksIG1lc3NhZ2VGYWN0b3J5LCBpbnRlcmZhY2VDb250cmFjdE1hcHBlcik7CiAgICAgfQogCi0gICAgcHVibGljIERlZmF1bHRQcm94eUZhY3RvcnlFeHRlbnNpb25Qb2ludChNZXNzYWdlRmFjdG9yeSBtZXNzYWdlRmFjdG9yeSwgSW50ZXJmYWNlQ29udHJhY3RNYXBwZXIgbWFwcGVyKSB7Ci0gICAgICAgIHRoaXMuaW50ZXJmYWNlQ29udHJhY3RNYXBwZXIgPSBtYXBwZXI7Ci0gICAgICAgIHRoaXMubWVzc2FnZUZhY3RvcnkgPSBtZXNzYWdlRmFjdG9yeTsKLSAgICAgICAgaW50ZXJmYWNlRmFjdG9yeSA9IG5ldyBKREtQcm94eUZhY3RvcnkobWVzc2FnZUZhY3RvcnksIG1hcHBlcik7Ci0gICAgfQorICAgIC8vICAgIHB1YmxpYyBEZWZhdWx0UHJveHlGYWN0b3J5RXh0ZW5zaW9uUG9pbnQoTWVzc2FnZUZhY3RvcnkgbWVzc2FnZUZhY3RvcnksIEludGVyZmFjZUNvbnRyYWN0TWFwcGVyIG1hcHBlcikgeworICAgIC8vICAgICAgICB0aGlzLmludGVyZmFjZUNvbnRyYWN0TWFwcGVyID0gbWFwcGVyOworICAgIC8vICAgICAgICB0aGlzLm1lc3NhZ2VGYWN0b3J5ID0gbWVzc2FnZUZhY3Rvcnk7CisgICAgLy8gICAgICAgIGludGVyZmFjZUZhY3RvcnkgPSBuZXcgSkRLUHJveHlGYWN0b3J5KG51bGwsIG1lc3NhZ2VGYWN0b3J5LCBtYXBwZXIpOworICAgIC8vICAgIH0KIAogICAgIHB1YmxpYyBQcm94eUZhY3RvcnkgZ2V0Q2xhc3NQcm94eUZhY3RvcnkoKSB7CiAgICAgICAgIHJldHVybiBjbGFzc0ZhY3Rvcnk7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvaW52b2NhdGlvbi9pbXBsL0FzeW5jSkRLSW52b2NhdGlvbkhhbmRsZXIuamF2YSBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9pbnZvY2F0aW9uL2ltcGwvQXN5bmNKREtJbnZvY2F0aW9uSGFuZGxlci5qYXZhCmluZGV4IGUwZTIxOWQuLjRhZjljZTUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9pbnZvY2F0aW9uL2ltcGwvQXN5bmNKREtJbnZvY2F0aW9uSGFuZGxlci5qYXZhCisrKyBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9pbnZvY2F0aW9uL2ltcGwvQXN5bmNKREtJbnZvY2F0aW9uSGFuZGxlci5qYXZhCkBAIC0xOSwxNyArMTksMjEgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbi5pbXBsOwogCitpbXBvcnQgamF2YS5iZWFucy5JbnRyb3NwZWN0b3I7CitpbXBvcnQgamF2YS5iZWFucy5Qcm9wZXJ0eURlc2NyaXB0b3I7CiBpbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlBhcmFtZXRlcml6ZWRUeXBlOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlR5cGU7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5BY2Nlc3NDb250cm9sbGVyOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuUHJpdmlsZWdlZEFjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkFycmF5QmxvY2tpbmdRdWV1ZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaHJlYWRQb29sRXhlY3V0b3I7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZVVuaXQ7Ci1pbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGltZW91dEV4Y2VwdGlvbjsKIAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247CkBAIC01NSwxMyArNTksMTYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuVmFsaWRhdGluZ1hNTElucHV0RmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRmFjdG9yeUV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5VdGlsaXR5RXh0ZW5zaW9uUG9pbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5LlJ1bnRpbWVBc3NlbWJseUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmludm9jYXRpb24uQXN5bmNGYXVsdFdyYXBwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmludm9jYXRpb24uQXN5bmNSZXNwb25zZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbi5Bc3luY1Jlc3BvbnNlSGFuZGxlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZUNvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYudXRpbC5GYXVsdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsLldyYXBwZXJJbmZvOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZvY2F0aW9uQ2hhaW47CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2VGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkludGVudDsKQEAgLTcxLDggKzc4LDkgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lRW5kcG9pbnRSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS53b3JrLldvcmtTY2hlZHVsZXI7CiBpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJlZmVyZW5jZTsKLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjsgIAoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOwogCiAvKioKICAqIEFuIEludm9jYXRpb25IYW5kbGVyIHdoaWNoIGRlYWxzIHdpdGggSkFYV1MtZGVmaW5lZCBhc3luY2hyb25vdXMgY2xpZW50IEphdmEgQVBJIG1ldGhvZCBjYWxscwpAQCAtOTAsMjYgKzk4LDQ2IEBACiAgKiAgIGEgY2FsbGJhY2sgb3BlcmF0aW9uIHRoYXQgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgd2hlbiB0aGUgYXN5bmMgY2FsbCBjb21wbGV0ZXMKICAqLwogcHVibGljIGNsYXNzIEFzeW5jSkRLSW52b2NhdGlvbkhhbmRsZXIgZXh0ZW5kcyBKREtJbnZvY2F0aW9uSGFuZGxlciB7Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0gICAgCi0JcHJpdmF0ZSBzdGF0aWMgaW50IGludm9jYXRpb25Db3VudCA9IDEwOwkvLyAjIG9mIHRocmVhZHMgdG8gdXNlCi0JcHJpdmF0ZSBzdGF0aWMgbG9uZyBtYXhXYWl0VGltZSA9IDMwOwkgICAgLy8gTWF4IHdhaXQgdGltZSBmb3IgY29tcGxldGlvbiA9IDMwc2VjCi0JCi0JLy8gUnVuIHRoZSBhc3luYyBzZXJ2aWNlIGludm9jYXRpb25zIHVzaW5nIGEgVGhyZWFkUG9vbEV4ZWN1dG9yCi0JcHJpdmF0ZSBzdGF0aWMgVGhyZWFkUG9vbEV4ZWN1dG9yIHRoZUV4ZWN1dG9yID0gbmV3IFRocmVhZFBvb2xFeGVjdXRvciggaW52b2NhdGlvbkNvdW50LCBpbnZvY2F0aW9uQ291bnQsCi0JCQkJCQkJCQkJCQkgICAgICAgICAgICAgICAgbWF4V2FpdFRpbWUsIFRpbWVVbml0LlNFQ09ORFMsCi0JCQkJCQkJCQkJCQkgICAgICAgICAgICAgICAgbmV3IEFycmF5QmxvY2tpbmdRdWV1ZTxSdW5uYWJsZT4oIGludm9jYXRpb25Db3VudCApICk7Ci0JCiAKLSAgICBwdWJsaWMgQXN5bmNKREtJbnZvY2F0aW9uSGFuZGxlcihNZXNzYWdlRmFjdG9yeSBtZXNzYWdlRmFjdG9yeSwgU2VydmljZVJlZmVyZW5jZTw/PiBjYWxsYWJsZVJlZmVyZW5jZSkgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGludm9jYXRpb25Db3VudCA9IDEwOyAvLyAjIG9mIHRocmVhZHMgdG8gdXNlCisgICAgcHJpdmF0ZSBzdGF0aWMgbG9uZyBtYXhXYWl0VGltZSA9IDMwOyAvLyBNYXggd2FpdCB0aW1lIGZvciBjb21wbGV0aW9uID0gMzBzZWMKKworICAgIC8vIFJ1biB0aGUgYXN5bmMgc2VydmljZSBpbnZvY2F0aW9ucyB1c2luZyBhIFRocmVhZFBvb2xFeGVjdXRvcgorICAgIHByaXZhdGUgRXhlY3V0b3JTZXJ2aWNlIHRoZUV4ZWN1dG9yOworCisgICAgcHVibGljIEFzeW5jSkRLSW52b2NhdGlvbkhhbmRsZXIoRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXNzYWdlRmFjdG9yeSBtZXNzYWdlRmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlUmVmZXJlbmNlPD8+IGNhbGxhYmxlUmVmZXJlbmNlKSB7CiAgICAgICAgIHN1cGVyKG1lc3NhZ2VGYWN0b3J5LCBjYWxsYWJsZVJlZmVyZW5jZSk7CisgICAgICAgIGluaXRFeGVjdXRvclNlcnZpY2UocmVnaXN0cnkpOwogICAgIH0KIAotICAgIHB1YmxpYyBBc3luY0pES0ludm9jYXRpb25IYW5kbGVyKE1lc3NhZ2VGYWN0b3J5IG1lc3NhZ2VGYWN0b3J5LAorICAgIHB1YmxpYyBBc3luY0pES0ludm9jYXRpb25IYW5kbGVyKEV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkgbWVzc2FnZUZhY3RvcnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gYnVzaW5lc3NJbnRlcmZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2NhYmxlIHNvdXJjZSkgewogICAgICAgICBzdXBlcihtZXNzYWdlRmFjdG9yeSwgYnVzaW5lc3NJbnRlcmZhY2UsIHNvdXJjZSk7CisgICAgICAgIGluaXRFeGVjdXRvclNlcnZpY2UocmVnaXN0cnkpOworICAgIH0KKworICAgIHByaXZhdGUgZmluYWwgdm9pZCBpbml0RXhlY3V0b3JTZXJ2aWNlKEV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnkpIHsKKyAgICAgICAgVXRpbGl0eUV4dGVuc2lvblBvaW50IHV0aWxpdGllcyA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFV0aWxpdHlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CisgICAgICAgIFdvcmtTY2hlZHVsZXIgc2NoZWR1bGVyID0gdXRpbGl0aWVzLmdldFV0aWxpdHkoV29ya1NjaGVkdWxlci5jbGFzcyk7CisgICAgICAgIHRoZUV4ZWN1dG9yID0gc2NoZWR1bGVyLmdldEV4ZWN1dG9yU2VydmljZSgpOworCisgICAgICAgIC8qCisgICAgICAgIHN5bmNocm9uaXplZCAoQXN5bmNKREtJbnZvY2F0aW9uSGFuZGxlci5jbGFzcykgeworICAgICAgICAgICAgdGhlRXhlY3V0b3IgPSB1dGlsaXRpZXMuZ2V0VXRpbGl0eShFeGVjdXRvclNlcnZpY2UuY2xhc3MpOworICAgICAgICAgICAgaWYgKHRoZUV4ZWN1dG9yID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICB0aGVFeGVjdXRvciA9CisgICAgICAgICAgICAgICAgICAgIG5ldyBUaHJlYWRQb29sRXhlY3V0b3IoaW52b2NhdGlvbkNvdW50LCBpbnZvY2F0aW9uQ291bnQsIG1heFdhaXRUaW1lLCBUaW1lVW5pdC5TRUNPTkRTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBcnJheUJsb2NraW5nUXVldWU8UnVubmFibGU+KGludm9jYXRpb25Db3VudCkpOworICAgICAgICAgICAgICAgIHV0aWxpdGllcy5hZGRVdGlsaXR5KEV4ZWN1dG9yU2VydmljZS5jbGFzcywgdGhlRXhlY3V0b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICovCiAgICAgfQogCiAgICAgLyoqCkBAIC0xMTgsMTIgKzE0NiwxNyBAQAogICAgICAqLwogICAgIEBPdmVycmlkZQogICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKE9iamVjdCBwcm94eSwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0W10gYXJncykgdGhyb3dzIFRocm93YWJsZSB7CisKKyAgICAgICAgLy8gZm9yY2UgdGhlIGJpbmQgb2YgdGhlIHJlZmVyZW5jZSBzbyB0aGF0IHdlIGNhbiBsb29rIGF0IHRoZSAKKyAgICAgICAgLy8gdGFyZ2V0IGNvbnRyYWN0IHRvIHNlZSBpZiBpdCdzIGFzeW5jaHJvbm91cyAKKyAgICAgICAgc291cmNlLmdldEludm9jYXRpb25DaGFpbnMoKTsKKwogICAgICAgICBpZiAoaXNBc3luY0NhbGxiYWNrKG1ldGhvZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBkb0ludm9rZUFzeW5jQ2FsbGJhY2socHJveHksIG1ldGhvZCwgYXJncyk7ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gZG9JbnZva2VBc3luY0NhbGxiYWNrKHByb3h5LCBtZXRob2QsIGFyZ3MpOwogICAgICAgICB9IGVsc2UgaWYgKGlzQXN5bmNQb2xsKG1ldGhvZCkpIHsKLSAgICAgICAgICAgIHJldHVybiBkb0ludm9rZUFzeW5jUG9sbChwcm94eSwgbWV0aG9kLCBhcmdzKTsgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBkb0ludm9rZUFzeW5jUG9sbChwcm94eSwgbWV0aG9kLCBhcmdzKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgCS8vIFJlZ3VsYXIgc3luY2hyb25vdXMgbWV0aG9kIGNhbGwKKyAgICAgICAgICAgIC8vIFJlZ3VsYXIgc3luY2hyb25vdXMgbWV0aG9kIGNhbGwKICAgICAgICAgICAgIHJldHVybiBkb0ludm9rZVN5bmMocHJveHksIG1ldGhvZCwgYXJncyk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzQsOSArMTY3LDkgQEAKICAgICAgKiBAcmV0dXJuIC0gdHJ1ZSBpZiB0aGUgbWV0aG9kIGhhcyB0aGUgZm9ybSBvZiBhbiBhc3luYyBjYWxsYmFjawogICAgICAqLwogICAgIHByb3RlY3RlZCBib29sZWFuIGlzQXN5bmNDYWxsYmFjayhNZXRob2QgbWV0aG9kKSB7Ci0gICAgICAgIGlmIChtZXRob2QuZ2V0TmFtZSgpLmVuZHNXaXRoKCJBc3luYyIpICYmIChtZXRob2QuZ2V0UmV0dXJuVHlwZSgpLmlzQXNzaWduYWJsZUZyb20oRnV0dXJlLmNsYXNzKSkpIHsKKyAgICAgICAgaWYgKG1ldGhvZC5nZXROYW1lKCkuZW5kc1dpdGgoIkFzeW5jIikgJiYgKG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkgPT0gRnV0dXJlLmNsYXNzKSkgewogICAgICAgICAgICAgaWYgKG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA+IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKClbbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoLTFdLmlzQXNzaWduYWJsZUZyb20oQXN5bmNIYW5kbGVyLmNsYXNzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKClbbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoIC0gMV0gPT0gQXN5bmNIYW5kbGVyLmNsYXNzOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0OCw3ICsxODEsNyBAQAogICAgICAqIEByZXR1cm4gLSB0cnVlIGlmIHRoZSBtZXRob2QgaGFzIHRoZSBmb3JtIG9mIGFuIGFzeW5jIHBvbGxpbmcgbWV0aG9kCiAgICAgICovCiAgICAgcHJvdGVjdGVkIGJvb2xlYW4gaXNBc3luY1BvbGwoTWV0aG9kIG1ldGhvZCkgewotICAgICAgICByZXR1cm4gbWV0aG9kLmdldE5hbWUoKS5lbmRzV2l0aCgiQXN5bmMiKSAmJiAobWV0aG9kLmdldFJldHVyblR5cGUoKS5pc0Fzc2lnbmFibGVGcm9tKFJlc3BvbnNlLmNsYXNzKSk7CisgICAgICAgIHJldHVybiBtZXRob2QuZ2V0TmFtZSgpLmVuZHNXaXRoKCJBc3luYyIpICYmIChtZXRob2QuZ2V0UmV0dXJuVHlwZSgpID09IFJlc3BvbnNlLmNsYXNzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE2MCw0MCArMTkzLDUwIEBACiAgICAgICogICAgICAgICAgIHR5cGUgb2YgdGhlIHJlc3BvbnNlCiAgICAgICovCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJvdGVjdGVkIFJlc3BvbnNlIGRvSW52b2tlQXN5bmNQb2xsKE9iamVjdCBwcm94eSwgTWV0aG9kIGFzeW5jTWV0aG9kLCBPYmplY3RbXSBhcmdzKSB7Ci0gICAgICAgIENsYXNzPD8+IHJldHVyblR5cGUgPSBnZXROb25Bc3luY01ldGhvZChhc3luY01ldGhvZCkuZ2V0UmV0dXJuVHlwZSgpOworICAgIHByb3RlY3RlZCBSZXNwb25zZSBkb0ludm9rZUFzeW5jUG9sbChPYmplY3QgcHJveHksIE1ldGhvZCBhc3luY01ldGhvZCwgT2JqZWN0W10gYXJncykgeworICAgICAgICBNZXRob2QgbWV0aG9kID0gZ2V0Tm9uQXN5bmNNZXRob2QoYXN5bmNNZXRob2QpOworICAgICAgICBDbGFzczw/PiByZXR1cm5UeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKICAgICAgICAgLy8gQWxsb2NhdGUgdGhlIEZ1dHVyZTw/PiAvIFJlc3BvbnNlPD8+IG9iamVjdCAtIG5vdGU6IFJlc3BvbnNlPD8+IGlzIGEgc3ViY2xhc3Mgb2YgRnV0dXJlPD8+Ci0gICAgICAgIEFzeW5jSW52b2NhdGlvbkZ1dHVyZUltcGwgZnV0dXJlID0gQXN5bmNJbnZvY2F0aW9uRnV0dXJlSW1wbC5uZXdJbnN0YW5jZSggcmV0dXJuVHlwZSwgZ2V0SW50ZXJmYWNlQ2xhc3Nsb2FkZXIoKSApOworICAgICAgICBBc3luY0ludm9jYXRpb25GdXR1cmVJbXBsIGZ1dHVyZSA9IEFzeW5jSW52b2NhdGlvbkZ1dHVyZUltcGwubmV3SW5zdGFuY2UocmV0dXJuVHlwZSwgZ2V0SW50ZXJmYWNlQ2xhc3Nsb2FkZXIoKSk7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBpbnZva2VBc3luYyhwcm94eSwgZ2V0Tm9uQXN5bmNNZXRob2QoYXN5bmNNZXRob2QpLCBhcmdzLCBmdXR1cmUpOworICAgICAgICAgICAgaW52b2tlQXN5bmMocHJveHksIG1ldGhvZCwgYXJncywgZnV0dXJlLCBhc3luY01ldGhvZCk7CiAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBmdXR1cmUuc2V0RmF1bHQoIG5ldyBBc3luY0ZhdWx0V3JhcHBlcihlKSApOwotICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCApIHsKLSAgICAgICAgCUV4Y2VwdGlvbiBlID0gbmV3IFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uKCJSZWNlaXZlZCBUaHJvd2FibGU6ICIgKyB0LmdldENsYXNzKCkuZ2V0TmFtZSgpICsgCi0gICAgICAgIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHdoZW4gaW52b2tpbmc6ICIgKyBhc3luY01ldGhvZC5nZXROYW1lKCksIHQpOwotICAgICAgICAJZnV0dXJlLnNldEZhdWx0KCBuZXcgQXN5bmNGYXVsdFdyYXBwZXIoZSkgKTsKKyAgICAgICAgICAgIGZ1dHVyZS5zZXRGYXVsdChuZXcgQXN5bmNGYXVsdFdyYXBwZXIoZSkpOworICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgdCkgeworICAgICAgICAgICAgRXhjZXB0aW9uIGUgPQorICAgICAgICAgICAgICAgIG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbigiUmVjZWl2ZWQgVGhyb3dhYmxlOiAiICsgdC5nZXRDbGFzcygpLmdldE5hbWUoKQorICAgICAgICAgICAgICAgICAgICArICIgd2hlbiBpbnZva2luZzogIgorICAgICAgICAgICAgICAgICAgICArIGFzeW5jTWV0aG9kLmdldE5hbWUoKSwgdCk7CisgICAgICAgICAgICBmdXR1cmUuc2V0RmF1bHQobmV3IEFzeW5jRmF1bHRXcmFwcGVyKGUpKTsKICAgICAgICAgfSAvLyBlbmQgdHJ5IAogICAgICAgICByZXR1cm4gZnV0dXJlOwogICAgIH0gLy8gZW5kIG1ldGhvZCBkb0ludm9rZUFzeW5jUG9sbAotICAgIAorCiAgICAgLyoqCiAgICAgICogUHJvdmlkZSBhIHN5bmNocm9ub3VzIGludm9jYXRpb24gb2YgYSBzZXJ2aWNlIG9wZXJhdGlvbiB0aGF0IGlzIGVpdGhlciBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHJvdGVjdGVkIE9iamVjdCBkb0ludm9rZVN5bmMoT2JqZWN0IHByb3h5LCBNZXRob2QgbWV0aG9kLCBPYmplY3RbXSBhcmdzKSB0aHJvd3MgVGhyb3dhYmxlIHsKLSAgICAJaWYgKCBpc0FzeW5jSW52b2NhdGlvbiggc291cmNlICkgKSB7Ci0gICAgCQkvLyBUYXJnZXQgc2VydmljZSBpcyBhc3luY2hyb25vdXMKLSAgICAJCUNsYXNzPD8+IHJldHVyblR5cGUgPSBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpOwotICAgICAgICAgICAgQXN5bmNJbnZvY2F0aW9uRnV0dXJlSW1wbCBmdXR1cmUgPSBBc3luY0ludm9jYXRpb25GdXR1cmVJbXBsLm5ld0luc3RhbmNlKCByZXR1cm5UeXBlLCBnZXRJbnRlcmZhY2VDbGFzc2xvYWRlcigpICk7Ci0gICAgICAgICAgICBpbnZva2VBc3luYyhwcm94eSwgbWV0aG9kLCBhcmdzLCBmdXR1cmUpOworICAgICAgICBpZiAoaXNBc3luY0ludm9jYXRpb24oc291cmNlKSkgeworICAgICAgICAgICAgLy8gVGFyZ2V0IHNlcnZpY2UgaXMgYXN5bmNocm9ub3VzCisgICAgICAgICAgICBDbGFzczw/PiByZXR1cm5UeXBlID0gbWV0aG9kLmdldFJldHVyblR5cGUoKTsKKyAgICAgICAgICAgIEFzeW5jSW52b2NhdGlvbkZ1dHVyZUltcGwgZnV0dXJlID0KKyAgICAgICAgICAgICAgICBBc3luY0ludm9jYXRpb25GdXR1cmVJbXBsLm5ld0luc3RhbmNlKHJldHVyblR5cGUsIGdldEludGVyZmFjZUNsYXNzbG9hZGVyKCkpOworICAgICAgICAgICAgaW52b2tlQXN5bmMocHJveHksIG1ldGhvZCwgYXJncywgZnV0dXJlLCBtZXRob2QpOwogICAgICAgICAgICAgLy8gV2FpdCBmb3Igc29tZSBtYXhpbXVtIHRpbWUgZm9yIHRoZSByZXN1bHQgLSAxMDAwIHNlY29uZHMgaGVyZQogICAgICAgICAgICAgLy8gUmVhbGx5LCBpZiB0aGUgc2VydmljZSBpcyBhc3luYywgdGhlIGNsaWVudCBzaG91bGQgdXNlIGFzeW5jIGNsaWVudCBtZXRob2RzIHRvIGludm9rZSB0aGUgc2VydmljZQogICAgICAgICAgICAgLy8gLSBhbmQgYmUgcHJlcGFyZWQgdG8gd2FpdCBhICpyZWFsbHkqIGxvbmcgdGltZQotICAgICAgICAgICAgcmV0dXJuIGZ1dHVyZS5nZXQoMTAwMCwgVGltZVVuaXQuU0VDT05EUyk7Ci0gICAgCX0gZWxzZSB7Ci0gICAgCQkvLyBUYXJnZXQgc2VydmljZSBpcyBub3QgYXN5bmNocm9ub3VzLCBzbyBwZXJmb3JtIHN5bmMgaW52b2NhdGlvbgotICAgIAkJcmV0dXJuIHN1cGVyLmludm9rZShwcm94eSwgbWV0aG9kLCBhcmdzKTsKLSAgICAJfSAvLyBlbmQgaWYKKyAgICAgICAgICAgIE9iamVjdCByZXNwb25zZSA9IG51bGw7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gZnV0dXJlLmdldCgxMDAwLCBUaW1lVW5pdC5TRUNPTkRTKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKEV4ZWN1dGlvbkV4Y2VwdGlvbiBleCkgeworICAgICAgICAgICAgICAgIHRocm93IGV4LmdldENhdXNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUYXJnZXQgc2VydmljZSBpcyBub3QgYXN5bmNocm9ub3VzLCBzbyBwZXJmb3JtIHN5bmMgaW52b2NhdGlvbgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmludm9rZShwcm94eSwgbWV0aG9kLCBhcmdzKTsKKyAgICAgICAgfSAvLyBlbmQgaWYKICAgICB9IC8vIGVuZCBtZXRob2QgZG9JbnZva2VTeW5jCiAKICAgICAvKioKQEAgLTIwNiwxNSArMjQ5LDIzIEBACiAgICAgICogICAgICAgICAgIHRoZSByZXNwb25zZQogICAgICAqLwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgT2JqZWN0IGRvSW52b2tlQXN5bmNDYWxsYmFjayhPYmplY3QgcHJveHksIE1ldGhvZCBhc3luY01ldGhvZCwgT2JqZWN0W10gYXJncykgewotICAgICAgICBBc3luY0hhbmRsZXIgaGFuZGxlciA9IChBc3luY0hhbmRsZXIpYXJnc1thcmdzLmxlbmd0aC0xXTsKLSAgICAgICAgUmVzcG9uc2UgcmVzcG9uc2UgPSBkb0ludm9rZUFzeW5jUG9sbChwcm94eSxhc3luY01ldGhvZCxBcnJheXMuY29weU9mKGFyZ3MsIGFyZ3MubGVuZ3RoLTEpKTsKLSAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBoYW5kbGVyLCBpZiBwcmVzZW50Ci0gICAgICAgIGlmKCBoYW5kbGVyICE9IG51bGwgKSB7Ci0gICAgICAgIAloYW5kbGVyLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTsKLSAgICAgICAgfSAvLyBlbmQgaWYKLSAgICAgICAgCi0gICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICBwcml2YXRlIE9iamVjdCBkb0ludm9rZUFzeW5jQ2FsbGJhY2soZmluYWwgT2JqZWN0IHByb3h5LCBmaW5hbCBNZXRob2QgYXN5bmNNZXRob2QsIGZpbmFsIE9iamVjdFtdIGFyZ3MpCisgICAgICAgIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBGdXR1cmU8UmVzcG9uc2U+IGZ1dHVyZSA9IHRoZUV4ZWN1dG9yLnN1Ym1pdChuZXcgQ2FsbGFibGU8UmVzcG9uc2U+KCkgeworCisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBSZXNwb25zZSBjYWxsKCkgeworICAgICAgICAgICAgICAgIEFzeW5jSGFuZGxlciBoYW5kbGVyID0gKEFzeW5jSGFuZGxlcilhcmdzW2FyZ3MubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgUmVzcG9uc2UgcmVzcG9uc2UgPSBkb0ludm9rZUFzeW5jUG9sbChwcm94eSwgYXN5bmNNZXRob2QsIEFycmF5cy5jb3B5T2YoYXJncywgYXJncy5sZW5ndGggLSAxKSk7CisgICAgICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayBoYW5kbGVyLCBpZiBwcmVzZW50CisgICAgICAgICAgICAgICAgaWYgKGhhbmRsZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLmhhbmRsZVJlc3BvbnNlKHJlc3BvbnNlKTsKKyAgICAgICAgICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBmdXR1cmUuZ2V0KCk7CisKICAgICB9IC8vIGVuZCBtZXRob2QgZG9JbnZva2VBc3luY0NhbGxiYWNrCiAKICAgICAvKioKQEAgLTIyNywxMSArMjc4LDE1IEBACiAgICAgICogQHRocm93cyBUaHJvd2FibGUgLSBpZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGR1cmluZyB0aGUgaW52b2NhdGlvbgogICAgICAqLwogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotCXByaXZhdGUgdm9pZCBpbnZva2VBc3luYyhPYmplY3QgcHJveHksIE1ldGhvZCBtZXRob2QsIE9iamVjdFtdIGFyZ3MsIEFzeW5jSW52b2NhdGlvbkZ1dHVyZUltcGwgZnV0dXJlKSB0aHJvd3MgVGhyb3dhYmxlIHsKKyAgICBwcml2YXRlIHZvaWQgaW52b2tlQXN5bmMoT2JqZWN0IHByb3h5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXRob2QgbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RbXSBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3luY0ludm9jYXRpb25GdXR1cmVJbXBsIGZ1dHVyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kIGFzeW5jTWV0aG9kKSB0aHJvd3MgVGhyb3dhYmxlIHsKICAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVJ1bnRpbWVFeGNlcHRpb24oIk5vIHJ1bnRpbWUgc291cmNlIGlzIGF2YWlsYWJsZSIpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UpIHsKICAgICAgICAgICAgIFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSBlcHIgPSAoUnVudGltZUVuZHBvaW50UmVmZXJlbmNlKXNvdXJjZTsKICAgICAgICAgICAgIGlmIChlcHIuaXNPdXRPZkRhdGUoKSkgewpAQCAtMjM5LDEyOSArMjk0LDE3MyBAQAogICAgICAgICAgICAgICAgIGNoYWlucy5jbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICB9IC8vIGVuZCBpZgotICAgICAgICAKKwogICAgICAgICBJbnZvY2F0aW9uQ2hhaW4gY2hhaW4gPSBnZXRJbnZvY2F0aW9uQ2hhaW4obWV0aG9kLCBzb3VyY2UpOwotICAgICAgICAKKwogICAgICAgICBpZiAoY2hhaW4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTm8gbWF0Y2hpbmcgb3BlcmF0aW9uIGlzIGZvdW5kOiAiICsgbWV0aG9kKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBPcmdhbml6ZSBmb3IgYW4gYXN5bmMgc2VydmljZQotICAgICAgICBSdW50aW1lRW5kcG9pbnQgdGhlRW5kcG9pbnQgPSBnZXRBc3luY0NhbGxiYWNrKCBzb3VyY2UgKTsKKyAgICAgICAgUnVudGltZUVuZHBvaW50IHRoZUVuZHBvaW50ID0gZ2V0QXN5bmNDYWxsYmFjayhzb3VyY2UpOwogICAgICAgICBib29sZWFuIGlzQXN5bmNTZXJ2aWNlID0gZmFsc2U7Ci0gICAgICAgIGlmKCB0aGVFbmRwb2ludCAhPSBudWxsICkgewotICAgICAgICAJLy8gLi4uIHRoZSBzZXJ2aWNlIGlzIGFzeW5jaHJvbm91cyAuLi4KLSAgICAgICAgCWF0dGFjaEZ1dHVyZSggdGhlRW5kcG9pbnQsIGZ1dHVyZSApOwotICAgICAgICAJaXNBc3luY1NlcnZpY2UgPSB0cnVlOworICAgICAgICBpZiAodGhlRW5kcG9pbnQgIT0gbnVsbCkgeworICAgICAgICAgICAgLy8gLi4uIHRoZSBzZXJ2aWNlIGlzIGFzeW5jaHJvbm91cyAuLi4KKyAgICAgICAgICAgIGF0dGFjaEZ1dHVyZSh0aGVFbmRwb2ludCwgZnV0dXJlKTsKKyAgICAgICAgICAgIGlzQXN5bmNTZXJ2aWNlID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgCS8vIC4uLiB0aGUgc2VydmljZSBpcyBzeW5jaHJvbm91cyAuLi4KKyAgICAgICAgICAgIC8vIC4uLiB0aGUgc2VydmljZSBpcyBzeW5jaHJvbm91cyAuLi4KICAgICAgICAgfSAvLyBlbmQgaWYKLSAgICAgICAgCi0JCS8vIFBlcmZvcm0gdGhlIGludm9jYXRpb25zIG9uIHNlcGFyYXRlIHRocmVhZC4uLgotCQl0aGVFeGVjdXRvci5leGVjdXRlKCBuZXcgc2VwYXJhdGVUaHJlYWRJbnZva2VyKCBjaGFpbiwgYXJncywgc291cmNlLCBmdXR1cmUsIGlzQXN5bmNTZXJ2aWNlICkgKTsKKworICAgICAgICAvLyBQZXJmb3JtIHRoZSBpbnZvY2F0aW9ucyBvbiBzZXBhcmF0ZSB0aHJlYWQuLi4KKyAgICAgICAgdGhlRXhlY3V0b3Iuc3VibWl0KG5ldyBzZXBhcmF0ZVRocmVhZEludm9rZXIoY2hhaW4sIGFyZ3MsIHNvdXJjZSwgZnV0dXJlLCBhc3luY01ldGhvZCwgaXNBc3luY1NlcnZpY2UpKTsKIAogICAgICAgICByZXR1cm47CiAgICAgfSAvLyBlbmQgbWV0aG9kIGludm9rZUFzeW5jCi0gICAgCi0JLyoqCi0JICogQW4gaW5uZXIgY2xhc3Mgd2hpY2ggYWN0cyBhcyBhIHJ1bm5hYmxlIHRhc2sgZm9yIGludm9raW5nIHNlcnZpY2VzIGFzeW5jaHJvbm91c2x5IG9uIHRocmVhZHMgdGhhdCBhcmUgc2VwYXJhdGUgZnJvbQotCSAqIHRob3NlIHVzZWQgdG8gZXhlY3V0ZSBvcGVyYXRpb25zIG9mIGNvbXBvbmVudHMKLQkgKiAKLQkgKiBUaGlzIHN1cHBvcnRzIGJvdGggc3luY2hyb25vdXMgc2VydmljZXMgYW5kIGFzeW5jaHJvbm91cyBzZXJ2aWNlcwotCSAqLwotCXByaXZhdGUgY2xhc3Mgc2VwYXJhdGVUaHJlYWRJbnZva2VyIGltcGxlbWVudHMgUnVubmFibGUgewotCQkKLQkJcHJpdmF0ZSBBc3luY0ludm9jYXRpb25GdXR1cmVJbXBsIGZ1dHVyZTsKLQkJcHJpdmF0ZSBJbnZvY2F0aW9uQ2hhaW4gY2hhaW47Ci0JCXByaXZhdGUgT2JqZWN0W10gYXJnczsKLQkJcHJpdmF0ZSBJbnZvY2FibGUgaW52b2NhYmxlOwotCQlwcml2YXRlIGJvb2xlYW4gaXNBc3luY1NlcnZpY2U7Ci0JCQkJCi0JCXB1YmxpYyBzZXBhcmF0ZVRocmVhZEludm9rZXIoIEludm9jYXRpb25DaGFpbiBjaGFpbiwgT2JqZWN0W10gYXJncywgSW52b2NhYmxlIGludm9jYWJsZSwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgQXN5bmNJbnZvY2F0aW9uRnV0dXJlSW1wbCBmdXR1cmUsIGJvb2xlYW4gaXNBc3luY1NlcnZpY2UgKSB7Ci0JCQlzdXBlcigpOwotCQkJdGhpcy5jaGFpbiA9IGNoYWluOwotCQkJdGhpcy5hcmdzID0gYXJnczsKLQkJCXRoaXMuaW52b2NhYmxlID0gaW52b2NhYmxlOwotCQkJdGhpcy5mdXR1cmUgPSBmdXR1cmU7Ci0JCQl0aGlzLmlzQXN5bmNTZXJ2aWNlID0gaXNBc3luY1NlcnZpY2U7Ci0JCX0gLy8gZW5kIGNvbnN0cnVjdG9yCiAKLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJT2JqZWN0IHJlc3VsdDsKLQkJCQotCQkJdHJ5IHsKLQkJCQlpZiggaXNBc3luY1NlcnZpY2UgKSB7Ci0JCSAgICAgICAgCWludm9rZShjaGFpbiwgYXJncywgaW52b2NhYmxlLCBmdXR1cmUuZ2V0VW5pcXVlSUQoKSk7Ci0JCSAgICAgICAgCS8vIFRoZSByZXN1bHQgaXMgcmV0dXJuZWQgYXN5bmNocm9ub3VzbHkgdmlhIHRoZSBmdXR1cmUuLi4KLQkJICAgICAgICB9IGVsc2UgewotCQkgICAgICAgIAkvLyAuLi4gdGhlIHNlcnZpY2UgaXMgc3luY2hyb25vdXMgLi4uCi0JCSAgICAgICAgCXJlc3VsdCA9IGludm9rZShjaGFpbiwgYXJncywgaW52b2NhYmxlKTsKLQkJICAgICAgICAJZnV0dXJlLnNldFJlc3BvbnNlKHJlc3VsdCk7Ci0JCQkJfSAvLyBlbmQgaWYKLQkJCX0gY2F0Y2ggKCBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbiBzICkgewotCQkJCVRocm93YWJsZSBlID0gcy5nZXRDYXVzZSgpOwotCQkJCWlmKCBlICE9IG51bGwgJiYgZSBpbnN0YW5jZW9mIEZhdWx0RXhjZXB0aW9uICkgewotCQkJCQlpZiggIkFzeW5jUmVzcG9uc2UiLmVxdWFscyhlLmdldE1lc3NhZ2UoKSkgKSB7Ci0JCQkJCQkvLyBEbyBub3RoaW5nLi4uCi0JCQkJCX0gZWxzZSB7IAotCQkJCQkJZnV0dXJlLnNldEZhdWx0KCBuZXcgQXN5bmNGYXVsdFdyYXBwZXIoIHMgKSApOwotCQkJCQl9IC8vIGVuZCBpZiAKLQkJCQl9IC8vIGVuZCBpZgotCQkJfSBjYXRjaCAoIFRocm93YWJsZSB0ICkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQXN5bmMgaW52b2tlIGdvdCBleGNlcHRpb246ICIgKyB0LnRvU3RyaW5nKCkpOwotCQkJCWZ1dHVyZS5zZXRGYXVsdCggbmV3IEFzeW5jRmF1bHRXcmFwcGVyKCB0ICkgKTsKLQkJCX0gLy8gZW5kIHRyeQotCQkJCi0JCX0gLy8gZW5kIG1ldGhvZCBydW4KLQkJCi0JfSAvLyBlbmQgY2xhc3Mgc2VwYXJhdGVUaHJlYWRJbnZva2VyCi0gICAgCisgICAgLyoqCisgICAgICogQW4gaW5uZXIgY2xhc3Mgd2hpY2ggYWN0cyBhcyBhIHJ1bm5hYmxlIHRhc2sgZm9yIGludm9raW5nIHNlcnZpY2VzIGFzeW5jaHJvbm91c2x5IG9uIHRocmVhZHMgdGhhdCBhcmUgc2VwYXJhdGUgZnJvbQorICAgICAqIHRob3NlIHVzZWQgdG8gZXhlY3V0ZSBvcGVyYXRpb25zIG9mIGNvbXBvbmVudHMKKyAgICAgKiAKKyAgICAgKiBUaGlzIHN1cHBvcnRzIGJvdGggc3luY2hyb25vdXMgc2VydmljZXMgYW5kIGFzeW5jaHJvbm91cyBzZXJ2aWNlcworICAgICAqLworICAgIHByaXZhdGUgY2xhc3Mgc2VwYXJhdGVUaHJlYWRJbnZva2VyIGltcGxlbWVudHMgUnVubmFibGUgeworCisgICAgICAgIHByaXZhdGUgQXN5bmNJbnZvY2F0aW9uRnV0dXJlSW1wbCBmdXR1cmU7CisgICAgICAgIHByaXZhdGUgTWV0aG9kIGFzeW5jTWV0aG9kOworICAgICAgICBwcml2YXRlIEludm9jYXRpb25DaGFpbiBjaGFpbjsKKyAgICAgICAgcHJpdmF0ZSBPYmplY3RbXSBhcmdzOworICAgICAgICBwcml2YXRlIEludm9jYWJsZSBpbnZvY2FibGU7CisgICAgICAgIHByaXZhdGUgYm9vbGVhbiBpc0FzeW5jU2VydmljZTsKKworICAgICAgICBwdWJsaWMgc2VwYXJhdGVUaHJlYWRJbnZva2VyKEludm9jYXRpb25DaGFpbiBjaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3RbXSBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludm9jYWJsZSBpbnZvY2FibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXN5bmNJbnZvY2F0aW9uRnV0dXJlSW1wbCBmdXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWV0aG9kIGFzeW5jTWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gaXNBc3luY1NlcnZpY2UpIHsKKyAgICAgICAgICAgIHN1cGVyKCk7CisgICAgICAgICAgICB0aGlzLmNoYWluID0gY2hhaW47CisgICAgICAgICAgICB0aGlzLmFzeW5jTWV0aG9kID0gYXN5bmNNZXRob2Q7CisgICAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzOworICAgICAgICAgICAgdGhpcy5pbnZvY2FibGUgPSBpbnZvY2FibGU7CisgICAgICAgICAgICB0aGlzLmZ1dHVyZSA9IGZ1dHVyZTsKKyAgICAgICAgICAgIHRoaXMuaXNBc3luY1NlcnZpY2UgPSBpc0FzeW5jU2VydmljZTsKKyAgICAgICAgfSAvLyBlbmQgY29uc3RydWN0b3IKKworICAgICAgICBwdWJsaWMgdm9pZCBydW4oKSB7CisgICAgICAgICAgICBPYmplY3QgcmVzdWx0OworCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIGlmIChpc0FzeW5jU2VydmljZSkgeworICAgICAgICAgICAgICAgICAgICBpbnZva2UoY2hhaW4sIGFyZ3MsIGludm9jYWJsZSwgZnV0dXJlLmdldFVuaXF1ZUlEKCkpOworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgcmVzdWx0IGlzIHJldHVybmVkIGFzeW5jaHJvbm91c2x5IHZpYSB0aGUgZnV0dXJlLi4uCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gLi4uIHRoZSBzZXJ2aWNlIGlzIHN5bmNocm9ub3VzIC4uLgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBpbnZva2UoY2hhaW4sIGFyZ3MsIGludm9jYWJsZSk7CisgICAgICAgICAgICAgICAgICAgIFR5cGUgdHlwZSA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIGlmIChhc3luY01ldGhvZC5nZXRSZXR1cm5UeXBlKCkgPT0gRnV0dXJlLmNsYXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgY2FsbGJhY2sgYXN5bmMgbWVudGhvZAorICAgICAgICAgICAgICAgICAgICAgICAgVHlwZVtdIHR5cGVzID0gYXN5bmNNZXRob2QuZ2V0R2VuZXJpY1BhcmFtZXRlclR5cGVzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZXMubGVuZ3RoID4gMCAmJiBhc3luY01ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpW3R5cGVzLmxlbmd0aCAtIDFdID09IEFzeW5jSGFuZGxlci5jbGFzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExhc3QgcGFyZW1ldGVyLCBBc3luY0hhbmRsZXI8VD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gdHlwZXNbdHlwZXMubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXN5bmNNZXRob2QuZ2V0UmV0dXJuVHlwZSgpID09IFJlc3BvbnNlLmNsYXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIHBvbGxpbmcgbWV0aG9kLCBSZXNwb25zZTxUPgorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGFzeW5jTWV0aG9kLmdldEdlbmVyaWNSZXR1cm5UeXBlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgaW5zdGFuY2VvZiBQYXJhbWV0ZXJpemVkVHlwZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHBhcmFtZXRlcml6ZWQgdHlwZSBvZiBSZXNwb25zZTxUPiBpcyBhIGRvYy1saXQtd3JhcHBlciBjbGFzcworICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gd3JhcHBlckNsYXNzID0gKENsYXNzPD8+KSgoUGFyYW1ldGVyaXplZFR5cGUpdHlwZSkuZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgV3JhcHBlckluZm8gd3JhcHBlckluZm8gPSBjaGFpbi5nZXRTb3VyY2VPcGVyYXRpb24oKS5nZXRXcmFwcGVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod3JhcHBlckluZm8gIT0gbnVsbCAmJiB3cmFwcGVySW5mby5nZXRPdXRwdXRXcmFwcGVyQ2xhc3MoKSA9PSB3cmFwcGVyQ2xhc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qgd3JhcHBlciA9IHdyYXBwZXJDbGFzcy5uZXdJbnN0YW5jZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgdGhlIDFzdCBtYXRjaGluZyBwcm9wZXJ0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUHJvcGVydHlEZXNjcmlwdG9yIHAgOiBJbnRyb3NwZWN0b3IuZ2V0QmVhbkluZm8od3JhcHBlckNsYXNzKS5nZXRQcm9wZXJ0eURlc2NyaXB0b3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAuZ2V0V3JpdGVNZXRob2QoKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBpcyBhICJjbGFzcyIgcHJvcGVydHkgLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocC5nZXRXcml0ZU1ldGhvZCgpLmdldFBhcmFtZXRlclR5cGVzKClbMF0uaXNJbnN0YW5jZShyZXN1bHQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLmdldFdyaXRlTWV0aG9kKCkuaW52b2tlKHdyYXBwZXIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSB3cmFwcGVyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmdXR1cmUuc2V0UmVzcG9uc2UocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICAgICAgfSBjYXRjaCAoU2VydmljZVJ1bnRpbWVFeGNlcHRpb24gcykgeworICAgICAgICAgICAgICAgIFRocm93YWJsZSBlID0gcy5nZXRDYXVzZSgpOworICAgICAgICAgICAgICAgIGlmIChlICE9IG51bGwgJiYgZSBpbnN0YW5jZW9mIEZhdWx0RXhjZXB0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgiQXN5bmNSZXNwb25zZSIuZXF1YWxzKGUuZ2V0TWVzc2FnZSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZy4uLgorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlLnNldEZhdWx0KG5ldyBBc3luY0ZhdWx0V3JhcHBlcihzKSk7CisgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmIAorICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmCisgICAgICAgICAgICB9IGNhdGNoIChBc3luY1Jlc3BvbnNlRXhjZXB0aW9uIGFyKSB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZwkJCQorICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFzeW5jIGludm9rZSBnb3QgZXhjZXB0aW9uOiAiICsgdC50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBmdXR1cmUuc2V0RmF1bHQobmV3IEFzeW5jRmF1bHRXcmFwcGVyKHQpKTsKKyAgICAgICAgICAgIH0gLy8gZW5kIHRyeQorCisgICAgICAgIH0gLy8gZW5kIG1ldGhvZCBydW4KKworICAgIH0gLy8gZW5kIGNsYXNzIHNlcGFyYXRlVGhyZWFkSW52b2tlcgorCiAgICAgLyoqCiAgICAgICogQXR0YWNoZXMgYSBmdXR1cmUgdG8gdGhlIGNhbGxiYWNrIGVuZHBvaW50IC0gc28gdGhhdCB0aGUgRnV0dXJlIGlzIHRyaWdnZXJlZCB3aGVuIGEgcmVzcG9uc2UgaXMKICAgICAgKiByZWNlaXZlZCBmcm9tIHRoZSBhc3luY2hyb25vdXMgc2VydmljZSBpbnZvY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgRnV0dXJlCiAgICAgICogQHBhcmFtIGVuZHBvaW50IC0gdGhlIGFzeW5jIGNhbGxiYWNrIGVuZHBvaW50CiAgICAgICogQHBhcmFtIGZ1dHVyZSAtIHRoZSBhc3luYyBpbnZvY2F0aW9uIGZ1dHVyZSB0byBhdHRhY2gKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgYXR0YWNoRnV0dXJlKCBSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQsIEFzeW5jSW52b2NhdGlvbkZ1dHVyZUltcGw8Pz4gZnV0dXJlICkgewotICAgIAlJbXBsZW1lbnRhdGlvbiBpbXBsID0gZW5kcG9pbnQuZ2V0Q29tcG9uZW50KCkuZ2V0SW1wbGVtZW50YXRpb24oKTsKLSAgICAJQXN5bmNSZXNwb25zZUhhbmRsZXJJbXBsPD8+IGFzeW5jSGFuZGxlciA9IChBc3luY1Jlc3BvbnNlSGFuZGxlckltcGw8Pz4pIGltcGw7Ci0gICAgCWFzeW5jSGFuZGxlci5hZGRGdXR1cmUoZnV0dXJlKTsKKyAgICBwcml2YXRlIHZvaWQgYXR0YWNoRnV0dXJlKFJ1bnRpbWVFbmRwb2ludCBlbmRwb2ludCwgQXN5bmNJbnZvY2F0aW9uRnV0dXJlSW1wbDw/PiBmdXR1cmUpIHsKKyAgICAgICAgSW1wbGVtZW50YXRpb24gaW1wbCA9IGVuZHBvaW50LmdldENvbXBvbmVudCgpLmdldEltcGxlbWVudGF0aW9uKCk7CisgICAgICAgIEFzeW5jUmVzcG9uc2VIYW5kbGVySW1wbDw/PiBhc3luY0hhbmRsZXIgPSAoQXN5bmNSZXNwb25zZUhhbmRsZXJJbXBsPD8+KWltcGw7CisgICAgICAgIGFzeW5jSGFuZGxlci5hZGRGdXR1cmUoZnV0dXJlKTsKICAgICB9IC8vIGVuZCBtZXRob2QgYXR0YWNoRnV0dXJlCi0gICAgCisKICAgICAvKioKICAgICAgKiBHZXQgdGhlIGFzeW5jIGNhbGxiYWNrIGVuZHBvaW50IC0gaWYgbm90IGFscmVhZHkgY3JlYXRlZCwgY3JlYXRlIGFuZCBzdGFydCBpdAogICAgICAqIEBwYXJhbSBzb3VyY2UgLSB0aGUgUnVudGltZUVuZHBvaW50UmVmZXJlbmNlIHdoaWNoIG5lZWRzIGFuIGFzeW5jIGNhbGxiYWNrIGVuZHBvaW50CiAgICAgICogQHBhcmFtIGZ1dHVyZSAKICAgICAgKiBAcmV0dXJuIC0gdGhlIFJ1bnRpbWVFbmRwb2ludCBvZiB0aGUgYXN5bmMgY2FsbGJhY2sKICAgICAgKi8KLSAgICBwcml2YXRlIFJ1bnRpbWVFbmRwb2ludCBnZXRBc3luY0NhbGxiYWNrKCBJbnZvY2FibGUgc291cmNlICkgewotICAgIAlpZiggIShzb3VyY2UgaW5zdGFuY2VvZiBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UpICkgcmV0dXJuIG51bGw7Ci0JCVJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSBlcHIgPSAoUnVudGltZUVuZHBvaW50UmVmZXJlbmNlKSBzb3VyY2U7Ci0gICAgCWlmKCAhaXNBc3luY0ludm9jYXRpb24oIGVwciApICkgcmV0dXJuIG51bGw7Ci0gICAgCVJ1bnRpbWVFbmRwb2ludCBlbmRwb2ludDsKLSAgICAJc3luY2hyb25pemVkKCBlcHIgKSB7Ci0gICAgCQllbmRwb2ludCA9IChSdW50aW1lRW5kcG9pbnQpZXByLmdldENhbGxiYWNrRW5kcG9pbnQoKTsKLSAgICAJCS8vIElmIHRoZSBhc3luYyBjYWxsYmFjayBlbmRwb2ludCBpcyBhbHJlYWR5IGNyZWF0ZWQsIHJldHVybiBpdC4uLgotICAgIAkJaWYoIGVuZHBvaW50ICE9IG51bGwgKSByZXR1cm4gZW5kcG9pbnQ7Ci0JICAgIAkvLyBDcmVhdGUgdGhlIGVuZHBvaW50IGZvciB0aGUgYXN5bmMgY2FsbGJhY2sKLQkgICAgCWVuZHBvaW50ID0gY3JlYXRlQXN5bmNDYWxsYmFja0VuZHBvaW50KCBlcHIgKTsKLQkgICAgCWVwci5zZXRDYWxsYmFja0VuZHBvaW50KGVuZHBvaW50KTsKLSAgICAJfSAvLyBlbmQgc3luY2hyb25pemVkCi0gICAgCQotICAgIAkvLyBBY3RpdmF0ZSB0aGUgbmV3IGNhbGxiYWNrIGVuZHBvaW50Ci0gICAgCXN0YXJ0RW5kcG9pbnQoIGVwci5nZXRDb21wb3NpdGVDb250ZXh0KCksIGVuZHBvaW50ICk7Ci0gICAgCWVuZHBvaW50LmdldEludm9jYXRpb25DaGFpbnMoKTsKLSAgICAJCi0gICAgCXJldHVybiBlbmRwb2ludDsKKyAgICBwcml2YXRlIFJ1bnRpbWVFbmRwb2ludCBnZXRBc3luY0NhbGxiYWNrKEludm9jYWJsZSBzb3VyY2UpIHsKKyAgICAgICAgaWYgKCEoc291cmNlIGluc3RhbmNlb2YgUnVudGltZUVuZHBvaW50UmVmZXJlbmNlKSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgZXByID0gKFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSlzb3VyY2U7CisgICAgICAgIGlmICghaXNBc3luY0ludm9jYXRpb24oZXByKSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICBSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQ7CisgICAgICAgIHN5bmNocm9uaXplZCAoZXByKSB7CisgICAgICAgICAgICBlbmRwb2ludCA9IChSdW50aW1lRW5kcG9pbnQpZXByLmdldENhbGxiYWNrRW5kcG9pbnQoKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBhc3luYyBjYWxsYmFjayBlbmRwb2ludCBpcyBhbHJlYWR5IGNyZWF0ZWQsIHJldHVybiBpdC4uLgorICAgICAgICAgICAgaWYgKGVuZHBvaW50ICE9IG51bGwpCisgICAgICAgICAgICAgICAgcmV0dXJuIGVuZHBvaW50OworICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBlbmRwb2ludCBmb3IgdGhlIGFzeW5jIGNhbGxiYWNrCisgICAgICAgICAgICBlbmRwb2ludCA9IGNyZWF0ZUFzeW5jQ2FsbGJhY2tFbmRwb2ludChlcHIpOworICAgICAgICAgICAgZXByLnNldENhbGxiYWNrRW5kcG9pbnQoZW5kcG9pbnQpOworICAgICAgICB9IC8vIGVuZCBzeW5jaHJvbml6ZWQKKworICAgICAgICAvLyBBY3RpdmF0ZSB0aGUgbmV3IGNhbGxiYWNrIGVuZHBvaW50CisgICAgICAgIHN0YXJ0RW5kcG9pbnQoZXByLmdldENvbXBvc2l0ZUNvbnRleHQoKSwgZW5kcG9pbnQpOworICAgICAgICBlbmRwb2ludC5nZXRJbnZvY2F0aW9uQ2hhaW5zKCk7CisKKyAgICAgICAgcmV0dXJuIGVuZHBvaW50OwogICAgIH0gLy8gZW5kIG1ldGhvZCBzZXR1cEFzeW5jQ2FsbGJhY2sKLSAgICAKKwogICAgIC8qKgogICAgICAqIFN0YXJ0IHRoZSBjYWxsYmFjayBlbmRwb2ludAogICAgICAqIEBwYXJhbSBjb21wb3NpdGVDb250ZXh0IC0gdGhlIGNvbXBvc2l0ZSBjb250ZXh0CiAgICAgICogQHBhcmFtIGVwIC0gdGhlIGVuZHBvaW50IHRvIHN0YXJ0CiAgICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHN0YXJ0RW5kcG9pbnQoQ29tcG9zaXRlQ29udGV4dCBjb21wb3NpdGVDb250ZXh0LCBSdW50aW1lRW5kcG9pbnQgZXAgKSB7CisgICAgcHJpdmF0ZSB2b2lkIHN0YXJ0RW5kcG9pbnQoQ29tcG9zaXRlQ29udGV4dCBjb21wb3NpdGVDb250ZXh0LCBSdW50aW1lRW5kcG9pbnQgZXApIHsKICAgICAgICAgZm9yIChQb2xpY3lQcm92aWRlciBwb2xpY3lQcm92aWRlciA6IGVwLmdldFBvbGljeVByb3ZpZGVycygpKSB7CiAgICAgICAgICAgICBwb2xpY3lQcm92aWRlci5zdGFydCgpOwogICAgICAgICB9IC8vIGVuZCBmb3IKQEAgLTM3Myw0NSArNDcyLDQ2IEBACiAgICAgICAgICAgICAgICAgcHVibGljIE9iamVjdCBydW4oKSB7CiAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdQcm92aWRlci5zdGFydCgpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIGNvbXBvc2l0ZUNvbnRleHQuZ2V0RW5kcG9pbnRSZWdpc3RyeSgpLmFkZEVuZHBvaW50KGVwKTsKICAgICAgICAgfQogICAgIH0gLy8gZW5kIG1ldGhvZCBzdGFydEVuZHBvaW50Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGUgdGhlIGFzeW5jIGNhbGxiYWNrIGVuZHBvaW50IGZvciBhIHJlZmVyZW5jZSB0aGF0IGlzIGdvaW5nIHRvIGludm9rZSBhbiBhc3luY0ludm9jYXRpb24gc2VydmljZQogICAgICAqIEBwYXJhbSBlcHIgLSB0aGUgUnVudGltZUVuZHBvaW50UmVmZXJlbmNlIGZvciB3aGljaCB0aGUgY2FsbGJhY2sgaXMgY3JlYXRlZAogICAgICAqIEByZXR1cm4gLSBhIFJ1bnRpbWVFbmRwb2ludCByZXByZXNlbnRpbmcgdGhlIGNhbGxiYWNrIGVuZHBvaW50CiAgICAgICovCi0gICAgcHJpdmF0ZSBSdW50aW1lRW5kcG9pbnQgY3JlYXRlQXN5bmNDYWxsYmFja0VuZHBvaW50KCBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgZXByICkgewotICAgIAlDb21wb3NpdGVDb250ZXh0IGNvbXBvc2l0ZUNvbnRleHQgPSBlcHIuZ2V0Q29tcG9zaXRlQ29udGV4dCgpOwotICAgIAlSdW50aW1lQXNzZW1ibHlGYWN0b3J5IGFzc2VtYmx5RmFjdG9yeSA9IGdldEFzc2VtYmx5RmFjdG9yeSggY29tcG9zaXRlQ29udGV4dCApOworICAgIHByaXZhdGUgUnVudGltZUVuZHBvaW50IGNyZWF0ZUFzeW5jQ2FsbGJhY2tFbmRwb2ludChSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgZXByKSB7CisgICAgICAgIENvbXBvc2l0ZUNvbnRleHQgY29tcG9zaXRlQ29udGV4dCA9IGVwci5nZXRDb21wb3NpdGVDb250ZXh0KCk7CisgICAgICAgIFJ1bnRpbWVBc3NlbWJseUZhY3RvcnkgYXNzZW1ibHlGYWN0b3J5ID0gZ2V0QXNzZW1ibHlGYWN0b3J5KGNvbXBvc2l0ZUNvbnRleHQpOwogICAgICAgICBSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQgPSAoUnVudGltZUVuZHBvaW50KWFzc2VtYmx5RmFjdG9yeS5jcmVhdGVFbmRwb2ludCgpOwotICAgICAgICBlbmRwb2ludC5iaW5kKCBjb21wb3NpdGVDb250ZXh0ICk7Ci0gICAgICAgIAorICAgICAgICBlbmRwb2ludC5iaW5kKGNvbXBvc2l0ZUNvbnRleHQpOworCiAgICAgICAgIC8vIENyZWF0ZSBhIHBzZXVkby1jb21wb25lbnQgYW5kIHBzZXVkby1zZXJ2aWNlIAogICAgICAgICAvLyAtIG5lZWQgdG8gZW5kIHdpdGggYSBjaGFpbiB3aXRoIGFuIGludm9rZXIgaW50byB0aGUgQXN5bmNDYWxsYmFja0hhbmRsZXIgY2xhc3MKICAgICAgICAgUnVudGltZUNvbXBvbmVudCBmYWtlQ29tcG9uZW50ID0gbnVsbDsKICAgICAgICAgdHJ5IHsKLQkJCWZha2VDb21wb25lbnQgPSAoUnVudGltZUNvbXBvbmVudCllcHIuZ2V0Q29tcG9uZW50KCkuY2xvbmUoKTsKLQkJCWFwcGx5SW1wbGVtZW50YXRpb24oIGZha2VDb21wb25lbnQgKTsKLQkJfSBjYXRjaCAoQ2xvbmVOb3RTdXBwb3J0ZWRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIHdpbGwgbm90IGhhcHBlbgotCQl9IC8vIGVuZCB0cnkKKyAgICAgICAgICAgIGZha2VDb21wb25lbnQgPSAoUnVudGltZUNvbXBvbmVudCllcHIuZ2V0Q29tcG9uZW50KCkuY2xvbmUoKTsKKyAgICAgICAgICAgIGFwcGx5SW1wbGVtZW50YXRpb24oZmFrZUNvbXBvbmVudCk7CisgICAgICAgIH0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUyKSB7CisgICAgICAgICAgICAvLyB3aWxsIG5vdCBoYXBwZW4KKyAgICAgICAgfSAvLyBlbmQgdHJ5CiAgICAgICAgIGVuZHBvaW50LnNldENvbXBvbmVudChmYWtlQ29tcG9uZW50KTsKLSAgICAgICAgCisKICAgICAgICAgLy8gQ3JlYXRlIHBzZXVkby1zZXJ2aWNlCiAgICAgICAgIENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSA9IGFzc2VtYmx5RmFjdG9yeS5jcmVhdGVDb21wb25lbnRTZXJ2aWNlKCk7Ci0gICAgCUV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnkgPSBjb21wb3NpdGVDb250ZXh0LmdldEV4dGVuc2lvblBvaW50UmVnaXN0cnkoKTsKKyAgICAgICAgRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSA9IGNvbXBvc2l0ZUNvbnRleHQuZ2V0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSgpOwogICAgICAgICBGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChGYWN0b3J5RXh0ZW5zaW9uUG9pbnQuY2xhc3MpOwotICAgICAgICBKYXZhSW50ZXJmYWNlRmFjdG9yeSBqYXZhSW50ZXJmYWNlRmFjdG9yeSA9IChKYXZhSW50ZXJmYWNlRmFjdG9yeSltb2RlbEZhY3Rvcmllcy5nZXRGYWN0b3J5KEphdmFJbnRlcmZhY2VGYWN0b3J5LmNsYXNzKTsKKyAgICAgICAgSmF2YUludGVyZmFjZUZhY3RvcnkgamF2YUludGVyZmFjZUZhY3RvcnkgPQorICAgICAgICAgICAgKEphdmFJbnRlcmZhY2VGYWN0b3J5KW1vZGVsRmFjdG9yaWVzLmdldEZhY3RvcnkoSmF2YUludGVyZmFjZUZhY3RvcnkuY2xhc3MpOwogICAgICAgICBKYXZhSW50ZXJmYWNlQ29udHJhY3QgaW50ZXJmYWNlQ29udHJhY3QgPSBqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlQ29udHJhY3QoKTsKICAgICAgICAgdHJ5IHsKLQkJCWludGVyZmFjZUNvbnRyYWN0LnNldEludGVyZmFjZShqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKEFzeW5jUmVzcG9uc2VIYW5kbGVyLmNsYXNzKSk7Ci0JCX0gY2F0Y2ggKEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gZTEpIHsKLQkJCS8vIE5vdGhpbmcgdG8gZG8gaGVyZSAtIHdpbGwgbm90IGhhcHBlbgotCQl9IC8vIGVuZCB0cnkKKyAgICAgICAgICAgIGludGVyZmFjZUNvbnRyYWN0LnNldEludGVyZmFjZShqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKEFzeW5jUmVzcG9uc2VIYW5kbGVyLmNsYXNzKSk7CisgICAgICAgIH0gY2F0Y2ggKEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gZTEpIHsKKyAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gaGVyZSAtIHdpbGwgbm90IGhhcHBlbgorICAgICAgICB9IC8vIGVuZCB0cnkKICAgICAgICAgc2VydmljZS5zZXRJbnRlcmZhY2VDb250cmFjdChpbnRlcmZhY2VDb250cmFjdCk7CiAgICAgICAgIFN0cmluZyBzZXJ2aWNlTmFtZSA9IGVwci5nZXRSZWZlcmVuY2UoKS5nZXROYW1lKCkgKyAiX2FzeW5jQ2FsbGJhY2siOwogICAgICAgICBzZXJ2aWNlLnNldE5hbWUoc2VydmljZU5hbWUpOwpAQCAtNDIwLDIwICs1MjAsMjAgQEAKICAgICAgICAgTGlzdDxDb21wb25lbnRTZXJ2aWNlPiBzZXJ2aWNlcyA9IGZha2VDb21wb25lbnQuZ2V0U2VydmljZXMoKTsKICAgICAgICAgc2VydmljZXMuY2xlYXIoKTsKICAgICAgICAgc2VydmljZXMuYWRkKHNlcnZpY2UpOwotICAgICAgICAKKwogICAgICAgICAvLyBDcmVhdGUgYSBiaW5kaW5nCi0JCUJpbmRpbmcgYmluZGluZyA9IGNyZWF0ZU1hdGNoaW5nQmluZGluZyggZXByLmdldEJpbmRpbmcoKSwgZmFrZUNvbXBvbmVudCwgc2VydmljZSwgcmVnaXN0cnkgKTsJCQkKLQkJZW5kcG9pbnQuc2V0QmluZGluZyhiaW5kaW5nKTsKLQkJCi0JCS8vIE5lZWQgdG8gZXN0YWJsaXNoIHBvbGljaWVzIGhlcmUgKGJpbmRpbmcgaGFzIHNvbWUuLi4pCi0JCWVuZHBvaW50LmdldFJlcXVpcmVkSW50ZW50cygpLmFkZEFsbCggZXByLmdldFJlcXVpcmVkSW50ZW50cygpICk7Ci0JCWVuZHBvaW50LmdldFBvbGljeVNldHMoKS5hZGRBbGwoIGVwci5nZXRQb2xpY3lTZXRzKCkgKTsKLQkJU3RyaW5nIGVwVVJJID0gZXByLmdldENvbXBvbmVudCgpLmdldE5hbWUoKSArICIjc2VydmljZS1iaW5kaW5nKCIgKyBzZXJ2aWNlTmFtZSArICIvIiArIHNlcnZpY2VOYW1lICsgIikiOwotCQllbmRwb2ludC5zZXRVUkkoZXBVUkkpOworICAgICAgICBCaW5kaW5nIGJpbmRpbmcgPSBjcmVhdGVNYXRjaGluZ0JpbmRpbmcoZXByLmdldEJpbmRpbmcoKSwgZmFrZUNvbXBvbmVudCwgc2VydmljZSwgcmVnaXN0cnkpOworICAgICAgICBlbmRwb2ludC5zZXRCaW5kaW5nKGJpbmRpbmcpOworCisgICAgICAgIC8vIE5lZWQgdG8gZXN0YWJsaXNoIHBvbGljaWVzIGhlcmUgKGJpbmRpbmcgaGFzIHNvbWUuLi4pCisgICAgICAgIGVuZHBvaW50LmdldFJlcXVpcmVkSW50ZW50cygpLmFkZEFsbChlcHIuZ2V0UmVxdWlyZWRJbnRlbnRzKCkpOworICAgICAgICBlbmRwb2ludC5nZXRQb2xpY3lTZXRzKCkuYWRkQWxsKGVwci5nZXRQb2xpY3lTZXRzKCkpOworICAgICAgICBTdHJpbmcgZXBVUkkgPSBlcHIuZ2V0Q29tcG9uZW50KCkuZ2V0TmFtZSgpICsgIiNzZXJ2aWNlLWJpbmRpbmcoIiArIHNlcnZpY2VOYW1lICsgIi8iICsgc2VydmljZU5hbWUgKyAiKSI7CisgICAgICAgIGVuZHBvaW50LnNldFVSSShlcFVSSSk7CiAgICAgICAgIGVuZHBvaW50LnNldFVucmVzb2x2ZWQoZmFsc2UpOwotICAgIAlyZXR1cm4gZW5kcG9pbnQ7CisgICAgICAgIHJldHVybiBlbmRwb2ludDsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBDcmVhdGUgYSBtYXRjaGluZyBiaW5kaW5nIHRvIGEgc3VwcGxpZWQgYmluZGluZwogICAgICAqIC0gdGhlIG1hdGNoaW5nIGJpbmRpbmcgaGFzIHRoZSBzYW1lIGJpbmRpbmcgdHlwZSwgYnV0IGlzIGZvciB0aGUgc3VwcGxpZWQgY29tcG9uZW50IGFuZCBzZXJ2aWNlCkBAIC00NDQsMTAwICs1NDQsMTA4IEBACiAgICAgICogQHJldHVybiAtIHRoZSBtYXRjaGluZyBiaW5kaW5nLCBvciBudWxsIGlmIGl0IGNvdWxkIG5vdCBiZSBjcmVhdGVkCiAgICAgICovCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0JcHJpdmF0ZSBCaW5kaW5nIGNyZWF0ZU1hdGNoaW5nQmluZGluZyggQmluZGluZyBtYXRjaEJpbmRpbmcsIFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LCAKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UsIEV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnkgKSB7Ci0gICAgCS8vIFNpbmNlIHRoZXJlIGlzIG5vIHNpbXBsZSB3YXkgdG8gb2J0YWluIGEgRmFjdG9yeSBmb3IgYSBiaW5kaW5nIHdoZXJlIHRoZSB0eXBlIGlzIG5vdCBrbm93biBhaGVhZCBvZgotICAgIAkvLyB0aW1lLCB0aGUgcHJvY2VzcyBmb2xsb3dlZCBoZXJlIGlzIHRvIGdlbmVyYXRlIHRoZSA8YmluZGluZy54eHgvPiBYTUwgZWxlbWVudCBmcm9tIHRoZSBiaW5kaW5nIHR5cGUgUU5hbWUKLSAgICAJLy8gYW5kIHRoZW4gcmVhZCB0aGUgWE1MIHVzaW5nIHRoZSBwcm9jZXNzb3IgZm9yIHRoYXQgWE1MLi4uCi0gICAgCVFOYW1lIGJpbmRpbmdOYW1lID0gbWF0Y2hCaW5kaW5nLmdldFR5cGUoKTsKLSAgICAJU3RyaW5nIGJpbmRpbmdYTUwgPSAiPG5zMToiICsgYmluZGluZ05hbWUuZ2V0TG9jYWxQYXJ0KCkgKyAiIHhtbG5zOm5zMT0nIiArIGJpbmRpbmdOYW1lLmdldE5hbWVzcGFjZVVSSSgpICsgIicvPiI7Ci0gICAgCQotICAgIAlTdEFYQXJ0aWZhY3RQcm9jZXNzb3JFeHRlbnNpb25Qb2ludCBwcm9jZXNzb3JzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoU3RBWEFydGlmYWN0UHJvY2Vzc29yRXh0ZW5zaW9uUG9pbnQuY2xhc3MpOwotICAgIAlTdEFYQXJ0aWZhY3RQcm9jZXNzb3I8Pz4gcHJvY2Vzc29yID0gKFN0QVhBcnRpZmFjdFByb2Nlc3Nvcjw/Pilwcm9jZXNzb3JzLmdldFByb2Nlc3NvcihiaW5kaW5nTmFtZSk7Ci0gICAgCQotICAgIAlGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgbW9kZWxGYWN0b3JpZXMgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChGYWN0b3J5RXh0ZW5zaW9uUG9pbnQuY2xhc3MpOwotICAgIAlWYWxpZGF0aW5nWE1MSW5wdXRGYWN0b3J5IGlucHV0RmFjdG9yeSA9IG1vZGVsRmFjdG9yaWVzLmdldEZhY3RvcnkoVmFsaWRhdGluZ1hNTElucHV0RmFjdG9yeS5jbGFzcyk7ICAgIAkJCi0gICAgCVN0cmVhbVNvdXJjZSBzb3VyY2UgPSBuZXcgU3RyZWFtU291cmNlKCBuZXcgU3RyaW5nUmVhZGVyKGJpbmRpbmdYTUwpICk7Ci0gICAgCQotICAgIAlQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQgPSBuZXcgUHJvY2Vzc29yQ29udGV4dCgpOwotCQl0cnkgewotCQkJWE1MU3RyZWFtUmVhZGVyIHJlYWRlciA9IGlucHV0RmFjdG9yeS5jcmVhdGVYTUxTdHJlYW1SZWFkZXIoc291cmNlKTsKLQkJCXJlYWRlci5uZXh0KCk7Ci0JCQlCaW5kaW5nIG5ld0JpbmRpbmcgPSAoQmluZGluZykgcHJvY2Vzc29yLnJlYWQocmVhZGVyLCBjb250ZXh0ICk7Ci0JCQkKLQkJCS8vIENyZWF0ZSBhIFVSSSBhZGRyZXNzIGZvciB0aGUgY2FsbGJhY2sgYmFzZWQgb24gdGhlIENvbXBvbmVudF9OYW1lL1JlZmVyZW5jZV9OYW1lIHBhdHRlcm4KLQkJCVN0cmluZyBjYWxsYmFja1VSSSA9ICIvIiArIGNvbXBvbmVudC5nZXROYW1lKCkgKyAiLyIgKyBzZXJ2aWNlLmdldE5hbWUoKTsKLQkJCW5ld0JpbmRpbmcuc2V0VVJJKGNhbGxiYWNrVVJJKTsKLQkJCQotCQkJQnVpbGRlckV4dGVuc2lvblBvaW50IGJ1aWxkZXJzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoQnVpbGRlckV4dGVuc2lvblBvaW50LmNsYXNzKTsKLQkJCUJpbmRpbmdCdWlsZGVyIGJ1aWxkZXIgPSBidWlsZGVycy5nZXRCaW5kaW5nQnVpbGRlcihuZXdCaW5kaW5nLmdldFR5cGUoKSk7CisgICAgcHJpdmF0ZSBCaW5kaW5nIGNyZWF0ZU1hdGNoaW5nQmluZGluZyhCaW5kaW5nIG1hdGNoQmluZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSkgeworICAgICAgICAvLyBTaW5jZSB0aGVyZSBpcyBubyBzaW1wbGUgd2F5IHRvIG9idGFpbiBhIEZhY3RvcnkgZm9yIGEgYmluZGluZyB3aGVyZSB0aGUgdHlwZSBpcyBub3Qga25vd24gYWhlYWQgb2YKKyAgICAgICAgLy8gdGltZSwgdGhlIHByb2Nlc3MgZm9sbG93ZWQgaGVyZSBpcyB0byBnZW5lcmF0ZSB0aGUgPGJpbmRpbmcueHh4Lz4gWE1MIGVsZW1lbnQgZnJvbSB0aGUgYmluZGluZyB0eXBlIFFOYW1lCisgICAgICAgIC8vIGFuZCB0aGVuIHJlYWQgdGhlIFhNTCB1c2luZyB0aGUgcHJvY2Vzc29yIGZvciB0aGF0IFhNTC4uLgorICAgICAgICBRTmFtZSBiaW5kaW5nTmFtZSA9IG1hdGNoQmluZGluZy5nZXRUeXBlKCk7CisgICAgICAgIFN0cmluZyBiaW5kaW5nWE1MID0KKyAgICAgICAgICAgICI8bnMxOiIgKyBiaW5kaW5nTmFtZS5nZXRMb2NhbFBhcnQoKSArICIgeG1sbnM6bnMxPSciICsgYmluZGluZ05hbWUuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiJy8+IjsKKworICAgICAgICBTdEFYQXJ0aWZhY3RQcm9jZXNzb3JFeHRlbnNpb25Qb2ludCBwcm9jZXNzb3JzID0KKyAgICAgICAgICAgIHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFN0QVhBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50LmNsYXNzKTsKKyAgICAgICAgU3RBWEFydGlmYWN0UHJvY2Vzc29yPD8+IHByb2Nlc3NvciA9IChTdEFYQXJ0aWZhY3RQcm9jZXNzb3I8Pz4pcHJvY2Vzc29ycy5nZXRQcm9jZXNzb3IoYmluZGluZ05hbWUpOworCisgICAgICAgIEZhY3RvcnlFeHRlbnNpb25Qb2ludCBtb2RlbEZhY3RvcmllcyA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KEZhY3RvcnlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CisgICAgICAgIFZhbGlkYXRpbmdYTUxJbnB1dEZhY3RvcnkgaW5wdXRGYWN0b3J5ID0gbW9kZWxGYWN0b3JpZXMuZ2V0RmFjdG9yeShWYWxpZGF0aW5nWE1MSW5wdXRGYWN0b3J5LmNsYXNzKTsKKyAgICAgICAgU3RyZWFtU291cmNlIHNvdXJjZSA9IG5ldyBTdHJlYW1Tb3VyY2UobmV3IFN0cmluZ1JlYWRlcihiaW5kaW5nWE1MKSk7CisKKyAgICAgICAgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0ID0gbmV3IFByb2Nlc3NvckNvbnRleHQoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIFhNTFN0cmVhbVJlYWRlciByZWFkZXIgPSBpbnB1dEZhY3RvcnkuY3JlYXRlWE1MU3RyZWFtUmVhZGVyKHNvdXJjZSk7CisgICAgICAgICAgICByZWFkZXIubmV4dCgpOworICAgICAgICAgICAgQmluZGluZyBuZXdCaW5kaW5nID0gKEJpbmRpbmcpcHJvY2Vzc29yLnJlYWQocmVhZGVyLCBjb250ZXh0KTsKKworICAgICAgICAgICAgLy8gQ3JlYXRlIGEgVVJJIGFkZHJlc3MgZm9yIHRoZSBjYWxsYmFjayBiYXNlZCBvbiB0aGUgQ29tcG9uZW50X05hbWUvUmVmZXJlbmNlX05hbWUgcGF0dGVybgorICAgICAgICAgICAgU3RyaW5nIGNhbGxiYWNrVVJJID0gIi8iICsgY29tcG9uZW50LmdldE5hbWUoKSArICIvIiArIHNlcnZpY2UuZ2V0TmFtZSgpOworICAgICAgICAgICAgbmV3QmluZGluZy5zZXRVUkkoY2FsbGJhY2tVUkkpOworCisgICAgICAgICAgICBCdWlsZGVyRXh0ZW5zaW9uUG9pbnQgYnVpbGRlcnMgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChCdWlsZGVyRXh0ZW5zaW9uUG9pbnQuY2xhc3MpOworICAgICAgICAgICAgQmluZGluZ0J1aWxkZXIgYnVpbGRlciA9IGJ1aWxkZXJzLmdldEJpbmRpbmdCdWlsZGVyKG5ld0JpbmRpbmcuZ2V0VHlwZSgpKTsKICAgICAgICAgICAgIGlmIChidWlsZGVyICE9IG51bGwpIHsKLSAgICAgICAgICAgIAlvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmJ1aWxkZXIuQnVpbGRlckNvbnRleHQgYnVpbGRlckNvbnRleHQgPSBuZXcgQnVpbGRlckNvbnRleHQocmVnaXN0cnkpOwotICAgICAgICAgICAgCWJ1aWxkZXIuYnVpbGQoY29tcG9uZW50LCBzZXJ2aWNlLCBuZXdCaW5kaW5nLCBidWlsZGVyQ29udGV4dCwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5idWlsZGVyLkJ1aWxkZXJDb250ZXh0IGJ1aWxkZXJDb250ZXh0ID0gbmV3IEJ1aWxkZXJDb250ZXh0KHJlZ2lzdHJ5KTsKKyAgICAgICAgICAgICAgICBidWlsZGVyLmJ1aWxkKGNvbXBvbmVudCwgc2VydmljZSwgbmV3QmluZGluZywgYnVpbGRlckNvbnRleHQsIHRydWUpOwogICAgICAgICAgICAgfSAvLyBlbmQgaWYKLQkJCQotCQkJcmV0dXJuIG5ld0JpbmRpbmc7Ci0JCX0gY2F0Y2ggKENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfSBjYXRjaCAoWE1MU3RyZWFtRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLSAgICAJCi0gICAgCXJldHVybiBudWxsOworCisgICAgICAgICAgICByZXR1cm4gbmV3QmluZGluZzsKKyAgICAgICAgfSBjYXRjaCAoQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICB9IGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBudWxsOwogICAgIH0gLy8gZW5kIG1ldGhvZCBjcmVhdGVNYXRjaGluZ0JpbmRpbmcKLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgYSBSdW50aW1lQXNzZW1ibHlGYWN0b3J5IGZyb20gdGhlIENvbXBvc2l0ZUNvbnRleHQKICAgICAgKiBAcGFyYW0gY29tcG9zaXRlQ29udGV4dAogICAgICAqIEByZXR1cm4gdGhlIFJ1bnRpbWVBc3NlbWJseUZhY3RvcnkKICAgICAgKi8KLSAgICBwcml2YXRlIFJ1bnRpbWVBc3NlbWJseUZhY3RvcnkgZ2V0QXNzZW1ibHlGYWN0b3J5KCBDb21wb3NpdGVDb250ZXh0IGNvbXBvc2l0ZUNvbnRleHQgKSB7Ci0gICAgCUV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnkgPSBjb21wb3NpdGVDb250ZXh0LmdldEV4dGVuc2lvblBvaW50UmVnaXN0cnkoKTsKKyAgICBwcml2YXRlIFJ1bnRpbWVBc3NlbWJseUZhY3RvcnkgZ2V0QXNzZW1ibHlGYWN0b3J5KENvbXBvc2l0ZUNvbnRleHQgY29tcG9zaXRlQ29udGV4dCkgeworICAgICAgICBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gY29tcG9zaXRlQ29udGV4dC5nZXRFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5KCk7CiAgICAgICAgIEZhY3RvcnlFeHRlbnNpb25Qb2ludCBtb2RlbEZhY3RvcmllcyA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KEZhY3RvcnlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CiAgICAgICAgIHJldHVybiAoUnVudGltZUFzc2VtYmx5RmFjdG9yeSltb2RlbEZhY3Rvcmllcy5nZXRGYWN0b3J5KEFzc2VtYmx5RmFjdG9yeS5jbGFzcyk7CiAgICAgfSAvLyBlbmQgbWV0aG9kIFJ1bnRpbWVBc3NlbWJseUZhY3RvcnkKLSAgICAKKwogICAgIC8qKgogICAgICAqIEFwcGxpZXMgYW4gQXN5bmNSZXNwb25zZUhhbmRsZXJJbXBsIGFzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIFJ1bnRpbWVDb21wb25lbnQKICAgICAgKiAtIHRoZSBBc3luY1Jlc3BvbnNlSGFuZGxlckltcGwgYWN0cyBhcyBib3RoIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBhbmQgdGhlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVyLi4uCiAgICAgICogQHBhcmFtIGNvbXBvbmVudCAtIHRoZSBjb21wb25lbnQKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgYXBwbHlJbXBsZW1lbnRhdGlvbiggUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQgKSB7Ci0gICAgCUFzeW5jUmVzcG9uc2VIYW5kbGVySW1wbDw/PiBhc3luY0hhbmRsZXIgPSBuZXcgQXN5bmNSZXNwb25zZUhhbmRsZXJJbXBsPE9iamVjdD4oKTsKLSAgICAJY29tcG9uZW50LnNldEltcGxlbWVudGF0aW9uKCBhc3luY0hhbmRsZXIgKTsKLSAgICAJY29tcG9uZW50LnNldEltcGxlbWVudGF0aW9uUHJvdmlkZXIoIGFzeW5jSGFuZGxlciApOworICAgIHByaXZhdGUgdm9pZCBhcHBseUltcGxlbWVudGF0aW9uKFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50KSB7CisgICAgICAgIEFzeW5jUmVzcG9uc2VIYW5kbGVySW1wbDw/PiBhc3luY0hhbmRsZXIgPSBuZXcgQXN5bmNSZXNwb25zZUhhbmRsZXJJbXBsPE9iamVjdD4oKTsKKyAgICAgICAgY29tcG9uZW50LnNldEltcGxlbWVudGF0aW9uKGFzeW5jSGFuZGxlcik7CisgICAgICAgIGNvbXBvbmVudC5zZXRJbXBsZW1lbnRhdGlvblByb3ZpZGVyKGFzeW5jSGFuZGxlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9IC8vIGVuZCBtZXRob2QgZ2V0SW1wbGVtZW50YXRpb25Qcm92aWRlcgotICAgIAotICAgIHByaXZhdGUgc3RhdGljIFFOYW1lIEFTWU5DX0lOVk9LRSA9IG5ldyBRTmFtZSggQ29uc3RhbnRzLlNDQTExX05TLCAiYXN5bmNJbnZvY2F0aW9uIiApOworCisgICAgcHJpdmF0ZSBzdGF0aWMgUU5hbWUgQVNZTkNfSU5WT0tFID0gbmV3IFFOYW1lKENvbnN0YW50cy5TQ0ExMV9OUywgImFzeW5jSW52b2NhdGlvbiIpOworCiAgICAgLyoqCiAgICAgICogRGV0ZXJtaW5lcyBpZiB0aGUgc2VydmljZSBpbnZvY2F0aW9uIGlzIGFzeW5jaHJvbm91cwogICAgICAqIEBwYXJhbSBzb3VyY2UgLSB0aGUgRVBSIGludm9sdmVkIGluIHRoZSBpbnZvY2F0aW9uCiAgICAgICogQHJldHVybiAtIHRydWUgaWYgdGhlIGludm9jYXRpb24gaXMgYXN5bmMKICAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNBc3luY0ludm9jYXRpb24oIEludm9jYWJsZSBzb3VyY2UgKSB7Ci0gICAgCWlmKCAhKHNvdXJjZSBpbnN0YW5jZW9mIFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSkgKSByZXR1cm4gZmFsc2U7Ci0JCVJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSBlcHIgPSAoUnVudGltZUVuZHBvaW50UmVmZXJlbmNlKSBzb3VyY2U7Ci0JCS8vIEZpcnN0IGNoZWNrIGlzIHRvIHNlZSBpZiB0aGUgRVBSIGl0c2VsZiBoYXMgdGhlIGFzeW5jSW52b2NhdGlvbiBpbnRlbnQgbWFya2VkCi0JCWZvciggSW50ZW50IGludGVudCA6IGVwci5nZXRSZXF1aXJlZEludGVudHMoKSApIHsKLQkJCWlmICggaW50ZW50LmdldE5hbWUoKS5lcXVhbHMoQVNZTkNfSU5WT0tFKSApIHJldHVybiB0cnVlOwotCQl9IC8vIGVuZCBmb3IKLQkJCi0JCS8vIFNlY29uZCBjaGVjayBpcyB0byBzZWUgaWYgdGhlIHRhcmdldCBzZXJ2aWNlIGhhcyB0aGUgYXN5bmNJbnZvY2F0aW9uIGludGVudCBtYXJrZWQKLQkJRW5kcG9pbnQgZXAgPSBlcHIuZ2V0VGFyZ2V0RW5kcG9pbnQoKTsKLQkJZm9yKCBJbnRlbnQgaW50ZW50IDogZXAuZ2V0UmVxdWlyZWRJbnRlbnRzKCkgKSB7Ci0JCQlpZiAoIGludGVudC5nZXROYW1lKCkuZXF1YWxzKEFTWU5DX0lOVk9LRSkgKSByZXR1cm4gdHJ1ZTsKLQkJfSAvLyBlbmQgZm9yCi0gICAgCXJldHVybiBmYWxzZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNBc3luY0ludm9jYXRpb24oSW52b2NhYmxlIHNvdXJjZSkgeworICAgICAgICBpZiAoIShzb3VyY2UgaW5zdGFuY2VvZiBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBSdW50aW1lRW5kcG9pbnRSZWZlcmVuY2UgZXByID0gKFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSlzb3VyY2U7CisgICAgICAgIC8vIEZpcnN0IGNoZWNrIGlzIHRvIHNlZSBpZiB0aGUgRVBSIGl0c2VsZiBoYXMgdGhlIGFzeW5jSW52b2NhdGlvbiBpbnRlbnQgbWFya2VkCisgICAgICAgIGZvciAoSW50ZW50IGludGVudCA6IGVwci5nZXRSZXF1aXJlZEludGVudHMoKSkgeworICAgICAgICAgICAgaWYgKGludGVudC5nZXROYW1lKCkuZXF1YWxzKEFTWU5DX0lOVk9LRSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0gLy8gZW5kIGZvcgorCisgICAgICAgIC8vIFNlY29uZCBjaGVjayBpcyB0byBzZWUgaWYgdGhlIHRhcmdldCBzZXJ2aWNlIGhhcyB0aGUgYXN5bmNJbnZvY2F0aW9uIGludGVudCBtYXJrZWQKKyAgICAgICAgRW5kcG9pbnQgZXAgPSBlcHIuZ2V0VGFyZ2V0RW5kcG9pbnQoKTsKKyAgICAgICAgZm9yIChJbnRlbnQgaW50ZW50IDogZXAuZ2V0UmVxdWlyZWRJbnRlbnRzKCkpIHsKKyAgICAgICAgICAgIGlmIChpbnRlbnQuZ2V0TmFtZSgpLmVxdWFscyhBU1lOQ19JTlZPS0UpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IC8vIGVuZCBmb3IKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0gLy8gZW5kIGlzQXN5bmNJbnZvY2F0aW9uCi0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm4gdGhlIHN5bmNocm9ub3VzIG1ldGhvZCB0aGF0IGlzIHRoZSBlcXVpdmFsZW50IG9mIGFuIGFzeW5jIG1ldGhvZAogICAgICAqIEBwYXJhbSBhc3luY01ldGhvZCAtIHRoZSBhc3luYyBtZXRob2QKICAgICAgKiBAcmV0dXJuIC0gdGhlIGVxdWl2YWxlbnQgc3luY2hyb25vdXMgbWV0aG9kCiAgICAgICovCiAgICAgcHJvdGVjdGVkIE1ldGhvZCBnZXROb25Bc3luY01ldGhvZChNZXRob2QgYXN5bmNNZXRob2QpIHsKLSAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBhc3luY01ldGhvZC5nZXROYW1lKCkuc3Vic3RyaW5nKDAsIGFzeW5jTWV0aG9kLmdldE5hbWUoKS5sZW5ndGgoKS01KTsKKyAgICAgICAgU3RyaW5nIG1ldGhvZE5hbWUgPSBhc3luY01ldGhvZC5nZXROYW1lKCkuc3Vic3RyaW5nKDAsIGFzeW5jTWV0aG9kLmdldE5hbWUoKS5sZW5ndGgoKSAtIDUpOwogICAgICAgICBmb3IgKE1ldGhvZCBtIDogYnVzaW5lc3NJbnRlcmZhY2UuZ2V0TWV0aG9kcygpKSB7CiAgICAgICAgICAgICBpZiAobWV0aG9kTmFtZS5lcXVhbHMobS5nZXROYW1lKCkpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG07CkBAIC01NDUsMTIgKzY1MywxMiBAQAogICAgICAgICB9CiAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5vIHN5bmNocm9ub3VzIG1ldGhvZCBtYXRjaGluZyBhc3luYyBtZXRob2QgIiArIGFzeW5jTWV0aG9kLmdldE5hbWUoKSk7CiAgICAgfSAvLyBlbmQgbWV0aG9kIGdldE5vbkFzeW5jTWV0aG9kCi0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIHRoZSBjbGFzc2xvYWRlciBvZiB0aGUgYnVzaW5lc3MgaW50ZXJmYWNlCiAgICAgICogQHJldHVybgogICAgICAqLwotICAgIHByaXZhdGUgQ2xhc3NMb2FkZXIgZ2V0SW50ZXJmYWNlQ2xhc3Nsb2FkZXIoICkgewotICAgIAlyZXR1cm4gYnVzaW5lc3NJbnRlcmZhY2UuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICBwcml2YXRlIENsYXNzTG9hZGVyIGdldEludGVyZmFjZUNsYXNzbG9hZGVyKCkgeworICAgICAgICByZXR1cm4gYnVzaW5lc3NJbnRlcmZhY2UuZ2V0Q2xhc3NMb2FkZXIoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvaW52b2NhdGlvbi9pbXBsL0FzeW5jUmVzcG9uc2VIYW5kbGVySW1wbC5qYXZhIGIvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2ludm9jYXRpb24vaW1wbC9Bc3luY1Jlc3BvbnNlSGFuZGxlckltcGwuamF2YQppbmRleCA4ZDU2MDg4Li5hYTljZjRhIDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvaW52b2NhdGlvbi9pbXBsL0FzeW5jUmVzcG9uc2VIYW5kbGVySW1wbC5qYXZhCisrKyBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9pbnZvY2F0aW9uL2ltcGwvQXN5bmNSZXNwb25zZUhhbmRsZXJJbXBsLmphdmEKQEAgLTE1Nyw2ICsxNTcsMTAgQEAKICAgICBwdWJsaWMgTWVzc2FnZSBpbnZva2UoTWVzc2FnZSBtc2cpIHsKIAkJLy8gR2V0IHRoZSB1bmlxdWUgSUQgZnJvbSB0aGUgbWVzc2FnZSBoZWFkZXIKIAkJU3RyaW5nIGlkVmFsdWUgPSAoU3RyaW5nKW1zZy5nZXRIZWFkZXJzKCkuZ2V0KFdTX01FU1NBR0VfSUQpOworCQlpZiAoaWRWYWx1ZSA9PSBudWxsKXsKKwkJICAgIGlkVmFsdWUgPSAoU3RyaW5nKW1zZy5nZXRIZWFkZXJzKCkuZ2V0KCJNRVNTQUdFX0lEIik7CisJCX0KKwkJCiAJCWlmKCBpZFZhbHVlID09IG51bGwgKSB7IAogCQkJU3lzdGVtLm91dC5wcmludGxuKCAiQXN5bmMgbWVzc2FnZSBJRCBub3QgZm91bmQgIik7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvaW52b2NhdGlvbi9pbXBsL0pES0ludm9jYXRpb25IYW5kbGVyLmphdmEgYi9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvaW52b2NhdGlvbi9pbXBsL0pES0ludm9jYXRpb25IYW5kbGVyLmphdmEKaW5kZXggZDAwOTVmNC4uMDM4NTNhMiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2ludm9jYXRpb24vaW1wbC9KREtJbnZvY2F0aW9uSGFuZGxlci5qYXZhCisrKyBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9pbnZvY2F0aW9uL2ltcGwvSkRLSW52b2NhdGlvbkhhbmRsZXIuamF2YQpAQCAtMjcsNiArMjcsOCBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKK2ltcG9ydCBqYXZheC54bWwud3MuSG9sZGVyOworCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5FbmRwb2ludDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRleHQuVGhyZWFkTWVzc2FnZUNvbnRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmNvbnRleHQuU2VydmljZVJlZmVyZW5jZUV4dDsKQEAgLTEwMywxMiArMTA1LDMzIEBACiAgICAgICAgIAogICAgICAgICBpZiAoY2hhaW4gPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiTm8gbWF0Y2hpbmcgb3BlcmF0aW9uIGlzIGZvdW5kOiAiICsgbWV0aG9kKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gc2VuZCB0aGUgaW52b2NhdGlvbiBkb3duIHRoZSBzb3VyY2UKLSAgICAgICAgT2JqZWN0IHJlc3VsdCA9IGludm9rZShjaGFpbiwgYXJncywgc291cmNlKTsKKyAgICAgICAgfSAgICAgICAgCiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgLy8gSG9sZGVyIHBhdHRlcm4uIEl0ZW1zIHN0b3JlZCBpbiBhIEhvbGRlcjxUPiBhcmUgcHJvbW90ZWQgdG8gVC4KKyAgICAgICAgLy8gQWZ0ZXIgdGhlIGludm9rZSwgdGhlIHJldHVybmVkIGRhdGEgPFQ+IGFyZSBwbGFjZWQgYmFjayBpbiBIb2xkZXI8VD4uCisgICAgICAgIE9iamVjdCBbXSBwcm9tb3RlZEFyZ3MgPSBwcm9tb3RlSG9sZGVyQXJncyggYXJncyApOworICAgICAgICAgICAgICAgIAorICAgICAgICBPYmplY3QgcmVzdWx0ID0gaW52b2tlKGNoYWluLCBwcm9tb3RlZEFyZ3MsIHNvdXJjZSk7CisgICAgICAgIAorICAgICAgICAvLyBSZXR1cm5lZCBIb2xkZXIgZGF0YSA8VD4gYXJlIHBsYWNlZCBiYWNrIGluIEhvbGRlcjxUPi4KKyAgICAgICAgYm9vbGVhbiBob2xkZXJQYXR0ZXJuID0gZmFsc2U7CisgICAgICAgIENsYXNzIFtdIHBhcmFtZXRlcnMgPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgaWYgKCBwYXJhbWV0ZXJzICE9IG51bGwgKSB7CisgICAgICAgIAlmb3IgKCBpbnQgaSA9IDAsIHJlc3VsdElkeCA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgaSsrICkgeworICAgICAgICAJCUNsYXNzIHBhcmFtZXRlclR5cGUgPSBwYXJhbWV0ZXJzWyBpIF07ICAgICAgICAgICAgICAKKyAgICAgICAgCQlpZiAoIGlzSG9sZGVyKCBwYXJhbWV0ZXJUeXBlICkgKSB7CisgICAgICAgIAkJCWhvbGRlclBhdHRlcm4gPSB0cnVlOworICAgICAgICAJCQkvLyBQb3AgcmVzdWx0cyBhbmQgcGxhY2UgaW4gaG9sZGVyIChkZW1vdGUpLgorICAgICAgICAJCQlIb2xkZXIgaG9sZGVyID0gKEhvbGRlcikgYXJnc1sgaSBdOyAKKyAgICAgICAgCQkJT2JqZWN0W10gcmVzdWx0QXJyYXkgPSAoT2JqZWN0W10pcmVzdWx0OworICAgICAgICAJCQlob2xkZXIudmFsdWUgPSByZXN1bHRBcnJheVsrK3Jlc3VsdElkeF07CisgICAgICAgIAkJfSAgICAgICAgICAgIAorICAgICAgICAJfQorICAgICAgICB9CisgICAgICAgIGlmICggaG9sZGVyUGF0dGVybiApIAorICAgICAgICAJcmV0dXJuICgoT2JqZWN0W10pcmVzdWx0KVswXTsKKyAgICAgICAgZWxzZQorICAgICAgICAJcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICAvKioKQEAgLTMwNyw1ICszMzAsNTggQEAKICAgICBwdWJsaWMgdm9pZCBzZXRDYWxsYWJsZVJlZmVyZW5jZShTZXJ2aWNlUmVmZXJlbmNlPD8+IGNhbGxhYmxlUmVmZXJlbmNlKSB7CiAgICAgICAgIHRoaXMuY2FsbGFibGVSZWZlcmVuY2UgPSAoU2VydmljZVJlZmVyZW5jZUV4dDw/PiljYWxsYWJsZVJlZmVyZW5jZTsKICAgICB9Ci0KKyAgICAgICAgICAgIAorICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBjb3B5IG9mIGFyZ3VtZW50cy4gSG9sZGVyPFQ+IHZhbHVlcyBhcmUgcHJvbW90ZWQgdG8gVC4KKyAgICAgKiBOb3RlLiBJdCBpcyBlc3NlbnRpYWwgdGhhdCBhcmcgSG9sZGVycyBub3QgYmUgZGVzdHJveWVkIGhlcmUuCisgICAgICogUHJvbW90ZWRBcmdzIHNob3VsZCBub3QgZGVzdHJveSBob2xkZXJzLiBUaGV5IGFyZSB1c2VkIG9uIHJlc3BvbnNlIHJldHVybi4KKyAgICAgKiBAcGFyYW0gYXJncyBjb250YWluaW5nIEhvbGRlcnMgYW5kIG90aGVyIG9iamVjdHMuCisgICAgICogQHJldHVybiBPYmplY3QgW10gCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBPYmplY3QgW10gcHJvbW90ZUhvbGRlckFyZ3MoIE9iamVjdCBbXSBhcmdzICkgeworICAgIAlpZiAoIGFyZ3MgPT0gbnVsbCApCisgICAgCQlyZXR1cm4gYXJnczsKKyAgICAJT2JqZWN0IFtdIHByb21vdGVkQXJncyA9IG5ldyBPYmplY3RbIGFyZ3MubGVuZ3RoIF07CisgICAgCQorICAgIAlmb3IgKCBpbnQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrICkgeworICAgIAkJT2JqZWN0IGFyZ3VtZW50ID0gYXJnc1sgaSBdOworICAgIAkJaWYgKCBhcmd1bWVudCAhPSBudWxsICkgeworICAgIAkJCWlmICggaXNIb2xkZXIoIGFyZ3VtZW50ICkgKSB7CisgICAgCQkJCXByb21vdGVkQXJnc1sgaSBdID0gKChIb2xkZXIpYXJndW1lbnQpLnZhbHVlOyAgICAgIAorICAgIAkJCX0gZWxzZSB7CisgICAgCQkJCXByb21vdGVkQXJnc1sgaSBdID0gYXJnc1sgaSBdOworICAgIAkJCX0KKyAgICAgICAgICAgICAgICAgIAorICAgIAkJfQorICAgIAl9CisgICAgCXJldHVybiBwcm9tb3RlZEFyZ3M7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEdpdmVuIGEgQ2xhc3MsIHRlbGxzIGlmIGl0IGlzIGEgSG9sZGVyIGJ5IGNvbXBhcmluZyB0byAiamF2YXgueG1sLndzLkhvbGRlciIKKyAgICAgKiBAcGFyYW0gdGVzdENsYXNzCisgICAgICogQHJldHVybiBib29sZWFuIHdoZXRoZXIgY2xhc3MgaXMgSG9sZGVyIHR5cGUuCisgICAgICovCisgICAgcHJvdGVjdGVkIHN0YXRpYyBib29sZWFuIGlzSG9sZGVyKCBDbGFzcyB0ZXN0Q2xhc3MgKSB7CisgICAgCWlmICggdGVzdENsYXNzLmdldE5hbWUoKS5zdGFydHNXaXRoKCAiamF2YXgueG1sLndzLkhvbGRlciIgKSkgeworICAgIAkJcmV0dXJuIHRydWU7CisgICAgCX0KKyAgICAJcmV0dXJuIGZhbHNlOyAgICAgICAgCisgICAgfQorICAgIAorICAgICAgICAgCisgICAgLyoqCisgICAgICogR2l2ZW4gYW4gT2JqZWN0LCB0ZWxscyBpZiBpdCBpcyBhIEhvbGRlciBieSBjb21wYXJpbmcgdG8gImphdmF4LnhtbC53cy5Ib2xkZXIiCisgICAgICogQHBhcmFtIHRlc3RDbGFzcworICAgICAqIEByZXR1cm4gYm9vbGVhbiBzdGF0aW5nIHdoZXRoZXIgT2JqZWN0IGlzIGEgSG9sZGVyIHR5cGUuCisgICAgICogQGF1dGhvciBET0IKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gaXNIb2xkZXIoIE9iamVjdCBvYmplY3QgKSB7CisgICAgCVN0cmluZyBvYmplY3ROYW1lID0gb2JqZWN0LmdldENsYXNzKCkuZ2V0TmFtZSgpOworICAgIAlpZiAoIG9iamVjdCBpbnN0YW5jZW9mIGphdmF4LnhtbC53cy5Ib2xkZXIgKSB7CisgICAgCQlyZXR1cm4gdHJ1ZTsKKyAgICAJfQorICAgIAlyZXR1cm4gZmFsc2U7ICAgICAgICAKKyAgICB9CisgICAgICAgIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2ludm9jYXRpb24vaW1wbC9KREtQcm94eUZhY3RvcnkuamF2YSBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9pbnZvY2F0aW9uL2ltcGwvSkRLUHJveHlGYWN0b3J5LmphdmEKaW5kZXggYTE2MjExMC4uZjA3MmQ2NiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL2ludm9jYXRpb24vaW1wbC9KREtQcm94eUZhY3RvcnkuamF2YQorKysgYi9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvaW52b2NhdGlvbi9pbXBsL0pES1Byb3h5RmFjdG9yeS5qYXZhCkBAIC0zMSw2ICszMSw3IEBACiBpbXBvcnQgamF2YXgueG1sLndzLlJlc3BvbnNlOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24uamF2YS5jb2xsZWN0aW9uLkxSVUNhY2hlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5MaWZlQ3ljbGVMaXN0ZW5lcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuY29udGV4dC5TZXJ2aWNlUmVmZXJlbmNlRXh0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5jb250ZXh0LmltcGwuQ2FsbGJhY2tTZXJ2aWNlUmVmZXJlbmNlSW1wbDsKQEAgLTQ0LDE3ICs0NSwyMCBAQAogaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSZWZlcmVuY2U7CiBpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb247CiAKLQogLyoqCiAgKiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhIHdpcmUgc2VydmljZSB0aGF0IHVzZXMgSkRLIGR5bmFtaWMgcHJveGllcwogICogCiAgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKICAqLwogcHVibGljIGNsYXNzIEpES1Byb3h5RmFjdG9yeSBpbXBsZW1lbnRzIFByb3h5RmFjdG9yeSwgTGlmZUN5Y2xlTGlzdGVuZXIgeworICAgIHByb3RlY3RlZCBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5OwogICAgIHByb3RlY3RlZCBJbnRlcmZhY2VDb250cmFjdE1hcHBlciBjb250cmFjdE1hcHBlcjsKICAgICBwcml2YXRlIE1lc3NhZ2VGYWN0b3J5IG1lc3NhZ2VGYWN0b3J5OwogCi0gICAgcHVibGljIEpES1Byb3h5RmFjdG9yeShNZXNzYWdlRmFjdG9yeSBtZXNzYWdlRmFjdG9yeSwgSW50ZXJmYWNlQ29udHJhY3RNYXBwZXIgbWFwcGVyKSB7CisgICAgcHVibGljIEpES1Byb3h5RmFjdG9yeShFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZUZhY3RvcnkgbWVzc2FnZUZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcmZhY2VDb250cmFjdE1hcHBlciBtYXBwZXIpIHsKKyAgICAgICAgdGhpcy5yZWdpc3RyeSA9IHJlZ2lzdHJ5OwogICAgICAgICB0aGlzLmNvbnRyYWN0TWFwcGVyID0gbWFwcGVyOwogICAgICAgICB0aGlzLm1lc3NhZ2VGYWN0b3J5ID0gbWVzc2FnZUZhY3Rvcnk7CiAgICAgfQpAQCAtNjYsMTUgKzcwLDE3IEBACiAgICAgcHVibGljIDxUPiBUIGNyZWF0ZVByb3h5KGZpbmFsIENsYXNzPFQ+IGludGVyZmF6ZSwgSW52b2NhYmxlIGludm9jYWJsZSkgdGhyb3dzIFByb3h5Q3JlYXRpb25FeGNlcHRpb24gewogICAgICAgICBpZiAoaW52b2NhYmxlIGluc3RhbmNlb2YgUnVudGltZUVuZHBvaW50KSB7CiAgICAgICAgICAgICBJbnZvY2F0aW9uSGFuZGxlciBoYW5kbGVyOwotICAgICAgICAgICAgaWYgKGlzQXN5bmMoaW50ZXJmYXplKSkgewotICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBuZXcgQXN5bmNKREtJbnZvY2F0aW9uSGFuZGxlcihtZXNzYWdlRmFjdG9yeSwgaW50ZXJmYXplLCBpbnZvY2FibGUpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoYW5kbGVyID0gbmV3IEpES0ludm9jYXRpb25IYW5kbGVyKG1lc3NhZ2VGYWN0b3J5LCBpbnRlcmZhemUsIGludm9jYWJsZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBUVVNDQU5ZLTM2NTkgLSBBbHdheXMgaW5zdGFsbCBhIGFzeW5jaCBoYW5kbGVyIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciByZWYgaXMgc3luYyBvciBhc3luYyAgCisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBuZWVkcyB0aWR5aW5nICAgICAgICAgCisgICAgICAgICAgICAvLyAgICAgICAgICAgIGlmIChpc0FzeW5jKGludGVyZmF6ZSkpIHsKKyAgICAgICAgICAgIGhhbmRsZXIgPSBuZXcgQXN5bmNKREtJbnZvY2F0aW9uSGFuZGxlcihyZWdpc3RyeSwgbWVzc2FnZUZhY3RvcnksIGludGVyZmF6ZSwgaW52b2NhYmxlKTsKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBuZXcgSkRLSW52b2NhdGlvbkhhbmRsZXIobWVzc2FnZUZhY3RvcnksIGludGVyZmF6ZSwgaW52b2NhYmxlKTsKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gQWxsb3cgcHJpdmlsZWdlZCBhY2Nlc3MgdG8gY2xhc3MgbG9hZGVyLiBSZXF1aXJlcyBSdW50aW1lUGVybWlzc2lvbiBpbiBzZWN1cml0eSBwb2xpY3kuCiAgICAgICAgICAgICBDbGFzc0xvYWRlciBjbCA9IEFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKG5ldyBQcml2aWxlZ2VkQWN0aW9uPENsYXNzTG9hZGVyPigpIHsKICAgICAgICAgICAgICAgICBwdWJsaWMgQ2xhc3NMb2FkZXIgcnVuKCkgewotICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmZhemUuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVyZmF6ZS5nZXRDbGFzc0xvYWRlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgVCBwcm94eSA9IGludGVyZmF6ZS5jYXN0KG5ld1Byb3h5SW5zdGFuY2UoY2wsIG5ldyBDbGFzc1tdIHtpbnRlcmZhemV9LCBoYW5kbGVyKSk7CkBAIC04MywzMyArODksMzYgQEAKICAgICAgICAgU2VydmljZVJlZmVyZW5jZTxUPiBzZXJ2aWNlUmVmZXJlbmNlID0gbmV3IFNlcnZpY2VSZWZlcmVuY2VJbXBsPFQ+KGludGVyZmF6ZSwgaW52b2NhYmxlLCBudWxsKTsKICAgICAgICAgcmV0dXJuIGNyZWF0ZVByb3h5KHNlcnZpY2VSZWZlcmVuY2UpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyA8VD4gVCBjcmVhdGVQcm94eShTZXJ2aWNlUmVmZXJlbmNlPFQ+IGNhbGxhYmxlUmVmZXJlbmNlKSB0aHJvd3MgUHJveHlDcmVhdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIGFzc2VydCBjYWxsYWJsZVJlZmVyZW5jZSAhPSBudWxsOwogICAgICAgICBmaW5hbCBDbGFzczxUPiBpbnRlcmZhemUgPSBjYWxsYWJsZVJlZmVyZW5jZS5nZXRCdXNpbmVzc0ludGVyZmFjZSgpOwogICAgICAgICBJbnZvY2F0aW9uSGFuZGxlciBoYW5kbGVyOwotICAgICAgICBpZiAoaXNBc3luYyhpbnRlcmZhemUpKSB7Ci0gICAgICAgICAgICBoYW5kbGVyID0gbmV3IEFzeW5jSkRLSW52b2NhdGlvbkhhbmRsZXIobWVzc2FnZUZhY3RvcnksIGNhbGxhYmxlUmVmZXJlbmNlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhhbmRsZXIgPSBuZXcgSkRLSW52b2NhdGlvbkhhbmRsZXIobWVzc2FnZUZhY3RvcnksIGNhbGxhYmxlUmVmZXJlbmNlKTsKLSAgICAgICAgfQorICAgICAgICAvLyBUVVNDQU5ZLTM2NTkgLSBBbHdheXMgaW5zdGFsbCBhIGFzeW5jaCBoYW5kbGVyIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciByZWYgaXMgc3luYyBvciBhc3luYworICAgICAgICAvLyAgICAgICAgICAgICAgICBuZWVkcyB0aWR5aW5nCisgICAgICAgIC8vICAgICAgICBpZiAoaXNBc3luYyhpbnRlcmZhemUpKSB7CisgICAgICAgIGhhbmRsZXIgPSBuZXcgQXN5bmNKREtJbnZvY2F0aW9uSGFuZGxlcihyZWdpc3RyeSwgbWVzc2FnZUZhY3RvcnksIGNhbGxhYmxlUmVmZXJlbmNlKTsKKyAgICAgICAgLy8gICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8vICAgICAgICAgICAgaGFuZGxlciA9IG5ldyBKREtJbnZvY2F0aW9uSGFuZGxlcihtZXNzYWdlRmFjdG9yeSwgY2FsbGFibGVSZWZlcmVuY2UpOworICAgICAgICAvLyAgICAgICAgfQogICAgICAgICAvLyBBbGxvdyBwcml2aWxlZ2VkIGFjY2VzcyB0byBjbGFzcyBsb2FkZXIuIFJlcXVpcmVzIFJ1bnRpbWVQZXJtaXNzaW9uIGluIHNlY3VyaXR5IHBvbGljeS4KICAgICAgICAgQ2xhc3NMb2FkZXIgY2wgPSBBY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChuZXcgUHJpdmlsZWdlZEFjdGlvbjxDbGFzc0xvYWRlcj4oKSB7CiAgICAgICAgICAgICBwdWJsaWMgQ2xhc3NMb2FkZXIgcnVuKCkgewotICAgICAgICAgICAgICAgcmV0dXJuIGludGVyZmF6ZS5nZXRDbGFzc0xvYWRlcigpOworICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcmZhemUuZ2V0Q2xhc3NMb2FkZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSk7CiAgICAgICAgIFQgcHJveHkgPSBpbnRlcmZhemUuY2FzdChuZXdQcm94eUluc3RhbmNlKGNsLCBuZXcgQ2xhc3NbXSB7aW50ZXJmYXplfSwgaGFuZGxlcikpOwogICAgICAgICAoKFNlcnZpY2VSZWZlcmVuY2VFeHQ8VD4pY2FsbGFibGVSZWZlcmVuY2UpLnNldFByb3h5KHByb3h5KTsKICAgICAgICAgcmV0dXJuIHByb3h5OwogICAgIH0KLSAgICAKKwogICAgIHByaXZhdGUgYm9vbGVhbiBpc0FzeW5jKENsYXNzPD8+IGludGVyZmF6ZSkgewogICAgICAgICBmb3IgKE1ldGhvZCBtZXRob2QgOiBpbnRlcmZhemUuZ2V0TWV0aG9kcygpKSB7CiAgICAgICAgICAgICBpZiAobWV0aG9kLmdldE5hbWUoKS5lbmRzV2l0aCgiQXN5bmMiKSkgewogICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0UmV0dXJuVHlwZSgpLmlzQXNzaWduYWJsZUZyb20oRnV0dXJlLmNsYXNzKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpW21ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aC0xXS5pc0Fzc2lnbmFibGVGcm9tKEFzeW5jSGFuZGxlci5jbGFzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKVttZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggLSAxXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pc0Fzc2lnbmFibGVGcm9tKEFzeW5jSGFuZGxlci5jbGFzcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTM5LDcgKzE0OCw3IEBACiAgICAgICAgIEludm9jYXRpb25IYW5kbGVyIGhhbmRsZXIgPSBuZXcgSkRLQ2FsbGJhY2tJbnZvY2F0aW9uSGFuZGxlcihtZXNzYWdlRmFjdG9yeSwgY2FsbGJhY2tSZWZlcmVuY2UpOwogICAgICAgICBDbGFzc0xvYWRlciBjbCA9IGludGVyZmF6ZS5nZXRDbGFzc0xvYWRlcigpOwogICAgICAgICBUIHByb3h5ID0gaW50ZXJmYXplLmNhc3QobmV3UHJveHlJbnN0YW5jZShjbCwgbmV3IENsYXNzW10ge2ludGVyZmF6ZX0sIGhhbmRsZXIpKTsKLSAgICAgICAgKChTZXJ2aWNlUmVmZXJlbmNlRXh0PFQ+KSBjYWxsYmFja1JlZmVyZW5jZSkuc2V0UHJveHkocHJveHkpOworICAgICAgICAoKFNlcnZpY2VSZWZlcmVuY2VFeHQ8VD4pY2FsbGJhY2tSZWZlcmVuY2UpLnNldFByb3h5KHByb3h5KTsKICAgICAgICAgcmV0dXJuIHByb3h5OwogICAgIH0KIApAQCAtMTU4LDE1ICsxNjcsMTQgQEAKICAgICBwdWJsaWMgYm9vbGVhbiBpc1Byb3h5Q2xhc3MoQ2xhc3M8Pz4gY2xhenopIHsKICAgICAgICAgcmV0dXJuIFByb3h5LmlzUHJveHlDbGFzcyhjbGF6eik7CiAgICAgfQotICAgIAorCiAgICAgLy8gVGhpcyBpcyBhIGNhY2hlIGNvbnRhaW5pbmcgdGhlIHByb3h5IGNsYXNzIGNvbnN0cnVjdG9yIGZvciBlYWNoIGJ1c2luZXNzIGludGVyZmFjZS4KICAgICAvLyBUaGlzIGltcHJvdmVzIHBlcmZvcm1hbmNlIGNvbXBhcmVkIHRvIGNhbGxpbmcgUHJveHkubmV3UHJveHlJbnN0YW5jZSgpCiAgICAgLy8gZXZlcnkgdGltZSB0aGF0IGEgcHJveHkgaXMgbmVlZGVkLgogICAgIHByaXZhdGUgZmluYWwgTFJVQ2FjaGU8Q2xhc3M8Pz4sIENvbnN0cnVjdG9yPD8+PiBjYWNoZSA9IG5ldyBMUlVDYWNoZTxDbGFzczw/PiwgQ29uc3RydWN0b3I8Pz4+KDUxMik7CiAKLSAgICBwdWJsaWMgT2JqZWN0IG5ld1Byb3h5SW5zdGFuY2UoQ2xhc3NMb2FkZXIgY2xhc3Nsb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiBpbnRlcmZhY2VzW10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZvY2F0aW9uSGFuZGxlciBpbnZvY2F0aW9uaGFuZGxlcikgdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiB7CisgICAgcHVibGljIE9iamVjdCBuZXdQcm94eUluc3RhbmNlKENsYXNzTG9hZGVyIGNsYXNzbG9hZGVyLCBDbGFzczw/PiBpbnRlcmZhY2VzW10sIEludm9jYXRpb25IYW5kbGVyIGludm9jYXRpb25oYW5kbGVyKQorICAgICAgICB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHsKICAgICAgICAgaWYgKGludGVyZmFjZXMubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgLy8gV2Ugb25seSBjYWNoZSB0aGUgcHJveHkgY29uc3RydWN0b3JzIHdpdGggb25lIHNpbmdsZSBpbnRlcmZhY2Ugd2hpY2ggdGhlIGNhc2UgaW4gU0NBIHdoZXJlCiAgICAgICAgICAgICAvLyBvbmUgcmVmZXJlbmNlIGNhbiBoYXZlIG9uZSBpbnRlcmZhY2UKQEAgLTE5Nyw2ICsyMDUsNiBAQAogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7Ci0gICAgICAgY2FjaGUuY2xlYXIoKTsgCi0gICAgfSAgICAKKyAgICAgICAgY2FjaGUuY2xlYXIoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvcnVudGltZS9pbXBsL0VuZHBvaW50UmVmZXJlbmNlQmluZGVySW1wbC5qYXZhIGIvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL3J1bnRpbWUvaW1wbC9FbmRwb2ludFJlZmVyZW5jZUJpbmRlckltcGwuamF2YQppbmRleCBiNTg2MzVkLi44Mjg2MGUyIDEwMDY0NAotLS0gYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvcnVudGltZS9pbXBsL0VuZHBvaW50UmVmZXJlbmNlQmluZGVySW1wbC5qYXZhCisrKyBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS9ydW50aW1lL2ltcGwvRW5kcG9pbnRSZWZlcmVuY2VCaW5kZXJJbXBsLmphdmEKQEAgLTQ0LDExICs0NCwxMyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5VdGlsaXR5RXh0ZW5zaW9uUG9pbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5LmltcGwuUnVudGltZUVuZHBvaW50UmVmZXJlbmNlSW1wbDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLkRlZmluaXRpb25zOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0TWFwcGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLnV0aWwuQXVkaXQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLk1vbml0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLk1vbml0b3JGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkJpbmRpbmdUeXBlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkV4dGVuc2lvblR5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuSW50ZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkludGVudE1hcDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5Qb2xpY3lTZXQ7CkBAIC0zMjcsNyArMzI5LDExIEBACiAgICAgICAgIAogICAgICAgICBpZiAoZW5kcG9pbnRSZWZlcmVuY2UuZ2V0UmVmZXJlbmNlKCkuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIiRzZWxmJC4iKSl7CiAgICAgICAgICAgICAvLyBqdXN0IHNlbGVjdCB0aGUgZmlyc3Qgb25lIGFuZCBkb24ndCBkbyBhbnkgcG9saWN5IG1hdGNoaW5nCi0gICAgICAgICAgICBtYXRjaGVkRW5kcG9pbnQgPSBlbmRwb2ludHMuZ2V0KDApOworICAgICAgICAgICAgaWYgKGVuZHBvaW50UmVmZXJlbmNlLmdldFRhcmdldEVuZHBvaW50KCkgIT0gbnVsbCAmJiAhZW5kcG9pbnRSZWZlcmVuY2UuZ2V0VGFyZ2V0RW5kcG9pbnQoKS5pc1VucmVzb2x2ZWQoKSkgeworICAgICAgICAgICAgICAgIG1hdGNoZWRFbmRwb2ludCA9IGVuZHBvaW50UmVmZXJlbmNlLmdldFRhcmdldEVuZHBvaW50KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hdGNoZWRFbmRwb2ludCA9IGVuZHBvaW50cy5nZXQoMCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBmaW5kIHRoZSBmaXJzdCBlbmRwb2ludCB0aGF0IG1hdGNoZXMgdGhpcyBlbmRwb2ludCByZWZlcmVuY2UKICAgICAgICAgICAgIGZvciAoRW5kcG9pbnQgZW5kcG9pbnQgOiBlbmRwb2ludHMpewpAQCAtNDk2LDYgKzUwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwSW50ZW50LnRvU3RyaW5nKCkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICIpOworICAgICAgICAgICAgICAgICAgICBtYXRjaEF1ZGl0LmFwcGVuZFNlcGVyYXRvcigpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtNTQ5LDYgKzU1Niw3IEBACiAgICAgICAgICAgICAobm9FbmRwb2ludFJlZmVyZW5jZVBvbGljaWVzKSAmJgogICAgICAgICAgICAgKG5vRW5kcG9pbnRQb2xpY2llcykpIHsKICAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kKCJNYXRjaCBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnRlbnRzIG9yIHBvbGljaWVzICIpOworICAgICAgICAgICAgbWF0Y2hBdWRpdC5hcHBlbmRTZXBlcmF0b3IoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9ICAgICAgICAKICAgICAgICAgCkBAIC01NTksOCArNTY3LDggQEAKICAgICAgICAgLy8gdGhpcyB0aGV5IG11c3QgYmUgc2F0aXNmaWVkIGJ5IHJlZmVyZW5jZSBwb2xpY3kgc2V0cwogICAgICAgICAvLyBGYWlsaW5nIHRoaXMgdGhlIGludGVudCBpcyB1bnJlc29sdmVkIGFuZCB0aGUgcmVmZXJlbmNlIGFuZCAKICAgICAgICAgLy8gc2VydmljZSBkb24ndCBtYXRjaAotICAgICAgICBMaXN0PEludGVudD4gZXBySW50ZW50cyA9IG5ldyBBcnJheUxpc3Q8SW50ZW50PigpOwotICAgICAgICBlcHJJbnRlbnRzLmFkZEFsbChlbmRwb2ludFJlZmVyZW5jZS5nZXRSZXF1aXJlZEludGVudHMoKSk7CisgICAgICAgIAorICAgICAgCiAgICAgICAgIAogICAgICAgICAvLyBUT0RPIC0gc2VlbXMgdGhhdCB3ZSBzaG91bGQgZG8gdGhpcyBsb29wIG9uIGEgYmluZGluZyBieSBiaW5kaW5nIGJhc2lzCiAgICAgICAgIC8vICAgICAgICByYXRoZXIgdGhhbiBlYWNoIHRpbWUgd2UgZG8gbWF0Y2hpbmcKQEAgLTU3Myw2ICs1ODEsMTMgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgLy8gQmVmb3JlIHdlIHN0YXJ0IGV4YW1pbmluZyBpbnRlbnRzLCByZW1vdmUgYW55IHdob3NlIGNvbnN0cmFpbmVkCisgICAgICAgIC8vIHR5cGVzIGRvbid0IGluY2x1ZGUgdGhlIGJpbmRpbmcgdHlwZQorICAgICAgICByZW1vdmVDb25zdHJhaW5lZEludGVudHMoZW5kcG9pbnRSZWZlcmVuY2UsIGJpbmRpbmdUeXBlKTsKKyAgICAgICAgCisgICAgICAgIExpc3Q8SW50ZW50PiBlcHJJbnRlbnRzID0gbmV3IEFycmF5TGlzdDxJbnRlbnQ+KCk7CisgICAgICAgIGVwckludGVudHMuYWRkQWxsKGVuZHBvaW50UmVmZXJlbmNlLmdldFJlcXVpcmVkSW50ZW50cygpKTsKKyAgICAgICAgCiAgICAgICAgIC8vIGZpcnN0IGNoZWNrIHRoZSBiaW5kaW5nIHR5cGUKICAgICAgICAgZm9yIChJbnRlbnQgaW50ZW50IDogZW5kcG9pbnRSZWZlcmVuY2UuZ2V0UmVxdWlyZWRJbnRlbnRzKCkpeyAKICAgICAgICAgICAgIGlmIChiaW5kaW5nVHlwZSAhPSBudWxsICYmIApAQCAtNjEyLDYgKzYyNyw3IEBACiAgICAgICAgIC8vIGlmIHRoZXJlIGFyZSB1bnJlc29sdmVkIGludGVudHMgdGhlIHNlcnZpY2UgYW5kIHJlZmVyZW5jZSBkb24ndCBtYXRjaAogICAgICAgICBpZiAoZXBySW50ZW50cy5zaXplKCkgPiAwKXsKICAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kKCJObyBtYXRjaCBiZWNhdXNlIHRoZXJlIGFyZSB1bnJlc29sdmVkIGludGVudHMgIiArIGVwckludGVudHMudG9TdHJpbmcoKSArICIgIik7CisgICAgICAgICAgICBtYXRjaEF1ZGl0LmFwcGVuZFNlcGVyYXRvcigpOwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9ICAgCiAgICAgICAgIApAQCAtNjE5LDYgKzYzNSw3IEBACiAgICAgICAgIC8vIHRoZXkgbWF0Y2gKICAgICAgICAgaWYgKG5vRW5kcG9pbnRQb2xpY2llcyAmJiBub0VuZHBvaW50UmVmZXJlbmNlUG9saWNpZXMpewogICAgICAgICAgICAgbWF0Y2hBdWRpdC5hcHBlbmQoIk1hdGNoIGJlY2F1c2UgdGhlIGludGVudHMgYXJlIHJlc29sdmVkIGFuZCB0aGVyZSBhcmUgbm8gcG9saWN5IHNldHMgIik7CisgICAgICAgICAgICBtYXRjaEF1ZGl0LmFwcGVuZFNlcGVyYXRvcigpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02MjYsMTEgKzY0MywxMyBAQAogICAgICAgICAvLyB0aGUgZG9uJ3QgbWF0Y2gKICAgICAgICAgaWYgKG5vRW5kcG9pbnRQb2xpY2llcyAmJiAhbm9FbmRwb2ludFJlZmVyZW5jZVBvbGljaWVzKSB7CiAgICAgICAgICAgICBtYXRjaEF1ZGl0LmFwcGVuZCgiTm8gbWF0Y2ggYmVjYXVzZSB0aGVyZSBhcmUgcG9saWN5IHNldHMgYXQgdGhlIGVuZHBvaW50IHJlZmVyZW5jZSBidXQgbm90IGF0IHRoZSBlbmRwb2ludCAiKTsKKyAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kU2VwZXJhdG9yKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghbm9FbmRwb2ludFBvbGljaWVzICYmIG5vRW5kcG9pbnRSZWZlcmVuY2VQb2xpY2llcyl7CiAgICAgICAgICAgICBtYXRjaEF1ZGl0LmFwcGVuZCgiTm8gbWF0Y2ggYmVjYXVzZSB0aGVyZSBhcmUgcG9saWN5IHNldHMgYXQgdGhlIGVuZHBvaW50IGJ1dCBub3QgYXQgdGhlIGVuZHBvaW50IHJlZmVyZW5jZSAiKTsKKyAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kU2VwZXJhdG9yKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02NDAsNiArNjU5LDcgQEAKICAgICAgICAgU2V0PFBvbGljeVNldD4gc2VydmljZVBvbGljeVNldCA9IG5ldyBIYXNoU2V0PFBvbGljeVNldD4oZW5kcG9pbnQuZ2V0UG9saWN5U2V0cygpKTsKICAgICAgICAgaWYocmVmZXJlbmNlUG9saWN5U2V0LmVxdWFscyhzZXJ2aWNlUG9saWN5U2V0KSl7CiAgICAgICAgICAgICBtYXRjaEF1ZGl0LmFwcGVuZCgiTWF0Y2ggYmVjYXVzZSB0aGUgcG9saWN5IHNldHMgb24gYm90aCBzaWRlcyBhcmUgZWFjdGx5IHRoZSBzYW1lICIpOworICAgICAgICAgICAgbWF0Y2hBdWRpdC5hcHBlbmRTZXBlcmF0b3IoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNjcyLDYgKzY5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGFuZCAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwTGFuZ3VhZ2UgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAiKTsKKyAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kU2VwZXJhdG9yKCk7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCkBAIC02OTQsMTYgKzcxNSw0OCBAQAogICAgICAgICAgICAgICAgIAogICAgICAgICBpZiAoIW1hdGNoKXsKICAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kKCJObyBtYXRjaCBiZWNhdXNlIHRoZSBsYW5ndWFnZSBzcGVjaWZpYyBtYXRjaGluZyBmYWlsZWQgIik7CisgICAgICAgICAgICBtYXRjaEF1ZGl0LmFwcGVuZFNlcGVyYXRvcigpOwogICAgICAgICAgICAgZW5kcG9pbnRSZWZlcmVuY2UuZ2V0UG9saWN5U2V0cygpLmNsZWFyKCk7CiAgICAgICAgICAgICBlbmRwb2ludFJlZmVyZW5jZS5nZXRQb2xpY3lTZXRzKCkuYWRkQWxsKG9yaWdpbmFsUG9saWN5U2V0cyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtYXRjaEF1ZGl0LmFwcGVuZCgiTWF0Y2ggYmVjYXVzZSB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWMgbWF0Y2hpbmcgc3VjY2VlZGVkICIpOworICAgICAgICAgICAgbWF0Y2hBdWRpdC5hcHBlbmRTZXBlcmF0b3IoKTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIG1hdGNoOwogICAgIH0KICAgICAKLSAgICBwcm90ZWN0ZWQgYm9vbGVhbiBpc1F1YWxpZmllZEJ5KEludGVudCBxdWFsaWZpYWJsZUludGVudCwgSW50ZW50IHF1YWxpZmllZEludGVudCl7CisgICAgLy8gQ29waWVkIGZyb20gQ29tcG9uZW50UG9saWN5QnVpbGRlciwgc2hvdWxkIHByb2JhYmx5IGJlIHJlZmFjdG9yZWQKKyAgICBwcm90ZWN0ZWQgdm9pZCByZW1vdmVDb25zdHJhaW5lZEludGVudHMoRW5kcG9pbnRSZWZlcmVuY2Ugc3ViamVjdCwgQmluZGluZ1R5cGUgYmluZGluZ1R5cGUpIHsKKyAgICAgICAgTGlzdDxJbnRlbnQ+IGludGVudHMgPSBzdWJqZWN0LmdldFJlcXVpcmVkSW50ZW50cygpOworICAgICAgICAKKyAgICAgICAgLy8gUmVtb3ZlIHRoZSBpbnRlbnRzIHdob3NlIEBjb250cmFpbnMgZG8gbm90IGluY2x1ZGUgdGhlIGN1cnJlbnQgZWxlbWVudCAgICAgICAKKyAgICAgICAgaWYoYmluZGluZ1R5cGUgIT0gbnVsbCl7CisgICAgICAgICAgICBMaXN0PEludGVudD4gY29weSA9IG5ldyBBcnJheUxpc3Q8SW50ZW50PihpbnRlbnRzKTsKKyAgICAgICAgICAgIGZvciAoSW50ZW50IGkgOiBjb3B5KSB7CisgICAgICAgICAgICAJTGlzdDxFeHRlbnNpb25UeXBlPiBjb25zdHJhaW5lZFR5cGVzID0gaS5nZXRDb25zdHJhaW5lZFR5cGVzKCk7CisgICAgICAgICAgICAJaWYgKCggY29uc3RyYWluZWRUeXBlcy5zaXplKCkgPT0gMCApICYmICggaS5nZXRRdWFsaWZpYWJsZUludGVudCgpICE9IG51bGwgKSApICAKKyAgICAgICAgICAgIAkJY29uc3RyYWluZWRUeXBlcyA9IGkuZ2V0UXVhbGlmaWFibGVJbnRlbnQoKS5nZXRDb25zdHJhaW5lZFR5cGVzKCk7CisgICAgICAgICAgICAJCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0cmFpbmVkVHlwZXMuc2l6ZSgpID4gMCl7ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW4gY29uc3RyYWludEZvdW5kID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGZvciAoRXh0ZW5zaW9uVHlwZSBjb25zdHJhaW5lZFR5cGUgOiBpLmdldENvbnN0cmFpbmVkVHlwZXMoKSl7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RyYWluZWRUeXBlLmdldFR5cGUoKS5lcXVhbHMoYmluZGluZ1R5cGUuZ2V0VHlwZSgpKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbmVkVHlwZS5nZXRUeXBlKCkuZXF1YWxzKGJpbmRpbmdUeXBlLmdldEJhc2VUeXBlKCkpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50Rm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmKCFjb25zdHJhaW50Rm91bmQpeworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZW50cy5yZW1vdmUoaSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgIAorCisJcHJvdGVjdGVkIGJvb2xlYW4gaXNRdWFsaWZpZWRCeShJbnRlbnQgcXVhbGlmaWFibGVJbnRlbnQsIEludGVudCBxdWFsaWZpZWRJbnRlbnQpewogICAgICAgICBpZiAocXVhbGlmaWVkSW50ZW50LmdldFF1YWxpZmlhYmxlSW50ZW50KCkgPT0gcXVhbGlmaWFibGVJbnRlbnQpewogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0gZWxzZSB7CkBAIC03MjgsMzIgKzc4MSw1MCBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBoYXZlTWF0Y2hpbmdJbnRlcmZhY2VDb250cmFjdHMoRW5kcG9pbnRSZWZlcmVuY2UgZW5kcG9pbnRSZWZlcmVuY2UsIEVuZHBvaW50IGVuZHBvaW50LCBBdWRpdCBtYXRjaEF1ZGl0KXsKICAgICAgICAgbWF0Y2hBdWRpdC5hcHBlbmQoIk1hdGNoIGludGVyZmFjZSBvZiAiICsgZW5kcG9pbnRSZWZlcmVuY2UudG9TdHJpbmcoKSArICIgdG8gIiArIGVuZHBvaW50LnRvU3RyaW5nKCkgKyAiICIpOwogICAgICAgICAKLSAgICAgICAgaWYgKGVuZHBvaW50UmVmZXJlbmNlLmdldFJlZmVyZW5jZSgpLmdldEludGVyZmFjZUNvbnRyYWN0KCkgPT0gbnVsbCl7CisgICAgICAgIEludGVyZmFjZUNvbnRyYWN0IGVuZHBvaW50UmVmZXJlbmNlQ29udHJhY3QgPSBlbmRwb2ludFJlZmVyZW5jZS5nZXRSZWZlcmVuY2UoKS5nZXRJbnRlcmZhY2VDb250cmFjdCgpOworICAgICAgICBJbnRlcmZhY2VDb250cmFjdCBlbmRwb2ludENvbnRyYWN0ID0gZW5kcG9pbnQuZ2V0Q29tcG9uZW50U2VydmljZUludGVyZmFjZUNvbnRyYWN0KCk7CisgICAgICAgIAorICAgICAgICBpZiAoZW5kcG9pbnRSZWZlcmVuY2VDb250cmFjdCA9PSBudWxsKXsKICAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kKCJNYXRjaCBiZWNhdXNlIHRoZXJlIGlzIG5vIGludGVyZmFjZSBjb250cmFjdCBvbiB0aGUgcmVmZXJlbmNlICIpOworICAgICAgICAgICAgbWF0Y2hBdWRpdC5hcHBlbmRTZXBlcmF0b3IoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBUT0RPIC0gaXMgdGhlcmUgYSBiZXR0ZXIgdGVzdCBmb3IgdGhpcy4gV291bGQgaGF2ZSB0byBjYXN0IHRvIHRoZQogICAgICAgICAvLyAgICAgICAgY29ycmVjdCBpZmFjZSB0eXBlIHRvIGdldCB0byB0aGUgcmVzb2x2ZWQgZmxhZwotICAgICAgICBpZiAoZW5kcG9pbnQuZ2V0Q29tcG9uZW50U2VydmljZUludGVyZmFjZUNvbnRyYWN0KCkuZ2V0SW50ZXJmYWNlKCkuZ2V0T3BlcmF0aW9ucygpLnNpemUoKSA9PSAwKXsKKyAgICAgICAgLy8gICAgICAgIFdlIG5lZWQgdG8gcmVseSBvbiBub3JtYWlsemVkIGludGVyZmFjZXMgaW4gdGhpcyBjYXNlISEKKyAgICAgICAgaWYgKGVuZHBvaW50Q29udHJhY3QuZ2V0SW50ZXJmYWNlKCkuZ2V0T3BlcmF0aW9ucygpLnNpemUoKSA9PSAwKXsKICAgICAgICAgICAgIC8vIHRoZSBpbnRlcmZhY2UgY29udHJhY3QgaXMgbGlrZWx5IHJlbW90ZSBidXQgdW5yZXNvbHZlZAogICAgICAgICAgICAgLy8gd2UgZGlzY3Vzc2VkIHRoaXMgb24gdGhlIE1MIGFuZCBkZWNpZGVkIHRoYXQgd2UgY291bGQKICAgICAgICAgICAgIC8vIGxpdmUgd2l0aCB0aGlzIGZvciB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBubyBjZW50cmFsIG1hdGNoaW5nIG9mIHJlZmVyZW5jZXMKICAgICAgICAgICAgIC8vIHRvIHNlcnZpY2VzLiBBbnkgZXJyb3JzIHdpbGwgYmUgZGV0ZWN0ZWQgd2hlbiB0aGUgbWVzc2FnZSBmbG93cy4KICAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kKCJNYXRjaCBiZWNhdXNlIHRoZSBlbmRwb2ludCBpcyByZW1vdGUgYW5kIHdlIGRvbid0IGhhdmUgYSBjb3B5IG9mIGl0J3MgaW50ZXJmYWNlIGNvbnRyYWN0ICIpOworICAgICAgICAgICAgbWF0Y2hBdWRpdC5hcHBlbmRTZXBlcmF0b3IoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZiB0aGUgY29udHJhY3RzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdHlwZSBvciBub3JtYWxpemVkIGludGVyZmFjZXMgYXJlIGF2YWlsYWJsZQorICAgICAgICAvLyB1c2UgdGhlbQorICAgICAgICBpZiAoZW5kcG9pbnRSZWZlcmVuY2VDb250cmFjdC5nZXRDbGFzcygpICE9IGVuZHBvaW50Q29udHJhY3QuZ2V0Q2xhc3MoKSB8fAorICAgICAgICAgICAgZW5kcG9pbnRSZWZlcmVuY2VDb250cmFjdC5nZXROb3JtYWxpemVkV1NETENvbnRyYWN0KCkgIT0gbnVsbCB8fAorICAgICAgICAgICAgIGVuZHBvaW50Q29udHJhY3QuZ2V0Tm9ybWFsaXplZFdTRExDb250cmFjdCgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIGVuZHBvaW50UmVmZXJlbmNlQ29udHJhY3QgPSAoKFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSllbmRwb2ludFJlZmVyZW5jZSkuZ2V0R2VuZXJhdGVkV1NETENvbnRyYWN0KGVuZHBvaW50UmVmZXJlbmNlQ29udHJhY3QpOworICAgICAgICAgICAgZW5kcG9pbnRDb250cmFjdCA9ICgoUnVudGltZUVuZHBvaW50KWVuZHBvaW50KS5nZXRHZW5lcmF0ZWRXU0RMQ29udHJhY3QoZW5kcG9pbnRDb250cmFjdCk7CisgICAgICAgIH0gICAgICAgIAogICAgICAgICAgICAgIAogICAgICAgICBib29sZWFuIG1hdGNoID0gZmFsc2U7Ci0gICAgICAgIG1hdGNoID0gaW50ZXJmYWNlQ29udHJhY3RNYXBwZXIuaXNDb21wYXRpYmxlU3Vic2V0KGVuZHBvaW50UmVmZXJlbmNlLmdldFJlZmVyZW5jZSgpLmdldEludGVyZmFjZUNvbnRyYWN0KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludC5nZXRDb21wb25lbnRTZXJ2aWNlSW50ZXJmYWNlQ29udHJhY3QoKSwgbWF0Y2hBdWRpdCk7CisgICAgICAgIG1hdGNoID0gaW50ZXJmYWNlQ29udHJhY3RNYXBwZXIuaXNDb21wYXRpYmxlU3Vic2V0KGVuZHBvaW50UmVmZXJlbmNlQ29udHJhY3QsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludENvbnRyYWN0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hBdWRpdCk7CiAgICAgICAgIAogICAgICAgICBpZiAoIW1hdGNoKXsKLSAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kKCJNYXRjaCBmYWlsZWQgYmVjYXVzZSB0aGUgbGludGVyZmFjZSBjb250cmFjdCBtYXBwZXIgZmFpbGVkICIpOworICAgICAgICAgICAgbWF0Y2hBdWRpdC5hcHBlbmQoIk1hdGNoIGZhaWxlZCBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgY29udHJhY3QgbWFwcGVyIGZhaWxlZCAiKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1hdGNoQXVkaXQuYXBwZW5kKCJNYXRjaCBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgY29udHJhY3QgbWFwcGVyIHN1Y2NlZWRlZCAiKTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgbWF0Y2hBdWRpdC5hcHBlbmRTZXBlcmF0b3IoKTsKKyAgICAgICAgCiAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvd29yay9pbXBsL0RlZmF1bHRXb3JrU2NoZWR1bGVyLmphdmEgYi9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvd29yay9pbXBsL0RlZmF1bHRXb3JrU2NoZWR1bGVyLmphdmEKaW5kZXggMzgwY2E4MS4uZGQ0YWJmMCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL3dvcmsvaW1wbC9EZWZhdWx0V29ya1NjaGVkdWxlci5qYXZhCisrKyBiL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS93b3JrL2ltcGwvRGVmYXVsdFdvcmtTY2hlZHVsZXIuamF2YQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlcjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRBY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuTGlmZUN5Y2xlTGlzdGVuZXI7CkBAIC0yMDEsNCArMjAyLDkgQEAKICAgICAgICAgfQogCiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEV4ZWN1dG9yU2VydmljZSBnZXRFeGVjdXRvclNlcnZpY2UoKSB7CisgICAgICAgIHJldHVybiBnZXRXb3JrTWFuYWdlcigpLmdldEV4ZWN1dG9yU2VydmljZSgpOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS93b3JrL2ltcGwvVGhyZWFkUG9vbFdvcmtNYW5hZ2VyLmphdmEgYi9tb2R1bGVzL2NvcmUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvcmUvd29yay9pbXBsL1RocmVhZFBvb2xXb3JrTWFuYWdlci5qYXZhCmluZGV4IDFjZDcwYzcuLjdlMTE2NjUgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29yZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29yZS93b3JrL2ltcGwvVGhyZWFkUG9vbFdvcmtNYW5hZ2VyLmphdmEKKysrIGIvbW9kdWxlcy9jb3JlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb3JlL3dvcmsvaW1wbC9UaHJlYWRQb29sV29ya01hbmFnZXIuamF2YQpAQCAtNDUsNyArNDUsNyBAQAogICAgIHByaXZhdGUgTWFwPFdvcmtJdGVtLCBXb3JrTGlzdGVuZXI+IHdvcmtJdGVtcyA9IG5ldyBDb25jdXJyZW50SGFzaE1hcDxXb3JrSXRlbSwgV29ya0xpc3RlbmVyPigpOwogCiAgICAgLy8gVGhyZWFkLXBvb2wKLSAgICBwcml2YXRlIEV4ZWN1dG9yU2VydmljZSBleGVjdXRvcjsKKyAgICBwcm90ZWN0ZWQgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yOwogCiAgICAgLyoqCiAgICAgICogSW5pdGlhbGl6ZXMgdGhlIHRocmVhZC1wb29sLgpAQCAtMjI0LDUgKzIyNCw5IEBACiAgICAgICAgIGV4ZWN1dG9yLnNodXRkb3duKCk7CiAgICAgfQogCisgICAgcHVibGljIEV4ZWN1dG9yU2VydmljZSBnZXRFeGVjdXRvclNlcnZpY2UoKSB7CisgICAgICAgIHJldHVybiBleGVjdXRvcjsKKyAgICB9CisKIH0KIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9jb3JlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRG9tYWluUmVnaXN0cnlGYWN0b3J5IGIvbW9kdWxlcy9jb3JlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRG9tYWluUmVnaXN0cnlGYWN0b3J5CmluZGV4IGYyYTZmMGIuLjZhMDFlYWMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvY29yZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkRvbWFpblJlZ2lzdHJ5RmFjdG9yeQorKysgYi9tb2R1bGVzL2NvcmUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5Eb21haW5SZWdpc3RyeUZhY3RvcnkKQEAgLTE0LDQgKzE0LDQgQEAKICMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQogIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQogIyB1bmRlciB0aGUgTGljZW5zZS4NCi1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5Mb2NhbERvbWFpblJlZ2lzdHJ5RmFjdG9yeQ0KK29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5hc3NlbWJseS5pbXBsLkxvY2FsRG9tYWluUmVnaXN0cnlGYWN0b3J5O3Jhbmtpbmc9MTANCmRpZmYgLS1naXQgYS9tb2R1bGVzL2RhdGFiaW5kaW5nLWF4aW9tL3BvbS54bWwgYi9tb2R1bGVzL2RhdGFiaW5kaW5nLWF4aW9tL3BvbS54bWwKaW5kZXggNDgwYjVlZC4uMzFlYjAxOSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9kYXRhYmluZGluZy1heGlvbS9wb20ueG1sCisrKyBiL21vZHVsZXMvZGF0YWJpbmRpbmctYXhpb20vcG9tLnhtbApAQCAtMzEsMjggKzMxLDExIEBACiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlLXNwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YWJpbmRpbmc8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8IS0tCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLnN0cmVhbTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0YXgtYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS4wLTI8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgLS0+Ci0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1zdGF4LWFwaV8xLjBfc3BlYzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC4xPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+ICAKICAgICAgICAgCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS53cy5jb21tb25zLmF4aW9tPC9ncm91cElkPgpAQCAtODYsMjYgKzY5LDcgQEAKICAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KICAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1sb2dnaW5nPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPgotICAgICAgICAgICA8dmVyc2lvbj4xLjEuMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3N0eC1hc2w8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjIuNDwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgICAgIDxleGNsdXNpb25zPgotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPnN0YXg8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0YXgtYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgotICAgICAgICAgICAgPC9leGNsdXNpb25zPgotICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgCiAKICAgICA8L2RlcGVuZGVuY2llcz4KIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9kYXRhYmluZGluZy1qYXhiLWF4aW9tL3BvbS54bWwgYi9tb2R1bGVzL2RhdGFiaW5kaW5nLWpheGItYXhpb20vcG9tLnhtbAppbmRleCBjNWY0YmI3Li4xZGEwNDc1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2RhdGFiaW5kaW5nLWpheGItYXhpb20vcG9tLnhtbAorKysgYi9tb2R1bGVzL2RhdGFiaW5kaW5nLWpheGItYXhpb20vcG9tLnhtbApAQCAtMzEsMTQgKzMxLDEyIEBACiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlLXNwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nLWpheGI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gIAorICAgICAgICAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLmNvbW1vbnMuYXhpb208L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5heGlvbS1hcGk8L2FydGlmYWN0SWQ+CkBAIC03MSwyNiArNjksNiBAQAogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAKLSAgICA8cmVwb3NpdG9yaWVzPgotICAgICAgICA8cmVwb3NpdG9yeT4KLSAgICAgICAgICAgIDxzbmFwc2hvdHM+Ci0gICAgICAgICAgICAgICAgPGVuYWJsZWQ+dHJ1ZTwvZW5hYmxlZD4KLSAgICAgICAgICAgIDwvc25hcHNob3RzPgotICAgICAgICAgICAgPGlkPmphdmEubmV0PC9pZD4KLSAgICAgICAgICAgIDxuYW1lPmphdmEubmV0IE1hdmVuIDEueCBSZXBvc2l0b3J5PC9uYW1lPgotICAgICAgICAgICAgPHVybD5odHRwOi8vZG93bmxvYWQuamF2YS5uZXQvbWF2ZW4vMTwvdXJsPgotICAgICAgICAgICAgPGxheW91dD5sZWdhY3k8L2xheW91dD4KLSAgICAgICAgPC9yZXBvc2l0b3J5PgotICAgIDwvcmVwb3NpdG9yaWVzPgotCi0gICAgPHBsdWdpblJlcG9zaXRvcmllcz4KLSAgICAgICAgPHBsdWdpblJlcG9zaXRvcnk+Ci0gICAgICAgICAgICA8aWQ+amF2YS5uZXQyPC9pZD4KLSAgICAgICAgICAgIDxuYW1lPmphdmEubmV0IE1hdmVuIDIueCBSZXBvc2l0b3J5PC9uYW1lPgotICAgICAgICAgICAgPHVybD5odHRwOi8vZG93bmxvYWQuamF2YS5uZXQvbWF2ZW4vMjwvdXJsPgotICAgICAgICA8L3BsdWdpblJlcG9zaXRvcnk+Ci0gICAgPC9wbHVnaW5SZXBvc2l0b3JpZXM+Ci0KICAgICA8YnVpbGQ+CiAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICAgPHBsdWdpbj4KZGlmZiAtLWdpdCBhL21vZHVsZXMvZGF0YWJpbmRpbmctanNvbi9wb20ueG1sIGIvbW9kdWxlcy9kYXRhYmluZGluZy1qc29uL3BvbS54bWwKaW5kZXggZmU0YzY0Zi4uODk3YmVlNiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9kYXRhYmluZGluZy1qc29uL3BvbS54bWwKKysrIGIvbW9kdWxlcy9kYXRhYmluZGluZy1qc29uL3BvbS54bWwKQEAgLTMxLDM2ICszMSwyNiBAQAogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1zcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmUtcnVudGltZS1wb208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tbW9uLXhtbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gCisKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMuamFja3NvbjwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmphY2tzb24tY29yZS1hc2w8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjUuNDwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLmphY2tzb248L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLW1hcHBlci1hc2w8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjUuNDwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLmphY2tzb248L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYWNrc29uLXhjPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS41LjQ8L3ZlcnNpb24+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjYuMDwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgICAKICAgICAgICAgPGRlcGVuZGVuY3k+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2RhdGFiaW5kaW5nLWpzb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RhdGFiaW5kaW5nL2pzb24vamFja3Nvbi9KU09OMk9iamVjdC5qYXZhIGIvbW9kdWxlcy9kYXRhYmluZGluZy1qc29uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9kYXRhYmluZGluZy9qc29uL2phY2tzb24vSlNPTjJPYmplY3QuamF2YQppbmRleCAzNjIwZmMxLi5jYTI4ZWM1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2RhdGFiaW5kaW5nLWpzb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RhdGFiaW5kaW5nL2pzb24vamFja3Nvbi9KU09OMk9iamVjdC5qYXZhCisrKyBiL21vZHVsZXMvZGF0YWJpbmRpbmctanNvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZGF0YWJpbmRpbmcvanNvbi9qYWNrc29uL0pTT04yT2JqZWN0LmphdmEKQEAgLTYsMTUgKzYsMTUgQEAKICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAorICoKICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKKyAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5qc29uLmphY2tzb247CkBAIC00OSw3ICs0OSwxMiBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgSmF2YVR5cGUgamF2YVR5cGUgPSBUeXBlRmFjdG9yeS50eXBlKGNvbnRleHQuZ2V0VGFyZ2V0RGF0YVR5cGUoKS5nZXRHZW5lcmljVHlwZSgpKTsKICAgICAgICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBTdHJpbmcpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbWFwcGVyLnJlYWRWYWx1ZSgoU3RyaW5nKXNvdXJjZSwgamF2YVR5cGUpOworICAgICAgICAgICAgCVN0cmluZyBzb3VyY2VTdHJpbmcgPSAoU3RyaW5nKSBzb3VyY2U7CisgICAgICAgICAgICAJaWYoc291cmNlU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgCQlyZXR1cm4gc291cmNlU3RyaW5nOworICAgICAgICAgICAgCX0gZWxzZSB7CisgICAgICAgICAgICAJCXJldHVybiBtYXBwZXIucmVhZFZhbHVlKChTdHJpbmcpc291cmNlLCBqYXZhVHlwZSk7CisgICAgICAgICAgICAJfQogICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBKc29uTm9kZSkgewogICAgICAgICAgICAgICAgIHJldHVybiBtYXBwZXIudHJlZVRvVmFsdWUoKEpzb25Ob2RlKXNvdXJjZSwgY29udGV4dC5nZXRUYXJnZXREYXRhVHlwZSgpLmdldFBoeXNpY2FsKCkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBKc29uUGFyc2VyKSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2RhdGFiaW5kaW5nLWpzb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RhdGFiaW5kaW5nL2pzb24vamFja3Nvbi9PYmplY3QySlNPTi5qYXZhIGIvbW9kdWxlcy9kYXRhYmluZGluZy1qc29uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9kYXRhYmluZGluZy9qc29uL2phY2tzb24vT2JqZWN0MkpTT04uamF2YQppbmRleCAwOTQ4MzQxLi5kNTQzZDA1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2RhdGFiaW5kaW5nLWpzb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2RhdGFiaW5kaW5nL2pzb24vamFja3Nvbi9PYmplY3QySlNPTi5qYXZhCisrKyBiL21vZHVsZXMvZGF0YWJpbmRpbmctanNvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZGF0YWJpbmRpbmcvanNvbi9qYWNrc29uL09iamVjdDJKU09OLmphdmEKQEAgLTE5LDYgKzE5LDggQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLmpzb24uamFja3NvbjsKIAoraW1wb3J0IGphdmEubWF0aC5CaWdEZWNpbWFsOworCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5QdWxsVHJhbnNmb3JtZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5UcmFuc2Zvcm1hdGlvbkNvbnRleHQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5UcmFuc2Zvcm1hdGlvbkV4Y2VwdGlvbjsKQEAgLTUzLDkgKzU1LDE2IEBACiAgICAgICAgICAgICB0YXJnZXRUeXBlID0gU3RyaW5nLmNsYXNzOwogICAgICAgICB9CiAgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAodGFyZ2V0VHlwZSAhPSBudWxsICYmIHRhcmdldFR5cGUuaXNQcmltaXRpdmUoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBzb3VyY2U7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBTdHJpbmcgdmFsdWUgPSBtYXBwZXIud3JpdGVWYWx1ZUFzU3RyaW5nKHNvdXJjZSk7Ci0gICAgICAgICAgICBpZiAodGFyZ2V0VHlwZSA9PSBTdHJpbmcuY2xhc3MgfHwgdGFyZ2V0VHlwZSA9PSBPYmplY3QuY2xhc3MpIHsKKyAgICAgICAgICAgIGlmICh0YXJnZXRUeXBlID09IFN0cmluZy5jbGFzcyB8fCAKKyAgICAgICAgICAgICAgICB0YXJnZXRUeXBlID09IE9iamVjdC5jbGFzcyB8fCAKKyAgICAgICAgICAgICAgICB0YXJnZXRUeXBlLmlzUHJpbWl0aXZlKCkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldFR5cGUgPT0gQmlnRGVjaW1hbC5jbGFzcyl7CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKEpzb25Ob2RlLmNsYXNzLmlzQXNzaWduYWJsZUZyb20odGFyZ2V0VHlwZSkpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gSmFja3NvbkhlbHBlci5jcmVhdGVKc29uUGFyc2VyKHZhbHVlKS5yZWFkVmFsdWVBc1RyZWUoKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGIxOGNmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0wLDAgKzEsMzYgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KK1NDQS1WZXJzaW9uOiAxLjENCitCdW5kbGUtTmFtZTogQXBhY2hlIFR1c2NhbnkgU0NBIEhhemVsY2FzdCBCYXNlZCBEb21haW4NCitCdW5kbGUtVmVuZG9yOiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24NCitCdW5kbGUtVmVyc2lvbjogMi4wLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLUxpY2Vuc2U6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC50eHQNCitCdW5kbGUtRGVzY3JpcHRpb246IEFwYWNoZSBUdXNjYW55IERvbWFpbiBIYXplbGNhc3QNCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRvbWFpbi5oYXplbGNhc3QNCitCdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xLjYNCitJbXBvcnQtUGFja2FnZTogY29tLmhhemVsY2FzdC5jb25maWcsDQorIGNvbS5oYXplbGNhc3QuY2xpZW50LA0KKyBjb20uaGF6ZWxjYXN0LmNvcmUsDQorIGNvbS5oYXplbGNhc3QubmlvLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5pbXBsO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3M7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3Mud3NkbGdlbjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29tbW9uLnhtbDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udGV4dDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZTt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGF0YWJpbmRpbmcueG1sO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWY7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlcjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZTt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5vYXNpc29wZW4uc2NhLA0KKyBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLA0KKyBvcmcudzNjLmRvbSwNCisgb3JnLnhtbC5zYXgNCitFeHBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5lbmRwb2ludC5oYXplbGNhc3Q7dmVyc2lvbj0iMi4wLjAiOw0KKyB1c2VzOj0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHksb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlIg0KKw0KZGlmZiAtLWdpdCBhL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9wb20ueG1sIGIvbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY3NTVhMgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9wb20ueG1sCkBAIC0wLDAgKzEsNzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1tb2R1bGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZG9tYWluLWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgRW5kUG9pbnQgUmVnaXN0cnkgdXNpbmcgSGF6ZWxjYXN0PC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uaGF6ZWxjYXN0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+aGF6ZWxjYXN0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS44LjM8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uaGF6ZWxjYXN0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+aGF6ZWxjYXN0LWNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuOC4zPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDwhLS0gIGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb20uaGF6ZWxjYXN0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+aGF6ZWxjYXN0LWFsbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuOTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxleGNsdXNpb25zPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5oYXplbGNhc3Q8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmhhemVsY2FzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uaGF6ZWxjYXN0PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5oYXplbGNhc3QtY2xpZW50PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbS5oYXplbGNhc3Q8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmhhemVsY2FzdC1oaWJlcm5hdGU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CisgICAgICAgIDwvZGVwZW5kZW5jeSAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0VuZHBvaW50U3Rhc2guamF2YSBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvRW5kcG9pbnRTdGFzaC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0VuZHBvaW50U3Rhc2guamF2YQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9FbmRwb2ludFN0YXNoLmphdmEKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvSGF6ZWxjYXN0QmluZGluZy5qYXZhIGIvbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9IYXplbGNhc3RCaW5kaW5nLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvSGF6ZWxjYXN0QmluZGluZy5qYXZhCnJlbmFtZSB0byBtb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0hhemVsY2FzdEJpbmRpbmcuamF2YQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9IYXplbGNhc3RCaW5kaW5nUHJvdmlkZXJGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0hhemVsY2FzdEJpbmRpbmdQcm92aWRlckZhY3RvcnkuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9IYXplbGNhc3RCaW5kaW5nUHJvdmlkZXJGYWN0b3J5LmphdmEKcmVuYW1lIHRvIG1vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvSGF6ZWxjYXN0QmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5qYXZhCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0hhemVsY2FzdFJlZmVyZW5jZUJpbmRpbmdQcm92aWRlci5qYXZhIGIvbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9IYXplbGNhc3RSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9IYXplbGNhc3RSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9IYXplbGNhc3RSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9IYXplbGNhc3RTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0hhemVsY2FzdFNlcnZpY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9IYXplbGNhc3RTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKcmVuYW1lIHRvIG1vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvSGF6ZWxjYXN0U2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L1JlZmVyZW5jZUludm9rZXIuamF2YSBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvUmVmZXJlbmNlSW52b2tlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L1JlZmVyZW5jZUludm9rZXIuamF2YQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9SZWZlcmVuY2VJbnZva2VyLmphdmEKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvU2VydmljZUludm9rZXIuamF2YSBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvU2VydmljZUludm9rZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9TZXJ2aWNlSW52b2tlci5qYXZhCnJlbmFtZSB0byBtb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L1NlcnZpY2VJbnZva2VyLmphdmEKZGlmZiAtLWdpdCBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvSGF6ZWxjYXN0RG9tYWluUmVnaXN0cnlGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9IYXplbGNhc3REb21haW5SZWdpc3RyeUZhY3RvcnkuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9lbmRwb2ludC1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9IYXplbGNhc3REb21haW5SZWdpc3RyeUZhY3RvcnkuamF2YQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvSGF6ZWxjYXN0RG9tYWluUmVnaXN0cnlGYWN0b3J5LmphdmEKZGlmZiAtLWdpdCBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvSGF6ZWxjYXN0RW5kcG9pbnRSZWdpc3RyeS5qYXZhIGIvbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvSGF6ZWxjYXN0RW5kcG9pbnRSZWdpc3RyeS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvaGF6ZWxjYXN0L0hhemVsY2FzdEVuZHBvaW50UmVnaXN0cnkuamF2YQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvSGF6ZWxjYXN0RW5kcG9pbnRSZWdpc3RyeS5qYXZhCmRpZmYgLS1naXQgYS9tb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvaGF6ZWxjYXN0L1JlZ2lzdHJ5Q29uZmlnLmphdmEgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9SZWdpc3RyeUNvbmZpZy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvaGF6ZWxjYXN0L1JlZ2lzdHJ5Q29uZmlnLmphdmEKcmVuYW1lIHRvIG1vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvaGF6ZWxjYXN0L1JlZ2lzdHJ5Q29uZmlnLmphdmEKZGlmZiAtLWdpdCBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvaGF6ZWxjYXN0L2NsaWVudC9IYXplbGNhc3RDbGllbnREb21haW5SZWdpc3RyeUZhY3RvcnkuamF2YSBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvaGF6ZWxjYXN0L2NsaWVudC9IYXplbGNhc3RDbGllbnREb21haW5SZWdpc3RyeUZhY3RvcnkuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9lbmRwb2ludC1oYXplbGNhc3QtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvY2xpZW50L0hhemVsY2FzdENsaWVudERvbWFpblJlZ2lzdHJ5RmFjdG9yeS5qYXZhCnJlbmFtZSB0byBtb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9jbGllbnQvSGF6ZWxjYXN0Q2xpZW50RG9tYWluUmVnaXN0cnlGYWN0b3J5LmphdmEKZGlmZiAtLWdpdCBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0LWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvaGF6ZWxjYXN0L2NsaWVudC9IYXplbGNhc3RDbGllbnRFbmRwb2ludFJlZ2lzdHJ5LmphdmEgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9jbGllbnQvSGF6ZWxjYXN0Q2xpZW50RW5kcG9pbnRSZWdpc3RyeS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9jbGllbnQvSGF6ZWxjYXN0Q2xpZW50RW5kcG9pbnRSZWdpc3RyeS5qYXZhCnJlbmFtZSB0byBtb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9jbGllbnQvSGF6ZWxjYXN0Q2xpZW50RW5kcG9pbnRSZWdpc3RyeS5qYXZhCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeSBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CaW5kaW5nUHJvdmlkZXJGYWN0b3J5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkRvbWFpblJlZ2lzdHJ5RmFjdG9yeSBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkRvbWFpblJlZ2lzdHJ5RmFjdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGZhY2YxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRG9tYWluUmVnaXN0cnlGYWN0b3J5CkBAIC0wLDAgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMNCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIw0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4NCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmVuZHBvaW50LmhhemVsY2FzdC5IYXplbGNhc3REb21haW5SZWdpc3RyeUZhY3Rvcnk7cmFua2luZz0xMDANCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmVuZHBvaW50LmhhemVsY2FzdC5jbGllbnQuSGF6ZWxjYXN0Q2xpZW50RG9tYWluUmVnaXN0cnlGYWN0b3J5O3Jhbmtpbmc9MTAwDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9CYWRTdHJpbmdFeGNlcHRpb24uamF2YSBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvQmFkU3RyaW5nRXhjZXB0aW9uLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvQmFkU3RyaW5nRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIG1vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvQmFkU3RyaW5nRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvQ29tcGxleFR5cGUuamF2YSBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvQ29tcGxleFR5cGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9Db21wbGV4VHlwZS5qYXZhCnJlbmFtZSB0byBtb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0NvbXBsZXhUeXBlLmphdmEKZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvSGF6ZWxjYXN0QmluZGluZ1Rlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0hhemVsY2FzdEJpbmRpbmdUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0hhemVsY2FzdEJpbmRpbmdUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byBtb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L0hhemVsY2FzdEJpbmRpbmdUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L1Rlc3RTZXJ2aWNlLmphdmEgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L1Rlc3RTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvVGVzdFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9UZXN0U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L1Rlc3RTZXJ2aWNlQ2xpZW50LmphdmEgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L1Rlc3RTZXJ2aWNlQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9oYXplbGNhc3QvVGVzdFNlcnZpY2VDbGllbnQuamF2YQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9UZXN0U2VydmljZUNsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvaGF6ZWxjYXN0L1Rlc3RTZXJ2aWNlSW1wbC5qYXZhIGIvbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9UZXN0U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9UZXN0U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2hhemVsY2FzdC9UZXN0U2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9lbmRwb2ludC1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9NdWx0aVJlZ1Rlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9NdWx0aVJlZ1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvTXVsdGlSZWdUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byBtb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L2hhemVsY2FzdC9NdWx0aVJlZ1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvUmVnaXN0cnlUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvUmVnaXN0cnlUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvaGF6ZWxjYXN0L1JlZ2lzdHJ5VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC9oYXplbGNhc3QvUmVnaXN0cnlUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL2NsaWVudC5jb21wb3NpdGUgYi9tb2R1bGVzL2RvbWFpbi1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL2NsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvY2xpZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9jbGllbnQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctaGF6ZWxjYXN0LXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL2NsaWVudDIuY29tcG9zaXRlIGIvbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9jbGllbnQyLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9jbGllbnQyLmNvbXBvc2l0ZQpyZW5hbWUgdG8gbW9kdWxlcy9kb21haW4taGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9jbGllbnQyLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9zZXJ2aWNlLmNvbXBvc2l0ZSBiL21vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvc2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvYmluZGluZy1oYXplbGNhc3QtcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvc2VydmljZS5jb21wb3NpdGUKcmVuYW1lIHRvIG1vZHVsZXMvZG9tYWluLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvc2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvZG9tYWluLW5vZGUvcG9tLnhtbCBiL21vZHVsZXMvZG9tYWluLW5vZGUvcG9tLnhtbAppbmRleCA0OWI4Y2U4Li5jNDU2ZWViIDEwMDY0NAotLS0gYS9tb2R1bGVzL2RvbWFpbi1ub2RlL3BvbS54bWwKKysrIGIvbW9kdWxlcy9kb21haW4tbm9kZS9wb20ueG1sCkBAIC01Niw2ICs1NiwyMCBAQAogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+ICAKICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gIAorICAgICAgICAKKyAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy13c2RsZ2VuPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgCisKICAgICA8L2RlcGVuZGVuY2llcz4KIAogPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvTm9kZS5qYXZhIGIvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvTm9kZS5qYXZhCmluZGV4IDRiNjBlZDAuLjljZjBlOTAgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvZG9tYWluLW5vZGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUyL05vZGUuamF2YQorKysgYi9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlMi9Ob2RlLmphdmEKQEAgLTQ2LDEyICs0NiwxMyBAQAogICAgICAqICAgICAgICAgICAgICAgcm9vdCBjb250cmlidXRpb24gYW5kIG90aGVyIGRlcGVuZGVudCBjb250cmlidXRpb25zLiBNYXkgYmUgbnVsbC4KICAgICAgKiBAcGFyYW0gcnVuRGVwbG95YWJsZXMgIHRydWUgaWYgdGhlIGNvbXBvc2l0ZXMgZGVmaW5lZCBhcyBkZXBsb3lhYmxlIGluIHRoZSBjb250cmlidXRpb25zIHNjYS1jb250cmlidXRpb24ueG1sCiAgICAgICogICAgICAgICAgICAgICBmaWxlIG9yIHN1cHBsaWVkIG1ldGFEYXRhIGZpbGUgc2hvdWxkIGJlIHJ1biwgZmFsc2UgaWYgdGhleSBzaG91bGQgbm90IGJlLiAKKyAgICAgKiBAcmV0dXJuIHRoZSBVUkkgb2YgdGhlIGluc3RhbGxlZCBjb250cmlidXRpb24KICAgICAgKiAKICAgICAgKiBAdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24gCiAgICAgICogQHRocm93cyBBY3RpdmF0aW9uRXhjZXB0aW9uIAogICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkV4Y2VwdGlvbiAKICAgICAgKi8KLSAgICB2b2lkIGluc3RhbGxDb250cmlidXRpb24oU3RyaW5nIHVyaSwgU3RyaW5nIGNvbnRyaWJ1dGlvblVSTCwgU3RyaW5nIG1ldGFEYXRhVVJMLCBMaXN0PFN0cmluZz4gZGVwZW5kZW50Q29udHJpYnV0aW9uVVJJcywgYm9vbGVhbiBydW5EZXBsb3lhYmxlcykgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb247CisgICAgU3RyaW5nIGluc3RhbGxDb250cmlidXRpb24oU3RyaW5nIHVyaSwgU3RyaW5nIGNvbnRyaWJ1dGlvblVSTCwgU3RyaW5nIG1ldGFEYXRhVVJMLCBMaXN0PFN0cmluZz4gZGVwZW5kZW50Q29udHJpYnV0aW9uVVJJcywgYm9vbGVhbiBydW5EZXBsb3lhYmxlcykgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb247CiAKICAgICAvKioKICAgICAgKiBDcmVhdGVzIGFuIGluc3RhbGxlZCBjb250cmlidXRpb24gZnJvbSBhIHN1cHBsaWVkIENvbnRyaWJ1dGlvbiBvYmplY3QuCkBAIC02MiwxOSArNjMsMjEgQEAKICAgICAgKiAgICAgICAgICAgICAgIHJvb3QgY29udHJpYnV0aW9uIGFuZCBvdGhlciBkZXBlbmRlbnQgY29udHJpYnV0aW9ucy4gTWF5IGJlIG51bGwuCiAgICAgICogQHBhcmFtIHJ1bkRlcGxveWFibGVzICB0cnVlIGlmIHRoZSBjb21wb3NpdGVzIGRlZmluZWQgYXMgZGVwbG95YWJsZSBpbiB0aGUgY29udHJpYnV0aW9ucyBzY2EtY29udHJpYnV0aW9uLnhtbAogICAgICAqICAgICAgICAgICAgICAgZmlsZSBvciBzdXBwbGllZCBtZXRhRGF0YSBmaWxlIHNob3VsZCBiZSBydW4sIGZhbHNlIGlmIHRoZXkgc2hvdWxkIG5vdCBiZS4gCisgICAgICogQHJldHVybiB0aGUgVVJJIG9mIHRoZSBpbnN0YWxsZWQgY29udHJpYnV0aW9uCiAgICAgICogCiAgICAgICogQHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIAogICAgICAqIEB0aHJvd3MgQWN0aXZhdGlvbkV4Y2VwdGlvbiAKICAgICAgKiBAdGhyb3dzIFZhbGlkYXRpb25FeGNlcHRpb24gCiAgICAgICovCi0gICAgdm9pZCBpbnN0YWxsQ29udHJpYnV0aW9uKENvbnRyaWJ1dGlvbiBjb250cmlidXRpb24sIExpc3Q8U3RyaW5nPiBkZXBlbmRlbnRDb250cmlidXRpb25VUklzLCBib29sZWFuIHJ1bkRlcGxveWFibGVzKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiwgQWN0aXZhdGlvbkV4Y2VwdGlvbiwgVmFsaWRhdGlvbkV4Y2VwdGlvbjsKKyAgICBTdHJpbmcgaW5zdGFsbENvbnRyaWJ1dGlvbihDb250cmlidXRpb24gY29udHJpYnV0aW9uLCBMaXN0PFN0cmluZz4gZGVwZW5kZW50Q29udHJpYnV0aW9uVVJJcywgYm9vbGVhbiBydW5EZXBsb3lhYmxlcykgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb247CiAKICAgICAvKioKLSAgICAgKiBDcmVhdGVzIGFuIGluc3RhbGxlZCBjb250cmlidXRpb24gZnJvbSBhIHN1cHBsaWVkIHJvb3QgY29udHJpYnV0aW9uLgotICAgICAqIFNlZSBzZWN0aW9uIDEwLjUuMSBvZiB0aGUgQXNzZW1ibHkgU3BlY2lmaWNhdGlvbi4KKyAgICAgKiBDcmVhdGVzIGFuIGluc3RhbGxlZCBjb250cmlidXRpb24gZnJvbSBhIHN1cHBsaWVkIHJvb3QgY29udHJpYnV0aW9uIFVSTC4KKyAgICAgKiBTZWUgc2VjdGlvbiAxMC41LjEgb2YgdGhlIEFzc2VtYmx5IFNwZWNpZmljYXRpb24uIFRoaXMgdmVyc2lvbiBvZiAKKyAgICAgKiBpbnN0YWxsQ29udHJpYnV0aW9uIGF1dG9tYXRpY2FsbHkgcnVucyBkZXBsb3lhYmxlIGNvbXBvc2l0ZXMKICAgICAgKiAKICAgICAgKiBAcGFyYW0gY29udHJpYnV0aW9uVVJMICB0aGUgVVJMIHdoZXJlIHRoZSBjb250cmlidXRpb24gaXMgbG9jYXRlZAotICAgICAqIEByZXR1cm4gdGhlIFVSSSB3aGVyZSB0aGUgY29udHJpYnV0aW9uIHdhcyBpbnN0YWxsZWQKKyAgICAgKiBAcmV0dXJuIHRoZSBVUkkgb2YgdGhlIGluc3RhbGxlZCBjb250cmlidXRpb24KICAgICAgKiAKICAgICAgKiBAdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24gCiAgICAgICogQHRocm93cyBBY3RpdmF0aW9uRXhjZXB0aW9uIApAQCAtMTc5LDIxICsxODIsMjMgQEAKICAgICAgKiA0Njg1IHNlcnZpY2VzIGFuZCByZWZlcmVuY2VzIGluIHRoZSBzdXBwbGllZCBjb21wb3NpdGUgaXMgbm90IGRlZmluZWQ7IHNpbmNlIHRoZXJlIGlzIG5vIGNvbXBvc2l0ZSBzY29wZQogICAgICAqIDQ2ODYgb3V0c2lkZSB0aGUgZG9tYWluIGNvbXBvc2l0ZSwgdGhlIHVzdWFsIGlkZWEgb2YgcHJvbW90aW9uIGhhcyBubyB1dGlsaXR5LgogICAgICAqICAKKyAgICAgKiBAcGFyYW0gY290cmlidXRpb25VUkkKICAgICAgKiBAcGFyYW0gY29tcG9zaXRlVVJJCiAgICAgICogQHRocm93cyBBY3RpdmF0aW9uRXhjZXB0aW9uIAogICAgICAqIEB0aHJvd3MgVmFsaWRhdGlvbkV4Y2VwdGlvbiAKICAgICAgKi8KLSAgICB2b2lkIGFkZFRvRG9tYWluTGV2ZWxDb21wb3NpdGUoU3RyaW5nIGNvbXBvc2l0ZVVSSSkgdGhyb3dzIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb247CisgICAgdm9pZCBhZGRUb0RvbWFpbkxldmVsQ29tcG9zaXRlKFN0cmluZyBjb250cmlidXRpb25VUkksIFN0cmluZyBjb21wb3NpdGVVUkkpIHRocm93cyBBY3RpdmF0aW9uRXhjZXB0aW9uLCBWYWxpZGF0aW9uRXhjZXB0aW9uOwogICAgIAogICAgIC8qKgogICAgICAqIDQ2ODcgMTAuNy4yIHJlbW92ZSBGcm9tIERvbWFpbi1MZXZlbCBDb21wb3NpdGUKICAgICAgKiA0Njg4IFJlbW92ZXMgZnJvbSB0aGUgRG9tYWluIExldmVsIGNvbXBvc2l0ZSB0aGUgZWxlbWVudHMgY29ycmVzcG9uZGluZyB0byB0aGUgY29tcG9zaXRlIGlkZW50aWZpZWQgYnkgYQogICAgICAqIDQ2ODkgc3VwcGxpZWQgY29tcG9zaXRlIFVSSS4gVGhpcyBtZWFucyB0aGF0IHRoZSByZW1vdmFsIG9mIHRoZSBjb21wb25lbnRzLCB3aXJlcywgc2VydmljZXMgYW5kIHJlZmVyZW5jZXMKICAgICAgKiA0NjkwIG9yaWdpbmFsbHkgYWRkZWQgdG8gdGhlIGRvbWFpbiBsZXZlbCBjb21wb3NpdGUgYnkgdGhlIGlkZW50aWZpZWQgY29tcG9zaXRlLiAgICAgKiAKKyAgICAgKiBAcGFyYW0gY29udHJpYnV0aW9uVVJJCiAgICAgICogQHBhcmFtIGNvbXBvc2l0ZVVSSQogICAgICAqIEB0aHJvd3MgQWN0aXZhdGlvbkV4Y2VwdGlvbiAKICAgICAgKi8KLSAgICB2b2lkIHJlbW92ZUZyb21Eb21haW5MZXZlbENvbXBvc2l0ZShTdHJpbmcgY29tcG9zaXRlVVJJKSB0aHJvd3MgQWN0aXZhdGlvbkV4Y2VwdGlvbjsKKyAgICB2b2lkIHJlbW92ZUZyb21Eb21haW5MZXZlbENvbXBvc2l0ZShTdHJpbmcgY29udHJpYnV0aW9uVVJJLCBTdHJpbmcgY29tcG9zaXRlVVJJKSB0aHJvd3MgQWN0aXZhdGlvbkV4Y2VwdGlvbjsKIAogICAgIC8qKgogICAgICAqIDEwLjcuMyBnZXQgRG9tYWluLUxldmVsIENvbXBvc2l0ZQpAQCAtMjQwLDcgKzI0NSw3IEBACiAgICAgICogQHBhcmFtIGNvbnRyaWJ1dGlvblVSSSAgdGhlIGNvbnRyaWJ1dGlvbiBVUkkKICAgICAgKiBAcmV0dXJuIHRoZSBMaXN0IG9mIGRlcGxveWVkIGNvbXBvc2l0ZXMKICAgICAgKi8KLSAgICBMaXN0PFN0cmluZz4gZ2V0RGVwbG95ZWRDb21wb3N0ZXMoU3RyaW5nIGNvbnRyaWJ1dGlvblVSSSk7CisgICAgTGlzdDxTdHJpbmc+IGdldERlcGxveWVkQ29tcG9zaXRlcyhTdHJpbmcgY29udHJpYnV0aW9uVVJJKTsKIAogICAgIC8qKgogICAgICAqIEdldCB0aGUgVVJJcyBvZiBhbGwgdGhlIGNvbnRyaWJ1dGlvbnMgaW5zdGFsbGVkIG9uIHRoaXMgTm9kZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvTm9kZUZhY3RvcnkuamF2YSBiL21vZHVsZXMvZG9tYWluLW5vZGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUyL05vZGVGYWN0b3J5LmphdmEKaW5kZXggY2FmYTc3Mi4uYzdiOGRiMiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvTm9kZUZhY3RvcnkuamF2YQorKysgYi9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlMi9Ob2RlRmFjdG9yeS5qYXZhCkBAIC0xOSwyMiArMTksMzUgQEAKIAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUyOwogCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS5uZXQuVVJMOwogaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Bc3NlbWJseUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24uamF2YS5pby5JT0hlbHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuUHJvY2Vzc29yQ29udGV4dDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRGVmYXVsdEV4dGVuc2lvblBvaW50UmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkZhY3RvcnlFeHRlbnNpb25Qb2ludDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuTW9kdWxlQWN0aXZhdG9yRXh0ZW5zaW9uUG9pbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLlV0aWxpdHlFeHRlbnNpb25Qb2ludDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuUnVudGltZUFzc2VtYmx5RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5FbmRwb2ludFJlZ2lzdHJ5SW1wbDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlcGxveW1lbnQuRGVwbG95ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlZhbGlkYXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmNvbmZpZ3VyYXRpb24uQ29udHJpYnV0aW9uQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuY29uZmlndXJhdGlvbi5Ob2RlQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUyLmltcGwuTm9kZUltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkFjdGl2YXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkNvbXBvc2l0ZUFjdGl2YXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRW5kcG9pbnRSZWdpc3RyeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRXh0ZW5zaWJsZURvbWFpblJlZ2lzdHJ5RmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZVByb3BlcnRpZXM7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS53b3JrLldvcmtTY2hlZHVsZXI7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb247CiAKIHB1YmxpYyBjbGFzcyBOb2RlRmFjdG9yeSB7CiAKQEAgLTQ0LDM3ICs1NywzNiBAQAogICAgIHByaXZhdGUgRXh0ZW5zaWJsZURvbWFpblJlZ2lzdHJ5RmFjdG9yeSBkb21haW5SZWdpc3RyeUZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBSdW50aW1lQXNzZW1ibHlGYWN0b3J5IGFzc2VtYmx5RmFjdG9yeTsKIAorICAgIHB1YmxpYyBzdGF0aWMgTm9kZUZhY3RvcnkgbmV3SW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBuZXcgTm9kZUZhY3RvcnkobnVsbCk7CisgICAgfQorICAgIHB1YmxpYyBzdGF0aWMgTm9kZUZhY3RvcnkgbmV3SW5zdGFuY2UoUHJvcGVydGllcyBjb25maWcpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBOb2RlRmFjdG9yeShjb25maWcpOworICAgIH0KKwogICAgIC8qKgotICAgICAqIEEgaGVscGVyIG1ldGhvZCB0byBzaW1wbGlmeSBjcmVhdGluZyBhIE5vZGUgd2l0aCBhbiBpbnN0YWxsZWQgY29udHJpYnV0aW9ucwotICAgICAqIEBwYXJhbSBjb21wb3NpdGVVUkkgIFVSSSBvZiBhIGNvbXBvc2l0ZSB0byBydW4gcmVsYXRpdmUgdG8gdGhlIGZpcnN0IGNvbnRyaWJ1dGlvbgotICAgICAqICAgICAgICAgaWYgY29tcG9zaXRlVVJJIGlzIG51bGwgdGhlbiBhbGwgZGVwbG95YWJsZSBjb21wb3NpdGVzIGluIHRoZSBmaXJzdCBjb250cmlidXRpb24gd2lsbCBiZSBydW4gCi0gICAgICogQHBhcmFtIGNvbnRyaWJ1dGlvblVSTHMgIFVSTHMgdG8gY29udHJpYnV0aW9ucyB0byBpbnN0YWxsCisgICAgICogQSBoZWxwZXIgbWV0aG9kIHRvIHNpbXBsaWZ5IGNyZWF0aW5nIGEgc3RhbmRhbG9uZSBOb2RlIAorICAgICAqIEBwYXJhbSBjb21wb3NpdGVVUkkgIFVSSSB3aXRoaW4gdGhlIGNvbnRyaWJ1dGlvbiBvZiBhIGNvbXBvc2l0ZSB0byBydW4gCisgICAgICogICAgICAgICBpZiBjb21wb3NpdGVVUkkgaXMgbnVsbCB0aGVuIGFsbCBkZXBsb3lhYmxlIGNvbXBvc2l0ZXMgaW4gdGhlIGNvbnRyaWJ1dGlvbiB3aWxsIGJlIHJ1biAKKyAgICAgKiBAcGFyYW0gY29udHJpYnV0aW9uVVJMICBVUkwgb2YgdGhlIGNvbnRyaWJ1dGlvbgorICAgICAqIEBwYXJhbSBkZXBlbmRlbnRDb250cmlidXRpb25VUkxzICBvcHRpb25hbCBVUkxzIG9mIGRlcGVuZGVudCBjb250cmlidXRpb25zCiAgICAgICogQHJldHVybiBhIE5vZGUgd2l0aCBpbnN0YWxsZWQgY29udHJpYnV0aW9ucwogICAgICAqLwotICAgIHB1YmxpYyBzdGF0aWMgTm9kZSBjcmVhdGVOb2RlKFN0cmluZyBjb21wb3NpdGVVUkksIFN0cmluZy4uLiBjb250cmlidXRpb25VUkxzKSB7CisgICAgcHVibGljIHN0YXRpYyBOb2RlIG5ld1N0YW5kYWxvbmVOb2RlKFN0cmluZyBjb21wb3NpdGVVUkksIFN0cmluZyBjb250cmlidXRpb25VUkwsIFN0cmluZy4uLiBkZXBlbmRlbnRDb250cmlidXRpb25VUkxzKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIE5vZGUgbm9kZSA9IG5ld0luc3RhbmNlKCkuY3JlYXRlT25lb2ZmTm9kZSgpOwotICAgICAgICAgICAgU3RyaW5nIHVyaSA9ICIiOwotICAgICAgICAgICAgZm9yIChpbnQgaT1jb250cmlidXRpb25VUkxzLmxlbmd0aC0xOyBpPi0xOyBpLS0pIHsKLSAgICAgICAgICAgICAgICBib29sZWFuIHJ1bkRlcGxveWFibGVzID0gKGk9PTApICYmIChjb21wb3NpdGVVUkkgPT0gbnVsbCk7Ci0gICAgICAgICAgICAgICAgaW50IGxhc3REb3QgPSBjb250cmlidXRpb25VUkxzW2ldLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICAgICAgICAgICAgaW50IGxhc3RTZXAgPSBjb250cmlidXRpb25VUkxzW2ldLmxhc3RJbmRleE9mKCIvIik7Ci0gICAgICAgICAgICAgICAgaWYgKGxhc3REb3QgPiAtMSAmJiBsYXN0U2VwID4gLTEgJiYgbGFzdERvdCA+IGxhc3RTZXApIHsKLSAgICAgICAgICAgICAgICAgICAgdXJpID0gY29udHJpYnV0aW9uVVJMc1tpXS5zdWJzdHJpbmcobGFzdFNlcCsxLCBsYXN0RG90KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICB1cmkgPSBjb250cmlidXRpb25VUkxzW2ldOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE5vZGVGYWN0b3J5IG5vZGVGYWN0b3J5ID0gbmV3SW5zdGFuY2UoKTsKKyAgICAgICAgICAgIEVuZHBvaW50UmVnaXN0cnkgZW5kcG9pbnRSZWdpc3RyeSA9IG5ldyBFbmRwb2ludFJlZ2lzdHJ5SW1wbChub2RlRmFjdG9yeS5leHRlbnNpb25Qb2ludFJlZ2lzdHJ5LCBudWxsLCBudWxsKTsKKyAgICAgICAgICAgIE5vZGVJbXBsIG5vZGUgPSBuZXcgTm9kZUltcGwoImRlZmF1bHQiLCBub2RlRmFjdG9yeS5kZXBsb3llciwgbm9kZUZhY3RvcnkuY29tcG9zaXRlQWN0aXZhdG9yLCBlbmRwb2ludFJlZ2lzdHJ5LCBub2RlRmFjdG9yeS5leHRlbnNpb25Qb2ludFJlZ2lzdHJ5LCBub2RlRmFjdG9yeSk7CiAKLSAgICAgICAgICAgICAgICBub2RlLmluc3RhbGxDb250cmlidXRpb24odXJpLCBjb250cmlidXRpb25VUkxzW2ldLCBudWxsLCBudWxsLCBydW5EZXBsb3lhYmxlcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY29tcG9zaXRlVVJJICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBpZiAodXJpLmVuZHNXaXRoKCIvIikpIHsKLSAgICAgICAgICAgICAgICAgICAgdXJpID0gdXJpICsgY29tcG9zaXRlVVJJOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHVyaSA9IHVyaSArICIvIiArIGNvbXBvc2l0ZVVSSTsKKyAgICAgICAgICAgIGlmIChkZXBlbmRlbnRDb250cmlidXRpb25VUkxzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpPWRlcGVuZGVudENvbnRyaWJ1dGlvblVSTHMubGVuZ3RoLTE7IGk+LTE7IGktLSkgeworICAgICAgICAgICAgICAgICAgICBub2RlLmluc3RhbGxDb250cmlidXRpb24obnVsbCwgZGVwZW5kZW50Q29udHJpYnV0aW9uVVJMc1tpXSwgbnVsbCwgbnVsbCwgZmFsc2UpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBub2RlLmFkZFRvRG9tYWluTGV2ZWxDb21wb3NpdGUodXJpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RyaW5nIGN1cmkgPSBub2RlLmluc3RhbGxDb250cmlidXRpb24obnVsbCwgY29udHJpYnV0aW9uVVJMLCBudWxsLCBudWxsLCBjb21wb3NpdGVVUkkgPT0gbnVsbCk7CisgICAgICAgICAgICBpZiAoY29tcG9zaXRlVVJJICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBub2RlLmFkZFRvRG9tYWluTGV2ZWxDb21wb3NpdGUoY3VyaSwgY29tcG9zaXRlVVJJKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgICAgICAgCkBAIC04MywyNiArOTUsMzAgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgTm9kZUZhY3RvcnkgbmV3SW5zdGFuY2UoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgTm9kZUZhY3RvcnkobnVsbCk7Ci0gICAgfQotICAgIHB1YmxpYyBzdGF0aWMgTm9kZUZhY3RvcnkgbmV3SW5zdGFuY2UoUHJvcGVydGllcyBjb25maWcpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBOb2RlRmFjdG9yeShjb25maWcpOwotICAgIH0KLQogICAgIHByb3RlY3RlZCBOb2RlRmFjdG9yeShQcm9wZXJ0aWVzIGNvbmZpZykgewogICAgICAgICBpbml0KGNvbmZpZyk7CiAgICAgfQorICAgIAorICAgIHB1YmxpYyBOb2RlIGNyZWF0ZU5vZGUoKSB7CisgICAgICAgIHJldHVybiBjcmVhdGVOb2RlKG51bGwpOworICAgIH0KIAogICAgIHB1YmxpYyBOb2RlIGNyZWF0ZU5vZGUoU3RyaW5nIGRvbWFpblVSSSkgewotICAgICAgICBTdHJpbmcgZG9tYWluTmFtZSA9IGdldERvbWFpbk5hbWUoZG9tYWluVVJJKTsKKyAgICAgICAgU3RyaW5nIGRvbWFpbk5hbWUgPSAiZGVmYXVsdCI7CisgICAgICAgIGlmIChkb21haW5VUkkgIT0gbnVsbCl7CisgICAgICAgICAgICBkb21haW5OYW1lID0gZ2V0RG9tYWluTmFtZShkb21haW5VUkkpOworICAgICAgICB9CiAgICAgICAgIEVuZHBvaW50UmVnaXN0cnkgZW5kcG9pbnRSZWdpc3RyeSA9IGRvbWFpblJlZ2lzdHJ5RmFjdG9yeS5nZXRFbmRwb2ludFJlZ2lzdHJ5KGRvbWFpblVSSSwgZG9tYWluTmFtZSk7CiAgICAgICAgIHJldHVybiBuZXcgTm9kZUltcGwoZG9tYWluTmFtZSwgZGVwbG95ZXIsIGNvbXBvc2l0ZUFjdGl2YXRvciwgZW5kcG9pbnRSZWdpc3RyeSwgZXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSwgbnVsbCk7CiAgICAgfQogCi0gICAgcHJvdGVjdGVkIE5vZGUgY3JlYXRlT25lb2ZmTm9kZSgpIHsKLSAgICAgICAgRW5kcG9pbnRSZWdpc3RyeSBlbmRwb2ludFJlZ2lzdHJ5ID0gZG9tYWluUmVnaXN0cnlGYWN0b3J5LmdldEVuZHBvaW50UmVnaXN0cnkoImRlZmF1bHQiLCAiZGVmYXVsdCIpOwotICAgICAgICByZXR1cm4gbmV3IE5vZGVJbXBsKCJkZWZhdWx0IiwgZGVwbG95ZXIsIGNvbXBvc2l0ZUFjdGl2YXRvciwgZW5kcG9pbnRSZWdpc3RyeSwgZXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSwgdGhpcyk7CisgICAgcHVibGljIE5vZGUgY3JlYXRlTm9kZUZyb21YTUwoU3RyaW5nIGNvbmZpZ1VSTCkgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb24geworICAgICAgICBOb2RlQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbG9hZENvbmZpZ3VyYXRpb24oY29uZmlnVVJMKTsKKyAgICAgICAgTm9kZSBub2RlID0gY3JlYXRlTm9kZShjb25maWd1cmF0aW9uLmdldERvbWFpblVSSSgpKTsKKyAgICAgICAgZm9yICggQ29udHJpYnV0aW9uQ29uZmlndXJhdGlvbiBjIDogY29uZmlndXJhdGlvbi5nZXRDb250cmlidXRpb25zKCkpIHsKKyAgICAgICAgICAgIG5vZGUuaW5zdGFsbENvbnRyaWJ1dGlvbihjLmdldFVSSSgpLCBjLmdldExvY2F0aW9uKCksIGMuZ2V0TWV0YURhdGFVUkwoKSwgYy5nZXREZXBlbmRlbnRDb250cmlidXRpb25VUklzKCksIGMuaXNTdGFydERlcGxveWFibGVzKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7CkBAIC0xNjMsNCArMTc5LDM3IEBACiAgICAgICAgICAgICByZXR1cm4gZG9tYWluVVJJLnN1YnN0cmluZyhzY2hlbWUrMSwgcW0pOwogICAgICAgICB9CiAgICAgfQorCisgICAgcHJvdGVjdGVkIE5vZGVDb25maWd1cmF0aW9uIGxvYWRDb25maWd1cmF0aW9uKFN0cmluZyBjb25maWdVUkwpIHsKKyAgICAgICAgSW5wdXRTdHJlYW0geG1sID1udWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgVVJMIGJhc2UgPSBJT0hlbHBlci5nZXRMb2NhdGlvbkFzVVJMKGNvbmZpZ1VSTCk7CisgICAgICAgICAgICB4bWwgPSBJT0hlbHBlci5vcGVuU3RyZWFtKGJhc2UpOworICAgICAgICAgICAgSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKHhtbCwgIlVURi04Iik7CisgICAgICAgICAgICBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQgPSBkZXBsb3llci5jcmVhdGVQcm9jZXNzb3JDb250ZXh0KCk7CisgICAgICAgICAgICBOb2RlQ29uZmlndXJhdGlvbiBjb25maWcgPSBkZXBsb3llci5sb2FkWE1MRG9jdW1lbnQocmVhZGVyLCBjb250ZXh0LmdldE1vbml0b3IoKSk7CisgICAgICAgICAgICBpZiAoYmFzZSAhPSBudWxsICYmIGNvbmZpZyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgY29udHJpYnV0aW9uIGxvY2F0aW9uIGFnYWluc3QgdGhlIG5vZGUueG1sCisgICAgICAgICAgICAgICAgLy8gVE9ETzogYWJzb2x1dGUgbG9jYXRpb25zPworICAgICAgICAgICAgICAgIGZvciAoQ29udHJpYnV0aW9uQ29uZmlndXJhdGlvbiBjIDogY29uZmlnLmdldENvbnRyaWJ1dGlvbnMoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBjLmdldExvY2F0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBVUkwgdXJsID0gbmV3IFVSTChiYXNlLCBsb2NhdGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmwgPSBJT0hlbHBlci5ub3JtYWxpemUodXJsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMuc2V0TG9jYXRpb24odXJsLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGNvbmZpZzsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKHhtbCAhPSBudWxsKSB4bWwuY2xvc2UoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvZG9tYWluLW5vZGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUyL2ltcGwvRGVwbG95ZWRDb21wb3NpdGUuamF2YSBiL21vZHVsZXMvZG9tYWluLW5vZGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUyL2ltcGwvRGVwbG95ZWRDb21wb3NpdGUuamF2YQppbmRleCA5OGM5MGQ1Li42ZTMxZjI4IDEwMDY0NAotLS0gYS9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlMi9pbXBsL0RlcGxveWVkQ29tcG9zaXRlLmphdmEKKysrIGIvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvaW1wbC9EZXBsb3llZENvbXBvc2l0ZS5qYXZhCkBAIC0xMDIsOCArMTAyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIC8vIGRvbid0IG5lZWQgbm9kZSB1cmkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxveWVyLmdldFN5c3RlbURlZmluaXRpb25zKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgQ29tcG9zaXRlQ29udGV4dC5zZXRUaHJlYWRDb21wb3NpdGVDb250ZXh0KGNvbXBvc2l0ZUNvbnRleHQpOyAvLyBUT0RPOiB3aGF0IGlzIHRoaXMgZG9pbmc/Ci0KICAgICAgICAgY29tcG9zaXRlQWN0aXZhdG9yLmFjdGl2YXRlKGNvbXBvc2l0ZUNvbnRleHQsIGRvbWFpbkNvbXBvc2l0ZSk7CiAgICAgICAgIGNvbXBvc2l0ZUFjdGl2YXRvci5zdGFydChjb21wb3NpdGVDb250ZXh0LCBkb21haW5Db21wb3NpdGUpOwogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlMi9pbXBsL05vZGVJbXBsLmphdmEgYi9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlMi9pbXBsL05vZGVJbXBsLmphdmEKaW5kZXggNDBlYTU4Ny4uZjJkYzNiYyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvaW1wbC9Ob2RlSW1wbC5qYXZhCisrKyBiL21vZHVsZXMvZG9tYWluLW5vZGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUyL2ltcGwvTm9kZUltcGwuamF2YQpAQCAtMTksNiArMTksNyBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZTIuaW1wbDsKIAoraW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLlJlYWRlcjsKIGltcG9ydCBqYXZhLm5ldC5VUkk7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKQEAgLTcwLDE5ICs3MSwxMyBAQAogICAgIH0KIAogICAgIHB1YmxpYyBTdHJpbmcgaW5zdGFsbENvbnRyaWJ1dGlvbihTdHJpbmcgY29udHJpYnV0aW9uVVJMKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiwgQWN0aXZhdGlvbkV4Y2VwdGlvbiwgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIGludCBsYXN0RG90ID0gY29udHJpYnV0aW9uVVJMLmxhc3RJbmRleE9mKCcuJyk7Ci0gICAgICAgIGludCBsYXN0U2VwID0gY29udHJpYnV0aW9uVVJMLmxhc3RJbmRleE9mKCIvIik7Ci0gICAgICAgIFN0cmluZyB1cmk7Ci0gICAgICAgIGlmIChsYXN0RG90ID4gLTEgJiYgbGFzdFNlcCA+IC0xICYmIGxhc3REb3QgPiBsYXN0U2VwKSB7Ci0gICAgICAgICAgICB1cmkgPSBjb250cmlidXRpb25VUkwuc3Vic3RyaW5nKGxhc3RTZXArMSwgbGFzdERvdCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB1cmkgPSBjb250cmlidXRpb25VUkw7Ci0gICAgICAgIH0KLSAgICAgICAgaW5zdGFsbENvbnRyaWJ1dGlvbih1cmksIGNvbnRyaWJ1dGlvblVSTCwgbnVsbCwgbnVsbCwgdHJ1ZSk7Ci0gICAgICAgIHJldHVybiB1cmk7CisgICAgICAgIHJldHVybiBpbnN0YWxsQ29udHJpYnV0aW9uKG51bGwsIGNvbnRyaWJ1dGlvblVSTCwgbnVsbCwgbnVsbCwgdHJ1ZSk7CiAgICAgfQotICAgIAotICAgIHB1YmxpYyB2b2lkIGluc3RhbGxDb250cmlidXRpb24oU3RyaW5nIHVyaSwgU3RyaW5nIGNvbnRyaWJ1dGlvblVSTCwgU3RyaW5nIG1ldGFEYXRhVVJMLCBMaXN0PFN0cmluZz4gZGVwZW5kZW50Q29udHJpYnV0aW9uVVJJcywgYm9vbGVhbiBydW5EZXBsb3lhYmxlcykgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb24geworCisgICAgcHVibGljIFN0cmluZyBpbnN0YWxsQ29udHJpYnV0aW9uKFN0cmluZyB1cmksIFN0cmluZyBjb250cmlidXRpb25VUkwsIFN0cmluZyBtZXRhRGF0YVVSTCwgTGlzdDxTdHJpbmc+IGRlcGVuZGVudENvbnRyaWJ1dGlvblVSSXMsIGJvb2xlYW4gcnVuRGVwbG95YWJsZXMpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uLCBBY3RpdmF0aW9uRXhjZXB0aW9uLCBWYWxpZGF0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKHVyaSA9PSBudWxsKSB7CisgICAgICAgICAgICB1cmkgPSBnZXREZWZhdWx0Q29udHJpYnV0aW9uVVJJKGNvbnRyaWJ1dGlvblVSTCk7CisgICAgICAgIH0KICAgICAgICAgTW9uaXRvciBtb25pdG9yID0gZGVwbG95ZXIuY3JlYXRlTW9uaXRvcigpOwogICAgICAgICBDb250cmlidXRpb24gY29udHJpYnV0aW9uID0gZGVwbG95ZXIubG9hZENvbnRyaWJ1dGlvbihJT0hlbHBlci5jcmVhdGVVUkkodXJpKSwgSU9IZWxwZXIuZ2V0TG9jYXRpb25Bc1VSTChjb250cmlidXRpb25VUkwpLCBtb25pdG9yKTsKICAgICAgICAgbW9uaXRvci5hbmFseXplUHJvYmxlbXMoKTsKQEAgLTkwLDYgKzg1LDcgQEAKICAgICAgICAgICAgIG1lcmdlQ29udHJpYnV0aW9uTWV0YURhdGEobWV0YURhdGFVUkwsIGNvbnRyaWJ1dGlvbik7CiAgICAgICAgIH0KICAgICAgICAgaW5zdGFsbENvbnRyaWJ1dGlvbihjb250cmlidXRpb24sIGRlcGVuZGVudENvbnRyaWJ1dGlvblVSSXMsIHJ1bkRlcGxveWFibGVzKTsKKyAgICAgICAgcmV0dXJuIHVyaTsKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgbWVyZ2VDb250cmlidXRpb25NZXRhRGF0YShTdHJpbmcgbWV0YURhdGFVUkwsIENvbnRyaWJ1dGlvbiBjb250cmlidXRpb24pIHRocm93cyBWYWxpZGF0aW9uRXhjZXB0aW9uIHsKQEAgLTEwNiw3ICsxMDIsNyBAQAogICAgICAgICBjb250cmlidXRpb24uZ2V0RXhwb3J0cygpLmFkZEFsbChtZXRhRGF0YS5nZXRFeHBvcnRzKCkpOwogICAgIH0KICAgICAKLSAgICBwdWJsaWMgdm9pZCBpbnN0YWxsQ29udHJpYnV0aW9uKENvbnRyaWJ1dGlvbiBjb250cmlidXRpb24sIExpc3Q8U3RyaW5nPiBkZXBlbmRlbnRDb250cmlidXRpb25VUklzLCBib29sZWFuIHJ1bkRlcGxveWFibGVzKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiwgQWN0aXZhdGlvbkV4Y2VwdGlvbiwgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7CisgICAgcHVibGljIFN0cmluZyBpbnN0YWxsQ29udHJpYnV0aW9uKENvbnRyaWJ1dGlvbiBjb250cmlidXRpb24sIExpc3Q8U3RyaW5nPiBkZXBlbmRlbnRDb250cmlidXRpb25VUklzLCBib29sZWFuIHJ1bkRlcGxveWFibGVzKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiwgQWN0aXZhdGlvbkV4Y2VwdGlvbiwgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIEluc3RhbGxlZENvbnRyaWJ1dGlvbiBpYyA9IG5ldyBJbnN0YWxsZWRDb250cmlidXRpb24oY29udHJpYnV0aW9uLmdldFVSSSgpLCBjb250cmlidXRpb24uZ2V0TG9jYXRpb24oKSwgY29udHJpYnV0aW9uLCBkZXBlbmRlbnRDb250cmlidXRpb25VUklzKTsKICAgICAgICAgaW5zdGFsbGVkQ29udHJpYnV0aW9ucy5wdXQoY29udHJpYnV0aW9uLmdldFVSSSgpLCBpYyk7CiAgICAgICAgIGlmIChydW5EZXBsb3lhYmxlcykgewpAQCAtMTI2LDYgKzEyMiw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtb25pdG9yLmFuYWx5emVQcm9ibGVtcygpOwogICAgICAgICB9CisgICAgICAgIHJldHVybiBpYy5nZXRVUkkoKTsKICAgICB9CiAKICAgICBwcm90ZWN0ZWQgTGlzdDxDb250cmlidXRpb24+IGNhbGN1bGF0ZURlcGVuZGVudENvbnRyaWJ1dGlvbnMoSW5zdGFsbGVkQ29udHJpYnV0aW9uIGljKSB7CkBAIC0xNjQsMTUgKzE2MSwxNCBAQAogICAgICAgICByZXR1cm4gY29tcG9zaXRlQXJ0aWZjYXRVUkk7CiAgICAgfQogCi0gICAgcHVibGljIHZvaWQgYWRkVG9Eb21haW5MZXZlbENvbXBvc2l0ZShTdHJpbmcgY29tcG9zaXRlVVJJKSB0aHJvd3MgQWN0aXZhdGlvbkV4Y2VwdGlvbiwgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIFN0cmluZyBjb250cmlidXRpb25VUkkgPSBnZXRDb250cmlidXRpb25VcmlGb3JBcnRpZmFjdChjb21wb3NpdGVVUkkpOworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGFkZFRvRG9tYWluTGV2ZWxDb21wb3NpdGUoU3RyaW5nIGNvbnRyaWJ1dGlvblVSSSwgU3RyaW5nIGNvbXBvc2l0ZVVSSSkgdGhyb3dzIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb24gewogICAgICAgICBJbnN0YWxsZWRDb250cmlidXRpb24gaWMgPSBpbnN0YWxsZWRDb250cmlidXRpb25zLmdldChjb250cmlidXRpb25VUkkpOwogICAgICAgICBpZiAoaWMgPT0gbnVsbCkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiQ29udHJpYnV0aW9uIG5vdCBpbnN0YWxsZWQ6ICIgKyBjb250cmlidXRpb25VUkkpOwogICAgICAgICB9Ci0gICAgICAgIFN0cmluZyByZWxhdGl2ZVVSSSA9IGNvbXBvc2l0ZVVSSS5zdWJzdHJpbmcoY29udHJpYnV0aW9uVVJJLmVuZHNXaXRoKCIvIikgPyBjb250cmlidXRpb25VUkkubGVuZ3RoKCkgOiBjb250cmlidXRpb25VUkkubGVuZ3RoKCkrMSk7CiAgICAgICAgIGZvciAoQXJ0aWZhY3QgYSA6IGljLmdldENvbnRyaWJ1dGlvbigpLmdldEFydGlmYWN0cygpKSB7Ci0gICAgICAgICAgICBpZiAoYS5nZXRVUkkoKS5lcXVhbHMocmVsYXRpdmVVUkkpKSB7CisgICAgICAgICAgICBpZiAoYS5nZXRVUkkoKS5lcXVhbHMoY29tcG9zaXRlVVJJKSkgewogICAgICAgICAgICAgICAgIHJ1bkNvbXBvc2l0ZSgoQ29tcG9zaXRlKSBhLmdldE1vZGVsKCksIGljKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xODAsMTIgKzE3NiwxNCBAQAogICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb21wb3NpdGUgbm90IGZvdW5kOiAiICsgY29tcG9zaXRlVVJJKTsKICAgICB9CiAKLSAgICBwdWJsaWMgdm9pZCByZW1vdmVGcm9tRG9tYWluTGV2ZWxDb21wb3NpdGUoU3RyaW5nIGNvbXBvc2l0ZVVSSSkgdGhyb3dzIEFjdGl2YXRpb25FeGNlcHRpb24gewotICAgICAgICBTdHJpbmcgY29udHJpYnV0aW9uVVJJID0gZ2V0Q29udHJpYnV0aW9uVXJpRm9yQXJ0aWZhY3QoY29tcG9zaXRlVVJJKTsKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCByZW1vdmVGcm9tRG9tYWluTGV2ZWxDb21wb3NpdGUoU3RyaW5nIGNvbnRyaWJ1dGlvblVSSSwgU3RyaW5nIGNvbXBvc2l0ZVVSSSkgdGhyb3dzIEFjdGl2YXRpb25FeGNlcHRpb24gewogICAgICAgICBJbnN0YWxsZWRDb250cmlidXRpb24gaWMgPSBpbnN0YWxsZWRDb250cmlidXRpb25zLmdldChjb250cmlidXRpb25VUkkpOwotICAgICAgICBTdHJpbmcgcmVsYXRpdmVVUkkgPSBjb21wb3NpdGVVUkkuc3Vic3RyaW5nKGNvbnRyaWJ1dGlvblVSSS5sZW5ndGgoKSsxKTsKKyAgICAgICAgaWYgKGljID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkNvbnRyaWJ1dGlvbiBub3QgaW5zdGFsbGVkOiAiICsgY29udHJpYnV0aW9uVVJJKTsKKyAgICAgICAgfQogICAgICAgICBmb3IgKERlcGxveWVkQ29tcG9zaXRlIGRjIDogaWMuZ2V0RGVwbG95ZWRDb21wb3NpdGVzKCkpIHsKLSAgICAgICAgICAgIGlmIChyZWxhdGl2ZVVSSS5lcXVhbHMoZGMuZ2V0VVJJKCkpKSB7CisgICAgICAgICAgICBpZiAoY29tcG9zaXRlVVJJLmVxdWFscyhkYy5nZXRVUkkoKSkpIHsKICAgICAgICAgICAgICAgICBpYy5nZXREZXBsb3llZENvbXBvc2l0ZXMoKS5yZW1vdmUoZGMpOwogICAgICAgICAgICAgICAgIGRjLnVuRGVwbG95KCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjcyLDcgKzI3MCw3IEBACiAgICAgICAgIHJldHVybiBkb21haW5OYW1lOwogICAgIH0KIAotICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0RGVwbG95ZWRDb21wb3N0ZXMoU3RyaW5nIGNvbnRyaWJ1dGlvblVSSSkgeworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0RGVwbG95ZWRDb21wb3NpdGVzKFN0cmluZyBjb250cmlidXRpb25VUkkpIHsKICAgICAgICAgQXJyYXlMaXN0PFN0cmluZz4gY29tcG9zaXRlVVJJcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogICAgICAgICBJbnN0YWxsZWRDb250cmlidXRpb24gaWMgPSBpbnN0YWxsZWRDb250cmlidXRpb25zLmdldChjb250cmlidXRpb25VUkkpOwogICAgICAgICBpZiAoaWMgPT0gbnVsbCkgewpAQCAtMzMyLDQgKzMzMCwyOSBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkZXBlbmRlbnRDb250cmlidXRpb25VUklzOwogICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBkZWZhdWx0IFVSSSBmb3IgYSBjb250cmlidXRpb24gYmFzZWQgb24gdGhlIGNvbnRyaWJ1dGlvbiBVUkwKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldERlZmF1bHRDb250cmlidXRpb25VUkkoU3RyaW5nIGNvbnRyaWJ1dGlvblVSTCkgeworICAgICAgICBTdHJpbmcgdXJpID0gbnVsbDsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIEZpbGUgZiA9IG5ldyBGaWxlKGNvbnRyaWJ1dGlvblVSTCk7CisgICAgICAgICAgICBpZiAoImNsYXNzZXMiLmVxdWFscyhmLmdldE5hbWUoKSkgJiYgInRhcmdldCIuZXF1YWxzKGYuZ2V0UGFyZW50RmlsZSgpLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICB1cmkgPSBmLmdldFBhcmVudEZpbGUoKS5nZXRQYXJlbnRGaWxlKCkuZ2V0TmFtZSgpOyAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdXJpID0gZi5nZXROYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBpZ25vcmUKKyAgICAgICAgfQorICAgICAgICBpZiAodXJpID09IG51bGwpIHsKKyAgICAgICAgICAgIHVyaSA9IGNvbnRyaWJ1dGlvblVSTDsKKyAgICAgICAgfQorICAgICAgICBpZiAodXJpLmVuZHNXaXRoKCIuemlwIikgfHwgdXJpLmVuZHNXaXRoKCIuamFyIikpIHsKKyAgICAgICAgICAgIHVyaSA9IHVyaS5zdWJzdHJpbmcoMCwgdXJpLmxlbmd0aCgpLTQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB1cmk7CisgICAgfQorCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlMi9EZXBsb3llclRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlMi9EZXBsb3llclRlc3RDYXNlLmphdmEKaW5kZXggNDUwZTVhOC4uNGQwZDRhYiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvRGVwbG95ZXJUZXN0Q2FzZS5qYXZhCisrKyBiL21vZHVsZXMvZG9tYWluLW5vZGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUyL0RlcGxveWVyVGVzdENhc2UuamF2YQpAQCAtNjksNyArNjksNyBAQAogICAgICAgICBtb25pdG9yLmFuYWx5emVQcm9ibGVtcygpOwogICAgICAgICBjb21wb3NpdGUuc2V0VVJJKCJoZWxsb3dvcmxkMi5jb21wb3NpdGUiKTsKICAgICAgICAgbm9kZS5hZGREZXBsb3ltZW50Q29tcG9zaXRlKCJmb28iLCBjb21wb3NpdGUpOwotICAgICAgICBMaXN0PFN0cmluZz4gZGNzID0gbm9kZS5nZXREZXBsb3llZENvbXBvc3RlcygiZm9vIik7CisgICAgICAgIExpc3Q8U3RyaW5nPiBkY3MgPSBub2RlLmdldERlcGxveWVkQ29tcG9zaXRlcygiZm9vIik7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgZGNzLnNpemUoKSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImhlbGxvd29ybGQyLmNvbXBvc2l0ZSIsIGRjcy5nZXQoMCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvZG9tYWluLW5vZGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUyL05vZGVUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvTm9kZVRlc3RDYXNlLmphdmEKaW5kZXggZDgyMjg3OS4uY2RmOGIwMiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvTm9kZVRlc3RDYXNlLmphdmEKKysrIGIvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvTm9kZVRlc3RDYXNlLmphdmEKQEAgLTI1LDggKzI1LDYgQEAKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZTIuTm9kZTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUyLk5vZGVGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZTIuaW1wbC5Ob2RlSW1wbDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuQWN0aXZhdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuanVuaXQuSWdub3JlOwpAQCAtNDUsMTIgKzQzLDEyIEBACiAvLyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBoZWxsb3dvcmxkU2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7CiAgICAgfQogCi0gICAgQElnbm9yZSgiVE9ETzogZmFpbHMgd2l0aCBTdW4gSkRLIGR1ZSB0byBTQ0EgcHJvcGVydGllcyBpc3N1ZSIpCiAgICAgQFRlc3QKKyAgICBASWdub3JlKCJEZXBkZW5kcyBvbiBpdGVzdC9UMzU1OCB3aGljaCBpc24ndCBpbiB0aGUgYnVpbGQ/IikKICAgICBwdWJsaWMgdm9pZCB0ZXN0SW5zdGFsbFdpdGhEZXBlbmRlbnQoKSB0aHJvd3MgTm9TdWNoU2VydmljZUV4Y2VwdGlvbiwgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiwgQWN0aXZhdGlvbkV4Y2VwdGlvbiwgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIE5vZGUgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgiZGVmYXVsdCIpOwotICAgICAgICBub2RlLmluc3RhbGxDb250cmlidXRpb24oInN0b3JlIiwgIi9UdXNjYW55L3N2bi8yLngtdHJ1bmsvaXRlc3QvVDM1NTgvc3JjL3Rlc3QvcmVzb3VyY2VzL3NhbXBsZS1zdG9yZS5qYXIiLCBudWxsLCBudWxsLCB0cnVlKTsKLSAgICAgICAgbm9kZS5pbnN0YWxsQ29udHJpYnV0aW9uKCJzdG9yZS1jbGllbnQiLCAiL1R1c2Nhbnkvc3ZuLzIueC10cnVuay9pdGVzdC9UMzU1OC9zcmMvdGVzdC9yZXNvdXJjZXMvc2FtcGxlLXN0b3JlLWNsaWVudC5qYXIiLCBudWxsLCBudWxsLCB0cnVlKTsKKyAgICAgICAgbm9kZS5pbnN0YWxsQ29udHJpYnV0aW9uKCJzdG9yZSIsICIuLi8uLi9pdGVzdC9UMzU1OC9zcmMvdGVzdC9yZXNvdXJjZXMvc2FtcGxlLXN0b3JlLmphciIsIG51bGwsIG51bGwsIHRydWUpOworICAgICAgICBub2RlLmluc3RhbGxDb250cmlidXRpb24oInN0b3JlLWNsaWVudCIsICIuLi8uLi9pdGVzdC9UMzU1OC9zcmMvdGVzdC9yZXNvdXJjZXMvc2FtcGxlLXN0b3JlLWNsaWVudC5qYXIiLCBudWxsLCBudWxsLCB0cnVlKTsKIAogLy8gICAgICAgIEhlbGxvd29ybGQgaGVsbG93b3JsZFNlcnZpY2UgPSBub2RlLmdldFNlcnZpY2UoSGVsbG93b3JsZC5jbGFzcywgIkhlbGxvd29ybGRDb21wb25lbnQiKTsKIC8vICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJIZWxsbyBwZXRyYSIsIGhlbGxvd29ybGRTZXJ2aWNlLnNheUhlbGxvKCJwZXRyYSIpKTsKQEAgLTY5LDcgKzY3LDcgQEAKIC8vICAgICAgICAgICAgLy8gZXhwZWN0ZWQgYXMgdGhlcmUgaXMgbm8gZGVwbG95YWJsZXMKIC8vICAgICAgICB9CiAKLSAgICAgICAgbm9kZS5hZGRUb0RvbWFpbkxldmVsQ29tcG9zaXRlKCJoZWxsb3dvcmxkIiArICIvaGVsbG93b3JsZC5jb21wb3NpdGUiKTsKKyAgICAgICAgbm9kZS5hZGRUb0RvbWFpbkxldmVsQ29tcG9zaXRlKCJoZWxsb3dvcmxkIiwgImhlbGxvd29ybGQuY29tcG9zaXRlIik7CiAvLyAgICAgICAgSGVsbG93b3JsZCBoZWxsb3dvcmxkU2VydmljZSA9IHNjYUNsaWVudEZhY3RvcnkuZ2V0U2VydmljZShIZWxsb3dvcmxkLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOwogLy8gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgaGVsbG93b3JsZFNlcnZpY2Uuc2F5SGVsbG8oInBldHJhIikpOwogICAgIH0KQEAgLTg3LDcgKzg1LDcgQEAKICAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0RGVwbG95ZWRDb21wb3N0ZXMoKSB0aHJvd3MgTm9TdWNoU2VydmljZUV4Y2VwdGlvbiwgTm9TdWNoRG9tYWluRXhjZXB0aW9uLCBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uLCBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb24gewogICAgICAgICBOb2RlIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoImRlZmF1bHQiKTsKICAgICAgICAgbm9kZS5pbnN0YWxsQ29udHJpYnV0aW9uKCJmb28iLCAic3JjL3Rlc3QvcmVzb3VyY2VzL3NhbXBsZS1oZWxsb3dvcmxkLmphciIsIG51bGwsIG51bGwsIHRydWUpOwotICAgICAgICBMaXN0PFN0cmluZz4gZGNzID0gbm9kZS5nZXREZXBsb3llZENvbXBvc3RlcygiZm9vIik7CisgICAgICAgIExpc3Q8U3RyaW5nPiBkY3MgPSBub2RlLmdldERlcGxveWVkQ29tcG9zaXRlcygiZm9vIik7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgZGNzLnNpemUoKSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImhlbGxvd29ybGQuY29tcG9zaXRlIiwgZGNzLmdldCgwKSk7CiAgICAgfQpAQCAtOTYsOCArOTQsOCBAQAogICAgIHB1YmxpYyB2b2lkIHRlc3RSZW1vdmVDb21wb3N0ZSgpIHRocm93cyBOb1N1Y2hTZXJ2aWNlRXhjZXB0aW9uLCBOb1N1Y2hEb21haW5FeGNlcHRpb24sIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgQWN0aXZhdGlvbkV4Y2VwdGlvbiwgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIE5vZGUgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgiZGVmYXVsdCIpOwogICAgICAgICBub2RlLmluc3RhbGxDb250cmlidXRpb24oImZvbyIsICJzcmMvdGVzdC9yZXNvdXJjZXMvc2FtcGxlLWhlbGxvd29ybGQuamFyIiwgbnVsbCwgbnVsbCwgdHJ1ZSk7Ci0gICAgICAgIG5vZGUucmVtb3ZlRnJvbURvbWFpbkxldmVsQ29tcG9zaXRlKCJmb28vaGVsbG93b3JsZC5jb21wb3NpdGUiKTsKLSAgICAgICAgTGlzdDxTdHJpbmc+IGRjcyA9IG5vZGUuZ2V0RGVwbG95ZWRDb21wb3N0ZXMoImZvbyIpOworICAgICAgICBub2RlLnJlbW92ZUZyb21Eb21haW5MZXZlbENvbXBvc2l0ZSgiZm9vIiwgImhlbGxvd29ybGQuY29tcG9zaXRlIik7CisgICAgICAgIExpc3Q8U3RyaW5nPiBkY3MgPSBub2RlLmdldERlcGxveWVkQ29tcG9zaXRlcygiZm9vIik7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMCwgZGNzLnNpemUoKSk7CiAgICAgfQogCkBAIC0xMDYsNyArMTA0LDcgQEAKICAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJkZWZhdWx0Iik7CiAgICAgICAgICgoTm9kZUltcGwpbm9kZSkuaW5zdGFsbENvbnRyaWJ1dGlvbigiaGVsbG93b3JsZCIsICJzcmMvdGVzdC9yZXNvdXJjZXMvc2FtcGxlLWhlbGxvd29ybGQtbm9kZXBsb3lhYmxlLmphciIsICJzcmMvdGVzdC9yZXNvdXJjZXMvc2NhLWNvbnRyaWJ1dGlvbi1nZW5lcmF0ZWQueG1sIiwgbnVsbCwgdHJ1ZSk7CiAKLSAgICAgICAgTGlzdDxTdHJpbmc+IGRjcyA9IG5vZGUuZ2V0RGVwbG95ZWRDb21wb3N0ZXMoImhlbGxvd29ybGQiKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGRjcyA9IG5vZGUuZ2V0RGVwbG95ZWRDb21wb3NpdGVzKCJoZWxsb3dvcmxkIik7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgZGNzLnNpemUoKSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImhlbGxvd29ybGQuY29tcG9zaXRlIiwgZGNzLmdldCgwKSk7CiAKQEAgLTEyMywyMCArMTIxLDIwIEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RTdGF0aWNDcmVhdGUoKSB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IE5vZGVGYWN0b3J5LmNyZWF0ZU5vZGUoImhlbGxvd29ybGQuY29tcG9zaXRlIiwgInNyYy90ZXN0L3Jlc291cmNlcy9zYW1wbGUtaGVsbG93b3JsZC5qYXIiKTsKKyAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3U3RhbmRhbG9uZU5vZGUoImhlbGxvd29ybGQuY29tcG9zaXRlIiwgInNyYy90ZXN0L3Jlc291cmNlcy9zYW1wbGUtaGVsbG93b3JsZC5qYXIiKTsKICAgICAgICAgTGlzdDxTdHJpbmc+IGNzID0gbm9kZS5nZXRJbnN0YWxsZWRDb250cmlidXRpb25zKCk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgY3Muc2l6ZSgpKTsKLSAgICAgICAgTGlzdDxTdHJpbmc+IGRjcyA9IG5vZGUuZ2V0RGVwbG95ZWRDb21wb3N0ZXMoY3MuZ2V0KDApKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGRjcyA9IG5vZGUuZ2V0RGVwbG95ZWRDb21wb3NpdGVzKGNzLmdldCgwKSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgZGNzLnNpemUoKSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImhlbGxvd29ybGQuY29tcG9zaXRlIiwgZGNzLmdldCgwKSk7CiAgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0U3RhdGljQ3JlYXRlV2l0aE51bGxDb21wb3NpdGUoKSB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IE5vZGVGYWN0b3J5LmNyZWF0ZU5vZGUobnVsbCwgInNyYy90ZXN0L3Jlc291cmNlcy9zYW1wbGUtaGVsbG93b3JsZC5qYXIiKTsKKyAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3U3RhbmRhbG9uZU5vZGUobnVsbCwgInNyYy90ZXN0L3Jlc291cmNlcy9zYW1wbGUtaGVsbG93b3JsZC5qYXIiKTsKICAgICAgICAgTGlzdDxTdHJpbmc+IGNzID0gbm9kZS5nZXRJbnN0YWxsZWRDb250cmlidXRpb25zKCk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgY3Muc2l6ZSgpKTsKLSAgICAgICAgTGlzdDxTdHJpbmc+IGRjcyA9IG5vZGUuZ2V0RGVwbG95ZWRDb21wb3N0ZXMoY3MuZ2V0KDApKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGRjcyA9IG5vZGUuZ2V0RGVwbG95ZWRDb21wb3NpdGVzKGNzLmdldCgwKSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgZGNzLnNpemUoKSk7CiAgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoImhlbGxvd29ybGQuY29tcG9zaXRlIiwgZGNzLmdldCgwKSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvTm9kZVhNTFRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlMi9Ob2RlWE1MVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTBmYmZkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9kb21haW4tbm9kZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZTIvTm9kZVhNTFRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlMjsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5WYWxpZGF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5BY3RpdmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgTm9kZVhNTFRlc3RDYXNlIHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEhlbGxvd29ybGRYTUwoKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiwgQWN0aXZhdGlvbkV4Y2VwdGlvbiwgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIE5vZGUgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZUZyb21YTUwoInNyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkTm9kZS54bWwiKTsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiaGVsbG93b3JsZCIsIG5vZGUuZ2V0RG9tYWluTmFtZSgpKTsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGNzID0gbm9kZS5nZXRJbnN0YWxsZWRDb250cmlidXRpb25zKCk7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSwgY3Muc2l6ZSgpKTsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygic2FtcGxlLWhlbGxvd29ybGQiLCBjcy5nZXQoMCkpOworICAgICAgICBMaXN0PFN0cmluZz4gY29tcHNvaXRlcyA9IG5vZGUuZ2V0RGVwbG95ZWRDb21wb3NpdGVzKCJzYW1wbGUtaGVsbG93b3JsZCIpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDEsIGNvbXBzb2l0ZXMuc2l6ZSgpKTsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiaGVsbG93b3JsZC5jb21wb3NpdGUiLCBjb21wc29pdGVzLmdldCgwKSk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkTm9kZS54bWwgYi9tb2R1bGVzL2RvbWFpbi1ub2RlL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkTm9kZS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyZjU3NwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvZG9tYWluLW5vZGUvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGROb2RlLnhtbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICoKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKgorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPG5vZGUgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisgICAgeG1sbnM9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKKyAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCisgICAgZG9tYWluPSJoZWxsb3dvcmxkIj4KKworICAgIDxjb250cmlidXRpb24gbG9jYXRpb249InNhbXBsZS1oZWxsb3dvcmxkLmphciIgc3RhcnREZXBsb3lhYmxlcz0idHJ1ZSIgLz4KKworPC9ub2RlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0LWNsaWVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0LWNsaWVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWExM2I4OS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC1jbGllbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjANCi1TQ0EtVmVyc2lvbjogMS4xDQotQnVuZGxlLU5hbWU6IEFwYWNoZSBUdXNjYW55IFNDQSBIYXplbGNhc3QgQ2xpZW50IEJhc2VkIEVuZFBvaW50IFJlZ2lzdHJ5DQotQnVuZGxlLVZlbmRvcjogVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQotQnVuZGxlLVZlcnNpb246IDIuMC4wDQotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KLUJ1bmRsZS1MaWNlbnNlOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0DQotQnVuZGxlLURlc2NyaXB0aW9uOiBBcGFjaGUgVHVzY2FueSBIYXplbGNhc3QgQ2xpZW50IEVuZHBvaW50IFJlZ3NpdHJ5DQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5lbmRwb2ludC5oYXplbGNhc3QuY2xpZW50DQotQnVuZGxlLURvY1VSTDogaHR0cDovL3d3dy5hcGFjaGUub3JnLw0KLUJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNSxKYXZhU0UtMS42DQotSW1wb3J0LVBhY2thZ2U6IGNvbS5oYXplbGNhc3QuY2xpZW50LA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlO3ZlcnNpb249IjIuMC4wIiwNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5lbmRwb2ludC5oYXplbGNhc3Q7dmVyc2lvbj0iMi4wLjAiLA0KLSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWU7dmVyc2lvbj0iMi4wLjAiDQotRXhwb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZW5kcG9pbnQuaGF6ZWxjYXN0LmNsaWVudDt2ZXJzaW9uPSIyLjAuMCI7DQotIHVzZXM6PSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUsb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseSxvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUsb3JnLmFwYWNoZS50dXNjYW55LnNjYS5lbmRwb2ludC5oYXplbGNhc3QiDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9lbmRwb2ludC1oYXplbGNhc3QtY2xpZW50L3BvbS54bWwgYi9tb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC1jbGllbnQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZmMmE4NC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC1jbGllbnQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1tb2R1bGVzPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZW5kcG9pbnQtaGF6ZWxjYXN0LWNsaWVudDwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgRW5kUG9pbnQgUmVnaXN0cnkgdXNpbmcgSGF6ZWxjYXN0IE5hdGl2ZSBDbGllbnQ8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmNvbS5oYXplbGNhc3Q8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5oYXplbGNhc3QtY2xpZW50PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS44LjM8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1lbmRwb2ludC1oYXplbGNhc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8L2RlcGVuZGVuY2llcz4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9lbmRwb2ludC1oYXplbGNhc3QtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRG9tYWluUmVnaXN0cnlGYWN0b3J5IGIvbW9kdWxlcy9lbmRwb2ludC1oYXplbGNhc3QtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRG9tYWluUmVnaXN0cnlGYWN0b3J5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTVlYTZhLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0LWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkRvbWFpblJlZ2lzdHJ5RmFjdG9yeQorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMNCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotIw0KLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotIyB1bmRlciB0aGUgTGljZW5zZS4NCi1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmVuZHBvaW50LmhhemVsY2FzdC5jbGllbnQuSGF6ZWxjYXN0Q2xpZW50RG9tYWluUmVnaXN0cnlGYWN0b3J5O3Jhbmtpbmc9MTAwDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9lbmRwb2ludC1oYXplbGNhc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY4MGJiOS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMA0KLVNDQS1WZXJzaW9uOiAxLjENCi1CdW5kbGUtTmFtZTogQXBhY2hlIFR1c2NhbnkgU0NBIEhhemVsY2FzdCBCYXNlZCBFbmRQb2ludCBSZWdpc3RyeQ0KLUJ1bmRsZS1WZW5kb3I6IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbg0KLUJ1bmRsZS1WZXJzaW9uOiAyLjAuMA0KLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCi1CdW5kbGUtTGljZW5zZTogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dA0KLUJ1bmRsZS1EZXNjcmlwdGlvbjogQXBhY2hlIFR1c2NhbnkgSGF6ZWxjYXN0IEVuZHBvaW50IFJlZ3NpdHJ5DQotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5lbmRwb2ludC5oYXplbGNhc3QNCi1CdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQotQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYKLUltcG9ydC1QYWNrYWdlOiBjb20uaGF6ZWxjYXN0LmNvbmZpZywNCi0gY29tLmhhemVsY2FzdC5jb3JlLA0KLSBjb20uaGF6ZWxjYXN0Lm5pbywNCi0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseTt2ZXJzaW9uPSIyLjAuMCIsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZTt2ZXJzaW9uPSIyLjAuMCIsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZTt2ZXJzaW9uPSIyLjAuMCINCi1FeHBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5lbmRwb2ludC5oYXplbGNhc3Q7dmVyc2lvbj0iMi4wLjAiOw0KLSB1c2VzOj0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHksb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlIg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0L3BvbS54bWwgYi9tb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzJmMmExLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0L3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktbW9kdWxlczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgRW5kUG9pbnQgUmVnaXN0cnkgdXNpbmcgSGF6ZWxjYXN0PC9uYW1lPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5jb20uaGF6ZWxjYXN0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+aGF6ZWxjYXN0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS44LjM8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlLXNwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmU8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kZXBsb3ltZW50PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRG9tYWluUmVnaXN0cnlGYWN0b3J5IGIvbW9kdWxlcy9lbmRwb2ludC1oYXplbGNhc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5Eb21haW5SZWdpc3RyeUZhY3RvcnkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNTUxNzAuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9lbmRwb2ludC1oYXplbGNhc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5Eb21haW5SZWdpc3RyeUZhY3RvcnkKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0jDQotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMNCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSMgdW5kZXIgdGhlIExpY2Vuc2UuDQotb3JnLmFwYWNoZS50dXNjYW55LnNjYS5lbmRwb2ludC5oYXplbGNhc3QuSGF6ZWxjYXN0RG9tYWluUmVnaXN0cnlGYWN0b3J5O3Jhbmtpbmc9MTAwDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9lbmRwb2ludC10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2VuZHBvaW50L3RyaWJlcy9NdWx0aVJlZ1Rlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2VuZHBvaW50LXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvdHJpYmVzL011bHRpUmVnVGVzdENhc2UuamF2YQppbmRleCA5YzliMDQxLi5jMjhhMzAzIDEwMDY0NAotLS0gYS9tb2R1bGVzL2VuZHBvaW50LXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvdHJpYmVzL011bHRpUmVnVGVzdENhc2UuamF2YQorKysgYi9tb2R1bGVzL2VuZHBvaW50LXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvdHJpYmVzL011bHRpUmVnVGVzdENhc2UuamF2YQpAQCAtMzQsOSArMzQsMTEgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUVuZHBvaW50OwogaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7CiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOworaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKIC8vIElnbm9yZSBzbyBpdHMgbm90IHJ1biBpbiB0aGUgYnVpbGQgeWV0IHRpbGwgaXRzIHdvcmtpbmcKK0BJZ25vcmUoIlRVU0NBTlktMzcxOCIpCiBwdWJsaWMgY2xhc3MgTXVsdGlSZWdUZXN0Q2FzZSBpbXBsZW1lbnRzIEVuZHBvaW50TGlzdGVuZXIgewogICAgIHByaXZhdGUgc3RhdGljIEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXh0ZW5zaW9uUG9pbnRzOwogICAgIHByaXZhdGUgc3RhdGljIEFzc2VtYmx5RmFjdG9yeSBhc3NlbWJseUZhY3Rvcnk7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2VuZHBvaW50LXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZW5kcG9pbnQvdHJpYmVzL1JlcGxpY2F0ZWRFbmRwb2ludFJlZ2lzdHJ5VGVzdENhc2UuamF2YSBiL21vZHVsZXMvZW5kcG9pbnQtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC90cmliZXMvUmVwbGljYXRlZEVuZHBvaW50UmVnaXN0cnlUZXN0Q2FzZS5qYXZhCmluZGV4IDE3M2QyMTIuLjk5YzU0NzIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvZW5kcG9pbnQtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC90cmliZXMvUmVwbGljYXRlZEVuZHBvaW50UmVnaXN0cnlUZXN0Q2FzZS5qYXZhCisrKyBiL21vZHVsZXMvZW5kcG9pbnQtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9lbmRwb2ludC90cmliZXMvUmVwbGljYXRlZEVuZHBvaW50UmVnaXN0cnlUZXN0Q2FzZS5qYXZhCkBAIC0yOCw4ICsyOCwxMCBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5GYWN0b3J5RXh0ZW5zaW9uUG9pbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsKIGltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OworaW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKK0BJZ25vcmUoIlRVU0NBTlktMzcxOCIpCiBwdWJsaWMgY2xhc3MgUmVwbGljYXRlZEVuZHBvaW50UmVnaXN0cnlUZXN0Q2FzZSB7CiAKICAgICBAVGVzdApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9leHRlbnNpYmlsaXR5LWVxdWlub3gvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvZXF1aW5veC9FcXVpbm94U2VydmljZURpc2NvdmVyZXIuamF2YSBiL21vZHVsZXMvZXh0ZW5zaWJpbGl0eS1lcXVpbm94L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9leHRlbnNpYmlsaXR5L2VxdWlub3gvRXF1aW5veFNlcnZpY2VEaXNjb3ZlcmVyLmphdmEKaW5kZXggNjczNmY5Yy4uMTIyNzI5YSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9leHRlbnNpYmlsaXR5LWVxdWlub3gvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvZXF1aW5veC9FcXVpbm94U2VydmljZURpc2NvdmVyZXIuamF2YQorKysgYi9tb2R1bGVzL2V4dGVuc2liaWxpdHktZXF1aW5veC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZXh0ZW5zaWJpbGl0eS9lcXVpbm94L0VxdWlub3hTZXJ2aWNlRGlzY292ZXJlci5qYXZhCkBAIC02NCw3ICs2NCw3IEBACiAgICAgICAgIGJ1bmRsZVRyYWNrZXIgPSBuZXcgQWN0aXZlQnVuZGxlVHJhY2tlcihjb250ZXh0KTsKICAgICAgICAgYnVuZGxlVHJhY2tlci5vcGVuKCk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKICAgICAgICAgYnVuZGxlVHJhY2tlci5jbG9zZSgpOwogICAgIH0KQEAgLTczLDcgKzczLDcgQEAKICAgICAgICAgU3RyaW5nIGhlYWRlciA9IChTdHJpbmcpYnVuZGxlLmdldEhlYWRlcnMoKS5nZXQoIlNDQS1WZXJzaW9uIik7CiAgICAgICAgIHJldHVybiBWZXJzaW9uLnBhcnNlVmVyc2lvbihoZWFkZXIpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQWN0aXZlQnVuZGxlVHJhY2tlciBleHRlbmRzIEJ1bmRsZVRyYWNrZXIgewogCiAgICAgICAgIC8qKgpAQCAtOTUsNyArOTUsNiBAQAogCiAgICAgfQogCi0KICAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFNlcnZpY2VEZWNsYXJhdGlvbkltcGwgaW1wbGVtZW50cyBTZXJ2aWNlRGVjbGFyYXRpb24gewogICAgICAgICBwcml2YXRlIEJ1bmRsZSBidW5kbGU7CiAgICAgICAgIHByaXZhdGUgVVJMIHVybDsKQEAgLTE2MiwxMSArMTYxLDE2IEBACiAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgIGxvYWRDbGFzcygpOwogICAgICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWdub3JlIAorICAgICAgICAgICAgICAgIC8vIElnbm9yZQogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIChqYXZhQ2xhc3MgIT0gbnVsbCAmJiBzZXJ2aWNlVHlwZS5pc0Fzc2lnbmFibGVGcm9tKGphdmFDbGFzcykpOwogICAgICAgICB9CiAKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBFbnVtZXJhdGlvbjxVUkw+IGdldFJlc291cmNlcyhmaW5hbCBTdHJpbmcgbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHJldHVybiAoRW51bWVyYXRpb248VVJMPikgYnVuZGxlLmdldFJlc291cmNlcyhuYW1lKTsKKyAgICAgICAgfQorCiAgICAgfQogCiAgICAgLyoqCkBAIC0yMDEsNyArMjA1LDYgQEAKIAogICAgIH0KIAotCiAgICAgcHVibGljIFNlcnZpY2VEZWNsYXJhdGlvbiBnZXRTZXJ2aWNlRGVjbGFyYXRpb24oU3RyaW5nIG5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAgICAgICAgIENvbGxlY3Rpb248U2VydmljZURlY2xhcmF0aW9uPiBkZWNsYXJhdGlvbnMgPSBnZXRTZXJ2aWNlRGVjbGFyYXRpb25zKG5hbWUpOwogICAgICAgICBpZiAoZGVjbGFyYXRpb25zLmlzRW1wdHkoKSkgewpAQCAtMjEwLDEzICsyMTMsMTMgQEAKICAgICAgICAgICAgIHJldHVybiBkZWNsYXJhdGlvbnMuaXRlcmF0b3IoKS5uZXh0KCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIGJvb2xlYW4gaXNQcm92aWRlckJ1bmRsZShCdW5kbGUgYnVuZGxlLCBib29sZWFuIGlzVHVzY2FueVNlcnZpY2UpIHsKICAgICAgICAgaWYgKGJ1bmRsZS5nZXRCdW5kbGVJZCgpID09IDAgfHwgYnVuZGxlLmdldFN5bWJvbGljTmFtZSgpLnN0YXJ0c1dpdGgoIjEueC1vc2dpLWJ1bmRsZSIpCiAgICAgICAgICAgICB8fCBidW5kbGUuZ2V0SGVhZGVycygpLmdldChDb25zdGFudHMuRlJBR01FTlRfSE9TVCkgIT0gbnVsbCkgewogICAgICAgICAgICAgLy8gU2tpcCBzeXN0ZW0gYnVuZGxlIGFzIGl0IGhhcyBhY2Nlc3MgdG8gdGhlIGFwcGxpY2F0aW9uIGNsYXNzbG9hZGVyCiAgICAgICAgICAgICAvLyBTa2lwIHRoZSAxLnggcnVudGltZSBidW5kbGUgYXMgdGhpcyBoYXMgMS54IHNlcnZpY2VzIGluIGl0Ci0gICAgICAgICAgICAvLyAgICBGb3IgdGVzdGluZyBydW5uaW5nIDEueCBhbmQgMi54IGluIHNhbWUgVk0uIAorICAgICAgICAgICAgLy8gICAgRm9yIHRlc3RpbmcgcnVubmluZyAxLnggYW5kIDIueCBpbiBzYW1lIFZNLgogICAgICAgICAgICAgLy8gICAgRG9uJ3Qga25vdyB3aGF0IGZpbmFsIGZvcm0gd2lsbCBiZSB5ZXQuCiAgICAgICAgICAgICAvLyBTa2lwIGJ1bmRsZSBmcmFnbWVudHMgdG9vCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMzEsNyArMjM0LDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICBwcm90ZWN0ZWQgQ29sbGVjdGlvbjxCdW5kbGU+IGdldEJ1bmRsZXMoYm9vbGVhbiBpc1R1c2NhbnlTZXJ2aWNlKSB7CiAgICAgICAgIC8vIHJldHVybiBidW5kbGVzLmtleVNldCgpOwogICAgICAgICBTZXQ8QnVuZGxlPiBzZXQgPSBuZXcgSGFzaFNldDxCdW5kbGU+KCk7CkBAIC0yNTcsMTQgKzI2MCwyMSBAQAogICAgICAgICAvLyBodHRwOi8vamF2YS5zdW4uY29tL2oyc2UvMS41LjAvZG9jcy9hcGkvamF2YXgveG1sL3hwYXRoL1hQYXRoRmFjdG9yeS5odG1sCiAgICAgICAgIGJvb2xlYW4gaXNQcm9wZXJ0eUZpbGUgPSAiamF2YXgueG1sLnhwYXRoLlhQYXRoRmFjdG9yeSIuZXF1YWxzKHNlcnZpY2VOYW1lKTsKICAgICAgICAgYm9vbGVhbiBpc1R1c2NhbnlTZXJ2aWNlID0gc2VydmljZU5hbWUuc3RhcnRzV2l0aCgib3JnLmFwYWNoZS50dXNjYW55LnNjYS4iKTsKLSAgICAgICAgc2VydmljZU5hbWUgPSAiTUVUQS1JTkYvc2VydmljZXMvIiArIHNlcnZpY2VOYW1lOworCisgICAgICAgIGlmIChzZXJ2aWNlTmFtZS5zdGFydHNXaXRoKCIvIikpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBzZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggLywgdHJlYXQgaXQgYXMgdGhlIGVudHJ5IG5hbWUKKyAgICAgICAgICAgIHNlcnZpY2VOYW1lID0gc2VydmljZU5hbWUuc3Vic3RyaW5nKDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVXNlIEpESyBTUEkgcGF0dGVybgorICAgICAgICAgICAgc2VydmljZU5hbWUgPSAiTUVUQS1JTkYvc2VydmljZXMvIiArIHNlcnZpY2VOYW1lOworICAgICAgICB9CiAKICAgICAgICAgU2V0PFVSTD4gdmlzaXRlZCA9IG5ldyBIYXNoU2V0PFVSTD4oKTsKICAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIj4+Pj4gZ2V0U2VydmljZURlY2xhcmF0aW9ucygpIik7CiAgICAgICAgIGZvciAoQnVuZGxlIGJ1bmRsZSA6IGdldEJ1bmRsZXMoaXNUdXNjYW55U2VydmljZSkpIHsKLS8vICAgICAgICAgICAgaWYgKCFpc1Byb3ZpZGVyQnVuZGxlKGJ1bmRsZSkpIHsKLS8vICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotLy8gICAgICAgICAgICB9CisgICAgICAgICAgICAvLyAgICAgICAgICAgIGlmICghaXNQcm92aWRlckJ1bmRsZShidW5kbGUpKSB7CisgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIC8vICAgICAgICAgICAgfQogICAgICAgICAgICAgRW51bWVyYXRpb248VVJMPiB1cmxzID0gbnVsbDsKICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgLy8gVXNlIGdldFJlc291cmNlcyB0byBmaW5kIHJlc291cmNlcyBvbiB0aGUgY2xhc3NwYXRoIG9mIHRoZSBidW5kbGUKQEAgLTI3OCwxNyArMjg4LDE3IEBACiAgICAgICAgICAgICAgICAgaWYgKHVybHMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICBVUkwgZW50cnkgPSBidW5kbGUuZ2V0RW50cnkoc2VydmljZU5hbWUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnkgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIlVucmVzb2x2ZWQgcmVzb3VyY2UgIiArIHNlcnZpY2VOYW1lICsgIiBmb3VuZCBpbiAiICsgdG9TdHJpbmcoYnVuZGxlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiVW5yZXNvbHZlZCByZXNvdXJjZSAiICsgc2VydmljZU5hbWUgKyAiIGZvdW5kIGluIGJ1bmRsZTogIiArIHRvU3RyaW5nKGJ1bmRsZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGUuc3RhcnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIubG9nKExldmVsLlNFVkVSRSwgIkJ1bmRsZTogIiArIGJ1bmRsZS5nZXRTeW1ib2xpY05hbWUoKSArICIgLSAiICsgZS5nZXRNZXNzYWdlKCksIGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXJscyA9IENvbGxlY3Rpb25zLmVudW1lcmF0aW9uKEFycmF5cy5hc0xpc3QoZW50cnkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICBsb2dnZXIubG9nKExldmVsLlNFVkVSRSwgZS5nZXRNZXNzYWdlKCksIGUpOworICAgICAgICAgICAgICAgIGxvZ2dlci5sb2coTGV2ZWwuU0VWRVJFLCAiQnVuZGxlOiAiICsgYnVuZGxlLmdldFN5bWJvbGljTmFtZSgpICsgIiAtICIgKyBlLmdldE1lc3NhZ2UoKSwgZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAodXJscyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMDcsMTcgKzMxNywxOCBAQAogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIGZvciAoTWFwPFN0cmluZywgU3RyaW5nPiBhdHRyaWJ1dGVzIDogU2VydmljZURlY2xhcmF0aW9uUGFyc2VyLmxvYWQodXJsLCBpc1Byb3BlcnR5RmlsZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBhdHRyaWJ1dGVzLmdldCgiY2xhc3MiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VEZWNsYXJhdGlvbkltcGwgZGVzY3JpcHRvciA9IG5ldyBTZXJ2aWNlRGVjbGFyYXRpb25JbXBsKGJ1bmRsZSwgdXJsLCBjbGFzc05hbWUsIGF0dHJpYnV0ZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZURlY2xhcmF0aW9uSW1wbCBkZXNjcmlwdG9yID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2VydmljZURlY2xhcmF0aW9uSW1wbChidW5kbGUsIHVybCwgY2xhc3NOYW1lLCBhdHRyaWJ1dGVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3JzLmFkZChkZXNjcmlwdG9yKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsIGUuZ2V0TWVzc2FnZSgpLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5TRVZFUkUsICJCdW5kbGU6ICIgKyBidW5kbGUuZ2V0U3ltYm9saWNOYW1lKCkgKyAiIC0gIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBDbGFzc0xvYWRlciBnZXRDb250ZXh0Q2xhc3NMb2FkZXIoKSB7CiAgICAgICAgIC8vIEdldCB0aGUgYnVuZGxlIGNsYXNzbG9hZGVyIGZvciB0aGUgZXh0ZW5zaWJpbGl0eSBidW5kbGUgdGhhdCBoYXMgRHluYW1pY0ltcG9ydC1QYWNrYWdlICoKICAgICAgICAgcmV0dXJuIGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvZXh0ZW5zaWJpbGl0eS1lcXVpbm94L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9leHRlbnNpYmlsaXR5L2VxdWlub3gvRXF1aW5veFNlcnZpY2VEaXNjb3ZlcmVyVGVzdENhc2UuamF2YSBiL21vZHVsZXMvZXh0ZW5zaWJpbGl0eS1lcXVpbm94L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9leHRlbnNpYmlsaXR5L2VxdWlub3gvRXF1aW5veFNlcnZpY2VEaXNjb3ZlcmVyVGVzdENhc2UuamF2YQppbmRleCAwYjBlNDZmLi43MmMyNTQyIDEwMDY0NAotLS0gYS9tb2R1bGVzL2V4dGVuc2liaWxpdHktZXF1aW5veC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZXh0ZW5zaWJpbGl0eS9lcXVpbm94L0VxdWlub3hTZXJ2aWNlRGlzY292ZXJlclRlc3RDYXNlLmphdmEKKysrIGIvbW9kdWxlcy9leHRlbnNpYmlsaXR5LWVxdWlub3gvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvZXF1aW5veC9FcXVpbm94U2VydmljZURpc2NvdmVyZXJUZXN0Q2FzZS5qYXZhCkBAIC0xMTEsNiArMTExLDEyIEBACiAgICAgICAgIGRlc2NyaXB0b3JzID0gZGlzY292ZXJlci5nZXRTZXJ2aWNlRGVjbGFyYXRpb25zKCJub3R0aGVyZSIpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDAsIGRlc2NyaXB0b3JzLnNpemUoKSk7CiAgICAgfQorICAgIAorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdERpc2NvdmVyUmVzb3VyY2VzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgQ29sbGVjdGlvbjxTZXJ2aWNlRGVjbGFyYXRpb24+IGRlc2NyaXB0b3JzID0gZGlzY292ZXJlci5nZXRTZXJ2aWNlRGVjbGFyYXRpb25zKCIvTUVUQS1JTkYvc2VydmljZXMvdGVzdC5UZXN0U2VydmljZSIpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIsIGRlc2NyaXB0b3JzLnNpemUoKSk7CisgICAgfQogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RGlzY292ZXJ5Rmlyc3QoKSB0aHJvd3MgSU9FeGNlcHRpb24gewpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9leHRlbnNpYmlsaXR5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9leHRlbnNpYmlsaXR5L0NsYXNzTG9hZGVyQ29udGV4dC5qYXZhIGIvbW9kdWxlcy9leHRlbnNpYmlsaXR5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9leHRlbnNpYmlsaXR5L0NsYXNzTG9hZGVyQ29udGV4dC5qYXZhCmluZGV4IGYxNWU4OTcuLjU5OGM4OTcgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvZXh0ZW5zaWJpbGl0eS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZXh0ZW5zaWJpbGl0eS9DbGFzc0xvYWRlckNvbnRleHQuamF2YQorKysgYi9tb2R1bGVzL2V4dGVuc2liaWxpdHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvQ2xhc3NMb2FkZXJDb250ZXh0LmphdmEKQEAgLTYsMjQgKzYsMjcgQEAKICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAorICoKICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKKyAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5leHRlbnNpYmlsaXR5OwogCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5Qcml2aWxlZ2VkQWN0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuUHJpdmlsZWdlZEFjdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRFeGNlcHRpb25BY3Rpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZXh0ZW5zaWJpbGl0eS5pbXBsLkNsYXNzTG9hZGVyRGVsZWdhdGU7CkBAIC0xMDgsMTAgKzExMSwxMCBAQAogCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSB0aHJlYWQgY29udGV4dCBjbGFzc2xvYWRlciAoVENDTCkgdG8gYSBjbGFzc2xvYWRlciB0aGF0IGRlbGVnYXRlcyB0byBhIGNvbGxlY3Rpb24KLSAgICAgKiBvZiBjbGFzc2xvYWRlcnMgCisgICAgICogb2YgY2xhc3Nsb2FkZXJzCiAgICAgICogQHBhcmFtIHBhcmVudCBUaGUgcGFyZW50IGNsYXNzbG9hZGVyCiAgICAgICogQHBhcmFtIGRlbGVnYXRlcyBBIGxpc3Qgb2YgY2xhc3Nsb2FkZXJzIHRvIHRyeQotICAgICAqIEByZXR1cm4gVGhlIGV4aXN0aW5nIFRDQ0wgCisgICAgICogQHJldHVybiBUaGUgZXhpc3RpbmcgVENDTAogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgQ2xhc3NMb2FkZXIgc2V0Q29udGV4dENsYXNzTG9hZGVyKENsYXNzTG9hZGVyIHBhcmVudCwgQ2xhc3NMb2FkZXIuLi4gZGVsZWdhdGVzKSB7CiAgICAgICAgIENsYXNzTG9hZGVyQ29udGV4dCBjb250ZXh0ID0gbmV3IENsYXNzTG9hZGVyQ29udGV4dChwYXJlbnQsIGRlbGVnYXRlcyk7CkBAIC0xMjQsNyArMTI3LDkgQEAKICAgICAgKiBAcGFyYW0gc2VydmljZU5hbWVzIEEgbGlzdCBvZiBzZXJ2aWNlIHByb3ZpZGVyIG5hbWVzCiAgICAgICogQHJldHVybiBUaGUgb2xkIFRDQ0wgaWYgYSBuZXcgb25lIGlzIHNldCwgb3RoZXJ3aXNlIG51bGwKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIENsYXNzTG9hZGVyIHNldENvbnRleHRDbGFzc0xvYWRlcihDbGFzc0xvYWRlciBwYXJlbnQsIFNlcnZpY2VEaXNjb3ZlcnkgZGlzY292ZXJ5LCBTdHJpbmcuLi4gc2VydmljZU5hbWVzKSB7CisgICAgcHVibGljIHN0YXRpYyBDbGFzc0xvYWRlciBzZXRDb250ZXh0Q2xhc3NMb2FkZXIoQ2xhc3NMb2FkZXIgcGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VEaXNjb3ZlcnkgZGlzY292ZXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZy4uLiBzZXJ2aWNlTmFtZXMpIHsKICAgICAgICAgQ2xhc3NMb2FkZXJDb250ZXh0IGNvbnRleHQgPSBuZXcgQ2xhc3NMb2FkZXJDb250ZXh0KHBhcmVudCwgZGlzY292ZXJ5LCBzZXJ2aWNlTmFtZXMpOwogICAgICAgICByZXR1cm4gY29udGV4dC5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKICAgICB9CkBAIC0xMzUsNyArMTQwLDkgQEAKICAgICAgKiBAcGFyYW0gc2VydmljZU5hbWVzIEEgbGlzdCBvZiBzZXJ2aWNlIHByb3ZpZGVyIG5hbWVzCiAgICAgICogQHJldHVybiBUaGUgb2xkIFRDQ0wgaWYgYSBuZXcgb25lIGlzIHNldCwgb3RoZXJ3aXNlIG51bGwKICAgICAgKi8KLSAgICBwdWJsaWMgc3RhdGljIENsYXNzTG9hZGVyIHNldENvbnRleHRDbGFzc0xvYWRlcihDbGFzc0xvYWRlciBwYXJlbnQsIFNlcnZpY2VEaXNjb3ZlcnkgZGlzY292ZXJ5LCBDbGFzczw/Pi4uLiBzZXJ2aWNlVHlwZXMpIHsKKyAgICBwdWJsaWMgc3RhdGljIENsYXNzTG9hZGVyIHNldENvbnRleHRDbGFzc0xvYWRlcihDbGFzc0xvYWRlciBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VydmljZURpc2NvdmVyeSBkaXNjb3ZlcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4uLi4gc2VydmljZVR5cGVzKSB7CiAgICAgICAgIENsYXNzTG9hZGVyQ29udGV4dCBjb250ZXh0ID0gbmV3IENsYXNzTG9hZGVyQ29udGV4dChwYXJlbnQsIGRpc2NvdmVyeSwgc2VydmljZVR5cGVzKTsKICAgICAgICAgcmV0dXJuIGNvbnRleHQuc2V0Q29udGV4dENsYXNzTG9hZGVyKCk7CiAgICAgfQpAQCAtMTU0LDcgKzE2MSwxNSBAQAogICAgICAgICB0cnkgewogICAgICAgICAgICAgU2VydmljZURlY2xhcmF0aW9uIHNkID0gZGlzY292ZXJ5LmdldFNlcnZpY2VEZWNsYXJhdGlvbihzZXJ2aWNlUHJvdmlkZXIpOwogICAgICAgICAgICAgaWYgKHNkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2QubG9hZENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBpZiAoc2QubG9hZENsYXNzKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNkLmxvYWRDbGFzcygpLmdldENsYXNzTG9hZGVyKCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENsYXNzTG9hZGVySW1wbChzZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDbGFzc0xvYWRlckltcGwoc2QpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIElnbm9yZQpAQCAtMTk1LDcgKzIxMCw3IEBACiAgICAgICAgIExpc3Q8Q2xhc3NMb2FkZXI+IGxvYWRlcnMgPSBuZXcgQXJyYXlMaXN0PENsYXNzTG9hZGVyPigpOwogICAgICAgICBmb3IgKENsYXNzPD8+IHNlcnZpY2VUeXBlIDogc2VydmljZVR5cGVzKSB7CiAgICAgICAgICAgICBDbGFzc0xvYWRlciBjbGFzc0xvYWRlciA9IGdldENsYXNzTG9hZGVyKGRpc2NvdmVyeSwgc2VydmljZVR5cGUpOwotICAgICAgICAgICAgaWYgKGNsYXNzTG9hZGVyICE9IG51bGwgJiYgbG9hZGVycy5jb250YWlucyhjbGFzc0xvYWRlcikpIHsKKyAgICAgICAgICAgIGlmIChjbGFzc0xvYWRlciAhPSBudWxsICYmICFsb2FkZXJzLmNvbnRhaW5zKGNsYXNzTG9hZGVyKSkgewogICAgICAgICAgICAgICAgIGxvYWRlcnMuYWRkKGNsYXNzTG9hZGVyKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjEwLDQgKzIyNSwyOSBAQAogICAgICAgICByZXR1cm4gY2xhc3NMb2FkZXI7CiAgICAgfQogCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQ2xhc3NMb2FkZXJJbXBsIGV4dGVuZHMgQ2xhc3NMb2FkZXIgeworICAgICAgICBwcml2YXRlIGZpbmFsIFNlcnZpY2VEZWNsYXJhdGlvbiBzZDsKKworICAgICAgICBwdWJsaWMgQ2xhc3NMb2FkZXJJbXBsKFNlcnZpY2VEZWNsYXJhdGlvbiBzZCkgeworICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgICAgIHRoaXMuc2QgPSBzZDsKKyAgICAgICAgfQorCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgQ2xhc3M8Pz4gZmluZENsYXNzKFN0cmluZyBuYW1lKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgICAgICByZXR1cm4gc2QubG9hZENsYXNzKG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBVUkwgZmluZFJlc291cmNlKFN0cmluZyBuYW1lKSB7CisgICAgICAgICAgICByZXR1cm4gc2QuZ2V0UmVzb3VyY2UobmFtZSk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIEVudW1lcmF0aW9uPFVSTD4gZmluZFJlc291cmNlcyhTdHJpbmcgbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgICAgIHJldHVybiBzZC5nZXRSZXNvdXJjZXMobmFtZSk7CisgICAgICAgIH0KKworICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9leHRlbnNpYmlsaXR5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9leHRlbnNpYmlsaXR5L0NvbnRleHRDbGFzc0xvYWRlclNlcnZpY2VEaXNjb3ZlcmVyLmphdmEgYi9tb2R1bGVzL2V4dGVuc2liaWxpdHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvQ29udGV4dENsYXNzTG9hZGVyU2VydmljZURpc2NvdmVyZXIuamF2YQppbmRleCBlZWM0ZmYxLi5kNDBjMzdlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2V4dGVuc2liaWxpdHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvQ29udGV4dENsYXNzTG9hZGVyU2VydmljZURpc2NvdmVyZXIuamF2YQorKysgYi9tb2R1bGVzL2V4dGVuc2liaWxpdHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvQ29udGV4dENsYXNzTG9hZGVyU2VydmljZURpc2NvdmVyZXIuamF2YQpAQCAtMjgsNiArMjgsNyBAQAogaW1wb3J0IGphdmEuc2VjdXJpdHkuUHJpdmlsZWdlZEV4Y2VwdGlvbkFjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CkBAIC0xMDYsNiArMTA3LDExIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gKGphdmFDbGFzcyAhPSBudWxsICYmIHNlcnZpY2VUeXBlLmlzQXNzaWduYWJsZUZyb20oamF2YUNsYXNzKSk7CiAgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHVibGljIEVudW1lcmF0aW9uPFVSTD4gZ2V0UmVzb3VyY2VzKFN0cmluZyBuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVudW1lcmF0aW9uKENvbnRleHRDbGFzc0xvYWRlclNlcnZpY2VEaXNjb3ZlcmVyLnRoaXMuZ2V0UmVzb3VyY2VzKG5hbWUpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHByaXZhdGUgV2Vha1JlZmVyZW5jZTxDbGFzc0xvYWRlcj4gY2xhc3NMb2FkZXJSZWZlcmVuY2U7CkBAIC0xNTUsNyArMTYxLDE2IEBACiAKICAgICAgICAgLy8gaHR0cDovL2phdmEuc3VuLmNvbS9qMnNlLzEuNS4wL2RvY3MvYXBpL2phdmF4L3htbC94cGF0aC9YUGF0aEZhY3RvcnkuaHRtbAogICAgICAgICBib29sZWFuIGlzUHJvcGVydHlGaWxlID0gImphdmF4LnhtbC54cGF0aC5YUGF0aEZhY3RvcnkiLmVxdWFscyhzZXJ2aWNlTmFtZSk7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gIk1FVEEtSU5GL3NlcnZpY2VzLyIgKyBzZXJ2aWNlTmFtZTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBuYW1lID0gc2VydmljZU5hbWU7CisgICAgICAgIGlmIChzZXJ2aWNlTmFtZS5zdGFydHNXaXRoKCIvIikpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBzZXJ2aWNlIG5hbWUgc3RhcnRzIHdpdGggLywgdHJlYXQgaXQgYXMgdGhlIGVudHJ5IG5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBzZXJ2aWNlTmFtZS5zdWJzdHJpbmcoMSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBVc2UgSkRLIFNQSSBwYXR0ZXJuCisgICAgICAgICAgICBuYW1lID0gIk1FVEEtSU5GL3NlcnZpY2VzLyIgKyBzZXJ2aWNlTmFtZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgYm9vbGVhbiBkZWJ1ZyA9IGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgZm9yIChmaW5hbCBVUkwgdXJsIDogZ2V0UmVzb3VyY2VzKG5hbWUpKSB7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2V4dGVuc2liaWxpdHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvU2VydmljZURlY2xhcmF0aW9uLmphdmEgYi9tb2R1bGVzL2V4dGVuc2liaWxpdHkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvU2VydmljZURlY2xhcmF0aW9uLmphdmEKaW5kZXggNDdhOTFhYS4uMjRiMmMxNyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9leHRlbnNpYmlsaXR5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9leHRlbnNpYmlsaXR5L1NlcnZpY2VEZWNsYXJhdGlvbi5qYXZhCisrKyBiL21vZHVsZXMvZXh0ZW5zaWJpbGl0eS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZXh0ZW5zaWJpbGl0eS9TZXJ2aWNlRGVjbGFyYXRpb24uamF2YQpAQCAtMTksNyArMTksOSBAQAogCiBwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZXh0ZW5zaWJpbGl0eTsKIAoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCiAvKioKQEAgLTY3LDYgKzY5LDcgQEAKICAgICBTdHJpbmcgZ2V0Q2xhc3NOYW1lKCk7CiAgICAgCiAgICAgVVJMIGdldFJlc291cmNlKFN0cmluZyBuYW1lKTsKKyAgICBFbnVtZXJhdGlvbjxVUkw+IGdldFJlc291cmNlcyhTdHJpbmcgbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uOwogICAgIAogICAgIC8qKgogICAgICAqIFRoZSBzZXJ2aWNlIGRlc2NyaXB0b3IgbWlnaHQgYmUgaGFzaGVkCmRpZmYgLS1naXQgYS9tb2R1bGVzL2V4dGVuc2liaWxpdHkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvQ29udGV4dENsYXNzTG9hZGVyU2VydmljZURpc2NvdmVyZXJUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9leHRlbnNpYmlsaXR5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9leHRlbnNpYmlsaXR5L0NvbnRleHRDbGFzc0xvYWRlclNlcnZpY2VEaXNjb3ZlcmVyVGVzdENhc2UuamF2YQppbmRleCBjMGFhYzIxLi42ODY1YmEwIDEwMDY0NAotLS0gYS9tb2R1bGVzL2V4dGVuc2liaWxpdHkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2V4dGVuc2liaWxpdHkvQ29udGV4dENsYXNzTG9hZGVyU2VydmljZURpc2NvdmVyZXJUZXN0Q2FzZS5qYXZhCisrKyBiL21vZHVsZXMvZXh0ZW5zaWJpbGl0eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvZXh0ZW5zaWJpbGl0eS9Db250ZXh0Q2xhc3NMb2FkZXJTZXJ2aWNlRGlzY292ZXJlclRlc3RDYXNlLmphdmEKQEAgLTUyLDYgKzUyLDEyIEBACiAgICAgfQogCiAgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGlzY292ZXJSZXNvdXJjZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBDb2xsZWN0aW9uPFNlcnZpY2VEZWNsYXJhdGlvbj4gZGVzY3JpcHRvcnMgPSBkaXNjb3Zlci5nZXRTZXJ2aWNlRGVjbGFyYXRpb25zKCIvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5leHRlbnNpYmlsaXR5LnRlc3QuVGVzdEludGVyZmFjZSIpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMsIGRlc2NyaXB0b3JzLnNpemUoKSk7CisgICAgfQorICAgIAorICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdERpc2NvdmVyeUZpcnN0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKICAgICAgICAgU2VydmljZURlY2xhcmF0aW9uIGRlc2NyaXB0b3IgPQogICAgICAgICAgICAgZGlzY292ZXIuZ2V0U2VydmljZURlY2xhcmF0aW9uKCJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuTW9kdWxlQWN0aXZhdG9yRXh0ZW5zaW9uUG9pbnQiKTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvaG9zdC1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ob3N0L2h0dHAvRGVmYXVsdFNlcnZsZXRIb3N0RXh0ZW5zaW9uUG9pbnQuamF2YSBiL21vZHVsZXMvaG9zdC1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ob3N0L2h0dHAvRGVmYXVsdFNlcnZsZXRIb3N0RXh0ZW5zaW9uUG9pbnQuamF2YQppbmRleCAzMTQ1ZTkwLi44ZWNiODFmIDEwMDY0NAotLS0gYS9tb2R1bGVzL2hvc3QtaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaG9zdC9odHRwL0RlZmF1bHRTZXJ2bGV0SG9zdEV4dGVuc2lvblBvaW50LmphdmEKKysrIGIvbW9kdWxlcy9ob3N0LWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2hvc3QvaHR0cC9EZWZhdWx0U2VydmxldEhvc3RFeHRlbnNpb25Qb2ludC5qYXZhCkBAIC0yNyw2ICsyNyw3IEBACiAKIGltcG9ydCBqYXZheC5zZXJ2bGV0LlJlcXVlc3REaXNwYXRjaGVyOwogaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0OwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkxpZmVDeWNsZUxpc3RlbmVyOwpAQCAtMTczLDYgKzE3NCwxMSBAQAogICAgICAgICBwdWJsaWMgdm9pZCBzdG9wKCkgewogICAgICAgICAgICAgU2VydmljZUhlbHBlci5zdG9wKGhvc3QpOwogICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHB1YmxpYyBTZXJ2bGV0Q29udGV4dCBnZXRTZXJ2bGV0Q29udGV4dCgpIHsKKyAgICAgICAgICAgIHJldHVybiBnZXRTZXJ2bGV0SG9zdCgpLmdldFNlcnZsZXRDb250ZXh0KCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwdWJsaWMgdm9pZCBzdGFydCgpIHsKZGlmZiAtLWdpdCBhL21vZHVsZXMvaG9zdC1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ob3N0L2h0dHAvRXh0ZW5zaWJsZVNlcnZsZXRIb3N0LmphdmEgYi9tb2R1bGVzL2hvc3QtaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaG9zdC9odHRwL0V4dGVuc2libGVTZXJ2bGV0SG9zdC5qYXZhCmluZGV4IDFiNjM5MDQuLjEwN2I2YjMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaG9zdC1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ob3N0L2h0dHAvRXh0ZW5zaWJsZVNlcnZsZXRIb3N0LmphdmEKKysrIGIvbW9kdWxlcy9ob3N0LWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2hvc3QvaHR0cC9FeHRlbnNpYmxlU2VydmxldEhvc3QuamF2YQpAQCAtMjQsNiArMjQsNyBAQAogCiBpbXBvcnQgamF2YXguc2VydmxldC5SZXF1ZXN0RGlzcGF0Y2hlcjsKIGltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5VdGlsaXR5RXh0ZW5zaW9uUG9pbnQ7CkBAIC0xMzEsNCArMTMyLDkgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBnZXREZWZhdWx0U2VydmxldEhvc3QoKS5nZXROYW1lKCk7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFNlcnZsZXRDb250ZXh0IGdldFNlcnZsZXRDb250ZXh0KCkgeworICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdFNlcnZsZXRIb3N0KCkuZ2V0U2VydmxldENvbnRleHQoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2hvc3QtaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaG9zdC9odHRwL1NlcnZsZXRIb3N0LmphdmEgYi9tb2R1bGVzL2hvc3QtaHR0cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaG9zdC9odHRwL1NlcnZsZXRIb3N0LmphdmEKaW5kZXggNmIzODU1OS4uZjcwYTZlZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9ob3N0LWh0dHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2hvc3QvaHR0cC9TZXJ2bGV0SG9zdC5qYXZhCisrKyBiL21vZHVsZXMvaG9zdC1odHRwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ob3N0L2h0dHAvU2VydmxldEhvc3QuamF2YQpAQCAtMjIsNiArMjIsNyBAQAogCiBpbXBvcnQgamF2YXguc2VydmxldC5SZXF1ZXN0RGlzcGF0Y2hlcjsKIGltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKIAogLyoqCiAgKiBJbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgaG9zdCBlbnZpcm9ubWVudHMgdGhhdCBhbGxvdyBTZXJ2bGV0cyB0byBiZQpAQCAtMzUsNiArMzYsOCBAQAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFNlcnZsZXRIb3N0IHsKICAgICAKKyAgICBTZXJ2bGV0Q29udGV4dCBnZXRTZXJ2bGV0Q29udGV4dCgpOworICAgIAogICAgIC8qKgogICAgICAqIFNldHMgdGhlIGRlZmF1bHQgcG9ydCBmb3IgdGhlIHNlcnZlci4KICAgICAgKiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvaG9zdC1qZXR0eS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaHR0cC9qZXR0eS9KZXR0eVNlcnZlci5qYXZhIGIvbW9kdWxlcy9ob3N0LWpldHR5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9odHRwL2pldHR5L0pldHR5U2VydmVyLmphdmEKaW5kZXggYmExMzFlMC4uYWE1MzgxNSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9ob3N0LWpldHR5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9odHRwL2pldHR5L0pldHR5U2VydmVyLmphdmEKKysrIGIvbW9kdWxlcy9ob3N0LWpldHR5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9odHRwL2pldHR5L0pldHR5U2VydmVyLmphdmEKQEAgLTMyLDEyICszMiwxMyBAQAogaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwLkVudHJ5OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CiBpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwogCiBpbXBvcnQgamF2YXguc2VydmxldC5SZXF1ZXN0RGlzcGF0Y2hlcjsKIGltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXQ7CitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKIGltcG9ydCBqYXZheC5zZXJ2bGV0LlNlcnZsZXRFeGNlcHRpb247CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKQEAgLTgwLDcgKzgxLDcgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBzZW5kU2VydmVyVmVyc2lvbjsKICAgICBwcml2YXRlIFdvcmtTY2hlZHVsZXIgd29ya1NjaGVkdWxlcjsKLSAgICAKKwogICAgIC8vIFRPRE8gLSB0aGlzIHN0YXRpYyBzZWVtcyB0byBiZSBzZXQgYnkgdGhlIEpTT1JQQyBiaW5kaW5nIHVuaXQgdGVzdAogICAgIC8vICAgICAgICBkb2Vzbid0IGxvb2sgdG8gYmUgYSBncmVhdCB3YXkgb2YgZG9pbmcgdGhpbmdzCiAgICAgcHVibGljIHN0YXRpYyBpbnQgcG9ydERlZmF1bHQgPSA4MDgwOwpAQCAtMTMwLDEyICsxMzEsMTIgQEAKICAgICAgICAgICAgICAgICBrZXlTdG9yZVR5cGUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmF4Lm5ldC5zc2wua2V5U3RvcmVUeXBlIiwgS2V5U3RvcmUuZ2V0RGVmYXVsdFR5cGUoKSk7CiAgICAgICAgICAgICAgICAgdHJ1c3RTdG9yZVR5cGUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVR5cGUiLCBLZXlTdG9yZS5nZXREZWZhdWx0VHlwZSgpKTsKIAotICAgICAgICAgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiSkVUVFlfTk9fU0hVVERPV05fSE9PSyIsICJ0cnVlIik7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN5c3RlbS5zZXRQcm9wZXJ0eSgiSkVUVFlfTk9fU0hVVERPV05fSE9PSyIsICJ0cnVlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuICJqZXR0eSI7CiAgICAgfQpAQCAtMTgxLDExICsxODIsMTQgQEAKICAgICBwcml2YXRlIHZvaWQgY29uZmlndXJlU1NMKFNzbFNvY2tldENvbm5lY3RvciBjb25uZWN0b3IsIFNlY3VyaXR5Q29udGV4dCBzZWN1cml0eUNvbnRleHQpIHsKICAgICAgICAgY29ubmVjdG9yLnNldFByb3RvY29sKCJUTFMiKTsKICAgICAgICAgaWYgKHNlY3VyaXR5Q29udGV4dCAhPSBudWxsKSB7Ci0gICAgICAgICAgICBrZXlTdG9yZVR5cGUgPSBzZWN1cml0eUNvbnRleHQuZ2V0U1NMUHJvcGVydGllcygpLmdldFByb3BlcnR5KCJqYXZheC5uZXQuc3NsLmtleVN0b3JlVHlwZSIsIEtleVN0b3JlLmdldERlZmF1bHRUeXBlKCkpOworICAgICAgICAgICAga2V5U3RvcmVUeXBlID0KKyAgICAgICAgICAgICAgICBzZWN1cml0eUNvbnRleHQuZ2V0U1NMUHJvcGVydGllcygpLmdldFByb3BlcnR5KCJqYXZheC5uZXQuc3NsLmtleVN0b3JlVHlwZSIsIEtleVN0b3JlLmdldERlZmF1bHRUeXBlKCkpOwogICAgICAgICAgICAga2V5U3RvcmUgPSBzZWN1cml0eUNvbnRleHQuZ2V0U1NMUHJvcGVydGllcygpLmdldFByb3BlcnR5KCJqYXZheC5uZXQuc3NsLmtleVN0b3JlIik7CiAgICAgICAgICAgICBrZXlTdG9yZVBhc3N3b3JkID0gc2VjdXJpdHlDb250ZXh0LmdldFNTTFByb3BlcnRpZXMoKS5nZXRQcm9wZXJ0eSgiamF2YXgubmV0LnNzbC5rZXlTdG9yZVBhc3N3b3JkIik7CiAKLSAgICAgICAgICAgIHRydXN0U3RvcmVUeXBlID0gc2VjdXJpdHlDb250ZXh0LmdldFNTTFByb3BlcnRpZXMoKS5nZXRQcm9wZXJ0eSgiamF2YXgubmV0LnNzbC50cnVzdFN0b3JlVHlwZSIsIEtleVN0b3JlLmdldERlZmF1bHRUeXBlKCkpOworICAgICAgICAgICAgdHJ1c3RTdG9yZVR5cGUgPQorICAgICAgICAgICAgICAgIHNlY3VyaXR5Q29udGV4dC5nZXRTU0xQcm9wZXJ0aWVzKCkuZ2V0UHJvcGVydHkoImphdmF4Lm5ldC5zc2wudHJ1c3RTdG9yZVR5cGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5U3RvcmUuZ2V0RGVmYXVsdFR5cGUoKSk7CiAgICAgICAgICAgICB0cnVzdFN0b3JlID0gc2VjdXJpdHlDb250ZXh0LmdldFNTTFByb3BlcnRpZXMoKS5nZXRQcm9wZXJ0eSgiamF2YXgubmV0LnNzbC50cnVzdFN0b3JlIik7CiAgICAgICAgICAgICB0cnVzdFN0b3JlUGFzc3dvcmQgPSBzZWN1cml0eUNvbnRleHQuZ2V0U1NMUHJvcGVydGllcygpLmdldFByb3BlcnR5KCJqYXZheC5uZXQuc3NsLnRydXN0U3RvcmVQYXNzd29yZCIpOwogICAgICAgICB9CkBAIC0yMDMsMzAgKzIwNywzMSBAQAogICAgICAgICB9CiAKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGFkZFNlcnZsZXRNYXBwaW5nKFN0cmluZyBzdXJpLCBTZXJ2bGV0IHNlcnZsZXQpIHRocm93cyBTZXJ2bGV0TWFwcGluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBhZGRTZXJ2bGV0TWFwcGluZyhzdXJpLCBzZXJ2bGV0LCBudWxsKTsKLSAgICB9ICAgIAorICAgIH0KIAotICAgIHB1YmxpYyBTdHJpbmcgYWRkU2VydmxldE1hcHBpbmcoU3RyaW5nIHN1cmksIFNlcnZsZXQgc2VydmxldCwgZmluYWwgU2VjdXJpdHlDb250ZXh0IHNlY3VyaXR5Q29udGV4dCkgdGhyb3dzIFNlcnZsZXRNYXBwaW5nRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgU3RyaW5nIGFkZFNlcnZsZXRNYXBwaW5nKFN0cmluZyBzdXJpLCBTZXJ2bGV0IHNlcnZsZXQsIGZpbmFsIFNlY3VyaXR5Q29udGV4dCBzZWN1cml0eUNvbnRleHQpCisgICAgICAgIHRocm93cyBTZXJ2bGV0TWFwcGluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIFVSSSB1cmkgPSBVUkkuY3JlYXRlKHN1cmkpOwogCiAgICAgICAgIC8vIEdldCB0aGUgVVJJIHNjaGVtZSBhbmQgcG9ydAogICAgICAgICBTdHJpbmcgc2NoZW1lID0gbnVsbDsKLSAgICAgICAgaWYoc2VjdXJpdHlDb250ZXh0ICE9IG51bGwgJiYgc2VjdXJpdHlDb250ZXh0LmlzU1NMRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChzZWN1cml0eUNvbnRleHQgIT0gbnVsbCAmJiBzZWN1cml0eUNvbnRleHQuaXNTU0xFbmFibGVkKCkpIHsKICAgICAgICAgICAgIHNjaGVtZSA9ICJodHRwcyI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzY2hlbWUgPSB1cmkuZ2V0U2NoZW1lKCk7CiAgICAgICAgICAgICBpZiAoc2NoZW1lID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBzY2hlbWUgPSAiaHR0cCI7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIGhvc3QgPSB1cmkuZ2V0SG9zdCgpOwogICAgICAgICBpZiAoIjAuMC4wLjAiLmVxdWFscyhob3N0KSkgewogICAgICAgICAgICAgaG9zdCA9IG51bGw7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaW50IHBvcnROdW1iZXIgPSB1cmkuZ2V0UG9ydCgpOwogICAgICAgICBpZiAocG9ydE51bWJlciA9PSAtMSkgewogICAgICAgICAgICAgaWYgKCJodHRwIi5lcXVhbHMoc2NoZW1lKSkgewpAQCAtMzUwLDIxICszNTUsMjEgQEAKICAgICBwdWJsaWMgVVJMIGdldFVSTE1hcHBpbmcoU3RyaW5nIHN1cmksIFNlY3VyaXR5Q29udGV4dCBzZWN1cml0eUNvbnRleHQpIHRocm93cyBTZXJ2bGV0TWFwcGluZ0V4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBtYXAoc3VyaSwgc2VjdXJpdHlDb250ZXh0LCB0cnVlKTsKICAgICB9Ci0gICAgCisKICAgICBwcml2YXRlIFVSTCBtYXAoU3RyaW5nIHN1cmksIFNlY3VyaXR5Q29udGV4dCBzZWN1cml0eUNvbnRleHQsIGJvb2xlYW4gcmVzb2x2ZSkgdGhyb3dzIFNlcnZsZXRNYXBwaW5nRXhjZXB0aW9uIHsKICAgICAgICAgVVJJIHVyaSA9IFVSSS5jcmVhdGUoc3VyaSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEdldCB0aGUgVVJJIHNjaGVtZSBhbmQgcG9ydAogICAgICAgICBTdHJpbmcgc2NoZW1lID0gbnVsbDsKLSAgICAgICAgaWYoc2VjdXJpdHlDb250ZXh0ICE9IG51bGwgJiYgc2VjdXJpdHlDb250ZXh0LmlzU1NMRW5hYmxlZCgpKSB7CisgICAgICAgIGlmIChzZWN1cml0eUNvbnRleHQgIT0gbnVsbCAmJiBzZWN1cml0eUNvbnRleHQuaXNTU0xFbmFibGVkKCkpIHsKICAgICAgICAgICAgIHNjaGVtZSA9ICJodHRwcyI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzY2hlbWUgPSB1cmkuZ2V0U2NoZW1lKCk7CiAgICAgICAgICAgICBpZiAoc2NoZW1lID09IG51bGwpIHsKICAgICAgICAgICAgICAgICBzY2hlbWUgPSAiaHR0cCI7Ci0gICAgICAgICAgICB9ICAgICAgICAgICAgCisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaW50IHBvcnROdW1iZXIgPSB1cmkuZ2V0UG9ydCgpOwogICAgICAgICBpZiAocG9ydE51bWJlciA9PSAtMSkgewogICAgICAgICAgICAgaWYgKCJodHRwIi5lcXVhbHMoc2NoZW1lKSkgewpAQCAtMzcyLDcgKzM3Nyw3IEBACiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHBvcnROdW1iZXIgPSBkZWZhdWx0U1NMUG9ydDsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgCisgICAgICAgIH0KIAogICAgICAgICAvLyBHZXQgdGhlIGhvc3QKICAgICAgICAgU3RyaW5nIGhvc3QgPSB1cmkuZ2V0SG9zdCgpOwpAQCAtNTc2LDcgKzU4MSwxNiBAQAogICAgICAgICAgICAgTG9nLnNldExvZyhqZXR0eUxvZ2dlcik7CiAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CiAgICAgICAgICAgICAvLyBJZ25vcmUKLSAgICAgICAgfSAKKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTZXJ2bGV0Q29udGV4dCBnZXRTZXJ2bGV0Q29udGV4dCgpIHsKKyAgICAgICAgaWYgKHBvcnRzLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiBwb3J0cy52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKS5nZXRTZXJ2bGV0SGFuZGxlcigpLmdldFNlcnZsZXRDb250ZXh0KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQogICAgIH0KIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9ob3N0LWpldHR5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9odHRwL2pldHR5L0pldHR5U2VydmVyVGVzdENhc2UuamF2YSBiL21vZHVsZXMvaG9zdC1qZXR0eS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaHR0cC9qZXR0eS9KZXR0eVNlcnZlclRlc3RDYXNlLmphdmEKaW5kZXggYTMxOTljZi4uZThjNmJiYSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9ob3N0LWpldHR5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9odHRwL2pldHR5L0pldHR5U2VydmVyVGVzdENhc2UuamF2YQorKysgYi9tb2R1bGVzL2hvc3QtamV0dHkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2h0dHAvamV0dHkvSmV0dHlTZXJ2ZXJUZXN0Q2FzZS5qYXZhCkBAIC0yNyw2ICsyNyw4IEBACiBpbXBvcnQgamF2YS5uZXQuSW5ldEFkZHJlc3M7CiBpbXBvcnQgamF2YS5uZXQuU29ja2V0OwogaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRvclNlcnZpY2U7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JzOwogCiBpbXBvcnQgamF2YXgubmV0LnNzbC5Ib3N0bmFtZVZlcmlmaWVyOwogaW1wb3J0IGphdmF4Lm5ldC5zc2wuSHR0cHNVUkxDb25uZWN0aW9uOwpAQCAtNzAsMTcgKzcyLDE4IEBACiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEhUVFBfUE9SVCA9IDgwODU7CiAKICAgICBwcml2YXRlIFdvcmtTY2hlZHVsZXIgd29ya1NjaGVkdWxlciA9IG5ldyBXb3JrU2NoZWR1bGVyKCkgewotCisgICAgICAgIHByaXZhdGUgRXhlY3V0b3JTZXJ2aWNlIGV4ZWN1dG9yU2VydmljZSA9IEV4ZWN1dG9ycy5uZXdDYWNoZWRUaHJlYWRQb29sKCk7CisgICAgICAgIAogICAgICAgICBwdWJsaWMgPFQgZXh0ZW5kcyBSdW5uYWJsZT4gdm9pZCBzY2hlZHVsZVdvcmsoVCB3b3JrKSB7Ci0gICAgICAgICAgICBUaHJlYWQgdGhyZWFkID0gbmV3IFRocmVhZCh3b3JrKTsKLSAgICAgICAgICAgIHRocmVhZC5zdGFydCgpOworICAgICAgICAgICAgZXhlY3V0b3JTZXJ2aWNlLnN1Ym1pdCh3b3JrKTsKICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYyA8VCBleHRlbmRzIFJ1bm5hYmxlPiB2b2lkIHNjaGVkdWxlV29yayhUIHdvcmssIE5vdGlmaWNhdGlvbkxpc3RlbmVyPFQ+IGxpc3RlbmVyKSB7CiAgICAgICAgICAgICBzY2hlZHVsZVdvcmsod29yayk7CiAgICAgICAgIH0KIAotICAgICAgICBwdWJsaWMgdm9pZCBkZXN0cm95KCkgeworICAgICAgICBwdWJsaWMgRXhlY3V0b3JTZXJ2aWNlIGdldEV4ZWN1dG9yU2VydmljZSgpIHsKKyAgICAgICAgICAgIHJldHVybiBleGVjdXRvclNlcnZpY2U7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0xMjAsNyArMTIzLDkgQEAKICAgICAgICAgU3RyaW5nIHVybDQgPSBzZXJ2aWNlLmFkZFNlcnZsZXRNYXBwaW5nKCJodHRwOi8vMC4wLjAuMDo4MDg4L015U2VydmljZSIsIHNlcnZsZXQpOwogICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJodHRwOi8vIiArIGhvc3QgKyAiOjgwODgvTXlTZXJ2aWNlIiwgdXJsNCk7CiAgICAgICAgIFN0cmluZyB1cmw1ID0gc2VydmljZS5hZGRTZXJ2bGV0TWFwcGluZygiaHR0cDovLyIgKyBob3N0TmFtZSArICI6ODA4OS9NeVNlcnZpY2UiLCBzZXJ2bGV0KTsKLSAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiaHR0cDovLyIgKyBob3N0TmFtZSArICI6ODA4OS9NeVNlcnZpY2UiLCB1cmw1KTsKKyAgICAgICAgLy8gQ2FuJ3QgcmVsaWFibHkgdGVzdCBsaWtlIHRoaXMgYXMgb24gc29tZSBob3N0cyByZWdpc3RlcmluZyBhIHNlcnZsZXQgd2l0aCBhIGhvc3RuYW1lCisgICAgICAgIC8vIHByb2R1Y2VzIGEgdXJsIHdpdGggYW4gSVAgYWRkcmVzcy4KKyAgICAgICAgLy9Bc3NlcnQuYXNzZXJ0RXF1YWxzKCJodHRwOi8vIiArIGhvc3ROYW1lICsgIjo4MDg5L015U2VydmljZSIsIHVybDUpOwogCiAgICAgICAgIHNlcnZpY2Uuc3RvcCgpOwogICAgIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaG9zdC1ybWkvcG9tLnhtbCBiL21vZHVsZXMvaG9zdC1ybWkvcG9tLnhtbAppbmRleCA0MGI1Njg1Li43Njc2ODYwIDEwMDY0NAotLS0gYS9tb2R1bGVzL2hvc3Qtcm1pL3BvbS54bWwKKysrIGIvbW9kdWxlcy9ob3N0LXJtaS9wb20ueG1sCkBAIC0zMSw4ICszMSwxMCBAQAogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1zcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmUtcnVudGltZS1wb208L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPC9kZXBlbmRlbmNpZXM+CiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvaG9zdC13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2hvc3Qvd2ViYXBwL1dlYkFwcENvbnRyaWJ1dGlvblNjYW5uZXIuamF2YSBiL21vZHVsZXMvaG9zdC13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2hvc3Qvd2ViYXBwL1dlYkFwcENvbnRyaWJ1dGlvblNjYW5uZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzU3ODM2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9ob3N0LXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaG9zdC93ZWJhcHAvV2ViQXBwQ29udHJpYnV0aW9uU2Nhbm5lci5qYXZhCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0LndlYmFwcDsKKworaW1wb3J0IGphdmEubmV0LlVSSTsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQ7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5BcnRpZmFjdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5Db250cmlidXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQ29udHJpYnV0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5QYWNrYWdlVHlwZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5zY2FubmVyLkNvbnRyaWJ1dGlvblNjYW5uZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkZhY3RvcnlFeHRlbnNpb25Qb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuVXRpbGl0eUV4dGVuc2lvblBvaW50OworCisvKioKKyAqIAorICovCitwdWJsaWMgY2xhc3MgV2ViQXBwQ29udHJpYnV0aW9uU2Nhbm5lciBpbXBsZW1lbnRzIENvbnRyaWJ1dGlvblNjYW5uZXIgeworICAgIHByaXZhdGUgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQ7CisgICAgcHJpdmF0ZSBDb250cmlidXRpb25GYWN0b3J5IGNvbnRyaWJ1dGlvbkZhY3Rvcnk7CisKKyAgICBwdWJsaWMgV2ViQXBwQ29udHJpYnV0aW9uU2Nhbm5lcihFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRoaXMuc2VydmxldENvbnRleHQgPSByZWdpc3RyeS5nZXRFeHRlbnNpb25Qb2ludChVdGlsaXR5RXh0ZW5zaW9uUG9pbnQuY2xhc3MpLmdldFV0aWxpdHkoU2VydmxldENvbnRleHQuY2xhc3MpOworICAgICAgICB0aGlzLmNvbnRyaWJ1dGlvbkZhY3RvcnkgPQorICAgICAgICAgICAgcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoRmFjdG9yeUV4dGVuc2lvblBvaW50LmNsYXNzKS5nZXRGYWN0b3J5KENvbnRyaWJ1dGlvbkZhY3RvcnkuY2xhc3MpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q29udHJpYnV0aW9uVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIFBhY2thZ2VUeXBlLldBUjsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxBcnRpZmFjdD4gc2NhbihDb250cmlidXRpb24gY29udHJpYnV0aW9uKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBMaXN0PEFydGlmYWN0PiBhcnRpZmFjdHMgPSBuZXcgQXJyYXlMaXN0PEFydGlmYWN0PigpOworICAgICAgICAgICAgVVJMIGxvY2F0aW9uID0gbmV3IFVSTChjb250cmlidXRpb24uZ2V0TG9jYXRpb24oKSk7CisgICAgICAgICAgICBVUkwgcm9vdCA9IHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlKCIvIik7CisgICAgICAgICAgICBVUkkgcmVsYXRpdmUgPSByb290LnRvVVJJKCkucmVsYXRpdml6ZShsb2NhdGlvbi50b1VSSSgpKTsKKyAgICAgICAgICAgIFN0cmluZyBwYXRoID0gcmVsYXRpdmUuZ2V0UGF0aCgpOworICAgICAgICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoIi8iKSkgeworICAgICAgICAgICAgICAgIHBhdGggPSAiLyIgKyBwYXRoOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChPYmplY3QgZmlsZSA6IHNlcnZsZXRDb250ZXh0LmdldFJlc291cmNlUGF0aHMocGF0aCkpIHsKKyAgICAgICAgICAgICAgICBBcnRpZmFjdCBhcnRpZmFjdCA9IGNvbnRyaWJ1dGlvbkZhY3RvcnkuY3JlYXRlQXJ0aWZhY3QoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IChTdHJpbmcpZmlsZTsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgbGVhZGluZyAvCisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgICAgIGFydGlmYWN0LnNldFVSSShuYW1lKTsKKyAgICAgICAgICAgICAgICBVUkwgYXJ0aWZhY3RVUkwgPSBuZXcgVVJMKGxvY2F0aW9uLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBhcnRpZmFjdC5zZXRMb2NhdGlvbihhcnRpZmFjdFVSTC50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICBhcnRpZmFjdHMuYWRkKGFydGlmYWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBhcnRpZmFjdHM7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9ob3N0LXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaG9zdC93ZWJhcHAvV2ViQXBwSGVscGVyLmphdmEgYi9tb2R1bGVzL2hvc3Qtd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ob3N0L3dlYmFwcC9XZWJBcHBIZWxwZXIuamF2YQppbmRleCA0MWFlNDI2Li40N2ZkODUyIDEwMDY0NAotLS0gYS9tb2R1bGVzL2hvc3Qtd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ob3N0L3dlYmFwcC9XZWJBcHBIZWxwZXIuamF2YQorKysgYi9tb2R1bGVzL2hvc3Qtd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ob3N0L3dlYmFwcC9XZWJBcHBIZWxwZXIuamF2YQpAQCAtMzEsNiArMzEsNyBAQAogaW1wb3J0IGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5VdGlsaXR5RXh0ZW5zaW9uUG9pbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0Lmh0dHAuU2VydmxldEhvc3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0Lmh0dHAuU2VydmxldEhvc3RFeHRlbnNpb25Qb2ludDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKQEAgLTM4LDYgKzM5LDE1IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmNvbmZpZ3VyYXRpb24uTm9kZUNvbmZpZ3VyYXRpb247CiAKIHB1YmxpYyBjbGFzcyBXZWJBcHBIZWxwZXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBST09UID0gIi8iOworICAgIC8vIFRoZSBwcmVmaXggZm9yIHRoZSBwYXJhbWV0ZXJzIGluIHdlYi54bWwgd2hpY2ggY29uZmlndXJlIHRoZSBmb2xkZXJzIHRoYXQgY29udGFpbiBTQ0EgY29udHJpYnV0aW9ucworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDT05UUklCVVRJT05TID0gImNvbnRyaWJ1dGlvbnMiOworICAgIC8vIFRoZSBwcmVmaXggZm9yIHRoZSBwYXJhbWV0ZXJzIGluIHdlYi54bWwgd2hpY2ggY29uZmlndXJlIHRoZSBpbmRpdmlkdWFsIFNDQSBjb250cmlidXRpb25zCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRSSUJVVElPTiA9ICJjb250cmlidXRpb24iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT0RFX0NPTkZJR1VSQVRJT04gPSAibm9kZS5jb25maWd1cmF0aW9uIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgV0VCX0NPTVBPU0lURSA9ICIvV0VCLUlORi93ZWIuY29tcG9zaXRlIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRE9NQUlOX1VSSSA9ICJkb21haW4udXJpIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ERV9VUkkgPSAibm9kZS51cmkiOwogICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPTUFJTl9OQU1FX0FUVFIgPSAib3JnLmFwYWNoZS50dXNjYW55LnNjYS5kb21haW4ubmFtZSI7CiAgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgU0NBX05PREVfQVRUUklCVVRFID0gTm9kZS5jbGFzcy5nZXROYW1lKCk7CiAgICAgcHJpdmF0ZSBzdGF0aWMgTm9kZUZhY3RvcnkgZmFjdG9yeTsKQEAgLTQ5LDggKzU5LDggQEAKICAgICAgICAgICAgIHJldHVybiB1cmkudG9VUkwoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFN0cmluZyBwYXRoID0gbG9jYXRpb247Ci0gICAgICAgICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgiLyIpKSB7Ci0gICAgICAgICAgICAgICAgcGF0aCA9ICIvIiArIHBhdGg7CisgICAgICAgICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aChST09UKSkgeworICAgICAgICAgICAgICAgIHBhdGggPSBST09UICsgcGF0aDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFVSTCB1cmwgPSBzZXJ2bGV0Q29udGV4dC5nZXRSZXNvdXJjZShwYXRoKTsKICAgICAgICAgICAgIGlmICh1cmwgIT0gbnVsbCAmJiB1cmwuZ2V0UHJvdG9jb2woKS5lcXVhbHMoImpuZGkiKSkgewpAQCAtNjMsMTEgKzczLDE5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nW10gcGFyc2UoU3RyaW5nIGxpc3RPZlZhbHVlcykgeworICAgICAgICBpZiAobGlzdE9mVmFsdWVzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaXN0T2ZWYWx1ZXMuc3BsaXQoIihcXHN8LCkrIik7CisgICAgfQogCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgcHJpdmF0ZSBzdGF0aWMgTm9kZUNvbmZpZ3VyYXRpb24gZ2V0Tm9kZUNvbmZpZ3VyYXRpb24oU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQpIHRocm93cyBJT0V4Y2VwdGlvbiwgVVJJU3ludGF4RXhjZXB0aW9uIHsKKyAgICBwcml2YXRlIHN0YXRpYyBOb2RlQ29uZmlndXJhdGlvbiBnZXROb2RlQ29uZmlndXJhdGlvbihTZXJ2bGV0Q29udGV4dCBzZXJ2bGV0Q29udGV4dCkgdGhyb3dzIElPRXhjZXB0aW9uLAorICAgICAgICBVUklTeW50YXhFeGNlcHRpb24gewogICAgICAgICBOb2RlQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbnVsbDsKLSAgICAgICAgU3RyaW5nIG5vZGVDb25maWdVUkkgPSAoU3RyaW5nKSBzZXJ2bGV0Q29udGV4dC5nZXRBdHRyaWJ1dGUoIm5vZGUuY29uZmlndXJhdGlvbiIpOworICAgICAgICBTdHJpbmcgbm9kZUNvbmZpZ1VSSSA9IChTdHJpbmcpc2VydmxldENvbnRleHQuZ2V0QXR0cmlidXRlKE5PREVfQ09ORklHVVJBVElPTik7CiAgICAgICAgIGlmIChub2RlQ29uZmlnVVJJICE9IG51bGwpIHsKICAgICAgICAgICAgIFVSTCB1cmwgPSBnZXRSZXNvdXJjZShzZXJ2bGV0Q29udGV4dCwgbm9kZUNvbmZpZ1VSSSk7CiAgICAgICAgICAgICBjb25maWd1cmF0aW9uID0gZmFjdG9yeS5sb2FkQ29uZmlndXJhdGlvbih1cmwub3BlblN0cmVhbSgpLCB1cmwpOwpAQCAtNzYsMzUgKzk0LDUyIEBACiAgICAgICAgICAgICBFbnVtZXJhdGlvbjxTdHJpbmc+IG5hbWVzID0gc2VydmxldENvbnRleHQuZ2V0QXR0cmlidXRlTmFtZXMoKTsKICAgICAgICAgICAgIHdoaWxlIChuYW1lcy5oYXNNb3JlRWxlbWVudHMoKSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gbmFtZXMubmV4dEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJjb250cmlidXRpb24iKSkgewotICAgICAgICAgICAgICAgICAgICBTdHJpbmcgY29udHJpYiA9IChTdHJpbmcpIHNlcnZsZXRDb250ZXh0LmdldEF0dHJpYnV0ZShuYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyaWIgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoZ2V0UmVzb3VyY2Uoc2VydmxldENvbnRleHQsIGNvbnRyaWIpLnRvVVJJKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYuaXNEaXJlY3RvcnkoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoRmlsZSBuIDogZi5saXN0RmlsZXMoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLmFkZENvbnRyaWJ1dGlvbihuLnRvVVJJKCkudG9VUkwoKSk7CisgICAgICAgICAgICAgICAgaWYgKG5hbWUuZXF1YWxzKENPTlRSSUJVVElPTikgfHwgbmFtZS5zdGFydHNXaXRoKENPTlRSSUJVVElPTiArICIuIikpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBoYXZlIGEgd2F5IHRvIHNlbGVjdCBvbmUgb3IgbW9yZSBmb2xkZXJzIHdpdGhpbiB0aGUgd2ViYXBwIGFzIHRoZSBjb250cmlidXRpb25zCisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBsaXN0T2ZWYWx1ZXMgPSAoU3RyaW5nKXNlcnZsZXRDb250ZXh0LmdldEF0dHJpYnV0ZShuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpc3RPZlZhbHVlcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBwYXRoIDogcGFyc2UobGlzdE9mVmFsdWVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgiIi5lcXVhbHMocGF0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlIGYgPSBuZXcgRmlsZShnZXRSZXNvdXJjZShzZXJ2bGV0Q29udGV4dCwgcGF0aCkudG9VUkkoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5hZGRDb250cmlidXRpb24oZi50b1VSSSgpLnRvVVJMKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChuYW1lLmVxdWFscyhDT05UUklCVVRJT05TKSB8fCBuYW1lLnN0YXJ0c1dpdGgoQ09OVFJJQlVUSU9OUyArICIuIikpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGxpc3RPZlZhbHVlcyA9IChTdHJpbmcpc2VydmxldENvbnRleHQuZ2V0QXR0cmlidXRlKG5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAobGlzdE9mVmFsdWVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHBhdGggOiBwYXJzZShsaXN0T2ZWYWx1ZXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCIiLmVxdWFscyhwYXRoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoZ2V0UmVzb3VyY2Uoc2VydmxldENvbnRleHQsIHBhdGgpLnRvVVJJKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmLmlzRGlyZWN0b3J5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChGaWxlIG4gOiBmLmxpc3RGaWxlcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLmFkZENvbnRyaWJ1dGlvbihuLnRvVVJJKCkudG9VUkwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLmFkZENvbnRyaWJ1dGlvbihmLnRvVVJJKCkudG9VUkwoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmIChjb25maWd1cmF0aW9uLmdldENvbnRyaWJ1dGlvbnMoKS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBUT0RPOiBXaGljaCBwYXRoIHNob3VsZCBiZSB0aGUgZGVmYXVsdCByb290Ci0gICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5hZGRDb250cmlidXRpb24oZ2V0UmVzb3VyY2Uoc2VydmxldENvbnRleHQsICIvIikpOworICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uYWRkQ29udHJpYnV0aW9uKGdldFJlc291cmNlKHNlcnZsZXRDb250ZXh0LCBST09UKSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBVUkwgY29tcG9zaXRlID0gZ2V0UmVzb3VyY2Uoc2VydmxldENvbnRleHQsICIvV0VCLUlORi93ZWIuY29tcG9zaXRlIik7CisgICAgICAgICAgICBVUkwgY29tcG9zaXRlID0gZ2V0UmVzb3VyY2Uoc2VydmxldENvbnRleHQsIFdFQl9DT01QT1NJVEUpOwogICAgICAgICAgICAgaWYgKGNvbXBvc2l0ZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5nZXRDb250cmlidXRpb25zKCkuZ2V0KDApLmFkZERlcGxveW1lbnRDb21wb3NpdGUoY29tcG9zaXRlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFN0cmluZyBub2RlVVJJID0gKFN0cmluZykgc2VydmxldENvbnRleHQuZ2V0QXR0cmlidXRlKCJub2RlLnVyaSIpOworICAgICAgICAgICAgU3RyaW5nIG5vZGVVUkkgPSAoU3RyaW5nKXNlcnZsZXRDb250ZXh0LmdldEF0dHJpYnV0ZShOT0RFX1VSSSk7CiAgICAgICAgICAgICBpZiAobm9kZVVSSSA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgbm9kZVVSSSA9IG5ldyBGaWxlKHNlcnZsZXRDb250ZXh0LmdldFJlYWxQYXRoKCIvIikpLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICBub2RlVVJJID0gbmV3IEZpbGUoc2VydmxldENvbnRleHQuZ2V0UmVhbFBhdGgoUk9PVCkpLmdldE5hbWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0VVJJKG5vZGVVUkkpOwotICAgICAgICAgICAgU3RyaW5nIGRvbWFpblVSSSA9IChTdHJpbmcpIHNlcnZsZXRDb250ZXh0LmdldEF0dHJpYnV0ZSgiZG9tYWluLnVyaSIpOworICAgICAgICAgICAgU3RyaW5nIGRvbWFpblVSSSA9IChTdHJpbmcpc2VydmxldENvbnRleHQuZ2V0QXR0cmlidXRlKERPTUFJTl9VUkkpOwogICAgICAgICAgICAgaWYgKGRvbWFpblVSSSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5zZXREb21haW5VUkkoZG9tYWluVVJJKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjIsMzQgKzE1NywzOSBAQAogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXREb21haW5OYW1lKFN0cmluZyBjb25maWdVUkkpIHsKICAgICAgICAgU3RyaW5nIGRvbWFpbk5hbWU7CiAgICAgICAgIGlmIChjb25maWdVUkkuc3RhcnRzV2l0aCgidHVzY2FueTp2bToiKSkgewotICAgICAgICAgICAgZG9tYWluTmFtZSA9IGNvbmZpZ1VSSS5zdWJzdHJpbmcoInR1c2Nhbnk6dm06Ii5sZW5ndGgoKSk7ICAKKyAgICAgICAgICAgIGRvbWFpbk5hbWUgPSBjb25maWdVUkkuc3Vic3RyaW5nKCJ0dXNjYW55OnZtOiIubGVuZ3RoKCkpOwogICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZ1VSSS5zdGFydHNXaXRoKCJ0dXNjYW55OiIpKSB7CiAgICAgICAgICAgICBpbnQgaSA9IGNvbmZpZ1VSSS5pbmRleE9mKCc/Jyk7CiAgICAgICAgICAgICBpZiAoaSA9PSAtMSkgewotICAgICAgICAgICAgICAgIGRvbWFpbk5hbWUgPSBjb25maWdVUkkuc3Vic3RyaW5nKCJ0dXNjYW55OiIubGVuZ3RoKCkpOyAgCi0gICAgICAgICAgICB9IGVsc2V7Ci0gICAgICAgICAgICAgICAgZG9tYWluTmFtZSA9IGNvbmZpZ1VSSS5zdWJzdHJpbmcoInR1c2Nhbnk6Ii5sZW5ndGgoKSwgaSk7ICAKKyAgICAgICAgICAgICAgICBkb21haW5OYW1lID0gY29uZmlnVVJJLnN1YnN0cmluZygidHVzY2FueToiLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZG9tYWluTmFtZSA9IGNvbmZpZ1VSSS5zdWJzdHJpbmcoInR1c2Nhbnk6Ii5sZW5ndGgoKSwgaSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkb21haW5OYW1lID0gY29uZmlnVVJJOyAgCisgICAgICAgICAgICBkb21haW5OYW1lID0gY29uZmlnVVJJOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBkb21haW5OYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIFNlcnZsZXRIb3N0IGluaXQoZmluYWwgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQpIHsKICAgICAgICAgaWYgKGhvc3QgPT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIFN0cmluZyBjb25maWdWYWx1ZSA9IHNlcnZsZXRDb250ZXh0LmdldEluaXRQYXJhbWV0ZXIoIm9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29uZmlnIik7CiAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ1ZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgZmFjdG9yeSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKGNvbmZpZ1ZhbHVlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gQWRkIFNlcnZsZXRDb250ZXh0IGFzIGEgdXRpbGl0eQogICAgICAgICAgICAgICAgIEV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnkgPSBmYWN0b3J5LmdldEV4dGVuc2lvblBvaW50UmVnaXN0cnkoKTsKKyAgICAgICAgICAgICAgICBVdGlsaXR5RXh0ZW5zaW9uUG9pbnQgdXRpbGl0eUV4dGVuc2lvblBvaW50ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoVXRpbGl0eUV4dGVuc2lvblBvaW50LmNsYXNzKTsKKyAgICAgICAgICAgICAgICB1dGlsaXR5RXh0ZW5zaW9uUG9pbnQuYWRkVXRpbGl0eShTZXJ2bGV0Q29udGV4dC5jbGFzcywgc2VydmxldENvbnRleHQpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFNlcnZsZXRIb3N0RXh0ZW5zaW9uUG9pbnQgc2VydmxldEhvc3RzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoU2VydmxldEhvc3RFeHRlbnNpb25Qb2ludC5jbGFzcyk7CiAgICAgICAgICAgICAgICAgc2VydmxldEhvc3RzLnNldFdlYkFwcCh0cnVlKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIC8vIFRPRE86IHdoeSBhcmUgdGhlIGluaXQgcGFyYW1ldGVycyBjb3BpZWQgdG8gdGhlIGF0dHJpYnV0ZXM/CiAgICAgICAgICAgICAgICAgZm9yIChFbnVtZXJhdGlvbjw/PiBlID0gc2VydmxldENvbnRleHQuZ2V0SW5pdFBhcmFtZXRlck5hbWVzKCk7IGUuaGFzTW9yZUVsZW1lbnRzKCk7KSB7CiAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gKFN0cmluZyllLm5leHRFbGVtZW50KCk7CkBAIC0yMDAsNyArMjQwLDcgQEAKIAogICAgIHByaXZhdGUgc3RhdGljIFdlYkFwcFNlcnZsZXRIb3N0IGdldFNlcnZsZXRIb3N0KE5vZGVGYWN0b3J5IGZhY3RvcnkpIHsKICAgICAgICAgRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSA9IGZhY3RvcnkuZ2V0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSgpOwotICAgICAgICByZXR1cm4gKFdlYkFwcFNlcnZsZXRIb3N0KSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3QuaHR0cC5TZXJ2bGV0SG9zdEhlbHBlci5nZXRTZXJ2bGV0SG9zdChyZWdpc3RyeSk7CisgICAgICAgIHJldHVybiAoV2ViQXBwU2VydmxldEhvc3Qpb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0Lmh0dHAuU2VydmxldEhvc3RIZWxwZXIuZ2V0U2VydmxldEhvc3QocmVnaXN0cnkpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIE5vZGUgY3JlYXRlQW5kU3RhcnROb2RlKGZpbmFsIFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0KSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CkBAIC0yMTcsMTAgKzI1NywxMCBAQAogICAgIH0KIAogICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzdG9wKFNlcnZsZXRDb250ZXh0IHNlcnZsZXRDb250ZXh0KSB7Ci0gICAgICAgIE5vZGUgbm9kZSA9IChOb2RlKXNlcnZsZXRDb250ZXh0LmdldEF0dHJpYnV0ZShXZWJBcHBIZWxwZXIuU0NBX05PREVfQVRUUklCVVRFKTsKKyAgICAgICAgTm9kZSBub2RlID0gKE5vZGUpc2VydmxldENvbnRleHQuZ2V0QXR0cmlidXRlKFNDQV9OT0RFX0FUVFJJQlVURSk7CiAgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsKICAgICAgICAgICAgIG5vZGUuc3RvcCgpOwotICAgICAgICAgICAgc2VydmxldENvbnRleHQuc2V0QXR0cmlidXRlKFdlYkFwcEhlbHBlci5TQ0FfTk9ERV9BVFRSSUJVVEUsIG51bGwpOworICAgICAgICAgICAgc2VydmxldENvbnRleHQuc2V0QXR0cmlidXRlKFNDQV9OT0RFX0FUVFJJQlVURSwgbnVsbCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvaG9zdC13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2hvc3Qvd2ViYXBwL1dlYkFwcFNlcnZsZXRIb3N0LmphdmEgYi9tb2R1bGVzL2hvc3Qtd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ob3N0L3dlYmFwcC9XZWJBcHBTZXJ2bGV0SG9zdC5qYXZhCmluZGV4IDBjNTQzMWEuLmU2ZjYzNjggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaG9zdC13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2hvc3Qvd2ViYXBwL1dlYkFwcFNlcnZsZXRIb3N0LmphdmEKKysrIGIvbW9kdWxlcy9ob3N0LXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaG9zdC93ZWJhcHAvV2ViQXBwU2VydmxldEhvc3QuamF2YQpAQCAtNiwxNSArNiwxNSBAQAogICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCisgKgogICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAorICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQogICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qud2ViYXBwOwpAQCAtMjQsMTIgKzI0LDEyIEBACiBpbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmV0LlVSSTsKIGltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS5uZXQuVW5rbm93bkhvc3RFeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiAKIGltcG9ydCBqYXZheC5zZXJ2bGV0LlJlcXVlc3REaXNwYXRjaGVyOwpAQCAtNDUsNyArNDUsNyBAQAogCiAvKioKICAqIFNlcnZsZXRIb3N0IGltcGxlbWVudGF0aW9uIGZvciB1c2UgaW4gYSB3ZWJhcHAgZW52aXJvbm1lbnQuCi0gKiAKKyAqCiAgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKICAqLwogcHVibGljIGNsYXNzIFdlYkFwcFNlcnZsZXRIb3N0IGltcGxlbWVudHMgU2VydmxldEhvc3QgewpAQCAtNzMsMTQgKzczLDE0IEBACiAgICAgcHVibGljIGludCBnZXREZWZhdWx0UG9ydCgpIHsKICAgICAgICAgcmV0dXJuIGRlZmF1bHRQb3J0TnVtYmVyOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuICJ3ZWJhcHAiOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBTdHJpbmcgYWRkU2VydmxldE1hcHBpbmcoU3RyaW5nIHN1cmksIFNlcnZsZXQgc2VydmxldCkgdGhyb3dzIFNlcnZsZXRNYXBwaW5nRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGFkZFNlcnZsZXRNYXBwaW5nKHN1cmksIHNlcnZsZXQsIG51bGwpOwotICAgIH0gICAgCisgICAgfQogCiAgICAgcHVibGljIFN0cmluZyBhZGRTZXJ2bGV0TWFwcGluZyhTdHJpbmcgc3VyaSwgU2VydmxldCBzZXJ2bGV0LCBTZWN1cml0eUNvbnRleHQgc2VjdXJpdHlDb250ZXh0KSB0aHJvd3MgU2VydmxldE1hcHBpbmdFeGNlcHRpb24gewogICAgICAgICBVUkkgcGF0aFVSSSA9IFVSSS5jcmVhdGUoc3VyaSk7CkBAIC05NCw3ICs5NCw3IEBACiAgICAgICAgIC8vIFN0cmluZyByZWxhdGl2ZVVSSSA9IHN1cmk7CiAgICAgICAgIGlmICghc3VyaS5zdGFydHNXaXRoKGNvbnRleHRQYXRoICsgIi8iKSkgewogICAgICAgICAgICAgc3VyaSA9IGNvbnRleHRQYXRoICsgc3VyaTsKLSAgICAgICAgfSAKKyAgICAgICAgfQogCiAgICAgICAgIGlmICghc2VydmxldHMudmFsdWVzKCkuY29udGFpbnMoc2VydmxldCkpIHsKICAgICAgICAgICAgIC8vIFRoZSBzYW1lIHNlcnZsZXQgY2FuIGJlIHJlZ2lzdHJlZCBtb3JlIHRoYW4gb25jZQpAQCAtMTA0LDEyICsxMDQsMTIgQEAKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmxldE1hcHBpbmdFeGNlcHRpb24oZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gSW4gYSB3ZWJhcHAganVzdCB1c2UgdGhlIGdpdmVuIHBhdGggYW5kIGlnbm9yZSB0aGUgaG9zdCBhbmQgcG9ydAogICAgICAgICAvLyBhcyB0aGV5IGFyZSBmaXhlZCBieSB0aGUgV2ViIGNvbnRhaW5lcgogICAgICAgICBzZXJ2bGV0cy5wdXQoc3VyaSwgc2VydmxldCk7CiAKLSAgICAgICAgVVJMIHVybCA9IGdldFVSTE1hcHBpbmcoc3VyaSwgc2VjdXJpdHlDb250ZXh0KTsKKyAgICAgICAgVVJMIHVybCA9IGdldFVSTE1hcHBpbmcocGF0aFVSSS50b1N0cmluZygpLCBzZWN1cml0eUNvbnRleHQpOwogICAgICAgICBsb2dnZXIuaW5mbygiQWRkZWQgU2VydmxldCBtYXBwaW5nOiAiICsgdXJsKTsKICAgICAgICAgcmV0dXJuIHVybC50b1N0cmluZygpOwogICAgIH0KQEAgLTE2MSw3ICsxNjEsOCBAQAogICAgICAgICAgICAgc2NoZW1lID0gImh0dHAiOwogICAgICAgICB9CiAgICAgICAgIGludCBwb3J0TnVtYmVyID0gdXJpLmdldFBvcnQoKTsKLSAgICAgICAgaWYgKHBvcnROdW1iZXIgPT0gLTEpIHsKKyAgICAgICAgaWYgKHBvcnROdW1iZXIgPT0gLTEgJiYgdXJpLmdldFNjaGVtZSgpID09IG51bGwpIHsKKyAgICAgICAgICAgIC8vIE9ubHkgc2V0IHRoZSBkZWZhdWx0IHBvcnQgbnVtYmVyIGlmIHRoZSBzY2hlbWUgaXMgbm90IHByZXNlbnQKICAgICAgICAgICAgIHBvcnROdW1iZXIgPSBkZWZhdWx0UG9ydE51bWJlcjsKICAgICAgICAgfQogCkBAIC0xNjksOCArMTcwLDEwIEBACiAgICAgICAgIFN0cmluZyBob3N0ID0gdXJpLmdldEhvc3QoKTsKICAgICAgICAgaWYgKGhvc3QgPT0gbnVsbCkgewogICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICBob3N0ID0gSW5ldEFkZHJlc3MuZ2V0TG9jYWxIb3N0KCkuZ2V0SG9zdE5hbWUoKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKFVua25vd25Ib3N0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIAkvL1RVU0NBTlktMzY2NyAtIEluZXRBZGRyZXNzIGlzIG5vdCBhbGxvd2VkIGluIEdvb2dsZUFwcEVuZ2luZQorICAgICAgICAgICAgCWhvc3QgPSBJbmV0QWRkcmVzcy5nZXRMb2NhbEhvc3QoKS5nZXRIb3N0TmFtZSgpOworICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgICAgIAlsb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJFcnJvciByZXRyaWV2aW5nIGhvc3QgaW5mb3JtYXRpb24gOiAiICsgdC5nZXRNZXNzYWdlKCkpOwogICAgICAgICAgICAgICAgIGhvc3QgPSAibG9jYWxob3N0IjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjMzLDIyICsyMzYsMjIgQEAKICAgICBwdWJsaWMgdm9pZCBpbml0KFNlcnZsZXRDb25maWcgY29uZmlnKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiB7CiAgICAgICAgIHRoaXMuc2VydmxldENvbmZpZyA9IGNvbmZpZzsKICAgICAgICAgc2VydmxldENvbnRleHQgPSBjb25maWcuZ2V0U2VydmxldENvbnRleHQoKTsKLSAgICAgICAgCisKICAgICAgICAgZm9yIChTdHJpbmcgbmFtZSA6IHRlbXBBdHRyaWJ1dGVzLmtleVNldCgpKSB7CiAgICAgICAgICAgICBzZXJ2bGV0Q29udGV4dC5zZXRBdHRyaWJ1dGUobmFtZSwgdGVtcEF0dHJpYnV0ZXMuZ2V0KG5hbWUpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBXZWJBcHBIZWxwZXIuaW5pdChzZXJ2bGV0Q29udGV4dCk7Ci0gICAgICAgIAorCiAgICAgICAgIGluaXRDb250ZXh0UGF0aChjb25maWcpOwogCiAgICAgICAgIC8vIEluaXRpYWxpemUgdGhlIHJlZ2lzdGVyZWQgU2VydmxldHMKICAgICAgICAgZm9yIChTZXJ2bGV0IHNlcnZsZXQgOiBzZXJ2bGV0cy52YWx1ZXMoKSkgewogICAgICAgICAgICAgc2VydmxldC5pbml0KGNvbmZpZyk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBJbml0aWFsaXplcyB0aGUgY29udGV4dFBhdGgKICAgICAgKiBUaGUgMi41IFNlcnZsZXQgQVBJIGhhcyBhIGdldHRlciBmb3IgdGhpcywgZm9yIHByZSAyLjUgU2VydmxldApAQCAtMjU2LDkgKzI1OSw5IEBACiAgICAgICovCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICAgcHVibGljIHZvaWQgaW5pdENvbnRleHRQYXRoKFNlcnZsZXRDb25maWcgY29uZmlnKSB7Ci0gICAgICAgIAorCiAgICAgICAgIFN0cmluZyBvbGRDb250ZXh0UGF0aCA9IGNvbnRleHRQYXRoOwotICAgICAgICAKKwogICAgICAgICBpZiAoQ29sbGVjdGlvbnMubGlzdChjb25maWcuZ2V0SW5pdFBhcmFtZXRlck5hbWVzKCkpLmNvbnRhaW5zKCJjb250ZXh0UGF0aCIpKSB7CiAgICAgICAgICAgICBjb250ZXh0UGF0aCA9IGNvbmZpZy5nZXRJbml0UGFyYW1ldGVyKCJjb250ZXh0UGF0aCIpOwogICAgICAgICB9IGVsc2UgewpAQCAtMjkyLDkgKzI5NSw5IEBACiAgICAgICAgICAgICAgICAgc2VydmxldHMucHV0KG5zLCBzZXJ2bGV0cy5yZW1vdmUob2xkVVJJKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgfSAgICAKLSAgICAKKworICAgIH0KKwogICAgIHZvaWQgZGVzdHJveSgpIHsKIAogICAgICAgICAvLyBEZXN0cm95IHRoZSByZWdpc3RlcmVkIFNlcnZsZXRzCkBAIC0zMzUsNCArMzM4LDggQEAKICAgICAgICAgICAgIHRlbXBBdHRyaWJ1dGVzLnB1dChuYW1lLCB2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBwdWJsaWMgU2VydmxldENvbnRleHQgZ2V0U2VydmxldENvbnRleHQoKSB7CisgICAgICAgIHJldHVybiBzZXJ2bGV0Q29udGV4dDsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWJwZWwtcnVudGltZS9wb20ueG1sIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1icGVsLXJ1bnRpbWUvcG9tLnhtbAppbmRleCBmYWZlOGJmLi41ODc1MDAyIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWJwZWwtcnVudGltZS9wb20ueG1sCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tYnBlbC1ydW50aW1lL3BvbS54bWwKQEAgLTMwLDU1ICszMCwxMSBAQAogICAgIDxkZXBlbmRlbmNpZXM+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1wb208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1icGVsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5LXhtbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbnRyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWludGVyZmFjZS13c2RsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gCiAgICAgICAgIDwhLS0gT0RFIEphcnMgLS0+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5vZGU8L2dyb3VwSWQ+CkBAIC0yMTEsNyArMTY3LDcgQEAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLmNvbXBvbmVudHM8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby10cmFuc2FjdGlvbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4xLjQ8L3ZlcnNpb24+CiAgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KICAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgogICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPgpAQCAtMjYzLDcgKzIxOSw3IEBACiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5jb21wb25lbnRzPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tY29ubmVjdG9yPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjEuNDwvdmVyc2lvbj4KICAgICAgICAgICAgIDxleGNsdXNpb25zPgogICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CiAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+CkBAIC00NTksNiArNDE1LDE4IEBACiAgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CiAgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDwhLS0gRXhwbGljaXRseSBhZGQgc2xmNGogc28gdGhhdCBPREUgdXNlcyB0aGUgbGF0ZXN0IHZlcnNpb25zIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNS4xMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLWpkazE0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS41LjExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKICAgICA8L2RlcGVuZGVuY2llcz4KIAogICAgIDxidWlsZD4KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2NvbnRleHQvUmVmbGVjdGl2ZUluc3RhbmNlRmFjdG9yeS5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvY29udGV4dC9SZWZsZWN0aXZlSW5zdGFuY2VGYWN0b3J5LmphdmEKaW5kZXggMjA5NTQ2Yy4uZjVkOTg2MCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvY29udGV4dC9SZWZsZWN0aXZlSW5zdGFuY2VGYWN0b3J5LmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvY29udGV4dC9SZWZsZWN0aXZlSW5zdGFuY2VGYWN0b3J5LmphdmEKQEAgLTM2LDE1ICszNiwxOCBAQAogICAgIHByaXZhdGUgZmluYWwgSW5qZWN0b3I8VD5bXSBpbmplY3RvcnM7CiAgICAgcHJpdmF0ZSBmaW5hbCBFdmVudEludm9rZXI8VD4gaW5pdEludm9rZXI7CiAgICAgcHJpdmF0ZSBmaW5hbCBFdmVudEludm9rZXI8VD4gZGVzdHJveUludm9rZXI7CisJcHJpdmF0ZSBmaW5hbCBJbmplY3RvcjxUPltdIGNhbGxiYWNrSW5qZWN0b3JzOwogCiAgICAgcHVibGljIFJlZmxlY3RpdmVJbnN0YW5jZUZhY3RvcnkoQ29uc3RydWN0b3I8VD4gY3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdEZhY3Rvcnk8Pz5bXSBjdHJBcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluamVjdG9yPFQ+W10gaW5qZWN0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluamVjdG9yPFQ+W10gY2FsbGJhY2tJbmplY3RvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnRJbnZva2VyPFQ+IGluaXRJbnZva2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50SW52b2tlcjxUPiBkZXN0cm95SW52b2tlcikgewogICAgICAgICB0aGlzLmN0ciA9IGN0cjsKICAgICAgICAgdGhpcy5jdHJBcmdzID0gY3RyQXJnczsKICAgICAgICAgdGhpcy5pbmplY3RvcnMgPSBpbmplY3RvcnM7CisgICAgICAgIHRoaXMuY2FsbGJhY2tJbmplY3RvcnMgPSBjYWxsYmFja0luamVjdG9yczsKICAgICAgICAgdGhpcy5pbml0SW52b2tlciA9IGluaXRJbnZva2VyOwogICAgICAgICB0aGlzLmRlc3Ryb3lJbnZva2VyID0gZGVzdHJveUludm9rZXI7CiAgICAgfQpAQCAtODgsNiArOTEsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIG5ldyBSZWZsZWN0aXZlSW5zdGFuY2VXcmFwcGVyPFQ+KGluc3RhbmNlLCBpbml0SW52b2tlciwgZGVzdHJveUludm9rZXIpOworICAgICAgICByZXR1cm4gbmV3IFJlZmxlY3RpdmVJbnN0YW5jZVdyYXBwZXI8VD4oaW5zdGFuY2UsIGluaXRJbnZva2VyLCBkZXN0cm95SW52b2tlciwgY2FsbGJhY2tJbmplY3RvcnMpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2NvbnRleHQvUmVmbGVjdGl2ZUluc3RhbmNlV3JhcHBlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvY29udGV4dC9SZWZsZWN0aXZlSW5zdGFuY2VXcmFwcGVyLmphdmEKaW5kZXggN2M5NjYwNi4uYTNlZDE2ZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvY29udGV4dC9SZWZsZWN0aXZlSW5zdGFuY2VXcmFwcGVyLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvY29udGV4dC9SZWZsZWN0aXZlSW5zdGFuY2VXcmFwcGVyLmphdmEKQEAgLTIxLDYgKzIxLDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuZmFjdG9yeS5JbnN0YW5jZVdyYXBwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLnNjb3BlLlRhcmdldERlc3RydWN0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5zY29wZS5UYXJnZXRJbml0aWFsaXphdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW5qZWN0aW9uLkluamVjdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnZvY2F0aW9uLkV2ZW50SW52b2tlcjsKIAogLyoqCkBAIC0zMCwxMSArMzEsMTMgQEAKICAgICBwcml2YXRlIGZpbmFsIEV2ZW50SW52b2tlcjxUPiBpbml0SW52b2tlcjsKICAgICBwcml2YXRlIGZpbmFsIEV2ZW50SW52b2tlcjxUPiBkZXN0cm95SW52b2tlcjsKICAgICBwcml2YXRlIGZpbmFsIFQgaW5zdGFuY2U7CisJcHJpdmF0ZSBmaW5hbCBJbmplY3RvcjxUPltdIGNhbGxiYWNrSW5qZWN0b3JzOwogCi0gICAgcHVibGljIFJlZmxlY3RpdmVJbnN0YW5jZVdyYXBwZXIoVCBpbnN0YW5jZSwgRXZlbnRJbnZva2VyPFQ+IGluaXRJbnZva2VyLCBFdmVudEludm9rZXI8VD4gZGVzdHJveUludm9rZXIpIHsKKyAgICBwdWJsaWMgUmVmbGVjdGl2ZUluc3RhbmNlV3JhcHBlcihUIGluc3RhbmNlLCBFdmVudEludm9rZXI8VD4gaW5pdEludm9rZXIsIEV2ZW50SW52b2tlcjxUPiBkZXN0cm95SW52b2tlciwgSW5qZWN0b3I8VD5bXSBjYWxsYmFja0luamVjdG9ycykgewogICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7CiAgICAgICAgIHRoaXMuaW5pdEludm9rZXIgPSBpbml0SW52b2tlcjsKICAgICAgICAgdGhpcy5kZXN0cm95SW52b2tlciA9IGRlc3Ryb3lJbnZva2VyOworICAgICAgICB0aGlzLmNhbGxiYWNrSW5qZWN0b3JzID0gY2FsbGJhY2tJbmplY3RvcnM7CiAgICAgfQogICAgIAogICAgIHB1YmxpYyBUIGdldEluc3RhbmNlKCkgewpAQCAtNjEsNCArNjQsOSBAQAogICAgICAgICAgICAgZGVzdHJveUludm9rZXIuaW52b2tlRXZlbnQoaW5zdGFuY2UpOwogICAgICAgICB9CiAgICAgfQorCisgICAgcHVibGljIEluamVjdG9yPFQ+W10gZ2V0Q2FsbGJhY2tJbmplY3RvcnMoKSB7CisgICAgCXJldHVybiB0aGlzLmNhbGxiYWNrSW5qZWN0b3JzOworICAgIH0KKwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW5qZWN0aW9uL0ZpZWxkSW5qZWN0b3IuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2luamVjdGlvbi9GaWVsZEluamVjdG9yLmphdmEKaW5kZXggZGQ0NTRiZS4uNGQ5N2U3MiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW5qZWN0aW9uL0ZpZWxkSW5qZWN0b3IuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbmplY3Rpb24vRmllbGRJbmplY3Rvci5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiBwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbmplY3Rpb247CiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5UeXBlOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlcjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRBY3Rpb247CiAKQEAgLTU4LDEwICs1OSwyOCBAQAogICAgICAqIEluamVjdCBhIG5ldyB2YWx1ZSBvbiB0aGUgZ2l2ZW4gaW5zdGFuY2UKICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbmplY3QoVCBpbnN0YW5jZSkgdGhyb3dzIE9iamVjdENyZWF0aW9uRXhjZXB0aW9uIHsKKyAgICAJaW5qZWN0KGluc3RhbmNlLCBvYmplY3RGYWN0b3J5LmdldEluc3RhbmNlKCkpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBpbmplY3QoVCBpbnN0YW5jZSwgT2JqZWN0IHZhbHVlKSB7CiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBmaWVsZC5zZXQoaW5zdGFuY2UsIG9iamVjdEZhY3RvcnkuZ2V0SW5zdGFuY2UoKSk7CisgICAgICAgICAgICBmaWVsZC5zZXQoaW5zdGFuY2UsIHZhbHVlKTsKICAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0Q3JlYXRpb25FeGNlcHRpb24oIkZpZWxkIGlzIG5vdCBhY2Nlc3NpYmxlIFsiICsgZmllbGQgKyAiXSIsIGUpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIHB1YmxpYyBDbGFzczw/PiBnZXRUeXBlKCkgeworICAgIAlyZXR1cm4gZmllbGQuZ2V0VHlwZSgpOworICAgIH0KKyAgICAKKwlwdWJsaWMgVHlwZSBnZXRHZW5lcmljVHlwZSgpIHsKKwkJcmV0dXJuIGZpZWxkLmdldEdlbmVyaWNUeXBlKCk7CisJfQorCisJcHVibGljIHZvaWQgaW5qZWN0TnVsbChUIGluc3RhbmNlKSB0aHJvd3MgT2JqZWN0Q3JlYXRpb25FeGNlcHRpb24geworCQlpbmplY3QoaW5zdGFuY2UsIG51bGwpOwkJCisJfQorCisKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2luamVjdGlvbi9JbmplY3Rvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW5qZWN0aW9uL0luamVjdG9yLmphdmEKaW5kZXggNGQwNjI4NS4uZjAyMDhjNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW5qZWN0aW9uL0luamVjdG9yLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW5qZWN0aW9uL0luamVjdG9yLmphdmEKQEAgLTE4LDYgKzE4LDggQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW5qZWN0aW9uOwogCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKKwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5mYWN0b3J5Lk9iamVjdENyZWF0aW9uRXhjZXB0aW9uOwogCiAvKioKQEAgLTMxLDUgKzMzLDggQEAKICAgICAgKiBJbmplY3QgYSB2YWx1ZSBvbiB0aGUgZ2l2ZW4gaW5zdGFuY2UKICAgICAgKi8KICAgICB2b2lkIGluamVjdChUIGluc3RhbmNlKSB0aHJvd3MgT2JqZWN0Q3JlYXRpb25FeGNlcHRpb247CisgICAgdm9pZCBpbmplY3ROdWxsKFQgaW5zdGFuY2UpIHRocm93cyBPYmplY3RDcmVhdGlvbkV4Y2VwdGlvbjsKKyAgICBDbGFzczw/PiBnZXRUeXBlKCk7CisJVHlwZSBnZXRHZW5lcmljVHlwZSgpOwogCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbmplY3Rpb24vSmF2YVByb3BlcnR5VmFsdWVPYmplY3RGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbmplY3Rpb24vSmF2YVByb3BlcnR5VmFsdWVPYmplY3RGYWN0b3J5LmphdmEKaW5kZXggNjA2OTg0Ni4uYTE5MGI3NiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW5qZWN0aW9uL0phdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeS5qYXZhCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2luamVjdGlvbi9KYXZhUHJvcGVydHlWYWx1ZU9iamVjdEZhY3RvcnkuamF2YQpAQCAtMTAwLDEwICsxMDAsMzQgQEAKICAgICB9CiAKICAgICBwdWJsaWMgPEI+IEIgY3JlYXRlUHJvcGVydHlWYWx1ZShDb21wb25lbnRQcm9wZXJ0eSBwcm9wZXJ0eSwgQ2xhc3M8Qj4gdHlwZSkgeworICAgIAkKKyAgICAJdmFsaWRhdGVUeXBlcyhwcm9wZXJ0eSwgdHlwZSk7CisgICAgCQogICAgICAgICBPYmplY3RGYWN0b3J5PEI+IGZhY3RvcnkgPSB0aGlzLmNyZWF0ZVZhbHVlRmFjdG9yeShwcm9wZXJ0eSwgcHJvcGVydHkuZ2V0VmFsdWUoKSwgdHlwZSk7CiAgICAgICAgIHJldHVybiBmYWN0b3J5LmdldEluc3RhbmNlKCk7CiAgICAgfQogCisJcHJpdmF0ZSA8Qj4gdm9pZCB2YWxpZGF0ZVR5cGVzKENvbXBvbmVudFByb3BlcnR5IHByb3BlcnR5LCBDbGFzczxCPiB0eXBlKSB7CisJCS8vIEpBWEIgc2VlbXMgdG8gZG8gc29tZSBzdHJhbmdlIHRoaW5ncyB3aXRoIGNvbnZlcnNpb25zLCBzbworICAgIAkvLyB3ZSBjYW4ndCByZWx5IG9uIHRoZSBkYXRhYmluZGluZyBjb252ZXJzaW9uIGZyb20gTm9kZS0+SmF2YSB0byBjYXRjaAorCQkvLyBpbmNvbXBhdGlibGUgdHlwZXMuIAorCQkKKwkJRGF0YVR5cGUgcHJvcDEgPSBwcm9wZXJ0eS5nZXRQcm9wZXJ0eSgpLmdldERhdGFUeXBlKCk7CisgICAgCQorCQlpZiAoIChwcm9wMSAhPSBudWxsKSAmJiAodHlwZS5pc0Fzc2lnbmFibGVGcm9tKHByb3AxLmdldFBoeXNpY2FsKCkpKSApICB7CisJCQlyZXR1cm47ICAgIAkJCQorCQl9IGVsc2UgaWYgKCBzaW1wbGVUeXBlTWFwcGVyLmdldFhNTFR5cGUodHlwZSkgIT0gbnVsbCApIHsgCisgICAgCQlpZiAoIHNpbXBsZVR5cGVNYXBwZXIuZ2V0WE1MVHlwZSh0eXBlKS5nZXRRTmFtZSgpLmVxdWFscyhwcm9wZXJ0eS5nZXRYU0RUeXBlKCkpKSAKKyAgICAJCQlyZXR1cm47ICAgIAkJCSAgICAJCQorICAgIAl9IGVsc2UgaWYgKCBpc1NpbXBsZVR5cGUocHJvcGVydHkpICkgeworICAgIAkJaWYgKCB0eXBlLmlzQXNzaWduYWJsZUZyb20oc2ltcGxlVHlwZU1hcHBlci5nZXRKYXZhVHlwZShwcm9wZXJ0eS5nZXRYU0RUeXBlKCkpKSkgCisgICAgCQkJcmV0dXJuOyAgICAJCQorICAgIAl9IAorICAgIAkKKwkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbigiUHJvcGVydHkgdHlwZSAiICsgcHJvcDEuZ2V0UGh5c2ljYWwoKS5nZXROYW1lKCkgKyAiIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggIiArIHR5cGUuZ2V0TmFtZSgpKTsKKyAKKwl9CisKICAgICBhYnN0cmFjdCBjbGFzcyBPYmplY3RGYWN0b3J5SW1wbEJhc2UgaW1wbGVtZW50cyBPYmplY3RGYWN0b3J5IHsKICAgICAgICAgcHJvdGVjdGVkIFNpbXBsZVR5cGVNYXBwZXIgc2ltcGxlVHlwZU1hcHBlciA9IG5ldyBTaW1wbGVUeXBlTWFwcGVySW1wbCgpOwogICAgICAgICBwcm90ZWN0ZWQgUHJvcGVydHkgcHJvcGVydHk7CkBAIC0zMDQsOSArMzI4LDEyIEBACiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIHByaXZhdGUgc3RhdGljIExpc3Q8Tm9kZT4gZ2V0VmFsdWVzKERvY3VtZW50IGRvY3VtZW50KSB7CisgICAgCSBMaXN0PE5vZGU+IHByb3BWYWx1ZXMgPSBuZXcgQXJyYXlMaXN0PE5vZGU+KCk7CisgICAgCSBpZiAoIGRvY3VtZW50ID09IG51bGwgKQorICAgIAkJIHJldHVybiBwcm9wVmFsdWVzOwogICAgICAgICAvLyBUaGUgcm9vdCBpcyB0aGUgcHJvcGVydHkgZWxlbWVudAogICAgICAgICBFbGVtZW50IHJvb3RFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRFbGVtZW50KCk7Ci0gICAgICAgIExpc3Q8Tm9kZT4gcHJvcFZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8Tm9kZT4oKTsKKyAgICAgICAKICAgICAgICAgTm9kZUxpc3Qgbm9kZXMgPSByb290RWxlbWVudC5nZXRDaGlsZE5vZGVzKCk7CiAgICAgICAgIGZvciAoaW50IGNvdW50ID0gMDsgY291bnQgPCBub2Rlcy5nZXRMZW5ndGgoKTsgKytjb3VudCkgewogICAgICAgICAgICAgTm9kZSBub2RlID0gbm9kZXMuaXRlbShjb3VudCk7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbmplY3Rpb24vTWV0aG9kSW5qZWN0b3IuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2luamVjdGlvbi9NZXRob2RJbmplY3Rvci5qYXZhCmluZGV4IGJhZjllYjkuLmNkNDNhNjAgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2luamVjdGlvbi9NZXRob2RJbmplY3Rvci5qYXZhCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2luamVjdGlvbi9NZXRob2RJbmplY3Rvci5qYXZhCkBAIC0yMCw2ICsyMCw3IEBACiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5UeXBlOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuQWNjZXNzQ29udHJvbGxlcjsKIGltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZpbGVnZWRBY3Rpb247CiAKQEAgLTUxLDggKzUyLDEyIEBACiAgICAgfQogCiAgICAgcHVibGljIHZvaWQgaW5qZWN0KFQgaW5zdGFuY2UpIHRocm93cyBPYmplY3RDcmVhdGlvbkV4Y2VwdGlvbiB7CisgICAgCWluamVjdChpbnN0YW5jZSwgb2JqZWN0RmFjdG9yeS5nZXRJbnN0YW5jZSgpKTsKKyAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIGluamVjdChUIGluc3RhbmNlLCBPYmplY3QgdmFsdWUpIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIG1ldGhvZC5pbnZva2UoaW5zdGFuY2UsIG9iamVjdEZhY3RvcnkuZ2V0SW5zdGFuY2UoKSk7CisgICAgICAgICAgICBtZXRob2QuaW52b2tlKGluc3RhbmNlLCB2YWx1ZSk7CiAgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdENyZWF0aW9uRXhjZXB0aW9uKCJNZXRob2QgaXMgbm90IGFjY2Vzc2libGUgWyIgKyBtZXRob2QgKyAiXSIsIGUpOwogICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewpAQCAtNjEsNCArNjYsMTggQEAKICAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RDcmVhdGlvbkV4Y2VwdGlvbigiRXhjZXB0aW9uIHRocm93biBieSBzZXR0ZXI6ICIgKyBtZXRob2QuZ2V0TmFtZSgpLCBlKTsKICAgICAgICAgfQogICAgIH0KKworCXB1YmxpYyBDbGFzczw/PiBnZXRUeXBlKCkgeworCQlyZXR1cm4gbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKClbMF07CisJfQorCQorCXB1YmxpYyBUeXBlIGdldEdlbmVyaWNUeXBlKCkgeworCQlyZXR1cm4gbWV0aG9kLmdldEdlbmVyaWNQYXJhbWV0ZXJUeXBlcygpWzBdOworCX0KKworCXB1YmxpYyB2b2lkIGluamVjdE51bGwoVCBpbnN0YW5jZSkgdGhyb3dzIE9iamVjdENyZWF0aW9uRXhjZXB0aW9uIHsKKwkJaW5qZWN0KGluc3RhbmNlLCBudWxsKTsJCQorCX0KKworCQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW52b2NhdGlvbi9KYXZhQXN5bmNJbXBsZW1lbnRhdGlvbkludm9rZXIuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludm9jYXRpb24vSmF2YUFzeW5jSW1wbGVtZW50YXRpb25JbnZva2VyLmphdmEKaW5kZXggZGU4MTBhMC4uOTdiNzU3MCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW52b2NhdGlvbi9KYXZhQXN5bmNJbXBsZW1lbnRhdGlvbkludm9rZXIuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnZvY2F0aW9uL0phdmFBc3luY0ltcGxlbWVudGF0aW9uSW52b2tlci5qYXZhCkBAIC0yMSwxMiArMjEsMTIgQEAKIAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LlRpbWVVbml0OwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmZhY3RvcnkuSW5zdGFuY2VXcmFwcGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5mYWN0b3J5Lk9iamVjdENyZWF0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5pbnZvY2F0aW9uLkFzeW5jUmVzcG9uc2VFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuRGF0YVR5cGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlQ29udHJhY3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YU9wZXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsKQEAgLTQxLDggKzQxLDkgQEAKICAqLwogcHVibGljIGNsYXNzIEphdmFBc3luY0ltcGxlbWVudGF0aW9uSW52b2tlciBleHRlbmRzIEphdmFJbXBsZW1lbnRhdGlvbkludm9rZXIgewogCQotICAgIHB1YmxpYyBKYXZhQXN5bmNJbXBsZW1lbnRhdGlvbkludm9rZXIoT3BlcmF0aW9uIG9wZXJhdGlvbiwgTWV0aG9kIG1ldGhvZCwgUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQpIHsKLSAgICAJc3VwZXIoIG9wZXJhdGlvbiwgbWV0aG9kLCBjb21wb25lbnQpOworICAgIHB1YmxpYyBKYXZhQXN5bmNJbXBsZW1lbnRhdGlvbkludm9rZXIoT3BlcmF0aW9uIG9wZXJhdGlvbiwgTWV0aG9kIG1ldGhvZCwgUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQsIAorICAgIAkJSW50ZXJmYWNlQ29udHJhY3QgaW50ZXJmYWNlQ29udHJhY3QpIHsKKyAgICAJc3VwZXIoIG9wZXJhdGlvbiwgbWV0aG9kLCBjb21wb25lbnQsIGludGVyZmFjZUNvbnRyYWN0KTsKICAgICAgICAgYXNzZXJ0IG1ldGhvZCAhPSBudWxsIDogIk9wZXJhdGlvbiBtZXRob2QgY2Fubm90IGJlIG51bGwiOwogICAgICAgICBhc3NlcnQgKChKYXZhT3BlcmF0aW9uKSBvcGVyYXRpb24pLmlzQXN5bmNTZXJ2ZXIoKSA6ICJPcGVyYXRpb24gbXVzdCBiZSBhc3luYyI7CiAgICAgfSAvLyBlbmQgY29uc3RydWN0b3IKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludm9jYXRpb24vSmF2YUNvbXBvbmVudENvbnRleHRQcm92aWRlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW52b2NhdGlvbi9KYXZhQ29tcG9uZW50Q29udGV4dFByb3ZpZGVyLmphdmEKaW5kZXggNDlkZTEzYy4uMWZhNTEzMSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW52b2NhdGlvbi9KYXZhQ29tcG9uZW50Q29udGV4dFByb3ZpZGVyLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW52b2NhdGlvbi9KYXZhQ29tcG9uZW50Q29udGV4dFByb3ZpZGVyLmphdmEKQEAgLTUyLDEwICs1MiwxMyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGF0YWJpbmRpbmcuRGF0YUJpbmRpbmdFeHRlbnNpb25Qb2ludDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuSmF2YUNvbnN0cnVjdG9ySW1wbDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuSmF2YUVsZW1lbnRJbXBsOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5KYXZhSW1wbGVtZW50YXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFSZXNvdXJjZUltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFTY29wZUltcGw7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmNvbnRleHQuSW5zdGFuY2VGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbmplY3Rpb24uSmF2YVByb3BlcnR5VmFsdWVPYmplY3RGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LkphdmFJbnRyb3NwZWN0aW9uSGVscGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFPcGVyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5pbXBsLkphdmFJbnRlcmZhY2VVdGlsOwpAQCAtNzYsNiArNzksNyBAQAogICAgIHByaXZhdGUgSmF2YUluc3RhbmNlRmFjdG9yeVByb3ZpZGVyPD8+IGluc3RhbmNlRmFjdG9yeVByb3ZpZGVyOwogICAgIHByaXZhdGUgUHJveHlGYWN0b3J5IHByb3h5RmFjdG9yeTsKICAgICBwcml2YXRlIEluc3RhbmNlRmFjdG9yeSBpbnN0YW5jZUZhY3Rvcnk7CisJcHJpdmF0ZSBKYXZhU2NvcGVJbXBsIHNjb3BlOwogCiAgICAgcHVibGljIEphdmFDb21wb25lbnRDb250ZXh0UHJvdmlkZXIoUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmF2YUluc3RhbmNlRmFjdG9yeVByb3ZpZGVyIGNvbmZpZ3VyYXRpb24sCkBAIC05Myw2ICs5Nyw3IEBACiAgICAgICAgIC8vICAgICAgICB9CiAgICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50OwogICAgICAgICB0aGlzLnByb3BlcnR5VmFsdWVGYWN0b3J5ID0gKEphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSkgcHJvcGVydHlWYWx1ZU9iamVjdEZhY3Rvcnk7CisgICAgICAgIHRoaXMuc2NvcGUgPSAoKEphdmFJbXBsZW1lbnRhdGlvbiljb21wb25lbnQuZ2V0SW1wbGVtZW50YXRpb24oKSkuZ2V0SmF2YVNjb3BlKCk7CiAgICAgfQogCiAgICAgSW5zdGFuY2VXcmFwcGVyPD8+IGNyZWF0ZUluc3RhbmNlV3JhcHBlcigpIHRocm93cyBPYmplY3RDcmVhdGlvbkV4Y2VwdGlvbiB7CkBAIC0xNDQsNiArMTQ5LDE2IEBACiAgICAgfQogCiAgICAgdm9pZCBzdGFydCgpIHsKKyAgICAJTGlzdDxKYXZhRWxlbWVudEltcGw+IGNhbGxiYWNrSW5qZWN0aW9uTGlzdCA9IG51bGw7CisgICAgCQorICAgIAkvLyBJZiB0aGUgY29tcG9uZW50IGltcGxlbWVudGF0aW9uIGlzIHN0YXRlbGVzcywgd2UgbmVlZCB0byBpbmplY3QgdGhlIGNhbGxiYWNrcyBvbiBzZXJ2aWNlIGludm9jYXRpb24KKyAgICAJLy8gcmF0aGVyIHRoYW4gZG9pbmcgaXQgb25jZSBhdCB0aGUgY29tcG9uZW50IGxldmVsLiAKKyAgICAJaWYgKCBzY29wZS5lcXVhbHMoSmF2YVNjb3BlSW1wbC5TVEFURUxFU1MpKSB7CisgICAgCQljYWxsYmFja0luamVjdGlvbkxpc3QgPSBpbnN0YW5jZUZhY3RvcnlQcm92aWRlci5nZXRDYWxsYmFja0luamVjdGlvblNpdGVzKCk7CisgICAgCX0gZWxzZSB7CisgICAgCQljYWxsYmFja0luamVjdGlvbkxpc3QgPSBpbnN0YW5jZUZhY3RvcnlQcm92aWRlci5nZXRJbmplY3Rpb25TaXRlcygpOworICAgIAl9CisgICAgCQkKICAgICAgICAgaWYgKCFpbnN0YW5jZUZhY3RvcnlQcm92aWRlci5nZXRJbXBsZW1lbnRhdGlvbigpLmdldENhbGxiYWNrTWVtYmVycygpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgTWFwPFN0cmluZywgTGlzdDxFbmRwb2ludFJlZmVyZW5jZT4+IGNhbGxiYWNrV2lyZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIExpc3Q8RW5kcG9pbnRSZWZlcmVuY2U+PigpOwogICAgICAgICAgICAgZm9yIChDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnQuZ2V0U2VydmljZXMoKSkgewpAQCAtMTc5LDcgKzE5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0b3J5ID0gbmV3IENhbGxiYWNrV2lyZU9iamVjdEZhY3RvcnkoYnVzaW5lc3NJbnRlcmZhY2UsIHByb3h5RmFjdG9yeSwgd2lyZXMpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICghKGVsZW1lbnQuZ2V0QW5jaG9yKCkgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlRmFjdG9yeVByb3ZpZGVyLmdldEluamVjdGlvblNpdGVzKCkuYWRkKGVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tJbmplY3Rpb25MaXN0LmFkZChlbGVtZW50KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUZhY3RvcnlQcm92aWRlci5zZXRPYmplY3RGYWN0b3J5KGVsZW1lbnQsIGZhY3RvcnkpOwogICAgICAgICAgICAgICAgIH0KQEAgLTI4OCwxNCArMzAzLDE1IEBACiAgICAgICAgIC8vY2xlYW5VcFBvbGljeUhhbmRsZXJzKCk7CiAgICAgfQogCi0gICAgSW52b2tlciBjcmVhdGVJbnZva2VyKE9wZXJhdGlvbiBvcGVyYXRpb24pIHRocm93cyBOb1N1Y2hNZXRob2RFeGNlcHRpb24geworICAgIEludm9rZXIgY3JlYXRlSW52b2tlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBJbnRlcmZhY2VDb250cmFjdCBpbnRlcmZhY2VDb250cmFjdCkgdGhyb3dzIE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiB7CiAgICAgICAgIENsYXNzPD8+IGltcGxDbGFzcyA9IGluc3RhbmNlRmFjdG9yeVByb3ZpZGVyLmdldEltcGxlbWVudGF0aW9uQ2xhc3MoKTsKIAogICAgICAgICBNZXRob2QgbWV0aG9kID0gSmF2YUludGVyZmFjZVV0aWwuZmluZE1ldGhvZChpbXBsQ2xhc3MsIG9wZXJhdGlvbik7Ci0gICAgICAgIGlmKCAoKEphdmFPcGVyYXRpb24pIG9wZXJhdGlvbikuaXNBc3luY1NlcnZlcigpICkgewotICAgICAgICAJcmV0dXJuIG5ldyBKYXZhQXN5bmNJbXBsZW1lbnRhdGlvbkludm9rZXIob3BlcmF0aW9uLCBtZXRob2QsIGNvbXBvbmVudCk7CisgICAgICAgIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBKYXZhT3BlcmF0aW9uICYmCisgICAgICAgICAgICAoKEphdmFPcGVyYXRpb24pIG9wZXJhdGlvbikuaXNBc3luY1NlcnZlcigpICkgeworICAgICAgICAJcmV0dXJuIG5ldyBKYXZhQXN5bmNJbXBsZW1lbnRhdGlvbkludm9rZXIob3BlcmF0aW9uLCBtZXRob2QsIGNvbXBvbmVudCwgaW50ZXJmYWNlQ29udHJhY3QpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAJcmV0dXJuIG5ldyBKYXZhSW1wbGVtZW50YXRpb25JbnZva2VyKG9wZXJhdGlvbiwgbWV0aG9kLCBjb21wb25lbnQpOworICAgICAgICAJcmV0dXJuIG5ldyBKYXZhSW1wbGVtZW50YXRpb25JbnZva2VyKG9wZXJhdGlvbiwgbWV0aG9kLCBjb21wb25lbnQsIGludGVyZmFjZUNvbnRyYWN0KTsKICAgICAgICAgfSAvLyBlbmQgaWYKICAgICB9IC8vIGVuZCAKIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW52b2NhdGlvbi9KYXZhSW1wbGVtZW50YXRpb25JbnZva2VyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnZvY2F0aW9uL0phdmFJbXBsZW1lbnRhdGlvbkludm9rZXIuamF2YQppbmRleCA0ZDU0ZmJkLi45ZWFkZTNiIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnZvY2F0aW9uL0phdmFJbXBsZW1lbnRhdGlvbkludm9rZXIuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnZvY2F0aW9uL0phdmFJbXBsZW1lbnRhdGlvbkludm9rZXIuamF2YQpAQCAtMjAsMTkgKzIwLDMwIEBACiAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgamF2YXgueG1sLndzLkhvbGRlcjsKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuRW5kcG9pbnRSZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmZhY3RvcnkuSW5zdGFuY2VXcmFwcGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5mYWN0b3J5Lk9iamVjdENyZWF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5zY29wZS5TY29wZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuc2NvcGUuU2NvcGVDb250YWluZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLnNjb3BlLlNjb3BlZFJ1bnRpbWVDb21wb25lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFJbXBsZW1lbnRhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuY29udGV4dC5SZWZsZWN0aXZlSW5zdGFuY2VXcmFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbmplY3Rpb24uSW5qZWN0b3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuSmF2YUludHJvc3BlY3Rpb25IZWxwZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuRGF0YVR5cGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlQ29udHJhY3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLlBhcmFtZXRlck1vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuaW1wbC5KYXZhSW50ZXJmYWNlVXRpbDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudDsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUmVmZXJlbmNlOwogaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOwogCiAvKioKQEAgLTQ4LDIzICs1OSwyNyBAQAogCiAgICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAgICAgcHJvdGVjdGVkIGZpbmFsIFNjb3BlQ29udGFpbmVyIHNjb3BlQ29udGFpbmVyOworCXByaXZhdGUgZmluYWwgSW50ZXJmYWNlQ29udHJhY3QgaW50ZXJmYXplOwogCi0gICAgcHVibGljIEphdmFJbXBsZW1lbnRhdGlvbkludm9rZXIoT3BlcmF0aW9uIG9wZXJhdGlvbiwgTWV0aG9kIG1ldGhvZCwgUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQpIHsKKyAgICBwdWJsaWMgSmF2YUltcGxlbWVudGF0aW9uSW52b2tlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBNZXRob2QgbWV0aG9kLCBSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCwgSW50ZXJmYWNlQ29udHJhY3QgaW50ZikgewogICAgICAgICBhc3NlcnQgbWV0aG9kICE9IG51bGwgOiAiT3BlcmF0aW9uIG1ldGhvZCBjYW5ub3QgYmUgbnVsbCI7CiAgICAgICAgIHRoaXMubWV0aG9kID0gbWV0aG9kOwogICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKICAgICAgICAgdGhpcy5zY29wZUNvbnRhaW5lciA9ICgoU2NvcGVkUnVudGltZUNvbXBvbmVudCljb21wb25lbnQpLmdldFNjb3BlQ29udGFpbmVyKCk7CiAgICAgICAgIHRoaXMuYWxsb3dzUEJSID0gKChKYXZhSW1wbGVtZW50YXRpb24pY29tcG9uZW50LmdldEltcGxlbWVudGF0aW9uKCkpLmlzQWxsb3dzUGFzc0J5UmVmZXJlbmNlKG1ldGhvZCk7CisgICAgICAgIHRoaXMuaW50ZXJmYXplID0gaW50ZjsKICAgICB9CiAKLSAgICBwdWJsaWMgSmF2YUltcGxlbWVudGF0aW9uSW52b2tlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCkgeworICAgIHB1YmxpYyBKYXZhSW1wbGVtZW50YXRpb25JbnZva2VyKE9wZXJhdGlvbiBvcGVyYXRpb24sIFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LCBJbnRlcmZhY2VDb250cmFjdCBpbnRmKSB7CiAgICAgICAgIC8vIHVzZWQgaWYgdGhlIG1ldGhvZCBjYW4ndCBiZSBjb21wdXRlZCBzdGF0aWNhbGx5IGluIGFkdmFuY2UgCiAgICAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOwogICAgICAgICB0aGlzLnNjb3BlQ29udGFpbmVyID0gKChTY29wZWRSdW50aW1lQ29tcG9uZW50KWNvbXBvbmVudCkuZ2V0U2NvcGVDb250YWluZXIoKTsKKyAgICAgICAgdGhpcy5pbnRlcmZhemUgPSBpbnRmOwogICAgIH0KIAogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogICAgIHB1YmxpYyBNZXNzYWdlIGludm9rZShNZXNzYWdlIG1zZykgeworICAgIAkKICAgICAgICAgT3BlcmF0aW9uIG9wID0gbXNnLmdldE9wZXJhdGlvbigpOwogICAgICAgICBpZiAob3AgPT0gbnVsbCkgewogICAgICAgICAgICAgb3AgPSB0aGlzLm9wZXJhdGlvbjsKQEAgLTgzLDggKzk4LDE0IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNhbGwgbWlnaHQgY3JlYXRlIGEgbmV3IGNvbnZlcnNhdGlvbiwgYXMgYSByZXN1bHQsIHRoZSBtc2cuZ2V0Q29udmVyc2F0aW9uSUQoKSBtaWdodCAKICAgICAgICAgICAgIC8vIHJldHVybiBhIG5ldyB2YWx1ZQotICAgICAgICAgICAgSW5zdGFuY2VXcmFwcGVyIHdyYXBwZXIgPSBzY29wZUNvbnRhaW5lci5nZXRXcmFwcGVyKGNvbnRleHRJZCk7Ci0KKyAgICAgICAgICAgIFJlZmxlY3RpdmVJbnN0YW5jZVdyYXBwZXIgd3JhcHBlciA9IChSZWZsZWN0aXZlSW5zdGFuY2VXcmFwcGVyKSBzY29wZUNvbnRhaW5lci5nZXRXcmFwcGVyKGNvbnRleHRJZCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgY2FsbGJhY2sgaW50ZXJmYWNlIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gaXMgc3RhdGVsZXNzLCB3ZSBuZWVkIHRvCisgICAgICAgICAgICAvLyBpbmplY3QgY2FsbGJhY2tzIGF0IGludm9jYXRpb24gdGltZS4gRm9yIENvbXBvc2l0ZSBzY29wZSwgdGhpcyBoYXMgYWxyZWFkeSBiZWVuIGRvbmUuIAorICAgICAgICAgICAgaWYgKCggaW50ZXJmYXplLmdldENhbGxiYWNrSW50ZXJmYWNlKCkgIT0gbnVsbCApICAmJiAoc2NvcGVDb250YWluZXIuZ2V0U2NvcGUoKS5lcXVhbHMoU2NvcGUuU1RBVEVMRVNTKSkpeworICAgICAgICAgICAgCWluamVjdENhbGxiYWNrcyh3cmFwcGVyLCAoSmF2YUludGVyZmFjZSlpbnRlcmZhemUuZ2V0Q2FsbGJhY2tJbnRlcmZhY2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIE9iamVjdCBpbnN0YW5jZSA9IHdyYXBwZXIuZ2V0SW5zdGFuY2UoKTsKIAogICAgICAgICAgICAgLy8gSWYgdGhlIG1ldGhvZCBjb3VsZG4ndCBiZSBjb21wdXRlZCBzdGF0aWNhbGx5LCBvciB0aGUgaW5zdGFuY2UgYmVpbmcKQEAgLTEwNiw2ICsxMjcsMzAgQEAKICAgICAgICAgICAgIAogICAgICAgICAgICAgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoaW5zdGFuY2UuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKICAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGFyZ3VtZW50SG9sZGVyQ291bnQgPSAwOworCisgICAgICAgICAgICAvLyBIb2xkZXIgcGF0dGVybi4gQW55IHBheWxvYWQgcGFyYW1ldGVycyA8VD4gd2hpY2ggYXJlIHNob3VsZCBiZSBpbiBob2xkZXJzIGFyZSBwbGFjZWQgaW4gSG9sZGVyPFQ+LgorICAgICAgICAgICAgLy8gT25seSBjaGVjayBIb2xkZXIgZm9yIHJlbW90YWJsZSBpbnRlcmZhY2VzCisgICAgICAgICAgICBpZiAoaW1ldGhvZCAhPSBudWxsICYmIG9wLmdldEludGVyZmFjZSgpLmlzUmVtb3RhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICBMaXN0PERhdGFUeXBlPiBpbnB1dFR5cGVzID0gb3AuZ2V0SW5wdXRUeXBlKCkuZ2V0TG9naWNhbCgpOworICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gaW5wdXRUeXBlcy5zaXplKCk7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFBhcmFtZXRlck1vZGUuSU4gIT0gb3AuZ2V0UGFyYW1ldGVyTW9kZXMoKS5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFByb21vdGUgYXJyYXkgcGFyYW1zIGZyb20gWzxUPl0gdG8gW0hvbGRlcjxUPl0KKyAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdFtdIHBheWxvYWRBcnJheSA9IChPYmplY3RbXSlwYXlsb2FkOworICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIFBhcmFtZXRlck1vZGUuSU5PVVQgPT0gb3AuZ2V0UGFyYW1ldGVyTW9kZXMoKS5nZXQoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAlPYmplY3QgaXRlbSA9IHBheWxvYWRBcnJheVtpXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIAlwYXlsb2FkQXJyYXlbaV0gPSBuZXcgSG9sZGVyKGl0ZW0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIAkvLyBDcmVhdGUgYW4gZW1wdHkgSG9sZGVyIHNpbmNlIHdlIHNob3VsZCBub3QgcGFzcyB2YWx1ZXMgZm9yIE9VVCBwYXJhbWV0ZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAJcGF5bG9hZEFycmF5W2ldID0gbmV3IEhvbGRlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudEhvbGRlckNvdW50Kys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIE9iamVjdCByZXQ7CiAgICAgICAgICAgICBpZiAocGF5bG9hZCAhPSBudWxsICYmICFwYXlsb2FkLmdldENsYXNzKCkuaXNBcnJheSgpKSB7CiAgICAgICAgICAgICAgICAgcmV0ID0gaW1ldGhvZC5pbnZva2UoaW5zdGFuY2UsIHBheWxvYWQpOwpAQCAtMTE1LDcgKzE2MCwyOSBAQAogCiAgICAgICAgICAgICBzY29wZUNvbnRhaW5lci5yZXR1cm5XcmFwcGVyKHdyYXBwZXIsIGNvbnRleHRJZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIG1zZy5zZXRCb2R5KHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChhcmd1bWVudEhvbGRlckNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIC8vIEhvbGRlciBwYXR0ZXJuLiBBbnkgcGF5bG9hZCBIb2xkZXI8VD4gdHlwZXMgYXJlIHJldHVybmVkIGFzIHRoZSBtZXNzYWdlIGJvZHkuCisgICAgICAgICAgICAgICAgTGlzdDxPYmplY3Q+IHJldHVybkFyZ3MgPSBuZXcgQXJyYXlMaXN0PE9iamVjdD4oKTsKKyAgICAgICAgICAgICAgICByZXR1cm5BcmdzLmFkZChyZXQpOworICAgICAgICAgICAgICAgIGlmIChpbWV0aG9kICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAJT2JqZWN0W10gcGF5bG9hZEFycmF5ID0gKE9iamVjdFtdKXBheWxvYWQ7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gb3AuZ2V0UGFyYW1ldGVyTW9kZXMoKS5zaXplKCk7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbiggIkphdmFJbXBsZW1lbnRhdGlvbkludm9rZXIuaW52b2tlIHJldHVybiBwYXJhbWV0ZXIgIiArIGkgKyAiIHR5cGU9IiArIHBhcmFtZXRlci5nZXRDbGFzcygpLmdldE5hbWUoKSApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBhcmFtZXRlck1vZGUuSU4gIT0gb3AuZ2V0UGFyYW1ldGVyTW9kZXMoKS5nZXQoaSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVtb3RlIGFycmF5IHBhcmFtcyBmcm9tIEhvbGRlcjxUPiB0byA8VD4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhvbGRlcjxPYmplY3Q+IGl0ZW0gPSAoSG9sZGVyPE9iamVjdD4pcGF5bG9hZEFycmF5W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkQXJyYXlbaV0gPSBpdGVtLnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5BcmdzLmFkZChwYXlsb2FkQXJyYXlbaV0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbXNnLnNldEJvZHkocmV0dXJuQXJncy50b0FycmF5KCkpOworCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1zZy5zZXRCb2R5KHJldCk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgVGhyb3dhYmxlIGNhdXNlID0gZS5nZXRUYXJnZXRFeGNlcHRpb24oKTsKICAgICAgICAgICAgIGJvb2xlYW4gaXNDaGVja2VkID0gZmFsc2U7CkBAIC0xMjUsOCArMTkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgbXNnLnNldEZhdWx0Qm9keShjYXVzZSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gCi0gICAgICAgICAgICAKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghaXNDaGVja2VkKSB7CiAgICAgICAgICAgICAgICAgaWYgKGNhdXNlIGluc3RhbmNlb2YgUnVudGltZUV4Y2VwdGlvbikgewogICAgICAgICAgICAgICAgICAgICB0aHJvdyAoUnVudGltZUV4Y2VwdGlvbiljYXVzZTsKQEAgLTE0OSw0ICsyMTUsMjggQEAKICAgICAgICAgcmV0dXJuIG1zZzsKICAgICB9CiAKKwlwcml2YXRlIHZvaWQgaW5qZWN0Q2FsbGJhY2tzKFJlZmxlY3RpdmVJbnN0YW5jZVdyYXBwZXIgd3JhcHBlciwKKwkJCUphdmFJbnRlcmZhY2UgY2FsbGJhY2tJbnRlcmZhY2UpIHsKKwkKKwkJZm9yIChJbmplY3RvciBpbmplY3RvciA6IHdyYXBwZXIuZ2V0Q2FsbGJhY2tJbmplY3RvcnMoKSkgeworCQkJaWYgKGluamVjdG9yICE9IG51bGwpIHsKKwkJCQl0cnkgeyAgICAgICAKKwkJCQkJaWYgKFNlcnZpY2VSZWZlcmVuY2UuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShpbmplY3Rvci5nZXRUeXBlKCkpKSB7CisJCQkJCQlDbGFzczw/PiBpbnRmID0gSmF2YUludHJvc3BlY3Rpb25IZWxwZXIuZ2V0QnVzaW5lc3NJbnRlcmZhY2UoaW5qZWN0b3IuZ2V0VHlwZSgpLCBpbmplY3Rvci5nZXRHZW5lcmljVHlwZSgpKTsKKwkJCQkJCWlmICggaW50Zi5pc0Fzc2lnbmFibGVGcm9tKGNhbGxiYWNrSW50ZXJmYWNlLmdldEphdmFDbGFzcygpKSkgeyAgICAgICAgICAgICAgCQkgICAgICAgICAgICAgICAgCQkgICAgICAgICAgICAgICAgCQkKKwkJCQkJCQlpbmplY3Rvci5pbmplY3Qod3JhcHBlci5nZXRJbnN0YW5jZSgpKTsgICAgICAgICAKKwkJCQkJCX0KKwkJCQkJfSBlbHNlIGlmIChpbmplY3Rvci5nZXRUeXBlKCkuaXNBc3NpZ25hYmxlRnJvbShjYWxsYmFja0ludGVyZmFjZS5nZXRKYXZhQ2xhc3MoKSkpIHsKKwkJCQkJCWluamVjdG9yLmluamVjdCh3cmFwcGVyLmdldEluc3RhbmNlKCkpOworCQkJCQl9IGVsc2UgeworCQkJCQkJaW5qZWN0b3IuaW5qZWN0TnVsbCh3cmFwcGVyLmdldEluc3RhbmNlKCkpOworCQkJCQl9CisJCQkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsJICAgICAgICAgICAgICAgICAgIAorCQkJCQl0aHJvdyBuZXcgT2JqZWN0Q3JlYXRpb25FeGNlcHRpb24oIkV4Y2VwdGlvbiBpbnZva2luZyBpbmplY3RvciAtICIgKyBlLmdldE1lc3NhZ2UoKSwgZSk7CisJCQkJfQorCQkJfQorCQl9CisJCQorCX0JCQorCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnZvY2F0aW9uL0phdmFJbXBsZW1lbnRhdGlvblByb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnZvY2F0aW9uL0phdmFJbXBsZW1lbnRhdGlvblByb3ZpZGVyLmphdmEKaW5kZXggM2NlZTE1Ni4uZDdhYmQwMiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW52b2NhdGlvbi9KYXZhSW1wbGVtZW50YXRpb25Qcm92aWRlci5qYXZhCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludm9jYXRpb24vSmF2YUltcGxlbWVudGF0aW9uUHJvdmlkZXIuamF2YQpAQCAtMTE4LDcgKzExOCw3IEBACiAKICAgICBwdWJsaWMgSW52b2tlciBjcmVhdGVJbnZva2VyKFJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UsIE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRDb250ZXh0UHJvdmlkZXIuY3JlYXRlSW52b2tlcihvcGVyYXRpb24pOworICAgICAgICAgICAgcmV0dXJuIGNvbXBvbmVudENvbnRleHRQcm92aWRlci5jcmVhdGVJbnZva2VyKG9wZXJhdGlvbiwgc2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpKTsKICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgaW5zdGFuY2UgYmVpbmcgaW52b2tlZCBpcyBhIHVzZXItc3BlY2lmaWVkCiAgICAgICAgICAgICAvLyBjYWxsYmFjayBvYmplY3QgdGhhdCBpc24ndCBhbiBpbnN0YW5jZSBvZiB0aGUgY29tcG9uZW50IGltcGxlbWVudGF0aW9uCkBAIC0xMzIsMTIgKzEzMiwxMiBAQAogICAgICAgICAgICAgaWYgKGlmYWNlIGluc3RhbmNlb2YgSmF2YUludGVyZmFjZSkgewogICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgIE1ldGhvZCBtZXRob2QgPSBKYXZhSW50ZXJmYWNlVXRpbC5maW5kTWV0aG9kKCgoSmF2YUludGVyZmFjZSlpZmFjZSkuZ2V0SmF2YUNsYXNzKCksIG9wZXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSmF2YUltcGxlbWVudGF0aW9uSW52b2tlcihvcGVyYXRpb24sIG1ldGhvZCwgY29tcG9uZW50Q29udGV4dFByb3ZpZGVyLmdldENvbXBvbmVudCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBKYXZhSW1wbGVtZW50YXRpb25JbnZva2VyKG9wZXJhdGlvbiwgbWV0aG9kLCBjb21wb25lbnRDb250ZXh0UHJvdmlkZXIuZ2V0Q29tcG9uZW50KCksIHNlcnZpY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSk7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZTEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBKYXZhSW1wbGVtZW50YXRpb25JbnZva2VyKG9wZXJhdGlvbiwgY29tcG9uZW50Q29udGV4dFByb3ZpZGVyLmdldENvbXBvbmVudCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEphdmFJbXBsZW1lbnRhdGlvbkludm9rZXIob3BlcmF0aW9uLCBjb21wb25lbnRDb250ZXh0UHJvdmlkZXIuZ2V0Q29tcG9uZW50KCksIHNlcnZpY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnZvY2F0aW9uL0phdmFJbnN0YW5jZUZhY3RvcnlQcm92aWRlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW52b2NhdGlvbi9KYXZhSW5zdGFuY2VGYWN0b3J5UHJvdmlkZXIuamF2YQppbmRleCA3ZmNmYWFkLi4xZjFmMWVlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnZvY2F0aW9uL0phdmFJbnN0YW5jZUZhY3RvcnlQcm92aWRlci5qYXZhCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludm9jYXRpb24vSmF2YUluc3RhbmNlRmFjdG9yeVByb3ZpZGVyLmphdmEKQEAgLTU3LDYgKzU3LDcgQEAKICAgICBwcml2YXRlIGZpbmFsIEV2ZW50SW52b2tlcjxUPiBpbml0SW52b2tlcjsKICAgICBwcml2YXRlIGZpbmFsIEV2ZW50SW52b2tlcjxUPiBkZXN0cm95SW52b2tlcjsKICAgICBwcml2YXRlIGZpbmFsIE1hcDxKYXZhRWxlbWVudEltcGwsIE9iamVjdD4gZmFjdG9yaWVzID0gbmV3IEhhc2hNYXA8SmF2YUVsZW1lbnRJbXBsLCBPYmplY3Q+KCk7CisJcHJpdmF0ZSBmaW5hbCBMaXN0PEphdmFFbGVtZW50SW1wbD4gY2FsbGJhY2tJbmplY3Rpb25TaXRlczsKIAogICAgIHB1YmxpYyBKYXZhSW5zdGFuY2VGYWN0b3J5UHJvdmlkZXIoSmF2YUltcGxlbWVudGF0aW9uIGRlZmluaXRpb24pIHsKICAgICAgICAgdGhpcy5kZWZpbml0aW9uID0gZGVmaW5pdGlvbjsKQEAgLTY1LDYgKzY2LDcgQEAKICAgICAgICAgdGhpcy5kZXN0cm95SW52b2tlciA9IGRlZmluaXRpb24uZ2V0RGVzdHJveU1ldGhvZCgpID09IG51bGwgPyBudWxsIDogbmV3IE1ldGhvZEV2ZW50SW52b2tlcjxUPihkZWZpbml0aW9uCiAgICAgICAgICAgICAuZ2V0RGVzdHJveU1ldGhvZCgpKTsKICAgICAgICAgaW5qZWN0aW9uU2l0ZXMgPSBuZXcgQXJyYXlMaXN0PEphdmFFbGVtZW50SW1wbD4oKTsKKyAgICAgICAgY2FsbGJhY2tJbmplY3Rpb25TaXRlcyA9IG5ldyBBcnJheUxpc3Q8SmF2YUVsZW1lbnRJbXBsPigpOwogICAgIH0KIAogICAgIFByb3h5RmFjdG9yeSBnZXRQcm94eUZhY3RvcnkoKSB7CkBAIC04NSwxMiArODcsMTUgQEAKICAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKICAgICBwdWJsaWMgSW5zdGFuY2VGYWN0b3J5PFQ+IGNyZWF0ZUZhY3RvcnkoKSB7CiAgICAgICAgIE9iamVjdEZhY3Rvcnk8Pz5bXSBpbml0QXJncyA9IGdldENvbnN0cnVjdG9yQXJncygpOwotICAgICAgICBJbmplY3RvcjxUPltdIGluamVjdG9ycyA9IGdldEluamVjdG9ycygpOworICAgICAgICBJbmplY3RvcjxUPltdIGluamVjdG9ycyA9IGdldEluamVjdG9ycyhmYWxzZSk7CisgICAgICAgIEluamVjdG9yPFQ+W10gY2FsbGJhY2tJbmplY3RvcnMgPSBnZXRJbmplY3RvcnModHJ1ZSk7CiAgICAgICAgIHJldHVybiBuZXcgUmVmbGVjdGl2ZUluc3RhbmNlRmFjdG9yeTxUPigoQ29uc3RydWN0b3I8VD4pZGVmaW5pdGlvbi5nZXRDb25zdHJ1Y3RvcigpLmdldENvbnN0cnVjdG9yKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0QXJncywgaW5qZWN0b3JzLCBpbml0SW52b2tlciwgZGVzdHJveUludm9rZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdEFyZ3MsIGluamVjdG9ycywgY2FsbGJhY2tJbmplY3RvcnMsIGluaXRJbnZva2VyLCBkZXN0cm95SW52b2tlcik7CiAgICAgfQogCi0gICAgcHJpdmF0ZSBPYmplY3RGYWN0b3J5PD8+W10gZ2V0Q29uc3RydWN0b3JBcmdzKCkgeworIAorCisJcHJpdmF0ZSBPYmplY3RGYWN0b3J5PD8+W10gZ2V0Q29uc3RydWN0b3JBcmdzKCkgewogICAgICAgICBKYXZhQ29uc3RydWN0b3JJbXBsPD8+IGNvbnN0cnVjdG9yID0gZGVmaW5pdGlvbi5nZXRDb25zdHJ1Y3RvcigpOwogICAgICAgICBPYmplY3RGYWN0b3J5PD8+W10gaW5pdEFyZ3MgPSBuZXcgT2JqZWN0RmFjdG9yeTw/Pltjb25zdHJ1Y3Rvci5nZXRQYXJhbWV0ZXJzKCkubGVuZ3RoXTsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbml0QXJncy5sZW5ndGg7IGkrKykgewpAQCAtMTAxLDEzICsxMDYsMjEgQEAKICAgICAgICAgcmV0dXJuIGluaXRBcmdzOwogICAgIH0KIAorCSAgIAorCSAgIAogICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQotICAgIHByaXZhdGUgSW5qZWN0b3I8VD5bXSBnZXRJbmplY3RvcnMoKSB7CisgICAgcHJpdmF0ZSBJbmplY3RvcjxUPltdIGdldEluamVjdG9ycyhib29sZWFuIGNhbGxiYWNrKSB7CisgICAgCUxpc3Q8SmF2YUVsZW1lbnRJbXBsPiBzaXRlcyA9IG51bGw7CisgICAgCWlmICggY2FsbGJhY2sgKSAKKyAgICAJCXNpdGVzID0gY2FsbGJhY2tJbmplY3Rpb25TaXRlczsKKyAgICAJZWxzZQorICAgIAkJc2l0ZXMgPSBpbmplY3Rpb25TaXRlczsKKyAgICAJCiAgICAgICAgIC8vIHdvcmsgYXJvdW5kIEpESzEuNSBpc3N1ZSB3aXRoIGFsbG9jYXRpbmcgZ2VuZXJpYyBhcnJheXMKLSAgICAgICAgSW5qZWN0b3I8VD5bXSBpbmplY3RvcnMgPSBuZXcgSW5qZWN0b3JbaW5qZWN0aW9uU2l0ZXMuc2l6ZSgpXTsKKyAgICAgICAgSW5qZWN0b3I8VD5bXSBpbmplY3RvcnMgPSBuZXcgSW5qZWN0b3Jbc2l0ZXMuc2l6ZSgpXTsKIAogICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIGZvciAoSmF2YUVsZW1lbnRJbXBsIGVsZW1lbnQgOiBpbmplY3Rpb25TaXRlcykgeworICAgICAgICBmb3IgKEphdmFFbGVtZW50SW1wbCBlbGVtZW50IDogc2l0ZXMpIHsKICAgICAgICAgICAgIE9iamVjdCBvYmogPSBmYWN0b3JpZXMuZ2V0KGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKG9iaiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE9iamVjdEZhY3RvcnkpIHsKQEAgLTE3Miw2ICsxODUsMTMgQEAKICAgICAgICAgcmV0dXJuIGluamVjdGlvblNpdGVzOwogICAgIH0KIAorICAgIC8qKiAgICAgCisgICAgICogQHJldHVybiB0aGUgY2FsbGJhY2tJbmplY3Rpb25TaXRlcworICAgICAqLworICAgIHB1YmxpYyBMaXN0PEphdmFFbGVtZW50SW1wbD4gZ2V0Q2FsbGJhY2tJbmplY3Rpb25TaXRlcygpIHsKKwkJcmV0dXJuIGNhbGxiYWNrSW5qZWN0aW9uU2l0ZXM7CisJfQorICAgIAogICAgIC8qKgogICAgICAqIEByZXR1cm4gdGhlIGZhY3RvcmllcwogICAgICAqLwpAQCAtMTc5LDQgKzE5OSw2IEBACiAgICAgICAgIHJldHVybiBmYWN0b3JpZXM7CiAgICAgfQogCisJCisKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludm9jYXRpb24vUmVzcG9uc2VEaXNwYXRjaEltcGwuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludm9jYXRpb24vUmVzcG9uc2VEaXNwYXRjaEltcGwuamF2YQppbmRleCAwZDU2YTZlLi5kYzBiYjk0IDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnZvY2F0aW9uL1Jlc3BvbnNlRGlzcGF0Y2hJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW52b2NhdGlvbi9SZXNwb25zZURpc3BhdGNoSW1wbC5qYXZhCkBAIC02Myw2ICs2Myw3IEBACiAJICovCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMzAwMTU4MzU1OTkyNTY4NTkyTDsKICAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgV1NfTUVTU0FHRV9JRCA9ICJXU19NRVNTQUdFX0lEIjsKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgTUVTU0FHRV9JRCA9ICJNRVNTQUdFX0lEIjsKIAkKIAkvLyBBIGxhdGNoIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNlbmRSZXNwb25zZSgpIGFuZCBzZW5kRmF1bHQoKSBvcGVyYXRpb25zIGFyZSB1c2VkIGF0IG1vc3Qgb25jZQogCS8vIFRoZSBsYXRjaCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSB2YWx1ZSAiZmFsc2UiCkBAIC04Nyw3ICs4OCwxMiBAQAogCQljYWxsYmFja1JlZiA9IGdldEFzeW5jQ2FsbGJhY2tSZWYoIG1zZyApOwogICAgIAkKIAkJY2FsbGJhY2tBZGRyZXNzID0gbXNnLmdldEZyb20oKS5nZXRDYWxsYmFja0VuZHBvaW50KCkuZ2V0VVJJKCk7Ci0gICAgCW1lc3NhZ2VJRCA9IChTdHJpbmcpIG1zZy5nZXRIZWFkZXJzKCkuZ2V0KFdTX01FU1NBR0VfSUQpOworCQkKKwkJLy8gVE9ETyAtIHdoeSBpcyBXUyBzdHVmZiBibGVlZGluZyBpbnRvIGdlbmVyYWwgY29kZT8KKyAgICAJbWVzc2FnZUlEID0gKFN0cmluZykgbXNnLmdldEhlYWRlcnMoKS5nZXQoTUVTU0FHRV9JRCk7CisgICAgCWlmIChtZXNzYWdlSUQgPT0gbnVsbCl7CisgICAgCSAgICBtZXNzYWdlSUQgPSAoU3RyaW5nKSBtc2cuZ2V0SGVhZGVycygpLmdldChXU19NRVNTQUdFX0lEKTsKKyAgICAJfQogICAgIAkKIAl9IC8vIGVuZCBjb25zdHJ1Y3RvcgogCQpAQCAtMjA2LDYgKzIxMiw3IEBACiAJCQogCQkvLyBBZGQgaW4gdGhlIGhlYWRlciBmb3IgdGhlIFJlbGF0ZXNUbyBNZXNzYWdlIElECiAJCW1zZ0NvbnRleHQuZ2V0SGVhZGVycygpLnB1dChXU19NRVNTQUdFX0lELCBtZXNzYWdlSUQpOworCQltc2dDb250ZXh0LmdldEhlYWRlcnMoKS5wdXQoTUVTU0FHRV9JRCwgbWVzc2FnZUlEKTsKIAkJCiAJCVRocmVhZE1lc3NhZ2VDb250ZXh0LnNldE1lc3NhZ2VDb250ZXh0KG1zZ0NvbnRleHQpOwogCX0gLy8gZW5kIG1ldGhvZCBzZXRSZXNwb25zZUhlYWRlcnMKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA3ODUwYTMwLi4yZDAwNTEwIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0yNCw2ICsyNCw4IEBACiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5idWlsZGVyO3ZlcnNpb249IjIuMC4wIjtyZXNvbHV0aW9uOj1vcHRpb25hbCwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5pbXBsO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3M7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MueG1sLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3I7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvbHZlcjt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZTt2ZXJzaW9uPSIyLjAuMCIsDQpAQCAtMzYsNiArMzgsNyBAQAogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmE7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmltcGw7dmVyc2lvbj0iMi4wLjAiO3Jlc29sdXRpb246PW9wdGlvbmFsLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYud3NkbDt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvcjt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5O3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kudXRpbDt2ZXJzaW9uPSIyLjAuMCIsDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3BvbS54bWwgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvcG9tLnhtbAppbmRleCA0NmZjZmIwLi5mYWExMjNiIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvcG9tLnhtbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvcG9tLnhtbApAQCAtNDAsNiArNDAsMTggQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW50ZXJmYWNlLWphdmE8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW50ZXJmYWNlLWphdmEtamF4d3M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIAorICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbnRlcmZhY2Utd3NkbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgCiAgCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KQEAgLTcwLDkgKzgyLDE1IEBACiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbnRyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KICAgICAgICAgPC9kZXBlbmRlbmN5PgotCisgICAgICAgIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgICAKKworICAgICAgICA8IS0tZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJ1aWxkZXI8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CkBAIC04Myw3ICsxMDEsMTQgQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1zY2EtcnVudGltZTwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgCisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgCisgICAgICAgIAorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3M8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeS0tPiAgICAgICAgICAgICAKIAogICAgIDwvZGVwZW5kZW5jaWVzPgogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvQmFzZUphdmFJbXBsZW1lbnRhdGlvbi5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL0Jhc2VKYXZhSW1wbGVtZW50YXRpb24uamF2YQppbmRleCBjOGI3YzA3Li5hM2IwMzQzIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvQmFzZUphdmFJbXBsZW1lbnRhdGlvbi5qYXZhCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9CYXNlSmF2YUltcGxlbWVudGF0aW9uLmphdmEKQEAgLTE4LDYgKzE4LDggQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmE7CiAKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5FeHRlbnNpYmxlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuSW1wbGVtZW50YXRpb247CiAKQEAgLTU1LDUgKzU3LDEyIEBACiAgICAgICogQHBhcmFtIGphdmFDbGFzcyB0aGUgSmF2YSBpbXBsZW1lbnRhdGlvbiBjbGFzcwogICAgICAqLwogICAgIHZvaWQgc2V0SmF2YUNsYXNzKENsYXNzPD8+IGphdmFDbGFzcyk7CisgICAgCisgICAgLyoqCisgICAgICogQ3VzdG9taXplIHRoZSBpbXBsZW1lbnRhdGlvbiB0eXBlIHNvIHRoYXQgY29tcG9uZW50cyBhcmUgaW1wbGVtZW50ZWQgdXNpbmcgSmF2YSBiYXNlZCBmcmFtZXdvcmsgc3VjaCBhcworICAgICAqIGltcGxlbWVudGF0aW9uLnNwcmluZyBvciBpbXBsZW1lbnRhdGlvbi5qYXhycyBjYW4gbGV2ZXJhZ2UgdGhlIGludHJvc3BlY3Rpb24KKyAgICAgKiBAcGFyYW0gdHlwZQorICAgICAqLworICAgIHZvaWQgc2V0VHlwZShRTmFtZSB0eXBlKTsKIAogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ltcGwvQmFzZUphdmFJbXBsZW1lbnRhdGlvbkltcGwuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbXBsL0Jhc2VKYXZhSW1wbGVtZW50YXRpb25JbXBsLmphdmEKaW5kZXggMGQ5MTg3Yy4uN2NiYjRkNyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ltcGwvQmFzZUphdmFJbXBsZW1lbnRhdGlvbkltcGwuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW1wbC9CYXNlSmF2YUltcGxlbWVudGF0aW9uSW1wbC5qYXZhCkBAIC04OSw0ICs4OSw5IEBACiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRUeXBlKFFOYW1lIHR5cGUpIHsKKyAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnRyb3NwZWN0L0phdmFJbnRyb3NwZWN0aW9uSGVscGVyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW50cm9zcGVjdC9KYXZhSW50cm9zcGVjdGlvbkhlbHBlci5qYXZhCmluZGV4IDVhOTM0YjUuLmEwNGFkMzcgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnRyb3NwZWN0L0phdmFJbnRyb3NwZWN0aW9uSGVscGVyLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludHJvc3BlY3QvSmF2YUludHJvc3BlY3Rpb25IZWxwZXIuamF2YQpAQCAtNiwxNSArNiwxNSBAQAogICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCisgKgogICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAorICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQogICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3Q7CiAKQEAgLTM5LDEzICszOSwxNCBAQAogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKIGltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiAKIGltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUmVmZXJlbmNlOwogCiAvKioKICAqIEltcGxlbWVudHMgdmFyaW91cyByZWZsZWN0aW9uLXJlbGF0ZWQgb3BlcmF0aW9ucwotICogCisgKgogICogQHZlcnNpb24gJFJldiQgJERhdGUkCiAgKi8KIHB1YmxpYyBmaW5hbCBjbGFzcyBKYXZhSW50cm9zcGVjdGlvbkhlbHBlciB7CkBAIC04Myw3MCArODQsOTUgQEAKICAgICAgICAgICAgIHJldHVybiBmaWVsZHM7CiAgICAgICAgIH0KICAgICAgICAgZmllbGRzID0gZ2V0QWxsUHVibGljQW5kUHJvdGVjdGVkRmllbGRzKGNsYXp6LmdldFN1cGVyY2xhc3MoKSwgZmllbGRzLCB2YWxpZGF0aW5nKTsKLSAgICAgICAgRmllbGRbXSBkZWNsYXJlZEZpZWxkcyA9IGNsYXp6LmdldERlY2xhcmVkRmllbGRzKCk7Ci0gICAgICAgIGZvciAoZmluYWwgRmllbGQgZmllbGQgOiBkZWNsYXJlZEZpZWxkcykgewotICAgICAgICAgICAgaW50IG1vZGlmaWVycyA9IGZpZWxkLmdldE1vZGlmaWVycygpOwotICAgICAgICAgICAgLy8gVGhlIGZpZWxkIHNob3VsZCBiZSBub24tZmluYWwgYW5kIG5vbi1zdGF0aWMKLSAgICAgICAgICAgIGlmICgoTW9kaWZpZXIuaXNQdWJsaWMobW9kaWZpZXJzKSB8fCBNb2RpZmllci5pc1Byb3RlY3RlZChtb2RpZmllcnMpKSAmJiAhTW9kaWZpZXIuaXNTdGF0aWMobW9kaWZpZXJzKSAmJiAhTW9kaWZpZXIuaXNGaW5hbChtb2RpZmllcnMpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWxsb3cgcHJpdmlsZWdlZCBhY2Nlc3MgdG8gc2V0IGFjY2Vzc2liaWxpdHkuIFJlcXVpcmVzIFJlZmxlY3RQZXJtaXNzaW9uCi0gICAgICAgICAgICAgICAgLy8gaW4gc2VjdXJpdHkgcG9saWN5LgotICAgICAgICAgICAgICAgIEFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKG5ldyBQcml2aWxlZ2VkQWN0aW9uPE9iamVjdD4oKSB7Ci0gICAgICAgICAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgcnVuKCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQuc2V0QWNjZXNzaWJsZSh0cnVlKTsgLy8gaWdub3JlIEphdmEgYWNjZXNzaWJpbGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisKKyAgICAgICAgRmllbGRbXSBkZWNsYXJlZEZpZWxkcyA9IG51bGw7CisKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgCWRlY2xhcmVkRmllbGRzID0gY2xhenouZ2V0RGVjbGFyZWRGaWVsZHMoKTsKKyAgICAgICAgfSBjYXRjaChUaHJvd2FibGUgdCkgeworICAgICAgICAJLy9UVVNDQU5ZLTM2NjcgLSBjbGF6ei5nZXREZWNsYXJlZEZpZWxkcyBtaWdodCBmYWlsIGluIEdBRSBlbnZpcm9ubWVudCAobG9nIGFuZCBpZ25vcmUpCisgICAgICAgIAlsb2dnZXIubG9nKExldmVsLldBUk5JTkcsICJFcnJvciByZXRyaWV2aW5nIGRlY2xhcmVkIGZpZWxkcyBmcm9tIGNsYXNzIDogIiArIHQuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmKCBkZWNsYXJlZEZpZWxkcyAhPSBudWxsICkgeworICAgICAgICAgICAgZm9yIChmaW5hbCBGaWVsZCBmaWVsZCA6IGRlY2xhcmVkRmllbGRzKSB7CisgICAgICAgICAgICAgICAgaW50IG1vZGlmaWVycyA9IGZpZWxkLmdldE1vZGlmaWVycygpOworICAgICAgICAgICAgICAgIC8vIFRoZSBmaWVsZCBzaG91bGQgYmUgbm9uLWZpbmFsIGFuZCBub24tc3RhdGljCisgICAgICAgICAgICAgICAgaWYgKChNb2RpZmllci5pc1B1YmxpYyhtb2RpZmllcnMpIHx8IE1vZGlmaWVyLmlzUHJvdGVjdGVkKG1vZGlmaWVycykpICYmICFNb2RpZmllci5pc1N0YXRpYyhtb2RpZmllcnMpICYmICFNb2RpZmllci5pc0ZpbmFsKG1vZGlmaWVycykpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgcHJpdmlsZWdlZCBhY2Nlc3MgdG8gc2V0IGFjY2Vzc2liaWxpdHkuIFJlcXVpcmVzIFJlZmxlY3RQZXJtaXNzaW9uCisgICAgICAgICAgICAgICAgICAgIC8vIGluIHNlY3VyaXR5IHBvbGljeS4KKyAgICAgICAgICAgICAgICAgICAgQWNjZXNzQ29udHJvbGxlci5kb1ByaXZpbGVnZWQobmV3IFByaXZpbGVnZWRBY3Rpb248T2JqZWN0PigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgcnVuKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7IC8vIGlnbm9yZSBKYXZhIGFjY2Vzc2liaWxpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIGZpZWxkcy5hZGQoZmllbGQpOworICAgICAgICAgICAgICAgIH0gLyplbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrSW52YWxpZEFubm90YXRpb25zKGZpZWxkKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICAgIGZpZWxkcy5hZGQoZmllbGQpOwotICAgICAgICAgICAgfSAvKmVsc2UgewotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrSW52YWxpZEFubm90YXRpb25zKGZpZWxkKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ki8KKyAgICAgICAgICAgICAgICB9Ki8KKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmllbGRzOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFJldHVybnMgYSBjb2xsZWN0aW9uIG9mIGluamVjdGFibGUgZmllbGRzIGRlY2xhcmVkIGJ5IGEgY2xhc3MKICAgICAgKiBvciBvbmUgb2YgaXRzIHN1cGVydHlwZXMKLSAgICAgKiAKLSAgICAgKiBGb3Igbm93IHdlIHdpbGwgaW5jbHVkZSBmaW5hbCBvciBzdGF0aWMgZmllbGRzIHNvIHRoYXQgdmFsaWRhdGlvbiBwcm9ibGVtcyBjYW4gYmUgcmVwb3J0ZWQgCisgICAgICoKKyAgICAgKiBGb3Igbm93IHdlIHdpbGwgaW5jbHVkZSBmaW5hbCBvciBzdGF0aWMgZmllbGRzIHNvIHRoYXQgdmFsaWRhdGlvbiBwcm9ibGVtcyBjYW4gYmUgcmVwb3J0ZWQKICAgICAgKi8KICAgICBwdWJsaWMgc3RhdGljIFNldDxGaWVsZD4gZ2V0SW5qZWN0YWJsZUZpZWxkcyhDbGFzczw/PiBjbGF6eiwgYm9vbGVhbiB2YWxpZGF0aW5nKSB7CiAgICAgICAgIHJldHVybiBnZXRJbmplY3RhYmxlRmllbGRzKGNsYXp6LCBuZXcgSGFzaFNldDxGaWVsZD4oKSwgdmFsaWRhdGluZyk7CiAgICAgfQotICAgIAorCiAgICAgLyoqCi0gICAgICogUmVjdXJzaXZlbHkgZXZhbHVhdGVzIHRoZSB0eXBlIGhpZXJhcmNoeSB0byByZXR1cm4gYWxsIGZpZWxkcyAKKyAgICAgKiBSZWN1cnNpdmVseSBldmFsdWF0ZXMgdGhlIHR5cGUgaGllcmFyY2h5IHRvIHJldHVybiBhbGwgZmllbGRzCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgU2V0PEZpZWxkPiBnZXRJbmplY3RhYmxlRmllbGRzKENsYXNzPD8+IGNsYXp6LCBTZXQ8RmllbGQ+IGZpZWxkcywgYm9vbGVhbiB2YWxpZGF0aW5nKSB7CiAgICAgICAgIGlmIChjbGF6eiA9PSBudWxsIHx8IGNsYXp6LmlzQXJyYXkoKSB8fCBPYmplY3QuY2xhc3MuZXF1YWxzKGNsYXp6KSkgewogICAgICAgICAgICAgcmV0dXJuIGZpZWxkczsKICAgICAgICAgfQorCiAgICAgICAgIGZpZWxkcyA9IGdldEluamVjdGFibGVGaWVsZHMoY2xhenouZ2V0U3VwZXJjbGFzcygpLCBmaWVsZHMsIHZhbGlkYXRpbmcpOwotICAgICAgICBGaWVsZFtdIGRlY2xhcmVkRmllbGRzID0gY2xhenouZ2V0RGVjbGFyZWRGaWVsZHMoKTsKLSAgICAgICAgZm9yIChmaW5hbCBGaWVsZCBmaWVsZCA6IGRlY2xhcmVkRmllbGRzKSB7Ci0gICAgICAgICAgICBpbnQgbW9kaWZpZXJzID0gZmllbGQuZ2V0TW9kaWZpZXJzKCk7Ci0gICAgICAgICAgICAvLyBUaGUgZmllbGQgc2hvdWxkIGJlIG5vbi1maW5hbCBhbmQgbm9uLXN0YXRpYwotICAgICAgICAgICAgaWYgKCFNb2RpZmllci5pc1N0YXRpYyhtb2RpZmllcnMpIAotICAgICAgICAgICAgICAgIC8vICYmICFNb2RpZmllci5pc0ZpbmFsKG1vZGlmaWVycykKLSAgICAgICAgICAgICAgICApIHsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEFsbG93IHByaXZpbGVnZWQgYWNjZXNzIHRvIHNldCBhY2Nlc3NpYmlsaXR5LiBSZXF1aXJlcyBSZWZsZWN0UGVybWlzc2lvbgotICAgICAgICAgICAgICAgIC8vIGluIHNlY3VyaXR5IHBvbGljeS4KLSAgICAgICAgICAgICAgICBBY2Nlc3NDb250cm9sbGVyLmRvUHJpdmlsZWdlZChuZXcgUHJpdmlsZWdlZEFjdGlvbjxPYmplY3Q+KCkgewotICAgICAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IHJ1bigpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLnNldEFjY2Vzc2libGUodHJ1ZSk7IC8vIGlnbm9yZSBKYXZhIGFjY2Vzc2liaWxpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworCisgICAgICAgIEZpZWxkW10gZGVjbGFyZWRGaWVsZHMgPSBudWxsOworCisgICAgICAgIHRyeSB7CisgICAgICAgIAlkZWNsYXJlZEZpZWxkcyA9IGNsYXp6LmdldERlY2xhcmVkRmllbGRzKCk7CisgICAgICAgIH0gY2F0Y2goVGhyb3dhYmxlIHQpIHsKKyAgICAgICAgCS8vVFVTQ0FOWS0zNjY3IC0gY2xhenouZ2V0RGVjbGFyZWRGaWVsZHMgbWlnaHQgZmFpbCBpbiBHQUUgZW52aXJvbm1lbnQgKGxvZyBhbmQgaWdub3JlKQorICAgICAgICAJbG9nZ2VyLmxvZyhMZXZlbC5XQVJOSU5HLCAiRXJyb3IgcmV0cmlldmluZyBkZWNsYXJlZCBmaWVsZHMgZnJvbSBjbGFzcyA6ICIgKyB0LmdldE1lc3NhZ2UoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiggZGVjbGFyZWRGaWVsZHMgIT0gbnVsbCApIHsKKyAgICAgICAgICAgIGZvciAoZmluYWwgRmllbGQgZmllbGQgOiBkZWNsYXJlZEZpZWxkcykgeworICAgICAgICAgICAgICAgIGludCBtb2RpZmllcnMgPSBmaWVsZC5nZXRNb2RpZmllcnMoKTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgZmllbGQgc2hvdWxkIGJlIG5vbi1maW5hbCBhbmQgbm9uLXN0YXRpYworICAgICAgICAgICAgICAgIGlmICghTW9kaWZpZXIuaXNTdGF0aWMobW9kaWZpZXJzKQorICAgICAgICAgICAgICAgICAgICAvLyAmJiAhTW9kaWZpZXIuaXNGaW5hbChtb2RpZmllcnMpCisgICAgICAgICAgICAgICAgICAgICkgeworCisgICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IHByaXZpbGVnZWQgYWNjZXNzIHRvIHNldCBhY2Nlc3NpYmlsaXR5LiBSZXF1aXJlcyBSZWZsZWN0UGVybWlzc2lvbgorICAgICAgICAgICAgICAgICAgICAvLyBpbiBzZWN1cml0eSBwb2xpY3kuCisgICAgICAgICAgICAgICAgICAgIEFjY2Vzc0NvbnRyb2xsZXIuZG9Qcml2aWxlZ2VkKG5ldyBQcml2aWxlZ2VkQWN0aW9uPE9iamVjdD4oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgT2JqZWN0IHJ1bigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOyAvLyBpZ25vcmUgSmF2YSBhY2Nlc3NpYmlsaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICBmaWVsZHMuYWRkKGZpZWxkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGluZykgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tJbnZhbGlkQW5ub3RhdGlvbnMoZmllbGQpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAgZmllbGRzLmFkZChmaWVsZCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0aW5nKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoZWNrSW52YWxpZEFubm90YXRpb25zKGZpZWxkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworCiAgICAgICAgIHJldHVybiBmaWVsZHM7CiAgICAgfQogCkBAIC0yMTYsNyArMjQyLDcgQEAKICAgICAvKioKICAgICAgKiBGaW5kcyB0aGUgY2xvc2VzdCBtYXRjaGluZyBmaWVsZCB3aXRoIHRoZSBnaXZlbiBuYW1lLCB0aGF0IGlzLCBhIGZpZWxkIG9mCiAgICAgICogdGhlIGV4YWN0IHNwZWNpZmllZCB0eXBlIG9yLCBhbHRlcm5hdGVseSwgb2YgYSBzdXBlcnR5cGUuCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gbmFtZSB0aGUgbmFtZSBvZiB0aGUgZmllbGQKICAgICAgKiBAcGFyYW0gdHlwZSB0aGUgZmllbGQgdHlwZQogICAgICAqIEBwYXJhbSBmaWVsZHMgdGhlIGNvbGxlY3Rpb24gb2YgZmllbGRzIHRvIHNlYXJjaApAQCAtMjUyLDcgKzI3OCw3IEBACiAgICAgLyoqCiAgICAgICogRmluZHMgdGhlIGNsb3Nlc3QgbWF0Y2hpbmcgbWV0aG9kIHdpdGggdGhlIGdpdmVuIG5hbWUsIHRoYXQgaXMsIGEgbWV0aG9kCiAgICAgICogdGFraW5nIHRoZSBleGFjdCBwYXJhbWV0ZXIgdHlwZXMgb3IsIGFsdGVybmF0ZWx5LCBwYXJhbWV0ZXIgc3VwZXJ0eXBlcy4KLSAgICAgKiAKKyAgICAgKgogICAgICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBtZXRob2QKICAgICAgKiBAcGFyYW0gdHlwZXMgdGhlIG1ldGhvZCBwYXJhbWV0ZXIgdHlwZXMKICAgICAgKiBAcGFyYW0gbWV0aG9kcyB0aGUgY29sbGVjdGlvbiBvZiBtZXRob2RzIHRvIHNlYXJjaApAQCAtMzI1LDcgKzM1MSw3IEBACiAgICAgLyoqCiAgICAgICogUmV0dXJucyB0aGUgc2ltcGxlIG5hbWUgb2YgYSBjbGFzcyAtIGkuZS4gdGhlIGNsYXNzIG5hbWUgZGV2b2lkIG9mIGl0cwogICAgICAqIHBhY2thZ2UgcXVhbGlmaWVyCi0gICAgICogCisgICAgICoKICAgICAgKiBAcGFyYW0gaW1wbENsYXNzIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcwogICAgICAqLwogICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEJhc2VOYW1lKENsYXNzPD8+IGltcGxDbGFzcykgewpAQCAtNDg0LDcgKzUxMCw3IEBACiAgICAgICogSmF2YUludHJvc3BlY3Rpb25IZWxwZXIuZ2V0R2VuZXJpY3MoZmllbGQuZ2V0R2VuZXJpY1R5cGUoKSk7CiAgICAgICogPHAvPgogICAgICAqIEphdmFJbnRyb3NwZWN0aW9uSGVscGVyLmdldEdlbmVyaWNzKG0uZ2V0R2VuZXJpY1BhcmFtZXRlclR5cGVzKClbMF07KTsgPC9jb2RlPgotICAgICAqIAorICAgICAqCiAgICAgICogQHJldHVybiB0aGUgZ2VuZXJpYyB0eXBlcyBpbiBvcmRlciBvZiBkZWNsYXJhdGlvbiBvciBhbiBlbXB0eSBhcnJheSBpZgogICAgICAqICAgICAgICAgdGhlIHR5cGUgaXMgbm90IGdlbmVyaWNpemVkCiAgICAgICovCkBAIC02MDMsNyArNjI5LDcgQEAKICAgICAgICAgICAgICAgICBtZXRob2RzLmFkZChkZWNsYXJlZE1ldGhvZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJuIG1ldGhvZHM7CiAgICAgfQogCkBAIC02MTYsNyArNjQyLDcgQEAKICAgICAgICAgICAgICAgICBmaWVsZHMuYWRkKGRlY2xhcmVkRmllbGQpOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiBmaWVsZHM7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludHJvc3BlY3QvaW1wbC9FYWdlckluaXRQcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnRyb3NwZWN0L2ltcGwvRWFnZXJJbml0UHJvY2Vzc29yLmphdmEKaW5kZXggOWFkN2U4Zi4uNWMwZTJjMSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludHJvc3BlY3QvaW1wbC9FYWdlckluaXRQcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW50cm9zcGVjdC9pbXBsL0VhZ2VySW5pdFByb2Nlc3Nvci5qYXZhCkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgICAgIEVhZ2VySW5pdCBhbm5vdGF0aW9uID0gY2xhenouZ2V0QW5ub3RhdGlvbihFYWdlckluaXQuY2xhc3MpOwogICAgICAgICBpZiAoYW5ub3RhdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgICBDbGFzczw/PiBzdXBlckNsYXNzID0gY2xhenouZ2V0U3VwZXJjbGFzcygpOwotICAgICAgICAgICAgd2hpbGUgKCFPYmplY3QuY2xhc3MuZXF1YWxzKHN1cGVyQ2xhc3MpKSB7CisgICAgICAgICAgICB3aGlsZSAoc3VwZXJDbGFzcyAhPSBudWxsICYmICFPYmplY3QuY2xhc3MuZXF1YWxzKHN1cGVyQ2xhc3MpKSB7CiAgICAgICAgICAgICAgICAgYW5ub3RhdGlvbiA9IHN1cGVyQ2xhc3MuZ2V0QW5ub3RhdGlvbihFYWdlckluaXQuY2xhc3MpOwogICAgICAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW50cm9zcGVjdC9pbXBsL0hldXJpc3RpY1Bvam9Qcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnRyb3NwZWN0L2ltcGwvSGV1cmlzdGljUG9qb1Byb2Nlc3Nvci5qYXZhCmluZGV4IGY1MTQ4ZmQuLjMxY2VlNzIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnRyb3NwZWN0L2ltcGwvSGV1cmlzdGljUG9qb1Byb2Nlc3Nvci5qYXZhCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnRyb3NwZWN0L2ltcGwvSGV1cmlzdGljUG9qb1Byb2Nlc3Nvci5qYXZhCkBAIC0yMSw2ICsyMSw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LkphdmFJbnRyb3NwZWN0aW9uSGVscGVyLmdldEFsbEludGVyZmFjZXM7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LkphdmFJbnRyb3NwZWN0aW9uSGVscGVyLmdldEFsbFB1YmxpY0FuZFByb3RlY3RlZEZpZWxkczsKIGltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuSmF2YUludHJvc3BlY3Rpb25IZWxwZXIuZ2V0QWxsVW5pcXVlUHVibGljUHJvdGVjdGVkTWV0aG9kczsKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuSmF2YUludHJvc3BlY3Rpb25IZWxwZXIuZ2V0QmFzZVR5cGU7CiBpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LkphdmFJbnRyb3NwZWN0aW9uSGVscGVyLnRvUHJvcGVydHlOYW1lOwogCiBpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKQEAgLTU2LDYgKzU3LDcgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2U7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlQ29udHJhY3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlRmFjdG9yeTsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUmVmZXJlbmNlOwogaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uQ2FsbGJhY2s7CiBpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Db21wb25lbnROYW1lOwogaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uQ29udGV4dDsKQEAgLTEzMSw2ICsxMzMsMTEgQEAKICAgICAgICAgZXZhbHVhdGVDb25zdHJ1Y3Rvcih0eXBlLCBjbGF6eik7CiAgICAgfQogCisgICAgLy8gQ2hlY2sgaWYgdGhlIGltcGxlbWVudGF0aW9uIGlzIGltcGxlbWVudGF0aW9uLmphdmEKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNJbXBsZW1lbnRhdGlvbkphdmEoSmF2YUltcGxlbWVudGF0aW9uIHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIEphdmFJbXBsZW1lbnRhdGlvbi5UWVBFLmVxdWFscyh0eXBlLmdldFR5cGUoKSk7CisgICAgfQorCiAgICAgcHJpdmF0ZSB2b2lkIGFkZFNlcnZpY2UoSmF2YUltcGxlbWVudGF0aW9uIHR5cGUsIENsYXNzPD8+IGNsYXp6KSB0aHJvd3MgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbiB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlNlcnZpY2Ugc2VydmljZSA9IGNyZWF0ZVNlcnZpY2UoY2xhenopOwpAQCAtMTQyLDcgKzE0OSwxMyBAQAogICAgIAogICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNBbm5vdGF0ZWRXaXRoU0NBKEFubm90YXRlZEVsZW1lbnQgZWxlbWVudCkgewogICAgICAgICBmb3IgKEFubm90YXRpb24gYSA6IGVsZW1lbnQuZ2V0QW5ub3RhdGlvbnMoKSkgewotICAgICAgICAgICAgaWYgKGlzU0NBQW5ub3RhdGlvbihhKSkgeworICAgICAgICAgICAgLy8gSkNJXzgwMjMKKyAgICAgICAgICAgIC8vIHBvbGljeSBhbm5vdGF0aW9ucyBjYW4gYmUgYWRkZWQgdG8gcmVmZXJlbmNlIGZpZWxkcyB0aGF0IAorICAgICAgICAgICAgLy8gZG9uJ3QgaGF2ZSBAUmVmZXJlbmNlIGFubm90YXRpb25zIHNvIHdlIG5lZWQgdG8gYWxsb3cgCisgICAgICAgICAgICAvLyBmb3IgdGhlIGZpZWxkcyB0byBiZSBkZXRlY3RlZCBhcyByZWZlcmVuY2VzCisgICAgICAgICAgICBpZiAoaXNTQ0FQb2xpY3lBbm5vdGF0aW9uKGEpKXsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTQ0FBbm5vdGF0aW9uKGEpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE1Miw2ICsxNjUsMTYgQEAKICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGlzU0NBQW5ub3RhdGlvbihBbm5vdGF0aW9uIGEpIHsKICAgICAgICAgcmV0dXJuIGEuYW5ub3RhdGlvblR5cGUoKS5nZXROYW1lKCkuc3RhcnRzV2l0aCgib3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi4iKTsKICAgICB9CisgICAgCisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc1NDQVBvbGljeUFubm90YXRpb24oQW5ub3RhdGlvbiBhKSB7CisgICAgICAgIGlmIChhLmFubm90YXRpb25UeXBlKCkuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIm9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUG9saWN5U2V0cyIpICl7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChhLmFubm90YXRpb25UeXBlKCkuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoIm9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uSW50ZW50IikgKXsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQogCiAgICAgcHJpdmF0ZSA8VD4gdm9pZCBjYWxjUHJvcFJlZnMoU2V0PE1ldGhvZD4gbWV0aG9kcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuU2VydmljZT4gc2VydmljZXMsCkBAIC0xNzksNyArMjAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gcGFyYW0gPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKVswXTsKICAgICAgICAgICAgICAgICAgICAgVHlwZSBnZW5lcmljVHlwZSA9IG1ldGhvZC5nZXRHZW5lcmljUGFyYW1ldGVyVHlwZXMoKVswXTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVmZXJlbmNlVHlwZShwYXJhbSwgZ2VuZXJpY1R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZXMoKS5hZGQoY3JlYXRlUmVmZXJlbmNlKG5hbWUsIHBhcmFtKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZXMoKS5hZGQoY3JlYXRlUmVmZXJlbmNlKG5hbWUsIHBhcmFtLCBnZW5lcmljVHlwZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRSZWZlcmVuY2VNZW1iZXJzKCkucHV0KG5hbWUsIG5ldyBKYXZhRWxlbWVudEltcGwobWV0aG9kLCAwKSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdldFByb3BlcnRpZXMoKS5hZGQoY3JlYXRlUHJvcGVydHkobmFtZSwgcGFyYW0sIGdlbmVyaWNUeXBlKSk7CkBAIC0yMDYsNyArMjI5LDcgQEAKICAgICAgICAgICAgIC8vIGF2b2lkIGR1cGxpY2F0ZSBwcm9wZXJ0eSBvciByZWYgbmFtZXMKICAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZVR5cGUocGFyYW0sIG1ldGhvZC5nZXRHZW5lcmljUGFyYW1ldGVyVHlwZXMoKVswXSkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXR5cGUuZ2V0UmVmZXJlbmNlTWVtYmVycygpLmNvbnRhaW5zS2V5KG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUuZ2V0UmVmZXJlbmNlcygpLmFkZChjcmVhdGVSZWZlcmVuY2UobmFtZSwgcGFyYW0pKTsKKyAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRSZWZlcmVuY2VzKCkuYWRkKGNyZWF0ZVJlZmVyZW5jZShuYW1lLCBwYXJhbSwgcGFyYW1UeXBlKSk7CiAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ2V0UmVmZXJlbmNlTWVtYmVycygpLnB1dChuYW1lLCBuZXcgSmF2YUVsZW1lbnRJbXBsKG1ldGhvZCwgMCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0yMzMsNyArMjU2LDcgQEAKICAgICAgICAgICAgIFR5cGUgZ2VuZXJpY1R5cGUgPSBmaWVsZC5nZXRHZW5lcmljVHlwZSgpOwogICAgICAgICAgICAgaWYgKGlzUmVmZXJlbmNlVHlwZShwYXJhbVR5cGUsIGZpZWxkLmdldEdlbmVyaWNUeXBlKCkpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCF0eXBlLmdldFJlZmVyZW5jZU1lbWJlcnMoKS5jb250YWluc0tleShuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZXMoKS5hZGQoY3JlYXRlUmVmZXJlbmNlKG5hbWUsIHBhcmFtVHlwZSkpOworICAgICAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZXMoKS5hZGQoY3JlYXRlUmVmZXJlbmNlKG5hbWUsIHBhcmFtVHlwZSwgZ2VuZXJpY1R5cGUpKTsKICAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRSZWZlcmVuY2VNZW1iZXJzKCkucHV0KG5hbWUsIG5ldyBKYXZhRWxlbWVudEltcGwoZmllbGQpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjY5LDYgKzI5MiwxMCBAQAogICAgICAgICAgICAgZXhwbGljdCA9IHRydWU7CiAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGRlZmluaXRpb24uZ2V0Q29uc3RydWN0b3IoKTsKICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICghaXNJbXBsZW1lbnRhdGlvbkphdmEodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogW3JmZW5nXSBEb24ndCBwcm9jZXNzIHRoZSBjb25zdHJ1Y3RvcnMgZm9yIG5vbiBpbXBsZW1lbnRhdGlvbi5qYXZhIHR5cGVzCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQogICAgICAgICAgICAgLy8gbm8gZGVmaW5pdGlvbiwgaGV1cmlzdGljYWxseSBkZXRlcm1pbmUgY29uc3RydWN0b3IKICAgICAgICAgICAgIENvbnN0cnVjdG9yW10gY29uc3RydWN0b3JzID0gY2xhenouZ2V0Q29uc3RydWN0b3JzKCk7CiAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3JzLmxlbmd0aCA9PSAwKSB7CkBAIC0zNzQsNyArNDAxLDcgQEAKICAgICAgICAgZm9yIChKYXZhUGFyYW1ldGVySW1wbCBwIDogcGFyYW1ldGVycykgewogICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBwLmdldFR5cGUoKS5nZXRTaW1wbGVOYW1lKCkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZVR5cGUocC5nZXRUeXBlKCksIHAuZ2V0R2VuZXJpY1R5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZXMoKS5hZGQoY3JlYXRlUmVmZXJlbmNlKG5hbWUsIHAuZ2V0VHlwZSgpKSk7CisgICAgICAgICAgICAgICAgdHlwZS5nZXRSZWZlcmVuY2VzKCkuYWRkKGNyZWF0ZVJlZmVyZW5jZShuYW1lLCBwLmdldFR5cGUoKSwgcC5nZXRHZW5lcmljVHlwZSgpKSk7CiAgICAgICAgICAgICAgICAgcC5zZXRDbGFzc2lmZXIoUmVmZXJlbmNlLmNsYXNzKTsKICAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZU1lbWJlcnMoKS5wdXQobmFtZSwgcCk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNDcyLDIzICs0OTksNDAgQEAKICAgICAgICAgcmV0dXJuIEFic3RyYWN0UHJvcGVydHlQcm9jZXNzb3IuY3JlYXRlUHJvcGVydHkoYXNzZW1ibHlGYWN0b3J5LCBuYW1lLCBqYXZhQ2xhc3MsIGdlbmVyaWNUeXBlKTsKICAgICB9CiAKLSAgICAgcHJpdmF0ZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlJlZmVyZW5jZSBjcmVhdGVSZWZlcmVuY2UoU3RyaW5nIG5hbWUsIENsYXNzPD8+IHBhcmFtVHlwZSkKKyAgICAgcHJpdmF0ZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlJlZmVyZW5jZSBjcmVhdGVSZWZlcmVuY2UoU3RyaW5nIG5hbWUsIENsYXNzPD8+IHBhcmFtVHlwZSwKKyAgICAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSBnZW5lcmljVHlwZSApCiAgICAgICAgIHRocm93cyBJbnRyb3NwZWN0aW9uRXhjZXB0aW9uIHsKICAgICAgICAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5SZWZlcmVuY2UgcmVmZXJlbmNlID0gYXNzZW1ibHlGYWN0b3J5LmNyZWF0ZVJlZmVyZW5jZSgpOwogICAgICAgICByZWZlcmVuY2Uuc2V0TmFtZShuYW1lKTsKICAgICAgICAgSmF2YUludGVyZmFjZUNvbnRyYWN0IGludGVyZmFjZUNvbnRyYWN0ID0gamF2YUludGVyZmFjZUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZUNvbnRyYWN0KCk7CiAgICAgICAgIHJlZmVyZW5jZS5zZXRJbnRlcmZhY2VDb250cmFjdChpbnRlcmZhY2VDb250cmFjdCk7CisgICAgICAgIC8vIENvbXB1dGUgdGhlIGludGVyZmFjZSB0eXBlIGRlYWxpbmcgd2l0aCBhcnJheS9Db2xsZWN0aW9uIHR5cGVzIGFuZCB3aXRoIEdlbmVyaWMgdHlwZXMKKyAgICAgICAgQ2xhc3M8Pz4gYmFzZVR5cGUgPSBnZXRCYXNlVHlwZShwYXJhbVR5cGUsIGdlbmVyaWNUeXBlKTsKKyAgICAgICAgaWYgKFNlcnZpY2VSZWZlcmVuY2UuY2xhc3MuaXNBc3NpZ25hYmxlRnJvbShiYXNlVHlwZSkpIHsKKyAgICAgICAgICAgIGlmIChDb2xsZWN0aW9uLmNsYXNzLmlzQXNzaWduYWJsZUZyb20ocGFyYW1UeXBlKSkgeworICAgICAgICAgICAgICAgIGdlbmVyaWNUeXBlID0gSmF2YUludHJvc3BlY3Rpb25IZWxwZXIuZ2V0UGFyYW1ldGVyVHlwZShnZW5lcmljVHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiYXNlVHlwZSA9IEphdmFJbnRyb3NwZWN0aW9uSGVscGVyLmdldEJ1c2luZXNzSW50ZXJmYWNlKGJhc2VUeXBlLCBnZW5lcmljVHlwZSk7CisgICAgICAgIH0gLy8gZW5kIGlmCiAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGNhbGxJbnRlcmZhY2UgPSBqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKHBhcmFtVHlwZSk7CisgICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGNhbGxJbnRlcmZhY2UgPSBqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKGJhc2VUeXBlKTsKKwogICAgICAgICAgICAgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuc2V0SW50ZXJmYWNlKGNhbGxJbnRlcmZhY2UpOwogICAgICAgICAgICAgaWYgKGNhbGxJbnRlcmZhY2UuZ2V0Q2FsbGJhY2tDbGFzcygpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGNhbGxiYWNrSW50ZXJmYWNlID0gamF2YUludGVyZmFjZUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZShjYWxsSW50ZXJmYWNlLmdldENhbGxiYWNrQ2xhc3MoKSk7CiAgICAgICAgICAgICAgICAgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuc2V0Q2FsbGJhY2tJbnRlcmZhY2UoY2FsbGJhY2tJbnRlcmZhY2UpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVmZXJlbmNlLnNldE11bHRpcGxpY2l0eShNdWx0aXBsaWNpdHkuWkVST19PTkUpOworICAgICAgICAgICAgLy8gTXVsdGlwbGljaXR5IG9mIGFuIGltcGxpY2l0IHJlZmVyZW5jZSBpcyAxLi4xIGZvciBhIHNpbXBsZSBpbnRlcmZhY2UgdHlwZQorICAgICAgICAgICAgLy8gYW5kIDEuLm4gZm9yIGFuIGFycmF5IG9mIGludGVyZmFjZSBvciBDb2xsZWN0aW9uIG9mIGludGVyZmFjZSB0eXBlCisgICAgICAgICAgICAvLyBhcyBkZWZpbmVkIGluIHRoZSBPQVNJUyBTQ0EgSmF2YSBQT0pPIHNwZWNpZmljYXRpb24sIHNlY3Rpb24gOC4xIDogVFVTQ0FOWS0zNjM2CisgICAgICAgICAgICBpZiggaXNDb2xsZWN0aW9uVHlwZSggcGFyYW1UeXBlICkgfHwgaXNBcnJheVR5cGUoIHBhcmFtVHlwZSApKSB7CisgICAgICAgICAgICAJcmVmZXJlbmNlLnNldE11bHRpcGxpY2l0eShNdWx0aXBsaWNpdHkuT05FX04pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIAlyZWZlcmVuY2Uuc2V0TXVsdGlwbGljaXR5KE11bHRpcGxpY2l0eS5PTkVfT05FKTsKKyAgICAgICAgICAgIH0gLy8gZW5kIGlmIAogICAgICAgICB9IGNhdGNoIChJbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uIGUxKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbihlMSk7Ci0gICAgICAgIH0KKyAgICAgICAgfSAvLyBlbmQgdHJ5CiAKICAgICAgICAgLy8gRklYTUU6ICBUaGlzIHBhcnQgc2VlbXMgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBhYm92ZSEhCiAgICAgICAgIHRyeSB7CkBAIC00OTgsNiArNTQyLDI2IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlZmVyZW5jZTsKICAgICB9CisgICAgIAorICAgIC8qKgorICAgICAqIFJlcG9ydHMgaWYgYSBwYXJhbWV0ZXIgdHlwZSBpcyBhIGZvcm0gb2YgamF2YS51dGlsLkNvbGxlY3Rpb24gCisgICAgICogQHBhcmFtIHBhcmFtVHlwZQorICAgICAqIEByZXR1cm4gdHJ1ZSBpZiBwYXJhbVR5cGUgaXMgYSBmb3JtIG9mIGphdmEudXRpbC5Db2xsZWN0aW9uLCBmYWxzZSBvdGhlcndpc2UKKyAgICAgKi8KKyAgICBwcml2YXRlIGJvb2xlYW4gaXNDb2xsZWN0aW9uVHlwZSggQ2xhc3M8Pz4gcGFyYW1UeXBlICkgeworICAgIAlpZiggQ29sbGVjdGlvbi5jbGFzcy5pc0Fzc2lnbmFibGVGcm9tKHBhcmFtVHlwZSkgKSByZXR1cm4gdHJ1ZTsKKyAgICAJcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBSZXBvcnRzIGlmIGEgcGFyYW1ldGVyIHR5cGUgaXMgYW4gYXJyYXkKKyAgICAgKiBAcGFyYW0gcGFyYW1UeXBlCisgICAgICogQHJldHVybiB0cnVlIGlmIHBhcmFtVHlwZSBpcyBhbiBhcnJheQorICAgICAqLworICAgIHByaXZhdGUgYm9vbGVhbiBpc0FycmF5VHlwZSggQ2xhc3M8Pz4gcGFyYW1UeXBlICkgeworICAgIAlpZiggcGFyYW1UeXBlLmlzQXJyYXkoKSApIHJldHVybiB0cnVlOworICAgIAlyZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgcHJpdmF0ZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlNlcnZpY2UgY3JlYXRlU2VydmljZShDbGFzczw/PiBpbnRlcmZhemUpIHRocm93cyBJbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uIHsKICAgICAgICAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5TZXJ2aWNlIHNlcnZpY2UgPSBhc3NlbWJseUZhY3RvcnkuY3JlYXRlU2VydmljZSgpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludHJvc3BlY3QvaW1wbC9KQVhXU1Byb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludHJvc3BlY3QvaW1wbC9KQVhXU1Byb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYmI1ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEvaW50cm9zcGVjdC9pbXBsL0pBWFdTUHJvY2Vzc29yLmphdmEKQEAgLTAsMCArMSwzMzcgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGw7DQorDQoraW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb247DQoraW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsNCisNCitpbXBvcnQgamF2YXguandzLldlYlBhcmFtOw0KK2ltcG9ydCBqYXZheC5qd3MuV2ViUmVzdWx0Ow0KK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsNCitpbXBvcnQgamF2YXguandzLnNvYXAuU09BUEJpbmRpbmc7DQoraW1wb3J0IGphdmF4LnhtbC53cy5CaW5kaW5nVHlwZTsNCitpbXBvcnQgamF2YXgueG1sLndzLlNlcnZpY2VNb2RlOw0KK2ltcG9ydCBqYXZheC54bWwud3MuV2ViU2VydmljZVByb3ZpZGVyOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkFzc2VtYmx5RmFjdG9yeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5TZXJ2aWNlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbC5Db25zdGFudHM7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5XZWJTZXJ2aWNlQmluZGluZzsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLldlYlNlcnZpY2VCaW5kaW5nRmFjdG9yeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLnhtbC5XZWJTZXJ2aWNlQ29uc3RhbnRzOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkZhY3RvcnlFeHRlbnNpb25Qb2ludDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkludHJvc3BlY3Rpb25FeGNlcHRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5KYXZhSW1wbGVtZW50YXRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LkJhc2VKYXZhQ2xhc3NWaXNpdG9yOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2U7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZUNvbnRyYWN0Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2VGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsLldTRExGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsLldTRExJbnRlcmZhY2U7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGwuV1NETEludGVyZmFjZUNvbnRyYWN0Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5FeHRlbnNpb25UeXBlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5JbnRlbnQ7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeUZhY3Rvcnk7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeVN1YmplY3Q7DQorDQorLyoqDQorICogUHJvY2VzcyBKQVhXUyBhbm5vdGF0aW9ucyBhbmQgdXBkYXRlcyB0aGUgY29tcG9uZW50IHR5cGUgYWNjb3JkaW5nbHkNCisgKiANCisgKi8NCitwdWJsaWMgY2xhc3MgSkFYV1NQcm9jZXNzb3IgZXh0ZW5kcyBCYXNlSmF2YUNsYXNzVmlzaXRvciB7DQorICAgIA0KKyAgICBwcml2YXRlIFBvbGljeUZhY3RvcnkgcG9saWN5RmFjdG9yeTsNCisgICAgcHJpdmF0ZSBXU0RMRmFjdG9yeSB3c2RsRmFjdG9yeTsNCisgICAgcHJpdmF0ZSBXZWJTZXJ2aWNlQmluZGluZ0ZhY3Rvcnkgd3NCaW5kaW5nRmFjdG9yeTsNCisgICAgDQorICAgIHB1YmxpYyBKQVhXU1Byb2Nlc3NvcihFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7DQorICAgICAgICBzdXBlcihyZWdpc3RyeSk7DQorICAgICAgICBGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgZmFjdG9yaWVzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoRmFjdG9yeUV4dGVuc2lvblBvaW50LmNsYXNzKTsNCisgICAgICAgIHRoaXMud3NkbEZhY3RvcnkgPSBmYWN0b3JpZXMuZ2V0RmFjdG9yeShXU0RMRmFjdG9yeS5jbGFzcyk7DQorICAgICAgICB0aGlzLmFzc2VtYmx5RmFjdG9yeSA9IGZhY3Rvcmllcy5nZXRGYWN0b3J5KEFzc2VtYmx5RmFjdG9yeS5jbGFzcyk7DQorICAgICAgICB0aGlzLnBvbGljeUZhY3RvcnkgPSBmYWN0b3JpZXMuZ2V0RmFjdG9yeShQb2xpY3lGYWN0b3J5LmNsYXNzKTsNCisgICAgICAgIHRoaXMuamF2YUludGVyZmFjZUZhY3RvcnkgPSBmYWN0b3JpZXMuZ2V0RmFjdG9yeShKYXZhSW50ZXJmYWNlRmFjdG9yeS5jbGFzcyk7DQorICAgICAgICB0aGlzLndzQmluZGluZ0ZhY3RvcnkgPSBmYWN0b3JpZXMuZ2V0RmFjdG9yeShXZWJTZXJ2aWNlQmluZGluZ0ZhY3RvcnkuY2xhc3MpOw0KKyAgICB9DQorDQorICAgIEBPdmVycmlkZQ0KKyAgICBwdWJsaWMgPFQ+IHZvaWQgdmlzaXRDbGFzcyhDbGFzczxUPiBjbGF6eiwgSmF2YUltcGxlbWVudGF0aW9uIHR5cGUpIHRocm93cyBJbnRyb3NwZWN0aW9uRXhjZXB0aW9uIHsNCisgICAgICAgIA0KKyAgICAgICAgYm9vbGVhbiBoYXNKYXh3c0Fubm90YXRpb24gPSBmYWxzZTsNCisgICAgICAgIA0KKyAgICAgICAgLy8gUHJvY2VzcyBAU2VydmljZU1vZGUgYW5ub3RhdGlvbiAtIEpDQSAxMTAxMw0KKyAgICAJaWYgKCBjbGF6ei5nZXRBbm5vdGF0aW9uKFNlcnZpY2VNb2RlLmNsYXNzKSAhPSBudWxsICkgew0KKyAgICAJCWFkZFNPQVBJbnRlbnQodHlwZSk7DQorICAgIAkJaGFzSmF4d3NBbm5vdGF0aW9uID0gdHJ1ZTsNCisgICAgCX0NCisgICAgCQ0KKyAgICAgICAgLy8gUHJvY2VzcyBAV2ViU2VydmljZSBhbm5vdGF0aW9uIC0gUE9KT184MDI5LCBQT0pPXzgwMzANCisgICAgICAgIFdlYlNlcnZpY2Ugd2ViU2VydmljZUFubm90YXRpb24gPSBjbGF6ei5nZXRBbm5vdGF0aW9uKFdlYlNlcnZpY2UuY2xhc3MpOw0KKyAgICAgICAgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlIHNlcnZpY2VBbm5vdGF0aW9uID0gY2xhenouZ2V0QW5ub3RhdGlvbihvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNlcnZpY2UuY2xhc3MpOw0KKyAgICAgICAgDQorICAgICAgICBpZiAod2ViU2VydmljZUFubm90YXRpb24gIT0gbnVsbCAmJg0KKyAgICAgICAgICAgIHNlcnZpY2VBbm5vdGF0aW9uID09IG51bGwpIHsNCisgICAgICAgICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBjbGF6ei5nZXRTaW1wbGVOYW1lKCk7DQorICAgICAgICAgICAgc2VydmljZU5hbWUgPSBnZXRWYWx1ZSh3ZWJTZXJ2aWNlQW5ub3RhdGlvbi5uYW1lKCksIHNlcnZpY2VOYW1lKTsNCisgICAgICAgICAgICANCisgICAgICAgICAgICBTdHJpbmcgc2VydmljZUludGVyZmFjZUNsYXNzTmFtZSA9IHdlYlNlcnZpY2VBbm5vdGF0aW9uLmVuZHBvaW50SW50ZXJmYWNlKCk7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgU3RyaW5nIHdzZGxMb2NhdGlvbiA9IHdlYlNlcnZpY2VBbm5vdGF0aW9uLndzZGxMb2NhdGlvbigpOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgICAgIGNyZWF0ZVNlcnZpY2UodHlwZSwgY2xhenosIHNlcnZpY2VOYW1lLCBzZXJ2aWNlSW50ZXJmYWNlQ2xhc3NOYW1lLCB3c2RsTG9jYXRpb24sIGZhbHNlKTsNCisgICAgICAgICAgICB9IGNhdGNoIChJbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludHJvc3BlY3Rpb25FeGNlcHRpb24oZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGhhc0pheHdzQW5ub3RhdGlvbiA9IHRydWU7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIC8vIFByb2Nlc3MgQFdlYlNlcnZpY2VQcm92aWRlciBhbm5vdGF0aW9uIC0gSkNBXzExMDE1LCBQT0pPXzgwMzQNCisgICAgICAgIFdlYlNlcnZpY2VQcm92aWRlciB3ZWJTZXJ2aWNlUHJvdmlkZXJBbm5vdGF0aW9uID0gY2xhenouZ2V0QW5ub3RhdGlvbihXZWJTZXJ2aWNlUHJvdmlkZXIuY2xhc3MpOw0KKyAgICAgICAgaWYgKHdlYlNlcnZpY2VQcm92aWRlckFubm90YXRpb24gIT0gbnVsbCkgew0KKyAgICAgICAgICAgIC8vIGlmIHRoZSBpbXBsbWVudGF0aW9uIGFscmVhZHkgaGFzIGEgc2VydmljZSBzZXQsIHVzZSBpdCdzIG5hbWUNCisgICAgICAgICAgICAvLyBhbmQgdGhlIG5ldyBzZXJ2aWNlLCB3aGljaCB1c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBhcyBhbiBpbnRlcmZhY2UsDQorICAgICAgICAgICAgLy8gd2lsbCBiZSByZXBsYWNlZCANCisgICAgICAgICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBjbGF6ei5nZXRTaW1wbGVOYW1lKCk7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgaWYgKHR5cGUuZ2V0U2VydmljZXMoKS5zaXplKCkgPiAwKXsNCisgICAgICAgICAgICAgICAgc2VydmljZU5hbWUgPSAoKFNlcnZpY2UpdHlwZS5nZXRTZXJ2aWNlcygpLmdldCgwKSkuZ2V0TmFtZSgpOw0KKyAgICAgICAgICAgIH0gDQorICAgICAgICAgICAgDQorICAgICAgICAgICAgLy8gdGhlIGFubm90YXRpb24gbWF5IHNwZWNpZnkgYSBzZXJ2aWNlIG5hbWUNCisgICAgICAgICAgICBzZXJ2aWNlTmFtZSA9IGdldFZhbHVlKHdlYlNlcnZpY2VQcm92aWRlckFubm90YXRpb24uc2VydmljZU5hbWUoKSwgc2VydmljZU5hbWUpOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIFN0cmluZyB3c2RsTG9jYXRpb24gPSB3ZWJTZXJ2aWNlUHJvdmlkZXJBbm5vdGF0aW9uLndzZGxMb2NhdGlvbigpOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZXJlIGlzIGEgc2VydmljZSB3aXRoIGFuIGludGVyZmFjZQ0KKyAgICAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBhbmQgaGF2ZSBpdCByZXBsYWNlIA0KKyAgICAgICAgICAgIC8vIGFueSBzZXJ2aWNlIHdpdGggdGhlIHNhbWUgbmFtZQ0KKyAgICAgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgICAgIGNyZWF0ZVNlcnZpY2UodHlwZSwgY2xhenosIHNlcnZpY2VOYW1lLCBudWxsLCB3c2RsTG9jYXRpb24sIHRydWUpOw0KKyAgICAgICAgICAgIH0gY2F0Y2ggKEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gZSkgew0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbihlKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGFsbCBzZXJ2aWNlIHJlZmVyZW5jZXMgYXJlIHJlbW90YWJsZQ0KKyAgICAgICAgICAgIGZvciAoIFNlcnZpY2Ugc2VydmljZSA6IHR5cGUuZ2V0U2VydmljZXMoKSApIHsNCisgICAgICAgICAgICAgICAgc2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpLmdldEludGVyZmFjZSgpLnNldFJlbW90YWJsZSh0cnVlKTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgaGFzSmF4d3NBbm5vdGF0aW9uID0gdHJ1ZTsNCisgICAgICAgIH0gICAgICAgICANCisgICAgICAgIA0KKyAgICAgICAgLy8gUHJvY2VzcyBAV2ViUGFyYW0gYW5kIEBXZWJSZXN1bHQgYW5ub3RhdGlvbnMgLSBQT0pPXzgwMzEsIFBPSk9fODAzMg0KKyAgICAgICAgQ2xhc3M8Pz4gaW50ZXJmYXplID0gY2xheno7DQorICAgICAgICBNZXRob2RbXSBpbXBsTWV0aG9kcyA9IGludGVyZmF6ZS5nZXREZWNsYXJlZE1ldGhvZHMoKTsNCisgICAgICAgIGZvciAoIFNlcnZpY2Ugc2VydmljZSA6IHR5cGUuZ2V0U2VydmljZXMoKSApIHsNCisgICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGphdmFJbnRlcmZhY2UgPSAoSmF2YUludGVyZmFjZSlzZXJ2aWNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuZ2V0SW50ZXJmYWNlKCk7DQorICAgICAgICAgICAgaW50ZXJmYXplID0gamF2YUludGVyZmFjZS5nZXRKYXZhQ2xhc3MoKTsNCisgICAgICAgICAgICANCisgICAgICAgICAgICBpZiAoaW50ZXJmYXplID09IG51bGwpew0KKyAgICAgICAgICAgICAgICAvLyB0aGlzIGludGVyZmFjZSBoYXMgY29tZSBmcm9tIGFuIEBXZWJTZXJ2aWNlIGVucG9pbnRJbnRlcmZhY2UgYW5ub3RhdGlvbg0KKyAgICAgICAgICAgICAgICAvLyBzbyBoYXNuJ3QgYmVlbiByZXNvbHZlZC4gVXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBhcyB0aGUgaW50ZXJmYWNlDQorICAgICAgICAgICAgICAgIGludGVyZmF6ZSA9IGNsYXp6Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICANCisgICAgICAgICAgICBib29sZWFuIGhhc0hlYWRlclBhcmFtID0gZmFsc2U7DQorICAgICAgICAgICAgZm9yIChNZXRob2QgbWV0aG9kIDogaW50ZXJmYXplLmdldERlY2xhcmVkTWV0aG9kcygpKXsNCisgICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgaW1wbCBtZXRob2QgZm9yIHRoaXMgc2VydmljZSBtZXRob2QgICAgDQorICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW1wbE1ldGhvZHMubGVuZ3RoOyBpKyspeyANCisgICAgICAgICAgICAgICAgICAgIE1ldGhvZCBpbXBsTWV0aG9kID0gaW1wbE1ldGhvZHNbaV07DQorICAgICAgICAgICAgICAgICAgICBpZiAoaW1wbE1ldGhvZC5nZXROYW1lKCkuZXF1YWxzKG1ldGhvZC5nZXROYW1lKCkpKXsNCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGltcGxNZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGg7IGorKykgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYXJhbSB3ZWJQYXJhbUFubm90YXRpb24gPSBnZXRQYXJhbWV0ZXJBbm5vdGF0aW9uKGltcGxNZXRob2QsIGosIFdlYlBhcmFtLmNsYXNzKTsgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ZWJQYXJhbUFubm90YXRpb24gIT0gbnVsbCAmJg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViUGFyYW1Bbm5vdGF0aW9uLmhlYWRlcigpKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNIZWFkZXJQYXJhbSA9IHRydWU7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgICAgICAgICBXZWJSZXN1bHQgd2ViUmVzdWx0QW5ub3RhdGlvbiA9IGltcGxNZXRob2QuZ2V0QW5ub3RhdGlvbihXZWJSZXN1bHQuY2xhc3MpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3ZWJSZXN1bHRBbm5vdGF0aW9uICE9IG51bGwgJiYNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2ViUmVzdWx0QW5ub3RhdGlvbi5oZWFkZXIoKSl7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0hlYWRlclBhcmFtID0gdHJ1ZTsNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfSANCisgICAgICAgICAgICANCisgICAgICAgICAgICBpZiAoaGFzSGVhZGVyUGFyYW0peyAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICAgICAgLy8gQWRkIGEgU09BUCBpbnRlbnQgdG8gdGhlIHNlcnZpY2UNCisgICAgICAgICAgICAgICAgYWRkU09BUEludGVudChzZXJ2aWNlKTsNCisgICAgICAgICAgICAgICAgaGFzSmF4d3NBbm5vdGF0aW9uID0gdHJ1ZTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIC8vIFByb2Nlc3MgQFNPQVBCaW5kaW5nIGFubm90YXRpb24gLSBQT0pPXzgwMzMNCisgICAgICAgIGlmICggY2xhenouZ2V0QW5ub3RhdGlvbihTT0FQQmluZGluZy5jbGFzcykgIT0gbnVsbCApIHsNCisgICAgICAgICAgICAvLyBJZiB0aGUgaW1wbGVtZW50YXRpb24gaXMgYW5ub3RhdGVkIHdpdGggQFNPQVBCaW5kaW5nLA0KKyAgICAgICAgICAgIC8vIGdpdmUgYWxsIHNlcnZpY2VzIGEgU09BUCBpbnRlbnQNCisgICAgICAgICAgICBmb3IgKCBTZXJ2aWNlIHNlcnZpY2UgOiB0eXBlLmdldFNlcnZpY2VzKCkgKSB7DQorICAgICAgICAgICAgICAgIGFkZFNPQVBJbnRlbnQoc2VydmljZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGhhc0pheHdzQW5ub3RhdGlvbiA9IHRydWU7DQorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICANCisgICAgICAgIA0KKyAgIAkgIC8vIFByb2Nlc3MgQEJpbmRpbmdUeXBlIGFubm90YXRpb24gLSBQT0pPXzgwMzcNCisgICAgICAgIEJpbmRpbmdUeXBlIGJpbmRpbmdUeXBlID0gY2xhenouZ2V0QW5ub3RhdGlvbihCaW5kaW5nVHlwZS5jbGFzcyk7DQorICAgIAkNCisgICAgCWlmICggYmluZGluZ1R5cGUgIT0gbnVsbCApIHsNCisgICAgCQlTdHJpbmcgYmluZGluZ1R5cGVWYWx1ZSA9IGJpbmRpbmdUeXBlLnZhbHVlKCk7ICAgIAkNCisgICAgCQlmb3IgKCBTZXJ2aWNlIHNlcnZpY2UgOiB0eXBlLmdldFNlcnZpY2VzKCkgKSB7DQorICAgIAkJCWFkZEJpbmRpbmdUeXBlSW50ZW50KHNlcnZpY2UsIGJpbmRpbmdUeXBlVmFsdWUpOw0KKyAgICAJCX0NCisgICAgCQloYXNKYXh3c0Fubm90YXRpb24gPSB0cnVlOw0KKyAgICAJfQ0KKyAgICAJDQorICAgICAgICBpZiAoaGFzSmF4d3NBbm5vdGF0aW9uID09IHRydWUpeyAgICAgICAgDQorICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHNlcnZpY2VzIGFyZSBiYXNlZCBvbiBKQVhXUyBhbm5vdGF0aW9ucyBpbiBjYXNlIA0KKyAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8ga25vdyBsYXRlci4gQWRkIGEgd3MgYmluZGluZyBhbmQgYSBKQVhXUyBhbm5vdGF0aW9uDQorICAgICAgICAgICAgLy8gaW1wbGllcyBhIFdTIGJpbmRpbmcNCisgICAgICAgICAgICBmb3IgKCBTZXJ2aWNlIHNlcnZpY2UgOiB0eXBlLmdldFNlcnZpY2VzKCkgKSB7DQorICAgICAgICAgICAgICAgIHNlcnZpY2Uuc2V0SkFYV1NTZXJ2aWNlKHRydWUpOw0KKyAgICAgICAgICAgICAgICBjcmVhdGVXU0JpbmRpbmcodHlwZSwgc2VydmljZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIA0KKyANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJDQorICAgIH0NCisgICAgDQorICAgIHByaXZhdGUgdm9pZCBhZGRCaW5kaW5nVHlwZUludGVudChQb2xpY3lTdWJqZWN0IHN1YmplY3QsDQorCQkJU3RyaW5nIGJpbmRpbmdUeXBlVmFsdWUpIHsgICAgDQorICAgIAkNCisgICAgCSBJbnRlbnQgc29hcEludGVudCA9IHBvbGljeUZhY3RvcnkuY3JlYXRlSW50ZW50KCk7DQorICAgIAkgaWYgKCBqYXZheC54bWwud3Muc29hcC5TT0FQQmluZGluZy5TT0FQMTFIVFRQX0JJTkRJTkcuZXF1YWxzKGJpbmRpbmdUeXBlVmFsdWUpKSB7DQorICAgIAkJIHNvYXBJbnRlbnQuc2V0TmFtZShDb25zdGFudHMuU09BUDExX0lOVEVOVCk7DQorICAgIAkgfSBlbHNlIGlmICggamF2YXgueG1sLndzLnNvYXAuU09BUEJpbmRpbmcuU09BUDEySFRUUF9CSU5ESU5HLmVxdWFscyhiaW5kaW5nVHlwZVZhbHVlKSkgew0KKyAgICAJCSBzb2FwSW50ZW50LnNldE5hbWUoQ29uc3RhbnRzLlNPQVAxMl9JTlRFTlQpOw0KKyAgICAJIH0gZWxzZSB7DQorICAgIAkJIHNvYXBJbnRlbnQuc2V0TmFtZShDb25zdGFudHMuU09BUDExX0lOVEVOVCk7DQorICAgIAkgfQ0KKyAgICAgICAgICAgICAgICANCisgICAgICAgICBzdWJqZWN0LmdldFJlcXVpcmVkSW50ZW50cygpLmFkZChzb2FwSW50ZW50KTsNCisJCQ0KKwl9DQorDQorCS8qKg0KKyAgICAgKiBVdGlsaXR5IG1ldGhvZHMNCisgICAgICovICAgIA0KKw0KKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0VmFsdWUoU3RyaW5nIHZhbHVlLCBTdHJpbmcgZGVmYXVsdFZhbHVlKSB7DQorICAgICAgICByZXR1cm4gIiIuZXF1YWxzKHZhbHVlKSA/IGRlZmF1bHRWYWx1ZSA6IHZhbHVlOw0KKyAgICB9DQorICAgIA0KKyAgICBwcml2YXRlIFNlcnZpY2UgY3JlYXRlU2VydmljZShKYXZhSW1wbGVtZW50YXRpb24gdHlwZSwgQ2xhc3M8Pz4gY2xhenosIFN0cmluZyBzZXJ2aWNlTmFtZSwgU3RyaW5nIGphdmFJbnRlcmZhY2VOYW1lLCBTdHJpbmcgd3NkbEZpbGVOYW1lLCBib29sZWFuIHJlcGxhY2UpICB0aHJvd3MgSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbiwgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbiB7DQorICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBhc3NlbWJseUZhY3RvcnkuY3JlYXRlU2VydmljZSgpOw0KKw0KKyAgICAgICAgaWYgKHNlcnZpY2VOYW1lICE9IG51bGwpIHsNCisgICAgICAgICAgICBzZXJ2aWNlLnNldE5hbWUoc2VydmljZU5hbWUpOw0KKyAgICAgICAgfSBlbHNlIGlmIChqYXZhSW50ZXJmYWNlTmFtZSAhPSBudWxsKXsNCisgICAgICAgICAgICBzZXJ2aWNlLnNldE5hbWUoamF2YUludGVyZmFjZU5hbWUuc3Vic3RyaW5nKGphdmFJbnRlcmZhY2VOYW1lLmxhc3RJbmRleE9mKCcuJykpKTsNCisgICAgICAgIH0gDQorICAgICAgICANCisgICAgICAgIC8vIGNyZWF0ZSB0aGUgcGh5c2ljYWwgSmF2YSBpbnRlcmZhY2UgY29udHJhY3QNCisgICAgICAgIEphdmFJbnRlcmZhY2VDb250cmFjdCBqYXZhSW50ZXJmYWNlQ29udHJhY3QgPSBqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlQ29udHJhY3QoKTs7DQorICAgICAgICBzZXJ2aWNlLnNldEludGVyZmFjZUNvbnRyYWN0KGphdmFJbnRlcmZhY2VDb250cmFjdCk7DQorICAgICAgICANCisgICAgICAgIGlmIChqYXZhSW50ZXJmYWNlTmFtZSAhPSBudWxsICYmDQorICAgICAgICAgICAgamF2YUludGVyZmFjZU5hbWUubGVuZ3RoKCkgPiAwKXsNCisgICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGNhbGxJbnRlcmZhY2UgPSBqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKCk7DQorICAgICAgICAgICAgY2FsbEludGVyZmFjZS5zZXROYW1lKGphdmFJbnRlcmZhY2VOYW1lKTsNCisgICAgICAgICAgICBjYWxsSW50ZXJmYWNlLnNldFJlbW90YWJsZSh0cnVlKTsNCisgICAgICAgICAgICBjYWxsSW50ZXJmYWNlLnNldFVucmVzb2x2ZWQodHJ1ZSk7DQorICAgICAgICAgICAgamF2YUludGVyZmFjZUNvbnRyYWN0LnNldEludGVyZmFjZShjYWxsSW50ZXJmYWNlKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgLy8gd2UgdXNlIHRoZSBiZWFuIGNsYXNzIGFzIHRoZSBzZXJ2aWNlIGludGVyZmFjZQ0KKyAgICAgICAgICAgIEphdmFJbnRlcmZhY2UgY2FsbEludGVyZmFjZSA9IGphdmFJbnRlcmZhY2VGYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2UoY2xhenopOw0KKyAgICAgICAgICAgIGNhbGxJbnRlcmZhY2Uuc2V0UmVtb3RhYmxlKHRydWUpOw0KKyAgICAgICAgICAgIGNhbGxJbnRlcmZhY2Uuc2V0VW5yZXNvbHZlZChmYWxzZSk7IC8vIHRoaXMgd2lsbCBhbHJlYWR5IGJlIGZhbHNlIGJ1dCB0aGlzIG1ha2VzIGl0IGVhc3kgdG8gZm9sbG93IHRoZSBsb2dpYw0KKyAgICAgICAgICAgIGphdmFJbnRlcmZhY2VDb250cmFjdC5zZXRJbnRlcmZhY2UoY2FsbEludGVyZmFjZSk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIC8vIGNyZWF0ZSB0aGUgbG9naWNhbCBXU0RMIGludGVyZmFjZSBpZiBpdCdzIHNwZWNpZmllZCBpbiANCisgICAgICAgIC8vIHRoZSBAV2ViU2VydmljZSBhbm5vdGF0aW9uDQorICAgICAgICBpZiAod3NkbEZpbGVOYW1lICE9IG51bGwgJiYNCisgICAgICAgICAgICAgICAgd3NkbEZpbGVOYW1lLmxlbmd0aCgpID4gMCl7ICAgICAgICAgDQorICAgICAgICAgICAgV1NETEludGVyZmFjZSBjYWxsSW50ZXJmYWNlID0gd3NkbEZhY3RvcnkuY3JlYXRlV1NETEludGVyZmFjZSgpOw0KKyAgICAgICAgICAgIGNhbGxJbnRlcmZhY2Uuc2V0VW5yZXNvbHZlZCh0cnVlKTsNCisgICAgICAgICAgICBjYWxsSW50ZXJmYWNlLnNldFJlbW90YWJsZSh0cnVlKTsNCisgICAgICAgICAgICANCisgICAgICAgICAgICBXU0RMSW50ZXJmYWNlQ29udHJhY3Qgd3NkbEludGVyZmFjZUNvbnRyYWN0ID0gd3NkbEZhY3RvcnkuY3JlYXRlV1NETEludGVyZmFjZUNvbnRyYWN0KCk7DQorICAgICAgICAgICAgd3NkbEludGVyZmFjZUNvbnRyYWN0LnNldEludGVyZmFjZShjYWxsSW50ZXJmYWNlKTsNCisgICAgICAgICAgICB3c2RsSW50ZXJmYWNlQ29udHJhY3Quc2V0TG9jYXRpb24od3NkbEZpbGVOYW1lKTsNCisgICAgICAgICAgICBqYXZhSW50ZXJmYWNlQ29udHJhY3Quc2V0Tm9ybWFpbGl6ZWRXU0RMQ29udHJhY3Qod3NkbEludGVyZmFjZUNvbnRyYWN0KTsNCisgICAgICAgIH0gIA0KKyAgICAgICAgDQorICAgICAgICAvLyBhZGQgdGhlIHNlcnZpY2UgbW9kZWwgaW50byB0aGUgaW1wbGVtZW50YXRpb24gdHlwZQ0KKyAgICAgICAgU2VydmljZSBzZXJ2aWNlQWxyZWFkeVByZXNlbnQgPSBudWxsOw0KKyAgICAgICAgZm9yIChTZXJ2aWNlIHR5cGVTZXJ2aWNlIDogdHlwZS5nZXRTZXJ2aWNlcygpKXsNCisgICAgICAgICAgICBpZiAodHlwZVNlcnZpY2UuZ2V0TmFtZSgpLmVxdWFscyhzZXJ2aWNlLmdldE5hbWUoKSkpew0KKyAgICAgICAgICAgICAgICBzZXJ2aWNlQWxyZWFkeVByZXNlbnQgPSB0eXBlU2VydmljZTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBpZiAocmVwbGFjZSA9PSB0cnVlKXsNCisgICAgICAgICAgICB0eXBlLmdldFNlcnZpY2VzKCkucmVtb3ZlKHNlcnZpY2VBbHJlYWR5UHJlc2VudCk7IA0KKyAgICAgICAgICAgIHR5cGUuZ2V0U2VydmljZXMoKS5hZGQoc2VydmljZSk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGlmIChzZXJ2aWNlQWxyZWFkeVByZXNlbnQgPT0gbnVsbCl7DQorICAgICAgICAgICAgICAgIHR5cGUuZ2V0U2VydmljZXMoKS5hZGQoc2VydmljZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICAgcmV0dXJuIHNlcnZpY2U7DQorICAgIH0gICAgDQorICAgIA0KKyAgICBwcml2YXRlIDxUIGV4dGVuZHMgQW5ub3RhdGlvbj4gVCBnZXRQYXJhbWV0ZXJBbm5vdGF0aW9uKE1ldGhvZCBtZXRob2QsIGludCBpbmRleCwgQ2xhc3M8VD4gYW5ub3RhdGlvblR5cGUpIHsNCisgICAgICAgIEFubm90YXRpb25bXSBhbm5vdGF0aW9ucyA9IG1ldGhvZC5nZXRQYXJhbWV0ZXJBbm5vdGF0aW9ucygpW2luZGV4XTsNCisgICAgICAgIGZvciAoQW5ub3RhdGlvbiBhbm5vdGF0aW9uIDogYW5ub3RhdGlvbnMpIHsNCisgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbi5hbm5vdGF0aW9uVHlwZSgpID09IGFubm90YXRpb25UeXBlKSB7DQorICAgICAgICAgICAgICAgIHJldHVybiBhbm5vdGF0aW9uVHlwZS5jYXN0KGFubm90YXRpb24pOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiBudWxsOw0KKyAgICB9DQorICAgIA0KKyAgICBwcml2YXRlIHZvaWQgYWRkU09BUEludGVudChQb2xpY3lTdWJqZWN0IHBvbGljeVN1YmplY3Qpew0KKyAgICAgICAgSW50ZW50IHNvYXBJbnRlbnQgPSBwb2xpY3lGYWN0b3J5LmNyZWF0ZUludGVudCgpOw0KKyAgICAgICAgc29hcEludGVudC5zZXROYW1lKENvbnN0YW50cy5TT0FQX0lOVEVOVCk7ICAgICAgICAgDQorICAgICAgICBwb2xpY3lTdWJqZWN0LmdldFJlcXVpcmVkSW50ZW50cygpLmFkZChzb2FwSW50ZW50KTsNCisgICAgfQ0KKyAgICANCisgICAgcHJpdmF0ZSB2b2lkIGNyZWF0ZVdTQmluZGluZyhKYXZhSW1wbGVtZW50YXRpb24gamF2YUltcGxlbWVudGF0aW9uLCBTZXJ2aWNlIHNlcnZpY2Upew0KKyAgICAgICAgaWYoc2VydmljZS5nZXRCaW5kaW5ncygpLnNpemUoKSA9PSAwKXsNCisgICAgICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c0JpbmRpbmcgPSB3c0JpbmRpbmdGYWN0b3J5LmNyZWF0ZVdlYlNlcnZpY2VCaW5kaW5nKCk7DQorICAgICAgICAgICAgd3NCaW5kaW5nLnNldE5hbWUoc2VydmljZS5nZXROYW1lKCkpOw0KKyAgICAgICAgICAgIEV4dGVuc2lvblR5cGUgYmluZGluZ1R5cGUgPSBwb2xpY3lGYWN0b3J5LmNyZWF0ZUJpbmRpbmdUeXBlKCk7DQorICAgICAgICAgICAgYmluZGluZ1R5cGUuc2V0VHlwZShXZWJTZXJ2aWNlQ29uc3RhbnRzLkJJTkRJTkdfV1NfUU5BTUUpOw0KKyAgICAgICAgICAgIGJpbmRpbmdUeXBlLnNldFVucmVzb2x2ZWQodHJ1ZSk7DQorICAgICAgICAgICAgKChQb2xpY3lTdWJqZWN0KXdzQmluZGluZykuc2V0RXh0ZW5zaW9uVHlwZShiaW5kaW5nVHlwZSk7DQorICAgICAgICAgICAgc2VydmljZS5nZXRCaW5kaW5ncygpLmFkZCh3c0JpbmRpbmcpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnRyb3NwZWN0L2ltcGwvU2VydmljZVByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludHJvc3BlY3QvaW1wbC9TZXJ2aWNlUHJvY2Vzc29yLmphdmEKaW5kZXggZDA2MmZkYy4uNzBhN2Q0OCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludHJvc3BlY3QvaW1wbC9TZXJ2aWNlUHJvY2Vzc29yLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludHJvc3BlY3QvaW1wbC9TZXJ2aWNlUHJvY2Vzc29yLmphdmEKQEAgLTc4LDcgKzc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZTsKICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UgPSBjcmVhdGVTZXJ2aWNlKGludGVyZmF6ZSwgbnVsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlID0gY3JlYXRlU2VydmljZShjbGF6eiwgaW50ZXJmYXplLCBudWxsKTsKICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbihlKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTI0LDEyICsxMjQsMTMgQEAKICAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgaW50ZXJmYWNlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IChhbm5vdGF0aW9uLm5hbWVzKCkubGVuZ3RoID4gMCkgPyBhbm5vdGF0aW9uLm5hbWVzKClbaV0gOiBudWxsOwotICAgICAgICAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IGNyZWF0ZVNlcnZpY2UoaW50ZXJmYWNlc1tpXSwgbmFtZSk7CisgICAgICAgICAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gY3JlYXRlU2VydmljZShjbGF6eiwgaW50ZXJmYWNlc1tpXSwgbmFtZSk7CiAgICAgICAgICAgICAgICAgdHlwZS5nZXRTZXJ2aWNlcygpLmFkZChzZXJ2aWNlKTsKICAgICAgICAgICAgIH0gY2F0Y2ggKEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnRyb3NwZWN0aW9uRXhjZXB0aW9uKGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIAogICAgIH0KIAogICAgIHByb3RlY3RlZCBib29sZWFuIGhhc01ldGhvZChNZXRob2QgbTEsIE1ldGhvZFtdIG1zKSB7CkBAIC0xODAsMjEgKzE4MSw0MCBAQAogICAgICAgICBjcmVhdGVDYWxsYmFjayh0eXBlLCBlbGVtZW50KTsKICAgICB9CiAKLSAgICBwdWJsaWMgU2VydmljZSBjcmVhdGVTZXJ2aWNlKENsYXNzPD8+IGludGVyZmF6ZSwgU3RyaW5nIG5hbWUpIHRocm93cyBJbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgU2VydmljZSBjcmVhdGVTZXJ2aWNlKENsYXNzPD8+IGNsYXp6LCBDbGFzczw/PiBpbnRlcmZhemUsIFN0cmluZyBuYW1lKSB0aHJvd3MgSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbiB7CiAgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IGFzc2VtYmx5RmFjdG9yeS5jcmVhdGVTZXJ2aWNlKCk7CiAgICAgICAgIEphdmFJbnRlcmZhY2VDb250cmFjdCBpbnRlcmZhY2VDb250cmFjdCA9IGphdmFJbnRlcmZhY2VGYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2VDb250cmFjdCgpOwogICAgICAgICBzZXJ2aWNlLnNldEludGVyZmFjZUNvbnRyYWN0KGludGVyZmFjZUNvbnRyYWN0KTsKKyAgICAgICAgCisgICAgICAgIEphdmFJbnRlcmZhY2UgY2FsbEludGVyZmFjZSA9IGphdmFJbnRlcmZhY2VGYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2UoaW50ZXJmYXplKTsKIAogICAgICAgICBpZiAobmFtZSA9PSBudWxsKSB7Ci0gICAgICAgICAgICBzZXJ2aWNlLnNldE5hbWUoaW50ZXJmYXplLmdldFNpbXBsZU5hbWUoKSk7CisgICAgICAgICAgICBTdHJpbmcgc2VydmljZU5hbWUgPSBpbnRlcmZhemUuZ2V0U2ltcGxlTmFtZSgpOworICAgICAgICAgICAgLy8gSWYgdGhlIGludGVyZmFjZSBoYXMgQFdlYlNlcnZpY2UgYW5ub3RhdGlvbiB0aGVuIHRha2UgdGhlIAorICAgICAgICAgICAgLy8gc2VydmljZSBuYW1lIGZyb20gdGhlIEBuYW1lIGF0dHJpYnV0ZSBpZiBwcmVzZW50ICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW50ZXJmYXplLmlzQW5ub3RhdGlvblByZXNlbnQoV2ViU2VydmljZS5jbGFzcykpeworICAgICAgICAgICAgICAgIGlmIChjYWxsSW50ZXJmYWNlLmdldFFOYW1lKCkgIT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VOYW1lID0gY2FsbEludGVyZmFjZS5nZXRRTmFtZSgpLmdldExvY2FsUGFydCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2VydmljZS5zZXROYW1lKHNlcnZpY2VOYW1lKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNlcnZpY2Uuc2V0TmFtZShuYW1lKTsKICAgICAgICAgfQogCi0gICAgICAgIEphdmFJbnRlcmZhY2UgY2FsbEludGVyZmFjZSA9IGphdmFJbnRlcmZhY2VGYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2UoaW50ZXJmYXplKTsKKyAgICAgICAgCisgICAgICAgIGJvb2xlYW4gcmVtb3RhYmxlID0gY2xhenouZ2V0QW5ub3RhdGlvbihSZW1vdGFibGUuY2xhc3MpICE9IG51bGw7CisgICAgICAgIGlmIChyZW1vdGFibGUpeworICAgICAgICAgICAgY2FsbEludGVyZmFjZS5zZXRSZW1vdGFibGUodHJ1ZSk7CisgICAgICAgIH0KICAgICAgICAgc2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpLnNldEludGVyZmFjZShjYWxsSW50ZXJmYWNlKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChjYWxsSW50ZXJmYWNlLmdldENhbGxiYWNrQ2xhc3MoKSAhPSBudWxsKSB7CiAgICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGNhbGxiYWNrSW50ZXJmYWNlID0gamF2YUludGVyZmFjZUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZShjYWxsSW50ZXJmYWNlLmdldENhbGxiYWNrQ2xhc3MoKSk7CisgICAgICAgICAgICBpZiAocmVtb3RhYmxlKXsKKyAgICAgICAgICAgICAgICBjYWxsYmFja0ludGVyZmFjZS5zZXRSZW1vdGFibGUodHJ1ZSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzZXJ2aWNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuc2V0Q2FsbGJhY2tJbnRlcmZhY2UoY2FsbGJhY2tJbnRlcmZhY2UpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzZXJ2aWNlOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL3htbC9KYXZhSW1wbGVtZW50YXRpb25Qcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS94bWwvSmF2YUltcGxlbWVudGF0aW9uUHJvY2Vzc29yLmphdmEKaW5kZXggZWZiNGEzNy4uZWJmOTA1ZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL3htbC9KYXZhSW1wbGVtZW50YXRpb25Qcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEveG1sL0phdmFJbXBsZW1lbnRhdGlvblByb2Nlc3Nvci5qYXZhCkBAIC01MCwxNCArNTAsMjQgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLkNsYXNzUmVmZXJlbmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLk1vZGVsUmVzb2x2ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkZhY3RvcnlFeHRlbnNpb25Qb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuVXRpbGl0eUV4dGVuc2lvblBvaW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5JbnRyb3NwZWN0aW9uRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5KYXZhRWxlbWVudEltcGw7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFJbXBsZW1lbnRhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuSmF2YUltcGxlbWVudGF0aW9uRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5KYXZhSW50cm9zcGVjdGlvbkhlbHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5Db21wYXRpYmlsaXR5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkluY29tcGF0aWJsZUludGVyZmFjZUNvbnRyYWN0RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2VDb250cmFjdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2VDb250cmFjdE1hcHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlQ29udHJhY3Q7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYud3NkbC5XU0RMRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsLldTRExJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYud3NkbC5XU0RMSW50ZXJmYWNlQ29udHJhY3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLk1vbml0b3I7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlByb2JsZW07CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLlByb2JsZW0uU2V2ZXJpdHk7CkBAIC03NCwxMyArODQsMTggQEAKICAgICBwcml2YXRlIEFzc2VtYmx5RmFjdG9yeSBhc3NlbWJseUZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBQb2xpY3lGYWN0b3J5IHBvbGljeUZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBQb2xpY3lTdWJqZWN0UHJvY2Vzc29yIHBvbGljeVByb2Nlc3NvcjsKLSAgICAKKyAgICBwcml2YXRlIFN0QVhBcnRpZmFjdFByb2Nlc3NvcjxPYmplY3Q+IGV4dGVuc2lvblByb2Nlc3NvcjsKKyAgICBwcml2YXRlIHRyYW5zaWVudCBJbnRlcmZhY2VDb250cmFjdE1hcHBlciBpbnRlcmZhY2VDb250cmFjdE1hcHBlcjsKIAotICAgIHB1YmxpYyBKYXZhSW1wbGVtZW50YXRpb25Qcm9jZXNzb3IoRmFjdG9yeUV4dGVuc2lvblBvaW50IG1vZGVsRmFjdG9yaWVzKSB7CisgICAgcHVibGljIEphdmFJbXBsZW1lbnRhdGlvblByb2Nlc3NvcihFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5LCAgU3RBWEFydGlmYWN0UHJvY2Vzc29yPD8+IHN0YXhQcm9jZXNzb3IpIHsKKyAgICAgICAgRmFjdG9yeUV4dGVuc2lvblBvaW50IG1vZGVsRmFjdG9yaWVzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoRmFjdG9yeUV4dGVuc2lvblBvaW50LmNsYXNzKTsKICAgICAgICAgdGhpcy5hc3NlbWJseUZhY3RvcnkgPSBtb2RlbEZhY3Rvcmllcy5nZXRGYWN0b3J5KEFzc2VtYmx5RmFjdG9yeS5jbGFzcyk7CiAgICAgICAgIHRoaXMucG9saWN5RmFjdG9yeSA9IG1vZGVsRmFjdG9yaWVzLmdldEZhY3RvcnkoUG9saWN5RmFjdG9yeS5jbGFzcyk7CiAgICAgICAgIHRoaXMuamF2YUZhY3RvcnkgPSBtb2RlbEZhY3Rvcmllcy5nZXRGYWN0b3J5KEphdmFJbXBsZW1lbnRhdGlvbkZhY3RvcnkuY2xhc3MpOwogICAgICAgICB0aGlzLnBvbGljeVByb2Nlc3NvciA9IG5ldyBQb2xpY3lTdWJqZWN0UHJvY2Vzc29yKHBvbGljeUZhY3RvcnkpOworICAgICAgICB0aGlzLmV4dGVuc2lvblByb2Nlc3NvciA9IChTdEFYQXJ0aWZhY3RQcm9jZXNzb3I8T2JqZWN0PilzdGF4UHJvY2Vzc29yOworICAgICAgICBVdGlsaXR5RXh0ZW5zaW9uUG9pbnQgdXRpbGl0aWVzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoVXRpbGl0eUV4dGVuc2lvblBvaW50LmNsYXNzKTsKKyAgICAgICAgdGhpcy5pbnRlcmZhY2VDb250cmFjdE1hcHBlciA9IHV0aWxpdGllcy5nZXRVdGlsaXR5KEludGVyZmFjZUNvbnRyYWN0TWFwcGVyLmNsYXNzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTE5MCw3ICsyMDUsMTAgQEAKIAogCSAgICAgICAgY2hlY2tOb1N0YXRpY0Fubm90YXRpb25zKG1vbml0b3IsIGphdmFJbXBsZW1lbnRhdGlvbik7CiAJICAgICAgICAKKwkgICAgICAgIHBvc3RKQVhXU1Byb2Nlc3NvclJlc29sdmUocmVzb2x2ZXIsIGphdmFJbXBsZW1lbnRhdGlvbiwgY29udGV4dCk7CisJICAgICAgICAKIAkgICAgICAgIGphdmFJbXBsZW1lbnRhdGlvbi5zZXRVbnJlc29sdmVkKGZhbHNlKTsKKwkgICAgICAgIAogCSAgICAgICAgbWVyZ2VDb21wb25lbnRUeXBlKHJlc29sdmVyLCBqYXZhSW1wbGVtZW50YXRpb24sIGNvbnRleHQpOwogCiAJICAgICAgICAvLyBGSVhNRSB0aGUgaW50cm9zcGVjdG9yIHNob3VsZCBhbHdheXMgY3JlYXRlIGF0IGxlYXN0IG9uZSBzZXJ2aWNlCkBAIC0zMDksNiArMzI3LDQ5IEBACiAKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgcG9zdEpBWFdTUHJvY2Vzc29yUmVzb2x2ZShNb2RlbFJlc29sdmVyIHJlc29sdmVyLCBKYXZhSW1wbGVtZW50YXRpb24gaW1wbCwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KQorICAgICAgICB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiwgSW5jb21wYXRpYmxlSW50ZXJmYWNlQ29udHJhY3RFeGNlcHRpb24geworICAgICAgICBmb3IoU2VydmljZSBzZXJ2aWNlIDogaW1wbC5nZXRTZXJ2aWNlcygpKXsKKyAgICAgICAgICAgIEphdmFJbnRlcmZhY2VDb250cmFjdCBqYXZhSW50ZXJmYWNlQ29udHJhY3QgPSAoSmF2YUludGVyZmFjZUNvbnRyYWN0KXNlcnZpY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSmF2YUludGVyZmFjZSBqYXZhSW50ZXJmYWNlID0gKEphdmFJbnRlcmZhY2UpamF2YUludGVyZmFjZUNvbnRyYWN0LmdldEludGVyZmFjZSgpOworICAgICAgICAgICAgaWYgKGphdmFJbnRlcmZhY2UuaXNVbnJlc29sdmVkKCkpeyAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBleHRlbnNpb25Qcm9jZXNzb3IucmVzb2x2ZShqYXZhSW50ZXJmYWNlQ29udHJhY3QsIHJlc29sdmVyLCBjb250ZXh0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgV1NETEludGVyZmFjZUNvbnRyYWN0IHdzZGxJbnRlcmZhY2VDb250cmFjdCA9IChXU0RMSW50ZXJmYWNlQ29udHJhY3QpamF2YUludGVyZmFjZUNvbnRyYWN0LmdldE5vcm1hbGl6ZWRXU0RMQ29udHJhY3QoKTsKKyAgICAgICAgICAgIGlmKHdzZGxJbnRlcmZhY2VDb250cmFjdCAhPSBudWxsKXsKKyAgICAgICAgICAgICAgICAvLyBUaGUgdXNlciBoYXMgZXhwbGljaXRseSBhc3NvY2lhdGVkIGEgV1NETCB3aXRoIHRoZSBKYXZhIGltcGxlbWVudGF0aW9uCisgICAgICAgICAgICAgICAgLy8gdXNpbmcgYSBAV2ViU2VydmljZSh3c2RsTG9jYXRpb249Ii4uLiIpIGFubm90YXRpb24KKyAgICAgICAgICAgICAgICBXU0RMSW50ZXJmYWNlIHdzZGxJbnRlcmZhY2UgPSAoV1NETEludGVyZmFjZSl3c2RsSW50ZXJmYWNlQ29udHJhY3QuZ2V0SW50ZXJmYWNlKCk7CisgICAgICAgICAgICAgICAgaWYgKHdzZGxJbnRlcmZhY2UuaXNVbnJlc29sdmVkKCkpeworICAgICAgICAgICAgICAgICAgICAvL1dTRExEZWZpbml0aW9uIHJlc29sdmVkID0gcmVzb2x2ZXIucmVzb2x2ZU1vZGVsKFdTRExEZWZpbml0aW9uLmNsYXNzLCB3c2RsSW50ZXJmYWNlLmdldFdzZGxEZWZpbml0aW9uKCksIGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25Qcm9jZXNzb3IucmVzb2x2ZSh3c2RsSW50ZXJmYWNlQ29udHJhY3QsIHJlc29sdmVyLCBjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIEphdmEgYW5kIFdTREwgY29udHJhY3RzIGFyZSBjb21wYXRpYmxlCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZUNvbnRyYWN0TWFwcGVyLmNoZWNrQ29tcGF0aWJpbGl0eSh3c2RsSW50ZXJmYWNlQ29udHJhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqYXZhSW50ZXJmYWNlQ29udHJhY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wYXRpYmlsaXR5LlNVQlNFVCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSB0aGUgcmVzb2x2ZWQgV1NETCBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgd3NkbEludGVyZmFjZSA9IChXU0RMSW50ZXJmYWNlKXdzZGxJbnRlcmZhY2VDb250cmFjdC5nZXRJbnRlcmZhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIGNvcHkgcG9saWN5IGZyb20gdGhlIFdTREwgaW50ZXJmYWNlIHRvIHRoZSBKYXZhIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgICBqYXZhSW50ZXJmYWNlLmdldFBvbGljeVNldHMoKS5hZGRBbGwod3NkbEludGVyZmFjZS5nZXRQb2xpY3lTZXRzKCkpOworICAgICAgICAgICAgICAgICAgICBqYXZhSW50ZXJmYWNlLmdldFJlcXVpcmVkSW50ZW50cygpLmFkZEFsbCh3c2RsSW50ZXJmYWNlLmdldFJlcXVpcmVkSW50ZW50cygpKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIGNvcHkgcG9saWN5IGZyb20gdGhlIFdTREwgaW50ZXJmYWNlIHRvIHRoZSBjb21wb25lbnQgdHlwZSBzZXJ2aWNlCisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UG9saWN5U2V0cygpLmFkZEFsbCh3c2RsSW50ZXJmYWNlLmdldFBvbGljeVNldHMoKSk7CisgICAgICAgICAgICAgICAgICAgIHNlcnZpY2UuZ2V0UmVxdWlyZWRJbnRlbnRzKCkuYWRkQWxsKHdzZGxJbnRlcmZhY2UuZ2V0UmVxdWlyZWRJbnRlbnRzKCkpOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBUT0RPIC0gaXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0byBiZSBjb3BpZWQgZnJvbSB0aGUgdXNlciBzcGVjaWZpZWQgV1NETD8KKyAgICAgICAgICAgICAgICB9IAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSAgICAKIAogICAgIHByaXZhdGUgQ29tcG9uZW50VHlwZSBnZXRDb21wb25lbnRUeXBlKE1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXIsIEphdmFJbXBsZW1lbnRhdGlvbiBpbXBsLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHsKICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGltcGwuZ2V0SmF2YUNsYXNzKCkuZ2V0TmFtZSgpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5KYXZhQ2xhc3NWaXNpdG9yIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5KYXZhQ2xhc3NWaXNpdG9yCmluZGV4IDY3NmRkMjcuLmQwNzIzZjQgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuSmF2YUNsYXNzVmlzaXRvcgorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LkphdmFDbGFzc1Zpc2l0b3IKQEAgLTI5LDUgKzI5LDYgQEAKIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuUmVzb3VyY2VQcm9jZXNzb3I7cmFua2luZz0xMTAwDQogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5TY29wZVByb2Nlc3NvcjtyYW5raW5nPTEwMDANCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLlNlcnZpY2VQcm9jZXNzb3I7cmFua2luZz05MDANCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLkpBWFdTUHJvY2Vzc29yO3Jhbmtpbmc9ODUwDQogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5IZXVyaXN0aWNQb2pvUHJvY2Vzc29yO3Jhbmtpbmc9ODAwDQotb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5Qb2xpY3lQcm9jZXNzb3I7cmFua2luZz03MDANCitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLlBvbGljeVByb2Nlc3NvcjtyYW5raW5nPTcwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnRyb3NwZWN0L2ltcGwvSkFYV1NQcm9jZXNzb3JUZXN0Q2FzZS5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL2ludHJvc3BlY3QvaW1wbC9KQVhXU1Byb2Nlc3NvclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU2ZWY1MAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS9pbnRyb3NwZWN0L2ltcGwvSkFYV1NQcm9jZXNzb3JUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMTI3IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsOw0KKw0KK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5Nb2RlbEhlbHBlci5nZXRTZXJ2aWNlOw0KK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7DQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7DQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7DQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7DQorDQoraW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOw0KK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7DQorDQoraW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkRlZmF1bHRBc3NlbWJseUZhY3Rvcnk7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5EZWZhdWx0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5EZWZhdWx0SmF2YUltcGxlbWVudGF0aW9uRmFjdG9yeTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkludHJvc3BlY3Rpb25FeGNlcHRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5KYXZhSW1wbGVtZW50YXRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5KYXZhSW1wbGVtZW50YXRpb25GYWN0b3J5Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnZhbGlkQ2FsbGJhY2tFeGNlcHRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuRGVmYXVsdEphdmFJbnRlcmZhY2VGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5EZWZhdWx0UG9saWN5RmFjdG9yeTsNCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSZWZlcmVuY2U7DQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uQ2FsbGJhY2s7DQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsNCisNCisvKioNCisgKiBAdmVyc2lvbiAkUmV2OiA4MjYzNjggJCAkRGF0ZTogMjAwOS0xMC0xOCAwODoyMjoyMyArMDEwMCAoU3VuLCAxOCBPY3QgMjAwOSkgJA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBKQVhXU1Byb2Nlc3NvclRlc3RDYXNlIHsNCisgICAgcHJpdmF0ZSBKQVhXU1Byb2Nlc3NvciBwcm9jZXNzb3I7DQorICAgIHByaXZhdGUgSmF2YUltcGxlbWVudGF0aW9uRmFjdG9yeSBqYXZhSW1wbGVtZW50YXRpb25GYWN0b3J5Ow0KKw0KKyAgICBAQmVmb3JlDQorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gbmV3IERlZmF1bHRFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5KCk7DQorICAgICAgICBwcm9jZXNzb3IgPSBuZXcgSkFYV1NQcm9jZXNzb3IocmVnaXN0cnkpOw0KKyAgICAgICAgamF2YUltcGxlbWVudGF0aW9uRmFjdG9yeSA9IG5ldyBEZWZhdWx0SmF2YUltcGxlbWVudGF0aW9uRmFjdG9yeSgpOw0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJTZXJ2aWNlTm9OYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBKYXZhSW1wbGVtZW50YXRpb24gdHlwZSA9IGphdmFJbXBsZW1lbnRhdGlvbkZhY3RvcnkuY3JlYXRlSmF2YUltcGxlbWVudGF0aW9uKCk7DQorICAgICAgICBwcm9jZXNzb3IudmlzaXRDbGFzcyhGb28wSW1wbC5jbGFzcywgdHlwZSk7DQorICAgICAgICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlNlcnZpY2Ugc2VydmljZSA9IGdldFNlcnZpY2UodHlwZSwgIkZvbzBJbXBsIik7DQorICAgICAgICBhc3NlcnROb3ROdWxsKHNlcnZpY2UpOw0KKyAgICB9ICANCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdFdlYlNlcnZpY2VOYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBKYXZhSW1wbGVtZW50YXRpb24gdHlwZSA9IGphdmFJbXBsZW1lbnRhdGlvbkZhY3RvcnkuY3JlYXRlSmF2YUltcGxlbWVudGF0aW9uKCk7DQorICAgICAgICBwcm9jZXNzb3IudmlzaXRDbGFzcyhGb28xSW1wbC5jbGFzcywgdHlwZSk7DQorICAgICAgICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlNlcnZpY2Ugc2VydmljZSA9IGdldFNlcnZpY2UodHlwZSwgIkZvbzEiKTsNCisgICAgICAgIGFzc2VydE5vdE51bGwoc2VydmljZSk7DQorICAgIH0NCisgICAgDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RXZWJTZXJ2aWNlRVAoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIEphdmFJbXBsZW1lbnRhdGlvbiB0eXBlID0gamF2YUltcGxlbWVudGF0aW9uRmFjdG9yeS5jcmVhdGVKYXZhSW1wbGVtZW50YXRpb24oKTsNCisgICAgICAgIHByb2Nlc3Nvci52aXNpdENsYXNzKEZvbzJJbXBsLmNsYXNzLCB0eXBlKTsNCisgICAgICAgIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuU2VydmljZSBzZXJ2aWNlID0gZ2V0U2VydmljZSh0eXBlLCAiRm9vMiIpOw0KKyAgICAgICAgYXNzZXJ0Tm90TnVsbChzZXJ2aWNlKTsNCisgICAgfSAgICANCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdFdlYlNlcnZpY2VXU0RMKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBKYXZhSW1wbGVtZW50YXRpb24gdHlwZSA9IGphdmFJbXBsZW1lbnRhdGlvbkZhY3RvcnkuY3JlYXRlSmF2YUltcGxlbWVudGF0aW9uKCk7DQorICAgICAgICBwcm9jZXNzb3IudmlzaXRDbGFzcyhGb28zSW1wbC5jbGFzcywgdHlwZSk7DQorICAgICAgICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlNlcnZpY2Ugc2VydmljZSA9IGdldFNlcnZpY2UodHlwZSwgIkZvbzMiKTsNCisgICAgICAgIGFzc2VydE5vdE51bGwoc2VydmljZSk7DQorICAgIH0gDQorDQorICAgIEBXZWJTZXJ2aWNlKCkNCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRm9vMEltcGx7DQorICAgICAgICBwdWJsaWMgU3RyaW5nIGRvU29tZXRoaW5nKFN0cmluZyBhUGFyYW0pew0KKyAgICAgICAgICAgIHJldHVybiBudWxsOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIEBXZWJTZXJ2aWNlKG5hbWU9IkZvbzEiKQ0KKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBGb28xSW1wbHsNCisgICAgICAgIHB1YmxpYyBTdHJpbmcgZG9Tb21ldGhpbmcoU3RyaW5nIGFQYXJhbSl7DQorICAgICAgICAgICAgcmV0dXJuIG51bGw7DQorICAgICAgICB9DQorICAgIH0NCisgICAgDQorICAgIHByaXZhdGUgaW50ZXJmYWNlIEZvbzIgew0KKyAgICAgICAgcHVibGljIFN0cmluZyBkb1NvbWV0aGluZyhTdHJpbmcgYVBhcmFtKTsNCisgICAgfQ0KKyAgICANCisgICAgQFdlYlNlcnZpY2UobmFtZT0iRm9vMiIsIGVuZHBvaW50SW50ZXJmYWNlPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLkpBWFdTUHJvY2Vzc29yVGVzdENhc2UuRm9vMiIpDQorICAgIHByaXZhdGUgc3RhdGljIGNsYXNzIEZvbzJJbXBsew0KKyAgICAgICAgcHVibGljIFN0cmluZyBkb1NvbWV0aGluZyhTdHJpbmcgYVBhcmFtKXsNCisgICAgICAgICAgICByZXR1cm4gbnVsbDsNCisgICAgICAgIH0NCisgICAgfSAgIA0KKyAgICANCisgICAgQFdlYlNlcnZpY2UobmFtZT0iRm9vMyIsIHdzZGxMb2NhdGlvbj0iZm9vMy53c2RsIikNCisgICAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgRm9vM0ltcGx7DQorICAgICAgICBwdWJsaWMgU3RyaW5nIGRvU29tZXRoaW5nKFN0cmluZyBhUGFyYW0pew0KKyAgICAgICAgICAgIHJldHVybiBudWxsOw0KKyAgICAgICAgfQ0KKyAgICB9ICANCisgICAgDQorDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS94bWwvUmVhZFRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWphdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL2phdmEveG1sL1JlYWRUZXN0Q2FzZS5qYXZhCmluZGV4IDYzNWI0OTEuLjZlYTQ4NjggMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vamF2YS94bWwvUmVhZFRlc3RDYXNlLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9qYXZhL3htbC9SZWFkVGVzdENhc2UuamF2YQpAQCAtOTUsNyArOTUsOCBAQAogICAgICAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlzdGF4UHJvY2Vzc29yLnJlYWQocmVhZGVyLCBjb250ZXh0KTsKICAgICAgICAgYXNzZXJ0Tm90TnVsbChjb21wb3NpdGUpOwogCi0gICAgICAgIGNvbXBvc2l0ZUJ1aWxkZXIuYnVpbGQoY29tcG9zaXRlLCBidWlsZGVyQ29udGV4dCk7CisgICAgICAgIC8vIHJlbW92ZSBkZXBlbmRlbmN5IG9uIGJ1aWxkZXIKKyAgICAgICAgLy9jb21wb3NpdGVCdWlsZGVyLmJ1aWxkKGNvbXBvc2l0ZSwgYnVpbGRlckNvbnRleHQpOwogCiAgICAgfQogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWpheHJzLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWpheHJzLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggOTA4OTRkOS4uMGU1YjgyZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXhycy1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tamF4cnMtcnVudGltZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtNiw3ICs2LDcgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCiBCdW5kbGUtTGljZW5zZTogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dA0KIEJ1bmRsZS1EZXNjcmlwdGlvbjogQXBhY2hlIFR1c2NhbnkgU0NBIEltcGxlbWVudGF0aW9uIEpBWFJTIFJ1bnRpbWUNCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmpheHJzLnByb3ZpZGVyDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXhycy5ydW50aW1lDQogQnVuZGxlLURvY1VSTDogaHR0cDovL3d3dy5hcGFjaGUub3JnLw0KIEltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0LA0KICBqYXZheC5zZXJ2bGV0Lmh0dHAsDQpAQCAtMjIsMTEgKzIyLDExIEBACiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3k7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lO3ZlcnNpb249IjIuMC4wIiwNCi0gb3JnLmFwYWNoZS53aW5rLnNlcnZlci5pbnRlcm5hbCwNCi0gb3JnLmFwYWNoZS53aW5rLnNlcnZlci5pbnRlcm5hbC5oYW5kbGVycywNCi0gb3JnLmFwYWNoZS53aW5rLnNlcnZlci5pbnRlcm5hbC5yZWdpc3RyeSwNCi0gb3JnLmFwYWNoZS53aW5rLnNlcnZlci5pbnRlcm5hbC5zZXJ2bGV0LA0KLSBvcmcuYXBhY2hlLndpbmsuc2VydmVyLnV0aWxzLA0KKyBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmludGVybmFsO3ZlcnNpb249IjEuMS4xLmluY3ViYXRpbmciLA0KKyBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmludGVybmFsLmhhbmRsZXJzO3ZlcnNpb249IjEuMS4xLmluY3ViYXRpbmciLA0KKyBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmludGVybmFsLnJlZ2lzdHJ5O3ZlcnNpb249IjEuMS4xLmluY3ViYXRpbmciLA0KKyBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmludGVybmFsLnNlcnZsZXQ7dmVyc2lvbj0iMS4xLjEuaW5jdWJhdGluZyIsDQorIG9yZy5hcGFjaGUud2luay5zZXJ2ZXIudXRpbHM7dmVyc2lvbj0iMS4xLjEuaW5jdWJhdGluZyIsDQogIG9yZy5vYXNpc29wZW4uc2NhO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbjt2ZXJzaW9uPSIyLjAuMCINCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUsSmF2YVNFLTEuNgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1qYXhycy1ydW50aW1lL3BvbS54bWwgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWpheHJzLXJ1bnRpbWUvcG9tLnhtbAppbmRleCAzZmJiNmU0Li5hMzUyODIxIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWpheHJzLXJ1bnRpbWUvcG9tLnhtbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLWpheHJzLXJ1bnRpbWUvcG9tLnhtbApAQCAtODgsNyArODgsMTQgQEAKICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUud2luazwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPndpbmstc2VydmVyPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+MS4xLjEtaW5jdWJhdGluZzwvdmVyc2lvbj4KKyAgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb20uc3VuLnhtbC5iaW5kPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXhiLWltcGw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+ICAgICAgICAgICAgCiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgud3MucnM8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qc3IzMTEtYXBpPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9MSUNFTlNFIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNWQyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL0xJQ0VOU0UKQEAgLTAsMCArMSwyNDYgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBhY2hlIExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMi4wLCBKYW51YXJ5IDIwMDQKKyAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy8KKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTRSwgUkVQUk9EVUNUSU9OLCBBTkQgRElTVFJJQlVUSU9OCisKKyAgIDEuIERlZmluaXRpb25zLgorCisgICAgICAiTGljZW5zZSIgc2hhbGwgbWVhbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLAorICAgICAgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgICJMaWNlbnNvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IG93bmVyIG9yIGVudGl0eSBhdXRob3JpemVkIGJ5CisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgICJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwKKyAgICAgIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24KKyAgICAgIGNvbnRyb2wgd2l0aCB0aGF0IGVudGl0eS4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKKyAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKKyAgICAgIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgICJZb3UiIChvciAiWW91ciIpIHNoYWxsIG1lYW4gYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkKKyAgICAgIGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLAorICAgICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbgorICAgICAgc291cmNlLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy4KKworICAgICAgIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwKKyAgICAgIHRyYW5zZm9ybWF0aW9uIG9yIHRyYW5zbGF0aW9uIG9mIGEgU291cmNlIGZvcm0sIGluY2x1ZGluZyBidXQKKyAgICAgIG5vdCBsaW1pdGVkIHRvIGNvbXBpbGVkIG9iamVjdCBjb2RlLCBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiwKKyAgICAgIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworICAgICAgIldvcmsiIHNoYWxsIG1lYW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCwgd2hldGhlciBpbiBTb3VyY2Ugb3IKKyAgICAgIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEKKyAgICAgIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yaworICAgICAgKGFuIGV4YW1wbGUgaXMgcHJvdmlkZWQgaW4gdGhlIEFwcGVuZGl4IGJlbG93KS4KKworICAgICAgIkRlcml2YXRpdmUgV29ya3MiIHNoYWxsIG1lYW4gYW55IHdvcmssIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdAorICAgICAgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZQorICAgICAgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgcmVwcmVzZW50LCBhcyBhIHdob2xlLCBhbiBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAuIEZvciB0aGUgcHVycG9zZXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbgorICAgICAgc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLAorICAgICAgdGhlIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4KKworICAgICAgIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcKKyAgICAgIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBXb3JrIGFuZCBhbnkgbW9kaWZpY2F0aW9ucyBvciBhZGRpdGlvbnMKKyAgICAgIHRvIHRoYXQgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIHRoYXQgaXMgaW50ZW50aW9uYWxseQorICAgICAgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lcgorICAgICAgb3IgYnkgYW4gaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgYXV0aG9yaXplZCB0byBzdWJtaXQgb24gYmVoYWxmIG9mCisgICAgICB0aGUgY29weXJpZ2h0IG93bmVyLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgInN1Ym1pdHRlZCIKKyAgICAgIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQKKyAgICAgIHRvIHRoZSBMaWNlbnNvciBvciBpdHMgcmVwcmVzZW50YXRpdmVzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCisgICAgICBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLAorICAgICAgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUKKyAgICAgIExpY2Vuc29yIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjdXNzaW5nIGFuZCBpbXByb3ZpbmcgdGhlIFdvcmssIGJ1dAorICAgICAgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UKKyAgICAgIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzICJOb3QgYSBDb250cmlidXRpb24uIgorCisgICAgICAiQ29udHJpYnV0b3IiIHNoYWxsIG1lYW4gTGljZW5zb3IgYW5kIGFueSBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kCisgICAgICBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworICAgMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsCisgICAgICBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBzdWJsaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSB0aGUKKyAgICAgIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKyAgIDMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgorICAgICAgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLAorICAgICAgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUKKyAgICAgIChleGNlcHQgYXMgc3RhdGVkIGluIHRoaXMgc2VjdGlvbikgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLAorICAgICAgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssCisgICAgICB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZQorICAgICAgYnkgc3VjaCBDb250cmlidXRvciB0aGF0IGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlaXIKKyAgICAgIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykKKyAgICAgIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91CisgICAgICBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IChpbmNsdWRpbmcgYQorICAgICAgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdCB0aGUgV29yaworICAgICAgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3QKKyAgICAgIG9yIGNvbnRyaWJ1dG9yeSBwYXRlbnQgaW5mcmluZ2VtZW50LCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSBmb3IgdGhhdCBXb3JrIHNoYWxsIHRlcm1pbmF0ZQorICAgICAgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisgICA0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZQorICAgICAgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YgaW4gYW55IG1lZGl1bSwgd2l0aCBvciB3aXRob3V0CisgICAgICBtb2RpZmljYXRpb25zLCBhbmQgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBwcm92aWRlZCB0aGF0IFlvdQorICAgICAgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgIChhKSBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yCisgICAgICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgICAgKGIpIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICAgIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorCisgICAgICAoYykgWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIGZvcm0gb2YgYW55IERlcml2YXRpdmUgV29ya3MKKyAgICAgICAgICB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kCisgICAgICAgICAgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywKKyAgICAgICAgICBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mCisgICAgICAgICAgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgICAoZCkgSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMKKyAgICAgICAgICBkaXN0cmlidXRpb24sIHRoZW4gYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSBtdXN0CisgICAgICAgICAgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkCisgICAgICAgICAgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90CisgICAgICAgICAgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaW4gYXQgbGVhc3Qgb25lCisgICAgICAgICAgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQKKyAgICAgICAgICBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yCisgICAgICAgICAgZG9jdW1lbnRhdGlvbiwgaWYgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgb3IsCisgICAgICAgICAgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZAorICAgICAgICAgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cworICAgICAgICAgIG9mIHRoZSBOT1RJQ0UgZmlsZSBhcmUgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQKKyAgICAgICAgICBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbgorICAgICAgICAgIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlCisgICAgICAgICAgb3IgYXMgYW4gYWRkZW5kdW0gdG8gdGhlIE5PVElDRSB0ZXh0IGZyb20gdGhlIFdvcmssIHByb3ZpZGVkCisgICAgICAgICAgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkCisgICAgICAgICAgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorCisgICAgICBZb3UgbWF5IGFkZCBZb3VyIG93biBjb3B5cmlnaHQgc3RhdGVtZW50IHRvIFlvdXIgbW9kaWZpY2F0aW9ucyBhbmQKKyAgICAgIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgb3IgZGlzdHJpYnV0aW9uIG9mIFlvdXIgbW9kaWZpY2F0aW9ucywgb3IKKyAgICAgIGZvciBhbnkgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGFzIGEgd2hvbGUsIHByb3ZpZGVkIFlvdXIgdXNlLAorICAgICAgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoCisgICAgICB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICA1LiBTdWJtaXNzaW9uIG9mIENvbnRyaWJ1dGlvbnMuIFVubGVzcyBZb3UgZXhwbGljaXRseSBzdGF0ZSBvdGhlcndpc2UsCisgICAgICBhbnkgQ29udHJpYnV0aW9uIGludGVudGlvbmFsbHkgc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsKKyAgICAgIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIHdpdGhvdXQgYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucy4KKyAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIG5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvciBtb2RpZnkKKyAgICAgIHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkCisgICAgICB3aXRoIExpY2Vuc29yIHJlZ2FyZGluZyBzdWNoIENvbnRyaWJ1dGlvbnMuCisKKyAgIDYuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUKKyAgICAgIG5hbWVzLCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBwcm9kdWN0IG5hbWVzIG9mIHRoZSBMaWNlbnNvciwKKyAgICAgIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZQorICAgICAgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGUgTk9USUNFIGZpbGUuCisKKyAgIDcuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvcgorICAgICAgYWdyZWVkIHRvIGluIHdyaXRpbmcsIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBXb3JrIChhbmQgZWFjaAorICAgICAgQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvciBjb25kaXRpb25zCisgICAgICBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBCisgICAgICBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUKKyAgICAgIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBhbmQgYXNzdW1lIGFueQorICAgICAgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICA4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKKyAgICAgIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLAorICAgICAgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IChzdWNoIGFzIGRlbGliZXJhdGUgYW5kIGdyb3NzbHkKKyAgICAgIG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlCisgICAgICBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgICBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKKyAgICAgIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKKyAgICAgIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwKKyAgICAgIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsCisgICAgICBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yCisgICAgICBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyAgIDkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcKKyAgICAgIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsCisgICAgICBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LAorICAgICAgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMKKyAgICAgIExpY2Vuc2UuIEhvd2V2ZXIsIGluIGFjY2VwdGluZyBzdWNoIG9ibGlnYXRpb25zLCBZb3UgbWF5IGFjdCBvbmx5CisgICAgICBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZgorICAgICAgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LAorICAgICAgZGVmZW5kLCBhbmQgaG9sZCBlYWNoIENvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5CisgICAgICBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uCisgICAgICBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgIEFQUEVORElYOiBIb3cgdG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yay4KKworICAgICAgVG8gYXBwbHkgdGhlIEFwYWNoZSBMaWNlbnNlIHRvIHlvdXIgd29yaywgYXR0YWNoIHRoZSBmb2xsb3dpbmcKKyAgICAgIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIKKyAgICAgIHJlcGxhY2VkIHdpdGggeW91ciBvd24gaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24uIChEb24ndCBpbmNsdWRlCisgICAgICB0aGUgYnJhY2tldHMhKSAgVGhlIHRleHQgc2hvdWxkIGJlIGVuY2xvc2VkIGluIHRoZSBhcHByb3ByaWF0ZQorICAgICAgY29tbWVudCBzeW50YXggZm9yIHRoZSBmaWxlIGZvcm1hdC4gV2UgYWxzbyByZWNvbW1lbmQgdGhhdCBhCisgICAgICBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlCisgICAgICBzYW1lICJwcmludGVkIHBhZ2UiIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciBlYXNpZXIKKyAgICAgIGlkZW50aWZpY2F0aW9uIHdpdGhpbiB0aGlyZC1wYXJ0eSBhcmNoaXZlcy4KKworICAgQ29weXJpZ2h0IFt5eXl5XSBbbmFtZSBvZiBjb3B5cmlnaHQgb3duZXJdCisKKyAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBcGFjaGUgVHVzY2FueSBTQ0EgZm9yIEphdmEgU3ViY29tcG9uZW50cworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT06IAorCitUaGUgVHVzY2FueSBTQ0EgZm9yIEphdmEgcmVsZWFzZSBpbmNsdWRlcyBhIG51bWJlciBvZiBzdWJjb21wb25lbnRzIHdpdGgKK3NlcGFyYXRlIGNvcHlyaWdodCBub3RpY2VzIGFuZCBsaWNlbnNlIHRlcm1zLiBZb3VyIHVzZSBvZiB0aGUgc291cmNlCitjb2RlIGZvciB0aGUgdGhlc2Ugc3ViY29tcG9uZW50cyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBtb2R1bGUgaW5jbHVkZXMgb25lIGZpbGUgdW5kZXIgdGhlIGZvbGxvd2luZyBCU0QgbGljZW5zZToKKworQ29weXJpZ2h0IChjKSBEamFuZ28gU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgaW5kaXZpZHVhbCBjb250cmlidXRvcnMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgICAKKyAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBEamFuZ28gbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkCisgICAgICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRQorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVlNTQ4NgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNSBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorU0NBLVZlcnNpb246IDEuMQ0KK0J1bmRsZS1OYW1lOiBBcGFjaGUgVHVzY2FueSBQeXRob24gSW1wbGVtZW50YXRpb24gUnVudGltZQ0KK0J1bmRsZS1WZW5kb3I6IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbg0KK0J1bmRsZS1WZXJzaW9uOiAyLjAuMA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTGljZW5zZTogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dA0KK0J1bmRsZS1EZXNjcmlwdGlvbjogQXBhY2hlIFR1c2NhbnkgU0NBIFB5dGhvbiBJbXBsZW1lbnRhdGlvbiBSdW50aW1lDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob24ucnVudGltZQ0KK0J1bmRsZS1Eb2NVUkw6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8NCitCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSjJTRS0xLjUsSmF2YVNFLTEuNgorRXhwb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLnByb3ZpZGVyO3ZlcnNpb249IjIuMC4wIg0KK0ltcG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmludm9jYXRpb247dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3QuaHR0cDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF4cnM7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnB5dGhvbjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3k7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLm9hc2lzb3Blbi5zY2E7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uO3ZlcnNpb249IjIuMC4wIg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvTk9USUNFIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhODI5NwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvTk9USUNFCkBAIC0wLDAgKzEsMTMgQEAKKyR7cG9tLm5hbWV9CitDb3B5cmlnaHQgKGMpIDIwMDUgLSAyMDEwIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbgorCitUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5CitUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLgorCitUaGlzIHByb2R1Y3QgYWxzbyBpbmNsdWRlcyBzb2Z0d2FyZSB1bmRlciB0aGUgQlNEIGxpY2Vuc2UgCisoc2VlIHRoZSBMSUNFTlNFIGZpbGUgY29udGFpbmVkIGluIHRoaXMgZGlzdHJpYnV0aW9uKSwgd2l0aAordGhlIGZvbGxvd2luZyBjb3B5cmlnaHQ6CisKK0NvcHlyaWdodCAoYykgRGphbmdvIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIGluZGl2aWR1YWwgY29udHJpYnV0b3JzLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9qeXRob24taW5zdGFsbCBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvanl0aG9uLWluc3RhbGwKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZGM4OWJiMwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvanl0aG9uLWluc3RhbGwKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgIAorIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgICAgCisjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIEluc3RhbGwgSnl0aG9uIDIuNS4yYjEgamFyIGluIHRoZSBsb2NhbCBNYXZlbiByZXBvc2l0b3J5LCBhcyBpdCdzIG5vdAorIyB5ZXQgYXZhaWxhYmxlIGluIGEgY2VudHJhbCBNYXZlbiByZXBvc2l0b3J5Citta2RpciAtcCB0YXJnZXQKK2NkIHRhcmdldAord2dldCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2p5dGhvbi9maWxlcy9qeXRob24tZGV2LzIuNS4yYjEvanl0aG9uX2luc3RhbGxlci0yLjUuMmIxLmphci9kb3dubG9hZAoramF2YSAtamFyIGp5dGhvbl9pbnN0YWxsZXItMi41LjJiMS5qYXIgLXMgLWQganl0aG9uIC10IHN0YW5kYWxvbmUKK212biBpbnN0YWxsOmluc3RhbGwtZmlsZSAtRGdyb3VwSWQ9b3JnLnB5dGhvbiAtRGFydGlmYWN0SWQ9anl0aG9uIC1EdmVyc2lvbj0yLjUuMiAtRHBhY2thZ2luZz1qYXIgLURmaWxlPWp5dGhvbi9qeXRob24uamFyCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvcG9tLnhtbCBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjhhZDIyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9wb20ueG1sCkBAIC0wLDAgKzEsODkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorLS0+DQorPHByb2plY3Q+DQorDQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW1vZHVsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBQeXRob24gSW1wbGVtZW50YXRpb24gRXh0ZW5zaW9uPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmUtcnVudGltZS1wb208L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXB5dGhvbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5weXRob248L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anl0aG9uPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuNS4yLWJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj40LjU8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctanNvbnJwYy1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1qZXR0eTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4gDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9wcm92aWRlci9QeXRob25JbXBsZW1lbnRhdGlvblByb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvUHl0aG9uSW1wbGVtZW50YXRpb25Qcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMzgxYWMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvUHl0aG9uSW1wbGVtZW50YXRpb25Qcm92aWRlci5qYXZhCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLnByb3ZpZGVyOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9uZW50UHJvcGVydHk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb25lbnRSZWZlcmVuY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmludm9jYXRpb24uUHJveHlGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLlB5dGhvbkV2YWw7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob24uUHl0aG9uSW1wbGVtZW50YXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob24uUHl0aG9uUHJvcGVydHk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZva2VyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudFNlcnZpY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZTsKK2ltcG9ydCBvcmcucHl0aG9uLmNvcmUuUHk7CitpbXBvcnQgb3JnLnB5dGhvbi5jb3JlLlB5T2JqZWN0OworaW1wb3J0IG9yZy5weXRob24uY29yZS5QeVN0cmluZzsKK2ltcG9ydCBvcmcucHl0aG9uLmNvcmUuUHlTeXN0ZW1TdGF0ZTsKK2ltcG9ydCBvcmcucHl0aG9uLmNvcmUuUHlUdXBsZTsKK2ltcG9ydCBvcmcucHl0aG9uLnV0aWwuUHl0aG9uSW50ZXJwcmV0ZXI7CisKKy8qKgorICogSW1wbGVtZW50YXRpb24gcHJvdmlkZXIgZm9yIFB5dGhvbiBjb21wb25lbnQgaW1wbGVtZW50YXRpb25zLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworY2xhc3MgUHl0aG9uSW1wbGVtZW50YXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIEltcGxlbWVudGF0aW9uUHJvdmlkZXIgeworICAgIGZpbmFsIFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50OworICAgIGZpbmFsIFB5dGhvbkltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uOworICAgIFB5dGhvbkludGVycHJldGVyIHB5dGhvbjsKKyAgICBQeU9iamVjdCBjYWxsYWJsZTsKKyAgICBQcm94eUZhY3RvcnkgcHhGYWN0b3J5OworCisgICAgUHl0aG9uSW1wbGVtZW50YXRpb25Qcm92aWRlcihmaW5hbCBSdW50aW1lQ29tcG9uZW50IGNvbXAsIGZpbmFsIFB5dGhvbkltcGxlbWVudGF0aW9uIGltcGwsIFByb3h5RmFjdG9yeSBweGYpIHsKKyAgICAgICAgY29tcG9uZW50ID0gY29tcDsKKyAgICAgICAgaW1wbGVtZW50YXRpb24gPSBpbXBsOworICAgICAgICBweEZhY3RvcnkgPSBweGY7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RhcnQoKSB7CisgICAgICAgIGZpbmFsIFB5U3lzdGVtU3RhdGUgcHNzID0gbmV3IFB5U3lzdGVtU3RhdGUoKTsKKyAgICAgICAgcHNzLnBhdGguaW5zZXJ0KDAsIG5ldyBQeVN0cmluZyhpbXBsZW1lbnRhdGlvbi5nZXRMb2NhdGlvbigpKSk7CisgICAgICAgIHBzcy5wYXRoLmluc2VydCgwLCBuZXcgUHlTdHJpbmcoZ2V0Q2xhc3MoKS5nZXRQcm90ZWN0aW9uRG9tYWluKCkuZ2V0Q29kZVNvdXJjZSgpLmdldExvY2F0aW9uKCkuZ2V0RmlsZSgpKSk7CisgICAgICAgIHB5dGhvbiA9IG5ldyBQeXRob25JbnRlcnByZXRlcihudWxsLCBwc3MpOworICAgICAgICBweXRob24uZXhlYygiZnJvbSBpbnZva2VyIGltcG9ydCAqIik7CisKKyAgICAgICAgZmluYWwgTGlzdDxQeU9iamVjdD4gcHggPSBuZXcgQXJyYXlMaXN0PFB5T2JqZWN0PigpOworICAgICAgICBmb3IoZmluYWwgQ29tcG9uZW50UmVmZXJlbmNlIHI6IGNvbXBvbmVudC5nZXRSZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAgIGZpbmFsIFB5dGhvbkV2YWwgcGUgPSBweEZhY3RvcnkuY3JlYXRlUHJveHkoUHl0aG9uRXZhbC5jbGFzcywgKFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSlyLmdldEVuZHBvaW50UmVmZXJlbmNlcygpLmdldCgwKSk7CisgICAgICAgICAgICBweC5hZGQoUHkuamF2YTJweShuZXcgUHl0aG9uRXZhbCgpIHsKKyAgICAgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgICAgICBwdWJsaWMgU3RyaW5nIGV2YWwoZmluYWwgU3RyaW5nIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdiA9IHBlLmV2YWwoYXJncyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfQorICAgICAgICBmaW5hbCBMaXN0PFB5T2JqZWN0PiBwciA9IG5ldyBBcnJheUxpc3Q8UHlPYmplY3Q+KCk7CisgICAgICAgIGZvcihmaW5hbCBDb21wb25lbnRQcm9wZXJ0eSBwOiBjb21wb25lbnQuZ2V0UHJvcGVydGllcygpKSB7CisgICAgICAgICAgICBmaW5hbCBTdHJpbmcgdiA9IFN0cmluZy52YWx1ZU9mKHAuZ2V0VmFsdWUoKSk7CisgICAgICAgICAgICBwci5hZGQoUHkuamF2YTJweShuZXcgUHl0aG9uUHJvcGVydHkoKSB7CisgICAgICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICAgICAgcHVibGljIFN0cmluZyBldmFsKCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH0KKworICAgICAgICBQeU9iamVjdCBta2MgPSBweXRob24uZ2V0KCJta2NvbXBvbmVudCIpOworICAgICAgICBjYWxsYWJsZSA9IG1rYy5fX2NhbGxfXyhuZXcgUHlTdHJpbmcoY29tcG9uZW50LmdldE5hbWUoKSksIG5ldyBQeVN0cmluZyhpbXBsZW1lbnRhdGlvbi5nZXRTY3JpcHQoKSksIG5ldyBQeVR1cGxlKHB4LnRvQXJyYXkobmV3IFB5T2JqZWN0WzBdKSksIG5ldyBQeVR1cGxlKHByLnRvQXJyYXkobmV3IFB5T2JqZWN0WzBdKSkpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7CisgICAgICAgIHB5dGhvbi5jbGVhbnVwKCk7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNPbmVXYXlJbnZvY2F0aW9uKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIEludm9rZXIgY3JlYXRlSW52b2tlcihmaW5hbCBSdW50aW1lQ29tcG9uZW50U2VydmljZSBzLCBmaW5hbCBPcGVyYXRpb24gb3ApIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQeXRob25JbnZva2VyKHB5dGhvbiwgY2FsbGFibGUsIG9wKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvUHl0aG9uSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9wcm92aWRlci9QeXRob25JbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MmUzZmQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvUHl0aG9uSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkuamF2YQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLnByb3ZpZGVyOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmludm9jYXRpb24uRXh0ZW5zaWJsZVByb3h5RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbi5Qcm94eUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob24uUHl0aG9uSW1wbGVtZW50YXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5JbXBsZW1lbnRhdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7CisKKy8qKgorICogQSBmYWN0b3J5IGZvciBQeXRob24gaW1wbGVtZW50YXRpb24gcHJvdmlkZXJzLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFB5dGhvbkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5IGltcGxlbWVudHMgSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3Rvcnk8UHl0aG9uSW1wbGVtZW50YXRpb24+IHsKKyAgICBmaW5hbCBQcm94eUZhY3RvcnkgcHhGYWN0b3J5OworCisgICAgcHVibGljIFB5dGhvbkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5KGZpbmFsIEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXApIHsKKyAgICAgICAgcHhGYWN0b3J5ID0gRXh0ZW5zaWJsZVByb3h5RmFjdG9yeS5nZXRJbnN0YW5jZShlcCk7CisgICAgfQorCisgICAgcHVibGljIEltcGxlbWVudGF0aW9uUHJvdmlkZXIgY3JlYXRlSW1wbGVtZW50YXRpb25Qcm92aWRlcihmaW5hbCBSdW50aW1lQ29tcG9uZW50IGNvbXAsIGZpbmFsIFB5dGhvbkltcGxlbWVudGF0aW9uIGltcGwpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBQeXRob25JbXBsZW1lbnRhdGlvblByb3ZpZGVyKGNvbXAsIGltcGwsIHB4RmFjdG9yeSk7CisgICAgfQorCisgICAgcHVibGljIENsYXNzPFB5dGhvbkltcGxlbWVudGF0aW9uPiBnZXRNb2RlbFR5cGUoKSB7CisgICAgICAgIHJldHVybiBQeXRob25JbXBsZW1lbnRhdGlvbi5jbGFzczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvUHl0aG9uSW52b2tlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL3Byb3ZpZGVyL1B5dGhvbkludm9rZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDllNWUzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL3Byb3ZpZGVyL1B5dGhvbkludm9rZXIuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLnByb3ZpZGVyOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZva2VyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlOworaW1wb3J0IG9yZy5weXRob24uY29yZS5QeU9iamVjdDsKK2ltcG9ydCBvcmcucHl0aG9uLmNvcmUuUHlTdHJpbmc7CitpbXBvcnQgb3JnLnB5dGhvbi51dGlsLlB5dGhvbkludGVycHJldGVyOworCisvKioKKyAqIEFuIGludm9rZXIgZm9yIFB5dGhvbiBjb21wb25lbnRzLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworY2xhc3MgUHl0aG9uSW52b2tlciBpbXBsZW1lbnRzIEludm9rZXIgeworICAgIGZpbmFsIFB5dGhvbkludGVycHJldGVyIHB5dGhvbjsKKyAgICBmaW5hbCBQeU9iamVjdCBjYWxsYWJsZTsKKyAgICBmaW5hbCBPcGVyYXRpb24gb3BlcmF0aW9uOworCisgICAgUHl0aG9uSW52b2tlcihmaW5hbCBQeXRob25JbnRlcnByZXRlciBweSwgZmluYWwgUHlPYmplY3QgYywgZmluYWwgT3BlcmF0aW9uIG9wKSB7CisgICAgICAgIHB5dGhvbiA9IHB5OworICAgICAgICBjYWxsYWJsZSA9IGM7CisgICAgICAgIG9wZXJhdGlvbiA9IG9wOworICAgIH0KKworICAgIFN0cmluZyBhcHBseShmaW5hbCBTdHJpbmcgcmVxKSB7CisgICAgICAgIFB5T2JqZWN0IHIgPSBjYWxsYWJsZS5fX2NhbGxfXyhuZXcgUHlTdHJpbmcocmVxKSk7CisgICAgICAgIHJldHVybiByLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAgcHVibGljIE1lc3NhZ2UgaW52b2tlKGZpbmFsIE1lc3NhZ2UgbXNnKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBtc2cuc2V0Qm9keShhcHBseSgoU3RyaW5nKSgoT2JqZWN0W10pbXNnLmdldEJvZHkoKSlbMF0pKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIG1zZy5zZXRGYXVsdEJvZHkoZS5nZXRDYXVzZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbXNnOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMWU2YzQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5CkBAIC0wLDAgKzEsMjAgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCisjIEltcGxlbWVudGF0aW9uIHByb3ZpZGVyIGZvciBQeXRob24gY29tcG9uZW50cw0KK29yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLnByb3ZpZGVyLlB5dGhvbkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5O21vZGVsPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLlB5dGhvbkltcGxlbWVudGF0aW9uDQorDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXRvbXV0aWwucHkgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9hdG9tdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzBhN2M5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvYXRvbXV0aWwucHkKQEAgLTAsMCArMSwxMjAgQEAKKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgIAorIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgICAgCisjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIEFUT00gZGF0YSBjb252ZXJzaW9uIGZ1bmN0aW9ucworCitmcm9tIHV0aWwgaW1wb3J0ICoKK2Zyb20gZWxlbXV0aWwgaW1wb3J0ICoKK2Zyb20geG1sdXRpbCBpbXBvcnQgKgorCisjIENvbnZlcnQgYSBsaXN0IG9mIGVsZW1lbnRzIHRvIGEgbGlzdCBvZiB2YWx1ZXMgcmVwcmVzZW50aW5nIGFuIEFUT00gZW50cnkKK2RlZiBlbnRyeUVsZW1lbnRzVG9WYWx1ZXMoZSk6CisgICAgbHQgPSBmaWx0ZXIoc2VsZWN0b3IoKGVsZW1lbnQsICIndGl0bGUiKSksIGUpCisgICAgdCA9ICIiIGlmIGlzTmlsKGx0KSBlbHNlIGVsZW1lbnRWYWx1ZShjYXIobHQpKQorICAgIGxpID0gZmlsdGVyKHNlbGVjdG9yKChlbGVtZW50LCAiJ2lkIikpLCBlKQorICAgIGkgPSAiIiBpZiBpc05pbChsaSkgZWxzZSBlbGVtZW50VmFsdWUoY2FyKGxpKSkKKyAgICBsYyA9IGZpbHRlcihzZWxlY3RvcigoZWxlbWVudCwgIidjb250ZW50IikpLCBlKQorICAgIHJldHVybiAodCwgaSwgZWxlbWVudFZhbHVlKGNhcihsYykpKQorCisjIENvbnZlcnQgYSBsaXN0IG9mIGVsZW1lbnRzIHRvIGEgbGlzdCBvZiB2YWx1ZXMgcmVwcmVzZW50aW5nIEFUT00gZW50cmllcworZGVmIGVudHJpZXNFbGVtZW50c1RvVmFsdWVzKGUpOgorICAgIGlmIGlzTmlsKGUpOgorICAgICAgICByZXR1cm4gZQorICAgIHJldHVybiBjb25zKGVudHJ5RWxlbWVudHNUb1ZhbHVlcyhjYXIoZSkpLCBlbnRyaWVzRWxlbWVudHNUb1ZhbHVlcyhjZHIoZSkpKQorCisjIENvbnZlcnQgYSBsaXN0IG9mIHN0cmluZ3MgdG8gYSBsaXN0IG9mIHZhbHVlcyByZXByZXNlbnRpbmcgYW4gQVRPTSBlbnRyeQorZGVmIHJlYWRBVE9NRW50cnkobCk6CisgICAgZSA9IHJlYWRYTUwobCkKKyAgICBpZiBpc05pbChlKToKKyAgICAgICAgcmV0dXJuICgpCisgICAgcmV0dXJuIGVudHJ5RWxlbWVudHNUb1ZhbHVlcyhjYXIoZSkpCisKKyMgQ29udmVydCBhIGxpc3Qgb2YgdmFsdWVzIHJlcHJlc2VudHkgYW4gQVRPTSBlbnRyeSB0byBhIHZhbHVlCitkZWYgZW50cnlWYWx1ZShlKToKKyAgICB2ID0gZWxlbWVudHNUb1ZhbHVlcygoY2FkZHIoZSksKSkKKyAgICByZXR1cm4gY29ucyhjYXIoZSksIChjYWRyKGUpLCBjZHIoY2FyKHYpKSkpCisKKyMgUmV0dXJuIHRydWUgaWYgYSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50cyBhbiBBVE9NIGZlZWQKK2RlZiBpc0FUT01GZWVkKGwpOgorICAgIGlmIGlzTmlsKGwpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiBjYXIobClbMDo1XSAhPSAiPD94bWwiOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gY29udGFpbnMoY2FyKGwpLCAiPGZlZWQiKQorCisjIENvbnZlcnQgYSBsaXN0IG9mIHN0cmluZ3MgdG8gYSBsaXN0IG9mIHZhbHVlcyByZXByZXNlbnRpbmcgYW4gQVRPTSBmZWVkCitkZWYgcmVhZEFUT01GZWVkKGwpOgorICAgIGYgPSByZWFkWE1MKGwpCisgICAgaWYgaXNOaWwoZik6CisgICAgICAgIHJldHVybiAoKQorICAgIHQgPSBmaWx0ZXIoc2VsZWN0b3IoKGVsZW1lbnQsICIndGl0bGUiKSksIGNhcihmKSkKKyAgICBpID0gZmlsdGVyKHNlbGVjdG9yKChlbGVtZW50LCAiJ2lkIikpLCBjYXIoZikpCisgICAgZSA9IGZpbHRlcihzZWxlY3RvcigoZWxlbWVudCwgIidlbnRyeSIpKSwgY2FyKGYpKQorICAgIGlmIGlzTmlsKGUpOgorICAgICAgICByZXR1cm4gKGVsZW1lbnRWYWx1ZShjYXIodCkpLCBlbGVtZW50VmFsdWUoY2FyKGkpKSkKKyAgICByZXR1cm4gY29ucyhlbGVtZW50VmFsdWUoY2FyKHQpKSwgY29ucyhlbGVtZW50VmFsdWUoY2FyKGkpKSwgZW50cmllc0VsZW1lbnRzVG9WYWx1ZXMoZSkpKQorCisjIENvbnZlcnQgYW4gQVRPTSBmZWVkIGNvbnRhaW5pbmcgZWxlbWVudHMgdG8gYW4gQVRPTSBmZWVkIGNvbnRhaW5pbmcgdmFsdWVzCitkZWYgZmVlZFZhbHVlc0xvb3AoZSk6CisgICAgaWYgKGlzTmlsKGUpKToKKyAgICAgICAgcmV0dXJuIGUKKyAgICByZXR1cm4gY29ucyhlbnRyeVZhbHVlKGNhcihlKSksIGZlZWRWYWx1ZXNMb29wKGNkcihlKSkpCisKK2RlZiBmZWVkVmFsdWVzKGUpOgorICAgIHJldHVybiBjb25zKGNhcihlKSwgY29ucyhjYWRyKGUpLCBmZWVkVmFsdWVzTG9vcChjZGRyKGUpKSkpCisKKyMgQ29udmVydCBhIGxpc3Qgb2YgdmFsdWVzIHJlcHJlc2VudHkgYW4gQVRPTSBlbnRyeSB0byBhIGxpc3Qgb2YgZWxlbWVudHMKK2RlZiBlbnRyeUVsZW1lbnQobCk6CisgICAgcmV0dXJuIChlbGVtZW50LCAiJ2VudHJ5IiwgKGF0dHJpYnV0ZSwgIid4bWxucyIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iKSwKKyAgICAgICAgICAgIChlbGVtZW50LCAiJ3RpdGxlIiwgKGF0dHJpYnV0ZSwgIid0eXBlIiwgInRleHQiKSwgY2FyKGwpKSwKKyAgICAgICAgICAgIChlbGVtZW50LCAiJ2lkIiwgY2FkcihsKSksCisgICAgICAgICAgICAoZWxlbWVudCwgIidjb250ZW50IiwgKGF0dHJpYnV0ZSwgIid0eXBlIiwgKCJhcHBsaWNhdGlvbi94bWwiIGlmIGlzTGlzdChjYWRkcihsKSkgZWxzZSAidGV4dCIpKSwgY2FkZHIobCkpLAorICAgICAgICAgICAgKGVsZW1lbnQsICInbGluayIsIChhdHRyaWJ1dGUsICInaHJlZiIsIGNhZHIobCkpKSkKKworIyBDb252ZXJ0IGEgbGlzdCBvZiB2YWx1ZXMgcmVwcmVzZW50aW5nIEFUT00gZW50cmllcyB0byBhIGxpc3Qgb2YgZWxlbWVudHMKK2RlZiBlbnRyaWVzRWxlbWVudHMobCk6CisgICAgaWYgaXNOaWwobCk6CisgICAgICAgIHJldHVybiBsCisgICAgcmV0dXJuIGNvbnMoZW50cnlFbGVtZW50KGNhcihsKSksIGVudHJpZXNFbGVtZW50cyhjZHIobCkpKQorCisjIENvbnZlcnQgYSBsaXN0IG9mIHZhbHVlcyByZXByZXNlbnRpbmcgYW4gQVRPTSBlbnRyeSB0byBhbiBBVE9NIGVudHJ5CitkZWYgd3JpdGVBVE9NRW50cnkobCk6CisgICAgcmV0dXJuIHdyaXRlWE1MKChlbnRyeUVsZW1lbnQobCksKSwgVHJ1ZSkKKworIyBDb252ZXJ0IGEgbGlzdCBvZiB2YWx1ZXMgcmVwcmVzZW50aW5nIGFuIEFUT00gZmVlZCB0byBhbiBBVE9NIGZlZWQKK2RlZiB3cml0ZUFUT01GZWVkKGwpOgorICAgIGYgPSAoZWxlbWVudCwgIidmZWVkIiwgKGF0dHJpYnV0ZSwgIid4bWxucyIsICJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iKSwKKyAgICAgICAgICAgIChlbGVtZW50LCAiJ3RpdGxlIiwgKGF0dHJpYnV0ZSwgIid0eXBlIiwgInRleHQiKSwgY2FyKGwpKSwKKyAgICAgICAgICAgIChlbGVtZW50LCAiJ2lkIiwgY2FkcihsKSkpCisgICAgaWYgaXNOaWwoY2RkcihsKSk6CisgICAgICAgIHJldHVybiB3cml0ZVhNTCgoZiwpLCBUcnVlKQorICAgIGZlID0gYXBwZW5kKGYsIGVudHJpZXNFbGVtZW50cyhjZGRyKGwpKSkKKyAgICByZXR1cm4gd3JpdGVYTUwoKGZlLCksIFRydWUpCisKKyMgQ29udmVydCBhbiBBVE9NIGVudHJ5IGNvbnRhaW5pbmcgYSB2YWx1ZSB0byBhbiBBVE9NIGVudHJ5IGNvbnRhaW5pbmcgYW4gaXRlbSBlbGVtZW50CitkZWYgZW50cnlWYWx1ZXNUb0VsZW1lbnRzKHYpOgorICAgIHJldHVybiBjb25zKGNhcih2KSwgY29ucyhjYWRyKHYpLCB2YWx1ZXNUb0VsZW1lbnRzKChjb25zKCInaXRlbSIsIGNhZGRyKHYpKSwpKSkpCisKKyMgQ29udmVydCBhbiBBVE9NIGZlZWQgY29udGFpbmluZyB2YWx1ZXMgdG8gYW4gQVRPTSBmZWVkIGNvbnRhaW5pbmcgZWxlbWVudHMKK2RlZiBmZWVkVmFsdWVzVG9FbGVtZW50c0xvb3Aodik6CisgICAgaWYgaXNOaWwodik6CisgICAgICAgIHJldHVybiB2CisgICAgcmV0dXJuIGNvbnMoZW50cnlWYWx1ZXNUb0VsZW1lbnRzKGNhcih2KSksIGZlZWRWYWx1ZXNUb0VsZW1lbnRzTG9vcChjZHIodikpKQorCitkZWYgZmVlZFZhbHVlc1RvRWxlbWVudHModik6CisgICAgcmV0dXJuIGNvbnMoY2FyKHYpLCBjb25zKGNhZHIodiksIGZlZWRWYWx1ZXNUb0VsZW1lbnRzTG9vcChjZGRyKHYpKSkpCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2RqYW5nby9fX2luaXRfXy5weSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2RqYW5nby9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvZGphbmdvL19faW5pdF9fLnB5CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9kamFuZ28vdXRpbHMvX19pbml0X18ucHkgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9kamFuZ28vdXRpbHMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2RqYW5nby91dGlscy9fX2luaXRfXy5weQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvZGphbmdvL3V0aWxzL3NpbXBsZWpzb24vX19pbml0X18ucHkgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9kamFuZ28vdXRpbHMvc2ltcGxlanNvbi9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWI3MTczCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvZGphbmdvL3V0aWxzL3NpbXBsZWpzb24vX19pbml0X18ucHkKQEAgLTAsMCArMSwyNTIgQEAKK3IiIiIKK0Egc2ltcGxlLCBmYXN0LCBleHRlbnNpYmxlIEpTT04gZW5jb2RlciBhbmQgZGVjb2RlcgorCitKU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz4gaXMgYSBzdWJzZXQgb2YKK0phdmFTY3JpcHQgc3ludGF4IChFQ01BLTI2MiAzcmQgZWRpdGlvbikgdXNlZCBhcyBhIGxpZ2h0d2VpZ2h0IGRhdGEKK2ludGVyY2hhbmdlIGZvcm1hdC4KKworc2ltcGxlanNvbiBleHBvc2VzIGFuIEFQSSBmYW1pbGlhciB0byB1c2VzIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CittYXJzaGFsIGFuZCBwaWNrbGUgbW9kdWxlcy4KKworRW5jb2RpbmcgYmFzaWMgUHl0aG9uIG9iamVjdCBoaWVyYXJjaGllczo6CisgICAgCisgICAgPj4+IGltcG9ydCBzaW1wbGVqc29uCisgICAgPj4+IHNpbXBsZWpzb24uZHVtcHMoWydmb28nLCB7J2Jhcic6ICgnYmF6JywgTm9uZSwgMS4wLCAyKX1dKQorICAgICdbImZvbyIsIHsiYmFyIjogWyJiYXoiLCBudWxsLCAxLjAsIDJdfV0nCisgICAgPj4+IHByaW50IHNpbXBsZWpzb24uZHVtcHMoIlwiZm9vXGJhciIpCisgICAgIlwiZm9vXGJhciIKKyAgICA+Pj4gcHJpbnQgc2ltcGxlanNvbi5kdW1wcyh1J1x1MTIzNCcpCisgICAgIlx1MTIzNCIKKyAgICA+Pj4gcHJpbnQgc2ltcGxlanNvbi5kdW1wcygnXFwnKQorICAgICJcXCIKKyAgICA+Pj4gcHJpbnQgc2ltcGxlanNvbi5kdW1wcyh7ImMiOiAwLCAiYiI6IDAsICJhIjogMH0sIHNvcnRfa2V5cz1UcnVlKQorICAgIHsiYSI6IDAsICJiIjogMCwgImMiOiAwfQorICAgID4+PiBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworICAgID4+PiBpbyA9IFN0cmluZ0lPKCkKKyAgICA+Pj4gc2ltcGxlanNvbi5kdW1wKFsnc3RyZWFtaW5nIEFQSSddLCBpbykKKyAgICA+Pj4gaW8uZ2V0dmFsdWUoKQorICAgICdbInN0cmVhbWluZyBBUEkiXScKKworQ29tcGFjdCBlbmNvZGluZzo6CisKKyAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KKyAgICA+Pj4gc2ltcGxlanNvbi5kdW1wcyhbMSwyLDMseyc0JzogNSwgJzYnOiA3fV0sIHNlcGFyYXRvcnM9KCcsJywnOicpKQorICAgICdbMSwyLDMseyI0Ijo1LCI2Ijo3fV0nCisKK1ByZXR0eSBwcmludGluZzo6CisKKyAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KKyAgICA+Pj4gcHJpbnQgc2ltcGxlanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpCisgICAgeworICAgICAgICAiNCI6IDUsIAorICAgICAgICAiNiI6IDcKKyAgICB9CisKK0RlY29kaW5nIEpTT046OgorICAgIAorICAgID4+PiBpbXBvcnQgc2ltcGxlanNvbgorICAgID4+PiBzaW1wbGVqc29uLmxvYWRzKCdbImZvbyIsIHsiYmFyIjpbImJheiIsIG51bGwsIDEuMCwgMl19XScpCisgICAgW3UnZm9vJywge3UnYmFyJzogW3UnYmF6JywgTm9uZSwgMS4wLCAyXX1dCisgICAgPj4+IHNpbXBsZWpzb24ubG9hZHMoJyJcXCJmb29cXGJhciInKQorICAgIHUnImZvb1x4MDhhcicKKyAgICA+Pj4gZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KKyAgICA+Pj4gaW8gPSBTdHJpbmdJTygnWyJzdHJlYW1pbmcgQVBJIl0nKQorICAgID4+PiBzaW1wbGVqc29uLmxvYWQoaW8pCisgICAgW3Unc3RyZWFtaW5nIEFQSSddCisKK1NwZWNpYWxpemluZyBKU09OIG9iamVjdCBkZWNvZGluZzo6CisKKyAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KKyAgICA+Pj4gZGVmIGFzX2NvbXBsZXgoZGN0KToKKyAgICAuLi4gICAgIGlmICdfX2NvbXBsZXhfXycgaW4gZGN0OgorICAgIC4uLiAgICAgICAgIHJldHVybiBjb21wbGV4KGRjdFsncmVhbCddLCBkY3RbJ2ltYWcnXSkKKyAgICAuLi4gICAgIHJldHVybiBkY3QKKyAgICAuLi4gCisgICAgPj4+IHNpbXBsZWpzb24ubG9hZHMoJ3siX19jb21wbGV4X18iOiB0cnVlLCAicmVhbCI6IDEsICJpbWFnIjogMn0nLAorICAgIC4uLiAgICAgb2JqZWN0X2hvb2s9YXNfY29tcGxleCkKKyAgICAoMSsyaikKKworRXh0ZW5kaW5nIEpTT05FbmNvZGVyOjoKKyAgICAKKyAgICA+Pj4gaW1wb3J0IHNpbXBsZWpzb24KKyAgICA+Pj4gY2xhc3MgQ29tcGxleEVuY29kZXIoc2ltcGxlanNvbi5KU09ORW5jb2Rlcik6CisgICAgLi4uICAgICBkZWYgZGVmYXVsdChzZWxmLCBvYmopOgorICAgIC4uLiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBjb21wbGV4KToKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIFtvYmoucmVhbCwgb2JqLmltYWddCisgICAgLi4uICAgICAgICAgcmV0dXJuIHNpbXBsZWpzb24uSlNPTkVuY29kZXIuZGVmYXVsdChzZWxmLCBvYmopCisgICAgLi4uIAorICAgID4+PiBkdW1wcygyICsgMWosIGNscz1Db21wbGV4RW5jb2RlcikKKyAgICAnWzIuMCwgMS4wXScKKyAgICA+Pj4gQ29tcGxleEVuY29kZXIoKS5lbmNvZGUoMiArIDFqKQorICAgICdbMi4wLCAxLjBdJworICAgID4+PiBsaXN0KENvbXBsZXhFbmNvZGVyKCkuaXRlcmVuY29kZSgyICsgMWopKQorICAgIFsnWycsICcyLjAnLCAnLCAnLCAnMS4wJywgJ10nXQorICAgIAorCitOb3RlIHRoYXQgdGhlIEpTT04gcHJvZHVjZWQgYnkgdGhpcyBtb2R1bGUncyBkZWZhdWx0IHNldHRpbmdzCitpcyBhIHN1YnNldCBvZiBZQU1MLCBzbyBpdCBtYXkgYmUgdXNlZCBhcyBhIHNlcmlhbGl6ZXIgZm9yIHRoYXQgYXMgd2VsbC4KKyIiIgorX192ZXJzaW9uX18gPSAnMS41JworX19hbGxfXyA9IFsKKyAgICAnZHVtcCcsICdkdW1wcycsICdsb2FkJywgJ2xvYWRzJywKKyAgICAnSlNPTkRlY29kZXInLCAnSlNPTkVuY29kZXInLAorXQorCitmcm9tIGRqYW5nby51dGlscy5zaW1wbGVqc29uLmRlY29kZXIgaW1wb3J0IEpTT05EZWNvZGVyCitmcm9tIGRqYW5nby51dGlscy5zaW1wbGVqc29uLmVuY29kZXIgaW1wb3J0IEpTT05FbmNvZGVyCisKK2RlZiBkdW1wKG9iaiwgZnAsIHNraXBrZXlzPUZhbHNlLCBlbnN1cmVfYXNjaWk9VHJ1ZSwgY2hlY2tfY2lyY3VsYXI9VHJ1ZSwKKyAgICAgICAgYWxsb3dfbmFuPVRydWUsIGNscz1Ob25lLCBpbmRlbnQ9Tm9uZSwgKiprdyk6CisgICAgIiIiCisgICAgU2VyaWFsaXplIGBgb2JqYGAgYXMgYSBKU09OIGZvcm1hdHRlZCBzdHJlYW0gdG8gYGBmcGBgIChhCisgICAgYGAud3JpdGUoKWBgLXN1cHBvcnRpbmcgZmlsZS1saWtlIG9iamVjdCkuCisKKyAgICBJZiBgYHNraXBrZXlzYGAgaXMgYGBUcnVlYGAgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcworICAgIChgYHN0cmBgLCBgYHVuaWNvZGVgYCwgYGBpbnRgYCwgYGBsb25nYGAsIGBgZmxvYXRgYCwgYGBib29sYGAsIGBgTm9uZWBgKSAKKyAgICB3aWxsIGJlIHNraXBwZWQgaW5zdGVhZCBvZiByYWlzaW5nIGEgYGBUeXBlRXJyb3JgYC4KKworICAgIElmIGBgZW5zdXJlX2FzY2lpYGAgaXMgYGBGYWxzZWBgLCB0aGVuIHRoZSBzb21lIGNodW5rcyB3cml0dGVuIHRvIGBgZnBgYAorICAgIG1heSBiZSBgYHVuaWNvZGVgYCBpbnN0YW5jZXMsIHN1YmplY3QgdG8gbm9ybWFsIFB5dGhvbiBgYHN0cmBgIHRvCisgICAgYGB1bmljb2RlYGAgY29lcmNpb24gcnVsZXMuICBVbmxlc3MgYGBmcC53cml0ZSgpYGAgZXhwbGljaXRseQorICAgIHVuZGVyc3RhbmRzIGBgdW5pY29kZWBgIChhcyBpbiBgYGNvZGVjcy5nZXR3cml0ZXIoKWBgKSB0aGlzIGlzIGxpa2VseQorICAgIHRvIGNhdXNlIGFuIGVycm9yLgorCisgICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGBgRmFsc2VgYCwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCisgICAgZm9yIGNvbnRhaW5lciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJlbmNlIHdpbGwKKyAgICByZXN1bHQgaW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9yIHdvcnNlKS4KKworICAgIElmIGBgYWxsb3dfbmFuYGAgaXMgYGBGYWxzZWBgLCB0aGVuIGl0IHdpbGwgYmUgYSBgYFZhbHVlRXJyb3JgYCB0bworICAgIHNlcmlhbGl6ZSBvdXQgb2YgcmFuZ2UgYGBmbG9hdGBgIHZhbHVlcyAoYGBuYW5gYCwgYGBpbmZgYCwgYGAtaW5mYGApCisgICAgaW4gc3RyaWN0IGNvbXBsaWFuY2Ugb2YgdGhlIEpTT04gc3BlY2lmaWNhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyB0aGUKKyAgICBKYXZhU2NyaXB0IGVxdWl2YWxlbnRzIChgYE5hTmBgLCBgYEluZmluaXR5YGAsIGBgLUluZmluaXR5YGApLgorCisgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kIG9iamVjdAorICAgIG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiAgQW4gaW5kZW50IGxldmVsCisgICAgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiAgYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdCByZXByZXNlbnRhdGlvbi4KKworICAgIFRvIHVzZSBhIGN1c3RvbSBgYEpTT05FbmNvZGVyYGAgc3ViY2xhc3MgKGUuZy4gb25lIHRoYXQgb3ZlcnJpZGVzIHRoZQorICAgIGBgLmRlZmF1bHQoKWBgIG1ldGhvZCB0byBzZXJpYWxpemUgYWRkaXRpb25hbCB0eXBlcyksIHNwZWNpZnkgaXQgd2l0aAorICAgIHRoZSBgYGNsc2BgIGt3YXJnLgorICAgICIiIgorICAgIGlmIGNscyBpcyBOb25lOgorICAgICAgICBjbHMgPSBKU09ORW5jb2RlcgorICAgIGl0ZXJhYmxlID0gY2xzKHNraXBrZXlzPXNraXBrZXlzLCBlbnN1cmVfYXNjaWk9ZW5zdXJlX2FzY2lpLAorICAgICAgICBjaGVja19jaXJjdWxhcj1jaGVja19jaXJjdWxhciwgYWxsb3dfbmFuPWFsbG93X25hbiwgaW5kZW50PWluZGVudCwKKyAgICAgICAgKiprdykuaXRlcmVuY29kZShvYmopCisgICAgIyBjb3VsZCBhY2NlbGVyYXRlIHdpdGggd3JpdGVsaW5lcyBpbiBzb21lIHZlcnNpb25zIG9mIFB5dGhvbiwgYXQKKyAgICAjIGEgZGVidWdnYWJpbGl0eSBjb3N0CisgICAgZm9yIGNodW5rIGluIGl0ZXJhYmxlOgorICAgICAgICBmcC53cml0ZShjaHVuaykKKworZGVmIGR1bXBzKG9iaiwgc2tpcGtleXM9RmFsc2UsIGVuc3VyZV9hc2NpaT1UcnVlLCBjaGVja19jaXJjdWxhcj1UcnVlLAorICAgICAgICBhbGxvd19uYW49VHJ1ZSwgY2xzPU5vbmUsIGluZGVudD1Ob25lLCBzZXBhcmF0b3JzPU5vbmUsICoqa3cpOgorICAgICIiIgorICAgIFNlcmlhbGl6ZSBgYG9iamBgIHRvIGEgSlNPTiBmb3JtYXR0ZWQgYGBzdHJgYC4KKworICAgIElmIGBgc2tpcGtleXNgYCBpcyBgYFRydWVgYCB0aGVuIGBgZGljdGBgIGtleXMgdGhhdCBhcmUgbm90IGJhc2ljIHR5cGVzCisgICAgKGBgc3RyYGAsIGBgdW5pY29kZWBgLCBgYGludGBgLCBgYGxvbmdgYCwgYGBmbG9hdGBgLCBgYGJvb2xgYCwgYGBOb25lYGApIAorICAgIHdpbGwgYmUgc2tpcHBlZCBpbnN0ZWFkIG9mIHJhaXNpbmcgYSBgYFR5cGVFcnJvcmBgLgorCisgICAgSWYgYGBlbnN1cmVfYXNjaWlgYCBpcyBgYEZhbHNlYGAsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGEKKyAgICBgYHVuaWNvZGVgYCBpbnN0YW5jZSBzdWJqZWN0IHRvIG5vcm1hbCBQeXRob24gYGBzdHJgYCB0byBgYHVuaWNvZGVgYAorICAgIGNvZXJjaW9uIHJ1bGVzIGluc3RlYWQgb2YgYmVpbmcgZXNjYXBlZCB0byBhbiBBU0NJSSBgYHN0cmBgLgorCisgICAgSWYgYGBjaGVja19jaXJjdWxhcmBgIGlzIGBgRmFsc2VgYCwgdGhlbiB0aGUgY2lyY3VsYXIgcmVmZXJlbmNlIGNoZWNrCisgICAgZm9yIGNvbnRhaW5lciB0eXBlcyB3aWxsIGJlIHNraXBwZWQgYW5kIGEgY2lyY3VsYXIgcmVmZXJlbmNlIHdpbGwKKyAgICByZXN1bHQgaW4gYW4gYGBPdmVyZmxvd0Vycm9yYGAgKG9yIHdvcnNlKS4KKworICAgIElmIGBgYWxsb3dfbmFuYGAgaXMgYGBGYWxzZWBgLCB0aGVuIGl0IHdpbGwgYmUgYSBgYFZhbHVlRXJyb3JgYCB0bworICAgIHNlcmlhbGl6ZSBvdXQgb2YgcmFuZ2UgYGBmbG9hdGBgIHZhbHVlcyAoYGBuYW5gYCwgYGBpbmZgYCwgYGAtaW5mYGApIGluCisgICAgc3RyaWN0IGNvbXBsaWFuY2Ugb2YgdGhlIEpTT04gc3BlY2lmaWNhdGlvbiwgaW5zdGVhZCBvZiB1c2luZyB0aGUKKyAgICBKYXZhU2NyaXB0IGVxdWl2YWxlbnRzIChgYE5hTmBgLCBgYEluZmluaXR5YGAsIGBgLUluZmluaXR5YGApLgorCisgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kCisgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiAgQW4gaW5kZW50CisgICAgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLiAgYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdAorICAgIHJlcHJlc2VudGF0aW9uLgorCisgICAgSWYgYGBzZXBhcmF0b3JzYGAgaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlCisgICAgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuCisgICAgYGAoJywnLCAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorCisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkVuY29kZXJgYCBzdWJjbGFzcyAoZS5nLiBvbmUgdGhhdCBvdmVycmlkZXMgdGhlCisgICAgYGAuZGVmYXVsdCgpYGAgbWV0aG9kIHRvIHNlcmlhbGl6ZSBhZGRpdGlvbmFsIHR5cGVzKSwgc3BlY2lmeSBpdCB3aXRoCisgICAgdGhlIGBgY2xzYGAga3dhcmcuCisgICAgIiIiCisgICAgaWYgY2xzIGlzIE5vbmU6CisgICAgICAgIGNscyA9IEpTT05FbmNvZGVyCisgICAgcmV0dXJuIGNscygKKyAgICAgICAgc2tpcGtleXM9c2tpcGtleXMsIGVuc3VyZV9hc2NpaT1lbnN1cmVfYXNjaWksCisgICAgICAgIGNoZWNrX2NpcmN1bGFyPWNoZWNrX2NpcmN1bGFyLCBhbGxvd19uYW49YWxsb3dfbmFuLCBpbmRlbnQ9aW5kZW50LAorICAgICAgICBzZXBhcmF0b3JzPXNlcGFyYXRvcnMsCisgICAgICAgICoqa3cpLmVuY29kZShvYmopCisKK2RlZiBsb2FkKGZwLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgKiprdyk6CisgICAgIiIiCisgICAgRGVzZXJpYWxpemUgYGBmcGBgIChhIGBgLnJlYWQoKWBgLXN1cHBvcnRpbmcgZmlsZS1saWtlIG9iamVjdCBjb250YWluaW5nCisgICAgYSBKU09OIGRvY3VtZW50KSB0byBhIFB5dGhvbiBvYmplY3QuCisKKyAgICBJZiB0aGUgY29udGVudHMgb2YgYGBmcGBgIGlzIGVuY29kZWQgd2l0aCBhbiBBU0NJSSBiYXNlZCBlbmNvZGluZyBvdGhlcgorICAgIHRoYW4gdXRmLTggKGUuZy4gbGF0aW4tMSksIHRoZW4gYW4gYXBwcm9wcmlhdGUgYGBlbmNvZGluZ2BgIG5hbWUgbXVzdAorICAgIGJlIHNwZWNpZmllZC4gIEVuY29kaW5ncyB0aGF0IGFyZSBub3QgQVNDSUkgYmFzZWQgKHN1Y2ggYXMgVUNTLTIpIGFyZQorICAgIG5vdCBhbGxvd2VkLCBhbmQgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aAorICAgIGBgY29kZWNzLmdldHJlYWRlcihmcCkoZW5jb2RpbmcpYGAsIG9yIHNpbXBseSBkZWNvZGVkIHRvIGEgYGB1bmljb2RlYGAKKyAgICBvYmplY3QgYW5kIHBhc3NlZCB0byBgYGxvYWRzKClgYAorCisgICAgYGBvYmplY3RfaG9va2BgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUKKyAgICByZXN1bHQgb2YgYW55IG9iamVjdCBsaXRlcmFsIGRlY29kZSAoYSBgYGRpY3RgYCkuICBUaGUgcmV0dXJuIHZhbHVlIG9mCisgICAgYGBvYmplY3RfaG9va2BgIHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBgYGRpY3RgYC4gIFRoaXMgZmVhdHVyZQorICAgIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjdXN0b20gZGVjb2RlcnMgKGUuZy4gSlNPTi1SUEMgY2xhc3MgaGludGluZykuCisgICAgCisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywgc3BlY2lmeSBpdCB3aXRoIHRoZSBgYGNsc2BgCisgICAga3dhcmcuCisgICAgIiIiCisgICAgaWYgY2xzIGlzIE5vbmU6CisgICAgICAgIGNscyA9IEpTT05EZWNvZGVyCisgICAgaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6CisgICAgICAgIGt3WydvYmplY3RfaG9vayddID0gb2JqZWN0X2hvb2sKKyAgICByZXR1cm4gY2xzKGVuY29kaW5nPWVuY29kaW5nLCAqKmt3KS5kZWNvZGUoZnAucmVhZCgpKQorCitkZWYgbG9hZHMocywgZW5jb2Rpbmc9Tm9uZSwgY2xzPU5vbmUsIG9iamVjdF9ob29rPU5vbmUsICoqa3cpOgorICAgICIiIgorICAgIERlc2VyaWFsaXplIGBgc2BgIChhIGBgc3RyYGAgb3IgYGB1bmljb2RlYGAgaW5zdGFuY2UgY29udGFpbmluZyBhIEpTT04KKyAgICBkb2N1bWVudCkgdG8gYSBQeXRob24gb2JqZWN0LgorCisgICAgSWYgYGBzYGAgaXMgYSBgYHN0cmBgIGluc3RhbmNlIGFuZCBpcyBlbmNvZGVkIHdpdGggYW4gQVNDSUkgYmFzZWQgZW5jb2RpbmcKKyAgICBvdGhlciB0aGFuIHV0Zi04IChlLmcuIGxhdGluLTEpIHRoZW4gYW4gYXBwcm9wcmlhdGUgYGBlbmNvZGluZ2BgIG5hbWUKKyAgICBtdXN0IGJlIHNwZWNpZmllZC4gIEVuY29kaW5ncyB0aGF0IGFyZSBub3QgQVNDSUkgYmFzZWQgKHN1Y2ggYXMgVUNTLTIpCisgICAgYXJlIG5vdCBhbGxvd2VkIGFuZCBzaG91bGQgYmUgZGVjb2RlZCB0byBgYHVuaWNvZGVgYCBmaXJzdC4KKworICAgIGBgb2JqZWN0X2hvb2tgYCBpcyBhbiBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlCisgICAgcmVzdWx0IG9mIGFueSBvYmplY3QgbGl0ZXJhbCBkZWNvZGUgKGEgYGBkaWN0YGApLiAgVGhlIHJldHVybiB2YWx1ZSBvZgorICAgIGBgb2JqZWN0X2hvb2tgYCB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgYGBkaWN0YGAuICBUaGlzIGZlYXR1cmUKKyAgICBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgY3VzdG9tIGRlY29kZXJzIChlLmcuIEpTT04tUlBDIGNsYXNzIGhpbnRpbmcpLgorCisgICAgVG8gdXNlIGEgY3VzdG9tIGBgSlNPTkRlY29kZXJgYCBzdWJjbGFzcywgc3BlY2lmeSBpdCB3aXRoIHRoZSBgYGNsc2BgCisgICAga3dhcmcuCisgICAgIiIiCisgICAgaWYgY2xzIGlzIE5vbmU6CisgICAgICAgIGNscyA9IEpTT05EZWNvZGVyCisgICAgaWYgb2JqZWN0X2hvb2sgaXMgbm90IE5vbmU6CisgICAgICAgIGt3WydvYmplY3RfaG9vayddID0gb2JqZWN0X2hvb2sKKyAgICByZXR1cm4gY2xzKGVuY29kaW5nPWVuY29kaW5nLCAqKmt3KS5kZWNvZGUocykKKworZGVmIHJlYWQocyk6CisgICAgIiIiCisgICAganNvbi1weSBBUEkgY29tcGF0aWJpbGl0eSBob29rLiAgVXNlIGxvYWRzKHMpIGluc3RlYWQuCisgICAgIiIiCisgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgd2FybmluZ3Mud2Fybigic2ltcGxlanNvbi5sb2FkcyhzKSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHJlYWQocykiLAorICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgcmV0dXJuIGxvYWRzKHMpCisKK2RlZiB3cml0ZShvYmopOgorICAgICIiIgorICAgIGpzb24tcHkgQVBJIGNvbXBhdGliaWxpdHkgaG9vay4gIFVzZSBkdW1wcyhzKSBpbnN0ZWFkLgorICAgICIiIgorICAgIGltcG9ydCB3YXJuaW5ncworICAgIHdhcm5pbmdzLndhcm4oInNpbXBsZWpzb24uZHVtcHMocykgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB3cml0ZShzKSIsCisgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKKyAgICByZXR1cm4gZHVtcHMob2JqKQorCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2RqYW5nby91dGlscy9zaW1wbGVqc29uL2RlY29kZXIucHkgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9kamFuZ28vdXRpbHMvc2ltcGxlanNvbi9kZWNvZGVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZjY4YTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9kamFuZ28vdXRpbHMvc2ltcGxlanNvbi9kZWNvZGVyLnB5CkBAIC0wLDAgKzEsMjczIEBACisiIiIKK0ltcGxlbWVudGF0aW9uIG9mIEpTT05EZWNvZGVyCisiIiIKK2ltcG9ydCByZQorCitmcm9tIGRqYW5nby51dGlscy5zaW1wbGVqc29uLnNjYW5uZXIgaW1wb3J0IFNjYW5uZXIsIHBhdHRlcm4KKworRkxBR1MgPSByZS5WRVJCT1NFIHwgcmUuTVVMVElMSU5FIHwgcmUuRE9UQUxMCisKK2RlZiBfZmxvYXRjb25zdGFudHMoKToKKyAgICBpbXBvcnQgc3RydWN0CisgICAgaW1wb3J0IHN5cworICAgIF9CWVRFUyA9ICc3RkY4MDAwMDAwMDAwMDAwN0ZGMDAwMDAwMDAwMDAwMCcuZGVjb2RlKCdoZXgnKQorICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6CisgICAgICAgIF9CWVRFUyA9IF9CWVRFU1s6OF1bOjotMV0gKyBfQllURVNbODpdWzo6LTFdCisgICAgbmFuLCBpbmYgPSBzdHJ1Y3QudW5wYWNrKCdkZCcsIF9CWVRFUykKKyAgICByZXR1cm4gbmFuLCBpbmYsIC1pbmYKKworTmFOLCBQb3NJbmYsIE5lZ0luZiA9IF9mbG9hdGNvbnN0YW50cygpCisKK2RlZiBsaW5lY29sKGRvYywgcG9zKToKKyAgICBsaW5lbm8gPSBkb2MuY291bnQoJ1xuJywgMCwgcG9zKSArIDEKKyAgICBpZiBsaW5lbm8gPT0gMToKKyAgICAgICAgY29sbm8gPSBwb3MKKyAgICBlbHNlOgorICAgICAgICBjb2xubyA9IHBvcyAtIGRvYy5yaW5kZXgoJ1xuJywgMCwgcG9zKQorICAgIHJldHVybiBsaW5lbm8sIGNvbG5vCisKK2RlZiBlcnJtc2cobXNnLCBkb2MsIHBvcywgZW5kPU5vbmUpOgorICAgIGxpbmVubywgY29sbm8gPSBsaW5lY29sKGRvYywgcG9zKQorICAgIGlmIGVuZCBpcyBOb25lOgorICAgICAgICByZXR1cm4gJyVzOiBsaW5lICVkIGNvbHVtbiAlZCAoY2hhciAlZCknICUgKG1zZywgbGluZW5vLCBjb2xubywgcG9zKQorICAgIGVuZGxpbmVubywgZW5kY29sbm8gPSBsaW5lY29sKGRvYywgZW5kKQorICAgIHJldHVybiAnJXM6IGxpbmUgJWQgY29sdW1uICVkIC0gbGluZSAlZCBjb2x1bW4gJWQgKGNoYXIgJWQgLSAlZCknICUgKAorICAgICAgICBtc2csIGxpbmVubywgY29sbm8sIGVuZGxpbmVubywgZW5kY29sbm8sIHBvcywgZW5kKQorCitfQ09OU1RBTlRTID0geworICAgICctSW5maW5pdHknOiBOZWdJbmYsCisgICAgJ0luZmluaXR5JzogUG9zSW5mLAorICAgICdOYU4nOiBOYU4sCisgICAgJ3RydWUnOiBUcnVlLAorICAgICdmYWxzZSc6IEZhbHNlLAorICAgICdudWxsJzogTm9uZSwKK30KKworZGVmIEpTT05Db25zdGFudChtYXRjaCwgY29udGV4dCwgYz1fQ09OU1RBTlRTKToKKyAgICByZXR1cm4gY1ttYXRjaC5ncm91cCgwKV0sIE5vbmUKK3BhdHRlcm4oJygtP0luZmluaXR5fE5hTnx0cnVlfGZhbHNlfG51bGwpJykoSlNPTkNvbnN0YW50KQorCitkZWYgSlNPTk51bWJlcihtYXRjaCwgY29udGV4dCk6CisgICAgbWF0Y2ggPSBKU09OTnVtYmVyLnJlZ2V4Lm1hdGNoKG1hdGNoLnN0cmluZywgKm1hdGNoLnNwYW4oKSkKKyAgICBpbnRlZ2VyLCBmcmFjLCBleHAgPSBtYXRjaC5ncm91cHMoKQorICAgIGlmIGZyYWMgb3IgZXhwOgorICAgICAgICByZXMgPSBmbG9hdChpbnRlZ2VyICsgKGZyYWMgb3IgJycpICsgKGV4cCBvciAnJykpCisgICAgZWxzZToKKyAgICAgICAgcmVzID0gaW50KGludGVnZXIpCisgICAgcmV0dXJuIHJlcywgTm9uZQorcGF0dGVybihyJygtPyg/OjB8WzEtOV1cZCopKShcLlxkKyk/KFtlRV1bLStdP1xkKyk/JykoSlNPTk51bWJlcikKKworU1RSSU5HQ0hVTksgPSByZS5jb21waWxlKHInKC4qPykoWyJcXF0pJywgRkxBR1MpCitCQUNLU0xBU0ggPSB7CisgICAgJyInOiB1JyInLCAnXFwnOiB1J1xcJywgJy8nOiB1Jy8nLAorICAgICdiJzogdSdcYicsICdmJzogdSdcZicsICduJzogdSdcbicsICdyJzogdSdccicsICd0JzogdSdcdCcsCit9CisKK0RFRkFVTFRfRU5DT0RJTkcgPSAidXRmLTgiCisKK2RlZiBzY2Fuc3RyaW5nKHMsIGVuZCwgZW5jb2Rpbmc9Tm9uZSwgX2I9QkFDS1NMQVNILCBfbT1TVFJJTkdDSFVOSy5tYXRjaCk6CisgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgZW5jb2RpbmcgPSBERUZBVUxUX0VOQ09ESU5HCisgICAgY2h1bmtzID0gW10KKyAgICBfYXBwZW5kID0gY2h1bmtzLmFwcGVuZAorICAgIGJlZ2luID0gZW5kIC0gMQorICAgIHdoaWxlIDE6CisgICAgICAgIGNodW5rID0gX20ocywgZW5kKQorICAgICAgICBpZiBjaHVuayBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICBlcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBiZWdpbikpCisgICAgICAgIGVuZCA9IGNodW5rLmVuZCgpCisgICAgICAgIGNvbnRlbnQsIHRlcm1pbmF0b3IgPSBjaHVuay5ncm91cHMoKQorICAgICAgICBpZiBjb250ZW50OgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY29udGVudCwgdW5pY29kZSk6CisgICAgICAgICAgICAgICAgY29udGVudCA9IHVuaWNvZGUoY29udGVudCwgZW5jb2RpbmcpCisgICAgICAgICAgICBfYXBwZW5kKGNvbnRlbnQpCisgICAgICAgIGlmIHRlcm1pbmF0b3IgPT0gJyInOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXNjID0gc1tlbmRdCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICBlcnJtc2coIlVudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQiLCBzLCBiZWdpbikpCisgICAgICAgIGlmIGVzYyAhPSAndSc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbSA9IF9iW2VzY10KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICBlcnJtc2coIkludmFsaWQgXFxlc2NhcGU6ICVyIiAlIChlc2MsKSwgcywgZW5kKSkKKyAgICAgICAgICAgIGVuZCArPSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlc2MgPSBzW2VuZCArIDE6ZW5kICsgNV0KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtID0gdW5pY2hyKGludChlc2MsIDE2KSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZXNjKSAhPSA0IG9yIG5vdCBlc2MuaXNhbG51bSgpOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiSW52YWxpZCBcXHVYWFhYIGVzY2FwZSIsIHMsIGVuZCkpCisgICAgICAgICAgICBlbmQgKz0gNQorICAgICAgICBfYXBwZW5kKG0pCisgICAgcmV0dXJuIHUnJy5qb2luKGNodW5rcyksIGVuZAorCitkZWYgSlNPTlN0cmluZyhtYXRjaCwgY29udGV4dCk6CisgICAgZW5jb2RpbmcgPSBnZXRhdHRyKGNvbnRleHQsICdlbmNvZGluZycsIE5vbmUpCisgICAgcmV0dXJuIHNjYW5zdHJpbmcobWF0Y2guc3RyaW5nLCBtYXRjaC5lbmQoKSwgZW5jb2RpbmcpCitwYXR0ZXJuKHInIicpKEpTT05TdHJpbmcpCisKK1dISVRFU1BBQ0UgPSByZS5jb21waWxlKHInXHMqJywgRkxBR1MpCisKK2RlZiBKU09OT2JqZWN0KG1hdGNoLCBjb250ZXh0LCBfdz1XSElURVNQQUNFLm1hdGNoKToKKyAgICBwYWlycyA9IHt9CisgICAgcyA9IG1hdGNoLnN0cmluZworICAgIGVuZCA9IF93KHMsIG1hdGNoLmVuZCgpKS5lbmQoKQorICAgIG5leHRjaGFyID0gc1tlbmQ6ZW5kICsgMV0KKyAgICAjIHRyaXZpYWwgZW1wdHkgb2JqZWN0CisgICAgaWYgbmV4dGNoYXIgPT0gJ30nOgorICAgICAgICByZXR1cm4gcGFpcnMsIGVuZCArIDEKKyAgICBpZiBuZXh0Y2hhciAhPSAnIic6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSIsIHMsIGVuZCkpCisgICAgZW5kICs9IDEKKyAgICBlbmNvZGluZyA9IGdldGF0dHIoY29udGV4dCwgJ2VuY29kaW5nJywgTm9uZSkKKyAgICBpdGVyc2NhbiA9IEpTT05TY2FubmVyLml0ZXJzY2FuCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAga2V5LCBlbmQgPSBzY2Fuc3RyaW5nKHMsIGVuZCwgZW5jb2RpbmcpCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgaWYgc1tlbmQ6ZW5kICsgMV0gIT0gJzonOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyA6IGRlbGltaXRlciIsIHMsIGVuZCkpCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCArIDEpLmVuZCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBpdGVyc2NhbihzLCBpZHg9ZW5kLCBjb250ZXh0PWNvbnRleHQpLm5leHQoKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgcGFpcnNba2V5XSA9IHZhbHVlCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICAgICBlbmQgKz0gMQorICAgICAgICBpZiBuZXh0Y2hhciA9PSAnfSc6CisgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBuZXh0Y2hhciAhPSAnLCc6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICwgZGVsaW1pdGVyIiwgcywgZW5kIC0gMSkpCisgICAgICAgIGVuZCA9IF93KHMsIGVuZCkuZW5kKCkKKyAgICAgICAgbmV4dGNoYXIgPSBzW2VuZDplbmQgKyAxXQorICAgICAgICBlbmQgKz0gMQorICAgICAgICBpZiBuZXh0Y2hhciAhPSAnIic6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUiLCBzLCBlbmQgLSAxKSkKKyAgICBvYmplY3RfaG9vayA9IGdldGF0dHIoY29udGV4dCwgJ29iamVjdF9ob29rJywgTm9uZSkKKyAgICBpZiBvYmplY3RfaG9vayBpcyBub3QgTm9uZToKKyAgICAgICAgcGFpcnMgPSBvYmplY3RfaG9vayhwYWlycykKKyAgICByZXR1cm4gcGFpcnMsIGVuZAorcGF0dGVybihyJ3snKShKU09OT2JqZWN0KQorICAgICAgICAgICAgCitkZWYgSlNPTkFycmF5KG1hdGNoLCBjb250ZXh0LCBfdz1XSElURVNQQUNFLm1hdGNoKToKKyAgICB2YWx1ZXMgPSBbXQorICAgIHMgPSBtYXRjaC5zdHJpbmcKKyAgICBlbmQgPSBfdyhzLCBtYXRjaC5lbmQoKSkuZW5kKCkKKyAgICAjIGxvb2stYWhlYWQgZm9yIHRyaXZpYWwgZW1wdHkgYXJyYXkKKyAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgaWYgbmV4dGNoYXIgPT0gJ10nOgorICAgICAgICByZXR1cm4gdmFsdWVzLCBlbmQgKyAxCisgICAgaXRlcnNjYW4gPSBKU09OU2Nhbm5lci5pdGVyc2NhbgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBpdGVyc2NhbihzLCBpZHg9ZW5kLCBjb250ZXh0PWNvbnRleHQpLm5leHQoKQorICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgdmFsdWVzLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgZW5kID0gX3cocywgZW5kKS5lbmQoKQorICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCisgICAgICAgIGVuZCArPSAxCisgICAgICAgIGlmIG5leHRjaGFyID09ICddJzoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5leHRjaGFyICE9ICcsJzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgLCBkZWxpbWl0ZXIiLCBzLCBlbmQpKQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAgcmV0dXJuIHZhbHVlcywgZW5kCitwYXR0ZXJuKHInXFsnKShKU09OQXJyYXkpCisgCitBTllUSElORyA9IFsKKyAgICBKU09OT2JqZWN0LAorICAgIEpTT05BcnJheSwKKyAgICBKU09OU3RyaW5nLAorICAgIEpTT05Db25zdGFudCwKKyAgICBKU09OTnVtYmVyLAorXQorCitKU09OU2Nhbm5lciA9IFNjYW5uZXIoQU5ZVEhJTkcpCisKK2NsYXNzIEpTT05EZWNvZGVyKG9iamVjdCk6CisgICAgIiIiCisgICAgU2ltcGxlIEpTT04gPGh0dHA6Ly9qc29uLm9yZz4gZGVjb2RlcgorCisgICAgUGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0cmFuc2xhdGlvbnMgaW4gZGVjb2Rpbmc6CisgICAgCisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgSlNPTiAgICAgICAgICB8IFB5dGhvbiAgICAgICAgICAgIHwKKyAgICArPT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT0rCisgICAgfCBvYmplY3QgICAgICAgIHwgZGljdCAgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IGFycmF5ICAgICAgICAgfCBsaXN0ICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgc3RyaW5nICAgICAgICB8IHVuaWNvZGUgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBudW1iZXIgKGludCkgIHwgaW50LCBsb25nICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IG51bWJlciAocmVhbCkgfCBmbG9hdCAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIHwgdHJ1ZSAgICAgICAgICB8IFRydWUgICAgICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgfCBmYWxzZSAgICAgICAgIHwgRmFsc2UgICAgICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IG51bGwgICAgICAgICAgfCBOb25lICAgICAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tKworCisgICAgSXQgYWxzbyB1bmRlcnN0YW5kcyBgYE5hTmBgLCBgYEluZmluaXR5YGAsIGFuZCBgYC1JbmZpbml0eWBgIGFzCisgICAgdGhlaXIgY29ycmVzcG9uZGluZyBgYGZsb2F0YGAgdmFsdWVzLCB3aGljaCBpcyBvdXRzaWRlIHRoZSBKU09OIHNwZWMuCisgICAgIiIiCisKKyAgICBfc2Nhbm5lciA9IFNjYW5uZXIoQU5ZVEhJTkcpCisgICAgX19hbGxfXyA9IFsnX19pbml0X18nLCAnZGVjb2RlJywgJ3Jhd19kZWNvZGUnXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVuY29kaW5nPU5vbmUsIG9iamVjdF9ob29rPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgYGBlbmNvZGluZ2BgIGRldGVybWluZXMgdGhlIGVuY29kaW5nIHVzZWQgdG8gaW50ZXJwcmV0IGFueSBgYHN0cmBgCisgICAgICAgIG9iamVjdHMgZGVjb2RlZCBieSB0aGlzIGluc3RhbmNlICh1dGYtOCBieSBkZWZhdWx0KS4gIEl0IGhhcyBubworICAgICAgICBlZmZlY3Qgd2hlbiBkZWNvZGluZyBgYHVuaWNvZGVgYCBvYmplY3RzLgorICAgICAgICAKKyAgICAgICAgTm90ZSB0aGF0IGN1cnJlbnRseSBvbmx5IGVuY29kaW5ncyB0aGF0IGFyZSBhIHN1cGVyc2V0IG9mIEFTQ0lJIHdvcmssCisgICAgICAgIHN0cmluZ3Mgb2Ygb3RoZXIgZW5jb2RpbmdzIHNob3VsZCBiZSBwYXNzZWQgaW4gYXMgYGB1bmljb2RlYGAuCisKKyAgICAgICAgYGBvYmplY3RfaG9va2BgLCBpZiBzcGVjaWZpZWQsIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHJlc3VsdAorICAgICAgICBvZiBldmVyeSBKU09OIG9iamVjdCBkZWNvZGVkIGFuZCBpdHMgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdXNlZCBpbgorICAgICAgICBwbGFjZSBvZiB0aGUgZ2l2ZW4gYGBkaWN0YGAuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tCisgICAgICAgIGRlc2VyaWFsaXphdGlvbnMgKGUuZy4gdG8gc3VwcG9ydCBKU09OLVJQQyBjbGFzcyBoaW50aW5nKS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZworICAgICAgICBzZWxmLm9iamVjdF9ob29rID0gb2JqZWN0X2hvb2sKKworICAgIGRlZiBkZWNvZGUoc2VsZiwgcywgX3c9V0hJVEVTUEFDRS5tYXRjaCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiBgYHNgYCAoYSBgYHN0cmBgIG9yIGBgdW5pY29kZWBgCisgICAgICAgIGluc3RhbmNlIGNvbnRhaW5pbmcgYSBKU09OIGRvY3VtZW50KQorICAgICAgICAiIiIKKyAgICAgICAgb2JqLCBlbmQgPSBzZWxmLnJhd19kZWNvZGUocywgaWR4PV93KHMsIDApLmVuZCgpKQorICAgICAgICBlbmQgPSBfdyhzLCBlbmQpLmVuZCgpCisgICAgICAgIGlmIGVuZCAhPSBsZW4ocyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXh0cmEgZGF0YSIsIHMsIGVuZCwgbGVuKHMpKSkKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHJhd19kZWNvZGUoc2VsZiwgcywgKiprdyk6CisgICAgICAgICIiIgorICAgICAgICBEZWNvZGUgYSBKU09OIGRvY3VtZW50IGZyb20gYGBzYGAgKGEgYGBzdHJgYCBvciBgYHVuaWNvZGVgYCBiZWdpbm5pbmcKKyAgICAgICAgd2l0aCBhIEpTT04gZG9jdW1lbnQpIGFuZCByZXR1cm4gYSAyLXR1cGxlIG9mIHRoZSBQeXRob24KKyAgICAgICAgcmVwcmVzZW50YXRpb24gYW5kIHRoZSBpbmRleCBpbiBgYHNgYCB3aGVyZSB0aGUgZG9jdW1lbnQgZW5kZWQuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBkZWNvZGUgYSBKU09OIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgdGhhdCBtYXkKKyAgICAgICAgaGF2ZSBleHRyYW5lb3VzIGRhdGEgYXQgdGhlIGVuZC4KKyAgICAgICAgIiIiCisgICAgICAgIGt3LnNldGRlZmF1bHQoJ2NvbnRleHQnLCBzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmosIGVuZCA9IHNlbGYuX3NjYW5uZXIuaXRlcnNjYW4ocywgKiprdykubmV4dCgpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gSlNPTiBvYmplY3QgY291bGQgYmUgZGVjb2RlZCIpCisgICAgICAgIHJldHVybiBvYmosIGVuZAorCitfX2FsbF9fID0gWydKU09ORGVjb2RlciddCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9kamFuZ28vdXRpbHMvc2ltcGxlanNvbi9lbmNvZGVyLnB5IGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvZGphbmdvL3V0aWxzL3NpbXBsZWpzb24vZW5jb2Rlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODNjNjg3Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvZGphbmdvL3V0aWxzL3NpbXBsZWpzb24vZW5jb2Rlci5weQpAQCAtMCwwICsxLDMzMSBAQAorIiIiCitJbXBsZW1lbnRhdGlvbiBvZiBKU09ORW5jb2RlcgorIiIiCitpbXBvcnQgcmUKKworRVNDQVBFID0gcmUuY29tcGlsZShyJ1tceDAwLVx4MTlcXCJcYlxmXG5cclx0XScpCitFU0NBUEVfQVNDSUkgPSByZS5jb21waWxlKHInKFtcXCIvXXxbXlwgLX5dKScpCitFU0NBUEVfRENUID0geworICAgICMgZXNjYXBlIGFsbCBmb3J3YXJkIHNsYXNoZXMgdG8gcHJldmVudCA8L3NjcmlwdD4gYXR0YWNrCisgICAgJy8nOiAnXFwvJywKKyAgICAnXFwnOiAnXFxcXCcsCisgICAgJyInOiAnXFwiJywKKyAgICAnXGInOiAnXFxiJywKKyAgICAnXGYnOiAnXFxmJywKKyAgICAnXG4nOiAnXFxuJywKKyAgICAnXHInOiAnXFxyJywKKyAgICAnXHQnOiAnXFx0JywKK30KK2ZvciBpIGluIHJhbmdlKDB4MjApOgorICAgIEVTQ0FQRV9EQ1Quc2V0ZGVmYXVsdChjaHIoaSksICdcXHUlMDR4JyAlIChpLCkpCisKKyMgYXNzdW1lIHRoaXMgcHJvZHVjZXMgYW4gaW5maW5pdHkgb24gYWxsIG1hY2hpbmVzIChwcm9iYWJseSBub3QgZ3VhcmFudGVlZCkKK0lORklOSVRZID0gZmxvYXQoJzFlNjY2NjYnKQorCitkZWYgZmxvYXRzdHIobywgYWxsb3dfbmFuPVRydWUpOgorICAgICMgQ2hlY2sgZm9yIHNwZWNpYWxzLiAgTm90ZSB0aGF0IHRoaXMgdHlwZSBvZiB0ZXN0IGlzIHByb2Nlc3Nvci0gYW5kL29yCisgICAgIyBwbGF0Zm9ybS1zcGVjaWZpYywgc28gZG8gdGVzdHMgd2hpY2ggZG9uJ3QgZGVwZW5kIG9uIHRoZSBpbnRlcm5hbHMuCisKKyAgICBpZiBvICE9IG86CisgICAgICAgIHRleHQgPSAnTmFOJworICAgIGVsaWYgbyA9PSBJTkZJTklUWToKKyAgICAgICAgdGV4dCA9ICdJbmZpbml0eScKKyAgICBlbGlmIG8gPT0gLUlORklOSVRZOgorICAgICAgICB0ZXh0ID0gJy1JbmZpbml0eScKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gc3RyKG8pCisKKyAgICBpZiBub3QgYWxsb3dfbmFuOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQ6ICVyIgorICAgICAgICAgICAgJSAobywpKQorCisgICAgcmV0dXJuIHRleHQKKworCitkZWYgZW5jb2RlX2Jhc2VzdHJpbmcocyk6CisgICAgIiIiCisgICAgUmV0dXJuIGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5dGhvbiBzdHJpbmcKKyAgICAiIiIKKyAgICBkZWYgcmVwbGFjZShtYXRjaCk6CisgICAgICAgIHJldHVybiBFU0NBUEVfRENUW21hdGNoLmdyb3VwKDApXQorICAgIHJldHVybiAnIicgKyBFU0NBUEUuc3ViKHJlcGxhY2UsIHMpICsgJyInCisKK2RlZiBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaShzKToKKyAgICBkZWYgcmVwbGFjZShtYXRjaCk6CisgICAgICAgIHMgPSBtYXRjaC5ncm91cCgwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gRVNDQVBFX0RDVFtzXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gJ1xcdSUwNHgnICUgKG9yZChzKSwpCisgICAgcmV0dXJuICciJyArIHN0cihFU0NBUEVfQVNDSUkuc3ViKHJlcGxhY2UsIHMpKSArICciJworICAgICAgICAKKworY2xhc3MgSlNPTkVuY29kZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBFeHRlbnNpYmxlIEpTT04gPGh0dHA6Ly9qc29uLm9yZz4gZW5jb2RlciBmb3IgUHl0aG9uIGRhdGEgc3RydWN0dXJlcy4KKworICAgIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgb2JqZWN0cyBhbmQgdHlwZXMgYnkgZGVmYXVsdDoKKyAgICAKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgfCBQeXRob24gICAgICAgICAgICB8IEpTT04gICAgICAgICAgfAorICAgICs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKKyAgICB8IGRpY3QgICAgICAgICAgICAgIHwgb2JqZWN0ICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgIHwgbGlzdCwgdHVwbGUgICAgICAgfCBhcnJheSAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgfCBzdHIsIHVuaWNvZGUgICAgICB8IHN0cmluZyAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IGludCwgbG9uZywgZmxvYXQgIHwgbnVtYmVyICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworICAgIHwgVHJ1ZSAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKKyAgICArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rCisgICAgfCBGYWxzZSAgICAgICAgICAgICB8IGZhbHNlICAgICAgICAgfAorICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICB8IE5vbmUgICAgICAgICAgICAgIHwgbnVsbCAgICAgICAgICB8CisgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKworCisgICAgVG8gZXh0ZW5kIHRoaXMgdG8gcmVjb2duaXplIG90aGVyIG9iamVjdHMsIHN1YmNsYXNzIGFuZCBpbXBsZW1lbnQgYQorICAgIGBgLmRlZmF1bHQoKWBgIG1ldGhvZCB3aXRoIGFub3RoZXIgbWV0aG9kIHRoYXQgcmV0dXJucyBhIHNlcmlhbGl6YWJsZQorICAgIG9iamVjdCBmb3IgYGBvYGAgaWYgcG9zc2libGUsIG90aGVyd2lzZSBpdCBzaG91bGQgY2FsbCB0aGUgc3VwZXJjbGFzcworICAgIGltcGxlbWVudGF0aW9uICh0byByYWlzZSBgYFR5cGVFcnJvcmBgKS4KKyAgICAiIiIKKyAgICBfX2FsbF9fID0gWydfX2luaXRfXycsICdkZWZhdWx0JywgJ2VuY29kZScsICdpdGVyZW5jb2RlJ10KKyAgICBpdGVtX3NlcGFyYXRvciA9ICcsICcKKyAgICBrZXlfc2VwYXJhdG9yID0gJzogJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBza2lwa2V5cz1GYWxzZSwgZW5zdXJlX2FzY2lpPVRydWUsCisgICAgICAgICAgICBjaGVja19jaXJjdWxhcj1UcnVlLCBhbGxvd19uYW49VHJ1ZSwgc29ydF9rZXlzPUZhbHNlLAorICAgICAgICAgICAgaW5kZW50PU5vbmUsIHNlcGFyYXRvcnM9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBDb25zdHJ1Y3RvciBmb3IgSlNPTkVuY29kZXIsIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuCisKKyAgICAgICAgSWYgc2tpcGtleXMgaXMgRmFsc2UsIHRoZW4gaXQgaXMgYSBUeXBlRXJyb3IgdG8gYXR0ZW1wdAorICAgICAgICBlbmNvZGluZyBvZiBrZXlzIHRoYXQgYXJlIG5vdCBzdHIsIGludCwgbG9uZywgZmxvYXQgb3IgTm9uZS4gIElmCisgICAgICAgIHNraXBrZXlzIGlzIFRydWUsIHN1Y2ggaXRlbXMgYXJlIHNpbXBseSBza2lwcGVkLgorCisgICAgICAgIElmIGVuc3VyZV9hc2NpaSBpcyBUcnVlLCB0aGUgb3V0cHV0IGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RyCisgICAgICAgIG9iamVjdHMgd2l0aCBhbGwgaW5jb21pbmcgdW5pY29kZSBjaGFyYWN0ZXJzIGVzY2FwZWQuICBJZgorICAgICAgICBlbnN1cmVfYXNjaWkgaXMgZmFsc2UsIHRoZSBvdXRwdXQgd2lsbCBiZSB1bmljb2RlIG9iamVjdC4KKworICAgICAgICBJZiBjaGVja19jaXJjdWxhciBpcyBUcnVlLCB0aGVuIGxpc3RzLCBkaWN0cywgYW5kIGN1c3RvbSBlbmNvZGVkCisgICAgICAgIG9iamVjdHMgd2lsbCBiZSBjaGVja2VkIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGR1cmluZyBlbmNvZGluZyB0bworICAgICAgICBwcmV2ZW50IGFuIGluZmluaXRlIHJlY3Vyc2lvbiAod2hpY2ggd291bGQgY2F1c2UgYW4gT3ZlcmZsb3dFcnJvcikuCisgICAgICAgIE90aGVyd2lzZSwgbm8gc3VjaCBjaGVjayB0YWtlcyBwbGFjZS4KKworICAgICAgICBJZiBhbGxvd19uYW4gaXMgVHJ1ZSwgdGhlbiBOYU4sIEluZmluaXR5LCBhbmQgLUluZmluaXR5IHdpbGwgYmUKKyAgICAgICAgZW5jb2RlZCBhcyBzdWNoLiAgVGhpcyBiZWhhdmlvciBpcyBub3QgSlNPTiBzcGVjaWZpY2F0aW9uIGNvbXBsaWFudCwKKyAgICAgICAgYnV0IGlzIGNvbnNpc3RlbnQgd2l0aCBtb3N0IEphdmFTY3JpcHQgYmFzZWQgZW5jb2RlcnMgYW5kIGRlY29kZXJzLgorICAgICAgICBPdGhlcndpc2UsIGl0IHdpbGwgYmUgYSBWYWx1ZUVycm9yIHRvIGVuY29kZSBzdWNoIGZsb2F0cy4KKworICAgICAgICBJZiBzb3J0X2tleXMgaXMgVHJ1ZSwgdGhlbiB0aGUgb3V0cHV0IG9mIGRpY3Rpb25hcmllcyB3aWxsIGJlCisgICAgICAgIHNvcnRlZCBieSBrZXk7IHRoaXMgaXMgdXNlZnVsIGZvciByZWdyZXNzaW9uIHRlc3RzIHRvIGVuc3VyZQorICAgICAgICB0aGF0IEpTT04gc2VyaWFsaXphdGlvbnMgY2FuIGJlIGNvbXBhcmVkIG9uIGEgZGF5LXRvLWRheSBiYXNpcy4KKworICAgICAgICBJZiBpbmRlbnQgaXMgYSBub24tbmVnYXRpdmUgaW50ZWdlciwgdGhlbiBKU09OIGFycmF5CisgICAgICAgIGVsZW1lbnRzIGFuZCBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdAorICAgICAgICBpbmRlbnQgbGV2ZWwuICBBbiBpbmRlbnQgbGV2ZWwgb2YgMCB3aWxsIG9ubHkgaW5zZXJ0IG5ld2xpbmVzLgorICAgICAgICBOb25lIGlzIHRoZSBtb3N0IGNvbXBhY3QgcmVwcmVzZW50YXRpb24uCisKKyAgICAgICAgSWYgc3BlY2lmaWVkLCBzZXBhcmF0b3JzIHNob3VsZCBiZSBhIChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcikKKyAgICAgICAgdHVwbGUuIFRoZSBkZWZhdWx0IGlzICgnLCAnLCAnOiAnKS4gVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgorICAgICAgICByZXByZXNlbnRhdGlvbiB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKyAgICAgICAgIiIiCisKKyAgICAgICAgc2VsZi5za2lwa2V5cyA9IHNraXBrZXlzCisgICAgICAgIHNlbGYuZW5zdXJlX2FzY2lpID0gZW5zdXJlX2FzY2lpCisgICAgICAgIHNlbGYuY2hlY2tfY2lyY3VsYXIgPSBjaGVja19jaXJjdWxhcgorICAgICAgICBzZWxmLmFsbG93X25hbiA9IGFsbG93X25hbgorICAgICAgICBzZWxmLnNvcnRfa2V5cyA9IHNvcnRfa2V5cworICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAorICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsID0gMAorICAgICAgICBpZiBzZXBhcmF0b3JzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5rZXlfc2VwYXJhdG9yID0gc2VwYXJhdG9ycworCisgICAgZGVmIF9uZXdsaW5lX2luZGVudChzZWxmKToKKyAgICAgICAgcmV0dXJuICdcbicgKyAoJyAnICogKHNlbGYuaW5kZW50ICogc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCkpCisKKyAgICBkZWYgX2l0ZXJlbmNvZGVfbGlzdChzZWxmLCBsc3QsIG1hcmtlcnM9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBsc3Q6CisgICAgICAgICAgICB5aWVsZCAnW10nCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIG1hcmtlcmlkID0gaWQobHN0KQorICAgICAgICAgICAgaWYgbWFya2VyaWQgaW4gbWFya2VyczoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQiKQorICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBsc3QKKyAgICAgICAgeWllbGQgJ1snCisgICAgICAgIGlmIHNlbGYuaW5kZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jdXJyZW50X2luZGVudF9sZXZlbCArPSAxCisgICAgICAgICAgICBuZXdsaW5lX2luZGVudCA9IHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgICAgIHNlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAorICAgICAgICAgICAgeWllbGQgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQorICAgICAgICAgICAgc2VwYXJhdG9yID0gc2VsZi5pdGVtX3NlcGFyYXRvcgorICAgICAgICBmaXJzdCA9IFRydWUKKyAgICAgICAgZm9yIHZhbHVlIGluIGxzdDoKKyAgICAgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgc2VwYXJhdG9yCisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZSh2YWx1ZSwgbWFya2Vycyk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgeWllbGQgJ10nCisgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRlZiBfaXRlcmVuY29kZV9kaWN0KHNlbGYsIGRjdCwgbWFya2Vycz1Ob25lKToKKyAgICAgICAgaWYgbm90IGRjdDoKKyAgICAgICAgICAgIHlpZWxkICd7fScKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbWFya2VyaWQgPSBpZChkY3QpCisgICAgICAgICAgICBpZiBtYXJrZXJpZCBpbiBtYXJrZXJzOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IGRjdAorICAgICAgICB5aWVsZCAneycKKyAgICAgICAga2V5X3NlcGFyYXRvciA9IHNlbGYua2V5X3NlcGFyYXRvcgorICAgICAgICBpZiBzZWxmLmluZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9pbmRlbnRfbGV2ZWwgKz0gMQorICAgICAgICAgICAgbmV3bGluZV9pbmRlbnQgPSBzZWxmLl9uZXdsaW5lX2luZGVudCgpCisgICAgICAgICAgICBpdGVtX3NlcGFyYXRvciA9IHNlbGYuaXRlbV9zZXBhcmF0b3IgKyBuZXdsaW5lX2luZGVudAorICAgICAgICAgICAgeWllbGQgbmV3bGluZV9pbmRlbnQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5ld2xpbmVfaW5kZW50ID0gTm9uZQorICAgICAgICAgICAgaXRlbV9zZXBhcmF0b3IgPSBzZWxmLml0ZW1fc2VwYXJhdG9yCisgICAgICAgIGZpcnN0ID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLmVuc3VyZV9hc2NpaToKKyAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZ19hc2NpaQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nCisgICAgICAgIGFsbG93X25hbiA9IHNlbGYuYWxsb3dfbmFuCisgICAgICAgIGlmIHNlbGYuc29ydF9rZXlzOgorICAgICAgICAgICAga2V5cyA9IGRjdC5rZXlzKCkKKyAgICAgICAgICAgIGtleXMuc29ydCgpCisgICAgICAgICAgICBpdGVtcyA9IFsoaywgZGN0W2tdKSBmb3IgayBpbiBrZXlzXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaXRlbXMgPSBkY3QuaXRlcml0ZW1zKCkKKyAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlbXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgYmFzZXN0cmluZyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdlYWtseSB0eXBlZCBmb3IgdGhlc2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvCisgICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgorICAgICAgICAgICAgICAgIGtleSA9IGZsb2F0c3RyKGtleSwgYWxsb3dfbmFuKQorICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgKGludCwgbG9uZykpOgorICAgICAgICAgICAgICAgIGtleSA9IHN0cihrZXkpCisgICAgICAgICAgICBlbGlmIGtleSBpcyBUcnVlOgorICAgICAgICAgICAgICAgIGtleSA9ICd0cnVlJworICAgICAgICAgICAgZWxpZiBrZXkgaXMgRmFsc2U6CisgICAgICAgICAgICAgICAga2V5ID0gJ2ZhbHNlJworICAgICAgICAgICAgZWxpZiBrZXkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBrZXkgPSAnbnVsbCcKKyAgICAgICAgICAgIGVsaWYgc2VsZi5za2lwa2V5czoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleSAlciBpcyBub3QgYSBzdHJpbmciICUgKGtleSwpKQorICAgICAgICAgICAgaWYgZmlyc3Q6CisgICAgICAgICAgICAgICAgZmlyc3QgPSBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB5aWVsZCBpdGVtX3NlcGFyYXRvcgorICAgICAgICAgICAgeWllbGQgZW5jb2RlcihrZXkpCisgICAgICAgICAgICB5aWVsZCBrZXlfc2VwYXJhdG9yCisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZSh2YWx1ZSwgbWFya2Vycyk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfaW5kZW50X2xldmVsIC09IDEKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX25ld2xpbmVfaW5kZW50KCkKKyAgICAgICAgeWllbGQgJ30nCisgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KKworICAgIGRlZiBfaXRlcmVuY29kZShzZWxmLCBvLCBtYXJrZXJzPU5vbmUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG8sIGJhc2VzdHJpbmcpOgorICAgICAgICAgICAgaWYgc2VsZi5lbnN1cmVfYXNjaWk6CisgICAgICAgICAgICAgICAgZW5jb2RlciA9IGVuY29kZV9iYXNlc3RyaW5nX2FzY2lpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVuY29kZXIgPSBlbmNvZGVfYmFzZXN0cmluZworICAgICAgICAgICAgeWllbGQgZW5jb2RlcihvKQorICAgICAgICBlbGlmIG8gaXMgTm9uZToKKyAgICAgICAgICAgIHlpZWxkICdudWxsJworICAgICAgICBlbGlmIG8gaXMgVHJ1ZToKKyAgICAgICAgICAgIHlpZWxkICd0cnVlJworICAgICAgICBlbGlmIG8gaXMgRmFsc2U6CisgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCAoaW50LCBsb25nKSk6CisgICAgICAgICAgICB5aWVsZCBzdHIobykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGZsb2F0KToKKyAgICAgICAgICAgIHlpZWxkIGZsb2F0c3RyKG8sIHNlbGYuYWxsb3dfbmFuKQorICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZV9saXN0KG8sIG1hcmtlcnMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvLCBkaWN0KToKKyAgICAgICAgICAgIGZvciBjaHVuayBpbiBzZWxmLl9pdGVyZW5jb2RlX2RpY3QobywgbWFya2Vycyk6CisgICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG1hcmtlcnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbWFya2VyaWQgPSBpZChvKQorICAgICAgICAgICAgICAgIGlmIG1hcmtlcmlkIGluIG1hcmtlcnM6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCIpCisgICAgICAgICAgICAgICAgbWFya2Vyc1ttYXJrZXJpZF0gPSBvCisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc2VsZi5faXRlcmVuY29kZV9kZWZhdWx0KG8sIG1hcmtlcnMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICBpZiBtYXJrZXJzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGRlbCBtYXJrZXJzW21hcmtlcmlkXQorCisgICAgZGVmIF9pdGVyZW5jb2RlX2RlZmF1bHQoc2VsZiwgbywgbWFya2Vycz1Ob25lKToKKyAgICAgICAgbmV3b2JqID0gc2VsZi5kZWZhdWx0KG8pCisgICAgICAgIHJldHVybiBzZWxmLl9pdGVyZW5jb2RlKG5ld29iaiwgbWFya2VycykKKworICAgIGRlZiBkZWZhdWx0KHNlbGYsIG8pOgorICAgICAgICAiIiIKKyAgICAgICAgSW1wbGVtZW50IHRoaXMgbWV0aG9kIGluIGEgc3ViY2xhc3Mgc3VjaCB0aGF0IGl0IHJldHVybnMKKyAgICAgICAgYSBzZXJpYWxpemFibGUgb2JqZWN0IGZvciBgYG9gYCwgb3IgY2FsbHMgdGhlIGJhc2UgaW1wbGVtZW50YXRpb24KKyAgICAgICAgKHRvIHJhaXNlIGEgYGBUeXBlRXJyb3JgYCkuCisKKyAgICAgICAgRm9yIGV4YW1wbGUsIHRvIHN1cHBvcnQgYXJiaXRyYXJ5IGl0ZXJhdG9ycywgeW91IGNvdWxkCisgICAgICAgIGltcGxlbWVudCBkZWZhdWx0IGxpa2UgdGhpczo6CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGRlZiBkZWZhdWx0KHNlbGYsIG8pOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgaXRlcmFibGUgPSBpdGVyKG8pCisgICAgICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KGl0ZXJhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBKU09ORW5jb2Rlci5kZWZhdWx0KHNlbGYsIG8pCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoIiVyIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZSIgJSAobywpKQorCisgICAgZGVmIGVuY29kZShzZWxmLCBvKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybiBhIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgUHl0aG9uIGRhdGEgc3RydWN0dXJlLgorCisgICAgICAgID4+PiBKU09ORW5jb2RlcigpLmVuY29kZSh7ImZvbyI6IFsiYmFyIiwgImJheiJdfSkKKyAgICAgICAgJ3siZm9vIjpbImJhciIsICJiYXoiXX0nCisgICAgICAgICIiIgorICAgICAgICAjIFRoaXMgZG9lc24ndCBwYXNzIHRoZSBpdGVyYXRvciBkaXJlY3RseSB0byAnJy5qb2luKCkgYmVjYXVzZSBpdAorICAgICAgICAjIHN1Y2tzIGF0IHJlcG9ydGluZyBleGNlcHRpb25zLiAgSXQncyBnb2luZyB0byBkbyB0aGlzIGludGVybmFsbHkKKyAgICAgICAgIyBhbnl3YXkgYmVjYXVzZSBpdCB1c2VzIFB5U2VxdWVuY2VfRmFzdCBvciBzaW1pbGFyLgorICAgICAgICBjaHVua3MgPSBsaXN0KHNlbGYuaXRlcmVuY29kZShvKSkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oY2h1bmtzKQorCisgICAgZGVmIGl0ZXJlbmNvZGUoc2VsZiwgbyk6CisgICAgICAgICIiIgorICAgICAgICBFbmNvZGUgdGhlIGdpdmVuIG9iamVjdCBhbmQgeWllbGQgZWFjaCBzdHJpbmcKKyAgICAgICAgcmVwcmVzZW50YXRpb24gYXMgYXZhaWxhYmxlLgorICAgICAgICAKKyAgICAgICAgRm9yIGV4YW1wbGU6OgorICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgY2h1bmsgaW4gSlNPTkVuY29kZXIoKS5pdGVyZW5jb2RlKGJpZ29iamVjdCk6CisgICAgICAgICAgICAgICAgbXlzb2NrZXQud3JpdGUoY2h1bmspCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmNoZWNrX2NpcmN1bGFyOgorICAgICAgICAgICAgbWFya2VycyA9IHt9CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXJrZXJzID0gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5faXRlcmVuY29kZShvLCBtYXJrZXJzKQorCitfX2FsbF9fID0gWydKU09ORW5jb2RlciddCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9kamFuZ28vdXRpbHMvc2ltcGxlanNvbi9qc29uZmlsdGVyLnB5IGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvZGphbmdvL3V0aWxzL3NpbXBsZWpzb24vanNvbmZpbHRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDJhZTIwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvZGphbmdvL3V0aWxzL3NpbXBsZWpzb24vanNvbmZpbHRlci5weQpAQCAtMCwwICsxLDQwIEBACitmcm9tIGRqYW5nby51dGlscyBpbXBvcnQgc2ltcGxlanNvbgoraW1wb3J0IGNnaQorCitjbGFzcyBKU09ORmlsdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGFwcCwgbWltZV90eXBlPSd0ZXh0L3gtanNvbicpOgorICAgICAgICBzZWxmLmFwcCA9IGFwcAorICAgICAgICBzZWxmLm1pbWVfdHlwZSA9IG1pbWVfdHlwZQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKToKKyAgICAgICAgIyBSZWFkIEpTT04gUE9TVCBpbnB1dCB0byBqc29uZmlsdGVyLmpzb24gaWYgbWF0Y2hpbmcgbWltZSB0eXBlCisgICAgICAgIHJlc3BvbnNlID0geydzdGF0dXMnOiAnMjAwIE9LJywgJ2hlYWRlcnMnOiBbXX0KKyAgICAgICAgZGVmIGpzb25fc3RhcnRfcmVzcG9uc2Uoc3RhdHVzLCBoZWFkZXJzKToKKyAgICAgICAgICAgIHJlc3BvbnNlWydzdGF0dXMnXSA9IHN0YXR1cworICAgICAgICAgICAgcmVzcG9uc2VbJ2hlYWRlcnMnXS5leHRlbmQoaGVhZGVycykKKyAgICAgICAgZW52aXJvblsnanNvbmZpbHRlci5taW1lX3R5cGUnXSA9IHNlbGYubWltZV90eXBlCisgICAgICAgIGlmIGVudmlyb24uZ2V0KCdSRVFVRVNUX01FVEhPRCcsICcnKSA9PSAnUE9TVCc6CisgICAgICAgICAgICBpZiBlbnZpcm9uLmdldCgnQ09OVEVOVF9UWVBFJywgJycpID09IHNlbGYubWltZV90eXBlOgorICAgICAgICAgICAgICAgIGFyZ3MgPSBbXyBmb3IgXyBpbiBbZW52aXJvbi5nZXQoJ0NPTlRFTlRfTEVOR1RIJyldIGlmIF9dCisgICAgICAgICAgICAgICAgZGF0YSA9IGVudmlyb25bJ3dzZ2kuaW5wdXQnXS5yZWFkKCptYXAoaW50LCBhcmdzKSkKKyAgICAgICAgICAgICAgICBlbnZpcm9uWydqc29uZmlsdGVyLmpzb24nXSA9IHNpbXBsZWpzb24ubG9hZHMoZGF0YSkKKyAgICAgICAgcmVzID0gc2ltcGxlanNvbi5kdW1wcyhzZWxmLmFwcChlbnZpcm9uLCBqc29uX3N0YXJ0X3Jlc3BvbnNlKSkKKyAgICAgICAganNvbnAgPSBjZ2kucGFyc2VfcXMoZW52aXJvbi5nZXQoJ1FVRVJZX1NUUklORycsICcnKSkuZ2V0KCdqc29ucCcpCisgICAgICAgIGlmIGpzb25wOgorICAgICAgICAgICAgY29udGVudF90eXBlID0gJ3RleHQvamF2YXNjcmlwdCcKKyAgICAgICAgICAgIHJlcyA9ICcnLmpvaW4oanNvbnAgKyBbJygnLCByZXMsICcpJ10pCisgICAgICAgIGVsaWYgJ09wZXJhJyBpbiBlbnZpcm9uLmdldCgnSFRUUF9VU0VSX0FHRU5UJywgJycpOgorICAgICAgICAgICAgIyBPcGVyYSBoYXMgYnVuayBYTUxIdHRwUmVxdWVzdCBzdXBwb3J0IGZvciBtb3N0IG1pbWUgdHlwZXMKKyAgICAgICAgICAgIGNvbnRlbnRfdHlwZSA9ICd0ZXh0L3BsYWluJworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGVudF90eXBlID0gc2VsZi5taW1lX3R5cGUKKyAgICAgICAgaGVhZGVycyA9IFsKKyAgICAgICAgICAgICgnQ29udGVudC10eXBlJywgY29udGVudF90eXBlKSwKKyAgICAgICAgICAgICgnQ29udGVudC1sZW5ndGgnLCBsZW4ocmVzKSksCisgICAgICAgIF0KKyAgICAgICAgaGVhZGVycy5leHRlbmQocmVzcG9uc2VbJ2hlYWRlcnMnXSkKKyAgICAgICAgc3RhcnRfcmVzcG9uc2UocmVzcG9uc2VbJ3N0YXR1cyddLCBoZWFkZXJzKQorICAgICAgICByZXR1cm4gW3Jlc10KKworZGVmIGZhY3RvcnkoYXBwLCBnbG9iYWxfY29uZiwgKiprdyk6CisgICAgcmV0dXJuIEpTT05GaWx0ZXIoYXBwLCAqKmt3KQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvZGphbmdvL3V0aWxzL3NpbXBsZWpzb24vc2Nhbm5lci5weSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2RqYW5nby91dGlscy9zaW1wbGVqc29uL3NjYW5uZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRmNDk5OQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2RqYW5nby91dGlscy9zaW1wbGVqc29uL3NjYW5uZXIucHkKQEAgLTAsMCArMSw2MyBAQAorIiIiCitJdGVyYXRvciBiYXNlZCBzcmUgdG9rZW4gc2Nhbm5lcgorIiIiCitpbXBvcnQgc3JlX3BhcnNlLCBzcmVfY29tcGlsZSwgc3JlX2NvbnN0YW50cworZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCBCUkFOQ0gsIFNVQlBBVFRFUk4KK2Zyb20gcmUgaW1wb3J0IFZFUkJPU0UsIE1VTFRJTElORSwgRE9UQUxMCitpbXBvcnQgcmUKKworX19hbGxfXyA9IFsnU2Nhbm5lcicsICdwYXR0ZXJuJ10KKworRkxBR1MgPSAoVkVSQk9TRSB8IE1VTFRJTElORSB8IERPVEFMTCkKK2NsYXNzIFNjYW5uZXIob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGV4aWNvbiwgZmxhZ3M9RkxBR1MpOgorICAgICAgICBzZWxmLmFjdGlvbnMgPSBbTm9uZV0KKyAgICAgICAgIyBjb21iaW5lIHBocmFzZXMgaW50byBhIGNvbXBvdW5kIHBhdHRlcm4KKyAgICAgICAgcyA9IHNyZV9wYXJzZS5QYXR0ZXJuKCkKKyAgICAgICAgcy5mbGFncyA9IGZsYWdzCisgICAgICAgIHAgPSBbXQorICAgICAgICBmb3IgaWR4LCB0b2tlbiBpbiBlbnVtZXJhdGUobGV4aWNvbik6CisgICAgICAgICAgICBwaHJhc2UgPSB0b2tlbi5wYXR0ZXJuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3VicGF0dGVybiA9IHNyZV9wYXJzZS5TdWJQYXR0ZXJuKHMsCisgICAgICAgICAgICAgICAgICAgIFsoU1VCUEFUVEVSTiwgKGlkeCArIDEsIHNyZV9wYXJzZS5wYXJzZShwaHJhc2UsIGZsYWdzKSkpXSkKKyAgICAgICAgICAgIGV4Y2VwdCBzcmVfY29uc3RhbnRzLmVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBwLmFwcGVuZChzdWJwYXR0ZXJuKQorICAgICAgICAgICAgc2VsZi5hY3Rpb25zLmFwcGVuZCh0b2tlbikKKworICAgICAgICBwID0gc3JlX3BhcnNlLlN1YlBhdHRlcm4ocywgWyhCUkFOQ0gsIChOb25lLCBwKSldKQorICAgICAgICBzZWxmLnNjYW5uZXIgPSBzcmVfY29tcGlsZS5jb21waWxlKHApCisKKworICAgIGRlZiBpdGVyc2NhbihzZWxmLCBzdHJpbmcsIGlkeD0wLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgWWllbGQgbWF0Y2gsIGVuZF9pZHggZm9yIGVhY2ggbWF0Y2gKKyAgICAgICAgIiIiCisgICAgICAgIG1hdGNoID0gc2VsZi5zY2FubmVyLnNjYW5uZXIoc3RyaW5nLCBpZHgpLm1hdGNoCisgICAgICAgIGFjdGlvbnMgPSBzZWxmLmFjdGlvbnMKKyAgICAgICAgbGFzdGVuZCA9IGlkeAorICAgICAgICBlbmQgPSBsZW4oc3RyaW5nKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgbSA9IG1hdGNoKCkKKyAgICAgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbWF0Y2hiZWdpbiwgbWF0Y2hlbmQgPSBtLnNwYW4oKQorICAgICAgICAgICAgaWYgbGFzdGVuZCA9PSBtYXRjaGVuZDoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYWN0aW9uID0gYWN0aW9uc1ttLmxhc3RpbmRleF0KKyAgICAgICAgICAgIGlmIGFjdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBydmFsLCBuZXh0X3BvcyA9IGFjdGlvbihtLCBjb250ZXh0KQorICAgICAgICAgICAgICAgIGlmIG5leHRfcG9zIGlzIG5vdCBOb25lIGFuZCBuZXh0X3BvcyAhPSBtYXRjaGVuZDoKKyAgICAgICAgICAgICAgICAgICAgIyAiZmFzdCBmb3J3YXJkIiB0aGUgc2Nhbm5lcgorICAgICAgICAgICAgICAgICAgICBtYXRjaGVuZCA9IG5leHRfcG9zCisgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5zY2FubmVyLnNjYW5uZXIoc3RyaW5nLCBtYXRjaGVuZCkubWF0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBydmFsLCBtYXRjaGVuZAorICAgICAgICAgICAgbGFzdGVuZCA9IG1hdGNoZW5kCisgICAgICAgICAgICAKK2RlZiBwYXR0ZXJuKHBhdHRlcm4sIGZsYWdzPUZMQUdTKToKKyAgICBkZWYgZGVjb3JhdG9yKGZuKToKKyAgICAgICAgZm4ucGF0dGVybiA9IHBhdHRlcm4KKyAgICAgICAgZm4ucmVnZXggPSByZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzKQorICAgICAgICByZXR1cm4gZm4KKyAgICByZXR1cm4gZGVjb3JhdG9yCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9lbGVtdXRpbC5weSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2VsZW11dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOTcxYmEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9lbGVtdXRpbC5weQpAQCAtMCwwICsxLDE2OCBAQAorIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAgCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgICAKKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyAgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgRnVuY3Rpb25zIHRvIGhlbHAgcmVwcmVzZW50IGRhdGEgYXMgbGlzdHMgb2YgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMKKworZnJvbSB1dGlsIGltcG9ydCAqCisKK2VsZW1lbnQgPSAiJ2VsZW1lbnQiCithdHRyaWJ1dGUgPSAiJ2F0dHJpYnV0ZSIKK2F0c2lnbiA9ICInQCIKKworIyBSZXR1cm4gdHJ1ZSBpZiBhIHZhbHVlIGlzIGFuIGVsZW1lbnQKK2RlZiBpc0VsZW1lbnQodik6CisgICAgaWYgbm90IGlzTGlzdCh2KSBvciBpc05pbCh2KSBvciB2ID09IE5vbmUgb3IgY2FyKHYpICE9IGVsZW1lbnQ6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKyMgUmV0dXJuIHRydWUgaWYgYSB2YWx1ZSBpcyBhbiBhdHRyaWJ1dGUKK2RlZiBpc0F0dHJpYnV0ZSh2KToKKyAgICBpZiBub3QgaXNMaXN0KHYpIG9yIGlzTmlsKHYpIG9yIHYgPT0gTm9uZSBvciBjYXIodikgIT0gYXR0cmlidXRlOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICByZXR1cm4gVHJ1ZQorCisjIFJldHVybiB0aGUgbmFtZSBvZiBhdHRyaWJ1dGUKK2RlZiBhdHRyaWJ1dGVOYW1lKGwpOgorICAgIHJldHVybiBjYWRyKGwpCisKKyMgUmV0dXJuIHRoZSB2YWx1ZSBvZiBhdHRyaWJ1dGUKK2RlZiBhdHRyaWJ1dGVWYWx1ZShsKToKKyAgICByZXR1cm4gY2FkZHIobCkKKworIyBSZXR1cm4gdGhlIG5hbWUgb2YgYW4gZWxlbWVudAorZGVmIGVsZW1lbnROYW1lKGwpOgorICAgIHJldHVybiBjYWRyKGwpCisKKyMgUmV0dXJuIHRydWUgaWYgYW4gZWxlbWVudCBoYXMgY2hpbGRyZW4KK2RlZiBlbGVtZW50SGFzQ2hpbGRyZW4obCk6CisgICAgcmV0dXJuIG5vdCBpc05pbChjZGRyKGwpKQorCisjIFJldHVybiB0aGUgY2hpbGRyZW4gb2YgYW4gZWxlbWVudAorZGVmIGVsZW1lbnRDaGlsZHJlbihsKToKKyAgICByZXR1cm4gY2RkcihsKQorCisjIFJldHVybiB0cnVlIGlmIGFuIGVsZW1lbnQgaGFzIGEgdmFsdWUKK2RlZiBlbGVtZW50SGFzVmFsdWUobCk6CisgICAgciA9IHJldmVyc2UobCkKKyAgICBpZiBpc1N5bWJvbChjYXIocikpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiBpc0xpc3QoY2FyKHIpKSBhbmQgbm90IGlzTmlsKGNhcihyKSkgYW5kIGlzU3ltYm9sKGNhcihjYXIocikpKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworIyBSZXR1cm4gdGhlIHZhbHVlIG9mIGFuIGVsZW1lbnQKK2RlZiBlbGVtZW50VmFsdWUobCk6CisgICAgcmV0dXJuIGNhcihyZXZlcnNlKGwpKQorCisjIENvbnZlcnQgYW4gZWxlbWVudCB0byBhIHZhbHVlCitkZWYgZWxlbWVudFRvVmFsdWVJc0xpc3Qodik6CisgICAgaWYgbm90IGlzTGlzdCh2KToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIGlzTmlsKHYpIG9yIG5vdCBpc1N5bWJvbChjYXIodikpCisKK2RlZiBlbGVtZW50VG9WYWx1ZSh0KToKKyAgICBpZiBpc1RhZ2dlZExpc3QodCwgYXR0cmlidXRlKToKKyAgICAgICAgcmV0dXJuIChhdHNpZ24gKyBhdHRyaWJ1dGVOYW1lKHQpWzE6XSwgYXR0cmlidXRlVmFsdWUodCkpCisgICAgaWYgaXNUYWdnZWRMaXN0KHQsIGVsZW1lbnQpOgorICAgICAgICBpZiBlbGVtZW50SGFzVmFsdWUodCk6CisgICAgICAgICAgICBpZiBub3QgZWxlbWVudFRvVmFsdWVJc0xpc3QoZWxlbWVudFZhbHVlKHQpKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGVsZW1lbnROYW1lKHQpLCBlbGVtZW50VmFsdWUodCkpCisgICAgICAgICAgICByZXR1cm4gY29ucyhlbGVtZW50TmFtZSh0KSwgKGVsZW1lbnRzVG9WYWx1ZXMoZWxlbWVudFZhbHVlKHQpKSwpKQorICAgICAgICByZXR1cm4gY29ucyhlbGVtZW50TmFtZSh0KSwgZWxlbWVudHNUb1ZhbHVlcyhlbGVtZW50Q2hpbGRyZW4odCkpKQorICAgIGlmIG5vdCBpc0xpc3QodCk6CisgICAgICAgIHJldHVybiB0CisgICAgcmV0dXJuIGVsZW1lbnRzVG9WYWx1ZXModCkKKworIyBDb252ZXJ0IGEgbGlzdCBvZiBlbGVtZW50cyB0byBhIGxpc3Qgb2YgdmFsdWVzCitkZWYgZWxlbWVudFRvVmFsdWVJc1N5bWJvbCh2KToKKyAgICBpZiBub3QgaXNMaXN0KHYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiAoaXNOaWwodikpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiBub3QgaXNTeW1ib2woY2FyKHYpKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIFRydWUKKworZGVmIGVsZW1lbnRUb1ZhbHVlR3JvdXBWYWx1ZXModiwgbCk6CisgICAgaWYgaXNOaWwobCkgb3Igbm90IGVsZW1lbnRUb1ZhbHVlSXNTeW1ib2wodikgb3Igbm90IGVsZW1lbnRUb1ZhbHVlSXNTeW1ib2woY2FyKGwpKToKKyAgICAgICAgcmV0dXJuIGNvbnModiwgbCkKKyAgICBpZiBjYXIoY2FyKGwpKSAhPSBjYXIodik6CisgICAgICAgIHJldHVybiBjb25zKHYsIGwpCisgICAgaWYgbm90IGVsZW1lbnRUb1ZhbHVlSXNMaXN0KGNhZHIoY2FyKGwpKSk6CisgICAgICAgIGcgPSAoY2FyKHYpLCAoY2RyKHYpLCBjZHIoY2FyKGwpKSkpCisgICAgICAgIHJldHVybiBlbGVtZW50VG9WYWx1ZUdyb3VwVmFsdWVzKGcsIGNkcihsKSkKKyAgICBnID0gKGNhcih2KSwgY29ucyhjZHIodiksIGNhZHIoY2FyKGwpKSkpCisgICAgcmV0dXJuIGVsZW1lbnRUb1ZhbHVlR3JvdXBWYWx1ZXMoZywgY2RyKGwpKQorCitkZWYgZWxlbWVudHNUb1ZhbHVlcyhlKToKKyAgICBpZiBpc05pbChlKToKKyAgICAgICAgcmV0dXJuIGUKKyAgICByZXR1cm4gZWxlbWVudFRvVmFsdWVHcm91cFZhbHVlcyhlbGVtZW50VG9WYWx1ZShjYXIoZSkpLCBlbGVtZW50c1RvVmFsdWVzKGNkcihlKSkpCisKKyMgQ29udmVydCBhIHZhbHVlIHRvIGFuIGVsZW1lbnQKK2RlZiB2YWx1ZVRvRWxlbWVudCh0KToKKyAgICBpZiBpc0xpc3QodCkgYW5kIG5vdCBpc05pbCh0KSBhbmQgaXNTeW1ib2woY2FyKHQpKToKKyAgICAgICAgbiA9IGNhcih0KQorICAgICAgICB2ID0gY2Fkcih0KQorICAgICAgICBpZiBub3QgaXNMaXN0KHYpOgorICAgICAgICAgICAgaWYgblswOjJdID09IGF0c2lnbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gKGF0dHJpYnV0ZSwgblsxOl0sIHYpCisgICAgICAgICAgICByZXR1cm4gKGVsZW1lbnQsIG4sIHYpCisgICAgICAgIGlmIGlzTmlsKHYpIG9yIG5vdCBpc1N5bWJvbChjYXIodikpOgorICAgICAgICAgICAgcmV0dXJuIGNvbnMoZWxlbWVudCwgY29ucyhuLCAodmFsdWVzVG9FbGVtZW50cyh2KSwpKSkKKyAgICAgICAgcmV0dXJuIGNvbnMoZWxlbWVudCwgY29ucyhuLCB2YWx1ZXNUb0VsZW1lbnRzKGNkcih0KSkpKQorICAgIGlmIG5vdCBpc0xpc3QodCk6CisgICAgICAgIHJldHVybiB0CisgICAgcmV0dXJuIHZhbHVlc1RvRWxlbWVudHModCkKKworIyBDb252ZXJ0IGEgbGlzdCBvZiB2YWx1ZXMgdG8gYSBsaXN0IG9mIGVsZW1lbnRzCitkZWYgdmFsdWVzVG9FbGVtZW50cyhsKToKKyAgICBpZiBpc05pbChsKToKKyAgICAgICAgcmV0dXJuIGwKKyAgICByZXR1cm4gY29ucyh2YWx1ZVRvRWxlbWVudChjYXIobCkpLCB2YWx1ZXNUb0VsZW1lbnRzKGNkcihsKSkpCisKKyMgUmV0dXJuIGEgc2VsZWN0b3IgbGFtYmRhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZpbHRlciBlbGVtZW50cworZGVmIGV2YWxTZWxlY3Qocywgdik6CisgICAgaWYgaXNOaWwocyk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgaWYgaXNOaWwodik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmIGNhcihzKSAhPSBjYXIodik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBldmFsU2VsZWN0KGNkcihzKSwgY2RyKHYpKQorCitkZWYgc2VsZWN0b3Iocyk6CisgICAgcmV0dXJuIGxhbWJkYSB2OiBldmFsU2VsZWN0KHMsIHYpCisKKyMgUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIG5hbWUKK2RlZiBuYW1lZEF0dHJpYnV0ZVZhbHVlKG5hbWUsIGwpOgorICAgIGYgPSBmaWx0ZXIobGFtYmRhIHY6IGlzQXR0cmlidXRlKHYpIGFuZCBhdHRyaWJ1dGVOYW1lKHYpID09IG5hbWUsIGwpCisgICAgaWYgaXNOaWwoZik6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuIGNhZGRyKGNhcihmKSkKKworIyBSZXR1cm4gY2hpbGQgZWxlbWVudHMgd2l0aCB0aGUgZ2l2ZW4gbmFtZQorZGVmIG5hbWVkRWxlbWVudENoaWxkcmVuKG5hbWUsIGwpOgorICAgIHJldHVybiBmaWx0ZXIobGFtYmRhIHY6IGlzRWxlbWVudCh2KSBhbmQgZWxlbWVudE5hbWUodikgPT0gbmFtZSwgbCkKKworIyBSZXR1cm4gdGhlIGNoaWxkIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZQorZGVmIG5hbWVkRWxlbWVudENoaWxkKG5hbWUsIGwpOgorICAgIGYgPSBuYW1lZEVsZW1lbnRDaGlsZHJlbihuYW1lLCBsKQorICAgIGlmIGlzTmlsKGYpOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiBjYXIoZikKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvaW52b2tlci5weSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2ludm9rZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgxMDc2NwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2ludm9rZXIucHkKQEAgLTAsMCArMSwxMDggQEAKKyMhL3Vzci9iaW4vcHl0aG9uCisjICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjICBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjICByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjICB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjICB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjICAKKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjICAgIAorIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyAgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjICBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjICB1bmRlciB0aGUgTGljZW5zZS4KKworIyBDb21wb25lbnQgaW52b2NhdGlvbiBmdW5jdGlvbnMKKworZnJvbSBzeXMgaW1wb3J0IHN0ZGVyciwgYXJndgorZnJvbSB1dGlsIGltcG9ydCAqCitmcm9tIGpzb251dGlsIGltcG9ydCAqCisKKyMgSlNPTiByZXF1ZXN0IGlkCitpZCA9IDEKKworIyBNYWtlIGEgY2FsbGFibGUgcmVmZXJlbmNlIGNsaWVudAorY2xhc3MgcHJveHk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGpweCk6CisgICAgICAgIHNlbGYuanB4ID0ganB4CisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgZnVuYywgKmFyZ3MpOgorCisgICAgICAgICMgQ3JlYXRlIGEgSlNPTi1SUEMgcmVxdWVzdAorICAgICAgICBnbG9iYWwgaWQKKyAgICAgICAgcmVxID0gU3RyaW5nSU8oKQorICAgICAgICB3cml0ZVN0cmluZ3MoanNvblJlcXVlc3QoaWQsIGZ1bmMsIGFyZ3MpLCByZXEpCisgICAgICAgIGlkID0gaWQgKyAxCisKKyAgICAgICAgIyBFdmFsIHRoZSBKYXZhIHByb3h5CisgICAgICAgIHJlcyA9IHNlbGYuanB4LmV2YWwocmVxLmdldHZhbHVlKCkpCisKKyAgICAgICAgIyBFeHRyYWN0IHJlc3VsdCBmcm9tIEpTT04tUlBDIHJlc3BvbnNlCisgICAgICAgIHJldHVybiBqc29uUmVzdWx0VmFsdWUoKHJlcywpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gcmVwcigoanB4LCkpCisKK2RlZiBta3Byb3hpZXMoanB4KToKKyAgICBpZiBpc05pbChqcHgpOgorICAgICAgICByZXR1cm4gKCkKKyAgICByZXR1cm4gY29ucyhwcm94eShjYXIoanB4KSksIG1rcHJveGllcyhjZHIoanB4KSkpCisKK2NsYXNzIHByb3A6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGpweSk6CisgICAgICAgIHNlbGYuanB5ID0ganB5CisKKyAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgICMgRXZhbCB0aGUgcHJvcGVydHkKKyAgICAgICAgcmVzID0gc2VsZi5qcHkuZXZhbCgpCisgICAgICAgIHJldHVybiByZXMKKworZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgIHJldHVybiByZXByKChqcHksKSkKKworZGVmIG1rcHJvcHMoanB5KToKKyAgICBpZiBpc05pbChqcHkpOgorICAgICAgICByZXR1cm4gKCkKKyAgICByZXR1cm4gY29ucyhwcm9wKGNhcihqcHkpKSwgbWtwcm9wcyhjZHIoanB5KSkpCisKKyMgTWFrZSBhIGNhbGxhYmxlIGNvbXBvbmVudAorY2xhc3MgY29tcG9uZW50OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBpbXBsLCBqcHgsIGpweSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5pbXBsID0gaW1wbFswOmxlbihpbXBsKSAtIDNdCisgICAgICAgIHNlbGYubW9kID0gX19pbXBvcnRfXyhzZWxmLmltcGwpCisgICAgICAgIHNlbGYucHJveGllcyA9IG1rcHJveGllcyhqcHgpCisgICAgICAgIHNlbGYucHJvcHMgPSBta3Byb3BzKGpweSkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBmdW5jLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLm1vZC5fX2dldGF0dHJpYnV0ZV9fKGZ1bmMpKCooYXJncyArIHNlbGYucHJveGllcyArIHNlbGYucHJvcHMpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gcmVwcigoc2VsZi5uYW1lLCBzZWxmLmltcGwsIHNlbGYubW9kLCBzZWxmLnByb3BzLCBzZWxmLnByb3hpZXMpKQorCisjIENvbnZlcnRzIHRoZSBhcmdzIHJlY2VpdmVkIGluIGEgSlNPTiByZXF1ZXN0IHRvIGEgbGlzdCBvZiBrZXkgdmFsdWUgcGFpcnMKK2RlZiBqc29uQXJncyhhKToKKyAgICBpZiBpc05pbChhKToKKyAgICAgICAgcmV0dXJuICgoKSwpCisgICAgbCA9IGNhcihhKTsKKyAgICByZXR1cm4gY29ucyhsLCBqc29uQXJncyhjZHIoYSkpKQorCisjIEFwcGx5IGEgSlNPTiBmdW5jdGlvbiByZXF1ZXN0IHRvIGEgY29tcG9uZW50CitkZWYgYXBwbHkoanNyZXEsIGNvbXApOgorICAgIGpzb24gPSBlbGVtZW50c1RvVmFsdWVzKHJlYWRKU09OKChqc3JlcSwpKSkKKyAgICBhcmdzID0ganNvbkFyZ3MoanNvbikKKyAgICBqaWQgPSBjYWRyKGFzc29jKCInaWQiLCBhcmdzKSkKKyAgICBmdW5jID0gZnVuY05hbWUoY2Fkcihhc3NvYygiJ21ldGhvZCIsIGFyZ3MpKSkKKyAgICBwYXJhbXMgPSBjYWRyKGFzc29jKCIncGFyYW1zIiwgYXJncykpCisgICAgdiA9IGNvbXAoZnVuYywgKnBhcmFtcykKKyAgICByZXR1cm4ganNvblJlc3VsdChqaWQsIHYpWzBdCisKKyMgTWFrZSBhIGNvbXBvbmVudCB0aGF0IGNhbiBiZSBjYWxsZWQgd2l0aCBhIEpTT04gZnVuY3Rpb24gcmVxdWVzdAorZGVmIG1rY29tcG9uZW50KG5hbWUsIGltcGwsIGpweCwganB5KToKKyAgICBjb21wID0gY29tcG9uZW50KG5hbWUsIGltcGwsIGpweCwganB5KQorICAgIHJldHVybiBsYW1iZGEganNyZXE6IGFwcGx5KGpzcmVxLCBjb21wKQorCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9qc29udXRpbC5weSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2pzb251dGlsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OTU1OWQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9qc29udXRpbC5weQpAQCAtMCwwICsxLDE0MiBAQAorIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAgCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgICAKKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyAgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgSlNPTiBkYXRhIGNvbnZlcnNpb24gZnVuY3Rpb25zCisKK3RyeToKKyAgICBpbXBvcnQganNvbgorZXhjZXB0OgorICAgIGZyb20gZGphbmdvLnV0aWxzIGltcG9ydCBzaW1wbGVqc29uIGFzIGpzb24KKworZnJvbSBTdHJpbmdJTyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gdXRpbCBpbXBvcnQgKgorZnJvbSBlbGVtdXRpbCBpbXBvcnQgKgorCisjIFJldHVybiB0cnVlIGlmIGEgbGlzdCByZXByZXNlbnRzIGEgSlMgYXJyYXkKK2RlZiBpc0pTQXJyYXkobCk6CisgICAgaWYgaXNOaWwobCk6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgdiA9IGNhcihsKQorICAgIGlmIGlzU3ltYm9sKHYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiBpc0xpc3Qodik6CisgICAgICAgIGlmIG5vdCBpc05pbCh2KSBhbmQgaXNTeW1ib2woY2FyKHYpKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKKyMgQ29udmVydHMgSlNPTiBwcm9wZXJ0aWVzIHRvIHZhbHVlcworZGVmIGpzUHJvcGVydGllc1RvVmFsdWVzKHByb3BlcnRpZXNTb0ZhciwgbywgaSk6CisgICAgaWYgaXNOaWwoaSk6CisgICAgICAgIHJldHVybiBwcm9wZXJ0aWVzU29GYXIKKyAgICBwID0gY2FyKGkpCisgICAganN2ID0gb1twXQorICAgIHYgPSBqc1ZhbFRvVmFsdWUoanN2KQorCisgICAgaWYgaXNpbnN0YW5jZShwLCBiYXNlc3RyaW5nKToKKyAgICAgICAgbiA9IHN0cihwKQorICAgICAgICBpZiBuWzA6MV0gPT0gIkAiOgorICAgICAgICAgICAgcmV0dXJuIGpzUHJvcGVydGllc1RvVmFsdWVzKGNvbnMoKGF0dHJpYnV0ZSwgIiciICsgblsxOl0sIHYpLCBwcm9wZXJ0aWVzU29GYXIpLCBvLCBjZHIoaSkpCisgICAgICAgIGlmIGlzTGlzdCh2KSBhbmQgbm90IGlzSlNBcnJheSh2KToKKyAgICAgICAgICAgIHJldHVybiBqc1Byb3BlcnRpZXNUb1ZhbHVlcyhjb25zKGNvbnMoZWxlbWVudCwgY29ucygiJyIgKyBuLCB2KSksIHByb3BlcnRpZXNTb0ZhciksIG8sIGNkcihpKSkKKyAgICAgICAgcmV0dXJuIGpzUHJvcGVydGllc1RvVmFsdWVzKGNvbnMoKGVsZW1lbnQsICInIiArIG4sIHYpLCBwcm9wZXJ0aWVzU29GYXIpLCBvLCBjZHIoaSkpCisgICAgcmV0dXJuIGpzUHJvcGVydGllc1RvVmFsdWVzKGNvbnModiwgcHJvcGVydGllc1NvRmFyKSwgbywgY2RyKGkpKQorCisjIENvbnZlcnRzIGEgSlNPTiB2YWwgdG8gYSB2YWx1ZQorZGVmIGpzVmFsVG9WYWx1ZShqc3YpOgorICAgIGlmIGlzaW5zdGFuY2UoanN2LCBkaWN0KToKKyAgICAgICAgcmV0dXJuIGpzUHJvcGVydGllc1RvVmFsdWVzKCgpLCBqc3YsIHR1cGxlKGpzdi5rZXlzKCkpKQorICAgIGlmIGlzTGlzdChqc3YpOgorICAgICAgICByZXR1cm4ganNQcm9wZXJ0aWVzVG9WYWx1ZXMoKCksIGpzdiwgdHVwbGUocmV2ZXJzZWQocmFuZ2UoMCwgbGVuKGpzdikpKSkpCisgICAgaWYgaXNpbnN0YW5jZShqc3YsIGJhc2VzdHJpbmcpOgorICAgICAgICByZXR1cm4gc3RyKGpzdikKKyAgICByZXR1cm4ganN2CisgICAgCisjIENvbnZlcnQgYSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIGEgSlNPTiBkb2N1bWVudCB0byBhIGxpc3Qgb2YgdmFsdWVzCitkZWYgcmVhZEpTT04obCk6CisgICAgcyA9IFN0cmluZ0lPKCkKKyAgICB3cml0ZVN0cmluZ3MobCwgcykKKyAgICB2YWwgPSBqc29uLmxvYWRzKHMuZ2V0dmFsdWUoKSkKKyAgICByZXR1cm4ganNWYWxUb1ZhbHVlKHZhbCkKKworIyBDb252ZXJ0IGEgbGlzdCBvZiB2YWx1ZXMgdG8gSlNPTiBhcnJheSBlbGVtZW50cworZGVmIHZhbHVlc1RvSlNFbGVtZW50cyhhLCBsLCBpKToKKyAgICBpZiBpc05pbChsKToKKyAgICAgICAgcmV0dXJuIGEKKyAgICBwdiA9IHZhbHVlVG9KU1ZhbChjYXIobCkpCisgICAgYVtpXSA9IHB2CisgICAgcmV0dXJuIHZhbHVlc1RvSlNFbGVtZW50cyhhLCBjZHIobCksIGkgKyAxKQorICAgIAorIyBDb252ZXJ0IGEgdmFsdWUgdG8gYSBKU09OIHZhbHVlCitkZWYgdmFsdWVUb0pTVmFsKHYpOgorICAgIGlmIG5vdCBpc0xpc3Qodik6CisgICAgICAgIHJldHVybiB2CisgICAgaWYgaXNKU0FycmF5KHYpOgorICAgICAgICByZXR1cm4gdmFsdWVzVG9KU0VsZW1lbnRzKGxpc3QocmFuZ2UoMCwgbGVuKHYpKSksIHYsIDApCisgICAgcmV0dXJuIHZhbHVlc1RvSlNQcm9wZXJ0aWVzKHt9LCB2KQorCisjIENvbnZlcnQgYSBsaXN0IG9mIHZhbHVlcyB0byBKU09OIHByb3BlcnRpZXMKK2RlZiB2YWx1ZXNUb0pTUHJvcGVydGllcyhvLCBsKToKKyAgICBpZiBpc05pbChsKToKKyAgICAgICAgcmV0dXJuIG8KKyAgICB0b2tlbiA9IGNhcihsKQorICAgIGlmIGlzVGFnZ2VkTGlzdCh0b2tlbiwgYXR0cmlidXRlKToKKyAgICAgICAgcHYgPSB2YWx1ZVRvSlNWYWwoYXR0cmlidXRlVmFsdWUodG9rZW4pKQorICAgICAgICBvWyJAIiArIGF0dHJpYnV0ZU5hbWUodG9rZW4pWzE6XV0gPSBwdgorICAgIGVsaWYgaXNUYWdnZWRMaXN0KHRva2VuLCBlbGVtZW50KToKKyAgICAgICAgaWYgZWxlbWVudEhhc1ZhbHVlKHRva2VuKToKKyAgICAgICAgICAgIHB2ID0gdmFsdWVUb0pTVmFsKGVsZW1lbnRWYWx1ZSh0b2tlbikpCisgICAgICAgICAgICBvW2VsZW1lbnROYW1lKHRva2VuKVsxOl1dID0gcHYKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoaWxkID0ge30KKyAgICAgICAgICAgIG9bZWxlbWVudE5hbWUodG9rZW4pWzE6XV0gPSBjaGlsZAorICAgICAgICAgICAgdmFsdWVzVG9KU1Byb3BlcnRpZXMoY2hpbGQsIGVsZW1lbnRDaGlsZHJlbih0b2tlbikpCisgICAgcmV0dXJuIHZhbHVlc1RvSlNQcm9wZXJ0aWVzKG8sIGNkcihsKSkKKworIyBDb252ZXJ0IGEgbGlzdCBvZiB2YWx1ZXMgdG8gYSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIGEgSlNPTiBkb2N1bWVudAorZGVmIHdyaXRlSlNPTihsKToKKyAgICBqc3YgPSB2YWx1ZXNUb0pTUHJvcGVydGllcyh7fSwgbCkKKyAgICBzID0ganNvbi5kdW1wcyhqc3YsIHNlcGFyYXRvcnM9KCcsJywnOicpKQorICAgIHJldHVybiAocywpCisKKyMgQ29udmVydCBhIGxpc3QgKyBwYXJhbXMgdG8gYSBKU09OLVJQQyByZXF1ZXN0CitkZWYganNvblJlcXVlc3QoaWQsIGZ1bmMsIHBhcmFtcyk6CisgICAgciA9ICgoIidpZCIsIGlkKSwgKCInbWV0aG9kIiwgZnVuYyksICgiJ3BhcmFtcyIsIHBhcmFtcykpCisgICAgcmV0dXJuIHdyaXRlSlNPTih2YWx1ZXNUb0VsZW1lbnRzKHIpKQorCisjIENvbnZlcnQgYSB2YWx1ZSB0byBhIEpTT04tUlBDIHJlc3VsdAorZGVmIGpzb25SZXN1bHQoaWQsIHZhbCk6CisgICAgcmV0dXJuIHdyaXRlSlNPTih2YWx1ZXNUb0VsZW1lbnRzKCgoIidpZCIsIGlkKSwgKCIncmVzdWx0IiwgdmFsKSkpKQorCisjIENvbnZlcnQgYSBKU09OLVJQQyByZXN1bHQgdG8gYSB2YWx1ZQorZGVmIGpzb25SZXN1bHRWYWx1ZShzKToKKyAgICBqc3JlcyA9IHJlYWRKU09OKHMpCisgICAgcmVzID0gZWxlbWVudHNUb1ZhbHVlcyhqc3JlcykKKyAgICB2YWwgPSBjYWRyKGFzc29jKCIncmVzdWx0IiwgcmVzKSkKKyAgICBpZiBpc0xpc3QodmFsKSBhbmQgbm90IGlzSlNBcnJheSh2YWwpOgorICAgICAgICByZXR1cm4gKHZhbCwpCisgICAgcmV0dXJuIHZhbAorCisjIFJldHVybiBhIHBvcnRhYmxlIGZ1bmN0aW9uIG5hbWUgZnJvbSBhIEpTT04tUlBDIGZ1bmN0aW9uIG5hbWUKK2RlZiBmdW5jTmFtZShmKToKKyAgICBpZiBmLnN0YXJ0c3dpdGgoIi4iKToKKyAgICAgICAgcmV0dXJuIGZbMTpdCisgICAgaWYgZi5zdGFydHN3aXRoKCJzeXN0ZW0uIik6CisgICAgICAgIHJldHVybiBmWzc6XQorICAgIGlmIGYuc3RhcnRzd2l0aCgiU2VydmljZS4iKToKKyAgICAgICAgcmV0dXJuIGZbODpdCisgICAgcmV0dXJuIGYKKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvcnNzdXRpbC5weSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL3Jzc3V0aWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwNjBkMgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL3Jzc3V0aWwucHkKQEAgLTAsMCArMSwxMTkgQEAKKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgIAorIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgICAgCisjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIFJTUyBkYXRhIGNvbnZlcnNpb24gZnVuY3Rpb25zCisKK2Zyb20gdXRpbCBpbXBvcnQgKgorZnJvbSBlbGVtdXRpbCBpbXBvcnQgKgorZnJvbSB4bWx1dGlsIGltcG9ydCAqCisKKyMgQ29udmVydCBhIGxpc3Qgb2YgZWxlbWVudHMgdG8gYSBsaXN0IG9mIHZhbHVlcyByZXByZXNlbnRpbmcgYW4gUlNTIGVudHJ5CitkZWYgZW50cnlFbGVtZW50c1RvVmFsdWVzKGUpOgorICAgIGx0ID0gZmlsdGVyKHNlbGVjdG9yKChlbGVtZW50LCAiJ3RpdGxlIikpLCBlKQorICAgIHQgPSAiIiBpZiBpc05pbChsdCkgZWxzZSBlbGVtZW50VmFsdWUoY2FyKGx0KSkKKyAgICBsaSA9IGZpbHRlcihzZWxlY3RvcigoZWxlbWVudCwgIidsaW5rIikpLCBlKQorICAgIGkgPSAiIiBpZiBpc05pbChsaSkgZWxzZSBlbGVtZW50VmFsdWUoY2FyKGxpKSkKKyAgICBsYyA9IGZpbHRlcihzZWxlY3RvcigoZWxlbWVudCwgIidkZXNjcmlwdGlvbiIpKSwgZSkKKyAgICByZXR1cm4gKHQsIGksIGVsZW1lbnRWYWx1ZShjYXIobGMpKSkKKworIyBDb252ZXJ0IGEgbGlzdCBvZiBlbGVtZW50cyB0byBhIGxpc3Qgb2YgdmFsdWVzIHJlcHJlc2VudGluZyBSU1MgZW50cmllcworZGVmIGVudHJpZXNFbGVtZW50c1RvVmFsdWVzKGUpOgorICAgIGlmIGlzTmlsKGUpOgorICAgICAgICByZXR1cm4gZQorICAgIHJldHVybiBjb25zKGVudHJ5RWxlbWVudHNUb1ZhbHVlcyhjYXIoZSkpLCBlbnRyaWVzRWxlbWVudHNUb1ZhbHVlcyhjZHIoZSkpKQorCisjIENvbnZlcnQgYSBsaXN0IG9mIHN0cmluZ3MgdG8gYSBsaXN0IG9mIHZhbHVlcyByZXByZXNlbnRpbmcgYW4gUlNTIGVudHJ5CitkZWYgcmVhZFJTU0VudHJ5KGwpOgorICAgIGUgPSByZWFkWE1MKGwpCisgICAgaWYgaXNOaWwoZSk6CisgICAgICAgIHJldHVybiAoKQorICAgIHJldHVybiBlbnRyeUVsZW1lbnRzVG9WYWx1ZXMoY2FyKGUpKQorCisjIENvbnZlcnQgYSBsaXN0IG9mIHZhbHVlcyByZXByZXNlbnR5IGFuIFJTUyBlbnRyeSB0byBhIHZhbHVlCitkZWYgZW50cnlWYWx1ZShlKToKKyAgICB2ID0gZWxlbWVudHNUb1ZhbHVlcygoY2FkZHIoZSksKSkKKyAgICByZXR1cm4gY29ucyhjYXIoZSksIChjYWRyKGUpLCBjZHIoY2FyKHYpKSkpCisKKyMgUmV0dXJuIHRydWUgaWYgYSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50cyBhbiBSU1MgZmVlZAorZGVmIGlzUlNTRmVlZChsKToKKyAgICBpZiBpc05pbChsKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgaWYgY2FyKGwpWzA6NV0gIT0gIjw/eG1sIjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIGNvbnRhaW5zKGNhcihsKSwgIjxyc3MiKQorCisjIENvbnZlcnQgYSBsaXN0IG9mIHN0cmluZ3MgdG8gYSBsaXN0IG9mIHZhbHVlcyByZXByZXNlbnRpbmcgYW4gUlNTIGZlZWQKK2RlZiByZWFkUlNTRmVlZChsKToKKyAgICBmID0gcmVhZFhNTChsKQorICAgIGlmIGlzTmlsKGYpOgorICAgICAgICByZXR1cm4gKCkKKyAgICBjID0gZmlsdGVyKHNlbGVjdG9yKChlbGVtZW50LCAiJ2NoYW5uZWwiKSksIGNhcihmKSkKKyAgICB0ID0gZmlsdGVyKHNlbGVjdG9yKChlbGVtZW50LCAiJ3RpdGxlIikpLCBjYXIoYykpCisgICAgaSA9IGZpbHRlcihzZWxlY3RvcigoZWxlbWVudCwgIidsaW5rIikpLCBjYXIoYykpCisgICAgZSA9IGZpbHRlcihzZWxlY3RvcigoZWxlbWVudCwgIidpdGVtIikpLCBjYXIoYykpCisgICAgaWYgaXNOaWwoZSk6CisgICAgICAgIHJldHVybiAoZWxlbWVudFZhbHVlKGNhcih0KSksIGVsZW1lbnRWYWx1ZShjYXIoaSkpKQorICAgIHJldHVybiBjb25zKGVsZW1lbnRWYWx1ZShjYXIodCkpLCBjb25zKGVsZW1lbnRWYWx1ZShjYXIoaSkpLCBlbnRyaWVzRWxlbWVudHNUb1ZhbHVlcyhlKSkpCisKKyMgQ29udmVydCBhbiBSU1MgZmVlZCBjb250YWluaW5nIGVsZW1lbnRzIHRvIGFuIFJTUyBmZWVkIGNvbnRhaW5pbmcgdmFsdWVzCitkZWYgZmVlZFZhbHVlc0xvb3AoZSk6CisgICAgaWYgKGlzTmlsKGUpKToKKyAgICAgICAgcmV0dXJuIGUKKyAgICByZXR1cm4gY29ucyhlbnRyeVZhbHVlKGNhcihlKSksIGZlZWRWYWx1ZXNMb29wKGNkcihlKSkpCisKK2RlZiBmZWVkVmFsdWVzKGUpOgorICAgIHJldHVybiBjb25zKGNhcihlKSwgY29ucyhjYWRyKGUpLCBmZWVkVmFsdWVzTG9vcChjZGRyKGUpKSkpCisKKyMgQ29udmVydCBhIGxpc3Qgb2YgdmFsdWVzIHJlcHJlc2VudHkgYW4gUlNTIGVudHJ5IHRvIGEgbGlzdCBvZiBlbGVtZW50cworZGVmIGVudHJ5RWxlbWVudChsKToKKyAgICByZXR1cm4gKGVsZW1lbnQsICInaXRlbSIsCisgICAgICAgICAgICAoZWxlbWVudCwgIid0aXRsZSIsIGNhcihsKSksCisgICAgICAgICAgICAoZWxlbWVudCwgIidsaW5rIiwgY2FkcihsKSksCisgICAgICAgICAgICAoZWxlbWVudCwgIidkZXNjcmlwdGlvbiIsIGNhZGRyKGwpKSkKKworIyBDb252ZXJ0IGEgbGlzdCBvZiB2YWx1ZXMgcmVwcmVzZW50aW5nIFJTUyBlbnRyaWVzIHRvIGEgbGlzdCBvZiBlbGVtZW50cworZGVmIGVudHJpZXNFbGVtZW50cyhsKToKKyAgICBpZiBpc05pbChsKToKKyAgICAgICAgcmV0dXJuIGwKKyAgICByZXR1cm4gY29ucyhlbnRyeUVsZW1lbnQoY2FyKGwpKSwgZW50cmllc0VsZW1lbnRzKGNkcihsKSkpCisKKyMgQ29udmVydCBhIGxpc3Qgb2YgdmFsdWVzIHJlcHJlc2VudGluZyBhbiBSU1MgZW50cnkgdG8gYW4gUlNTIGVudHJ5CitkZWYgd3JpdGVSU1NFbnRyeShsKToKKyAgICByZXR1cm4gd3JpdGVYTUwoKGVudHJ5RWxlbWVudChsKSwpLCBUcnVlKQorCisjIENvbnZlcnQgYSBsaXN0IG9mIHZhbHVlcyByZXByZXNlbnRpbmcgYW4gUlNTIGZlZWQgdG8gYW4gUlNTIGZlZWQKK2RlZiB3cml0ZVJTU0ZlZWQobCk6CisgICAgYyA9ICgoZWxlbWVudCwgIid0aXRsZSIsIGNhcihsKSksCisgICAgICAgICAgICAoZWxlbWVudCwgIidsaW5rIiwgY2FkcihsKSksCisgICAgICAgICAgICAoZWxlbWVudCwgIidkZXNjcmlwdGlvbiIsIGNhcihsKSkpCisgICAgY2UgPSBjIGlmIGlzTmlsKGNkZHIobCkpIGVsc2UgYXBwZW5kKGMsIGVudHJpZXNFbGVtZW50cyhjZGRyKGwpKSkKKyAgICBmZSA9IChlbGVtZW50LCAiJ3JzcyIsIChhdHRyaWJ1dGUsICIndmVyc2lvbiIsICIyLjAiKSwgYXBwZW5kKChlbGVtZW50LCAiJ2NoYW5uZWwiKSwgY2UpKQorICAgIHJldHVybiB3cml0ZVhNTCgoZmUsKSwgVHJ1ZSkKKworIyBDb252ZXJ0IGFuIFJTUyBlbnRyeSBjb250YWluaW5nIGEgdmFsdWUgdG8gYW4gUlNTIGVudHJ5IGNvbnRhaW5pbmcgYW4gaXRlbSBlbGVtZW50CitkZWYgZW50cnlWYWx1ZXNUb0VsZW1lbnRzKHYpOgorICAgIHJldHVybiBjb25zKGNhcih2KSwgY29ucyhjYWRyKHYpLCB2YWx1ZXNUb0VsZW1lbnRzKChjb25zKCInaXRlbSIsIGNhZGRyKHYpKSwpKSkpCisKKyMgQ29udmVydCBhbiBSU1MgZmVlZCBjb250YWluaW5nIHZhbHVlcyB0byBhbiBSU1MgZmVlZCBjb250YWluaW5nIGVsZW1lbnRzCitkZWYgZmVlZFZhbHVlc1RvRWxlbWVudHNMb29wKHYpOgorICAgIGlmIGlzTmlsKHYpOgorICAgICAgICByZXR1cm4gdgorICAgIHJldHVybiBjb25zKGVudHJ5VmFsdWVzVG9FbGVtZW50cyhjYXIodikpLCBmZWVkVmFsdWVzVG9FbGVtZW50c0xvb3AoY2RyKHYpKSkKKworZGVmIGZlZWRWYWx1ZXNUb0VsZW1lbnRzKHYpOgorICAgIHJldHVybiBjb25zKGNhcih2KSwgY29ucyhjYWRyKHYpLCBmZWVkVmFsdWVzVG9FbGVtZW50c0xvb3AoY2Rkcih2KSkpKQorCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy91dGlsLnB5IGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjAxMDFlCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvdXRpbC5weQpAQCAtMCwwICsxLDE0NSBAQAorIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAgCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgICAKKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyAgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgU2ltcGxlIHV0aWxpdHkgZnVuY3Rpb25zCitmcm9tIHN5cyBpbXBvcnQgbWF4aW50CisKKyMgU2NoZW1lLWxpa2UgbGlzdHMKK2RlZiBjb25zKGEsIGIpOgorICAgIHJldHVybiAoYSwpICsgYgorCitkZWYgY2FyKGwpOgorICAgIHJldHVybiBsWzBdCisKK2RlZiBmaXJzdChsKToKKyAgICByZXR1cm4gY2FyKGwpCisgICAgCitkZWYgY2RyKGwpOgorICAgIHJldHVybiBsWzE6XQorCitkZWYgcmVzdChsKToKKyAgICByZXR1cm4gY2RyKGwpCisKK2RlZiBjYWRyKGwpOgorICAgIHJldHVybiBjYXIoY2RyKGwpKQorCitkZWYgY2RkcihsKToKKyAgICByZXR1cm4gY2RyKGNkcihsKSkKKworZGVmIGNhZGRyKGwpOgorICAgIHJldHVybiBjYXIoY2RkcihsKSkKKworZGVmIGFwcGVuZChhLCBiKToKKyAgICByZXR1cm4gYSArIGIKKworZGVmIHJldmVyc2UobCk6CisgICAgciA9IGxpc3QobCkKKyAgICByLnJldmVyc2UoKQorICAgIHJldHVybiB0dXBsZShyKQorCitkZWYgaXNOaWwobCk6CisgICAgaWYgaXNpbnN0YW5jZShsLCBzdHJlYW1wYWlyKToKKyAgICAgICAgcmV0dXJuIGwuaXNOaWwoKQorICAgIHJldHVybiBsID09ICgpCisKK2RlZiBpc1N5bWJvbCh2KToKKyAgICByZXR1cm4gaXNpbnN0YW5jZSh2LCBiYXNlc3RyaW5nKSBhbmQgdlswOjFdID09ICInIgorCitkZWYgaXNMaXN0KHYpOgorICAgIGlmIGdldGF0dHIodiwgJ19faXRlcl9fJywgRmFsc2UpID09IEZhbHNlOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiBpc2luc3RhbmNlKHYsIGJhc2VzdHJpbmcpIG9yIGlzaW5zdGFuY2UodiwgZGljdCk6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIHJldHVybiBUcnVlCisKK2RlZiBpc1RhZ2dlZExpc3QodiwgdCk6CisgICAgcmV0dXJuIGlzTGlzdCh2KSBhbmQgbm90IGlzTmlsKHYpIGFuZCBjYXIodikgPT0gdAorCisKKyMgU2NoZW1lLWxpa2Ugc3RyZWFtcworY2xhc3Mgc3RyZWFtcGFpcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjYXIsIGNkcik6CisgICAgICAgIHNlbGYuY2FyID0gY2FyCisgICAgICAgIHNlbGYuY2RyID0gY2RyCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiByZXByKHNlbGZbMDpsZW4oc2VsZildKQorCisgICAgZGVmIGlzTmlsKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5jZHIgPT0gKCkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmNkciA9PSAoKToKKyAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHJldHVybiAxICsgbGVuKHNlbGYuY2RyKCkpCisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6CisgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNhcgorICAgICAgICByZXR1cm4gc2VsZi5jZHIoKVtpIC0gMV0KKworICAgIGRlZiBfX2dldHNsaWNlX18oc2VsZiwgaSwgaik6CisgICAgICAgIGlmIGlzTmlsKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuICgpCisgICAgICAgIGlmIGkgPiAwOgorICAgICAgICAgICAgaWYgaiA9PSBtYXhpbnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuY2RyKClbaSAtIDE6IGpdCisgICAgICAgICAgICByZXR1cm4gc2VsZi5jZHIoKVtpIC0gMTogaiAtIDFdCisgICAgICAgIGlmIGogPT0gbWF4aW50OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgaWYgaiA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIChzZWxmLmNhciwpCisgICAgICAgIHJldHVybiAoc2VsZi5jYXIsKSArIHNlbGYuY2RyKClbOiBqIC0gMV0KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzbCA9IGxlbihzZWxmKQorICAgICAgICBvbCA9IGxlbihvdGhlcikKKyAgICAgICAgaWYgc2wgIT0gb2w6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIHNlbGZbMDogc2xdID09IG90aGVyWzA6IG9sXQorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCisKK2RlZiBjb25zX3N0cmVhbShjYXIsIGNkcik6CisgICAgcmV0dXJuIHN0cmVhbXBhaXIoY2FyLCBjZHIpCisKKworIyBTY2hlbWUtbGlrZSBhc3NvY2lhdGlvbnMKK2RlZiBhc3NvYyhrLCBsKToKKyAgICBpZiBsID09ICgpOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgaWYgayA9PSBjYXIoY2FyKGwpKToKKyAgICAgICAgcmV0dXJuIGNhcihsKQorICAgIHJldHVybiBhc3NvYyhrLCBjZHIobCkpCisKKyMgQ3VycnlpbmcgLyBwYXJ0aWFsIGZ1bmN0aW9uIGFwcGxpY2F0aW9uCitkZWYgY3VycnkoZiwgKmFyZ3MpOgorICAgIHJldHVybiBsYW1iZGEgKmE6IGYoKihhcmdzICsgYSkpCisKKyMgU3BsaXQgYSBwYXRoIGludG8gYSBsaXN0IG9mIHNlZ21lbnRzCitkZWYgdG9rZW5zKHBhdGgpOgorICAgIHJldHVybiB0dXBsZShmaWx0ZXIobGFtYmRhIHM6IGxlbihzKSAhPSAwLCBwYXRoLnNwbGl0KCIvIikpKQorCisjIFdyaXRlIGEgbGlzdCBvZiBzdHJpbmdzIHRvIGEgc3RyZWFtCitkZWYgd3JpdGVTdHJpbmdzKGwsIG9zKToKKyAgICBpZiBsID09ICgpOgorICAgICAgICByZXR1cm4gb3MKKyAgICBvcy53cml0ZShjYXIobCkpCisgICAgcmV0dXJuIHdyaXRlU3RyaW5ncyhjZHIobCksIG9zKQorCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy94bWx1dGlsLnB5IGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMveG1sdXRpbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWJjMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMveG1sdXRpbC5weQpAQCAtMCwwICsxLDExNCBAQAorIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAgCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgICAKKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyAgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgWE1MIGhhbmRsaW5nIGZ1bmN0aW9ucworCitmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSB4bWwucGFyc2VycyBpbXBvcnQgZXhwYXQKK2ltcG9ydCB4bWwuZXRyZWUuRWxlbWVudFRyZWUgYXMgZXQKK2Zyb20gdXRpbCBpbXBvcnQgKgorZnJvbSBlbGVtdXRpbCBpbXBvcnQgKgorCisjIFJlYWQgYSBsaXN0IG9mIFhNTCBhdHRyaWJ1dGVzCitkZWYgcmVhZEF0dHJpYnV0ZXMoYSk6CisgICAgaWYgYSA9PSAoKToKKyAgICAgICAgcmV0dXJuIGEKKyAgICByZXR1cm4gY29ucygoYXR0cmlidXRlLCAiJyIgKyBjYXIoY2FyKGEpKSwgY2FkcihjYXIoYSkpKSwgcmVhZEF0dHJpYnV0ZXMoY2RyKGEpKSkKKworIyBSZWFkIGFuIFhNTCBlbGVtZW50CitkZWYgcmVhZEVsZW1lbnQoZSk6CisgICAgbCA9IChlbGVtZW50LCAiJyIgKyBlLnRhZykgKyByZWFkQXR0cmlidXRlcyh0dXBsZShlLml0ZW1zKCkpKSArIHJlYWRFbGVtZW50cyh0dXBsZShlLmdldGNoaWxkcmVuKCkpKQorICAgIGlmIGUudGV4dCA9PSBOb25lOgorICAgICAgICByZXR1cm4gbAorICAgIHJldHVybiBsICsgKGUudGV4dCwpCisKKyMgUmVhZCBhIGxpc3Qgb2YgWE1MIGVsZW1lbnRzCitkZWYgcmVhZEVsZW1lbnRzKGwpOgorICAgIGlmIGwgPT0gKCk6CisgICAgICAgIHJldHVybiBsCisgICAgcmV0dXJuIGNvbnMocmVhZEVsZW1lbnQoY2FyKGwpKSwgcmVhZEVsZW1lbnRzKGNkcihsKSkpCisKKyMgUGFyc2UgYSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIGFuIFhNTCBkb2N1bWVudAorY2xhc3MgTmFtZXNwYWNlUGFyc2VyKGV0LlhNTFRyZWVCdWlsZGVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIGV0LlhNTFRyZWVCdWlsZGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuX3BhcnNlciA9IHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZShOb25lKQorICAgICAgICBwYXJzZXIuRGVmYXVsdEhhbmRsZXJFeHBhbmQgPSBzZWxmLl9kZWZhdWx0CisgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5fc3RhcnQKKyAgICAgICAgcGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gc2VsZi5fZW5kCisgICAgICAgIHBhcnNlci5DaGFyYWN0ZXJEYXRhSGFuZGxlciA9IHNlbGYuX2RhdGEKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGFyc2VyLmJ1ZmZlcl90ZXh0ID0gMQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCisgICAgICAgICAgICBwYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMgPSAxCisgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuX3N0YXJ0X2xpc3QKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworCitkZWYgcGFyc2VYTUwobCk6CisgICAgcyA9IFN0cmluZ0lPKCkKKyAgICB3cml0ZVN0cmluZ3MobCwgcykKKyAgICBwYXJzZXIgPSBOYW1lc3BhY2VQYXJzZXIoKQorICAgIHBhcnNlci5mZWVkKHMuZ2V0dmFsdWUoKSkKKyAgICByZXR1cm4gcGFyc2VyLmNsb3NlKCkKKworIyBSZWFkIGEgbGlzdCBvZiB2YWx1ZXMgZnJvbSBhIGxpc3Qgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgYW4gWE1MIGRvY3VtZW50CitkZWYgcmVhZFhNTChsKToKKyAgICBlID0gcGFyc2VYTUwobCkKKyAgICByZXR1cm4gKHJlYWRFbGVtZW50KGUpLCkKKworIyBXcml0ZSBhIGxpc3Qgb2YgWE1MIGVsZW1lbnQgYW5kIGF0dHJpYnV0ZSB0b2tlbnMKK2RlZiBleHBhbmRFbGVtZW50VmFsdWVzKG4sIGwpOgorICAgIGlmIGlzTmlsKGwpOgorICAgICAgICByZXR1cm4gbAorICAgIHJldHVybiBjb25zKGNvbnMoZWxlbWVudCwgY29ucyhuLCBjYXIobCkpKSwgZXhwYW5kRWxlbWVudFZhbHVlcyhuLCBjZHIobCkpKQorCitkZWYgd3JpdGVMaXN0KGwsIHhtbCk6CisgICAgaWYgaXNOaWwobCk6CisgICAgICAgIHJldHVybiB4bWwKKyAgICB0b2tlbiA9IGNhcihsKQorICAgIGlmIGlzVGFnZ2VkTGlzdCh0b2tlbiwgYXR0cmlidXRlKToKKyAgICAgICAgeG1sLmF0dHJpYlthdHRyaWJ1dGVOYW1lKHRva2VuKVsxOl1dID0gc3RyKGF0dHJpYnV0ZVZhbHVlKHRva2VuKSkKKyAgICBlbGlmIGlzVGFnZ2VkTGlzdCh0b2tlbiwgZWxlbWVudCk6CisgICAgICAgIGlmIGVsZW1lbnRIYXNWYWx1ZSh0b2tlbik6CisgICAgICAgICAgICB2ID0gZWxlbWVudFZhbHVlKHRva2VuKQorICAgICAgICAgICAgaWYgaXNMaXN0KHYpOgorICAgICAgICAgICAgICAgIGUgPSBleHBhbmRFbGVtZW50VmFsdWVzKGVsZW1lbnROYW1lKHRva2VuKSwgdikKKyAgICAgICAgICAgICAgICB3cml0ZUxpc3QoZSwgeG1sKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjaGlsZCA9IGV0LkVsZW1lbnQoZWxlbWVudE5hbWUodG9rZW4pWzE6XSkKKyAgICAgICAgICAgICAgICB3cml0ZUxpc3QoZWxlbWVudENoaWxkcmVuKHRva2VuKSwgY2hpbGQpCisgICAgICAgICAgICAgICAgeG1sLmFwcGVuZChjaGlsZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoaWxkID0gZXQuRWxlbWVudChlbGVtZW50TmFtZSh0b2tlbilbMTpdKQorICAgICAgICAgICAgd3JpdGVMaXN0KGVsZW1lbnRDaGlsZHJlbih0b2tlbiksIGNoaWxkKQorICAgICAgICAgICAgeG1sLmFwcGVuZChjaGlsZCkKKyAgICBlbHNlOgorICAgICAgICB4bWwudGV4dCA9IHN0cih0b2tlbikKKyAgICB3cml0ZUxpc3QoY2RyKGwpLCB4bWwpCisgICAgcmV0dXJuIHhtbAorCisjIENvbnZlcnQgYSBsaXN0IG9mIHZhbHVlcyB0byBhIGxpc3Qgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgYW4gWE1MIGRvY3VtZW50CitkZWYgd3JpdGVYTUwobCwgeG1sVGFnKToKKyAgICBlID0gd3JpdGVMaXN0KGwsIFtdKQorICAgIGlmIG5vdCB4bWxUYWc6CisgICAgICAgIHJldHVybiAoZXQudG9zdHJpbmcoY2FyKGUpKSwpCisgICAgcmV0dXJuIChldC50b3N0cmluZyhjYXIoZSksICJVVEYtOCIpICsgIlxuIiwpCisKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9wcm92aWRlci9DbGllbnRUZXN0LmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvQ2xpZW50VGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2OWNlMzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvQ2xpZW50VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLnByb3ZpZGVyOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7CisKKy8qKgorICogVGVzdCBKYXZhIGNvbXBvbmVudC4KKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBDbGllbnRUZXN0IGltcGxlbWVudHMgRWNob1Rlc3QgeworCisgICAgQFJlZmVyZW5jZQorICAgIHB1YmxpYyBFY2hvVGVzdCByZWY7CisKKyAgICBwdWJsaWMgU3RyaW5nIGVjaG8oZmluYWwgU3RyaW5nIHMxLCBmaW5hbCBTdHJpbmcgczIpIHsKKyAgICAgICAgcmV0dXJuIHJlZi5lY2hvKHMxLCBzMik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL3Byb3ZpZGVyL0VjaG9UZXN0LmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvRWNob1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTdiYzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL3Byb3ZpZGVyL0VjaG9UZXN0LmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob24ucHJvdmlkZXI7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKKworLyoqCisgKiBUZXN0IGNsaWVudCBpbnRlcmZhY2UuCisgKiAKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIEVjaG9UZXN0IHsKKworICAgIHB1YmxpYyBTdHJpbmcgZWNobyhTdHJpbmcgczEsIFN0cmluZyBzMik7Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvSW52b2tlVGVzdENhc2UuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9wcm92aWRlci9JbnZva2VUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGIwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vcHJvdmlkZXIvSW52b2tlVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDkzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLnByb3ZpZGVyOworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb25Mb2NhdGlvbkhlbHBlci5nZXRDb250cmlidXRpb25Mb2NhdGlvbjsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKK2ltcG9ydCBvcmcuamFic29yYi5jbGllbnQuQ2xpZW50OworaW1wb3J0IG9yZy5qYWJzb3JiLmNsaWVudC5TZXNzaW9uOworaW1wb3J0IG9yZy5qYWJzb3JiLmNsaWVudC5UcmFuc3BvcnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogVGVzdHMgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlci4KKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBJbnZva2VUZXN0Q2FzZSB7CisgICAgc3RhdGljIE5vZGUgbm9kZTsKKworICAgIEBCZWZvcmVDbGFzcworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgU3RyaW5nIGxvYyA9IGdldENvbnRyaWJ1dGlvbkxvY2F0aW9uKCJkb21haW4tdGVzdC5jb21wb3NpdGUiKTsKKyAgICAgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoImRvbWFpbi10ZXN0LmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oImMiLCBsb2MpKTsKKyAgICAgICAgICAgIG5vZGUuc3RhcnQoKTsKKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAQWZ0ZXJDbGFzcworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBub2RlLnN0b3AoKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTZXJ2aWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFNlc3Npb24gcyA9IFRyYW5zcG9ydFJlZ2lzdHJ5LmkoKS5jcmVhdGVTZXNzaW9uKCJodHRwOi8vbG9jYWxob3N0OjgwODAvcHl0aG9uIik7CisgICAgICAgIGZpbmFsIENsaWVudCBjID0gbmV3IENsaWVudChzKTsKKyAgICAgICAgZmluYWwgT2JqZWN0IHB4ID0gYy5vcGVuUHJveHkoIiIsIEVjaG9UZXN0LmNsYXNzKTsKKyAgICAgICAgZmluYWwgT2JqZWN0IHIgPSBjLmludm9rZShweCwgRWNob1Rlc3QuY2xhc3MuZ2V0TWV0aG9kKCJlY2hvIiwgU3RyaW5nLmNsYXNzLCBTdHJpbmcuY2xhc3MpLCBuZXcgT2JqZWN0W10geyJIZXkiLCAiVGhlcmUifSk7CisgICAgICAgIGMuY2xvc2VQcm94eShweCk7CisgICAgICAgIHMuY2xvc2UoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJIZXkgVGhlcmUiLCByKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RSZWZlcmVuY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU2Vzc2lvbiBzID0gVHJhbnNwb3J0UmVnaXN0cnkuaSgpLmNyZWF0ZVNlc3Npb24oImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jbGllbnQiKTsKKyAgICAgICAgZmluYWwgQ2xpZW50IGMgPSBuZXcgQ2xpZW50KHMpOworICAgICAgICBmaW5hbCBPYmplY3QgcHggPSBjLm9wZW5Qcm94eSgiIiwgRWNob1Rlc3QuY2xhc3MpOworICAgICAgICBmaW5hbCBPYmplY3QgciA9IGMuaW52b2tlKHB4LCBFY2hvVGVzdC5jbGFzcy5nZXRNZXRob2QoImVjaG8iLCBTdHJpbmcuY2xhc3MsIFN0cmluZy5jbGFzcyksIG5ldyBPYmplY3RbXSB7IkhleSIsICJUaGVyZSJ9KTsKKyAgICAgICAgYy5jbG9zZVByb3h5KHB4KTsKKyAgICAgICAgcy5jbG9zZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkhleSBUaGVyZSIsIHIpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdExvY2FsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFNlc3Npb24gcyA9IFRyYW5zcG9ydFJlZ2lzdHJ5LmkoKS5jcmVhdGVTZXNzaW9uKCJodHRwOi8vbG9jYWxob3N0OjgwODAvamF2YS1jbGllbnQiKTsKKyAgICAgICAgZmluYWwgQ2xpZW50IGMgPSBuZXcgQ2xpZW50KHMpOworICAgICAgICBmaW5hbCBPYmplY3QgcHggPSBjLm9wZW5Qcm94eSgiIiwgRWNob1Rlc3QuY2xhc3MpOworICAgICAgICBmaW5hbCBPYmplY3QgciA9IGMuaW52b2tlKHB4LCBFY2hvVGVzdC5jbGFzcy5nZXRNZXRob2QoImVjaG8iLCBTdHJpbmcuY2xhc3MsIFN0cmluZy5jbGFzcyksIG5ldyBPYmplY3RbXSB7IkhleSIsICJUaGVyZSJ9KTsKKyAgICAgICAgYy5jbG9zZVByb3h5KHB4KTsKKyAgICAgICAgcy5jbG9zZSgpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkhleSBUaGVyZSIsIHIpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL3Byb3ZpZGVyL1NlcnZlclRlc3QuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9wcm92aWRlci9TZXJ2ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBmM2I1OAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9wcm92aWRlci9TZXJ2ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob24ucHJvdmlkZXI7CisKKy8qKgorICogVGVzdCBKYXZhIGNvbXBvbmVudC4KKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTZXJ2ZXJUZXN0IGltcGxlbWVudHMgRWNob1Rlc3QgeworCisgICAgcHVibGljIFN0cmluZyBlY2hvKGZpbmFsIFN0cmluZyBzMSwgZmluYWwgU3RyaW5nIHMyKSB7CisgICAgICAgIHJldHVybiBzMSArICIgIiArIHMyOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL2NsaWVudF90ZXN0LnB5IGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvY2xpZW50X3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTNjYmFmMAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL2NsaWVudF90ZXN0LnB5CkBAIC0wLDAgKzEsMzUgQEAKKyMgIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyAgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgIAorIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgICAgCisjICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjICBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjICBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgIHVuZGVyIHRoZSBMaWNlbnNlLgorCisjIEpTT04tUlBDIHRlc3QgY2FzZQorCitkZWYgZWNobyh4LCB5LCByZWYpOgorICAgIHJldHVybiByZWYoImVjaG8iLCB4LCB5KQorCisjIEFUT01QdWIgdGVzdCBjYXNlCisKK2RlZiBnZXQoaWQsIHJlZik6CisgICAgcmV0dXJuIHJlZigiZ2V0IiwgaWQpCisKK2RlZiBwb3N0KGNvbGxlY3Rpb24sIGl0ZW0sIHJlZik6CisgICAgcmV0dXJuIHJlZigicG9zdCIsIGNvbGxlY3Rpb24sIGl0ZW0pCisKK2RlZiBwdXQoaWQsIGl0ZW0sIHJlZik6CisgICAgcmV0dXJuIHJlZigicHV0IiwgaWQsIGl0ZW0pCisKK2RlZiBkZWxldGUoaWQsIHJlZik6CisgICAgcmV0dXJuIHJlZigiZGVsZXRlIiwgaWQpCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9kb21haW4tdGVzdC5jb21wb3NpdGUgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9kb21haW4tdGVzdC5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZjZjRmOAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL3Rlc3QvcmVzb3VyY2VzL2RvbWFpbi10ZXN0LmNvbXBvc2l0ZQpAQCAtMCwwICsxLDY0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICB4bWxuczp0PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCisgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2RvbWFpbi90ZXN0IgorICBuYW1lPSJkb21haW4tdGVzdCI+CisgICAgICAgIAorICAgIDxjb21wb25lbnQgbmFtZT0icHl0aG9uLXRlc3QiPgorICAgICAgICA8dDppbXBsZW1lbnRhdGlvbi5weXRob24gc2NyaXB0PSJzZXJ2ZXJfdGVzdC5weSIvPgorICAgICAgICA8c2VydmljZSBuYW1lPSJ0ZXN0Ij4KKyAgICAgICAgICAgIDx0OmJpbmRpbmcuanNvbnJwYyB1cmk9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9weXRob24iLz4KKyAgICAgICAgPC9zZXJ2aWNlPgorICAgIDwvY29tcG9uZW50PiAgICAgCisKKyAgICA8Y29tcG9uZW50IG5hbWU9ImNsaWVudC10ZXN0Ij4KKyAgICAgICAgPHQ6aW1wbGVtZW50YXRpb24ucHl0aG9uIHNjcmlwdD0iY2xpZW50X3Rlc3QucHkiLz4KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iY2xpZW50Ij4KKyAgICAgICAgICAgIDx0OmJpbmRpbmcuanNvbnJwYyB1cmk9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jbGllbnQiLz4KKyAgICAgICAgPC9zZXJ2aWNlPgorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InJlZiIgdGFyZ2V0PSJweXRob24tdGVzdCI+CisgICAgICAgIDwvcmVmZXJlbmNlPgorICAgIDwvY29tcG9uZW50PgorCisgICAgPGNvbXBvbmVudCBuYW1lPSJqYXZhLXRlc3QiPgorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob24ucHJvdmlkZXIuU2VydmVyVGVzdCIvPgorICAgICAgICA8c2VydmljZSBuYW1lPSJFY2hvVGVzdCI+CisgICAgICAgICAgICA8dDpiaW5kaW5nLmpzb25ycGMgdXJpPSJodHRwOi8vbG9jYWxob3N0OjgwODAvamF2YSIvPgorICAgICAgICA8L3NlcnZpY2U+CisgICAgPC9jb21wb25lbnQ+CisKKyAgICA8Y29tcG9uZW50IG5hbWU9InB5dGhvbi10by1qYXZhLXRlc3QiPgorICAgICAgICA8dDppbXBsZW1lbnRhdGlvbi5weXRob24gc2NyaXB0PSJjbGllbnRfdGVzdC5weSIvPgorICAgICAgICA8c2VydmljZSBuYW1lPSJjbGllbnQiPgorICAgICAgICAgICAgPHQ6YmluZGluZy5qc29ucnBjIHVyaT0iaHR0cDovL2xvY2FsaG9zdDo4MDgwL3B5dGhvbi10by1qYXZhIi8+CisgICAgICAgIDwvc2VydmljZT4KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJyZWYiIHRhcmdldD0iamF2YS10ZXN0Ii8+CisgICAgPC9jb21wb25lbnQ+CisKKyAgICA8Y29tcG9uZW50IG5hbWU9ImphdmEtY2xpZW50LXRlc3QiPgorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob24ucHJvdmlkZXIuQ2xpZW50VGVzdCIvPgorICAgICAgICA8c2VydmljZSBuYW1lPSJFY2hvVGVzdCI+CisgICAgICAgICAgICA8dDpiaW5kaW5nLmpzb25ycGMgdXJpPSJodHRwOi8vbG9jYWxob3N0OjgwODAvamF2YS1jbGllbnQiLz4KKyAgICAgICAgPC9zZXJ2aWNlPgorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InJlZiIgdGFyZ2V0PSJweXRob24tdG8tamF2YS10ZXN0Ii8+CisgICAgPC9jb21wb25lbnQ+CisKKzwvY29tcG9zaXRlPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvc2VydmVyX3Rlc3QucHkgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy90ZXN0L3Jlc291cmNlcy9zZXJ2ZXJfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWY5NzEyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvdGVzdC9yZXNvdXJjZXMvc2VydmVyX3Rlc3QucHkKQEAgLTAsMCArMSw0MiBAQAorIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyAgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjICBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyAgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAgCisjICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAgICAKKyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyAgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyMgSlNPTi1SUEMgdGVzdCBjYXNlCisKK2RlZiBlY2hvKHgsIHkpOgorICAgIHJldHVybiB4ICsgIiAiICsgeQorCisjIEFUT01QdWIgdGVzdCBjYXNlCisKK2RlZiBnZXQoaWQpOgorICAgIGlmIGlkID09ICgpOgorICAgICAgICByZXR1cm4gKCJTYW1wbGUgRmVlZCIsICIxMjM0NTY3ODkiLAorICAgICAgICAgICAgKCJJdGVtIiwgIjExMSIsICgoIidqYXZhQ2xhc3MiLCAic2VydmljZXMuSXRlbSIpLCAoIiduYW1lIiwgIkFwcGxlIiksICgiJ2N1cnJlbmN5Q29kZSIsICJVU0QiKSwgKCInY3VycmVuY3lTeW1ib2wiLCAiJCIpLCAoIidwcmljZSIsIDIuOTkpKSksCisgICAgICAgICAgICAoIkl0ZW0iLCAiMjIyIiwgKCgiJ2phdmFDbGFzcyIsICJzZXJ2aWNlcy5JdGVtIiksICgiJ25hbWUiLCAiT3JhbmdlIiksICgiJ2N1cnJlbmN5Q29kZSIsICJVU0QiKSwgKCInY3VycmVuY3lTeW1ib2wiLCAiJCIpLCAoIidwcmljZSIsIDMuNTUpKSksCisgICAgICAgICAgICAoIkl0ZW0iLCAiMzMzIiwgKCgiJ2phdmFDbGFzcyIsICJzZXJ2aWNlcy5JdGVtIiksICgibmFtZSIsICJQZWFyIiksICgiJ2N1cnJlbmN5Q29kZSIsICJVU0QiKSwgKCInY3VycmVuY3lTeW1ib2wiLCAiJCIpLCAoIidwcmljZSIsIDEuNTUpKSkpCisgICAgICAgIAorICAgIGVudHJ5ID0gKCgiJ2phdmFDbGFzcyIsICJzZXJ2aWNlcy5JdGVtIiksICgiJ25hbWUiLCAiQXBwbGUiKSwgKCInY3VycmVuY3lDb2RlIiwgIlVTRCIpLCAoIidjdXJyZW5jeVN5bWJvbCIsICIkIiksICgiJ3ByaWNlIiwgMi45OSkpCisgICAgcmV0dXJuICgiSXRlbSIsIGlkWzBdLCBlbnRyeSkKKworZGVmIHBvc3QoY29sbGVjdGlvbiwgaXRlbSk6CisgICAgcmV0dXJuICgiMTIzNDU2Nzg5IiwpCisKK2RlZiBwdXQoaWQsIGl0ZW0pOgorICAgIHJldHVybiBUcnVlCisKK2RlZiBkZWxldGUoaWQpOgorICAgIHJldHVybiBUcnVlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvTElDRU5TRSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL0xJQ0VOU0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIG1vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9MSUNFTlNFCnJlbmFtZSB0byBtb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9MSUNFTlNFCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL01FVEEtSU5GL01BTklGRVNULk1GCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZjAyMzgKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDMwIEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitTQ0EtVmVyc2lvbjogMS4xDQorQnVuZGxlLU5hbWU6IEFwYWNoZSBUdXNjYW55IFB5dGhvbiBJbXBsZW1lbnRhdGlvbiBNb2RlbA0KK0J1bmRsZS1WZW5kb3I6IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbg0KK0J1bmRsZS1WZXJzaW9uOiAyLjAuMA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTGljZW5zZTogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dA0KK0J1bmRsZS1EZXNjcmlwdGlvbjogQXBhY2hlIFR1c2NhbnkgU0NBIFB5dGhvbiBJbXBsZW1lbnRhdGlvbiBNb2RlbA0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uDQorQnVuZGxlLURvY1VSTDogaHR0cDovL3d3dy5hcGFjaGUub3JnLw0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNSxKYXZhU0UtMS42CitFeHBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob247dmVyc2lvbj0iMi4wLjAiDQorSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHk7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmJ1aWxkZXI7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb2x2ZXI7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmU7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmpheHJzO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWY7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5pbXBsO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YTt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuaW1wbDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLnV0aWw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3I7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeTt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZTt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EueHNkO3ZlcnNpb249IjIuMC4wIg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL05PVElDRSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL05PVElDRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL05PVElDRQpjb3B5IHRvIG1vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL05PVElDRQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vcG9tLnhtbCBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVhMTdjZgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL3BvbS54bWwKQEAgLTAsMCArMSw4NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktbW9kdWxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1weXRob248L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBQeXRob24gSW1wbGVtZW50YXRpb24gTW9kZWw8L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5LXhtbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1zcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWludGVyZmFjZS1qYXZhPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZy1qc29uPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1tb25pdG9yPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIA0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9QeXRob25FdmFsLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL1B5dGhvbkV2YWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZTljYWFiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9QeXRob25FdmFsLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob247CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKKworLyoqCisgKiBQeXRob24gY29tcG9uZW50IGdlbmVyaWMgZXZhbHVhdGlvbiBpbnRlcmZhY2UuCisgKiAKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIFB5dGhvbkV2YWwgeworCisgICAgcHVibGljIFN0cmluZyBldmFsKFN0cmluZyBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uOworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9QeXRob25JbXBsZW1lbnRhdGlvbi5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9QeXRob25JbXBsZW1lbnRhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1OGMwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL1B5dGhvbkltcGxlbWVudGF0aW9uLmphdmEKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uOworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUHJvcGVydHk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5SZWZlcmVuY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5TZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuaW1wbC5JbXBsZW1lbnRhdGlvbkltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5pbXBsLlByb3BlcnR5SW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGwuUmVmZXJlbmNlSW1wbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGwuU2VydmljZUltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlQ29udHJhY3Q7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuaW1wbC5EYXRhVHlwZUltcGw7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYudXRpbC5YTUxUeXBlOworCisvKioKKyAqIFRoZSBtb2RlbCByZXByZXNlbnRpbmcgYSBQeXRob24gaW1wbGVtZW50YXRpb24gaW4gYW4gU0NBIGFzc2VtYmx5LgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFB5dGhvbkltcGxlbWVudGF0aW9uIGV4dGVuZHMgSW1wbGVtZW50YXRpb25JbXBsIHsKKyAgICBmaW5hbCBTdHJpbmcgc2NyaXB0OworICAgIGZpbmFsIFN0cmluZyBsb2NhdGlvbjsKKyAgICBmaW5hbCBJbnRlcmZhY2VDb250cmFjdCBjb250cmFjdDsKKyAgICBmaW5hbCBTZXJ2aWNlIHNlcnZpY2U7CisKKyAgICBQeXRob25JbXBsZW1lbnRhdGlvbihmaW5hbCBRTmFtZSBxbiwgZmluYWwgU3RyaW5nIHNjciwgZmluYWwgU3RyaW5nIGxvYywgZmluYWwgSW50ZXJmYWNlQ29udHJhY3QgYykgeworICAgICAgICBzdXBlcihxbik7CisgICAgICAgIHNjcmlwdCA9IHNjcjsKKyAgICAgICAgbG9jYXRpb24gPSBsb2M7CisgICAgICAgIGNvbnRyYWN0ID0gYzsKKworICAgICAgICBjbGFzcyBEeW5TZXJ2aWNlIGV4dGVuZHMgU2VydmljZUltcGwgeworICAgICAgICAgICAgcHVibGljIER5blNlcnZpY2UoKSB7CisgICAgICAgICAgICAgICAgc2V0TmFtZSgiZGVmYXVsdCIpOworICAgICAgICAgICAgICAgIHNldEludGVyZmFjZUNvbnRyYWN0KGNvbnRyYWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICA7CisgICAgICAgIHNlcnZpY2UgPSBuZXcgRHluU2VydmljZSgpOworICAgICAgICBnZXRTZXJ2aWNlcygpLmFkZChzZXJ2aWNlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFNjcmlwdCgpIHsKKyAgICAgICAgcmV0dXJuIHNjcmlwdDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uKCkgeworICAgICAgICByZXR1cm4gbG9jYXRpb247CisgICAgfQorCisgICAgcHVibGljIFNlcnZpY2UgZ2V0U2VydmljZShmaW5hbCBTdHJpbmcgbikgeworICAgICAgICByZXR1cm4gc2VydmljZTsKKyAgICB9CisKKyAgICBwdWJsaWMgUmVmZXJlbmNlIGdldFJlZmVyZW5jZShmaW5hbCBTdHJpbmcgbikgeworICAgICAgICBmaW5hbCBSZWZlcmVuY2UgciA9IHN1cGVyLmdldFJlZmVyZW5jZShuKTsKKyAgICAgICAgaWYociAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgIGNsYXNzIER5blJlZmVyZW5jZSBleHRlbmRzIFJlZmVyZW5jZUltcGwgeworICAgICAgICAgICAgcHVibGljIER5blJlZmVyZW5jZSgpIHsKKyAgICAgICAgICAgICAgICBzZXROYW1lKG4pOworICAgICAgICAgICAgICAgIHNldEludGVyZmFjZUNvbnRyYWN0KGNvbnRyYWN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmaW5hbCBSZWZlcmVuY2UgbnIgPSBuZXcgRHluUmVmZXJlbmNlKCk7CisgICAgICAgIGdldFJlZmVyZW5jZXMoKS5hZGQobnIpOworICAgICAgICByZXR1cm4gbnI7CisgICAgfQorCisgICAgcHVibGljIFByb3BlcnR5IGdldFByb3BlcnR5KGZpbmFsIFN0cmluZyBuKSB7CisgICAgICAgIGZpbmFsIFByb3BlcnR5IHAgPSBzdXBlci5nZXRQcm9wZXJ0eShuKTsKKyAgICAgICAgaWYocCAhPSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIGNsYXNzIER5blByb3BlcnR5IGV4dGVuZHMgUHJvcGVydHlJbXBsIHsKKyAgICAgICAgICAgIHB1YmxpYyBEeW5Qcm9wZXJ0eSgpIHsKKyAgICAgICAgICAgICAgICBzZXROYW1lKG4pOworICAgICAgICAgICAgICAgIHNldERhdGFUeXBlKG5ldyBEYXRhVHlwZUltcGw8WE1MVHlwZT4obnVsbCwgU3RyaW5nLmNsYXNzLCBTdHJpbmcuY2xhc3MsIFhNTFR5cGUuVU5LTk9XTikpOworICAgICAgICAgICAgICAgIHNldFhTRFR5cGUobmV3IFFOYW1lKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsICJzdHJpbmciKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZmluYWwgUHJvcGVydHkgbnAgPSBuZXcgRHluUHJvcGVydHkoKTsKKyAgICAgICAgZ2V0UHJvcGVydGllcygpLmFkZChucCk7CisgICAgICAgIHJldHVybiBucDsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL1B5dGhvbkltcGxlbWVudGF0aW9uUHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL1B5dGhvbkltcGxlbWVudGF0aW9uUHJvY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRkYWFiMwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vUHl0aG9uSW1wbGVtZW50YXRpb25Qcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob247CisKK2ltcG9ydCBzdGF0aWMgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuRU5EX0VMRU1FTlQ7CitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQmFzZS5TQ0ExMV9UVVNDQU5ZX05TOworCitpbXBvcnQgamF2YS5uZXQuVVJJOworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbUV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTFN0cmVhbVdyaXRlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5CYXNlU3RBWEFydGlmYWN0UHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuUHJvY2Vzc29yQ29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLk1vZGVsUmVzb2x2ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkZhY3RvcnlFeHRlbnNpb25Qb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLmpzb24uSlNPTkRhdGFCaW5kaW5nOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZUNvbnRyYWN0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludmFsaWRJbnRlcmZhY2VFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2VGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuaW1wbC5KYXZhSW50ZXJmYWNlSW1wbDsKKworLyoqCisgKiBJbXBsZW1lbnRzIGEgU3RBWCBhcnRpZmFjdCBwcm9jZXNzb3IgZm9yIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMuCisgKiAKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgUHl0aG9uSW1wbGVtZW50YXRpb25Qcm9jZXNzb3IgZXh0ZW5kcyBCYXNlU3RBWEFydGlmYWN0UHJvY2Vzc29yIGltcGxlbWVudHMgU3RBWEFydGlmYWN0UHJvY2Vzc29yPFB5dGhvbkltcGxlbWVudGF0aW9uPiB7CisgICAgc3RhdGljIFFOYW1lIFFOID0gbmV3IFFOYW1lKFNDQTExX1RVU0NBTllfTlMsICJpbXBsZW1lbnRhdGlvbi5weXRob24iKTsKKworICAgIGZpbmFsIEludGVyZmFjZUNvbnRyYWN0IGNvbnRyYWN0OworCisgICAgcHVibGljIFB5dGhvbkltcGxlbWVudGF0aW9uUHJvY2Vzc29yKGZpbmFsIEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXApIHRocm93cyBJbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgRmFjdG9yeUV4dGVuc2lvblBvaW50IGZlcCA9IGVwLmdldEV4dGVuc2lvblBvaW50KEZhY3RvcnlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CisgICAgICAgIGZpbmFsIEphdmFJbnRlcmZhY2VGYWN0b3J5IGpmID0gZmVwLmdldEZhY3RvcnkoSmF2YUludGVyZmFjZUZhY3RvcnkuY2xhc3MpOworICAgICAgICBmaW5hbCBKYXZhSW50ZXJmYWNlIGV2YWwgPSBqZi5jcmVhdGVKYXZhSW50ZXJmYWNlKFB5dGhvbkV2YWwuY2xhc3MpOworCisgICAgICAgIGNsYXNzIER5bmFtaWNJbnRlcmZhY2UgZXh0ZW5kcyBKYXZhSW50ZXJmYWNlSW1wbCB7CisgICAgICAgICAgICBEeW5hbWljSW50ZXJmYWNlKCkgeworICAgICAgICAgICAgICAgIHNldEphdmFDbGFzcyhldmFsLmdldEphdmFDbGFzcygpKTsKKyAgICAgICAgICAgICAgICBzZXROYW1lKGV2YWwuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBzZXRSZW1vdGFibGUoZXZhbC5pc1JlbW90YWJsZSgpKTsKKyAgICAgICAgICAgICAgICBPcGVyYXRpb24gb3AgPSBldmFsLmdldE9wZXJhdGlvbnMoKS5nZXQoMCk7CisgICAgICAgICAgICAgICAgb3Auc2V0RHluYW1pYyh0cnVlKTsKKyAgICAgICAgICAgICAgICBnZXRPcGVyYXRpb25zKCkuYWRkKG9wKTsKKyAgICAgICAgICAgICAgICByZXNldERhdGFCaW5kaW5nKEpTT05EYXRhQmluZGluZy5OQU1FKTsKKyAgICAgICAgICAgICAgICBzZXRVbnJlc29sdmVkKGZhbHNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBpc0R5bmFtaWMoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjb250cmFjdCA9IGpmLmNyZWF0ZUphdmFJbnRlcmZhY2VDb250cmFjdCgpOworICAgICAgICBjb250cmFjdC5zZXRJbnRlcmZhY2UobmV3IER5bmFtaWNJbnRlcmZhY2UoKSk7CisgICAgfQorCisgICAgcHVibGljIFFOYW1lIGdldEFydGlmYWN0VHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIFFOOworICAgIH0KKworICAgIHB1YmxpYyBDbGFzczxQeXRob25JbXBsZW1lbnRhdGlvbj4gZ2V0TW9kZWxUeXBlKCkgeworICAgICAgICByZXR1cm4gUHl0aG9uSW1wbGVtZW50YXRpb24uY2xhc3M7CisgICAgfQorCisgICAgcHVibGljIFB5dGhvbkltcGxlbWVudGF0aW9uIHJlYWQoZmluYWwgWE1MU3RyZWFtUmVhZGVyIHIsIGZpbmFsIFByb2Nlc3NvckNvbnRleHQgY3R4KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHNjciA9IHIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInNjcmlwdCIpOworICAgICAgICB3aGlsZShyLmhhc05leHQoKSAmJiAhKHIubmV4dCgpID09IEVORF9FTEVNRU5UICYmIFFOLmVxdWFscyhyLmdldE5hbWUoKSkpKQorICAgICAgICAgICAgOworICAgICAgICByZXR1cm4gbmV3IFB5dGhvbkltcGxlbWVudGF0aW9uKFFOLCBzY3IsIFVSSS5jcmVhdGUoY3R4LmdldENvbnRyaWJ1dGlvbigpLmdldExvY2F0aW9uKCkpLmdldFBhdGgoKSwgY29udHJhY3QpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlc29sdmUoZmluYWwgUHl0aG9uSW1wbGVtZW50YXRpb24gaW1wbCwgZmluYWwgTW9kZWxSZXNvbHZlciByZXMsIGZpbmFsIFByb2Nlc3NvckNvbnRleHQgY3R4KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgd3JpdGUoZmluYWwgUHl0aG9uSW1wbGVtZW50YXRpb24gaW1wbCwgZmluYWwgWE1MU3RyZWFtV3JpdGVyIHcsIGZpbmFsIFByb2Nlc3NvckNvbnRleHQgY3R4KSB0aHJvd3MgQ29udHJpYnV0aW9uV3JpdGVFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbiB7CisgICAgICAgIHdyaXRlU3RhcnQodywgUU4uZ2V0TmFtZXNwYWNlVVJJKCksIFFOLmdldExvY2FsUGFydCgpLCBuZXcgWEF0dHIoInNjcmlwdCIsIGltcGwuZ2V0U2NyaXB0KCkpKTsKKyAgICAgICAgd3JpdGVFbmQodyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9QeXRob25Qcm9wZXJ0eS5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi9QeXRob25Qcm9wZXJ0eS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZmVlMzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL1B5dGhvblByb3BlcnR5LmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob247CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKKworLyoqCisgKiBQeXRob24gY29tcG9uZW50IHByb3BlcnR5IGV2YWx1YXRpb24gaW50ZXJmYWNlLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworQFJlbW90YWJsZQorcHVibGljIGludGVyZmFjZSBQeXRob25Qcm9wZXJ0eSB7CisKKyAgICBwdWJsaWMgU3RyaW5nIGV2YWwoKTsKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZmNjBiOQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yCkBAIC0wLDAgKzEsMjAgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLiAKKworIyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdGhlIGFydGlmYWN0IHByb2Nlc3NvciBleHRlbnNpb24KK29yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uLlB5dGhvbkltcGxlbWVudGF0aW9uUHJvY2Vzc29yO3FuYW1lPWh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSNpbXBsZW1lbnRhdGlvbi5weXRob24sbW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5weXRob24uUHl0aG9uSW1wbGVtZW50YXRpb24KKwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5WYWxpZGF0aW9uU2NoZW1hIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5WYWxpZGF0aW9uU2NoZW1hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1NDNhNjcKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlZhbGlkYXRpb25TY2hlbWEKQEAgLTAsMCArMSwxOCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyANCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyANCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KKyMNCitvcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi90dXNjYW55LXNjYS0xLjEtaW1wbGVtZW50YXRpb24tcHl0aG9uLnhzZA0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi90dXNjYW55LXNjYS0xLjEtaW1wbGVtZW50YXRpb24tcHl0aG9uLnhzZCBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3B5dGhvbi90dXNjYW55LXNjYS0xLjEtaW1wbGVtZW50YXRpb24tcHl0aG9uLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWU2OWYxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24vc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL3R1c2Nhbnktc2NhLTEuMS1pbXBsZW1lbnRhdGlvbi1weXRob24ueHNkCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKKyAgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICB4bWxuczp0PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCisgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorCisgICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIvPgorCisgICAgPGVsZW1lbnQgbmFtZT0iaW1wbGVtZW50YXRpb24ucHl0aG9uIiB0eXBlPSJ0OlB5dGhvbkltcGxlbWVudGF0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmltcGxlbWVudGF0aW9uIi8+CisKKyAgICA8Y29tcGxleFR5cGUgbmFtZT0iUHl0aG9uSW1wbGVtZW50YXRpb24iPgorICAgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbXBsZW1lbnRhdGlvbiI+CisgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJzY3JpcHQiIHR5cGU9InN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgorICAgICAgICAgICAgPC9leHRlbnNpb24+CisgICAgICAgIDwvY29tcGxleENvbnRlbnQ+CisgICAgPC9jb21wbGV4VHlwZT4KKworPC9zY2hlbWE+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL1JlYWRXcml0ZVRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vcHl0aG9uL1JlYWRXcml0ZVRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU1YTcwZgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9weXRob24vUmVhZFdyaXRlVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDg4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24ucHl0aG9uOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CisKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTElucHV0RmFjdG9yeTsKK2ltcG9ydCBqYXZheC54bWwuc3RyZWFtLlhNTE91dHB1dEZhY3Rvcnk7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5Db250cmlidXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQ29udHJpYnV0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5EZWZhdWx0Q29udHJpYnV0aW9uRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuRGVmYXVsdFN0QVhBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5FeHRlbnNpYmxlU3RBWEFydGlmYWN0UHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Qcm9jZXNzb3JDb250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5EZWZhdWx0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm1vbml0b3IuRGVmYXVsdE1vbml0b3JGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Nb25pdG9yOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoqCisgKiBUZXN0IHJlYWRpbmcvd3JpdGluZyBQeXRob24gaW1wbGVtZW50YXRpb25zLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFJlYWRXcml0ZVRlc3RDYXNlIHsKKyAgICBzdGF0aWMgWE1MSW5wdXRGYWN0b3J5IHhpZjsKKyAgICBzdGF0aWMgWE1MT3V0cHV0RmFjdG9yeSB4b2Y7CisgICAgc3RhdGljIFN0QVhBcnRpZmFjdFByb2Nlc3NvcjxPYmplY3Q+IHhwcm9jOworICAgIHN0YXRpYyBQcm9jZXNzb3JDb250ZXh0IGN0eDsKKworICAgIEBCZWZvcmVDbGFzcworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBEZWZhdWx0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSBlcCA9IG5ldyBEZWZhdWx0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSgpOworICAgICAgICBmaW5hbCBDb250cmlidXRpb25GYWN0b3J5IGNvbnRyaWJGYWN0b3J5ID0gbmV3IERlZmF1bHRDb250cmlidXRpb25GYWN0b3J5KCk7CisgICAgICAgIGZpbmFsIENvbnRyaWJ1dGlvbiBjb250cmliID0gY29udHJpYkZhY3RvcnkuY3JlYXRlQ29udHJpYnV0aW9uKCk7CisgICAgICAgIGNvbnRyaWIuc2V0TG9jYXRpb24oUmVhZFdyaXRlVGVzdENhc2UuY2xhc3MuZ2V0UHJvdGVjdGlvbkRvbWFpbigpLmdldENvZGVTb3VyY2UoKS5nZXRMb2NhdGlvbigpLnRvU3RyaW5nKCkpOworICAgICAgICBmaW5hbCBNb25pdG9yIG1vbiA9IG5ldyBEZWZhdWx0TW9uaXRvckZhY3RvcnkoKS5jcmVhdGVNb25pdG9yKCk7CisgICAgICAgIGN0eCA9IG5ldyBQcm9jZXNzb3JDb250ZXh0KGNvbnRyaWIsIG1vbik7CisgICAgICAgIHhpZiA9IFhNTElucHV0RmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICB4b2YgPSBYTUxPdXRwdXRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgIGZpbmFsIFN0QVhBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50IHhwZXAgPSBuZXcgRGVmYXVsdFN0QVhBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50KGVwKTsKKyAgICAgICAgeHByb2MgPSBuZXcgRXh0ZW5zaWJsZVN0QVhBcnRpZmFjdFByb2Nlc3Nvcih4cGVwLCB4aWYsIHhvZik7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UmVhZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBJbnB1dFN0cmVhbSBpcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJkb21haW4tdGVzdC5jb21wb3NpdGUiKTsKKyAgICAgICAgZmluYWwgQ29tcG9zaXRlIGMgPSAoQ29tcG9zaXRlKXhwcm9jLnJlYWQoeGlmLmNyZWF0ZVhNTFN0cmVhbVJlYWRlcihpcyksIGN0eCk7CisgICAgICAgIGFzc2VydE5vdE51bGwoYyk7CisgICAgICAgIGFzc2VydEVxdWFscygic2VydmVyX3Rlc3QucHkiLCAoKFB5dGhvbkltcGxlbWVudGF0aW9uKWMuZ2V0Q29tcG9uZW50cygpLmdldCgwKS5nZXRJbXBsZW1lbnRhdGlvbigpKS5nZXRTY3JpcHQoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UmVhZFdyaXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIElucHV0U3RyZWFtIGlzID0gZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpLmdldFJlc291cmNlQXNTdHJlYW0oImRvbWFpbi10ZXN0LmNvbXBvc2l0ZSIpOworICAgICAgICBmaW5hbCBDb21wb3NpdGUgYyA9IChDb21wb3NpdGUpeHByb2MucmVhZCh4aWYuY3JlYXRlWE1MU3RyZWFtUmVhZGVyKGlzKSwgY3R4KTsKKyAgICAgICAgZmluYWwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgeHByb2Mud3JpdGUoYywgeG9mLmNyZWF0ZVhNTFN0cmVhbVdyaXRlcihib3MpLCBjdHgpOworICAgICAgICBhc3NlcnRUcnVlKGJvcy50b1N0cmluZygpLmNvbnRhaW5zKCJzY3JpcHQ9XCJzZXJ2ZXJfdGVzdC5weVwiIikpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uL3NyYy90ZXN0L3Jlc291cmNlcy9kb21haW4tdGVzdC5jb21wb3NpdGUgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvdGVzdC9yZXNvdXJjZXMvZG9tYWluLXRlc3QuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTQwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi9zcmMvdGVzdC9yZXNvdXJjZXMvZG9tYWluLXRlc3QuY29tcG9zaXRlCkBAIC0wLDAgKzEsMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisgIHhtbG5zOnQ9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKKyAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vZG9tYWluL3Rlc3QiCisgIG5hbWU9ImRvbWFpbi10ZXN0Ij4KKyAgICAgICAgCisgICAgPGNvbXBvbmVudCBuYW1lPSJweXRob24tdGVzdCI+CisgICAgICAgIDx0OmltcGxlbWVudGF0aW9uLnB5dGhvbiBzY3JpcHQ9InNlcnZlcl90ZXN0LnB5Ii8+CisgICAgICAgIDxzZXJ2aWNlIG5hbWU9InRlc3QiPgorICAgICAgICA8L3NlcnZpY2U+CisgICAgPC9jb21wb25lbnQ+ICAgICAKKworICAgIDxjb21wb25lbnQgbmFtZT0iY2xpZW50LXRlc3QiPgorICAgICAgICA8dDppbXBsZW1lbnRhdGlvbi5weXRob24gc2NyaXB0PSJjbGllbnRfdGVzdC5weSIvPgorICAgICAgICA8c2VydmljZSBuYW1lPSJjbGllbnQiPgorICAgICAgICA8L3NlcnZpY2U+CisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0icmVmIiB0YXJnZXQ9InB5dGhvbi10ZXN0Ij4KKyAgICAgICAgPC9yZWZlcmVuY2U+CisgICAgPC9jb21wb25lbnQ+CisKKzwvY29tcG9zaXRlPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNGEyMjgzNi4uYjU5ODYwNyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0xMSw2ICsxMSwzNSBAQAogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYKIEltcG9ydC1QYWNrYWdlOiBvcmcub2FzaXNvcGVuLnNjYTt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb247dmVyc2lvbj0iMi4wLjAiLA0KKyBqYXZheC54bWwubmFtZXNwYWNlLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5idWlsZGVyO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5pbXBsO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRleHQ7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvcjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmZhY3Rvcnk7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGF0YWJpbmRpbmc7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLmltcGw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZzt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnhtbDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YTt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbmplY3Rpb247dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmE7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmltcGw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3k7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFuczt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCiAgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5O3ZlcnNpb249IjMuMC4yLlJFTEVBU0UiLA0KICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbjt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCkBAIC0xOSw2ICs0OCwxNiBAQAogIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWw7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSIsDQogIG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dDt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCiAgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQ7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSIsDQorIG9yZy5zcHJpbmdmcmFtZXdvcmsuY29yZTt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCiAgb3JnLnNwcmluZ2ZyYW1ld29yay5jb3JlLmlvO3ZlcnNpb249IjMuMC4yLlJFTEVBU0UiLA0KICBvcmcuc3ByaW5nZnJhbWV3b3JrLnV0aWw7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSINCitFeHBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dDt2ZXJzaW9uPSIyLjAuMCI7DQorICB1c2VzOj0ib3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQsDQorICAgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQsDQorICAgb3JnLnNwcmluZ2ZyYW1ld29yay5jb3JlLmlvLA0KKyAgIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLA0KKyAgIG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dCwNCisgICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm92aWRlciwNCisgICBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLA0KKyAgIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeSINCiANCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL1JFQURNRSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWIxZjk4Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1Ob3RlIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIHNwcmluZyBtb2R1bGVzIGhhdmUgYSBkaWZmZXJlbnQgc3RydWN0dXJlIGZyb20gb3RoZXIgZXh0ZW5zaW9ucy4NCi0NCi1UaGUgYWltIGlzIHRvIGhhdmUgdGhlIFR1c2NhbnkgcnVudGltZSBlbWJlZGRlZCBpbiBhIGNvbnRhaW5lciB3aXRoIHRoZSBUdXNjYW55IGNsYXNzZXMgaGlkZGVuDQotZnJvbSB1c2VyIGFwcGxpY2F0aW9ucyBhbmQgdGhlIFNwcmluZyBqYXIncyBwYWNrYWdlZCB3aXRoIHRoZSBhcHBsaWNhdGlvbi4gVGhhdCBtZWFucyB0aGF0IHRoZQ0KLVR1c2NhbnkgY29kZSBoYXMgbm8gdmlzaWJpbHR5IG9mIHRoZSBTcHJpbmcgY2xhc3NlcyBhbmQgdmlzYS12ZXJzYS4gVG8gaW1wbGVtZW50IHRoYXQgdGhlDQotaW1wbGVtZW50YXRpb24tc3ByaW5nIG1vZHVsZSBoYXMgbm8gZGVwZW5kZW5jaWVzIG9uIFNwcmluZyBhbmQgdGhlIGltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lDQotbW9kdWxlIGhhcyBubyBkZXBlbmRlbmNpZXMgb24gVHVzY2FueSAob3RoZXIgdGhhbiB0aGUgc2NhLWFwaSksIGFuZCByZWZsZWN0aW9uIGlzIHVzZWQgdG8gY2FsbA0KLW1ldGhvZHMgYmV0d2VlbiB0aGUgbW9kdWxlcy4NCi0NCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3BvbS54bWwgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3BvbS54bWwKaW5kZXggZTcxMjhlMi4uZjY2MDA0ZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9wb20ueG1sCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvcG9tLnhtbApAQCAtMzAsMjIgKzMwLDEzIEBACiAKICAgICA8ZGVwZW5kZW5jaWVzPgogCi0gICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KLSAgICAgICAgPCEtLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tPgotICAgICAgICA8IS0tICogRE9OVCBBREQgQU5ZIFRVU0NBTlkgREVQRU5ERU5DSUVTISEhICogLS0+Ci0gICAgICAgIDwhLS0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtLT4KLSAgICAgICAgPCEtLSAqIFNlZSB0aGUgUkVBRE1FIGZvciBkZXRhaWxzIHdoeSBub3QgICAqIC0tPgotICAgICAgICA8IS0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0+Ci0gICAgICAgIDwhLS0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtLT4KLSAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgotCi0gICAgICAgIDwhLS0gU0NBIEFQSSBkZXBlbmRlbmN5IC0tPgogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1wb208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gCiAKICAgICAgICAgPCEtLSBTcHJpbmcgZGVwZW5kZW5jaWVzLi4uIC0tPgogICAgICAgICA8ZGVwZW5kZW5jeT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9jb250ZXh0L1NDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9jb250ZXh0L1NDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGEzZWUyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2NvbnRleHQvU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dC5qYXZhCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5jb250ZXh0OworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nQmVhbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ1Byb3BlcnR5RWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLk11dGFibGVQcm9wZXJ0eVZhbHVlczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLlByb3BlcnR5VmFsdWU7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5CZWFuRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkJlYW5SZWZlcmVuY2U7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5Db25maWd1cmFibGVMaXN0YWJsZUJlYW5GYWN0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQ29uc3RydWN0b3JBcmd1bWVudFZhbHVlczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkNvbnN0cnVjdG9yQXJndW1lbnRWYWx1ZXMuVmFsdWVIb2xkZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5UeXBlZFN0cmluZ1ZhbHVlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkRlZmF1bHRMaXN0YWJsZUJlYW5GYWN0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dDsKKworcHVibGljIGNsYXNzIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgZXh0ZW5kcyBHZW5lcmljQXBwbGljYXRpb25Db250ZXh0IHsKKworICAgIHByaXZhdGUgQ2xhc3NMb2FkZXIgY2xhc3Nsb2FkZXIgPSBudWxsOworICAgIHByaXZhdGUgTGlzdDxTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ+IHByb3BlcnR5RWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0PFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudD4oKTsKKyAgICBwcml2YXRlIExpc3Q8U3ByaW5nU0NBU2VydmljZUVsZW1lbnQ+IHNlcnZpY2VFbGVtZW50cyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nU0NBU2VydmljZUVsZW1lbnQ+KCk7CisgICAgcHJpdmF0ZSBMaXN0PFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ+IHJlZmVyZW5jZUVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50PigpOworICAgIHByaXZhdGUgTGlzdDxTcHJpbmdCZWFuRWxlbWVudD4gYmVhbkVsZW1lbnRzOworCisgICAgcHVibGljIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQoRGVmYXVsdExpc3RhYmxlQmVhbkZhY3RvcnkgYmVhbkZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Db250ZXh0IHBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcikgeworICAgICAgICBzdXBlcihiZWFuRmFjdG9yeSwgcGFyZW50KTsKKyAgICAgICAgdGhpcy5jbGFzc2xvYWRlciA9IGNsYXNzbG9hZGVyOworICAgIH0KKworICAgIHB1YmxpYyBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KEFwcGxpY2F0aW9uQ29udGV4dCBwYXJlbnQsIENsYXNzTG9hZGVyIGNsYXNzbG9hZGVyKSB7CisgICAgICAgIHN1cGVyKHBhcmVudCk7CisgICAgICAgIHRoaXMuY2xhc3Nsb2FkZXIgPSBjbGFzc2xvYWRlcjsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBwb3N0UHJvY2Vzc0JlYW5GYWN0b3J5KENvbmZpZ3VyYWJsZUxpc3RhYmxlQmVhbkZhY3RvcnkgYmVhbkZhY3RvcnkpIHsKKyAgICAgICAgYmVhbkZhY3Rvcnkuc2V0QmVhbkNsYXNzTG9hZGVyKGNsYXNzbG9hZGVyKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRTQ0FQcm9wZXJ0eUVsZW1lbnQoU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50IHByb3BlcnR5RWxlbWVudCkgeworICAgICAgICBwcm9wZXJ0eUVsZW1lbnRzLmFkZChwcm9wZXJ0eUVsZW1lbnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZFNDQVNlcnZpY2VFbGVtZW50KFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50KSB7CisgICAgICAgIHNlcnZpY2VFbGVtZW50cy5hZGQoc2VydmljZUVsZW1lbnQpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZFNDQVJlZmVyZW5jZUVsZW1lbnQoU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudCByZWZlcmVuY2VFbGVtZW50KSB7CisgICAgICAgIHJlZmVyZW5jZUVsZW1lbnRzLmFkZChyZWZlcmVuY2VFbGVtZW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3luY2hyb25pemVkIExpc3Q8U3ByaW5nQmVhbkVsZW1lbnQ+IGdldEJlYW5FbGVtZW50cygpIHsKKyAgICAgICAgaWYgKGJlYW5FbGVtZW50cyA9PSBudWxsKSB7CisgICAgICAgICAgICBiZWFuRWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0PFNwcmluZ0JlYW5FbGVtZW50PigpOworICAgICAgICAgICAgZm9yIChTdHJpbmcgbmFtZSA6IGdldEJlYW5EZWZpbml0aW9uTmFtZXMoKSkgeworICAgICAgICAgICAgICAgIEJlYW5EZWZpbml0aW9uIGRlZiA9IGdldEJlYW5EZWZpbml0aW9uKG5hbWUpOworICAgICAgICAgICAgICAgIFNwcmluZ0JlYW5FbGVtZW50IGJlYW5FbGVtZW50ID0gbmV3IFNwcmluZ0JlYW5FbGVtZW50KG5hbWUsIGRlZi5nZXRCZWFuQ2xhc3NOYW1lKCkpOworICAgICAgICAgICAgICAgIGJlYW5FbGVtZW50cy5hZGQoYmVhbkVsZW1lbnQpOworICAgICAgICAgICAgICAgIGJlYW5FbGVtZW50LnNldEFic3RyYWN0QmVhbihkZWYuaXNBYnN0cmFjdCgpKTsKKyAgICAgICAgICAgICAgICBiZWFuRWxlbWVudC5zZXRGYWN0b3J5QmVhbkF0dHJpYnV0ZShkZWYuZ2V0RmFjdG9yeUJlYW5OYW1lKCkgIT0gbnVsbCk7CisgICAgICAgICAgICAgICAgYmVhbkVsZW1lbnQuc2V0RmFjdG9yeU1ldGhvZEF0dHJpYnV0ZShkZWYuZ2V0RmFjdG9yeU1ldGhvZE5hbWUoKSAhPSBudWxsKTsKKyAgICAgICAgICAgICAgICBiZWFuRWxlbWVudC5zZXRQYXJlbnRBdHRyaWJ1dGUoZGVmLmdldFBhcmVudE5hbWUoKSAhPSBudWxsKTsKKyAgICAgICAgICAgICAgICBiZWFuRWxlbWVudC5zZXRJbm5lckJlYW4oYmVhbkVsZW1lbnQuZ2V0SWQoKSA9PSBudWxsKTsKKworICAgICAgICAgICAgICAgIENvbnN0cnVjdG9yQXJndW1lbnRWYWx1ZXMgYXJncyA9IGRlZi5nZXRDb25zdHJ1Y3RvckFyZ3VtZW50VmFsdWVzKCk7CisgICAgICAgICAgICAgICAgZm9yIChNYXAuRW50cnk8SW50ZWdlciwgVmFsdWVIb2xkZXI+IGU6IGFyZ3MuZ2V0SW5kZXhlZEFyZ3VtZW50VmFsdWVzKCkuZW50cnlTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZUhvbGRlciBob2xkZXIgPSBlLmdldFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIFNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudCBhcmcgPSBuZXcgU3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50KGhvbGRlci5nZXRUeXBlKCkpOworICAgICAgICAgICAgICAgICAgICBhcmcuc2V0SW5kZXgoZS5nZXRLZXkoKSk7CisgICAgICAgICAgICAgICAgICAgIGJlYW5FbGVtZW50LmFkZEN1c3RydWN0b3JBcmdzKGFyZyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgTXV0YWJsZVByb3BlcnR5VmFsdWVzIHZhbHVlcyA9IGRlZi5nZXRQcm9wZXJ0eVZhbHVlcygpOworICAgICAgICAgICAgICAgIGZvciAoUHJvcGVydHlWYWx1ZSBwIDogdmFsdWVzLmdldFByb3BlcnR5VmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3ByaW5nUHJvcGVydHlFbGVtZW50IHByb3BlcnR5RWxlbWVudCA9IG5ldyBTcHJpbmdQcm9wZXJ0eUVsZW1lbnQocC5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgICAgICBPYmplY3QgdmFsdWUgPSBwLmdldFZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZVByb3BlcnR5RWxlbWVudChwcm9wZXJ0eUVsZW1lbnQsIHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgYmVhbkVsZW1lbnQuZ2V0UHJvcGVydGllcygpLmFkZChwcm9wZXJ0eUVsZW1lbnQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmVhbkVsZW1lbnRzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNvbmZpZ3VyZVByb3BlcnR5RWxlbWVudChTcHJpbmdQcm9wZXJ0eUVsZW1lbnQgcHJvcGVydHlFbGVtZW50LCBPYmplY3QgdmFsdWUpIHsKKyAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQmVhblJlZmVyZW5jZSkgeworICAgICAgICAgICAgQmVhblJlZmVyZW5jZSBiZWFuUmVmID0gKEJlYW5SZWZlcmVuY2UpdmFsdWU7CisgICAgICAgICAgICBwcm9wZXJ0eUVsZW1lbnQuYWRkUmVmKGJlYW5SZWYuZ2V0QmVhbk5hbWUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBDb2xsZWN0aW9uKSB7CisgICAgICAgICAgICBDb2xsZWN0aW9uIGNvbGxlY3Rpb24gPSAoQ29sbGVjdGlvbil2YWx1ZTsKKyAgICAgICAgICAgIGZvciAoT2JqZWN0IGl0ZW0gOiBjb2xsZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgY29uZmlndXJlUHJvcGVydHlFbGVtZW50KHByb3BlcnR5RWxlbWVudCwgaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBUeXBlZFN0cmluZ1ZhbHVlKSB7CisgICAgICAgICAgICBUeXBlZFN0cmluZ1ZhbHVlIHN0cmluZ1ZhbHVlID0gKFR5cGVkU3RyaW5nVmFsdWUpdmFsdWU7CisgICAgICAgICAgICBwcm9wZXJ0eUVsZW1lbnQuYWRkVmFsdWUoc3RyaW5nVmFsdWUuZ2V0VmFsdWUoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHByb3BlcnR5RWxlbWVudC5hZGRWYWx1ZSh2YWx1ZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudD4gZ2V0UHJvcGVydHlFbGVtZW50cygpIHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5RWxlbWVudHM7CisgICAgfQorCisgICAgcHVibGljIExpc3Q8U3ByaW5nU0NBU2VydmljZUVsZW1lbnQ+IGdldFNlcnZpY2VFbGVtZW50cygpIHsKKyAgICAgICAgcmV0dXJuIHNlcnZpY2VFbGVtZW50czsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50PiBnZXRSZWZlcmVuY2VFbGVtZW50cygpIHsKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZUVsZW1lbnRzOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2NvbnRleHQvU0NBUGFyZW50QXBwbGljYXRpb25Db250ZXh0LmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC9TQ0FQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDgxZmFjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2NvbnRleHQvU0NBUGFyZW50QXBwbGljYXRpb25Db250ZXh0LmphdmEKQEAgLTAsMCArMSwyMTMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmNvbnRleHQ7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb247CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXIuU3ByaW5nSW1wbGVtZW50YXRpb25XcmFwcGVyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuQmVhbnNFeGNlcHRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LkJlYW5GYWN0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5Ob1N1Y2hCZWFuRGVmaW5pdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LkFwcGxpY2F0aW9uRXZlbnQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0Lk1lc3NhZ2VTb3VyY2VSZXNvbHZhYmxlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5Ob1N1Y2hNZXNzYWdlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29yZS5pby5SZXNvdXJjZTsKKworLyoqCisgKiBBIFNwcmluZyBQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQgZm9yIGEgZ2l2ZW4gU3ByaW5nIEltcGxlbWVudGF0aW9uCisgKgorICogVGhlIFBhcmVudCBhcHBsaWNhdGlvbiBjb250ZXh0IGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyB0aG9zZSBlbnRpdGllcyB3aXRoaW4gYSBTcHJpbmcKKyAqIGFwcGxpY2F0aW9uIGNvbnRleHQgdGhhdCBhY3R1YWxseSBiZWxvbmcgdG8gU0NBIHJhdGhlciB0aGFuIHRvIFNwcmluZy4gIFRoZSBwcmluY2lwYWwgdGhpbmdzCisgKiBhcmUgUHJvcGVydGllcyBhbmQgUmVmZXJlbmNlcy4gIFRoZXNlIG1heSBiZSBwcmVzZW50IGVpdGhlciB0aHJvdWdoIGV4cGxpY2l0IDxzY2E6cHJvcGVydHkvPgorICogYW5kIDxzY2E6cmVmZXJlbmNlLz4gZWxlbWVudHMgaW4gdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgb3IgdGhleSBtYXkgYmUgaW1wbGljaXQgdGhyb3VnaAorICogdW5yZXNvbHZlZCBTcHJpbmcgYmVhbiA8cHJvcGVydHkuLi4vPiBlbGVtZW50cy4gIEluIGVpdGhlciBjYXNlLCBpdCBpcyB0aGUgUGFyZW50IGFwcGxpY2F0aW9uCisgKiBjb250ZXh0IHRoYXQgbXVzdCBwcm92aWRlIFNwcmluZyBiZWFucyB0aGF0IGNvcnJlc3BvbmQgdG8gdGhlIHByb3BlcnR5IG9yIHJlZmVyZW5jZSwgYXMgZGVyaXZlZAorICogZnJvbSB0aGUgU0NBIGNvbXBvc2l0ZSBpbiB3aGljaCB0aGUgU3ByaW5nIGFwcGxpY2F0aW9uIGNvbnRleHQgaXMgYW4gaW1wbGVtZW50YXRpb24uCisgKgorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTQ0FQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQgaW1wbGVtZW50cyBBcHBsaWNhdGlvbkNvbnRleHQgeworCisgICAgLy8gVGhlIFNwcmluZyBpbXBsZW1lbnRhdGlvbiBmb3Igd2hpY2ggdGhpcyBpcyB0aGUgcGFyZW50IGFwcGxpY2F0aW9uIGNvbnRleHQKKyAgICBwcml2YXRlIFNwcmluZ0ltcGxlbWVudGF0aW9uV3JhcHBlciBpbXBsZW1lbnRhdGlvbjsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVNUFRZX0FSUkFZID0gbmV3IFN0cmluZ1swXTsKKworICAgIHB1YmxpYyBTQ0FQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQoU3ByaW5nSW1wbGVtZW50YXRpb25XcmFwcGVyIGltcGxlbWVudGF0aW9uKSB7CisgICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjsKKyAgICB9IC8vIGVuZCBjb25zdHJ1Y3RvcgorCisgICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBuYW1lKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICByZXR1cm4gZ2V0QmVhbihuYW1lLCAoQ2xhc3MpbnVsbCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0IGEgQmVhbiBmb3IgYSByZWZlcmVuY2Ugb3IgZm9yIGEgcHJvcGVydHkuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBCZWFuIHJlcXVpcmVkCisgICAgICogQHBhcmFtIHJlcXVpcmVkVHlwZSAtIHRoZSByZXF1aXJlZCB0eXBlIG9mIHRoZSBCZWFuIChlaXRoZXIgYSBKYXZhIGNsYXNzIG9yIGEgSmF2YSBpbnRlcmZhY2UpCisgICAgICogQHJldHVybiBPYmplY3QgLSBhIEJlYW4gd2hpY2ggbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIGJlYW4KKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IGdldEJlYW4oU3RyaW5nIG5hbWUsIENsYXNzIHJlcXVpcmVkVHlwZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICAgICAgT2JqZWN0IGJlYW4gPSBpbXBsZW1lbnRhdGlvbi5nZXRCZWFuKG5hbWUsIHJlcXVpcmVkVHlwZSk7CisgICAgICAgIGlmIChiZWFuID09IG51bGwgJiYgZ2V0UGFyZW50KCkgIT0gbnVsbCkgeworICAgICAgICAgICAgYmVhbiA9IGdldFBhcmVudCgpLmdldEJlYW4obmFtZSwgcmVxdWlyZWRUeXBlKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmVhbiA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoQmVhbkRlZmluaXRpb25FeGNlcHRpb24oIlVuYWJsZSB0byBmaW5kIEJlYW4gd2l0aCBuYW1lICIgKyBuYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBiZWFuOworICAgICAgICB9CisgICAgfSAvLyBlbmQgbWV0aG9kIGdldEJlYW4oIFN0cmluZywgQ2xhc3MgKQorCisgICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBuYW1lLCBPYmplY3RbXSBhcmdzKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICByZXR1cm4gZ2V0QmVhbihuYW1lLCAoKENsYXNzKW51bGwpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgPFQ+IFQgZ2V0QmVhbihDbGFzczxUPiBjbGF6eikgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGNsYXp6LmNhc3QoZ2V0QmVhbihjbGF6ei5nZXROYW1lKCksIGNsYXp6KSk7CisgICAgfQorCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE9iamVjdD4gZ2V0QmVhbnNXaXRoQW5ub3RhdGlvbihDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gY2xhenopIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyA8QSBleHRlbmRzIEFubm90YXRpb24+IEEgZmluZEFubm90YXRpb25PbkJlYW4oU3RyaW5nIGFyZzAsIENsYXNzPEE+IGNsYXp6KSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zQmVhbihTdHJpbmcgbmFtZSkgeworICAgICAgICAvLyBUT0RPCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1NpbmdsZXRvbihTdHJpbmcgbmFtZSkgdGhyb3dzIE5vU3VjaEJlYW5EZWZpbml0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgLy8gVE9ETworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNUeXBlTWF0Y2goU3RyaW5nIG5hbWUsIENsYXNzIHRhcmdldFR5cGUpIHRocm93cyBOb1N1Y2hCZWFuRGVmaW5pdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigpOworICAgIH0KKworICAgIHB1YmxpYyBDbGFzcyBnZXRUeXBlKFN0cmluZyBuYW1lKSB0aHJvd3MgTm9TdWNoQmVhbkRlZmluaXRpb25FeGNlcHRpb24geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0QWxpYXNlcyhTdHJpbmcgbmFtZSkgdGhyb3dzIE5vU3VjaEJlYW5EZWZpbml0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIEVNUFRZX0FSUkFZOworICAgIH0KKworICAgIHB1YmxpYyBBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeSBnZXRBdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeSgpIHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldElkKCkgeworICAgICAgICByZXR1cm4gdGhpcy50b1N0cmluZygpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGlzcGxheU5hbWUoKSB7CisgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbi5nZXRVUkkoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgbG9uZyBnZXRTdGFydHVwRGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNCZWFuRGVmaW5pdGlvbihTdHJpbmcgYmVhbk5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0QmVhbkRlZmluaXRpb25Db3VudCgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZ1tdIGdldEJlYW5EZWZpbml0aW9uTmFtZXMoKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRCZWFuTmFtZXNGb3JUeXBlKENsYXNzIHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdbMF07CisgICAgfQorCisgICAgcHVibGljIFN0cmluZ1tdIGdldEJlYW5OYW1lc0ZvclR5cGUoQ2xhc3MgdHlwZSwgYm9vbGVhbiBpbmNsdWRlUHJvdG90eXBlcywgYm9vbGVhbiBpbmNsdWRlRmFjdG9yeUJlYW5zKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgIH0KKworICAgIHB1YmxpYyBNYXAgZ2V0QmVhbnNPZlR5cGUoQ2xhc3MgdHlwZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIE1hcCBnZXRCZWFuc09mVHlwZShDbGFzcyB0eXBlLCBib29sZWFuIGluY2x1ZGVQcm90b3R5cGVzLCBib29sZWFuIGluY2x1ZGVGYWN0b3J5QmVhbnMpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzUHJvdG90eXBlKFN0cmluZyB0aGVTdHJpbmcpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBCZWFuRmFjdG9yeSBnZXRQYXJlbnRCZWFuRmFjdG9yeSgpIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gY29udGFpbnNMb2NhbEJlYW4oU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgY29kZSwgT2JqZWN0W10gYXJncywgU3RyaW5nIGRlZmF1bHRNZXNzYWdlLCBMb2NhbGUgbG9jYWxlKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZShTdHJpbmcgY29kZSwgT2JqZWN0W10gYXJncywgTG9jYWxlIGxvY2FsZSkgdGhyb3dzIE5vU3VjaE1lc3NhZ2VFeGNlcHRpb24geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoTWVzc2FnZVNvdXJjZVJlc29sdmFibGUgcmVzb2x2YWJsZSwgTG9jYWxlIGxvY2FsZSkgdGhyb3dzIE5vU3VjaE1lc3NhZ2VFeGNlcHRpb24geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBwdWJsaXNoRXZlbnQoQXBwbGljYXRpb25FdmVudCBldmVudCkgeworCisgICAgfQorCisgICAgcHVibGljIFJlc291cmNlW10gZ2V0UmVzb3VyY2VzKFN0cmluZyBsb2NhdGlvblBhdHRlcm4pIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBuZXcgUmVzb3VyY2VbMF07CisgICAgfQorCisgICAgcHVibGljIFJlc291cmNlIGdldFJlc291cmNlKFN0cmluZyBsb2NhdGlvbikgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2xhc3NMb2FkZXIgZ2V0Q2xhc3NMb2FkZXIoKSB7CisgICAgICAgIC8vIFJFVklFVzogdGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGZsYXdlZCwgYnV0IGl0J3Mgbm90IGNsZWFyIGhvdyB0aGUgU0NBIHJ1bnRpbWUncworICAgICAgICAvLyByZXNvdXJjZSBsb2FkaW5nIG1lY2hhbmlzbSBpcyBleHBvc2VkIHJpZ2h0IG5vdy4KKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBBcHBsaWNhdGlvbkNvbnRleHQgZ2V0UGFyZW50KCkgeworICAgICAgICByZXR1cm4gaW1wbGVtZW50YXRpb24uZ2V0UGFyZW50QXBwbGljYXRpb25Db250ZXh0KCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC9TcHJpbmdBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2NvbnRleHQvU3ByaW5nQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDE4YjVhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2NvbnRleHQvU3ByaW5nQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3IuamF2YQpAQCAtMCwwICsxLDQxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmNvbnRleHQ7CisKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuQXBwbGljYXRpb25Db250ZXh0OworCisvKioKKyAqIEEgdXRpbGl0eSB0byByZWNlaXZlIHRoZSBwYXJlbnQgU3ByaW5nIGFwcGxpY2F0aW9uIGNvbnRleHQgCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3ByaW5nQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3IgeworICAgIC8qKgorICAgICAqIEdldCB0aGUgcGFyZW50IFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0IGZvciB0aGUgaG9zdGluZyBlbnZpcm9ubWVudC4gVGhpcyB3aWxsIGJlIHVzZWQgYXMgdGhlIHBhcmVudCAKKyAgICAgKiBhcHBsaWNhdGlvbiBjb250ZXh0IGZvciBpbXBsZW1lbnRhdGlvbi5zcHJpbmcgY29tcG9uZW50cworICAgICAqIEByZXR1cm4gVGhlIHBhcmVudCBhcHBsaWNhdGlvbiBjb250ZXh0CisgICAgICovCisgICAgQXBwbGljYXRpb25Db250ZXh0IGdldFBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCgpOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSByb290IFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0LiBUaGlzIGlzIHBhcnRpY3VhbGx5IHVzZWZ1bCBmb3IgU3ByaW5nIHdlYiBpbnRlZ3JhdGlvbiB3aGVyZSBTcHJpbmcKKyAgICAgKiBjcmVhdGVzIFdlYkFwcGxpY2F0aW9uQ29udGV4dCBhbmQga2VlcHMgaXQgaW4gdGhlIFNlcnZsZXRDb250ZXh0CisgICAgICogQHBhcmFtIHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCBUaGUgcGFyZW50IGFwcGxpY2F0aW9uIGNvbnRleHQKKyAgICAgKi8KKyAgICB2b2lkIHNldFBhcmVudEFwcGxpY2F0aW9uQ29udGV4dChBcHBsaWNhdGlvbkNvbnRleHQgcGFyZW50QXBwbGljYXRpb25Db250ZXh0KTsKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9jb250ZXh0L1NwcmluZ0NvbnRleHRXcmFwcGVyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC9TcHJpbmdDb250ZXh0V3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMGFkNzIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC9TcHJpbmdDb250ZXh0V3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmNvbnRleHQ7CisKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IuQ29tcG9uZW50TmFtZUFubm90YXRpb25Qcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLkNvbnN0cnVjdG9yQW5ub3RhdGlvblByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IuSW5pdERlc3Ryb3lBbm5vdGF0aW9uUHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb2Nlc3Nvci5Qcm9wZXJ0eUFubm90YXRpb25Qcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLlJlZmVyZW5jZUFubm90YXRpb25Qcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXIuQ29tcG9uZW50V3JhcHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm92aWRlci5Qcm9wZXJ0eVZhbHVlV3JhcHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm92aWRlci5TcHJpbmdJbXBsZW1lbnRhdGlvbldyYXBwZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5CZWFuc0V4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkJlYW5Qb3N0UHJvY2Vzc29yOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQ29uZmlndXJhYmxlTGlzdGFibGVCZWFuRmFjdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkueG1sLlhtbEJlYW5EZWZpbml0aW9uUmVhZGVyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvcmUuaW8uVXJsUmVzb3VyY2U7CisKKy8qKgorICogVGhpcyBpcyB0aGUgcnVudGltZSBzaWRlIHRpZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdHVzY2FueSBzaWRlIHN0dWIgY2xhc3MuCisgKiBJdCBlbmFibGVzIHRoZSBUdXNjYW55IGNvZGUgdG8gaW52b2tlIG1ldGhvZHMgb24gYSBTcHJpbmcgY29udGV4dCB3aXRob3V0CisgKiBuZWVkaW5nIHRvIGtub3cgYWJvdXQgYW55IFNwcmluZyBjbGFzc2VzLiBTZWUgdGhlIFNwcmluZ0NvbnRleHRTdHViIGNsYXNzCisgKiBpbiB0aGUgaW1wbGVtZW50YXRpb24tc3ByaW5nIG1vZHVsZSBmb3Igd2hhdCB0aGUgc3R1YiBkb2VzLiAKKyAqLworcHVibGljIGNsYXNzIFNwcmluZ0NvbnRleHRXcmFwcGVyIHsKKworICAgIHByaXZhdGUgR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dCBzcHJpbmdDb250ZXh0OworICAgIHByaXZhdGUgU3ByaW5nSW1wbGVtZW50YXRpb25XcmFwcGVyIGltcGxlbWVudGF0aW9uOworCisgICAgcHVibGljIFNwcmluZ0NvbnRleHRXcmFwcGVyKFNwcmluZ0ltcGxlbWVudGF0aW9uV3JhcHBlciBpbXBsZW1lbnRhdGlvbiwgTGlzdDxVUkw+IHJlc291cmNlKSB7CisgICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjsKKyAgICAgICAgU0NBUGFyZW50QXBwbGljYXRpb25Db250ZXh0IHNjYVBhcmVudENvbnRleHQgPSBuZXcgU0NBUGFyZW50QXBwbGljYXRpb25Db250ZXh0KGltcGxlbWVudGF0aW9uKTsKKyAgICAgICAgc3ByaW5nQ29udGV4dCA9IGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dChzY2FQYXJlbnRDb250ZXh0LCByZXNvdXJjZSk7CisgICAgfQorCisgICAgcHVibGljIEFwcGxpY2F0aW9uQ29udGV4dCBnZXRBcHBsaWNhdGlvbkNvbnRleHQoKSB7CisgICAgICAgIHJldHVybiBzcHJpbmdDb250ZXh0OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgeworICAgICAgICAvLyBEbyByZWZyZXNoIGhlcmUgdG8gZW5zdXJlIHRoYXQgU3ByaW5nIEJlYW5zIGFyZSBub3QgdG91Y2hlZCBiZWZvcmUgdGhlIFNDQSBjb25maWcgcHJvY2VzcyBpcyBjb21wbGV0ZS4uLgorICAgICAgICBzcHJpbmdDb250ZXh0LnJlZnJlc2goKTsKKyAgICAgICAgc3ByaW5nQ29udGV4dC5zdGFydCgpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICBzcHJpbmdDb250ZXh0LmNsb3NlKCk7CisgICAgICAgIGlmIChzcHJpbmdDb250ZXh0IGluc3RhbmNlb2YgR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dCkgeworICAgICAgICAgICAgc3ByaW5nQ29udGV4dC5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBJbmNsdWRlIEJlYW5Qb3N0UHJvY2Vzc29yIHRvIGRlYWwgd2l0aCBTQ0EgQW5ub3RhdGlvbnMgaW4gU3ByaW5nIEJlYW4KKyAgICAgKi8KKyAgICBwcml2YXRlIEdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KFNDQVBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCBzY2FQYXJlbnRDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8VVJMPiByZXNvdXJjZXMpIHsKKworICAgICAgICBHZW5lcmljQXBwbGljYXRpb25Db250ZXh0IGFwcEN0eCA9CisgICAgICAgICAgICBuZXcgU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dChzY2FQYXJlbnRDb250ZXh0LCBpbXBsZW1lbnRhdGlvbi5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgWG1sQmVhbkRlZmluaXRpb25SZWFkZXIgeG1sUmVhZGVyID0gbmV3IFhtbEJlYW5EZWZpbml0aW9uUmVhZGVyKGFwcEN0eCk7CisKKyAgICAgICAgLy8gUkVWSUVXOiBbcmZlbmddIEhvdyBkbyB3ZSBjb250cm9sIHRoZSBzY2hlbWEgdmFsaWRhdGlvbiAKKyAgICAgICAgeG1sUmVhZGVyLnNldFZhbGlkYXRpbmcoZmFsc2UpOworCisgICAgICAgIGZvciAoVVJMIHJlc291cmNlIDogcmVzb3VyY2VzKSB7CisgICAgICAgICAgICB4bWxSZWFkZXIubG9hZEJlYW5EZWZpbml0aW9ucyhuZXcgVXJsUmVzb3VyY2UocmVzb3VyY2UpKTsKKyAgICAgICAgfQorICAgICAgICB4bWxSZWFkZXIuc2V0QmVhbkNsYXNzTG9hZGVyKGltcGxlbWVudGF0aW9uLmdldENsYXNzTG9hZGVyKCkpOworICAgICAgICBpbmNsdWRlQW5ub3RhdGlvblByb2Nlc3NvcnMoYXBwQ3R4LmdldEJlYW5GYWN0b3J5KCkpOworICAgICAgICByZXR1cm4gYXBwQ3R4OworCisgICAgfQorCisgICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBpZCkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIHNwcmluZ0NvbnRleHQuZ2V0QmVhbihpZCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogSW5jbHVkZSBCZWFuUG9zdFByb2Nlc3NvciB0byBkZWFsIHdpdGggU0NBIEFubm90YXRpb25zIGluIFNwcmluZyBCZWFuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIGluY2x1ZGVBbm5vdGF0aW9uUHJvY2Vzc29ycyhDb25maWd1cmFibGVMaXN0YWJsZUJlYW5GYWN0b3J5IGJlYW5GYWN0b3J5KSB7CisKKyAgICAgICAgLy8gUHJvY2Vzc29yIHRvIGRlYWwgd2l0aCBASW5pdCBhbmQgQERlc3Ryb3kgU0NBIEFubm90YXRpb25zCisgICAgICAgIEJlYW5Qb3N0UHJvY2Vzc29yIGluaXREZXN0cm95UHJvY2Vzc29yID0gbmV3IEluaXREZXN0cm95QW5ub3RhdGlvblByb2Nlc3NvcigpOworICAgICAgICBiZWFuRmFjdG9yeS5hZGRCZWFuUG9zdFByb2Nlc3Nvcihpbml0RGVzdHJveVByb2Nlc3Nvcik7CisKKyAgICAgICAgLy8gUHJvY2Vzc29yIHRvIGRlYWwgd2l0aCBAUmVmZXJlbmNlIFNDQSBBbm5vdGF0aW9ucworICAgICAgICBDb21wb25lbnRXcmFwcGVyIGNvbXBvbmVudCA9IGltcGxlbWVudGF0aW9uLmdldENvbXBvbmVudFdyYXBwZXIoKTsKKyAgICAgICAgQmVhblBvc3RQcm9jZXNzb3IgcmVmZXJlbmNlUHJvY2Vzc29yID0gbmV3IFJlZmVyZW5jZUFubm90YXRpb25Qcm9jZXNzb3IoY29tcG9uZW50KTsKKyAgICAgICAgYmVhbkZhY3RvcnkuYWRkQmVhblBvc3RQcm9jZXNzb3IocmVmZXJlbmNlUHJvY2Vzc29yKTsKKworICAgICAgICAvLyBQcm9jZXNzb3IgdG8gZGVhbCB3aXRoIEBQcm9wZXJ0eSBTQ0EgQW5ub3RhdGlvbnMKKyAgICAgICAgUHJvcGVydHlWYWx1ZVdyYXBwZXIgcHZzID0gaW1wbGVtZW50YXRpb24uZ2V0UHJvcGVydHlWYWx1ZVdyYXBwZXIoKTsKKyAgICAgICAgQmVhblBvc3RQcm9jZXNzb3IgcHJvcGVydHlQcm9jZXNzb3IgPSBuZXcgUHJvcGVydHlBbm5vdGF0aW9uUHJvY2Vzc29yKHB2cyk7CisgICAgICAgIGJlYW5GYWN0b3J5LmFkZEJlYW5Qb3N0UHJvY2Vzc29yKHByb3BlcnR5UHJvY2Vzc29yKTsKKworICAgICAgICAvLyBQcm9jZXNzb3IgdG8gZGVhbCB3aXRoIEBDb21wb25lbnROYW1lIFNDQSBBbm5vdGF0aW9ucworICAgICAgICBCZWFuUG9zdFByb2Nlc3NvciBjb21wb25lbnROYW1lUHJvY2Vzc29yID0KKyAgICAgICAgICAgIG5ldyBDb21wb25lbnROYW1lQW5ub3RhdGlvblByb2Nlc3NvcihpbXBsZW1lbnRhdGlvbi5nZXRDb21wb25lbnROYW1lKCkpOworICAgICAgICBiZWFuRmFjdG9yeS5hZGRCZWFuUG9zdFByb2Nlc3Nvcihjb21wb25lbnROYW1lUHJvY2Vzc29yKTsKKworICAgICAgICAvLyBQcm9jZXNzb3IgdG8gZGVhbCB3aXRoIEBDb25zdHJ1Y3RvciBTQ0EgQW5ub3RhdGlvbnMKKyAgICAgICAgQmVhblBvc3RQcm9jZXNzb3IgY29uc3RydWN0b3JQcm9jZXNzb3IgPSBuZXcgQ29uc3RydWN0b3JBbm5vdGF0aW9uUHJvY2Vzc29yKCk7CisgICAgICAgIGJlYW5GYWN0b3J5LmFkZEJlYW5Qb3N0UHJvY2Vzc29yKGNvbnN0cnVjdG9yUHJvY2Vzc29yKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9uYW1lc3BhY2UvU2NhTmFtZXNwYWNlSGFuZGxlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS9TY2FOYW1lc3BhY2VIYW5kbGVyLmphdmEKaW5kZXggZjEzNmU0NS4uNjZjYjNjNyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS9TY2FOYW1lc3BhY2VIYW5kbGVyLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS9TY2FOYW1lc3BhY2VIYW5kbGVyLmphdmEKQEAgLTE2LDcgKzE2LDE1IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcubmFtZXNwYWNlOwogCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWwuTmFtZXNwYWNlSGFuZGxlclN1cHBvcnQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwogCiAvKioKICAqIEhhbmRsZXIgZm9yIHRoZSAmbHQ7c2NhOiZndDsgbmFtZXNwYWNlIGluIGFuIGFwcGxpY2F0aW9uIGNvbnRleHQKQEAgLTI2LDEzICszNCw2MCBAQAogcHVibGljIGNsYXNzIFNjYU5hbWVzcGFjZUhhbmRsZXIgZXh0ZW5kcyBOYW1lc3BhY2VIYW5kbGVyU3VwcG9ydCB7CiAKICAgICBwdWJsaWMgU2NhTmFtZXNwYWNlSGFuZGxlcigpIHsKLSAgICAgICAgaW5pdCgpOwogICAgIH0KIAotICAgIHB1YmxpYyBmaW5hbCB2b2lkIGluaXQoKSB7CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsKICAgICAgICAgcmVnaXN0ZXJCZWFuRGVmaW5pdGlvblBhcnNlcigicmVmZXJlbmNlIiwgbmV3IFNjYVJlZmVyZW5jZUJlYW5EZWZpbml0aW9uUGFyc2VyKCkpOwogICAgICAgICByZWdpc3RlckJlYW5EZWZpbml0aW9uUGFyc2VyKCJzZXJ2aWNlIiwgbmV3IFNjYVNlcnZpY2VCZWFuRGVmaW5pdGlvblBhcnNlcigpKTsKICAgICAgICAgcmVnaXN0ZXJCZWFuRGVmaW5pdGlvblBhcnNlcigicHJvcGVydHkiLCBuZXcgU2NhUHJvcGVydHlCZWFuRGVmaW5pdGlvblBhcnNlcigpKTsKICAgICB9CiAKKyAgICBwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZXNwYWNlVVJJKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIHByZWZpeCkgeworICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgbmFtZSA9ICgiIi5lcXVhbHMocHJlZml4KSkgPyAieG1sbnMiIDogInhtbG5zOiIgKyBwcmVmaXg7CisgICAgICAgIFN0cmluZyBucyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpOworICAgICAgICBpZiAobnMgIT0gbnVsbCAmJiAhIiIuZXF1YWxzKG5zKSkgeworICAgICAgICAgICAgcmV0dXJuIG5zOworICAgICAgICB9CisgICAgICAgIE5vZGUgcGFyZW50ID0gZWxlbWVudC5nZXRQYXJlbnROb2RlKCk7CisgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlVVJJKChFbGVtZW50KXBhcmVudCwgcHJlZml4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBMaXN0PFFOYW1lPiByZXNvbHZlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGxpc3RPZk5hbWVzKSB7CisgICAgICAgIExpc3Q8UU5hbWU+IHFuYW1lcyA9IG5ldyBBcnJheUxpc3Q8UU5hbWU+KCk7CisgICAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxpc3RPZk5hbWVzKTsKKyAgICAgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBxbmFtZSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAiIjsKKyAgICAgICAgICAgIFN0cmluZyBsb2NhbCA9IHFuYW1lOworICAgICAgICAgICAgaW50IGluZGV4ID0gcW5hbWUuaW5kZXhPZignOicpOworICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgbG9jYWwgPSBxbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBxbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIG5zID0gZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQsIHByZWZpeCk7CisgICAgICAgICAgICBpZiAobnMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHFuYW1lcy5hZGQobmV3IFFOYW1lKG5zLCBsb2NhbCwgcHJlZml4KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlByZWZpeCAiICsgcHJlZml4ICsgImlzIG5vdCBib3VuZCB0byBhIG5hbWVzcGFjZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBxbmFtZXM7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5TKG51bGwsIG5hbWUpOworICAgICAgICBpZiAoIiIuZXF1YWxzKGF0dHIpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBhdHRyOworICAgICAgICB9CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS9TY2FQcm9wZXJ0eUJlYW5EZWZpbml0aW9uUGFyc2VyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL1NjYVByb3BlcnR5QmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQppbmRleCA1YjEwNjRkLi5iZmYwYWE4IDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL1NjYVByb3BlcnR5QmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL1NjYVByb3BlcnR5QmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQpAQCAtMTYsNyArMTYsMTAgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5uYW1lc3BhY2U7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC5TQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0OwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhbkRlZmluaXRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQmVhbkRlZmluaXRpb25SZWdpc3RyeTsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkueG1sLkJlYW5EZWZpbml0aW9uUGFyc2VyOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWwuUGFyc2VyQ29udGV4dDsKIGltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwpAQCAtMjgsOCArMzEsMTQgQEAKIHB1YmxpYyBjbGFzcyBTY2FQcm9wZXJ0eUJlYW5EZWZpbml0aW9uUGFyc2VyIGltcGxlbWVudHMgQmVhbkRlZmluaXRpb25QYXJzZXIgewogCiAgICAgcHVibGljIEJlYW5EZWZpbml0aW9uIHBhcnNlKEVsZW1lbnQgZWxlbWVudCwgUGFyc2VyQ29udGV4dCBwYXJzZXJDb250ZXh0KSB7CisgICAgICAgIEJlYW5EZWZpbml0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBwYXJzZXJDb250ZXh0LmdldFJlZ2lzdHJ5KCk7CisgICAgICAgIGlmIChyZWdpc3RyeSBpbnN0YW5jZW9mIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQpIHsKKyAgICAgICAgICAgIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dCA9IChTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KXJlZ2lzdHJ5OworICAgICAgICAgICAgU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50IHByb3BlcnR5RWxlbWVudCA9CisgICAgICAgICAgICAgICAgbmV3IFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudChlbGVtZW50LmdldEF0dHJpYnV0ZU5TKG51bGwsICJuYW1lIiksIGVsZW1lbnQuZ2V0QXR0cmlidXRlTlMobnVsbCwgInR5cGUiKSk7CisgICAgICAgICAgICBjb250ZXh0LmFkZFNDQVByb3BlcnR5RWxlbWVudChwcm9wZXJ0eUVsZW1lbnQpOworICAgICAgICB9CiAgICAgICAgIC8vIGRvIG5vdGhpbmcsIHRoaXMgaXMgaGFuZGxlZCBieSBUdXNjYW55CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS9TY2FSZWZlcmVuY2VCZWFuRGVmaW5pdGlvblBhcnNlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS9TY2FSZWZlcmVuY2VCZWFuRGVmaW5pdGlvblBhcnNlci5qYXZhCmluZGV4IGZhYzAyNzYuLmFiNzk3YzEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9uYW1lc3BhY2UvU2NhUmVmZXJlbmNlQmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL1NjYVJlZmVyZW5jZUJlYW5EZWZpbml0aW9uUGFyc2VyLmphdmEKQEAgLTE2LDcgKzE2LDE2IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcubmFtZXNwYWNlOwogCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLm5hbWVzcGFjZS5TY2FOYW1lc3BhY2VIYW5kbGVyLmdldEF0dHJpYnV0ZTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC5TQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0OwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhbkRlZmluaXRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQmVhbkRlZmluaXRpb25SZWdpc3RyeTsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkueG1sLkJlYW5EZWZpbml0aW9uUGFyc2VyOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWwuUGFyc2VyQ29udGV4dDsKIGltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwpAQCAtMjksNiArMzgsMjggQEAKIHB1YmxpYyBjbGFzcyBTY2FSZWZlcmVuY2VCZWFuRGVmaW5pdGlvblBhcnNlciBpbXBsZW1lbnRzIEJlYW5EZWZpbml0aW9uUGFyc2VyIHsKIAogICAgIHB1YmxpYyBCZWFuRGVmaW5pdGlvbiBwYXJzZShFbGVtZW50IGVsZW1lbnQsIFBhcnNlckNvbnRleHQgcGFyc2VyQ29udGV4dCkgeworICAgICAgICBCZWFuRGVmaW5pdGlvblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gcGFyc2VyQ29udGV4dC5nZXRSZWdpc3RyeSgpOworICAgICAgICBpZiAocmVnaXN0cnkgaW5zdGFuY2VvZiBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KSB7CisgICAgICAgICAgICBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0IGNvbnRleHQgPSAoU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dClyZWdpc3RyeTsKKyAgICAgICAgICAgIFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQgcmVmZXJlbmNlRWxlbWVudCA9CisgICAgICAgICAgICAgICAgbmV3IFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQoZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJuYW1lIiksIGdldEF0dHJpYnV0ZShlbGVtZW50LCAidHlwZSIpKTsKKyAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQuc2V0RGVmYXVsdEJlYW4oZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJkZWZhdWx0IikpOworCisgICAgICAgICAgICBTdHJpbmcgcmVxdWlyZXMgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgInJlcXVpcmVzIik7CisgICAgICAgICAgICBpZiAocmVxdWlyZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIExpc3Q8UU5hbWU+IHFuYW1lcyA9IFNjYU5hbWVzcGFjZUhhbmRsZXIucmVzb2x2ZShlbGVtZW50LCByZXF1aXJlcyk7CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlRWxlbWVudC5nZXRJbnRlbnROYW1lcygpLmFkZEFsbChxbmFtZXMpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdHJpbmcgcG9saWN5U2V0cyA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAicG9saWN5U2V0cyIpOworICAgICAgICAgICAgaWYgKHBvbGljeVNldHMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIExpc3Q8UU5hbWU+IHFuYW1lcyA9IFNjYU5hbWVzcGFjZUhhbmRsZXIucmVzb2x2ZShlbGVtZW50LCBwb2xpY3lTZXRzKTsKKyAgICAgICAgICAgICAgICByZWZlcmVuY2VFbGVtZW50LmdldFBvbGljeVNldE5hbWVzKCkuYWRkQWxsKHFuYW1lcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRleHQuYWRkU0NBUmVmZXJlbmNlRWxlbWVudChyZWZlcmVuY2VFbGVtZW50KTsKKyAgICAgICAgfQorCiAgICAgICAgIC8vIGRvIG5vdGhpbmcsIHRoaXMgaXMgaGFuZGxlZCBieSBUdXNjYW55CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9uYW1lc3BhY2UvU2NhU2VydmljZUJlYW5EZWZpbml0aW9uUGFyc2VyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL1NjYVNlcnZpY2VCZWFuRGVmaW5pdGlvblBhcnNlci5qYXZhCmluZGV4IDMwMjBkY2EuLjZhM2JlZWIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9uYW1lc3BhY2UvU2NhU2VydmljZUJlYW5EZWZpbml0aW9uUGFyc2VyLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS9TY2FTZXJ2aWNlQmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQpAQCAtMTYsNyArMTYsMTYgQEAKICAqLwogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5uYW1lc3BhY2U7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcubmFtZXNwYWNlLlNjYU5hbWVzcGFjZUhhbmRsZXIuZ2V0QXR0cmlidXRlOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nU0NBU2VydmljZUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC5TQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0OwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhbkRlZmluaXRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuQmVhbkRlZmluaXRpb25SZWdpc3RyeTsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkueG1sLkJlYW5EZWZpbml0aW9uUGFyc2VyOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWwuUGFyc2VyQ29udGV4dDsKIGltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwpAQCAtMjksNiArMzgsMjcgQEAKIHB1YmxpYyBjbGFzcyBTY2FTZXJ2aWNlQmVhbkRlZmluaXRpb25QYXJzZXIgaW1wbGVtZW50cyBCZWFuRGVmaW5pdGlvblBhcnNlciB7CiAKICAgICBwdWJsaWMgQmVhbkRlZmluaXRpb24gcGFyc2UoRWxlbWVudCBlbGVtZW50LCBQYXJzZXJDb250ZXh0IHBhcnNlckNvbnRleHQpIHsKKyAgICAgICAgQmVhbkRlZmluaXRpb25SZWdpc3RyeSByZWdpc3RyeSA9IHBhcnNlckNvbnRleHQuZ2V0UmVnaXN0cnkoKTsKKyAgICAgICAgaWYgKHJlZ2lzdHJ5IGluc3RhbmNlb2YgU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dCkgeworICAgICAgICAgICAgU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dCBjb250ZXh0ID0gKFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQpcmVnaXN0cnk7CisgICAgICAgICAgICBTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9CisgICAgICAgICAgICAgICAgbmV3IFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50KGdldEF0dHJpYnV0ZShlbGVtZW50LCAibmFtZSIpLCBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgInRhcmdldCIpKTsKKyAgICAgICAgICAgIHNlcnZpY2VFbGVtZW50LnNldFR5cGUoZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJ0eXBlIikpOworCisgICAgICAgICAgICBTdHJpbmcgcmVxdWlyZXMgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgInJlcXVpcmVzIik7CisgICAgICAgICAgICBpZiAocmVxdWlyZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIExpc3Q8UU5hbWU+IHFuYW1lcyA9IFNjYU5hbWVzcGFjZUhhbmRsZXIucmVzb2x2ZShlbGVtZW50LCByZXF1aXJlcyk7CisgICAgICAgICAgICAgICAgc2VydmljZUVsZW1lbnQuZ2V0SW50ZW50TmFtZXMoKS5hZGRBbGwocW5hbWVzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RyaW5nIHBvbGljeVNldHMgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgInBvbGljeVNldHMiKTsKKyAgICAgICAgICAgIGlmIChwb2xpY3lTZXRzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBMaXN0PFFOYW1lPiBxbmFtZXMgPSBTY2FOYW1lc3BhY2VIYW5kbGVyLnJlc29sdmUoZWxlbWVudCwgcG9saWN5U2V0cyk7CisgICAgICAgICAgICAgICAgc2VydmljZUVsZW1lbnQuZ2V0UG9saWN5U2V0TmFtZXMoKS5hZGRBbGwocW5hbWVzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5hZGRTQ0FTZXJ2aWNlRWxlbWVudChzZXJ2aWNlRWxlbWVudCk7CisgICAgICAgIH0KICAgICAgICAgLy8gZG8gbm90aGluZywgaGFuZGxlZCBieSBUdXNjYW55CiAgICAgICAgIHJldHVybiBudWxsOwogICAgIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvQ29tcG9uZW50TmFtZUFubm90YXRpb25Qcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvQ29tcG9uZW50TmFtZUFubm90YXRpb25Qcm9jZXNzb3IuamF2YQppbmRleCA3NjEzZjgxLi42OGQ0OWJiIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL0NvbXBvbmVudE5hbWVBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9Db21wb25lbnROYW1lQW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhCkBAIC0zNiwxMyArMzYsMTMgQEAKIHB1YmxpYyBjbGFzcyBDb21wb25lbnROYW1lQW5ub3RhdGlvblByb2Nlc3NvciBpbXBsZW1lbnRzIEJlYW5Qb3N0UHJvY2Vzc29yIHsKIAogICAgIHByaXZhdGUgQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IGNvbXBvbmVudE5hbWVBbm5vdGF0aW9uVHlwZSA9IENvbXBvbmVudE5hbWUuY2xhc3M7Ci0gICAgCisKICAgICBwcml2YXRlIFN0cmluZyBjb21wb25lbnROYW1lOwotICAgIAotICAgIHB1YmxpYyBDb21wb25lbnROYW1lQW5ub3RhdGlvblByb2Nlc3NvciAoU3RyaW5nIGNvbXBvbmVudE5hbWUpIHsKKworICAgIHB1YmxpYyBDb21wb25lbnROYW1lQW5ub3RhdGlvblByb2Nlc3NvcihTdHJpbmcgY29tcG9uZW50TmFtZSkgewogICAgICAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIEdldHMgY29tcG9uZW50TmFtZSBhbm5vdGF0aW9uIHR5cGUuCiAgICAgICovCkBAIC02Myw4ICs2Myw3IEBACiAgICAgICogCiAgICAgICogQHNlZSBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkJlYW5Qb3N0UHJvY2Vzc29yI3Bvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkgCi0gICAgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc0Fubm90YXRpb24oYmVhbik7CiAgICAgICAgIHJldHVybiBiZWFuOwogICAgIH0KQEAgLTc0LDggKzczLDcgQEAKICAgICAgKiAKICAgICAgKiBAc2VlIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3IjcG9zdFByb2Nlc3NBZnRlckluaXRpYWxpemF0aW9uKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBwb3N0UHJvY2Vzc0FmdGVySW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkKLSAgICB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgIHB1YmxpYyBPYmplY3QgcG9zdFByb2Nlc3NBZnRlckluaXRpYWxpemF0aW9uKE9iamVjdCBiZWFuLCBTdHJpbmcgYmVhbk5hbWUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBiZWFuOwogICAgIH0KIApAQCAtODMsNyArODEsNyBAQAogICAgICAqIDxwPlByb2Nlc3NlcyBhIGJlYW5zIGZpZWxkcyBmb3IgaW5qZWN0aW9uIGlmIGl0IGhhcyBhIHtAbGluayBSZWZlcmVuY2V9IGFubm90YXRpb24uPC9wPgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NBbm5vdGF0aW9uKGZpbmFsIE9iamVjdCBiZWFuKSB7Ci0gICAgICAgIAorCiAgICAgICAgIGZpbmFsIENsYXNzPD8+IGNsYXp6ID0gYmVhbi5nZXRDbGFzcygpOwogCiAgICAgICAgIFJlZmxlY3Rpb25VdGlscy5kb1dpdGhGaWVsZHMoY2xhenosIG5ldyBSZWZsZWN0aW9uVXRpbHMuRmllbGRDYWxsYmFjaygpIHsKQEAgLTk0LDE5ICs5MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNTdGF0aWMoZmllbGQuZ2V0TW9kaWZpZXJzKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb21wb25lbnROYW1lIGFubm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBzdGF0aWMgZmllbGRzIik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKE1vZGlmaWVyLmlzUHJpdmF0ZShmaWVsZC5nZXRNb2RpZmllcnMoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvbXBvbmVudE5hbWUgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHByaXZhdGUgZmllbGRzIik7CiAgICAgICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgICAgICBSZWZsZWN0aW9uVXRpbHMubWFrZUFjY2Vzc2libGUoZmllbGQpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGQuZ2V0VHlwZSgpLmdldE5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IG5hbWVPYmogPSBjb21wb25lbnROYW1lOyAgIAorICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IG5hbWVPYmogPSBjb21wb25lbnROYW1lOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWVPYmogIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZsZWN0aW9uVXRpbHMuc2V0RmllbGQoZmllbGQsIGJlYW4sIG5hbWVPYmopOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ29tcG9uZW50TmFtZSBhbm5vdGF0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IG9uIGphdmEubGFuZy5TdHJpbmcgZmllbGQgdHlwZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wb25lbnROYW1lIGFubm90YXRpb24gaXMgc3VwcG9ydGVkIG9ubHkgb24gamF2YS5sYW5nLlN0cmluZyBmaWVsZCB0eXBlLiIpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMTE1LDMzICsxMTQsMzUgQEAKICAgICAgICAgUmVmbGVjdGlvblV0aWxzLmRvV2l0aE1ldGhvZHMoY2xhenosIG5ldyBSZWZsZWN0aW9uVXRpbHMuTWV0aG9kQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkb1dpdGgoTWV0aG9kIG1ldGhvZCkgewogICAgICAgICAgICAgICAgIEFubm90YXRpb24gYW5ub3RhdGlvbiA9IG1ldGhvZC5nZXRBbm5vdGF0aW9uKGdldENvbXBvbmVudE5hbWVBbm5vdGF0aW9uVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKE1vZGlmaWVyLmlzU3RhdGljKG1ldGhvZC5nZXRNb2RpZmllcnMoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvbXBvbmVudE5hbWUgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHN0YXRpYyBtZXRob2RzIik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgaWYgKE1vZGlmaWVyLmlzUHJpdmF0ZShtZXRob2QuZ2V0TW9kaWZpZXJzKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb21wb25lbnROYW1lIGFubm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBwcml2YXRlIG1ldGhvZHMiKTsKICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ29tcG9uZW50TmFtZSBhbm5vdGF0aW9uIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudDogIiArIG1ldGhvZCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcG9uZW50TmFtZSBhbm5vdGF0aW9uIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudDogIiArIG1ldGhvZCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBwZCA9IEJlYW5VdGlscy5maW5kUHJvcGVydHlGb3JNZXRob2QobWV0aG9kKTsgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eURlc2NyaXB0b3IgcGQgPSBCZWFuVXRpbHMuZmluZFByb3BlcnR5Rm9yTWV0aG9kKG1ldGhvZCk7CisKICAgICAgICAgICAgICAgICAgICAgaWYgKHBkLmdldFByb3BlcnR5VHlwZSgpLmdldE5hbWUoKS5lcXVhbHMoImphdmEubGFuZy5TdHJpbmciKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IG5hbWVPYmogPSBjb21wb25lbnROYW1lOyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgbmFtZU9iaiA9IGNvbXBvbmVudE5hbWU7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZU9iaiAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkLmdldFdyaXRlTWV0aG9kKCkuaW52b2tlKGJlYW4sIG5ldyBPYmplY3RbXSB7IG5hbWVPYmogfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGQuZ2V0V3JpdGVNZXRob2QoKS5pbnZva2UoYmVhbiwgbmV3IE9iamVjdFtdIHtuYW1lT2JqfSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZhdGFsQmVhbkV4Y2VwdGlvbigiUHJvYmxlbSBpbmplY3RpbmcgcmVmZXJlbmNlOiAgIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb21wb25lbnROYW1lIGFubm90YXRpb24gaXMgc3VwcG9ydGVkIG9ubHkgb24gamF2YS5sYW5nLlN0cmluZyBmaWVsZCB0eXBlLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBvbmVudE5hbWUgYW5ub3RhdGlvbiBpcyBzdXBwb3J0ZWQgb25seSBvbiBqYXZhLmxhbmcuU3RyaW5nIGZpZWxkIHR5cGUuIik7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL0NvbXBvbmVudFN0dWIuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvQ29tcG9uZW50U3R1Yi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNzJjY2Q2Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvQ29tcG9uZW50U3R1Yi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3I7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgU3ByaW5nIHJ1bnRpbWUgc2lkZSBzdHViIGZvciB0aGUgY29ycmVzcG9uZGluZyBUdXNjYW55IHRpZSBjbGFzcy4KLSAqIEl0IGVuYWJsZXMgdGhlIFR1c2NhbnkgY29kZSB0byBpbnZva2UgbWV0aG9kcyBvbiBhIFNwcmluZyBjb250ZXh0IHdpdGhvdXQKLSAqIG5lZWRpbmcgdG8ga25vdyBhYm91dCBhbnkgU3ByaW5nIGNsYXNzZXMuIFNlZSB0aGUgQ29tcG9uZW50VGllIGNsYXNzCi0gKiBpbiB0aGUgaW1wbGVtZW50YXRpb24tc3ByaW5nIG1vZHVsZSBmb3Igd2hhdCB0aGUgdGllIGRvZXMuIAotICovCi1wdWJsaWMgY2xhc3MgQ29tcG9uZW50U3R1YiB7Ci0KLSAgICBwcml2YXRlIE9iamVjdCB0aWU7Ci0gICAgcHJpdmF0ZSBNZXRob2QgZ2V0U2VydmljZTsKLSAgICAKLSAgICBwdWJsaWMgQ29tcG9uZW50U3R1YihPYmplY3QgdGllKSB7Ci0gICAgICAgIHRoaXMudGllID0gdGllOwotICAgICAgICBDbGFzczw/PiB0aWVDbGFzcyA9IHRpZS5nZXRDbGFzcygpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgZ2V0U2VydmljZSA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0U2VydmljZSIsIG5ldyBDbGFzczw/Pltde0NsYXNzLmNsYXNzLCBTdHJpbmcuY2xhc3N9KTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRTZXJ2aWNlKENsYXNzPD8+IHR5cGUsIFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHRyeSB7Ci0KLSAgICAgICAgICAgIHJldHVybiBnZXRTZXJ2aWNlLmludm9rZSh0aWUsIHR5cGUsIG5hbWUpOwotCi0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0KLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvQ29uc3RydWN0b3JBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL0NvbnN0cnVjdG9yQW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhCmluZGV4IDdlYjYzNjcuLmE1MmE4NWYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvQ29uc3RydWN0b3JBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9Db25zdHJ1Y3RvckFubm90YXRpb25Qcm9jZXNzb3IuamF2YQpAQCAtMjgsMTUgKzI4LDE0IEBACiAKIHB1YmxpYyBjbGFzcyBDb25zdHJ1Y3RvckFubm90YXRpb25Qcm9jZXNzb3IgZXh0ZW5kcyBJbnN0YW50aWF0aW9uQXdhcmVCZWFuUG9zdFByb2Nlc3NvckFkYXB0ZXIgewogCi0gICAgcHJpdmF0ZSBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gY29uc3RydWN0b3JBbm5vdGF0aW9uVHlwZSAKLSAgICA9IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uQ29uc3RydWN0b3IuY2xhc3M7Ci0gICAgCisgICAgcHJpdmF0ZSBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gY29uc3RydWN0b3JBbm5vdGF0aW9uVHlwZSA9IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uQ29uc3RydWN0b3IuY2xhc3M7CisKICAgICBwcml2YXRlIENsYXNzPD8gZXh0ZW5kcyBBbm5vdGF0aW9uPiBhdXRvd2lyZWRBbm5vdGF0aW9uVHlwZSA9IEF1dG93aXJlZC5jbGFzczsKLSAgICAKLSAgICBwdWJsaWMgQ29uc3RydWN0b3JBbm5vdGF0aW9uUHJvY2Vzc29yICgpIHsKKworICAgIHB1YmxpYyBDb25zdHJ1Y3RvckFubm90YXRpb25Qcm9jZXNzb3IoKSB7CiAgICAgICAgIC8vIERlZmF1bHQgY29uc3RydWN0b3IuCiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogU2V0IHRoZSAnYXV0b3dpcmVkJyBhbm5vdGF0aW9uIHR5cGUsIHRvIGJlIHVzZWQgb24gY29uc3RydWN0b3JzLCBmaWVsZHMsCiAgICAgICogc2V0dGVyIG1ldGhvZHMgYW5kIGFyYml0cmFyeSBjb25maWcgbWV0aG9kcy4KQEAgLTUyLDcgKzUxLDcgQEAKICAgICBwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IGdldEF1dG93aXJlZEFubm90YXRpb25UeXBlKCkgewogICAgICAgICByZXR1cm4gdGhpcy5hdXRvd2lyZWRBbm5vdGF0aW9uVHlwZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBSZXR1cm4gdGhlICdjb25zdHJ1Y3RvcicgYW5ub3RhdGlvbiB0eXBlLgogICAgICAqLwpAQCAtNzMsOCArNzIsNyBAQAogICAgICAqIAogICAgICAqIEBzZWUgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5CZWFuUG9zdFByb2Nlc3NvciNwb3N0UHJvY2Vzc0JlZm9yZUluaXRpYWxpemF0aW9uKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBwb3N0UHJvY2Vzc0JlZm9yZUluaXRpYWxpemF0aW9uKE9iamVjdCBiZWFuLCBTdHJpbmcgYmVhbk5hbWUpIAotICAgIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgcHVibGljIE9iamVjdCBwb3N0UHJvY2Vzc0JlZm9yZUluaXRpYWxpemF0aW9uKE9iamVjdCBiZWFuLCBTdHJpbmcgYmVhbk5hbWUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBiZWFuOwogICAgIH0KIApAQCAtODMsMTEgKzgxLDEwIEBACiAgICAgICogCiAgICAgICogQHNlZSBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkJlYW5Qb3N0UHJvY2Vzc29yI3Bvc3RQcm9jZXNzQWZ0ZXJJbml0aWFsaXphdGlvbihqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nKQogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgcG9zdFByb2Nlc3NBZnRlckluaXRpYWxpemF0aW9uKE9iamVjdCBiZWFuLCBTdHJpbmcgYmVhbk5hbWUpCi0gICAgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQWZ0ZXJJbml0aWFsaXphdGlvbihPYmplY3QgYmVhbiwgU3RyaW5nIGJlYW5OYW1lKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24gewogICAgICAgICByZXR1cm4gYmVhbjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgQ29uc3RydWN0b3JbXSBkZXRlcm1pbmVDYW5kaWRhdGVDb25zdHJ1Y3RvcnMoQ2xhc3MgYmVhbkNsYXNzLCBTdHJpbmcgYmVhbk5hbWUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CiAgICAgICAgIC8qQ29uc3RydWN0b3JbXSBkZWNsYXJlZENvbnN0cnVjdG9ycyA9IGJlYW5DbGFzcy5nZXREZWNsYXJlZENvbnN0cnVjdG9ycygpOyAgICAgICAgICAgICAgICAKICAgICAgICAgTWV0aG9kW10gZGVjbGFyZWRNZXRob2RzID0gYmVhbkNsYXNzLmdldERlY2xhcmVkTWV0aG9kcygpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9Qcm9wZXJ0eUFubm90YXRpb25Qcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvUHJvcGVydHlBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEKaW5kZXggZjgwMDY1NC4uNDc2MzcxNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9Qcm9wZXJ0eUFubm90YXRpb25Qcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL1Byb3BlcnR5QW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhCkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwogCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXIuUHJvcGVydHlWYWx1ZVdyYXBwZXI7CiBpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Qcm9wZXJ0eTsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5VdGlsczsKIGltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOwpAQCAtMzUsMTAgKzM2LDEwIEBACiBwdWJsaWMgY2xhc3MgUHJvcGVydHlBbm5vdGF0aW9uUHJvY2Vzc29yIGltcGxlbWVudHMgQmVhblBvc3RQcm9jZXNzb3IgewogCiAgICAgcHJpdmF0ZSBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gcHJvcGVydHlBbm5vdGF0aW9uVHlwZSA9IFByb3BlcnR5LmNsYXNzOwotICAgIAotICAgIHByaXZhdGUgUHJvcGVydHlWYWx1ZVN0dWIgcHJvcGVydHlWYWx1ZTsKLSAgICAKLSAgICBwdWJsaWMgUHJvcGVydHlBbm5vdGF0aW9uUHJvY2Vzc29yIChQcm9wZXJ0eVZhbHVlU3R1YiBwcm9wZXJ0eVZhbHVlKSB7CisKKyAgICBwcml2YXRlIFByb3BlcnR5VmFsdWVXcmFwcGVyIHByb3BlcnR5VmFsdWU7CisKKyAgICBwdWJsaWMgUHJvcGVydHlBbm5vdGF0aW9uUHJvY2Vzc29yKFByb3BlcnR5VmFsdWVXcmFwcGVyIHByb3BlcnR5VmFsdWUpIHsKICAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlID0gcHJvcGVydHlWYWx1ZTsKICAgICB9CiAKQEAgLTYyLDggKzYzLDcgQEAKICAgICAgKiAKICAgICAgKiBAc2VlIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3IjcG9zdFByb2Nlc3NCZWZvcmVJbml0aWFsaXphdGlvbihqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nKQogICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgcG9zdFByb2Nlc3NCZWZvcmVJbml0aWFsaXphdGlvbihPYmplY3QgYmVhbiwgU3RyaW5nIGJlYW5OYW1lKSAKLSAgICB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgIHB1YmxpYyBPYmplY3QgcG9zdFByb2Nlc3NCZWZvcmVJbml0aWFsaXphdGlvbihPYmplY3QgYmVhbiwgU3RyaW5nIGJlYW5OYW1lKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24gewogICAgICAgICBwcm9jZXNzQW5ub3RhdGlvbihiZWFuKTsKICAgICAgICAgcmV0dXJuIGJlYW47CiAgICAgfQpAQCAtNzMsOCArNzMsNyBAQAogICAgICAqIAogICAgICAqIEBzZWUgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5CZWFuUG9zdFByb2Nlc3NvciNwb3N0UHJvY2Vzc0FmdGVySW5pdGlhbGl6YXRpb24oamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQWZ0ZXJJbml0aWFsaXphdGlvbihPYmplY3QgYmVhbiwgU3RyaW5nIGJlYW5OYW1lKQotICAgIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgcHVibGljIE9iamVjdCBwb3N0UHJvY2Vzc0FmdGVySW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKICAgICAgICAgcmV0dXJuIGJlYW47CiAgICAgfQogCkBAIC04MiwyNyArODEsMjkgQEAKICAgICAgKiA8cD5Qcm9jZXNzZXMgYSBiZWFucyBmaWVsZHMgZm9yIGluamVjdGlvbiBpZiBpdCBoYXMgYSB7QGxpbmsgUHJvcGVydHl9IGFubm90YXRpb24uPC9wPgogICAgICAqLwogICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NBbm5vdGF0aW9uKGZpbmFsIE9iamVjdCBiZWFuKSB7Ci0gICAgICAgIAotICAgICAgICBmaW5hbCBDbGFzczw/PiBjbGF6eiA9IGJlYW4uZ2V0Q2xhc3MoKTsgICAgICAgCisKKyAgICAgICAgZmluYWwgQ2xhc3M8Pz4gY2xhenogPSBiZWFuLmdldENsYXNzKCk7CiAKICAgICAgICAgUmVmbGVjdGlvblV0aWxzLmRvV2l0aE1ldGhvZHMoY2xhenosIG5ldyBSZWZsZWN0aW9uVXRpbHMuTWV0aG9kQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkb1dpdGgoTWV0aG9kIG1ldGhvZCkgewogCi0gICAgICAgICAgICAgICAgUHJvcGVydHkgYW5ub3RhdGlvbiA9IChQcm9wZXJ0eSkgbWV0aG9kLmdldEFubm90YXRpb24oZ2V0UHJvcGVydHlBbm5vdGF0aW9uVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eSBhbm5vdGF0aW9uID0gKFByb3BlcnR5KW1ldGhvZC5nZXRBbm5vdGF0aW9uKGdldFByb3BlcnR5QW5ub3RhdGlvblR5cGUoKSk7CisKICAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChNb2RpZmllci5pc1N0YXRpYyhtZXRob2QuZ2V0TW9kaWZpZXJzKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJQcm9wZXJ0eSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gc3RhdGljIG1ldGhvZHMiKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNQcml2YXRlKG1ldGhvZC5nZXRNb2RpZmllcnMoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlByb3BlcnR5IGFubm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBwcml2YXRlIG1ldGhvZHMiKTsKICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiUHJvcGVydHkgYW5ub3RhdGlvbiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQ6ICIgKyBtZXRob2QpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBwZCA9IEJlYW5VdGlscy5maW5kUHJvcGVydHlGb3JNZXRob2QobWV0aG9kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHBkICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wTmFtZSA9IGFubm90YXRpb24ubmFtZSgpOwpAQCAtMTE1LDQ3ICsxMTYsNDkgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwotICAgICAgICAKKwogICAgICAgICBSZWZsZWN0aW9uVXRpbHMuZG9XaXRoRmllbGRzKGNsYXp6LCBuZXcgUmVmbGVjdGlvblV0aWxzLkZpZWxkQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkb1dpdGgoRmllbGQgZmllbGQpIHsKIAotICAgICAgICAgICAgICAgIFByb3BlcnR5IGFubm90YXRpb24gPSAoUHJvcGVydHkpIGZpZWxkLmdldEFubm90YXRpb24oZ2V0UHJvcGVydHlBbm5vdGF0aW9uVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBQcm9wZXJ0eSBhbm5vdGF0aW9uID0gKFByb3BlcnR5KWZpZWxkLmdldEFubm90YXRpb24oZ2V0UHJvcGVydHlBbm5vdGF0aW9uVHlwZSgpKTsKKwogICAgICAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKE1vZGlmaWVyLmlzU3RhdGljKGZpZWxkLmdldE1vZGlmaWVycygpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiUHJvcGVydHkgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHN0YXRpYyBmaWVsZHMiKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNQcml2YXRlKGZpZWxkLmdldE1vZGlmaWVycygpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiUHJvcGVydHkgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHByaXZhdGUgZmllbGRzIik7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgICAgICBSZWZsZWN0aW9uVXRpbHMubWFrZUFjY2Vzc2libGUoZmllbGQpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBPYmplY3QgcHJvcGVydHlPYmogPSBudWxsOwogICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcHJvcE5hbWUgPSBhbm5vdGF0aW9uLm5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCIiLmVxdWFscyhwcm9wTmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5T2JqID0gcHJvcGVydHlWYWx1ZS5nZXRQcm9wZXJ0eU9iaihmaWVsZC5nZXRUeXBlKCksIGZpZWxkLmdldE5hbWUoKSk7ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eU9iaiA9IHByb3BlcnR5VmFsdWUuZ2V0UHJvcGVydHlPYmooZmllbGQuZ2V0VHlwZSgpLCBmaWVsZC5nZXROYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlPYmogPSBwcm9wZXJ0eVZhbHVlLmdldFByb3BlcnR5T2JqKGZpZWxkLmdldFR5cGUoKSwgcHJvcE5hbWUpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU9iaiAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgUmVmbGVjdGlvblV0aWxzLnNldEZpZWxkKGZpZWxkLCBiZWFuLCBwcm9wZXJ0eU9iaik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBpbmplY3RQcm9wZXJ0eShPYmplY3QgYmVhbiwgUHJvcGVydHlEZXNjcmlwdG9yIHBkLCBPYmplY3QgcHJvcGVydHlPYmopIHsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHByb3BlcnR5T2JqICE9IG51bGwpIHsKLSAgICAgICAgICAgIHRyeSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHBkLmdldFdyaXRlTWV0aG9kKCkuaW52b2tlKGJlYW4sIG5ldyBPYmplY3RbXSB7IHByb3BlcnR5T2JqIH0pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBwZC5nZXRXcml0ZU1ldGhvZCgpLmludm9rZShiZWFuLCBuZXcgT2JqZWN0W10ge3Byb3BlcnR5T2JqfSk7CiAgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBGYXRhbEJlYW5FeGNlcHRpb24oIlByb2JsZW0gaW5qZWN0aW5nIHByb3BlcnR5OiAgIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICAKKwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9Qcm9wZXJ0eVZhbHVlU3R1Yi5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9Qcm9wZXJ0eVZhbHVlU3R1Yi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYThmNTYwLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvUHJvcGVydHlWYWx1ZVN0dWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotCi0vKioKLSAqIFRoaXMgaXMgdGhlIFNwcmluZyBydW50aW1lIHNpZGUgc3R1YiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgVHVzY2FueSB0aWUgY2xhc3MuCi0gKiBJdCBlbmFibGVzIHRoZSBUdXNjYW55IGNvZGUgdG8gaW52b2tlIG1ldGhvZHMgb24gYSBTcHJpbmcgY29udGV4dCB3aXRob3V0Ci0gKiBuZWVkaW5nIHRvIGtub3cgYWJvdXQgYW55IFNwcmluZyBjbGFzc2VzLiBTZWUgdGhlIFByb3BlcnR5VmFsdWVUaWUgY2xhc3MKLSAqIGluIHRoZSBpbXBsZW1lbnRhdGlvbi1zcHJpbmcgbW9kdWxlIGZvciB3aGF0IHRoZSB0aWUgZG9lcy4gCi0gKi8KLXB1YmxpYyBjbGFzcyBQcm9wZXJ0eVZhbHVlU3R1YiB7Ci0KLSAgICBwcml2YXRlIE9iamVjdCB0aWU7Ci0gICAgcHJpdmF0ZSBNZXRob2QgZ2V0UHJvcGVydHlPYmo7Ci0gICAgCi0gICAgcHVibGljIFByb3BlcnR5VmFsdWVTdHViKE9iamVjdCB0aWUpIHsKLSAgICAgICAgdGhpcy50aWUgPSB0aWU7Ci0gICAgICAgIENsYXNzPD8+IHRpZUNsYXNzID0gdGllLmdldENsYXNzKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBnZXRQcm9wZXJ0eU9iaiA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0UHJvcGVydHlPYmoiLCBuZXcgQ2xhc3M8Pz5bXXtDbGFzcy5jbGFzcywgU3RyaW5nLmNsYXNzfSk7Ci0gICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHlPYmooQ2xhc3M8Pz4gcHJvcGVydHlUeXBlLCBTdHJpbmcgbmFtZSkgewotICAgICAgICB0cnkgewotCi0gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydHlPYmouaW52b2tlKHRpZSwgcHJvcGVydHlUeXBlLCBuYW1lKTsKLQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvUmVmZXJlbmNlQW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9SZWZlcmVuY2VBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEKaW5kZXggZGQ0M2Q2My4uYWQ3OWRiOCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9SZWZlcmVuY2VBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9SZWZlcmVuY2VBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEKQEAgLTI0LDYgKzI0LDcgQEAKIGltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm92aWRlci5Db21wb25lbnRXcmFwcGVyOwogaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuQmVhblV0aWxzOwogaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuQmVhbnNFeGNlcHRpb247CkBAIC0zNSwxMiArMzYsMTIgQEAKIHB1YmxpYyBjbGFzcyBSZWZlcmVuY2VBbm5vdGF0aW9uUHJvY2Vzc29yIGltcGxlbWVudHMgQmVhblBvc3RQcm9jZXNzb3IgewogCiAgICAgcHJpdmF0ZSBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gcmVmZXJlbmNlQW5ub3RhdGlvblR5cGUgPSBSZWZlcmVuY2UuY2xhc3M7Ci0gICAgcHJpdmF0ZSBDb21wb25lbnRTdHViIGNvbXBvbmVudDsKLSAgICAKLSAgICBwdWJsaWMgUmVmZXJlbmNlQW5ub3RhdGlvblByb2Nlc3NvciAoQ29tcG9uZW50U3R1YiBjb21wb25lbnQpIHsKKyAgICBwcml2YXRlIENvbXBvbmVudFdyYXBwZXIgY29tcG9uZW50OworCisgICAgcHVibGljIFJlZmVyZW5jZUFubm90YXRpb25Qcm9jZXNzb3IoQ29tcG9uZW50V3JhcHBlciBjb21wb25lbnQpIHsKICAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CiAgICAgfQotICAgIAorCiAgICAgLyoqCiAgICAgICogR2V0cyByZWZlcmVjZSBhbm5vdGF0aW9uIHR5cGUuCiAgICAgICovCkBAIC02MSw4ICs2Miw3IEBACiAgICAgICogCiAgICAgICogQHNlZSBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkJlYW5Qb3N0UHJvY2Vzc29yI3Bvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKICAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkgCi0gICAgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKICAgICAgICAgcHJvY2Vzc0Fubm90YXRpb24oYmVhbik7CiAgICAgICAgIHJldHVybiBiZWFuOwogICAgIH0KQEAgLTcyLDggKzcyLDcgQEAKICAgICAgKiAKICAgICAgKiBAc2VlIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3IjcG9zdFByb2Nlc3NBZnRlckluaXRpYWxpemF0aW9uKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCiAgICAgICovCi0gICAgcHVibGljIE9iamVjdCBwb3N0UHJvY2Vzc0FmdGVySW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkKLSAgICB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgIHB1YmxpYyBPYmplY3QgcG9zdFByb2Nlc3NBZnRlckluaXRpYWxpemF0aW9uKE9iamVjdCBiZWFuLCBTdHJpbmcgYmVhbk5hbWUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CiAgICAgICAgIHJldHVybiBiZWFuOwogICAgIH0KIApAQCAtODEsMjcgKzgwLDMwIEBACiAgICAgICogPHA+UHJvY2Vzc2VzIGEgYmVhbnMgZmllbGRzIGZvciBpbmplY3Rpb24gaWYgaXQgaGFzIGEge0BsaW5rIFJlZmVyZW5jZX0gYW5ub3RhdGlvbi48L3A+CiAgICAgICovCiAgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0Fubm90YXRpb24oZmluYWwgT2JqZWN0IGJlYW4pIHsKLSAgICAgICAgCi0gICAgICAgIGZpbmFsIENsYXNzPD8+IGNsYXp6ID0gYmVhbi5nZXRDbGFzcygpOyAgICAgICAgCisKKyAgICAgICAgZmluYWwgQ2xhc3M8Pz4gY2xhenogPSBiZWFuLmdldENsYXNzKCk7CiAKICAgICAgICAgUmVmbGVjdGlvblV0aWxzLmRvV2l0aE1ldGhvZHMoY2xhenosIG5ldyBSZWZsZWN0aW9uVXRpbHMuTWV0aG9kQ2FsbGJhY2soKSB7CiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBkb1dpdGgoTWV0aG9kIG1ldGhvZCkgewogCi0gICAgICAgICAgICAgICAgUmVmZXJlbmNlIGFubm90YXRpb24gPSAoUmVmZXJlbmNlKSBtZXRob2QuZ2V0QW5ub3RhdGlvbihnZXRSZWZlcmVuY2VBbm5vdGF0aW9uVHlwZSgpKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBSZWZlcmVuY2UgYW5ub3RhdGlvbiA9IChSZWZlcmVuY2UpbWV0aG9kLmdldEFubm90YXRpb24oZ2V0UmVmZXJlbmNlQW5ub3RhdGlvblR5cGUoKSk7CisKICAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChNb2RpZmllci5pc1N0YXRpYyhtZXRob2QuZ2V0TW9kaWZpZXJzKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJSZWZlcmVuY2UgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHN0YXRpYyBtZXRob2RzIik7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgaWYgKE1vZGlmaWVyLmlzUHJpdmF0ZShtZXRob2QuZ2V0TW9kaWZpZXJzKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJSZWZlcmVuY2UgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHByaXZhdGUgbWV0aG9kcyIpOwogICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJSZWZlcmVuY2UgYW5ub3RhdGlvbiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQ6ICIgKyBtZXRob2QpOworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZmVyZW5jZSBhbm5vdGF0aW9uIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBhcmd1bWVudDogIiArIG1ldGhvZCk7CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHBkID0gQmVhblV0aWxzLmZpbmRQcm9wZXJ0eUZvck1ldGhvZChtZXRob2QpOwogICAgICAgICAgICAgICAgICAgICBpZiAocGQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlZk5hbWUgPSBhbm5vdGF0aW9uLm5hbWUoKTsKQEAgLTExNCwzMSArMTE2LDMzIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9KTsKLSAgICAgICAgCisKICAgICAgICAgUmVmbGVjdGlvblV0aWxzLmRvV2l0aEZpZWxkcyhjbGF6eiwgbmV3IFJlZmxlY3Rpb25VdGlscy5GaWVsZENhbGxiYWNrKCkgewogICAgICAgICAgICAgcHVibGljIHZvaWQgZG9XaXRoKEZpZWxkIGZpZWxkKSB7CiAKLSAgICAgICAgICAgICAgICBSZWZlcmVuY2UgYW5ub3RhdGlvbiA9IChSZWZlcmVuY2UpIGZpZWxkLmdldEFubm90YXRpb24oZ2V0UmVmZXJlbmNlQW5ub3RhdGlvblR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgUmVmZXJlbmNlIGFubm90YXRpb24gPSAoUmVmZXJlbmNlKWZpZWxkLmdldEFubm90YXRpb24oZ2V0UmVmZXJlbmNlQW5ub3RhdGlvblR5cGUoKSk7CisKICAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChNb2RpZmllci5pc1N0YXRpYyhmaWVsZC5nZXRNb2RpZmllcnMoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJlZmVyZW5jZSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gc3RhdGljIGZpZWxkcyIpOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgIGlmIChNb2RpZmllci5pc1ByaXZhdGUoZmllbGQuZ2V0TW9kaWZpZXJzKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJSZWZlcmVuY2UgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHByaXZhdGUgZmllbGRzIik7CiAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgICAgICAgICBSZWZsZWN0aW9uVXRpbHMubWFrZUFjY2Vzc2libGUoZmllbGQpOwotICAgICAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICBPYmplY3QgcmVmZXJlbmNlT2JqID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlZk5hbWUgPSBhbm5vdGF0aW9uLm5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCIiLmVxdWFscyhyZWZOYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlT2JqID0gY29tcG9uZW50LmdldFNlcnZpY2UoZmllbGQuZ2V0VHlwZSgpLCBmaWVsZC5nZXROYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlT2JqID0gY29tcG9uZW50LmdldFNlcnZpY2UoZmllbGQuZ2V0VHlwZSgpLCByZWZOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VPYmogIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmxlY3Rpb25VdGlscy5zZXRGaWVsZChmaWVsZCwgYmVhbiwgcmVmZXJlbmNlT2JqKTsKICAgICAgICAgICAgICAgICB9CkBAIC0xNTAsMTIgKzE1NCwxMiBAQAogICAgICAqIFByb2Nlc3NlcyBhIHByb3BlcnR5IGRlc2NyaXB0b3IgdG8gaW5qZWN0IGEgc2VydmljZS4KICAgICAgKi8KICAgICBwdWJsaWMgdm9pZCBpbmplY3RSZWZlcmVuY2UoT2JqZWN0IGJlYW4sIFByb3BlcnR5RGVzY3JpcHRvciBwZCwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgICAgICAgIAorCiAgICAgICAgIE9iamVjdCByZWZlcmVuY2VPYmogPSBjb21wb25lbnQuZ2V0U2VydmljZShwZC5nZXRQcm9wZXJ0eVR5cGUoKSwgbmFtZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChyZWZlcmVuY2VPYmogIT0gbnVsbCkgewotICAgICAgICAgICAgdHJ5IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcGQuZ2V0V3JpdGVNZXRob2QoKS5pbnZva2UoYmVhbiwgbmV3IE9iamVjdFtdIHsgcmVmZXJlbmNlT2JqIH0pOworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBwZC5nZXRXcml0ZU1ldGhvZCgpLmludm9rZShiZWFuLCBuZXcgT2JqZWN0W10ge3JlZmVyZW5jZU9ian0pOwogICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRmF0YWxCZWFuRXhjZXB0aW9uKCJQcm9ibGVtIGluamVjdGluZyByZWZlcmVuY2U6ICAiICsgZS5nZXRNZXNzYWdlKCksIGUpOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci9TcHJpbmdYTUxCZWFuRGVmaW5pdGlvbkxvYWRlckltcGwuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXJJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhMmM2NQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXJJbXBsLmphdmEKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3I7CisKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuUHJvY2Vzc29yQ29udGV4dDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdCZWFuRWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5jb250ZXh0LlNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sLlNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWwuWG1sQmVhbkRlZmluaXRpb25SZWFkZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LkFwcGxpY2F0aW9uQ29udGV4dDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvcmUuaW8uVXJsUmVzb3VyY2U7CisKKy8qKgorICogQSB0aWUgdGhhdCBhbGxvd3MgVHVzY2FueSB0byBjYWxsIFNwcmluZyBsaWJyYXJ5IHRvIGxvYWQgdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgZm9yIHRoZSBwdXJwb3NlIG9mIGludHJvc3BlY3Rpb24KKyAqLworcHVibGljIGNsYXNzIFNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVySW1wbCBpbXBsZW1lbnRzIFNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyIHsKKworICAgIHByaXZhdGUgc3RhdGljIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KE9iamVjdCBzY2FQYXJlbnRDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8VVJMPiByZXNvdXJjZXMpIHsKKyAgICAgICAgaWYgKGNsYXNzTG9hZGVyID09IG51bGwpIHsKKyAgICAgICAgICAgIGNsYXNzTG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgYXBwQ3R4ID0KKyAgICAgICAgICAgIG5ldyBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KChBcHBsaWNhdGlvbkNvbnRleHQpc2NhUGFyZW50Q29udGV4dCwgY2xhc3NMb2FkZXIpOworICAgICAgICBYbWxCZWFuRGVmaW5pdGlvblJlYWRlciB4bWxSZWFkZXIgPSBuZXcgWG1sQmVhbkRlZmluaXRpb25SZWFkZXIoYXBwQ3R4KTsKKworICAgICAgICAvLyBSRVZJRVc6IFtyZmVuZ10gSG93IGRvIHdlIGNvbnRyb2wgdGhlIHNjaGVtYSB2YWxpZGF0aW9uIAorICAgICAgICB4bWxSZWFkZXIuc2V0VmFsaWRhdGluZyhmYWxzZSk7CisKKyAgICAgICAgZm9yIChVUkwgcmVzb3VyY2UgOiByZXNvdXJjZXMpIHsKKyAgICAgICAgICAgIHhtbFJlYWRlci5sb2FkQmVhbkRlZmluaXRpb25zKG5ldyBVcmxSZXNvdXJjZShyZXNvdXJjZSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFwcEN0eDsKKworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBPYmplY3QgbG9hZChMaXN0PFVSTD4gcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PiBzZXJ2aWNlRWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudD4gcmVmZXJlbmNlRWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBUHJvcGVydHlFbGVtZW50PiBwcm9wZXJ0eUVsZW1lbnRzLAorICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFNwcmluZ0JlYW5FbGVtZW50PiBiZWFuRWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgeworICAgICAgICAvLyBGSVhNRTogW3JmZW5nXSBXZSBzaG91bGQgdHJ5IHRvIGF2b2lkIHBhcnNpbmcgdGhlIFNwcmluZyB4bWwgdHdpY2UgZm9yIHRoZSBkZXBsb3ltZW50IGFuZCBydW50aW1lCisgICAgICAgIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgYXBwbGljYXRpb25Db250ZXh0ID0gY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KG51bGwsIG51bGwsIHJlc291cmNlcyk7CisgICAgICAgIHNlcnZpY2VFbGVtZW50cy5hZGRBbGwoYXBwbGljYXRpb25Db250ZXh0LmdldFNlcnZpY2VFbGVtZW50cygpKTsKKyAgICAgICAgcmVmZXJlbmNlRWxlbWVudHMuYWRkQWxsKGFwcGxpY2F0aW9uQ29udGV4dC5nZXRSZWZlcmVuY2VFbGVtZW50cygpKTsKKyAgICAgICAgcHJvcGVydHlFbGVtZW50cy5hZGRBbGwoYXBwbGljYXRpb25Db250ZXh0LmdldFByb3BlcnR5RWxlbWVudHMoKSk7CisgICAgICAgIGJlYW5FbGVtZW50cy5hZGRBbGwoYXBwbGljYXRpb25Db250ZXh0LmdldEJlYW5FbGVtZW50cygpKTsKKyAgICAgICAgcmV0dXJuIGFwcGxpY2F0aW9uQ29udGV4dDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9Db21wb25lbnRXcmFwcGVyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvQ29tcG9uZW50V3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZGRkOGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvQ29tcG9uZW50V3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXI7CisKKy8qKgorICogV3JhcHBlciBmb3IgdGhlIENvbXBvbmVudAorICovCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7CisKK3B1YmxpYyBjbGFzcyBDb21wb25lbnRXcmFwcGVyIHsKKworICAgIHByaXZhdGUgUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQ7CisKKyAgICBwdWJsaWMgQ29tcG9uZW50V3JhcHBlcihSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCkgeworICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IGdldFNlcnZpY2UoQ2xhc3M8Pz4gdHlwZSwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5nZXRDb21wb25lbnRDb250ZXh0KCkuZ2V0U2VydmljZSh0eXBlLCBuYW1lKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvUHJvcGVydHlWYWx1ZVdyYXBwZXIuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9Qcm9wZXJ0eVZhbHVlV3JhcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjYTE0OTIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvUHJvcGVydHlWYWx1ZVdyYXBwZXIuamF2YQpAQCAtMCwwICsxLDUwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb3ZpZGVyOworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvbmVudFByb3BlcnR5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udGV4dC5Qcm9wZXJ0eVZhbHVlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudDsKKworLyoqCisgKiBXcmFwcGVyIGZvciBQcm9wZXJ0eVZhbHVlCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9wZXJ0eVZhbHVlV3JhcHBlciB7CisKKyAgICBwcml2YXRlIFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50OworICAgIHByaXZhdGUgUHJvcGVydHlWYWx1ZUZhY3RvcnkgcHJvcGVydHlGYWN0b3J5OworCisgICAgcHVibGljIFByb3BlcnR5VmFsdWVXcmFwcGVyKFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LCBQcm9wZXJ0eVZhbHVlRmFjdG9yeSBwcm9wZXJ0eUZhY3RvcnkpIHsKKyAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CisgICAgICAgIHRoaXMucHJvcGVydHlGYWN0b3J5ID0gcHJvcGVydHlGYWN0b3J5OworICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHlPYmooQ2xhc3M8Pz4gdHlwZSwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgTGlzdDxDb21wb25lbnRQcm9wZXJ0eT4gcHJvcHMgPSBjb21wb25lbnQuZ2V0UHJvcGVydGllcygpOworICAgICAgICBmb3IgKENvbXBvbmVudFByb3BlcnR5IHByb3AgOiBwcm9wcykgeworICAgICAgICAgICAgaWYgKHByb3AuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eUZhY3RvcnkuY3JlYXRlUHJvcGVydHlWYWx1ZShwcm9wLCB0eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbnVsbDsgLy8gcHJvcGVydHkgbmFtZSBub3QgZm91bmQKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL1NwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjc4MzEzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL1NwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDgxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm92aWRlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udGV4dC5Qcm9wZXJ0eVZhbHVlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbi5Qcm94eUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC5TcHJpbmdDb250ZXh0V3JhcHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5JbXBsZW1lbnRhdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50U2VydmljZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuQXBwbGljYXRpb25Db250ZXh0OworCisvKioKKyAqIEEgcHJvdmlkZXIgY2xhc3MgZm9yIHJ1bnRpbWUgU3ByaW5nIGltcGxlbWVudGF0aW9uIGluc3RhbmNlcworICogQHZlcnNpb24gJFJldiQgJERhdGUkIAorICovCitwdWJsaWMgY2xhc3MgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIEltcGxlbWVudGF0aW9uUHJvdmlkZXIgeworICAgIHByaXZhdGUgUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQ7CisKKyAgICAvLyBBIFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0IG9iamVjdAorICAgIHByaXZhdGUgU3ByaW5nQ29udGV4dFdyYXBwZXIgc3ByaW5nQ29udGV4dDsKKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdG9yIGZvciB0aGUgcHJvdmlkZXIgLSB0YWtlcyBhIGNvbXBvbmVudCBkZWZpbml0aW9uIGFuZCBhIFNwcmluZyBpbXBsZW1lbnRhdGlvbgorICAgICAqIGRlc2NyaXB0aW9uCisgICAgICogQHBhcmFtIGNvbXBvbmVudCAtIHRoZSBjb21wb25lbnQgaW4gdGhlIGFzc2VtYmx5CisgICAgICogQHBhcmFtIGltcGxlbWVudGF0aW9uIC0gdGhlIGltcGxlbWVudGF0aW9uCisgICAgICovCisgICAgcHVibGljIFNwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIoUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ByaW5nSW1wbGVtZW50YXRpb25XcmFwcGVyIGltcGxlbWVudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ29udGV4dCBwYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveHlGYWN0b3J5IHByb3h5U2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVZhbHVlRmFjdG9yeSBwcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSkgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKKworICAgICAgICBzcHJpbmdDb250ZXh0ID0gbmV3IFNwcmluZ0NvbnRleHRXcmFwcGVyKGltcGxlbWVudGF0aW9uLCBpbXBsZW1lbnRhdGlvbi5nZXRSZXNvdXJjZSgpKTsKKworICAgIH0gLy8gZW5kIGNvbnN0cnVjdG9yCisKKyAgICBwdWJsaWMgSW52b2tlciBjcmVhdGVJbnZva2VyKFJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UsIE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIG5ldyBTcHJpbmdJbnZva2VyKGNvbXBvbmVudCwgc3ByaW5nQ29udGV4dCwgc2VydmljZSwgb3BlcmF0aW9uKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c09uZVdheUludm9jYXRpb24oKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdGFydCB0aGlzIFNwcmluZyBpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgeworICAgICAgICBzcHJpbmdDb250ZXh0LnN0YXJ0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RvcCB0aGlzIGltcGxlbWVudGF0aW9uIGluc3RhbmNlCisgICAgICovCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKKyAgICAgICAgc3ByaW5nQ29udGV4dC5jbG9zZSgpOworICAgIH0KKworfSAvLyBlbmQgY2xhc3MgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlcgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL1NwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTE2ZmIzCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL1NwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRleHQuUHJvcGVydHlWYWx1ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLlV0aWxpdHlFeHRlbnNpb25Qb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbi5FeHRlbnNpYmxlUHJveHlGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5pbnZvY2F0aW9uLlByb3h5RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5jb250ZXh0LlNwcmluZ0FwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkNvbnRleHQ7CisKKy8qKgorICogSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkgZm9yIFNwcmluZyBpbXBsZW1lbnRhdGlvbiB0eXBlCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQgCisgKgorICovCitwdWJsaWMgY2xhc3MgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkgaW1wbGVtZW50cyBJbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeTxTcHJpbmdJbXBsZW1lbnRhdGlvbj4geworICAgIHByaXZhdGUgUHJveHlGYWN0b3J5IHByb3h5RmFjdG9yeTsKKyAgICBwcml2YXRlIFByb3BlcnR5VmFsdWVGYWN0b3J5IHByb3BlcnR5RmFjdG9yeTsKKyAgICBwcml2YXRlIFNwcmluZ0FwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yIGNvbnRleHRBY2Nlc3NvcjsKKworICAgIC8qKgorICAgICAqIFNpbXBsZSBjb25zdHJ1Y3RvcgorICAgICAqCisgICAgICovCisgICAgcHVibGljIFNwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5KEV4dGVuc2lvblBvaW50UmVnaXN0cnkgcmVnaXN0cnkpIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgVXRpbGl0eUV4dGVuc2lvblBvaW50IHV0aWxpdGllcyA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KFV0aWxpdHlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CisgICAgICAgIGNvbnRleHRBY2Nlc3NvciA9IHV0aWxpdGllcy5nZXRVdGlsaXR5KFNwcmluZ0FwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yLmNsYXNzKTsKKyAgICAgICAgcHJveHlGYWN0b3J5ID0gRXh0ZW5zaWJsZVByb3h5RmFjdG9yeS5nZXRJbnN0YW5jZShyZWdpc3RyeSk7CisgICAgICAgIHByb3BlcnR5RmFjdG9yeSA9IHV0aWxpdGllcy5nZXRVdGlsaXR5KFByb3BlcnR5VmFsdWVGYWN0b3J5LmNsYXNzKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIGEgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlciBmb3IgYSBnaXZlbiBjb21wb25lbnQgYW5kIFNwcmluZyBpbXBsZW1lbnRhdGlvbgorICAgICAqIEBwYXJhbSBjb21wb25lbnQgdGhlIGNvbXBvbmVudCBmb3Igd2hpY2ggaW1wbGVtZW50YXRpb24gaW5zdGFuY2VzIGFyZSByZXF1aXJlZAorICAgICAqIEBwYXJhbSBpbXBsZW1lbnRhdGlvbiB0aGUgU3ByaW5nIGltcGxlbWVudGF0aW9uIHdpdGggZGV0YWlscyBvZiB0aGUgY29tcG9uZW50CisgICAgICogaW1wbGVtZW50YXRpb24KKyAgICAgKiBAcmV0dXJuIHRoZSBTcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyIGZvciB0aGUgc3BlY2lmaWVkIGNvbXBvbmVudAorICAgICAqLworICAgIHB1YmxpYyBJbXBsZW1lbnRhdGlvblByb3ZpZGVyIGNyZWF0ZUltcGxlbWVudGF0aW9uUHJvdmlkZXIoUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcHJpbmdJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRhdGlvbikgeworICAgICAgICBBcHBsaWNhdGlvbkNvbnRleHQgcGFyZW50QXBwbGljYXRpb25Db250ZXh0ID0KKyAgICAgICAgICAgIChjb250ZXh0QWNjZXNzb3IgIT0gbnVsbCkgPyBjb250ZXh0QWNjZXNzb3IuZ2V0UGFyZW50QXBwbGljYXRpb25Db250ZXh0KCkgOiBudWxsOworICAgICAgICBTcHJpbmdJbXBsZW1lbnRhdGlvbldyYXBwZXIgdGllID0KKyAgICAgICAgICAgIG5ldyBTcHJpbmdJbXBsZW1lbnRhdGlvbldyYXBwZXIoaW1wbGVtZW50YXRpb24sIHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCwgY29tcG9uZW50LCBwcm9wZXJ0eUZhY3RvcnkpOworICAgICAgICByZXR1cm4gbmV3IFNwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIoY29tcG9uZW50LCB0aWUsIHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCwgcHJveHlGYWN0b3J5LCBwcm9wZXJ0eUZhY3RvcnkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGNsYXNzIG9mIHRoZSBTcHJpbmcgaW1wbGVtZW50YXRpb24KKyAgICAgKi8KKyAgICBwdWJsaWMgQ2xhc3M8U3ByaW5nSW1wbGVtZW50YXRpb24+IGdldE1vZGVsVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIFNwcmluZ0ltcGxlbWVudGF0aW9uLmNsYXNzOworICAgIH0KKworfSAvLyBlbmQgY2xhc3MgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9TcHJpbmdJbXBsZW1lbnRhdGlvbldyYXBwZXIuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9TcHJpbmdJbXBsZW1lbnRhdGlvbldyYXBwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTU5M2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL1NwcmluZ0ltcGxlbWVudGF0aW9uV3JhcHBlci5qYXZhCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb3ZpZGVyOworCitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb25lbnRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlByb3BlcnR5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUmVmZXJlbmNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udGV4dC5Qcm9wZXJ0eVZhbHVlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LkFwcGxpY2F0aW9uQ29udGV4dDsKKworLyoqCisgKiBXcmFwcGVyIGZvciBTcHJpbmdJbXBsZW1lbnRhdGlvbgorICovCitwdWJsaWMgY2xhc3MgU3ByaW5nSW1wbGVtZW50YXRpb25XcmFwcGVyIHsKKworICAgIHByaXZhdGUgU3ByaW5nSW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb247CisgICAgcHJpdmF0ZSBBcHBsaWNhdGlvbkNvbnRleHQgcGFyZW50QXBwbGljYXRpb25Db250ZXh0OworICAgIHByaXZhdGUgUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQ7CisgICAgcHJpdmF0ZSBQcm9wZXJ0eVZhbHVlRmFjdG9yeSBwcm9wZXJ0eUZhY3Rvcnk7CisKKyAgICBwdWJsaWMgU3ByaW5nSW1wbGVtZW50YXRpb25XcmFwcGVyKFNwcmluZ0ltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbkNvbnRleHQgcGFyZW50QXBwbGljYXRpb25Db250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlWYWx1ZUZhY3RvcnkgcHJvcGVydHlGYWN0b3J5KSB7CisgICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjsKKyAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7CisgICAgICAgIHRoaXMucHJvcGVydHlGYWN0b3J5ID0gcHJvcGVydHlGYWN0b3J5OworICAgICAgICB0aGlzLnBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCA9IHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpIHsKKyAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLmdldFVSSSgpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgTGlzdDxVUkw+IGdldFJlc291cmNlKCkgeworICAgICAgICByZXR1cm4gaW1wbGVtZW50YXRpb24uZ2V0UmVzb3VyY2UoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKSB7CisgICAgICAgIHJldHVybiBjb21wb25lbnQuZ2V0TmFtZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIE1ldGhvZCB0byBjcmVhdGUgYSBKYXZhIEJlYW4gZm9yIGEgUHJvcGVydHkgdmFsdWUKKyAgICAgKiBAcGFyYW0gPEI+IHRoZSBjbGFzcyB0eXBlIG9mIHRoZSBCZWFuCisgICAgICogQHBhcmFtIHJlcXVpcmVkVHlwZSAtIGEgQ2xhc3Mgb2JqZWN0IGZvciB0aGUgcmVxdWlyZWQgdHlwZQorICAgICAqIEBwYXJhbSBuYW1lIC0gdGhlIFByb3BlcnR5IG5hbWUKKyAgICAgKiBAcmV0dXJuIC0gYSBCZWFuIG9mIHRoZSBzcGVjaWZpZWQgcHJvcGVydHksIHdpdGggdmFsdWUgc2V0CisgICAgICovCisgICAgcHJpdmF0ZSA8Qj4gQiBnZXRQcm9wZXJ0eUJlYW4oQ2xhc3M8Pz4gcmVxdWlyZWRUeXBlLCBTdHJpbmcgbmFtZSkgeworICAgICAgICBCIHByb3BlcnR5T2JqZWN0ID0gbnVsbDsKKyAgICAgICAgLy8gR2V0IHRoZSBjb21wb25lbnQncyBsaXN0IG9mIHByb3BlcnRpZXMKKyAgICAgICAgTGlzdDxDb21wb25lbnRQcm9wZXJ0eT4gcHJvcHMgPSBjb21wb25lbnQuZ2V0UHJvcGVydGllcygpOworICAgICAgICBmb3IgKENvbXBvbmVudFByb3BlcnR5IHByb3AgOiBwcm9wcykgeworICAgICAgICAgICAgaWYgKHByb3AuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIC8vIE9uIGZpbmRpbmcgdGhlIHByb3BlcnR5LCBjcmVhdGUgYSBmYWN0b3J5IGZvciBpdCBhbmQgY3JlYXRlIGEgQmVhbiB1c2luZworICAgICAgICAgICAgICAgIC8vIHRoZSBmYWN0b3J5CisgICAgICAgICAgICAgICAgcHJvcGVydHlPYmplY3QgPSAoQilwcm9wZXJ0eUZhY3RvcnkuY3JlYXRlUHJvcGVydHlWYWx1ZShwcm9wLCByZXF1aXJlZFR5cGUpOworICAgICAgICAgICAgfSAvLyBlbmQgaWYKKyAgICAgICAgfSAvLyBlbmQgZm9yCisKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5T2JqZWN0OworICAgIH0KKworICAgIC8qKgorICAgICAqIENyZWF0ZXMgYSBwcm94eSBCZWFuIGZvciBhIHJlZmVyZW5jZQorICAgICAqIEBwYXJhbSA8Qj4gdGhlIEJ1c2luZXNzIGludGVyZmFjZSB0eXBlIGZvciB0aGUgcmVmZXJlbmNlCisgICAgICogQHBhcmFtIGJ1c2luZXNzSW50ZXJmYWNlIC0gdGhlIGJ1c2luZXNzIGludGVyZmFjZSBhcyBhIENsYXNzCisgICAgICogQHBhcmFtIHJlZmVyZW5jZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgUmVmZXJlbmNlCisgICAgICogQHJldHVybiBhbiBCZWFuIG9mIHRoZSB0eXBlIGRlZmluZWQgYnkgPEI+CisgICAgICovCisgICAgcHJpdmF0ZSA8Qj4gQiBnZXRTZXJ2aWNlKENsYXNzPEI+IGJ1c2luZXNzSW50ZXJmYWNlLCBTdHJpbmcgcmVmZXJlbmNlTmFtZSkgeworICAgICAgICByZXR1cm4gY29tcG9uZW50LmdldENvbXBvbmVudENvbnRleHQoKS5nZXRTZXJ2aWNlKGJ1c2luZXNzSW50ZXJmYWNlLCByZWZlcmVuY2VOYW1lKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXQgYSBCZWFuIGZvciBhIHJlZmVyZW5jZSBvciBmb3IgYSBwcm9wZXJ0eS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIEJlYW4gcmVxdWlyZWQKKyAgICAgKiBAcGFyYW0gcmVxdWlyZWRUeXBlIC0gdGhlIHJlcXVpcmVkIHR5cGUgb2YgdGhlIEJlYW4gKGVpdGhlciBhIEphdmEgY2xhc3Mgb3IgYSBKYXZhIGludGVyZmFjZSkKKyAgICAgKiBAcmV0dXJuIE9iamVjdCAtIGEgQmVhbiB3aGljaCBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgYmVhbgorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgZ2V0QmVhbihTdHJpbmcgbmFtZSwgQ2xhc3M8Pz4gcmVxdWlyZWRUeXBlKSB7CisgICAgICAgIC8vIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSByZXF1ZXN0ZWQgQmVhbiBpcyBlaXRoZXIgYSByZWZlcmVuY2Ugb3IgYSBwcm9wZXJ0eQorICAgICAgICAvLyBmcm9tIHRoZSBTcHJpbmcgY29udGV4dAorICAgICAgICBmb3IgKFJlZmVyZW5jZSByZWZlcmVuY2UgOiBpbXBsZW1lbnRhdGlvbi5nZXRSZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWZlcmVuY2UuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIEphdmEgaW50ZXJmYWNlIGZvciB0aGUgcmVmZXJlbmNlIChpdCBjYW4ndCBiZSBhbnkgb3RoZXIgaW50ZXJmYWNlIHR5cGUKKyAgICAgICAgICAgICAgICAvLyBmb3IgYSBTcHJpbmcgYXBwbGljYXRpb24gY29udGV4dCkKKyAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWRUeXBlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgSmF2YUludGVyZmFjZSBqYXZhSW50ZXJmYWNlID0gKEphdmFJbnRlcmZhY2UpcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuZ2V0SW50ZXJmYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkVHlwZSA9IGphdmFJbnRlcmZhY2UuZ2V0SmF2YUNsYXNzKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIHRoZSBwcm94eSBmb3IgdGhlIHJlZmVyZW5jZQorICAgICAgICAgICAgICAgIHJldHVybiBnZXRTZXJ2aWNlKHJlcXVpcmVkVHlwZSwgcmVmZXJlbmNlLmdldE5hbWUoKSk7CisgICAgICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICB9IC8vIGVuZCBmb3IKKworICAgICAgICAvLyBGb3IgYSBwcm9wZXJ0eSwgZ2V0IHRoZSBuYW1lIGFuZCB0aGUgcmVxdWlyZWQgSmF2YSB0eXBlIGFuZCBjcmVhdGUgYSBCZWFuCisgICAgICAgIC8vIG9mIHRoYXQgdHlwZSB3aXRoIHRoZSB2YWx1ZSBpbnNlcnRlZC4KKyAgICAgICAgZm9yIChQcm9wZXJ0eSBwcm9wZXJ0eSA6IGltcGxlbWVudGF0aW9uLmdldFByb3BlcnRpZXMoKSkgeworICAgICAgICAgICAgaWYgKHByb3BlcnR5LmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWRUeXBlID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIG9ubHkgZGVhbHMgd2l0aCBhIHN1YnNldCBvZiB0eXBlcyBhbmQgd2FzIHN1cGVyY2VkZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gYnkgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIGltcGxlbWVudGF0aW9uICh3aGljaCB1c2VzIENsYXNzZXMgYXMgZm91bmQKKyAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIFNwcmluZyBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuCisgICAgICAgICAgICAgICAgICAgIC8vcmVxdWlyZWRUeXBlID0gSmF2YVhNTE1hcHBlci5nZXRKYXZhVHlwZSggcHJvcGVydHkuZ2V0WFNEVHlwZSgpICk7CisgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkVHlwZSA9IGltcGxlbWVudGF0aW9uLmdldFByb3BlcnR5Q2xhc3MobmFtZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0eUJlYW4ocmVxdWlyZWRUeXBlLCBwcm9wZXJ0eS5nZXROYW1lKCkpOworICAgICAgICAgICAgfSAvLyBlbmQgaWYKKyAgICAgICAgfSAvLyBlbmQgZm9yCisgICAgICAgICAgLy8gVE9ETzogTm9TdWNoQmVhbkV4Y2VwdGlvbgorICAgICAgICAgIC8vIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gZmluZCBCZWFuIHdpdGggbmFtZSAiICsgbmFtZSk7CisgICAgICAgIHJldHVybiBudWxsOworCisgICAgfSAvLyBlbmQgbWV0aG9kIGdldEJlYW4oIFN0cmluZywgQ2xhc3MgKQorCisgICAgcHVibGljIENvbXBvbmVudFdyYXBwZXIgZ2V0Q29tcG9uZW50V3JhcHBlcigpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnRXcmFwcGVyKGNvbXBvbmVudCk7CisgICAgfQorCisgICAgcHVibGljIFByb3BlcnR5VmFsdWVXcmFwcGVyIGdldFByb3BlcnR5VmFsdWVXcmFwcGVyKCkgeworICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5VmFsdWVXcmFwcGVyKGNvbXBvbmVudCwgcHJvcGVydHlGYWN0b3J5KTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2xhc3NMb2FkZXIgZ2V0Q2xhc3NMb2FkZXIoKSB7CisgICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbi5nZXRDbGFzc0xvYWRlcigpOworICAgIH0KKworICAgIHB1YmxpYyBBcHBsaWNhdGlvbkNvbnRleHQgZ2V0UGFyZW50QXBwbGljYXRpb25Db250ZXh0KCkgeworICAgICAgICByZXR1cm4gcGFyZW50QXBwbGljYXRpb25Db250ZXh0OworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL1NwcmluZ0ludm9jYXRpb25FeGNlcHRpb24uamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9TcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxZDNmNQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9TcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXI7CisKKy8qKgorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xMTU3NzkwMDM2NjM4MTU3NTEzTDsKKworICAgIHB1YmxpYyBTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uKFN0cmluZyBtc2cpIHsKKyAgICAgICAgc3VwZXIobXNnKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbihUaHJvd2FibGUgZSkgeworICAgICAgICBzdXBlcihlKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbihTdHJpbmcgbXNnLCBUaHJvd2FibGUgZSkgeworICAgICAgICBzdXBlcihtc2csIGUpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL1NwcmluZ0ludm9rZXIuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9TcHJpbmdJbnZva2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWExZDZlNgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9TcHJpbmdJbnZva2VyLmphdmEKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb3ZpZGVyOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdCZWFuRWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5jb250ZXh0LlNwcmluZ0NvbnRleHRXcmFwcGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmltcGwuSmF2YUludGVyZmFjZVV0aWw7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlOworCisvKioKKyAqIEluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgYSBTcHJpbmcgYmVhbiBpbnZva2VyCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQgCisgKi8KK3B1YmxpYyBjbGFzcyBTcHJpbmdJbnZva2VyIGltcGxlbWVudHMgSW52b2tlciB7CisKKyAgICBwcml2YXRlIE1ldGhvZCB0aGVNZXRob2QgPSBudWxsOworICAgIHByaXZhdGUgT2JqZWN0IGJlYW47CisgICAgcHJpdmF0ZSBTcHJpbmdCZWFuRWxlbWVudCBiZWFuRWxlbWVudDsKKyAgICBwcml2YXRlIGJvb2xlYW4gYmFkSW52b2tlciA9IGZhbHNlOworCisgICAgcHJpdmF0ZSBTcHJpbmdDb250ZXh0V3JhcHBlciBzcHJpbmdDb250ZXh0OworICAgIHByaXZhdGUgT3BlcmF0aW9uIG9wZXJhdGlvbjsKKworICAgIC8qKgorICAgICAqIFNwcmluZ0ludm9rZXIgY29uc3RydWN0b3IKKyAgICAgKiBAcGFyYW0gY29tcG9uZW50IC0gdGhlIFNwcmluZyBjb21wb25lbnQgdG8gaW52b2tlCisgICAgICogQHBhcmFtIHNlcnZpY2UgLSB0aGUgc2VydmljZSB0byBpbnZva2UKKyAgICAgKiBAcGFyYW0gb3BlcmF0aW9uIC0gdGhlIG9wZXJhdGlvbiB0byBpbnZva2UKKyAgICAgKi8KKyAgICBwdWJsaWMgU3ByaW5nSW52b2tlcihSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBTcHJpbmdDb250ZXh0V3JhcHBlciBzcHJpbmdDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uIG9wZXJhdGlvbikgeworCisgICAgICAgIHRoaXMuc3ByaW5nQ29udGV4dCA9IHNwcmluZ0NvbnRleHQ7CisgICAgICAgIHRoaXMub3BlcmF0aW9uID0gb3BlcmF0aW9uOworCisgICAgICAgIC8vIEZyb20gdGhlIGNvbXBvbmVudCBhbmQgdGhlIHNlcnZpY2UsIGlkZW50aWZ5IHRoZSBTcHJpbmcgQmVhbiB3aGljaCBpcyB0aGUgdGFyZ2V0CisgICAgICAgIFNwcmluZ0ltcGxlbWVudGF0aW9uIHRoZUltcGxlbWVudGF0aW9uID0gKFNwcmluZ0ltcGxlbWVudGF0aW9uKWNvbXBvbmVudC5nZXRJbXBsZW1lbnRhdGlvbigpOworICAgICAgICBiZWFuRWxlbWVudCA9IHRoZUltcGxlbWVudGF0aW9uLmdldEJlYW5Gcm9tU2VydmljZShzZXJ2aWNlLmdldFNlcnZpY2UoKSk7CisKKyAgICAgICAgaWYgKGJlYW5FbGVtZW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIGJhZEludm9rZXIgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICB9IC8vIGVuZCBjb25zdHJ1Y3RvciBTcHJpbmdJbnZva2VyCisKKyAgICAvLyBMYXp5LWxvYWQgdGhlIG1ldGhvZCB0byBhdm9pZCB0aW1pbmcgcHJvYmxlbXMgd2l0aCB0aGUgU3ByaW5nIENvbnRleHQKKyAgICBwcml2YXRlIHZvaWQgc2V0dXBNZXRob2QoKSB0aHJvd3MgU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBiZWFuID0gc3ByaW5nQ29udGV4dC5nZXRCZWFuKGJlYW5FbGVtZW50LmdldElkKCkpOworICAgICAgICAgICAgQ2xhc3M8Pz4gYmVhbkNsYXNzID0gYmVhbi5nZXRDbGFzcygpOworICAgICAgICAgICAgdGhlTWV0aG9kID0gSmF2YUludGVyZmFjZVV0aWwuZmluZE1ldGhvZChiZWFuQ2xhc3MsIG9wZXJhdGlvbik7CisgICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiU3ByaW5nSW52b2tlciAtIGZvdW5kIG1ldGhvZCAiICsgdGhlTWV0aG9kLmdldE5hbWUoKSApOworICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIE9iamVjdCBkb0ludm9rZShPYmplY3QgcGF5bG9hZCkgdGhyb3dzIFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24geworICAgICAgICBpZiAodGhlTWV0aG9kID09IG51bGwpCisgICAgICAgICAgICBzZXR1cE1ldGhvZCgpOworCisgICAgICAgIGlmIChiYWRJbnZva2VyKQorICAgICAgICAgICAgdGhyb3cgbmV3IFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24oIlNwcmluZyBpbnZva2VyIGluY29ycmVjdGx5IGNvbmZpZ3VyZWQiKTsKKyAgICAgICAgLy8gSW52b2tlIHRoZSBtZXRob2Qgb24gdGhlIFNwcmluZyBiZWFuIHVzaW5nIHRoZSBwYXlsb2FkLCByZXR1cm5pbmcgdGhlIHJlc3VsdHMKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdCByZXQ7CisKKyAgICAgICAgICAgIGlmIChwYXlsb2FkICE9IG51bGwgJiYgIXBheWxvYWQuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSB0aGVNZXRob2QuaW52b2tlKGJlYW4sIHBheWxvYWQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByZXQgPSB0aGVNZXRob2QuaW52b2tlKGJlYW4sIChPYmplY3RbXSlwYXlsb2FkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24oIlNwcmluZyBpbnZva2VyIGludm9rZSBtZXRob2QgJyIgKyB0aGVNZXRob2QuZ2V0TmFtZSgpICsgIicgZXJyb3IuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuZ2V0Q2F1c2UoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbigiU3ByaW5nIGludm9rZXIgaW52b2tlIG1ldGhvZCAnIiArIHRoZU1ldGhvZC5nZXROYW1lKCkgKyAiJyBlcnJvci4iLCBlKTsKKyAgICAgICAgfQorCisgICAgfSAvLyBlbmQgbWV0aG9kIGRvSW52b2tlCisKKyAgICAvKioKKyAgICAgKiBAcGFyYW0gbXNnIHRoZSBtZXNzYWdlIHRvIGludm9rZSBvbiB0aGUgdGFyZ2V0IGJlYW4KKyAgICAgKi8KKyAgICBwdWJsaWMgTWVzc2FnZSBpbnZva2UoTWVzc2FnZSBtc2cpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIE9iamVjdCByZXNwID0gZG9JbnZva2UobXNnLmdldEJvZHkoKSk7CisgICAgICAgICAgICBtc2cuc2V0Qm9keShyZXNwKTsKKyAgICAgICAgfSBjYXRjaCAoU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBtc2cuc2V0RmF1bHRCb2R5KGUuZ2V0Q2F1c2UoKSk7CisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICAgICAgICBtc2cuc2V0RmF1bHRCb2R5KGUpOworICAgICAgICB9CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTcHJpbmcgSW52b2tlciAtIGludm9rZSBjYWxsZWQiKTsKKyAgICAgICAgcmV0dXJuIG1zZzsKKyAgICB9IC8vIGVuZCBtZXRob2QgaW52b2tlCisKK30gLy8gZW5kIGNsYXNzIFNwcmluZ0ludm9rZXIKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9ydW50aW1lL2NvbnRleHQvU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3J1bnRpbWUvY29udGV4dC9TQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MjYzMDYuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3J1bnRpbWUvY29udGV4dC9TQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5ydW50aW1lLmNvbnRleHQ7Ci0KLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkNvbmZpZ3VyYWJsZUxpc3RhYmxlQmVhbkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQuRGVmYXVsdExpc3RhYmxlQmVhbkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LkFwcGxpY2F0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5HZW5lcmljQXBwbGljYXRpb25Db250ZXh0OwotCi1wdWJsaWMgY2xhc3MgU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dCBleHRlbmRzIEdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgewotCi0JIENsYXNzTG9hZGVyIGNsYXNzbG9hZGVyID0gbnVsbDsKLQkgCi0JIHB1YmxpYyBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KERlZmF1bHRMaXN0YWJsZUJlYW5GYWN0b3J5IGJlYW5GYWN0b3J5LCAKLSAgICAgICAgICAgICAJCQkJCQkJIEFwcGxpY2F0aW9uQ29udGV4dCBwYXJlbnQsCi0gICAgICAgICAgICAgCQkJCQkJCSBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcikgewotCQkgc3VwZXIoYmVhbkZhY3RvcnksIHBhcmVudCk7Ci0JCSB0aGlzLmNsYXNzbG9hZGVyID0gY2xhc3Nsb2FkZXI7Ci0JIH0KLQkgCi0JIHB1YmxpYyBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KEFwcGxpY2F0aW9uQ29udGV4dCBwYXJlbnQsCi0JCQkJIAkJCQkJCSBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcikgewotCQkgc3VwZXIocGFyZW50KTsKLQkJIHRoaXMuY2xhc3Nsb2FkZXIgPSBjbGFzc2xvYWRlcjsKLQkgfQotCi0JIEBPdmVycmlkZQotCSBwcm90ZWN0ZWQgdm9pZCBwb3N0UHJvY2Vzc0JlYW5GYWN0b3J5IChDb25maWd1cmFibGVMaXN0YWJsZUJlYW5GYWN0b3J5IGJlYW5GYWN0b3J5KSB7Ci0JCSBiZWFuRmFjdG9yeS5zZXRCZWFuQ2xhc3NMb2FkZXIoY2xhc3Nsb2FkZXIpOwotCSB9Ci19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcnVudGltZS9jb250ZXh0L1NDQVBhcmVudEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3J1bnRpbWUvY29udGV4dC9TQ0FQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZmMWY2ZC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcnVudGltZS9jb250ZXh0L1NDQVBhcmVudEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjAyICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnJ1bnRpbWUuY29udGV4dDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci0KLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5CZWFuRmFjdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuTm9TdWNoQmVhbkRlZmluaXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5BdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuQXBwbGljYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkV2ZW50OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5NZXNzYWdlU291cmNlUmVzb2x2YWJsZTsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuTm9TdWNoTWVzc2FnZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvcmUuaW8uUmVzb3VyY2U7Ci0KLS8qKgotICogQSBTcHJpbmcgUGFyZW50QXBwbGljYXRpb25Db250ZXh0IGZvciBhIGdpdmVuIFNwcmluZyBJbXBsZW1lbnRhdGlvbgotICoKLSAqIFRoZSBQYXJlbnQgYXBwbGljYXRpb24gY29udGV4dCBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhvc2UgZW50aXRpZXMgd2l0aGluIGEgU3ByaW5nCi0gKiBhcHBsaWNhdGlvbiBjb250ZXh0IHRoYXQgYWN0dWFsbHkgYmVsb25nIHRvIFNDQSByYXRoZXIgdGhhbiB0byBTcHJpbmcuICBUaGUgcHJpbmNpcGFsIHRoaW5ncwotICogYXJlIFByb3BlcnRpZXMgYW5kIFJlZmVyZW5jZXMuICBUaGVzZSBtYXkgYmUgcHJlc2VudCBlaXRoZXIgdGhyb3VnaCBleHBsaWNpdCA8c2NhOnByb3BlcnR5Lz4KLSAqIGFuZCA8c2NhOnJlZmVyZW5jZS8+IGVsZW1lbnRzIGluIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IG9yIHRoZXkgbWF5IGJlIGltcGxpY2l0IHRocm91Z2gKLSAqIHVucmVzb2x2ZWQgU3ByaW5nIGJlYW4gPHByb3BlcnR5Li4uLz4gZWxlbWVudHMuICBJbiBlaXRoZXIgY2FzZSwgaXQgaXMgdGhlIFBhcmVudCBhcHBsaWNhdGlvbgotICogY29udGV4dCB0aGF0IG11c3QgcHJvdmlkZSBTcHJpbmcgYmVhbnMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBwcm9wZXJ0eSBvciByZWZlcmVuY2UsIGFzIGRlcml2ZWQKLSAqIGZyb20gdGhlIFNDQSBjb21wb3NpdGUgaW4gd2hpY2ggdGhlIFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0IGlzIGFuIGltcGxlbWVudGF0aW9uLgotICoKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1jbGFzcyBTQ0FQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQgaW1wbGVtZW50cyBBcHBsaWNhdGlvbkNvbnRleHQgewotCi0gICAgLy8gVGhlIFNwcmluZyBpbXBsZW1lbnRhdGlvbiBmb3Igd2hpY2ggdGhpcyBpcyB0aGUgcGFyZW50IGFwcGxpY2F0aW9uIGNvbnRleHQKLSAgICBwcml2YXRlIFNwcmluZ0ltcGxlbWVudGF0aW9uU3R1YiBpbXBsZW1lbnRhdGlvbjsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZ1tdIEVNUFRZX0FSUkFZID0gbmV3IFN0cmluZ1swXTsKLQotICAgIHB1YmxpYyBTQ0FQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQoU3ByaW5nSW1wbGVtZW50YXRpb25TdHViIGltcGxlbWVudGF0aW9uKSB7Ci0gICAgICAgIHRoaXMuaW1wbGVtZW50YXRpb24gPSBpbXBsZW1lbnRhdGlvbjsKLSAgICB9IC8vIGVuZCBjb25zdHJ1Y3RvcgotCi0gICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBuYW1lKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gZ2V0QmVhbihuYW1lLCAoQ2xhc3MpIG51bGwpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIEdldCBhIEJlYW4gZm9yIGEgcmVmZXJlbmNlIG9yIGZvciBhIHByb3BlcnR5LgotICAgICAqCi0gICAgICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgQmVhbiByZXF1aXJlZAotICAgICAqIEBwYXJhbSByZXF1aXJlZFR5cGUgLSB0aGUgcmVxdWlyZWQgdHlwZSBvZiB0aGUgQmVhbiAoZWl0aGVyIGEgSmF2YSBjbGFzcyBvciBhIEphdmEgaW50ZXJmYWNlKQotICAgICAqIEByZXR1cm4gT2JqZWN0IC0gYSBCZWFuIHdoaWNoIG1hdGNoZXMgdGhlIHJlcXVlc3RlZCBiZWFuCi0gICAgICovCi0gICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBuYW1lLCBDbGFzcyByZXF1aXJlZFR5cGUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbi5nZXRCZWFuKG5hbWUsIHJlcXVpcmVkVHlwZSk7Ci0gICAgfSAvLyBlbmQgbWV0aG9kIGdldEJlYW4oIFN0cmluZywgQ2xhc3MgKQotCi0gICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBuYW1lLCBPYmplY3RbXSBhcmdzKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24gewotICAgICAgICAgcmV0dXJuIGdldEJlYW4obmFtZSwgKChDbGFzcyludWxsKSk7Ci0gICAgfQotCi0gICAgcHVibGljIDxUPiBUIGdldEJlYW4oQ2xhc3M8VD4gY2xhenopIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBjbGF6ei5jYXN0KGltcGxlbWVudGF0aW9uLmdldEJlYW4oY2xhenouZ2V0TmFtZSgpLCBjbGF6eikpOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEJlYW5zV2l0aEFubm90YXRpb24oQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IGNsYXp6KSB0aHJvd3MgQmVhbnNFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgPEEgZXh0ZW5kcyBBbm5vdGF0aW9uPiBBIGZpbmRBbm5vdGF0aW9uT25CZWFuKFN0cmluZyBhcmcwLCBDbGFzczxBPiBjbGF6eikgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0JlYW4oU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgLy8gVE9ETwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaXNTaW5nbGV0b24oU3RyaW5nIG5hbWUpIHRocm93cyBOb1N1Y2hCZWFuRGVmaW5pdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIFRPRE8KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGlzVHlwZU1hdGNoKFN0cmluZyBuYW1lLCBDbGFzcyB0YXJnZXRUeXBlKSB0aHJvd3MgTm9TdWNoQmVhbkRlZmluaXRpb25FeGNlcHRpb24gewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQ2xhc3MgZ2V0VHlwZShTdHJpbmcgbmFtZSkgdGhyb3dzIE5vU3VjaEJlYW5EZWZpbml0aW9uRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZ1tdIGdldEFsaWFzZXMoU3RyaW5nIG5hbWUpIHRocm93cyBOb1N1Y2hCZWFuRGVmaW5pdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBFTVBUWV9BUlJBWTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQXBwbGljYXRpb25Db250ZXh0IGdldFBhcmVudCgpIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5IGdldEF1dG93aXJlQ2FwYWJsZUJlYW5GYWN0b3J5KCkgdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmcgZ2V0SWQoKSB7Ci0gICAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkgewotICAgICAgICByZXR1cm4gaW1wbGVtZW50YXRpb24uZ2V0VVJJKCk7Ci0gICAgfQotCi0gICAgcHVibGljIGxvbmcgZ2V0U3RhcnR1cERhdGUoKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zQmVhbkRlZmluaXRpb24oU3RyaW5nIGJlYW5OYW1lKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgaW50IGdldEJlYW5EZWZpbml0aW9uQ291bnQoKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRCZWFuRGVmaW5pdGlvbk5hbWVzKCkgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nW10gZ2V0QmVhbk5hbWVzRm9yVHlwZShDbGFzcyB0eXBlKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOwotICAgIH0KLQotICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRCZWFuTmFtZXNGb3JUeXBlKENsYXNzIHR5cGUsIGJvb2xlYW4gaW5jbHVkZVByb3RvdHlwZXMsIGJvb2xlYW4gaW5jbHVkZUZhY3RvcnlCZWFucykgewotICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgTWFwIGdldEJlYW5zT2ZUeXBlKENsYXNzIHR5cGUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBNYXAgZ2V0QmVhbnNPZlR5cGUoQ2xhc3MgdHlwZSwgYm9vbGVhbiBpbmNsdWRlUHJvdG90eXBlcywgYm9vbGVhbiBpbmNsdWRlRmFjdG9yeUJlYW5zKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgYm9vbGVhbiBpc1Byb3RvdHlwZShTdHJpbmcgdGhlU3RyaW5nKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQmVhbkZhY3RvcnkgZ2V0UGFyZW50QmVhbkZhY3RvcnkoKSB7Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zTG9jYWxCZWFuKFN0cmluZyBuYW1lKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIGNvZGUsIE9iamVjdFtdIGFyZ3MsIFN0cmluZyBkZWZhdWx0TWVzc2FnZSwgTG9jYWxlIGxvY2FsZSkgewotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIGNvZGUsIE9iamVjdFtdIGFyZ3MsIExvY2FsZSBsb2NhbGUpIHRocm93cyBOb1N1Y2hNZXNzYWdlRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKE1lc3NhZ2VTb3VyY2VSZXNvbHZhYmxlIHJlc29sdmFibGUsIExvY2FsZSBsb2NhbGUpIHRocm93cyBOb1N1Y2hNZXNzYWdlRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcHVibGlzaEV2ZW50KEFwcGxpY2F0aW9uRXZlbnQgZXZlbnQpIHsKLQotICAgIH0KLQotICAgIHB1YmxpYyBSZXNvdXJjZVtdIGdldFJlc291cmNlcyhTdHJpbmcgbG9jYXRpb25QYXR0ZXJuKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICByZXR1cm4gbmV3IFJlc291cmNlWzBdOwotICAgIH0KLQotICAgIHB1YmxpYyBSZXNvdXJjZSBnZXRSZXNvdXJjZShTdHJpbmcgbG9jYXRpb24pIHsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotCi0gICAgcHVibGljIENsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKCkgewotICAgICAgICAvLyBSRVZJRVc6IHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBmbGF3ZWQsIGJ1dCBpdCdzIG5vdCBjbGVhciBob3cgdGhlIFNDQSBydW50aW1lJ3MKLSAgICAgICAgLy8gcmVzb3VyY2UgbG9hZGluZyBtZWNoYW5pc20gaXMgZXhwb3NlZCByaWdodCBub3cuCi0gICAgICAgIHJldHVybiB0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcnVudGltZS9jb250ZXh0L1NwcmluZ0NvbnRleHRUaWUuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9ydW50aW1lL2NvbnRleHQvU3ByaW5nQ29udGV4dFRpZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzY4MWI2Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9ydW50aW1lL2NvbnRleHQvU3ByaW5nQ29udGV4dFRpZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi0KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucnVudGltZS5jb250ZXh0OwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLkNvbXBvbmVudE5hbWVBbm5vdGF0aW9uUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb2Nlc3Nvci5Db21wb25lbnRTdHViOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb2Nlc3Nvci5Db25zdHJ1Y3RvckFubm90YXRpb25Qcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLkluaXREZXN0cm95QW5ub3RhdGlvblByb2Nlc3NvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IuUHJvcGVydHlBbm5vdGF0aW9uUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb2Nlc3Nvci5Qcm9wZXJ0eVZhbHVlU3R1YjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IuUmVmZXJlbmNlQW5ub3RhdGlvblByb2Nlc3NvcjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5Db25maWd1cmFibGVMaXN0YWJsZUJlYW5GYWN0b3J5OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWwuWG1sQmVhbkZhY3Rvcnk7Ci1pbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnhtbC5YbWxCZWFuRGVmaW5pdGlvblJlYWRlcjsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dDsKLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5HZW5lcmljQXBwbGljYXRpb25Db250ZXh0OwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29yZS5pby5VcmxSZXNvdXJjZTsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBydW50aW1lIHNpZGUgdGllIGZvciB0aGUgY29ycmVzcG9uZGluZyB0dXNjYW55IHNpZGUgc3R1YiBjbGFzcy4KLSAqIEl0IGVuYWJsZXMgdGhlIFR1c2NhbnkgY29kZSB0byBpbnZva2UgbWV0aG9kcyBvbiBhIFNwcmluZyBjb250ZXh0IHdpdGhvdXQKLSAqIG5lZWRpbmcgdG8ga25vdyBhYm91dCBhbnkgU3ByaW5nIGNsYXNzZXMuIFNlZSB0aGUgU3ByaW5nQ29udGV4dFN0dWIgY2xhc3MKLSAqIGluIHRoZSBpbXBsZW1lbnRhdGlvbi1zcHJpbmcgbW9kdWxlIGZvciB3aGF0IHRoZSBzdHViIGRvZXMuIAotICovCi1wdWJsaWMgY2xhc3MgU3ByaW5nQ29udGV4dFRpZSB7Ci0KLSAgICBwcml2YXRlIEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0IHNwcmluZ0NvbnRleHQ7Ci0gICAgcHJpdmF0ZSBTcHJpbmdJbXBsZW1lbnRhdGlvblN0dWIgaW1wbGVtZW50YXRpb247Ci0gICAgCi0gICAgcHVibGljIFNwcmluZ0NvbnRleHRUaWUoU3ByaW5nSW1wbGVtZW50YXRpb25TdHViIGltcGxlbWVudGF0aW9uLCBMaXN0PFVSTD4gcmVzb3VyY2UpIHsKLSAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbiA9IGltcGxlbWVudGF0aW9uOwotICAgICAgICBTQ0FQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQgc2NhUGFyZW50Q29udGV4dCA9IG5ldyBTQ0FQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQoaW1wbGVtZW50YXRpb24pOwotICAgICAgICBzcHJpbmdDb250ZXh0ID0gY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KHNjYVBhcmVudENvbnRleHQsIHJlc291cmNlKTsgIAotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgewotICAgICAgICAvLyBEbyByZWZyZXNoIGhlcmUgdG8gZW5zdXJlIHRoYXQgU3ByaW5nIEJlYW5zIGFyZSBub3QgdG91Y2hlZCBiZWZvcmUgdGhlIFNDQSBjb25maWcgcHJvY2VzcyBpcyBjb21wbGV0ZS4uLgotICAgICAgICBzcHJpbmdDb250ZXh0LnJlZnJlc2goKTsKLSAgICAgICAgc3ByaW5nQ29udGV4dC5zdGFydCgpOwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgewotICAgICAgICBzcHJpbmdDb250ZXh0LmNsb3NlKCk7Ci0gICAgICAgIGlmIChzcHJpbmdDb250ZXh0IGluc3RhbmNlb2YgR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dCkgewotICAgICAgICAgICAgc3ByaW5nQ29udGV4dC5zdG9wKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBJbmNsdWRlIEJlYW5Qb3N0UHJvY2Vzc29yIHRvIGRlYWwgd2l0aCBTQ0EgQW5ub3RhdGlvbnMgaW4gU3ByaW5nIEJlYW4KLSAgICAgKi8KLSAgICBwcml2YXRlIEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0IGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dChTQ0FQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQgc2NhUGFyZW50Q29udGV4dCwgTGlzdDxVUkw+IHJlc291cmNlcykgewotCi0gICAgCVhtbEJlYW5GYWN0b3J5IGJlYW5GYWN0b3J5ID0gbnVsbDsKLSAgICAJQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQgYXBwQ29udGV4dCA9IG51bGw7Ci0gICAgCQotICAgIAlpZiAocmVzb3VyY2VzLnNpemUoKSA+IDEpIHsKLSAgICAJCUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgYXBwQ3R4ID0gCi0gICAgCQkJbmV3IFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQoc2NhUGFyZW50Q29udGV4dCwgaW1wbGVtZW50YXRpb24uZ2V0Q2xhc3NMb2FkZXIoKSk7Ci0gICAgCQlYbWxCZWFuRGVmaW5pdGlvblJlYWRlciB4bWxSZWFkZXIgPSBuZXcgWG1sQmVhbkRlZmluaXRpb25SZWFkZXIoYXBwQ3R4KTsKLSAgICAJCWZvciAoVVJMIHJlc291cmNlIDogcmVzb3VyY2VzKSB7Ci0gICAgCQkJeG1sUmVhZGVyLmxvYWRCZWFuRGVmaW5pdGlvbnMobmV3IFVybFJlc291cmNlKHJlc291cmNlKSk7Ci0gICAgCQl9Ci0gICAgCQl4bWxSZWFkZXIuc2V0QmVhbkNsYXNzTG9hZGVyKGltcGxlbWVudGF0aW9uLmdldENsYXNzTG9hZGVyKCkpOyAgICAJCQotICAgICAgICAgICAJaW5jbHVkZUFubm90YXRpb25Qcm9jZXNzb3JzKGFwcEN0eC5nZXRCZWFuRmFjdG9yeSgpKTsKLSAgICAJCXJldHVybiBhcHBDdHg7ICAgIAkJCi0gICAgCX0gCi0gICAgICAgIAotICAgIAkvLyB1c2UgdGhlIGdlbmVyaWMgYXBwbGljYXRpb24gY29udGV4dCBhcyBkZWZhdWx0Ci0gICAgCWJlYW5GYWN0b3J5ID0gbmV3IFhtbEJlYW5GYWN0b3J5KG5ldyBVcmxSZXNvdXJjZShyZXNvdXJjZXMuZ2V0KDApKSk7Ci0gICAgICAgIGJlYW5GYWN0b3J5LnNldEJlYW5DbGFzc0xvYWRlcihpbXBsZW1lbnRhdGlvbi5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICAgICAgaW5jbHVkZUFubm90YXRpb25Qcm9jZXNzb3JzKGJlYW5GYWN0b3J5KTsKLSAgICAgICAgYXBwQ29udGV4dCA9IG5ldyBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KGJlYW5GYWN0b3J5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYVBhcmVudENvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi5nZXRDbGFzc0xvYWRlcigpKTsKLSAgICAgICAgcmV0dXJuIGFwcENvbnRleHQ7Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBpZCkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHNwcmluZ0NvbnRleHQuZ2V0QmVhbihpZCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogSW5jbHVkZSBCZWFuUG9zdFByb2Nlc3NvciB0byBkZWFsIHdpdGggU0NBIEFubm90YXRpb25zIGluIFNwcmluZyBCZWFuCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGluY2x1ZGVBbm5vdGF0aW9uUHJvY2Vzc29ycyhDb25maWd1cmFibGVMaXN0YWJsZUJlYW5GYWN0b3J5IGJlYW5GYWN0b3J5KSB7Ci0gICAgICAgIAotICAgICAgICAvLyBQcm9jZXNzb3IgdG8gZGVhbCB3aXRoIEBJbml0IGFuZCBARGVzdHJveSBTQ0EgQW5ub3RhdGlvbnMKLSAgICAgICAgQmVhblBvc3RQcm9jZXNzb3IgaW5pdERlc3Ryb3lQcm9jZXNzb3IgPSBuZXcgSW5pdERlc3Ryb3lBbm5vdGF0aW9uUHJvY2Vzc29yKCk7Ci0gICAgICAgIGJlYW5GYWN0b3J5LmFkZEJlYW5Qb3N0UHJvY2Vzc29yKGluaXREZXN0cm95UHJvY2Vzc29yKTsKLQotICAgICAgICAvLyBQcm9jZXNzb3IgdG8gZGVhbCB3aXRoIEBSZWZlcmVuY2UgU0NBIEFubm90YXRpb25zCi0gICAgICAgIENvbXBvbmVudFN0dWIgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudFN0dWIoaW1wbGVtZW50YXRpb24uZ2V0Q29tcG9uZW50VGllKCkpOwotICAgICAgICBCZWFuUG9zdFByb2Nlc3NvciByZWZlcmVuY2VQcm9jZXNzb3IgPSBuZXcgUmVmZXJlbmNlQW5ub3RhdGlvblByb2Nlc3Nvcihjb21wb25lbnQpOwotICAgICAgICBiZWFuRmFjdG9yeS5hZGRCZWFuUG9zdFByb2Nlc3NvcihyZWZlcmVuY2VQcm9jZXNzb3IpOwotICAgICAgICAKLSAgICAgICAgLy8gUHJvY2Vzc29yIHRvIGRlYWwgd2l0aCBAUHJvcGVydHkgU0NBIEFubm90YXRpb25zCi0gICAgICAgIFByb3BlcnR5VmFsdWVTdHViIHB2cyA9IG5ldyBQcm9wZXJ0eVZhbHVlU3R1YihpbXBsZW1lbnRhdGlvbi5nZXRQcm9wZXJ0eVZhbHVlVGllKCkpOwotICAgICAgICBCZWFuUG9zdFByb2Nlc3NvciBwcm9wZXJ0eVByb2Nlc3NvciA9IG5ldyBQcm9wZXJ0eUFubm90YXRpb25Qcm9jZXNzb3IocHZzKTsKLSAgICAgICAgYmVhbkZhY3RvcnkuYWRkQmVhblBvc3RQcm9jZXNzb3IocHJvcGVydHlQcm9jZXNzb3IpOwotICAgICAgICAKLSAgICAgICAgLy8gUHJvY2Vzc29yIHRvIGRlYWwgd2l0aCBAQ29tcG9uZW50TmFtZSBTQ0EgQW5ub3RhdGlvbnMKLSAgICAgICAgQmVhblBvc3RQcm9jZXNzb3IgY29tcG9uZW50TmFtZVByb2Nlc3NvciA9IG5ldyBDb21wb25lbnROYW1lQW5ub3RhdGlvblByb2Nlc3NvcihpbXBsZW1lbnRhdGlvbi5nZXRDb21wb25lbnROYW1lKCkpOwotICAgICAgICBiZWFuRmFjdG9yeS5hZGRCZWFuUG9zdFByb2Nlc3Nvcihjb21wb25lbnROYW1lUHJvY2Vzc29yKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFByb2Nlc3NvciB0byBkZWFsIHdpdGggQENvbnN0cnVjdG9yIFNDQSBBbm5vdGF0aW9ucwotICAgICAgICBCZWFuUG9zdFByb2Nlc3NvciBjb25zdHJ1Y3RvclByb2Nlc3NvciA9IG5ldyBDb25zdHJ1Y3RvckFubm90YXRpb25Qcm9jZXNzb3IoKTsKLSAgICAgICAgYmVhbkZhY3RvcnkuYWRkQmVhblBvc3RQcm9jZXNzb3IoY29uc3RydWN0b3JQcm9jZXNzb3IpOyAgICAgICAgIAotICAgIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9ydW50aW1lL2NvbnRleHQvU3ByaW5nSW1wbGVtZW50YXRpb25TdHViLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcnVudGltZS9jb250ZXh0L1NwcmluZ0ltcGxlbWVudGF0aW9uU3R1Yi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjM5ODY5Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9ydW50aW1lL2NvbnRleHQvU3ByaW5nSW1wbGVtZW50YXRpb25TdHViLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMjkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5ydW50aW1lLmNvbnRleHQ7Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLWltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5Ob1N1Y2hCZWFuRGVmaW5pdGlvbkV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBydW50aW1lIHNpZGUgc3R1YiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgVHVzY2FueS1zaWRlIHN0dWIgY2xhc3MuCi0gKiBJdCBlbmFibGVzIHRoZSBTcHJpbmcgY29kZSBpbiB0aGUgcnVudGltZSBtb2R1bGUgdG8gaW52b2tlIG1ldGhvZHMgb24gYQotICogVHVzY2FueSBTcHJpbmdJbXBsZW1lbnRhdGlvbiB3aXRob3V0IHRoZSBTcHJpbmcgcnVudGltZSBtb2R1bGUKLSAqIG5lZWRpbmcgdG8ga25vdyBhYm91dCBhbnkgVHVzY2FueSBjbGFzc2VzLiBTZWUgdGhlIFNwcmluZ0ltcGxlbWVudGF0aW9uVGllIGNsYXNzCi0gKiBpbiB0aGUgaW1wbGVtZW50YXRpb24tc3ByaW5nIG1vZHVsZSBmb3Igd2hhdCB0aGUgdGllIGRvZXMuIAotICovCi1wdWJsaWMgY2xhc3MgU3ByaW5nSW1wbGVtZW50YXRpb25TdHViIHsKLQotICAgIE9iamVjdCB0aWU7Ci0gICAgTWV0aG9kIGdldFVSSTsKLSAgICBNZXRob2QgZ2V0QmVhbjsKLSAgICBNZXRob2QgZ2V0Q29tcG9uZW50TmFtZTsKLSAgICBNZXRob2QgZ2V0Q29tcG9uZW50VGllOwotICAgIE1ldGhvZCBnZXRQcm9wZXJ0eVZhbHVlVGllOwotICAgIE1ldGhvZCBnZXRDbGFzc0xvYWRlcjsKLSAgICAKLSAgICBwdWJsaWMgU3ByaW5nSW1wbGVtZW50YXRpb25TdHViKE9iamVjdCB0aWUpIHsKLSAgICAgICAgdGhpcy50aWUgPSB0aWU7Ci0gICAgICAgIENsYXNzPD8+IHRpZUNsYXNzID0gdGllLmdldENsYXNzKCk7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBnZXRVUkkgPSB0aWVDbGFzcy5nZXRNZXRob2QoImdldFVSSSIsIG5ldyBDbGFzczw/Pltde30pOwotICAgICAgICAgICAgZ2V0QmVhbiA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0QmVhbiIsIG5ldyBDbGFzczw/Pltde1N0cmluZy5jbGFzcywgQ2xhc3MuY2xhc3N9KTsKLSAgICAgICAgICAgIGdldENvbXBvbmVudE5hbWUgPSB0aWVDbGFzcy5nZXRNZXRob2QoImdldENvbXBvbmVudE5hbWUiKTsKLSAgICAgICAgICAgIGdldENvbXBvbmVudFRpZSA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0Q29tcG9uZW50VGllIik7Ci0gICAgICAgICAgICBnZXRQcm9wZXJ0eVZhbHVlVGllID0gdGllQ2xhc3MuZ2V0TWV0aG9kKCJnZXRQcm9wZXJ0eVZhbHVlVGllIik7Ci0gICAgICAgICAgICBnZXRDbGFzc0xvYWRlciA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0Q2xhc3NMb2FkZXIiKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkgewotICAgICAgICB0cnkgewotCi0gICAgICAgICAgICByZXR1cm4gKFN0cmluZylnZXRVUkkuaW52b2tlKHRpZSk7Ci0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogR2V0IGEgQmVhbiBmb3IgYSByZWZlcmVuY2Ugb3IgZm9yIGEgcHJvcGVydHkuCi0gICAgICoKLSAgICAgKiBAcGFyYW0gbmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBCZWFuIHJlcXVpcmVkCi0gICAgICogQHBhcmFtIHJlcXVpcmVkVHlwZSAtIHRoZSByZXF1aXJlZCB0eXBlIG9mIHRoZSBCZWFuIChlaXRoZXIgYSBKYXZhIGNsYXNzIG9yIGEgSmF2YSBpbnRlcmZhY2UpCi0gICAgICogQHJldHVybiBPYmplY3QgLSBhIEJlYW4gd2hpY2ggbWF0Y2hlcyB0aGUgcmVxdWVzdGVkIGJlYW4KLSAgICAgKi8KLSAgICBwdWJsaWMgT2JqZWN0IGdldEJlYW4oU3RyaW5nIG5hbWUsIENsYXNzPD8+IHJlcXVpcmVkVHlwZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKLSAgICAgICAgdHJ5IHsKLQotICAgICAgICAgICAgT2JqZWN0IGJlYW4gPSBnZXRCZWFuLmludm9rZSh0aWUsIG5ldyBPYmplY3RbXSB7bmFtZSwgcmVxdWlyZWRUeXBlfSk7Ci0gICAgICAgICAgICBpZiAoYmVhbiA9PSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEJlYW5EZWZpbml0aW9uRXhjZXB0aW9uKCJVbmFibGUgdG8gZmluZCBCZWFuIHdpdGggbmFtZSAiICsgbmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gYmVhbjsKLQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKSB7Ci0gICAgICAgIHRyeSB7Ci0KLSAgICAgICAgICAgIHJldHVybiAoU3RyaW5nKWdldENvbXBvbmVudE5hbWUuaW52b2tlKHRpZSk7Ci0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRDb21wb25lbnRUaWUoKSB7Ci0gICAgICAgIHRyeSB7Ci0KLSAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnRUaWUuaW52b2tlKHRpZSk7Ci0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eVZhbHVlVGllKCkgewotICAgICAgICB0cnkgewotCi0gICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydHlWYWx1ZVRpZS5pbnZva2UodGllKTsKLQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcHVibGljIENsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKCkgewotICAgIAl0cnkgewotICAgIAkJCi0gICAgCQlyZXR1cm4gKENsYXNzTG9hZGVyKSBnZXRDbGFzc0xvYWRlci5pbnZva2UodGllKTsKLSAgICAJCQotICAgIAl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgIAkJdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgCX0KLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sLlNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sLlNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjOGZhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy54bWwuU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXIKQEAgLTAsMCArMSwxNyBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuIAorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLlNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVySW1wbDtyYW5raW5nPTEwMApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzhkNzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5CkBAIC0wLDAgKzEsMjAgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCisjIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gZXh0ZW5zaW9uDQorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXIuU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3Rvcnk7bW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nSW1wbGVtZW50YXRpb247cmFua2luZz0xMDANCisNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcuaGFuZGxlcnMgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcuaGFuZGxlcnMKaW5kZXggNmQyOWUyMS4uMWUxZjU1OCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nLmhhbmRsZXJzCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy5oYW5kbGVycwpAQCAtMSArMSwyIEBACiBodHRwXDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9zY2E9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcubmFtZXNwYWNlLlNjYU5hbWVzcGFjZUhhbmRsZXINCitodHRwXDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2Etai9zcHJpbmcvMjAwODEwPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLm5hbWVzcGFjZS5TY2FOYW1lc3BhY2VIYW5kbGVyDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9iaW5kaW5nLXJzcy1ydW50aW1lL0xJQ0VOU0UgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL0xJQ0VOU0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBtb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvTElDRU5TRQpjb3B5IHRvIG1vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvTElDRU5TRQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiMjA5MQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwyNiBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorU0NBLVZlcnNpb246IDEuMQ0KK0J1bmRsZS1OYW1lOiBBcGFjaGUgVHVzY2FueSBTQ0EgU3ByaW5nIEltcGxlbWVudGF0aW9uIE1vZGVsDQorQnVuZGxlLVZlbmRvcjogVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQorQnVuZGxlLVZlcnNpb246IDIuMC4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1MaWNlbnNlOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0DQorQnVuZGxlLURlc2NyaXB0aW9uOiBBcGFjaGUgVHVzY2FueSBTQ0EgU3ByaW5nIEltcGxlbWVudGF0aW9uIE1vZGVsDQorSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHk7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRleHQ7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3I7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmU7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWY7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5pbXBsO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlcjt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZTt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5vYXNpc29wZW4uc2NhO3ZlcnNpb249IjIuMC4wIg0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnN0dWINCitCdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvTk9USUNFIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyNWVmZAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvTk9USUNFCkBAIC0wLDAgKzEsNiBAQAorJHtwb20ubmFtZX0NCitDb3B5cmlnaHQgKGMpIDIwMDUgLSAyMDA4IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbg0KKw0KK1RoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkNCitUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLg0KKw0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL1JFQURNRSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBtb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9SRUFETUUKcmVuYW1lIHRvIG1vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvUkVBRE1FCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3BvbS54bWwgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFkMThhZgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvcG9tLnhtbApAQCAtMCwwICsxLDU2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktbW9kdWxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTcHJpbmcgSW1wbGVtZW50YXRpb24gUnVudGltZSBTdHViPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKworICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+ICAgIAorICAgICAgICA8IS0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0+ICAgIAorICAgICAgICA8IS0tICogRE9OVCBBREQgQU5ZIFNQUklORyBERVBFTkRFTkNJRVMhISEgICogLS0+ICAgIAorICAgICAgICA8IS0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0+ICAgIAorICAgICAgICA8IS0tICogU2VlIHRoZSBSRUFETUUgZm9yIGRldGFpbHMgd2h5IG5vdCAgICogLS0+ICAgIAorICAgICAgICA8IS0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0+ICAgIAorICAgICAgICA8IS0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0+ICAgIAorICAgICAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+ICAgIAorICAgCisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmc8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgCisgICAgPC9kZXBlbmRlbmNpZXM+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3N0dWIvU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXJTdHViLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3N0dWIvU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXJTdHViLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM0ZGZiOAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3Ivc3R1Yi9TcHJpbmdYTUxCZWFuRGVmaW5pdGlvbkxvYWRlclN0dWIuamF2YQpAQCAtMCwwICsxLDkyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb2Nlc3Nvci5zdHViOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlByb2Nlc3NvckNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nQmVhbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nU0NBU2VydmljZUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sLlNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOworCisvKioKKyAqIFRoaXMgaXMgdGhlIFR1c2Nhbnkgc2lkZSBzdHViIGZvciB0aGUgY29ycmVzcG9uZGluZyBydW50aW1lIHRpZSBjbGFzcy4KKyAqIEl0IGVuYWJsZXMgdGhlIFR1c2NhbnkgY29kZSB0byBpbnZva2UgbWV0aG9kcyBvbiBhIFNwcmluZyBjb250ZXh0IHdpdGhvdXQKKyAqIG5lZWRpbmcgdG8ga25vdyBhYm91dCBhbnkgU3ByaW5nIGNsYXNzZXMuIFNlZSB0aGUgU3ByaW5nQ29udGV4dFRpZSBjbGFzcworICogaW4gdGhlIGltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lIG1vZHVsZSBmb3Igd2hhdCB0aGUgdGllIGRvZXMuIAorICovCitwdWJsaWMgY2xhc3MgU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXJTdHViIGltcGxlbWVudHMgU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXIgeworICAgIHByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBUSUUgPSAib3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLnRpZS5TcHJpbmdYTUxMb2FkZXJUaWUiOworCisgICAgcHJpdmF0ZSBzdGF0aWMgTWV0aG9kIGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dDsKKworICAgIHB1YmxpYyBTcHJpbmdYTUxCZWFuRGVmaW5pdGlvbkxvYWRlclN0dWIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgc3luY2hyb25pemVkIChTcHJpbmdYTUxCZWFuRGVmaW5pdGlvbkxvYWRlclN0dWIuY2xhc3MpIHsKKyAgICAgICAgICAgIGlmIChjcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIENsYXNzPD8+IHRpZUNsYXNzID0gQ2xhc3MuZm9yTmFtZShUSUUsIGZhbHNlLCBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQgPQorICAgICAgICAgICAgICAgICAgICB0aWVDbGFzcy5nZXRNZXRob2QoImNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dCIsIE9iamVjdC5jbGFzcywgQ2xhc3NMb2FkZXIuY2xhc3MsIExpc3QuY2xhc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIE9iamVjdCBjcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoT2JqZWN0IHNjYVBhcmVudENvbnRleHQsIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyLCBMaXN0PFVSTD4gcmVzb3VyY2VzKQorICAgICAgICB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dC5pbnZva2UobnVsbCwgc2NhUGFyZW50Q29udGV4dCwgY2xhc3NMb2FkZXIsIHJlc291cmNlcyk7CisgICAgfQorCisgICAgcHVibGljIE9iamVjdCBsb2FkKExpc3Q8VVJMPiByZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBU2VydmljZUVsZW1lbnQ+IHNlcnZpY2VFbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50PiByZWZlcmVuY2VFbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ+IHByb3BlcnR5RWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nQmVhbkVsZW1lbnQ+IGJlYW5FbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBPYmplY3QgYXBwQ29udGV4dCA9CisgICAgICAgICAgICAgICAgY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KG51bGwsIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0Q29udGV4dENsYXNzTG9hZGVyKCksIHJlc291cmNlcyk7CisgICAgICAgICAgICBDbGFzczw/PiBjbHMgPSBhcHBDb250ZXh0LmdldENsYXNzKCk7CisgICAgICAgICAgICBNZXRob2QgbWV0aG9kID0gY2xzLmdldE1ldGhvZCgiZ2V0RWxlbWVudHMiLCBDbGFzcy5jbGFzcyk7CisgICAgICAgICAgICBTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudFtdIHNlcnZpY2VBcnJheSA9CisgICAgICAgICAgICAgICAgKFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50W10pbWV0aG9kLmludm9rZShhcHBDb250ZXh0LCBTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudC5jbGFzcyk7CisgICAgICAgICAgICBzZXJ2aWNlRWxlbWVudHMuYWRkQWxsKEFycmF5cy5hc0xpc3Qoc2VydmljZUFycmF5KSk7CisKKyAgICAgICAgICAgIFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnRbXSByZWZlcmVuY2VBcnJheSA9CisgICAgICAgICAgICAgICAgKFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnRbXSltZXRob2QuaW52b2tlKGFwcENvbnRleHQsIFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQuY2xhc3MpOworICAgICAgICAgICAgcmVmZXJlbmNlRWxlbWVudHMuYWRkQWxsKEFycmF5cy5hc0xpc3QocmVmZXJlbmNlQXJyYXkpKTsKKworICAgICAgICAgICAgU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50W10gcHJvcGVydHlBcnJheSA9CisgICAgICAgICAgICAgICAgKFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudFtdKW1ldGhvZC5pbnZva2UoYXBwQ29udGV4dCwgU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50LmNsYXNzKTsKKyAgICAgICAgICAgIHByb3BlcnR5RWxlbWVudHMuYWRkQWxsKEFycmF5cy5hc0xpc3QocHJvcGVydHlBcnJheSkpOworCisgICAgICAgICAgICBTcHJpbmdCZWFuRWxlbWVudFtdIGJlYW5BcnJheSA9IChTcHJpbmdCZWFuRWxlbWVudFtdKW1ldGhvZC5pbnZva2UoYXBwQ29udGV4dCwgU3ByaW5nQmVhbkVsZW1lbnQuY2xhc3MpOworICAgICAgICAgICAgYmVhbkVsZW1lbnRzLmFkZEFsbChBcnJheXMuYXNMaXN0KGJlYW5BcnJheSkpOworCisgICAgICAgICAgICByZXR1cm4gYXBwQ29udGV4dDsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL0NvbXBvbmVudFRpZS5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL3N0dWIvQ29tcG9uZW50VGllLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODgyYWE1OAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL0NvbXBvbmVudFRpZS5qYXZhCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXIuc3R1YjsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBUdXNjYW55IHNpZGUgdGllIGZvciB0aGUgY29ycmVzcG9uZGluZyBTcHJpbmcgcnVudGltZSBzaWRlIHN0dWIgY2xhc3MuCisgKiBJdCBlbmFibGVzIHRoZSBUdXNjYW55IGNvZGUgdG8gaW52b2tlIG1ldGhvZHMgb24gYSBTcHJpbmcgY29udGV4dCB3aXRob3V0CisgKiBuZWVkaW5nIHRvIGtub3cgYWJvdXQgYW55IFNwcmluZyBjbGFzc2VzLiBTZWUgdGhlIENvbXBvbmVudFN0dWIgY2xhc3MKKyAqIGluIHRoZSBpbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZSBtb2R1bGUgZm9yIHdoYXQgdGhlIHN0dWIgZG9lcy4gCisgKi8KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudDsKKworcHVibGljIGNsYXNzIENvbXBvbmVudFRpZSB7CisKKyAgICBwcml2YXRlIFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50OworCisgICAgcHVibGljIENvbXBvbmVudFRpZShSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCkgeworICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IGdldFNlcnZpY2UoQ2xhc3M8Pz4gdHlwZSwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudC5nZXRDb21wb25lbnRDb250ZXh0KCkuZ2V0U2VydmljZSh0eXBlLCBuYW1lKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9Qcm9wZXJ0eVZhbHVlVGllLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9Qcm9wZXJ0eVZhbHVlVGllLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwYzUyNgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL1Byb3BlcnR5VmFsdWVUaWUuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb3ZpZGVyLnN0dWI7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9uZW50UHJvcGVydHk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250ZXh0LlByb3BlcnR5VmFsdWVGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50OworCisvKioKKyAqIFRoaXMgaXMgdGhlIFR1c2Nhbnkgc2lkZSB0aWUgZm9yIHRoZSBjb3JyZXNwb25kaW5nIFNwcmluZyBydW50aW1lIHNpZGUgc3R1YiBjbGFzcy4KKyAqIEl0IGVuYWJsZXMgdGhlIFR1c2NhbnkgY29kZSB0byBpbnZva2UgbWV0aG9kcyBvbiBhIFNwcmluZyBjb250ZXh0IHdpdGhvdXQKKyAqIG5lZWRpbmcgdG8ga25vdyBhYm91dCBhbnkgU3ByaW5nIGNsYXNzZXMuIFNlZSB0aGUgUHJvcGVydHlWYWx1ZVN0dWIgY2xhc3MKKyAqIGluIHRoZSBpbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZSBtb2R1bGUgZm9yIHdoYXQgdGhlIHN0dWIgZG9lcy4gCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9wZXJ0eVZhbHVlVGllIHsKKworICAgIHByaXZhdGUgUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQ7CisgICAgcHJpdmF0ZSBQcm9wZXJ0eVZhbHVlRmFjdG9yeSBwcm9wZXJ0eUZhY3Rvcnk7CisKKyAgICBwdWJsaWMgUHJvcGVydHlWYWx1ZVRpZShSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCwgUHJvcGVydHlWYWx1ZUZhY3RvcnkgcHJvcGVydHlGYWN0b3J5KSB7CisgICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50OworICAgICAgICB0aGlzLnByb3BlcnR5RmFjdG9yeSA9IHByb3BlcnR5RmFjdG9yeTsKKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5T2JqKENsYXNzPD8+IHR5cGUsIFN0cmluZyBuYW1lKSB7CisgICAgICAgIExpc3Q8Q29tcG9uZW50UHJvcGVydHk+IHByb3BzID0gY29tcG9uZW50LmdldFByb3BlcnRpZXMoKTsKKyAgICAgICAgZm9yIChDb21wb25lbnRQcm9wZXJ0eSBwcm9wIDogcHJvcHMpIHsKKyAgICAgICAgICAgIGlmIChwcm9wLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlGYWN0b3J5LmNyZWF0ZVByb3BlcnR5VmFsdWUocHJvcCwgdHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7IC8vIHByb3BlcnR5IG5hbWUgbm90IGZvdW5kCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL3N0dWIvU3ByaW5nQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3IuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL1NwcmluZ0FwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhNjViYwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL1NwcmluZ0FwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yLmphdmEKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm92aWRlci5zdHViOworCisvKioKKyAqIEEgdXRpbGl0eSB0byByZWNlaXZlIHRoZSBwYXJlbnQgU3ByaW5nIGFwcGxpY2F0aW9uIGNvbnRleHQgCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgU3ByaW5nQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3IgeworICAgIC8qKgorICAgICAqIEdldCB0aGUgcGFyZW50IFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0IGZvciB0aGUgaG9zdGluZyBlbnZpcm9ubWVudC4gVGhpcyB3aWxsIGJlIHVzZWQgYXMgdGhlIHBhcmVudCAKKyAgICAgKiBhcHBsaWNhdGlvbiBjb250ZXh0IGZvciBpbXBsZW1lbnRhdGlvbi5zcHJpbmcgY29tcG9uZW50cworICAgICAqIEByZXR1cm4gVGhlIHBhcmVudCBhcHBsaWNhdGlvbiBjb250ZXh0CisgICAgICovCisgICAgT2JqZWN0IGdldFBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCgpOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSByb290IFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0LiBUaGlzIGlzIHBhcnRpY3VhbGx5IHVzZWZ1bCBmb3IgU3ByaW5nIHdlYiBpbnRlZ3JhdGlvbiB3aGVyZSBTcHJpbmcKKyAgICAgKiBjcmVhdGVzIFdlYkFwcGxpY2F0aW9uQ29udGV4dCBhbmQga2VlcHMgaXQgaW4gdGhlIFNlcnZsZXRDb250ZXh0CisgICAgICogQHBhcmFtIHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCBUaGUgcGFyZW50IGFwcGxpY2F0aW9uIGNvbnRleHQKKyAgICAgKi8KKyAgICB2b2lkIHNldFBhcmVudEFwcGxpY2F0aW9uQ29udGV4dChPYmplY3QgcGFyZW50QXBwbGljYXRpb25Db250ZXh0KTsKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL1NwcmluZ0NvbnRleHRTdHViLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9TcHJpbmdDb250ZXh0U3R1Yi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MmRhNGIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9TcHJpbmdDb250ZXh0U3R1Yi5qYXZhCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb3ZpZGVyLnN0dWI7CisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udGV4dC5Qcm9wZXJ0eVZhbHVlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbi5Qcm94eUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nSW1wbGVtZW50YXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgVHVzY2FueSBzaWRlIHN0dWIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIHJ1bnRpbWUgdGllIGNsYXNzLgorICogSXQgZW5hYmxlcyB0aGUgVHVzY2FueSBjb2RlIHRvIGludm9rZSBtZXRob2RzIG9uIGEgU3ByaW5nIGNvbnRleHQgd2l0aG91dAorICogbmVlZGluZyB0byBrbm93IGFib3V0IGFueSBTcHJpbmcgY2xhc3Nlcy4gU2VlIHRoZSBTcHJpbmdDb250ZXh0VGllIGNsYXNzCisgKiBpbiB0aGUgaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUgbW9kdWxlIGZvciB3aGF0IHRoZSB0aWUgZG9lcy4gCisgKi8KK3B1YmxpYyBjbGFzcyBTcHJpbmdDb250ZXh0U3R1YiB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BSSU5HX0lNUExFTUVOVEFUSU9OX1NUVUIgPQorICAgICAgICAib3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC50aWUuU3ByaW5nSW1wbGVtZW50YXRpb25TdHViIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU1BSSU5HX0NPTlRFWFRfVElFID0KKyAgICAgICAgIm9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmNvbnRleHQudGllLlNwcmluZ0NvbnRleHRUaWUiOworICAgIHByaXZhdGUgT2JqZWN0IHRpZTsKKyAgICBwcml2YXRlIE1ldGhvZCBzdGFydE1ldGhvZDsKKyAgICBwcml2YXRlIE1ldGhvZCBjbG9zZU1ldGhvZDsKKyAgICBwcml2YXRlIE1ldGhvZCBnZXRCZWFuTWV0aG9kOworCisgICAgcHVibGljIFNwcmluZ0NvbnRleHRTdHViKFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTcHJpbmdJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveHlGYWN0b3J5IHByb3h5U2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlWYWx1ZUZhY3RvcnkgcHJvcGVydHlWYWx1ZU9iamVjdEZhY3RvcnkpIHsKKworICAgICAgICBpbml0VGllKGNvbXBvbmVudCwgaW1wbGVtZW50YXRpb24sIHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCwgcHJvcGVydHlWYWx1ZU9iamVjdEZhY3RvcnkpOworCisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGluaXRUaWUoUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgU3ByaW5nSW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVZhbHVlRmFjdG9yeSBwcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSkgeworCisgICAgICAgIC8vIFRPRE86IHdoYXQgY2xhc3MgbG9hZGVyIHRvIHVzZT8KKyAgICAgICAgQ2xhc3NMb2FkZXIgY2wgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOworCisgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgIENsYXNzPD8+IHN0dWJDbGFzcyA9IENsYXNzLmZvck5hbWUoU1BSSU5HX0lNUExFTUVOVEFUSU9OX1NUVUIsIHRydWUsIGNsKTsKKyAgICAgICAgICAgIENvbnN0cnVjdG9yPD8+IHN0dWJDb25zdHJ1Y3RvciA9IHN0dWJDbGFzcy5nZXRDb25zdHJ1Y3RvcihuZXcgQ2xhc3M8Pz5bXSB7T2JqZWN0LmNsYXNzfSk7CisgICAgICAgICAgICBPYmplY3Qgc3R1YiA9CisgICAgICAgICAgICAgICAgc3R1YkNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKG5ldyBTcHJpbmdJbXBsZW1lbnRhdGlvblRpZShpbXBsZW1lbnRhdGlvbiwgcGFyZW50QXBwbGljYXRpb25Db250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LCBwcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSkpOworCisgICAgICAgICAgICBDbGFzczw/PiB0aWVDbGFzcyA9IENsYXNzLmZvck5hbWUoU1BSSU5HX0NPTlRFWFRfVElFLCB0cnVlLCBjbCk7CisgICAgICAgICAgICBDb25zdHJ1Y3Rvcjw/PiB0aWVDb25zdHJ1Y3RvciA9IHRpZUNsYXNzLmdldENvbnN0cnVjdG9yKG5ldyBDbGFzczw/PltdIHtzdHViQ2xhc3MsIExpc3QuY2xhc3N9KTsKKyAgICAgICAgICAgIHRoaXMudGllID0gdGllQ29uc3RydWN0b3IubmV3SW5zdGFuY2Uoc3R1YiwgaW1wbGVtZW50YXRpb24uZ2V0UmVzb3VyY2UoKSk7CisKKyAgICAgICAgICAgIHRoaXMuc3RhcnRNZXRob2QgPSB0aWVDbGFzcy5nZXRNZXRob2QoInN0YXJ0Iik7CisgICAgICAgICAgICB0aGlzLmNsb3NlTWV0aG9kID0gdGllQ2xhc3MuZ2V0TWV0aG9kKCJjbG9zZSIpOworICAgICAgICAgICAgdGhpcy5nZXRCZWFuTWV0aG9kID0gdGllQ2xhc3MuZ2V0TWV0aG9kKCJnZXRCZWFuIiwgU3RyaW5nLmNsYXNzKTsKKworICAgICAgICB9IGNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9IGNhdGNoIChTZWN1cml0eUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoTWV0aG9kRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0gY2F0Y2ggKEluc3RhbnRpYXRpb25FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RhcnQoKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdGFydE1ldGhvZC5pbnZva2UodGllKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGNsb3NlKCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2xvc2VNZXRob2QuaW52b2tlKHRpZSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgT2JqZWN0IGdldEJlYW4oU3RyaW5nIGlkKSB0aHJvd3MgU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgIHJldHVybiBnZXRCZWFuTWV0aG9kLmludm9rZSh0aWUsIGlkKTsKKworICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9TcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9TcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAyMDdiOQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL1NwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDgwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm92aWRlci5zdHViOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250ZXh0LlByb3BlcnR5VmFsdWVGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5pbnZvY2F0aW9uLlByb3h5RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5JbXBsZW1lbnRhdGlvblByb3ZpZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50U2VydmljZTsKKworLyoqCisgKiBBIHByb3ZpZGVyIGNsYXNzIGZvciBydW50aW1lIFNwcmluZyBpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZXMKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJCAKKyAqLworcHVibGljIGNsYXNzIFNwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIgaW1wbGVtZW50cyBJbXBsZW1lbnRhdGlvblByb3ZpZGVyIHsKKyAgICBwcml2YXRlIFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50OworCisgICAgLy8gQSBTcHJpbmcgYXBwbGljYXRpb24gY29udGV4dCBvYmplY3QKKyAgICBwcml2YXRlIFNwcmluZ0NvbnRleHRTdHViIHNwcmluZ0NvbnRleHQ7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RvciBmb3IgdGhlIHByb3ZpZGVyIC0gdGFrZXMgYSBjb21wb25lbnQgZGVmaW5pdGlvbiBhbmQgYSBTcHJpbmcgaW1wbGVtZW50YXRpb24KKyAgICAgKiBkZXNjcmlwdGlvbgorICAgICAqIEBwYXJhbSBjb21wb25lbnQgLSB0aGUgY29tcG9uZW50IGluIHRoZSBhc3NlbWJseQorICAgICAqIEBwYXJhbSBpbXBsZW1lbnRhdGlvbiAtIHRoZSBpbXBsZW1lbnRhdGlvbgorICAgICAqLworICAgIHB1YmxpYyBTcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyKFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwcmluZ0ltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBwYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveHlGYWN0b3J5IHByb3h5U2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVZhbHVlRmFjdG9yeSBwcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSkgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKKworICAgICAgICBzcHJpbmdDb250ZXh0ID0gbmV3IFNwcmluZ0NvbnRleHRTdHViKGNvbXBvbmVudCwgaW1wbGVtZW50YXRpb24sIHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCwgcHJveHlTZXJ2aWNlLCBwcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSk7CisKKyAgICB9IC8vIGVuZCBjb25zdHJ1Y3RvcgorCisgICAgcHVibGljIEludm9rZXIgY3JlYXRlSW52b2tlcihSdW50aW1lQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlLCBPcGVyYXRpb24gb3BlcmF0aW9uKSB7CisgICAgICAgIHJldHVybiBuZXcgU3ByaW5nSW52b2tlcihjb21wb25lbnQsIHNwcmluZ0NvbnRleHQsIHNlcnZpY2UsIG9wZXJhdGlvbik7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNPbmVXYXlJbnZvY2F0aW9uKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RhcnQgdGhpcyBTcHJpbmcgaW1wbGVtZW50YXRpb24gaW5zdGFuY2UKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzdGFydCgpIHsKKyAgICAgICAgc3ByaW5nQ29udGV4dC5zdGFydCgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0b3AgdGhpcyBpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7CisgICAgICAgIHNwcmluZ0NvbnRleHQuY2xvc2UoKTsKKyAgICB9CisKK30gLy8gZW5kIGNsYXNzIFNwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL1NwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9TcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MDJmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9TcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeS5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb3ZpZGVyLnN0dWI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRleHQuUHJvcGVydHlWYWx1ZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLlV0aWxpdHlFeHRlbnNpb25Qb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbi5FeHRlbnNpYmxlUHJveHlGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5pbnZvY2F0aW9uLlByb3h5RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5JbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudDsKKworLyoqCisgKiBJbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeSBmb3IgU3ByaW5nIGltcGxlbWVudGF0aW9uIHR5cGUKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJCAKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBTcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeSBpbXBsZW1lbnRzIEltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5PFNwcmluZ0ltcGxlbWVudGF0aW9uPiB7CisgICAgcHJpdmF0ZSBQcm94eUZhY3RvcnkgcHJveHlGYWN0b3J5OworICAgIHByaXZhdGUgUHJvcGVydHlWYWx1ZUZhY3RvcnkgcHJvcGVydHlGYWN0b3J5OworICAgIHByaXZhdGUgU3ByaW5nQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3IgY29udGV4dEFjY2Vzc29yOworCisgICAgLyoqCisgICAgICogU2ltcGxlIGNvbnN0cnVjdG9yCisgICAgICoKKyAgICAgKi8KKyAgICBwdWJsaWMgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkoRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSkgeworICAgICAgICBzdXBlcigpOworICAgICAgICBVdGlsaXR5RXh0ZW5zaW9uUG9pbnQgdXRpbGl0aWVzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoVXRpbGl0eUV4dGVuc2lvblBvaW50LmNsYXNzKTsKKyAgICAgICAgY29udGV4dEFjY2Vzc29yID0gdXRpbGl0aWVzLmdldFV0aWxpdHkoU3ByaW5nQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3IuY2xhc3MpOworICAgICAgICBwcm94eUZhY3RvcnkgPSBFeHRlbnNpYmxlUHJveHlGYWN0b3J5LmdldEluc3RhbmNlKHJlZ2lzdHJ5KTsKKyAgICAgICAgcHJvcGVydHlGYWN0b3J5ID0gdXRpbGl0aWVzLmdldFV0aWxpdHkoUHJvcGVydHlWYWx1ZUZhY3RvcnkuY2xhc3MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBTcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyIGZvciBhIGdpdmVuIGNvbXBvbmVudCBhbmQgU3ByaW5nIGltcGxlbWVudGF0aW9uCisgICAgICogQHBhcmFtIGNvbXBvbmVudCB0aGUgY29tcG9uZW50IGZvciB3aGljaCBpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZXMgYXJlIHJlcXVpcmVkCisgICAgICogQHBhcmFtIGltcGxlbWVudGF0aW9uIHRoZSBTcHJpbmcgaW1wbGVtZW50YXRpb24gd2l0aCBkZXRhaWxzIG9mIHRoZSBjb21wb25lbnQKKyAgICAgKiBpbXBsZW1lbnRhdGlvbgorICAgICAqIEByZXR1cm4gdGhlIFNwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIgZm9yIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50CisgICAgICovCisgICAgcHVibGljIEltcGxlbWVudGF0aW9uUHJvdmlkZXIgY3JlYXRlSW1wbGVtZW50YXRpb25Qcm92aWRlcihSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwcmluZ0ltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uKSB7CisgICAgICAgIE9iamVjdCBwYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQgPQorICAgICAgICAgICAgKGNvbnRleHRBY2Nlc3NvciAhPSBudWxsKSA/IGNvbnRleHRBY2Nlc3Nvci5nZXRQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQoKSA6IG51bGw7CisgICAgICAgIHJldHVybiBuZXcgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlcihjb21wb25lbnQsIGltcGxlbWVudGF0aW9uLCBwYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQsIHByb3h5RmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5RmFjdG9yeSk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJucyB0aGUgY2xhc3Mgb2YgdGhlIFNwcmluZyBpbXBsZW1lbnRhdGlvbgorICAgICAqLworICAgIHB1YmxpYyBDbGFzczxTcHJpbmdJbXBsZW1lbnRhdGlvbj4gZ2V0TW9kZWxUeXBlKCkgeworICAgICAgICByZXR1cm4gU3ByaW5nSW1wbGVtZW50YXRpb24uY2xhc3M7CisgICAgfQorCit9IC8vIGVuZCBjbGFzcyBTcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL3N0dWIvU3ByaW5nSW1wbGVtZW50YXRpb25UaWUuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL1NwcmluZ0ltcGxlbWVudGF0aW9uVGllLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM3NWZhZQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL1NwcmluZ0ltcGxlbWVudGF0aW9uVGllLmphdmEKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXIuc3R1YjsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb25lbnRQcm9wZXJ0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlByb3BlcnR5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUmVmZXJlbmNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udGV4dC5Qcm9wZXJ0eVZhbHVlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgVHVzY2FueSBzaWRlIHRpZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcnVudGltZSBzdHViIGNsYXNzLgorICogSXQgZW5hYmxlcyB0aGUgU3BpbmcgY29kZSBpbiB0aGUgcnVudGltZSBtb2R1bGUgdG8gaW52b2tlIG1ldGhvZHMgb24gYQorICogVHVzY2FueSBTcHJpbmdJbXBsZW1lbnRhdGlvbiB3aXRob3V0IHRoZSBTcHJpbmcgcnVudGltZSBtb2R1bGUKKyAqIG5lZWRpbmcgdG8ga25vdyBhYm91dCBhbnkgVHVzY2FueSBjbGFzc2VzLiBTZWUgdGhlIFNwcmluZ0ltcGxlbWVudGF0aW9uU3R1YiBjbGFzcworICogaW4gdGhlIGltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lIG1vZHVsZSBmb3Igd2hhdCB0aGUgc3R1YiBkb2VzLiAKKyAqLworcHVibGljIGNsYXNzIFNwcmluZ0ltcGxlbWVudGF0aW9uVGllIHsKKworICAgIHByaXZhdGUgU3ByaW5nSW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb247CisgICAgcHJpdmF0ZSBPYmplY3QgcGFyZW50QXBwbGljYXRpb25Db250ZXh0OworICAgIHByaXZhdGUgUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQ7CisgICAgcHJpdmF0ZSBQcm9wZXJ0eVZhbHVlRmFjdG9yeSBwcm9wZXJ0eUZhY3Rvcnk7CisKKyAgICBwdWJsaWMgU3ByaW5nSW1wbGVtZW50YXRpb25UaWUoU3ByaW5nSW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBwYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eVZhbHVlRmFjdG9yeSBwcm9wZXJ0eUZhY3RvcnkpIHsKKyAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbiA9IGltcGxlbWVudGF0aW9uOworICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKKyAgICAgICAgdGhpcy5wcm9wZXJ0eUZhY3RvcnkgPSBwcm9wZXJ0eUZhY3Rvcnk7CisgICAgICAgIHRoaXMucGFyZW50QXBwbGljYXRpb25Db250ZXh0ID0gcGFyZW50QXBwbGljYXRpb25Db250ZXh0OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VVJJKCkgeworICAgICAgICByZXR1cm4gaW1wbGVtZW50YXRpb24uZ2V0VVJJKCk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkgeworICAgICAgICByZXR1cm4gY29tcG9uZW50LmdldE5hbWUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBNZXRob2QgdG8gY3JlYXRlIGEgSmF2YSBCZWFuIGZvciBhIFByb3BlcnR5IHZhbHVlCisgICAgICogQHBhcmFtIDxCPiB0aGUgY2xhc3MgdHlwZSBvZiB0aGUgQmVhbgorICAgICAqIEBwYXJhbSByZXF1aXJlZFR5cGUgLSBhIENsYXNzIG9iamVjdCBmb3IgdGhlIHJlcXVpcmVkIHR5cGUKKyAgICAgKiBAcGFyYW0gbmFtZSAtIHRoZSBQcm9wZXJ0eSBuYW1lCisgICAgICogQHJldHVybiAtIGEgQmVhbiBvZiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LCB3aXRoIHZhbHVlIHNldAorICAgICAqLworICAgIHByaXZhdGUgPEI+IEIgZ2V0UHJvcGVydHlCZWFuKENsYXNzPD8+IHJlcXVpcmVkVHlwZSwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgQiBwcm9wZXJ0eU9iamVjdCA9IG51bGw7CisgICAgICAgIC8vIEdldCB0aGUgY29tcG9uZW50J3MgbGlzdCBvZiBwcm9wZXJ0aWVzCisgICAgICAgIExpc3Q8Q29tcG9uZW50UHJvcGVydHk+IHByb3BzID0gY29tcG9uZW50LmdldFByb3BlcnRpZXMoKTsKKyAgICAgICAgZm9yIChDb21wb25lbnRQcm9wZXJ0eSBwcm9wIDogcHJvcHMpIHsKKyAgICAgICAgICAgIGlmIChwcm9wLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBPbiBmaW5kaW5nIHRoZSBwcm9wZXJ0eSwgY3JlYXRlIGEgZmFjdG9yeSBmb3IgaXQgYW5kIGNyZWF0ZSBhIEJlYW4gdXNpbmcKKyAgICAgICAgICAgICAgICAvLyB0aGUgZmFjdG9yeQorICAgICAgICAgICAgICAgIHByb3BlcnR5T2JqZWN0ID0gKEIpIHByb3BlcnR5RmFjdG9yeS5jcmVhdGVQcm9wZXJ0eVZhbHVlKHByb3AsIHJlcXVpcmVkVHlwZSk7CisgICAgICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICB9IC8vIGVuZCBmb3IKKworICAgICAgICByZXR1cm4gcHJvcGVydHlPYmplY3Q7CisgICAgfQorCisgICAgLyoqCisgICAgICogQ3JlYXRlcyBhIHByb3h5IEJlYW4gZm9yIGEgcmVmZXJlbmNlCisgICAgICogQHBhcmFtIDxCPiB0aGUgQnVzaW5lc3MgaW50ZXJmYWNlIHR5cGUgZm9yIHRoZSByZWZlcmVuY2UKKyAgICAgKiBAcGFyYW0gYnVzaW5lc3NJbnRlcmZhY2UgLSB0aGUgYnVzaW5lc3MgaW50ZXJmYWNlIGFzIGEgQ2xhc3MKKyAgICAgKiBAcGFyYW0gcmVmZXJlbmNlTmFtZSAtIHRoZSBuYW1lIG9mIHRoZSBSZWZlcmVuY2UKKyAgICAgKiBAcmV0dXJuIGFuIEJlYW4gb2YgdGhlIHR5cGUgZGVmaW5lZCBieSA8Qj4KKyAgICAgKi8KKyAgICBwcml2YXRlIDxCPiBCIGdldFNlcnZpY2UoQ2xhc3M8Qj4gYnVzaW5lc3NJbnRlcmZhY2UsIFN0cmluZyByZWZlcmVuY2VOYW1lKSB7CisgICAgICAgIHJldHVybiBjb21wb25lbnQuZ2V0Q29tcG9uZW50Q29udGV4dCgpLmdldFNlcnZpY2UoYnVzaW5lc3NJbnRlcmZhY2UsIHJlZmVyZW5jZU5hbWUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEJlYW4gZm9yIGEgcmVmZXJlbmNlIG9yIGZvciBhIHByb3BlcnR5LgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgQmVhbiByZXF1aXJlZAorICAgICAqIEBwYXJhbSByZXF1aXJlZFR5cGUgLSB0aGUgcmVxdWlyZWQgdHlwZSBvZiB0aGUgQmVhbiAoZWl0aGVyIGEgSmF2YSBjbGFzcyBvciBhIEphdmEgaW50ZXJmYWNlKQorICAgICAqIEByZXR1cm4gT2JqZWN0IC0gYSBCZWFuIHdoaWNoIG1hdGNoZXMgdGhlIHJlcXVlc3RlZCBiZWFuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBuYW1lLCBDbGFzczw/PiByZXF1aXJlZFR5cGUpIHsKKyAgICAgICAgLy8gVGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlIHJlcXVlc3RlZCBCZWFuIGlzIGVpdGhlciBhIHJlZmVyZW5jZSBvciBhIHByb3BlcnR5CisgICAgICAgIC8vIGZyb20gdGhlIFNwcmluZyBjb250ZXh0CisgICAgICAgIGZvciAoUmVmZXJlbmNlIHJlZmVyZW5jZSA6IGltcGxlbWVudGF0aW9uLmdldFJlZmVyZW5jZXMoKSkgeworICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5nZXROYW1lKCkuZXF1YWxzKG5hbWUpKSB7CisgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0aGUgSmF2YSBpbnRlcmZhY2UgZm9yIHRoZSByZWZlcmVuY2UgKGl0IGNhbid0IGJlIGFueSBvdGhlciBpbnRlcmZhY2UgdHlwZQorICAgICAgICAgICAgICAgIC8vIGZvciBhIFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0KQorICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlZFR5cGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGphdmFJbnRlcmZhY2UgPSAoSmF2YUludGVyZmFjZSlyZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKS5nZXRJbnRlcmZhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRUeXBlID0gamF2YUludGVyZmFjZS5nZXRKYXZhQ2xhc3MoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGFuZCByZXR1cm4gdGhlIHByb3h5IGZvciB0aGUgcmVmZXJlbmNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGdldFNlcnZpY2UocmVxdWlyZWRUeXBlLCByZWZlcmVuY2UuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgIH0gLy8gZW5kIGlmCisgICAgICAgIH0gLy8gZW5kIGZvcgorCisgICAgICAgIC8vIEZvciBhIHByb3BlcnR5LCBnZXQgdGhlIG5hbWUgYW5kIHRoZSByZXF1aXJlZCBKYXZhIHR5cGUgYW5kIGNyZWF0ZSBhIEJlYW4KKyAgICAgICAgLy8gb2YgdGhhdCB0eXBlIHdpdGggdGhlIHZhbHVlIGluc2VydGVkLgorICAgICAgICBmb3IgKFByb3BlcnR5IHByb3BlcnR5IDogaW1wbGVtZW50YXRpb24uZ2V0UHJvcGVydGllcygpKSB7CisgICAgICAgICAgICBpZiAocHJvcGVydHkuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1aXJlZFR5cGUgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgb25seSBkZWFscyB3aXRoIGEgc3Vic2V0IG9mIHR5cGVzIGFuZCB3YXMgc3VwZXJjZWRlZAorICAgICAgICAgICAgICAgICAgICAvLyBieSB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW1wbGVtZW50YXRpb24gKHdoaWNoIHVzZXMgQ2xhc3NlcyBhcyBmb3VuZAorICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgU3ByaW5nIGltcGxlbWVudGF0aW9uIGl0c2VsZi4KKyAgICAgICAgICAgICAgICAgICAgLy9yZXF1aXJlZFR5cGUgPSBKYXZhWE1MTWFwcGVyLmdldEphdmFUeXBlKCBwcm9wZXJ0eS5nZXRYU0RUeXBlKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRUeXBlID0gaW1wbGVtZW50YXRpb24uZ2V0UHJvcGVydHlDbGFzcyhuYW1lKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldFByb3BlcnR5QmVhbihyZXF1aXJlZFR5cGUsIHByb3BlcnR5LmdldE5hbWUoKSk7CisgICAgICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICB9IC8vIGVuZCBmb3IKKyAgICAgICAgICAvLyBUT0RPOiBOb1N1Y2hCZWFuRXhjZXB0aW9uCisgICAgICAgIC8vIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJVbmFibGUgdG8gZmluZCBCZWFuIHdpdGggbmFtZSAiICsgbmFtZSk7CisgICAgICAgIHJldHVybiBudWxsOworCisgICAgfSAvLyBlbmQgbWV0aG9kIGdldEJlYW4oIFN0cmluZywgQ2xhc3MgKQorCisgICAgcHVibGljIE9iamVjdCBnZXRDb21wb25lbnRUaWUoKSB7CisgICAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50VGllKGNvbXBvbmVudCk7CisgICAgfQorCisgICAgcHVibGljIE9iamVjdCBnZXRQcm9wZXJ0eVZhbHVlVGllKCkgeworICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5VmFsdWVUaWUoY29tcG9uZW50LCBwcm9wZXJ0eUZhY3RvcnkpOworICAgIH0KKworICAgIHB1YmxpYyBDbGFzc0xvYWRlciBnZXRDbGFzc0xvYWRlcigpIHsKKyAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLmdldENsYXNzTG9hZGVyKCk7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBPYmplY3QgZ2V0UGFyZW50QXBwbGljYXRpb25Db250ZXh0KCkgeworICAgICAgICByZXR1cm4gcGFyZW50QXBwbGljYXRpb25Db250ZXh0OworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL3N0dWIvU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbi5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb3ZpZGVyL3N0dWIvU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOWE2NDAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9TcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXIuc3R1YjsKKworLyoqCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24geworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gLTExNTc3OTAwMzY2MzgxNTc1MTNMOworCisgICAgcHVibGljIFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24oU3RyaW5nIG1zZykgeworICAgICAgICBzdXBlcihtc2cpOworICAgIH0KKworICAgIHB1YmxpYyBTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uKFRocm93YWJsZSBlKSB7CisgICAgICAgIHN1cGVyKGUpOworICAgIH0KKworICAgIHB1YmxpYyBTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uKFN0cmluZyBtc2csIFRocm93YWJsZSBlKSB7CisgICAgICAgIHN1cGVyKG1zZywgZSk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9TcHJpbmdJbnZva2VyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvdmlkZXIvc3R1Yi9TcHJpbmdJbnZva2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3M2ViNQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXN0dWIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm92aWRlci9zdHViL1NwcmluZ0ludm9rZXIuamF2YQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvdmlkZXIuc3R1YjsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25UYXJnZXRFeGNlcHRpb247CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nQmVhbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nSW1wbGVtZW50YXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuaW1wbC5KYXZhSW50ZXJmYWNlVXRpbDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudFNlcnZpY2U7CisKKy8qKgorICogSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBhIFNwcmluZyBiZWFuIGludm9rZXIKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJCAKKyAqLworcHVibGljIGNsYXNzIFNwcmluZ0ludm9rZXIgaW1wbGVtZW50cyBJbnZva2VyIHsKKworICAgIHByaXZhdGUgTWV0aG9kIHRoZU1ldGhvZCA9IG51bGw7CisgICAgcHJpdmF0ZSBPYmplY3QgYmVhbjsKKyAgICBwcml2YXRlIFNwcmluZ0JlYW5FbGVtZW50IGJlYW5FbGVtZW50OworICAgIHByaXZhdGUgYm9vbGVhbiBiYWRJbnZva2VyID0gZmFsc2U7CisKKyAgICBwcml2YXRlIFNwcmluZ0NvbnRleHRTdHViIHNwcmluZ0NvbnRleHQ7CisgICAgcHJpdmF0ZSBPcGVyYXRpb24gb3BlcmF0aW9uOworCisgICAgLyoqCisgICAgICogU3ByaW5nSW52b2tlciBjb25zdHJ1Y3RvcgorICAgICAqIEBwYXJhbSBjb21wb25lbnQgLSB0aGUgU3ByaW5nIGNvbXBvbmVudCB0byBpbnZva2UKKyAgICAgKiBAcGFyYW0gc2VydmljZSAtIHRoZSBzZXJ2aWNlIHRvIGludm9rZQorICAgICAqIEBwYXJhbSBvcGVyYXRpb24gLSB0aGUgb3BlcmF0aW9uIHRvIGludm9rZQorICAgICAqLworICAgIHB1YmxpYyBTcHJpbmdJbnZva2VyKFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIFNwcmluZ0NvbnRleHRTdHViIHNwcmluZ0NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUNvbXBvbmVudFNlcnZpY2Ugc2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb24gb3BlcmF0aW9uKSB7CisKKyAgICAgICAgdGhpcy5zcHJpbmdDb250ZXh0ID0gc3ByaW5nQ29udGV4dDsKKyAgICAgICAgdGhpcy5vcGVyYXRpb24gPSBvcGVyYXRpb247CisKKyAgICAgICAgLy8gRnJvbSB0aGUgY29tcG9uZW50IGFuZCB0aGUgc2VydmljZSwgaWRlbnRpZnkgdGhlIFNwcmluZyBCZWFuIHdoaWNoIGlzIHRoZSB0YXJnZXQKKyAgICAgICAgU3ByaW5nSW1wbGVtZW50YXRpb24gdGhlSW1wbGVtZW50YXRpb24gPSAoU3ByaW5nSW1wbGVtZW50YXRpb24pY29tcG9uZW50LmdldEltcGxlbWVudGF0aW9uKCk7CisgICAgICAgIGJlYW5FbGVtZW50ID0gdGhlSW1wbGVtZW50YXRpb24uZ2V0QmVhbkZyb21TZXJ2aWNlKHNlcnZpY2UuZ2V0U2VydmljZSgpKTsKKworICAgICAgICBpZiAoYmVhbkVsZW1lbnQgPT0gbnVsbCkgeworICAgICAgICAgICAgYmFkSW52b2tlciA9IHRydWU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgIH0gLy8gZW5kIGNvbnN0cnVjdG9yIFNwcmluZ0ludm9rZXIKKworICAgIC8vIExhenktbG9hZCB0aGUgbWV0aG9kIHRvIGF2b2lkIHRpbWluZyBwcm9ibGVtcyB3aXRoIHRoZSBTcHJpbmcgQ29udGV4dAorICAgIHByaXZhdGUgdm9pZCBzZXR1cE1ldGhvZCgpIHRocm93cyBTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGJlYW4gPSBzcHJpbmdDb250ZXh0LmdldEJlYW4oYmVhbkVsZW1lbnQuZ2V0SWQoKSk7CisgICAgICAgICAgICBDbGFzczw/PiBiZWFuQ2xhc3MgPSBiZWFuLmdldENsYXNzKCk7CisgICAgICAgICAgICB0aGVNZXRob2QgPSBKYXZhSW50ZXJmYWNlVXRpbC5maW5kTWV0aG9kKGJlYW5DbGFzcywgb3BlcmF0aW9uKTsKKyAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTcHJpbmdJbnZva2VyIC0gZm91bmQgbWV0aG9kICIgKyB0aGVNZXRob2QuZ2V0TmFtZSgpICk7CisgICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgT2JqZWN0IGRvSW52b2tlKE9iamVjdCBwYXlsb2FkKSB0aHJvd3MgU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIGlmICh0aGVNZXRob2QgPT0gbnVsbCkKKyAgICAgICAgICAgIHNldHVwTWV0aG9kKCk7CisKKyAgICAgICAgaWYgKGJhZEludm9rZXIpCisgICAgICAgICAgICB0aHJvdyBuZXcgU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbigiU3ByaW5nIGludm9rZXIgaW5jb3JyZWN0bHkgY29uZmlndXJlZCIpOworICAgICAgICAvLyBJbnZva2UgdGhlIG1ldGhvZCBvbiB0aGUgU3ByaW5nIGJlYW4gdXNpbmcgdGhlIHBheWxvYWQsIHJldHVybmluZyB0aGUgcmVzdWx0cworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0IHJldDsKKworICAgICAgICAgICAgaWYgKHBheWxvYWQgIT0gbnVsbCAmJiAhcGF5bG9hZC5nZXRDbGFzcygpLmlzQXJyYXkoKSkgeworICAgICAgICAgICAgICAgIHJldCA9IHRoZU1ldGhvZC5pbnZva2UoYmVhbiwgcGF5bG9hZCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldCA9IHRoZU1ldGhvZC5pbnZva2UoYmVhbiwgKE9iamVjdFtdKXBheWxvYWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbigiU3ByaW5nIGludm9rZXIgaW52b2tlIG1ldGhvZCAnIiArIHRoZU1ldGhvZC5nZXROYW1lKCkgKyAiJyBlcnJvci4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5nZXRDYXVzZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uKCJTcHJpbmcgaW52b2tlciBpbnZva2UgbWV0aG9kICciICsgdGhlTWV0aG9kLmdldE5hbWUoKSArICInIGVycm9yLiIsIGUpOworICAgICAgICB9CisKKyAgICB9IC8vIGVuZCBtZXRob2QgZG9JbnZva2UKKworICAgIC8qKgorICAgICAqIEBwYXJhbSBtc2cgdGhlIG1lc3NhZ2UgdG8gaW52b2tlIG9uIHRoZSB0YXJnZXQgYmVhbgorICAgICAqLworICAgIHB1YmxpYyBNZXNzYWdlIGludm9rZShNZXNzYWdlIG1zZykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgT2JqZWN0IHJlc3AgPSBkb0ludm9rZShtc2cuZ2V0Qm9keSgpKTsKKyAgICAgICAgICAgIG1zZy5zZXRCb2R5KHJlc3ApOworICAgICAgICB9IGNhdGNoIChTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIG1zZy5zZXRGYXVsdEJvZHkoZS5nZXRDYXVzZSgpKTsKKyAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICAgIG1zZy5zZXRGYXVsdEJvZHkoZSk7CisgICAgICAgIH0KKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlNwcmluZyBJbnZva2VyIC0gaW52b2tlIGNhbGxlZCIpOworICAgICAgICByZXR1cm4gbXNnOworICAgIH0gLy8gZW5kIG1ldGhvZCBpbnZva2UKKworfSAvLyBlbmQgY2xhc3MgU3ByaW5nSW52b2tlcgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sLlNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sLlNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNDZiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy54bWwuU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXIKQEAgLTAsMCArMSwxNyBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyMgdW5kZXIgdGhlIExpY2Vuc2UuIAorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLnN0dWIuU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXJTdHViO3Jhbmtpbmc9NTAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5IGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5JbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDM3ZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctc3R1Yi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5JbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeQpAQCAtMCwwICsxLDIwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorDQorIyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGV4dGVuc2lvbg0KK29yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb3ZpZGVyLnN0dWIuU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3Rvcnk7bW9kZWw9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nSW1wbGVtZW50YXRpb247cmFua2luZz01MA0KKw0KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9MSUNFTlNFIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL0xJQ0VOU0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBtb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvTElDRU5TRQpjb3B5IHRvIG1vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9MSUNFTlNFCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ0NTIyNAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDI1IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitTQ0EtVmVyc2lvbjogMS4xDQorQnVuZGxlLU5hbWU6IEFwYWNoZSBUdXNjYW55IFNDQSBTcHJpbmcgSW1wbGVtZW50YXRpb24gUnVudGltZSBNb2RlbA0KK0J1bmRsZS1WZW5kb3I6IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbg0KK0J1bmRsZS1WZXJzaW9uOiAyLjAuMA0KK0J1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCitCdW5kbGUtTGljZW5zZTogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dA0KK0J1bmRsZS1EZXNjcmlwdGlvbjogQXBhY2hlIFR1c2NhbnkgU0NBIFNwcmluZyBJbXBsZW1lbnRhdGlvbiBSdW50aW1lIE1vZGVsDQorQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcudGllDQorQnVuZGxlLURvY1VSTDogaHR0cDovL3d3dy5hcGFjaGUub3JnLw0KK0J1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKMlNFLTEuNSxKYXZhU0UtMS42CitJbXBvcnQtUGFja2FnZTogb3JnLm9hc2lzb3Blbi5zY2E7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFuczt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5O3ZlcnNpb249IjMuMC4yLlJFTEVBU0UiLA0KKyBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbjt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZzt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQ7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSIsDQorIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWw7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSIsDQorIG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dDt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQ7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSIsDQorIG9yZy5zcHJpbmdmcmFtZXdvcmsuY29yZTt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5jb3JlLmlvO3ZlcnNpb249IjMuMC4yLlJFTEVBU0UiLA0KKyBvcmcuc3ByaW5nZnJhbWV3b3JrLnV0aWw7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSINCisNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvTk9USUNFIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL05PVElDRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzI1ZWZkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL05PVElDRQpAQCAtMCwwICsxLDYgQEAKKyR7cG9tLm5hbWV9DQorQ29weXJpZ2h0IChjKSAyMDA1IC0gMjAwOCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24NCisNCitUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5DQorVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4NCisNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9SRUFETUUgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvUkVBRE1FCmNvcHkgdG8gbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL1JFQURNRQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3BvbS54bWwgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjE3MDY4Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3BvbS54bWwKQEAgLTAsMCArMSw3MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW1vZHVsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTcHJpbmcgSW1wbGVtZW50YXRpb24gUnVudGltZSBUaWU8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorCisgICAgICAgIDwhLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAtLT4KKyAgICAgICAgPCEtLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tPgorICAgICAgICA8IS0tICogRE9OVCBBREQgQU5ZIFRVU0NBTlkgREVQRU5ERU5DSUVTISEhICogLS0+CisgICAgICAgIDwhLS0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtLT4KKyAgICAgICAgPCEtLSAqIFNlZSB0aGUgUkVBRE1FIGZvciBkZXRhaWxzIHdoeSBub3QgICAqIC0tPgorICAgICAgICA8IS0tICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0+CisgICAgICAgIDwhLS0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAtLT4KKyAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorCisgICAgICAgIDwhLS0gU0NBIEFQSSBkZXBlbmRlbmN5IC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPCEtLSBTcHJpbmcgZGVwZW5kZW5jaWVzLi4uIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMC4yLlJFTEVBU0U8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctYmVhbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjAuMi5SRUxFQVNFPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc3ByaW5nZnJhbWV3b3JrPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWNvbnRleHQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjAuMi5SRUxFQVNFPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8L2RlcGVuZGVuY2llcz4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2NvbnRleHQvdGllL1NDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2NvbnRleHQvdGllL1NDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWUyZWUyCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC90aWUvU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dC5qYXZhCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5jb250ZXh0LnRpZTsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkFycmF5OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmVsZW1lbnRzLnRpZS5TcHJpbmdCZWFuRWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5lbGVtZW50cy50aWUuU3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmVsZW1lbnRzLnRpZS5TcHJpbmdFbGVtZW50VGllOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmVsZW1lbnRzLnRpZS5TcHJpbmdQcm9wZXJ0eUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuZWxlbWVudHMudGllLlNwcmluZ1NDQVByb3BlcnR5RWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5lbGVtZW50cy50aWUuU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5lbGVtZW50cy50aWUuU3ByaW5nU0NBU2VydmljZUVsZW1lbnQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5NdXRhYmxlUHJvcGVydHlWYWx1ZXM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5Qcm9wZXJ0eVZhbHVlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhbkRlZmluaXRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5CZWFuUmVmZXJlbmNlOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQ29uZmlndXJhYmxlTGlzdGFibGVCZWFuRmFjdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkNvbnN0cnVjdG9yQXJndW1lbnRWYWx1ZXM7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5Db25zdHJ1Y3RvckFyZ3VtZW50VmFsdWVzLlZhbHVlSG9sZGVyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuVHlwZWRTdHJpbmdWYWx1ZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5EZWZhdWx0TGlzdGFibGVCZWFuRmFjdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5zdXBwb3J0LkdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQ7CisKK3B1YmxpYyBjbGFzcyBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0IGV4dGVuZHMgR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dCB7CisKKyAgICBwcml2YXRlIENsYXNzTG9hZGVyIGNsYXNzbG9hZGVyID0gbnVsbDsKKyAgICBwcml2YXRlIExpc3Q8U3ByaW5nU0NBUHJvcGVydHlFbGVtZW50PiBwcm9wZXJ0eUVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ+KCk7CisgICAgcHJpdmF0ZSBMaXN0PFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PiBzZXJ2aWNlRWxlbWVudHMgPSBuZXcgQXJyYXlMaXN0PFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PigpOworICAgIHByaXZhdGUgTGlzdDxTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50PiByZWZlcmVuY2VFbGVtZW50cyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudD4oKTsKKyAgICBwcml2YXRlIExpc3Q8U3ByaW5nQmVhbkVsZW1lbnQ+IGJlYW5FbGVtZW50czsKKworICAgIHB1YmxpYyBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KERlZmF1bHRMaXN0YWJsZUJlYW5GYWN0b3J5IGJlYW5GYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uQ29udGV4dCBwYXJlbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NMb2FkZXIgY2xhc3Nsb2FkZXIpIHsKKyAgICAgICAgc3VwZXIoYmVhbkZhY3RvcnksIHBhcmVudCk7CisgICAgICAgIHRoaXMuY2xhc3Nsb2FkZXIgPSBjbGFzc2xvYWRlcjsKKyAgICB9CisKKyAgICBwdWJsaWMgU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dChBcHBsaWNhdGlvbkNvbnRleHQgcGFyZW50LCBDbGFzc0xvYWRlciBjbGFzc2xvYWRlcikgeworICAgICAgICBzdXBlcihwYXJlbnQpOworICAgICAgICB0aGlzLmNsYXNzbG9hZGVyID0gY2xhc3Nsb2FkZXI7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgcG9zdFByb2Nlc3NCZWFuRmFjdG9yeShDb25maWd1cmFibGVMaXN0YWJsZUJlYW5GYWN0b3J5IGJlYW5GYWN0b3J5KSB7CisgICAgICAgIGJlYW5GYWN0b3J5LnNldEJlYW5DbGFzc0xvYWRlcihjbGFzc2xvYWRlcik7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkU0NBUHJvcGVydHlFbGVtZW50KFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudCBwcm9wZXJ0eUVsZW1lbnQpIHsKKyAgICAgICAgcHJvcGVydHlFbGVtZW50cy5hZGQocHJvcGVydHlFbGVtZW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRTQ0FTZXJ2aWNlRWxlbWVudChTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCkgeworICAgICAgICBzZXJ2aWNlRWxlbWVudHMuYWRkKHNlcnZpY2VFbGVtZW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRTQ0FSZWZlcmVuY2VFbGVtZW50KFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQgcmVmZXJlbmNlRWxlbWVudCkgeworICAgICAgICByZWZlcmVuY2VFbGVtZW50cy5hZGQocmVmZXJlbmNlRWxlbWVudCk7CisgICAgfQorCisgICAgcHVibGljIHN5bmNocm9uaXplZCBMaXN0PFNwcmluZ0JlYW5FbGVtZW50PiBnZXRCZWFuRWxlbWVudHMoKSB7CisgICAgICAgIGlmIChiZWFuRWxlbWVudHMgPT0gbnVsbCkgeworICAgICAgICAgICAgYmVhbkVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxTcHJpbmdCZWFuRWxlbWVudD4oKTsKKyAgICAgICAgICAgIGZvciAoU3RyaW5nIG5hbWUgOiBnZXRCZWFuRGVmaW5pdGlvbk5hbWVzKCkpIHsKKyAgICAgICAgICAgICAgICBCZWFuRGVmaW5pdGlvbiBkZWYgPSBnZXRCZWFuRGVmaW5pdGlvbihuYW1lKTsKKyAgICAgICAgICAgICAgICBTcHJpbmdCZWFuRWxlbWVudCBiZWFuRWxlbWVudCA9IG5ldyBTcHJpbmdCZWFuRWxlbWVudChuYW1lLCBkZWYuZ2V0QmVhbkNsYXNzTmFtZSgpKTsKKyAgICAgICAgICAgICAgICBiZWFuRWxlbWVudHMuYWRkKGJlYW5FbGVtZW50KTsKKyAgICAgICAgICAgICAgICBiZWFuRWxlbWVudC5zZXRBYnN0cmFjdEJlYW4oZGVmLmlzQWJzdHJhY3QoKSk7CisgICAgICAgICAgICAgICAgYmVhbkVsZW1lbnQuc2V0RmFjdG9yeUJlYW5BdHRyaWJ1dGUoZGVmLmdldEZhY3RvcnlCZWFuTmFtZSgpICE9IG51bGwpOworICAgICAgICAgICAgICAgIGJlYW5FbGVtZW50LnNldEZhY3RvcnlNZXRob2RBdHRyaWJ1dGUoZGVmLmdldEZhY3RvcnlNZXRob2ROYW1lKCkgIT0gbnVsbCk7CisgICAgICAgICAgICAgICAgYmVhbkVsZW1lbnQuc2V0UGFyZW50QXR0cmlidXRlKGRlZi5nZXRQYXJlbnROYW1lKCkgIT0gbnVsbCk7CisgICAgICAgICAgICAgICAgYmVhbkVsZW1lbnQuc2V0SW5uZXJCZWFuKGJlYW5FbGVtZW50LmdldElkKCkgPT0gbnVsbCk7CisKKyAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvckFyZ3VtZW50VmFsdWVzIGFyZ3MgPSBkZWYuZ2V0Q29uc3RydWN0b3JBcmd1bWVudFZhbHVlcygpOworICAgICAgICAgICAgICAgIGZvciAoTWFwLkVudHJ5PEludGVnZXIsIFZhbHVlSG9sZGVyPiBlOiBhcmdzLmdldEluZGV4ZWRBcmd1bWVudFZhbHVlcygpLmVudHJ5U2V0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWVIb2xkZXIgaG9sZGVyID0gZS5nZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQgYXJnID0gbmV3IFNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudChob2xkZXIuZ2V0VHlwZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYXJnLnNldEluZGV4KGUuZ2V0S2V5KCkpOworICAgICAgICAgICAgICAgICAgICBiZWFuRWxlbWVudC5hZGRDdXN0cnVjdG9yQXJncyhhcmcpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIE11dGFibGVQcm9wZXJ0eVZhbHVlcyB2YWx1ZXMgPSBkZWYuZ2V0UHJvcGVydHlWYWx1ZXMoKTsKKyAgICAgICAgICAgICAgICBmb3IgKFByb3BlcnR5VmFsdWUgcCA6IHZhbHVlcy5nZXRQcm9wZXJ0eVZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIFNwcmluZ1Byb3BlcnR5RWxlbWVudCBwcm9wZXJ0eUVsZW1lbnQgPSBuZXcgU3ByaW5nUHJvcGVydHlFbGVtZW50KHAuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHZhbHVlID0gcC5nZXRWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBjb25maWd1cmVQcm9wZXJ0eUVsZW1lbnQocHJvcGVydHlFbGVtZW50LCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGJlYW5FbGVtZW50LmdldFByb3BlcnRpZXMoKS5hZGQocHJvcGVydHlFbGVtZW50KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJlYW5FbGVtZW50czsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBjb25maWd1cmVQcm9wZXJ0eUVsZW1lbnQoU3ByaW5nUHJvcGVydHlFbGVtZW50IHByb3BlcnR5RWxlbWVudCwgT2JqZWN0IHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJlYW5SZWZlcmVuY2UpIHsKKyAgICAgICAgICAgIEJlYW5SZWZlcmVuY2UgYmVhblJlZiA9IChCZWFuUmVmZXJlbmNlKXZhbHVlOworICAgICAgICAgICAgcHJvcGVydHlFbGVtZW50LmFkZFJlZihiZWFuUmVmLmdldEJlYW5OYW1lKCkpOworICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQ29sbGVjdGlvbikgeworICAgICAgICAgICAgQ29sbGVjdGlvbiBjb2xsZWN0aW9uID0gKENvbGxlY3Rpb24pdmFsdWU7CisgICAgICAgICAgICBmb3IgKE9iamVjdCBpdGVtIDogY29sbGVjdGlvbikgeworICAgICAgICAgICAgICAgIGNvbmZpZ3VyZVByb3BlcnR5RWxlbWVudChwcm9wZXJ0eUVsZW1lbnQsIGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgVHlwZWRTdHJpbmdWYWx1ZSkgeworICAgICAgICAgICAgVHlwZWRTdHJpbmdWYWx1ZSBzdHJpbmdWYWx1ZSA9IChUeXBlZFN0cmluZ1ZhbHVlKXZhbHVlOworICAgICAgICAgICAgcHJvcGVydHlFbGVtZW50LmFkZFZhbHVlKHN0cmluZ1ZhbHVlLmdldFZhbHVlKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUVsZW1lbnQuYWRkVmFsdWUodmFsdWUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ+IGdldFByb3BlcnR5RWxlbWVudHMoKSB7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUVsZW1lbnRzOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PiBnZXRTZXJ2aWNlRWxlbWVudHMoKSB7CisgICAgICAgIHJldHVybiBzZXJ2aWNlRWxlbWVudHM7CisgICAgfQorCisgICAgcHVibGljIExpc3Q8U3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudD4gZ2V0UmVmZXJlbmNlRWxlbWVudHMoKSB7CisgICAgICAgIHJldHVybiByZWZlcmVuY2VFbGVtZW50czsKKyAgICB9CisKKyAgICBwdWJsaWMgPFQ+IFRbXSBnZXRFbGVtZW50cyhDbGFzczxUPiB0eXBlKSB7CisgICAgICAgIGlmICh0eXBlLmdldFNpbXBsZU5hbWUoKS5lcXVhbHMoU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50LmNsYXNzLmdldFNpbXBsZU5hbWUoKSkpIHsKKyAgICAgICAgICAgIFRbXSBlbGVtZW50cyA9IChUW10pQXJyYXkubmV3SW5zdGFuY2UodHlwZSwgZ2V0UHJvcGVydHlFbGVtZW50cygpLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0gPSBTcHJpbmdFbGVtZW50VGllLmNvcHkoZ2V0UHJvcGVydHlFbGVtZW50cygpLmdldChpKSwgdHlwZSwgdHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudHM7CisgICAgICAgIH0gZWxzZSBpZiAodHlwZS5nZXRTaW1wbGVOYW1lKCkuZXF1YWxzKFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpKSkgeworICAgICAgICAgICAgVFtdIGVsZW1lbnRzID0gKFRbXSlBcnJheS5uZXdJbnN0YW5jZSh0eXBlLCBnZXRSZWZlcmVuY2VFbGVtZW50cygpLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0gPSBTcHJpbmdFbGVtZW50VGllLmNvcHkoZ2V0UmVmZXJlbmNlRWxlbWVudHMoKS5nZXQoaSksIHR5cGUsIHR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOworICAgICAgICB9IGVsc2UgaWYgKHR5cGUuZ2V0U2ltcGxlTmFtZSgpLmVxdWFscyhTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudC5jbGFzcy5nZXRTaW1wbGVOYW1lKCkpKSB7CisgICAgICAgICAgICBUW10gZWxlbWVudHMgPSAoVFtdKUFycmF5Lm5ld0luc3RhbmNlKHR5cGUsIGdldFNlcnZpY2VFbGVtZW50cygpLnNpemUoKSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudHNbaV0gPSBTcHJpbmdFbGVtZW50VGllLmNvcHkoZ2V0U2VydmljZUVsZW1lbnRzKCkuZ2V0KGkpLCB0eXBlLCB0eXBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlbGVtZW50czsKKyAgICAgICAgfSBlbHNlIGlmICh0eXBlLmdldFNpbXBsZU5hbWUoKS5lcXVhbHMoU3ByaW5nQmVhbkVsZW1lbnQuY2xhc3MuZ2V0U2ltcGxlTmFtZSgpKSkgeworICAgICAgICAgICAgVFtdIGVsZW1lbnRzID0gKFRbXSlBcnJheS5uZXdJbnN0YW5jZSh0eXBlLCBnZXRCZWFuRWxlbWVudHMoKS5zaXplKCkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGVsZW1lbnRzW2ldID0gU3ByaW5nRWxlbWVudFRpZS5jb3B5KGdldEJlYW5FbGVtZW50cygpLmdldChpKSwgdHlwZSwgdHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZWxlbWVudHM7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHR5cGUgKyAiIGlzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2NvbnRleHQvdGllL1NDQVBhcmVudEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC90aWUvU0NBUGFyZW50QXBwbGljYXRpb25Db250ZXh0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiMzVjZQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2NvbnRleHQvdGllL1NDQVBhcmVudEFwcGxpY2F0aW9uQ29udGV4dC5qYXZhCkBAIC0wLDAgKzEsMjEyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5jb250ZXh0LnRpZTsKKworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5CZWFuRmFjdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuTm9TdWNoQmVhbkRlZmluaXRpb25FeGNlcHRpb247CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5BdXRvd2lyZUNhcGFibGVCZWFuRmFjdG9yeTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkV2ZW50OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5NZXNzYWdlU291cmNlUmVzb2x2YWJsZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuTm9TdWNoTWVzc2FnZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvcmUuaW8uUmVzb3VyY2U7CisKKy8qKgorICogQSBTcHJpbmcgUGFyZW50QXBwbGljYXRpb25Db250ZXh0IGZvciBhIGdpdmVuIFNwcmluZyBJbXBsZW1lbnRhdGlvbgorICoKKyAqIFRoZSBQYXJlbnQgYXBwbGljYXRpb24gY29udGV4dCBpcyByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgdGhvc2UgZW50aXRpZXMgd2l0aGluIGEgU3ByaW5nCisgKiBhcHBsaWNhdGlvbiBjb250ZXh0IHRoYXQgYWN0dWFsbHkgYmVsb25nIHRvIFNDQSByYXRoZXIgdGhhbiB0byBTcHJpbmcuICBUaGUgcHJpbmNpcGFsIHRoaW5ncworICogYXJlIFByb3BlcnRpZXMgYW5kIFJlZmVyZW5jZXMuICBUaGVzZSBtYXkgYmUgcHJlc2VudCBlaXRoZXIgdGhyb3VnaCBleHBsaWNpdCA8c2NhOnByb3BlcnR5Lz4KKyAqIGFuZCA8c2NhOnJlZmVyZW5jZS8+IGVsZW1lbnRzIGluIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0IG9yIHRoZXkgbWF5IGJlIGltcGxpY2l0IHRocm91Z2gKKyAqIHVucmVzb2x2ZWQgU3ByaW5nIGJlYW4gPHByb3BlcnR5Li4uLz4gZWxlbWVudHMuICBJbiBlaXRoZXIgY2FzZSwgaXQgaXMgdGhlIFBhcmVudCBhcHBsaWNhdGlvbgorICogY29udGV4dCB0aGF0IG11c3QgcHJvdmlkZSBTcHJpbmcgYmVhbnMgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBwcm9wZXJ0eSBvciByZWZlcmVuY2UsIGFzIGRlcml2ZWQKKyAqIGZyb20gdGhlIFNDQSBjb21wb3NpdGUgaW4gd2hpY2ggdGhlIFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0IGlzIGFuIGltcGxlbWVudGF0aW9uLgorICoKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgU0NBUGFyZW50QXBwbGljYXRpb25Db250ZXh0IGltcGxlbWVudHMgQXBwbGljYXRpb25Db250ZXh0IHsKKworICAgIC8vIFRoZSBTcHJpbmcgaW1wbGVtZW50YXRpb24gZm9yIHdoaWNoIHRoaXMgaXMgdGhlIHBhcmVudCBhcHBsaWNhdGlvbiBjb250ZXh0CisgICAgcHJpdmF0ZSBTcHJpbmdJbXBsZW1lbnRhdGlvblN0dWIgaW1wbGVtZW50YXRpb247CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBFTVBUWV9BUlJBWSA9IG5ldyBTdHJpbmdbMF07CisKKyAgICBwdWJsaWMgU0NBUGFyZW50QXBwbGljYXRpb25Db250ZXh0KFNwcmluZ0ltcGxlbWVudGF0aW9uU3R1YiBpbXBsZW1lbnRhdGlvbikgeworICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uID0gaW1wbGVtZW50YXRpb247CisgICAgfSAvLyBlbmQgY29uc3RydWN0b3IKKworICAgIHB1YmxpYyBPYmplY3QgZ2V0QmVhbihTdHJpbmcgbmFtZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGdldEJlYW4obmFtZSwgKENsYXNzKW51bGwpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEJlYW4gZm9yIGEgcmVmZXJlbmNlIG9yIGZvciBhIHByb3BlcnR5LgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgQmVhbiByZXF1aXJlZAorICAgICAqIEBwYXJhbSByZXF1aXJlZFR5cGUgLSB0aGUgcmVxdWlyZWQgdHlwZSBvZiB0aGUgQmVhbiAoZWl0aGVyIGEgSmF2YSBjbGFzcyBvciBhIEphdmEgaW50ZXJmYWNlKQorICAgICAqIEByZXR1cm4gT2JqZWN0IC0gYSBCZWFuIHdoaWNoIG1hdGNoZXMgdGhlIHJlcXVlc3RlZCBiZWFuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBuYW1lLCBDbGFzcyByZXF1aXJlZFR5cGUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgICAgIE9iamVjdCBiZWFuID0gaW1wbGVtZW50YXRpb24uZ2V0QmVhbihuYW1lLCByZXF1aXJlZFR5cGUpOworICAgICAgICBpZiAoYmVhbiA9PSBudWxsICYmIGdldFBhcmVudCgpICE9IG51bGwpIHsKKyAgICAgICAgICAgIGJlYW4gPSBnZXRQYXJlbnQoKS5nZXRCZWFuKG5hbWUsIHJlcXVpcmVkVHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJlYW4gPT0gbnVsbCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IE5vU3VjaEJlYW5EZWZpbml0aW9uRXhjZXB0aW9uKCJVbmFibGUgdG8gZmluZCBCZWFuIHdpdGggbmFtZSAiICsgbmFtZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gYmVhbjsKKyAgICAgICAgfQorICAgIH0gLy8gZW5kIG1ldGhvZCBnZXRCZWFuKCBTdHJpbmcsIENsYXNzICkKKworICAgIHB1YmxpYyBPYmplY3QgZ2V0QmVhbihTdHJpbmcgbmFtZSwgT2JqZWN0W10gYXJncykgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGdldEJlYW4obmFtZSwgKChDbGFzcyludWxsKSk7CisgICAgfQorCisgICAgcHVibGljIDxUPiBUIGdldEJlYW4oQ2xhc3M8VD4gY2xhenopIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBjbGF6ei5jYXN0KGdldEJlYW4oY2xhenouZ2V0TmFtZSgpLCBjbGF6eikpOworICAgIH0KKworICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBPYmplY3Q+IGdldEJlYW5zV2l0aEFubm90YXRpb24oQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IGNsYXp6KSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgPEEgZXh0ZW5kcyBBbm5vdGF0aW9uPiBBIGZpbmRBbm5vdGF0aW9uT25CZWFuKFN0cmluZyBhcmcwLCBDbGFzczxBPiBjbGF6eikgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBjb250YWluc0JlYW4oU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgLy8gVE9ETworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNTaW5nbGV0b24oU3RyaW5nIG5hbWUpIHRocm93cyBOb1N1Y2hCZWFuRGVmaW5pdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIC8vIFRPRE8KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGlzVHlwZU1hdGNoKFN0cmluZyBuYW1lLCBDbGFzcyB0YXJnZXRUeXBlKSB0aHJvd3MgTm9TdWNoQmVhbkRlZmluaXRpb25FeGNlcHRpb24geworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2xhc3MgZ2V0VHlwZShTdHJpbmcgbmFtZSkgdGhyb3dzIE5vU3VjaEJlYW5EZWZpbml0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZ1tdIGdldEFsaWFzZXMoU3RyaW5nIG5hbWUpIHRocm93cyBOb1N1Y2hCZWFuRGVmaW5pdGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBFTVBUWV9BUlJBWTsKKyAgICB9CisKKyAgICBwdWJsaWMgQXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkgZ2V0QXV0b3dpcmVDYXBhYmxlQmVhbkZhY3RvcnkoKSB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRJZCgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkgeworICAgICAgICByZXR1cm4gaW1wbGVtZW50YXRpb24uZ2V0VVJJKCk7CisgICAgfQorCisgICAgcHVibGljIGxvbmcgZ2V0U3RhcnR1cERhdGUoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zQmVhbkRlZmluaXRpb24oU3RyaW5nIGJlYW5OYW1lKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEJlYW5EZWZpbml0aW9uQ291bnQoKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRCZWFuRGVmaW5pdGlvbk5hbWVzKCkgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nW10gZ2V0QmVhbk5hbWVzRm9yVHlwZShDbGFzcyB0eXBlKSB7CisgICAgICAgIHJldHVybiBuZXcgU3RyaW5nWzBdOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmdbXSBnZXRCZWFuTmFtZXNGb3JUeXBlKENsYXNzIHR5cGUsIGJvb2xlYW4gaW5jbHVkZVByb3RvdHlwZXMsIGJvb2xlYW4gaW5jbHVkZUZhY3RvcnlCZWFucykgeworICAgICAgICByZXR1cm4gbmV3IFN0cmluZ1swXTsKKyAgICB9CisKKyAgICBwdWJsaWMgTWFwIGdldEJlYW5zT2ZUeXBlKENsYXNzIHR5cGUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBNYXAgZ2V0QmVhbnNPZlR5cGUoQ2xhc3MgdHlwZSwgYm9vbGVhbiBpbmNsdWRlUHJvdG90eXBlcywgYm9vbGVhbiBpbmNsdWRlRmFjdG9yeUJlYW5zKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc1Byb3RvdHlwZShTdHJpbmcgdGhlU3RyaW5nKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgQmVhbkZhY3RvcnkgZ2V0UGFyZW50QmVhbkZhY3RvcnkoKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGNvbnRhaW5zTG9jYWxCZWFuKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIGNvZGUsIE9iamVjdFtdIGFyZ3MsIFN0cmluZyBkZWZhdWx0TWVzc2FnZSwgTG9jYWxlIGxvY2FsZSkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoU3RyaW5nIGNvZGUsIE9iamVjdFtdIGFyZ3MsIExvY2FsZSBsb2NhbGUpIHRocm93cyBOb1N1Y2hNZXNzYWdlRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRNZXNzYWdlKE1lc3NhZ2VTb3VyY2VSZXNvbHZhYmxlIHJlc29sdmFibGUsIExvY2FsZSBsb2NhbGUpIHRocm93cyBOb1N1Y2hNZXNzYWdlRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgcHVibGlzaEV2ZW50KEFwcGxpY2F0aW9uRXZlbnQgZXZlbnQpIHsKKworICAgIH0KKworICAgIHB1YmxpYyBSZXNvdXJjZVtdIGdldFJlc291cmNlcyhTdHJpbmcgbG9jYXRpb25QYXR0ZXJuKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICByZXR1cm4gbmV3IFJlc291cmNlWzBdOworICAgIH0KKworICAgIHB1YmxpYyBSZXNvdXJjZSBnZXRSZXNvdXJjZShTdHJpbmcgbG9jYXRpb24pIHsKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCisgICAgcHVibGljIENsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKCkgeworICAgICAgICAvLyBSRVZJRVc6IHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBmbGF3ZWQsIGJ1dCBpdCdzIG5vdCBjbGVhciBob3cgdGhlIFNDQSBydW50aW1lJ3MKKyAgICAgICAgLy8gcmVzb3VyY2UgbG9hZGluZyBtZWNoYW5pc20gaXMgZXhwb3NlZCByaWdodCBub3cuCisgICAgICAgIHJldHVybiB0aGlzLmdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgQXBwbGljYXRpb25Db250ZXh0IGdldFBhcmVudCgpIHsKKyAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uLmdldFBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC90aWUvU3ByaW5nQ29udGV4dFRpZS5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC90aWUvU3ByaW5nQ29udGV4dFRpZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiY2RjODEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9jb250ZXh0L3RpZS9TcHJpbmdDb250ZXh0VGllLmphdmEKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC50aWU7CisKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IudGllLkNvbXBvbmVudE5hbWVBbm5vdGF0aW9uUHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb2Nlc3Nvci50aWUuQ29tcG9uZW50U3R1YjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IudGllLkNvbnN0cnVjdG9yQW5ub3RhdGlvblByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IudGllLkluaXREZXN0cm95QW5ub3RhdGlvblByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IudGllLlByb3BlcnR5QW5ub3RhdGlvblByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IudGllLlByb3BlcnR5VmFsdWVTdHViOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb2Nlc3Nvci50aWUuUmVmZXJlbmNlQW5ub3RhdGlvblByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5Db25maWd1cmFibGVMaXN0YWJsZUJlYW5GYWN0b3J5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWwuWG1sQmVhbkRlZmluaXRpb25SZWFkZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LkFwcGxpY2F0aW9uQ29udGV4dDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BYnN0cmFjdEFwcGxpY2F0aW9uQ29udGV4dDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5HZW5lcmljQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29yZS5pby5VcmxSZXNvdXJjZTsKKworLyoqCisgKiBUaGlzIGlzIHRoZSBydW50aW1lIHNpZGUgdGllIGZvciB0aGUgY29ycmVzcG9uZGluZyB0dXNjYW55IHNpZGUgc3R1YiBjbGFzcy4KKyAqIEl0IGVuYWJsZXMgdGhlIFR1c2NhbnkgY29kZSB0byBpbnZva2UgbWV0aG9kcyBvbiBhIFNwcmluZyBjb250ZXh0IHdpdGhvdXQKKyAqIG5lZWRpbmcgdG8ga25vdyBhYm91dCBhbnkgU3ByaW5nIGNsYXNzZXMuIFNlZSB0aGUgU3ByaW5nQ29udGV4dFN0dWIgY2xhc3MKKyAqIGluIHRoZSBpbXBsZW1lbnRhdGlvbi1zcHJpbmcgbW9kdWxlIGZvciB3aGF0IHRoZSBzdHViIGRvZXMuIAorICovCitwdWJsaWMgY2xhc3MgU3ByaW5nQ29udGV4dFRpZSB7CisKKyAgICBwcml2YXRlIEFic3RyYWN0QXBwbGljYXRpb25Db250ZXh0IHNwcmluZ0NvbnRleHQ7CisgICAgcHJpdmF0ZSBTcHJpbmdJbXBsZW1lbnRhdGlvblN0dWIgaW1wbGVtZW50YXRpb247CisKKyAgICBwdWJsaWMgU3ByaW5nQ29udGV4dFRpZShTcHJpbmdJbXBsZW1lbnRhdGlvblN0dWIgaW1wbGVtZW50YXRpb24sIExpc3Q8VVJMPiByZXNvdXJjZSkgeworICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uID0gaW1wbGVtZW50YXRpb247CisgICAgICAgIFNDQVBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCBzY2FQYXJlbnRDb250ZXh0ID0gbmV3IFNDQVBhcmVudEFwcGxpY2F0aW9uQ29udGV4dChpbXBsZW1lbnRhdGlvbik7CisgICAgICAgIHNwcmluZ0NvbnRleHQgPSBjcmVhdGVBcHBsaWNhdGlvbkNvbnRleHQoc2NhUGFyZW50Q29udGV4dCwgcmVzb3VyY2UpOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgQXBwbGljYXRpb25Db250ZXh0IGdldEFwcGxpY2F0aW9uQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIHNwcmluZ0NvbnRleHQ7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RhcnQoKSB7CisgICAgICAgIC8vIERvIHJlZnJlc2ggaGVyZSB0byBlbnN1cmUgdGhhdCBTcHJpbmcgQmVhbnMgYXJlIG5vdCB0b3VjaGVkIGJlZm9yZSB0aGUgU0NBIGNvbmZpZyBwcm9jZXNzIGlzIGNvbXBsZXRlLi4uCisgICAgICAgIHNwcmluZ0NvbnRleHQucmVmcmVzaCgpOworICAgICAgICBzcHJpbmdDb250ZXh0LnN0YXJ0KCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgY2xvc2UoKSB7CisgICAgICAgIHNwcmluZ0NvbnRleHQuY2xvc2UoKTsKKyAgICAgICAgaWYgKHNwcmluZ0NvbnRleHQgaW5zdGFuY2VvZiBHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KSB7CisgICAgICAgICAgICBzcHJpbmdDb250ZXh0LnN0b3AoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEluY2x1ZGUgQmVhblBvc3RQcm9jZXNzb3IgdG8gZGVhbCB3aXRoIFNDQSBBbm5vdGF0aW9ucyBpbiBTcHJpbmcgQmVhbgorICAgICAqLworICAgIHByaXZhdGUgQWJzdHJhY3RBcHBsaWNhdGlvbkNvbnRleHQgY3JlYXRlQXBwbGljYXRpb25Db250ZXh0KFNDQVBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCBzY2FQYXJlbnRDb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8VVJMPiByZXNvdXJjZXMpIHsKKworICAgICAgICBHZW5lcmljQXBwbGljYXRpb25Db250ZXh0IGFwcEN0eCA9CisgICAgICAgICAgICBuZXcgU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dChzY2FQYXJlbnRDb250ZXh0LCBpbXBsZW1lbnRhdGlvbi5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgWG1sQmVhbkRlZmluaXRpb25SZWFkZXIgeG1sUmVhZGVyID0gbmV3IFhtbEJlYW5EZWZpbml0aW9uUmVhZGVyKGFwcEN0eCk7CisgICAgICAgIAorICAgICAgICAvLyBSRVZJRVc6IFtyZmVuZ10gSG93IGRvIHdlIGNvbnRyb2wgdGhlIHNjaGVtYSB2YWxpZGF0aW9uIAorICAgICAgICB4bWxSZWFkZXIuc2V0VmFsaWRhdGluZyhmYWxzZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKFVSTCByZXNvdXJjZSA6IHJlc291cmNlcykgeworICAgICAgICAgICAgeG1sUmVhZGVyLmxvYWRCZWFuRGVmaW5pdGlvbnMobmV3IFVybFJlc291cmNlKHJlc291cmNlKSk7CisgICAgICAgIH0KKyAgICAgICAgeG1sUmVhZGVyLnNldEJlYW5DbGFzc0xvYWRlcihpbXBsZW1lbnRhdGlvbi5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgaW5jbHVkZUFubm90YXRpb25Qcm9jZXNzb3JzKGFwcEN0eC5nZXRCZWFuRmFjdG9yeSgpKTsKKyAgICAgICAgcmV0dXJuIGFwcEN0eDsKKworICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgZ2V0QmVhbihTdHJpbmcgaWQpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiBzcHJpbmdDb250ZXh0LmdldEJlYW4oaWQpOworICAgIH0KKworICAgIC8qKgorICAgICAqIEluY2x1ZGUgQmVhblBvc3RQcm9jZXNzb3IgdG8gZGVhbCB3aXRoIFNDQSBBbm5vdGF0aW9ucyBpbiBTcHJpbmcgQmVhbgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBpbmNsdWRlQW5ub3RhdGlvblByb2Nlc3NvcnMoQ29uZmlndXJhYmxlTGlzdGFibGVCZWFuRmFjdG9yeSBiZWFuRmFjdG9yeSkgeworCisgICAgICAgIC8vIFByb2Nlc3NvciB0byBkZWFsIHdpdGggQEluaXQgYW5kIEBEZXN0cm95IFNDQSBBbm5vdGF0aW9ucworICAgICAgICBCZWFuUG9zdFByb2Nlc3NvciBpbml0RGVzdHJveVByb2Nlc3NvciA9IG5ldyBJbml0RGVzdHJveUFubm90YXRpb25Qcm9jZXNzb3IoKTsKKyAgICAgICAgYmVhbkZhY3RvcnkuYWRkQmVhblBvc3RQcm9jZXNzb3IoaW5pdERlc3Ryb3lQcm9jZXNzb3IpOworCisgICAgICAgIC8vIFByb2Nlc3NvciB0byBkZWFsIHdpdGggQFJlZmVyZW5jZSBTQ0EgQW5ub3RhdGlvbnMKKyAgICAgICAgQ29tcG9uZW50U3R1YiBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50U3R1YihpbXBsZW1lbnRhdGlvbi5nZXRDb21wb25lbnRUaWUoKSk7CisgICAgICAgIEJlYW5Qb3N0UHJvY2Vzc29yIHJlZmVyZW5jZVByb2Nlc3NvciA9IG5ldyBSZWZlcmVuY2VBbm5vdGF0aW9uUHJvY2Vzc29yKGNvbXBvbmVudCk7CisgICAgICAgIGJlYW5GYWN0b3J5LmFkZEJlYW5Qb3N0UHJvY2Vzc29yKHJlZmVyZW5jZVByb2Nlc3Nvcik7CisKKyAgICAgICAgLy8gUHJvY2Vzc29yIHRvIGRlYWwgd2l0aCBAUHJvcGVydHkgU0NBIEFubm90YXRpb25zCisgICAgICAgIFByb3BlcnR5VmFsdWVTdHViIHB2cyA9IG5ldyBQcm9wZXJ0eVZhbHVlU3R1YihpbXBsZW1lbnRhdGlvbi5nZXRQcm9wZXJ0eVZhbHVlVGllKCkpOworICAgICAgICBCZWFuUG9zdFByb2Nlc3NvciBwcm9wZXJ0eVByb2Nlc3NvciA9IG5ldyBQcm9wZXJ0eUFubm90YXRpb25Qcm9jZXNzb3IocHZzKTsKKyAgICAgICAgYmVhbkZhY3RvcnkuYWRkQmVhblBvc3RQcm9jZXNzb3IocHJvcGVydHlQcm9jZXNzb3IpOworCisgICAgICAgIC8vIFByb2Nlc3NvciB0byBkZWFsIHdpdGggQENvbXBvbmVudE5hbWUgU0NBIEFubm90YXRpb25zCisgICAgICAgIEJlYW5Qb3N0UHJvY2Vzc29yIGNvbXBvbmVudE5hbWVQcm9jZXNzb3IgPQorICAgICAgICAgICAgbmV3IENvbXBvbmVudE5hbWVBbm5vdGF0aW9uUHJvY2Vzc29yKGltcGxlbWVudGF0aW9uLmdldENvbXBvbmVudE5hbWUoKSk7CisgICAgICAgIGJlYW5GYWN0b3J5LmFkZEJlYW5Qb3N0UHJvY2Vzc29yKGNvbXBvbmVudE5hbWVQcm9jZXNzb3IpOworCisgICAgICAgIC8vIFByb2Nlc3NvciB0byBkZWFsIHdpdGggQENvbnN0cnVjdG9yIFNDQSBBbm5vdGF0aW9ucworICAgICAgICBCZWFuUG9zdFByb2Nlc3NvciBjb25zdHJ1Y3RvclByb2Nlc3NvciA9IG5ldyBDb25zdHJ1Y3RvckFubm90YXRpb25Qcm9jZXNzb3IoKTsKKyAgICAgICAgYmVhbkZhY3RvcnkuYWRkQmVhblBvc3RQcm9jZXNzb3IoY29uc3RydWN0b3JQcm9jZXNzb3IpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC90aWUvU3ByaW5nSW1wbGVtZW50YXRpb25TdHViLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9jb250ZXh0L3RpZS9TcHJpbmdJbXBsZW1lbnRhdGlvblN0dWIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2U1MmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvY29udGV4dC90aWUvU3ByaW5nSW1wbGVtZW50YXRpb25TdHViLmphdmEKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC50aWU7CisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CisKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkNvbnRleHQ7CisKKy8qKgorICogVGhpcyBpcyB0aGUgcnVudGltZSBzaWRlIHN0dWIgZm9yIHRoZSBjb3JyZXNwb25kaW5nIFR1c2Nhbnktc2lkZSBzdHViIGNsYXNzLgorICogSXQgZW5hYmxlcyB0aGUgU3ByaW5nIGNvZGUgaW4gdGhlIHJ1bnRpbWUgbW9kdWxlIHRvIGludm9rZSBtZXRob2RzIG9uIGEKKyAqIFR1c2NhbnkgU3ByaW5nSW1wbGVtZW50YXRpb24gd2l0aG91dCB0aGUgU3ByaW5nIHJ1bnRpbWUgbW9kdWxlCisgKiBuZWVkaW5nIHRvIGtub3cgYWJvdXQgYW55IFR1c2NhbnkgY2xhc3Nlcy4gU2VlIHRoZSBTcHJpbmdJbXBsZW1lbnRhdGlvblRpZSBjbGFzcworICogaW4gdGhlIGltcGxlbWVudGF0aW9uLXNwcmluZyBtb2R1bGUgZm9yIHdoYXQgdGhlIHRpZSBkb2VzLiAKKyAqLworcHVibGljIGNsYXNzIFNwcmluZ0ltcGxlbWVudGF0aW9uU3R1YiB7CisKKyAgICBPYmplY3QgdGllOworICAgIE1ldGhvZCBnZXRVUkk7CisgICAgTWV0aG9kIGdldEJlYW47CisgICAgTWV0aG9kIGdldENvbXBvbmVudE5hbWU7CisgICAgTWV0aG9kIGdldENvbXBvbmVudFRpZTsKKyAgICBNZXRob2QgZ2V0UHJvcGVydHlWYWx1ZVRpZTsKKyAgICBNZXRob2QgZ2V0Q2xhc3NMb2FkZXI7CisgICAgTWV0aG9kIGdldFBhcmVudEFwcGxpY2F0aW9uQ29udGV4dDsKKworICAgIHB1YmxpYyBTcHJpbmdJbXBsZW1lbnRhdGlvblN0dWIoT2JqZWN0IHRpZSkgeworICAgICAgICB0aGlzLnRpZSA9IHRpZTsKKyAgICAgICAgQ2xhc3M8Pz4gdGllQ2xhc3MgPSB0aWUuZ2V0Q2xhc3MoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGdldFVSSSA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0VVJJIiwgbmV3IENsYXNzPD8+W10ge30pOworICAgICAgICAgICAgZ2V0QmVhbiA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0QmVhbiIsIG5ldyBDbGFzczw/PltdIHtTdHJpbmcuY2xhc3MsIENsYXNzLmNsYXNzfSk7CisgICAgICAgICAgICBnZXRDb21wb25lbnROYW1lID0gdGllQ2xhc3MuZ2V0TWV0aG9kKCJnZXRDb21wb25lbnROYW1lIik7CisgICAgICAgICAgICBnZXRDb21wb25lbnRUaWUgPSB0aWVDbGFzcy5nZXRNZXRob2QoImdldENvbXBvbmVudFRpZSIpOworICAgICAgICAgICAgZ2V0UHJvcGVydHlWYWx1ZVRpZSA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0UHJvcGVydHlWYWx1ZVRpZSIpOworICAgICAgICAgICAgZ2V0Q2xhc3NMb2FkZXIgPSB0aWVDbGFzcy5nZXRNZXRob2QoImdldENsYXNzTG9hZGVyIik7CisgICAgICAgICAgICBnZXRQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQgPSB0aWVDbGFzcy5nZXRNZXRob2QoImdldFBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCIpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFVSSSgpIHsKKyAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgcmV0dXJuIChTdHJpbmcpZ2V0VVJJLmludm9rZSh0aWUpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEdldCBhIEJlYW4gZm9yIGEgcmVmZXJlbmNlIG9yIGZvciBhIHByb3BlcnR5LgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgQmVhbiByZXF1aXJlZAorICAgICAqIEBwYXJhbSByZXF1aXJlZFR5cGUgLSB0aGUgcmVxdWlyZWQgdHlwZSBvZiB0aGUgQmVhbiAoZWl0aGVyIGEgSmF2YSBjbGFzcyBvciBhIEphdmEgaW50ZXJmYWNlKQorICAgICAqIEByZXR1cm4gT2JqZWN0IC0gYSBCZWFuIHdoaWNoIG1hdGNoZXMgdGhlIHJlcXVlc3RlZCBiZWFuCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBuYW1lLCBDbGFzczw/PiByZXF1aXJlZFR5cGUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisKKyAgICAgICAgICAgIE9iamVjdCBiZWFuID0gZ2V0QmVhbi5pbnZva2UodGllLCBuZXcgT2JqZWN0W10ge25hbWUsIHJlcXVpcmVkVHlwZX0pOworLy8gICAgICAgICAgICBpZiAoYmVhbiA9PSBudWxsKSB7CisvLyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9TdWNoQmVhbkRlZmluaXRpb25FeGNlcHRpb24oIlVuYWJsZSB0byBmaW5kIEJlYW4gd2l0aCBuYW1lICIgKyBuYW1lKTsKKy8vICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGJlYW47CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRDb21wb25lbnROYW1lKCkgeworICAgICAgICB0cnkgeworCisgICAgICAgICAgICByZXR1cm4gKFN0cmluZylnZXRDb21wb25lbnROYW1lLmludm9rZSh0aWUpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgZ2V0Q29tcG9uZW50VGllKCkgeworICAgICAgICB0cnkgeworCisgICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50VGllLmludm9rZSh0aWUpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHlWYWx1ZVRpZSgpIHsKKyAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgcmV0dXJuIGdldFByb3BlcnR5VmFsdWVUaWUuaW52b2tlKHRpZSk7CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIENsYXNzTG9hZGVyIGdldENsYXNzTG9hZGVyKCkgeworICAgICAgICB0cnkgeworCisgICAgICAgICAgICByZXR1cm4gKENsYXNzTG9hZGVyKWdldENsYXNzTG9hZGVyLmludm9rZSh0aWUpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBHZXQgdGhlIHBhcmVudCBTcHJpbmcgYXBwbGljYXRpb24gY29udGV4dCBzZXQgYnkgdGhlIFR1c2NhbnkgcnVudGltZQorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwdWJsaWMgQXBwbGljYXRpb25Db250ZXh0IGdldFBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCgpIHsKKyAgICAgICAgdHJ5IHsKKworICAgICAgICAgICAgcmV0dXJuIChBcHBsaWNhdGlvbkNvbnRleHQpZ2V0UGFyZW50QXBwbGljYXRpb25Db250ZXh0Lmludm9rZSh0aWUpOworCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ0JlYW5FbGVtZW50LmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9lbGVtZW50cy90aWUvU3ByaW5nQmVhbkVsZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjBlMDAxCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ0JlYW5FbGVtZW50LmphdmEKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmVsZW1lbnRzLnRpZTsKKworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogUmVwcmVzZW50cyBhIDxiZWFuPiBlbGVtZW50IGluIGEgU3ByaW5nIGFwcGxpY2F0aW9uLWNvbnRleHQKKyAqIC0gdGhpcyBoYXMgaWQgYW5kIGNsYXNzTmFtZSBhdHRyaWJ1dGVzCisgKiAtIHBsdXMgemVybyBvciBtb3JlIHByb3BlcnR5IGVsZW1lbnRzIGFzIGNoaWxkcmVuCisgKgorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTcHJpbmdCZWFuRWxlbWVudCB7CisKKyAgICBwcml2YXRlIFN0cmluZyBpZDsKKyAgICBwcml2YXRlIFN0cmluZyBjbGFzc05hbWUgPSBudWxsOworICAgIHByaXZhdGUgYm9vbGVhbiBpbm5lckJlYW4gPSBmYWxzZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gYWJzdHJhY3RCZWFuID0gZmFsc2U7CisgICAgcHJpdmF0ZSBib29sZWFuIHBhcmVudEF0dHJpYnV0ZSA9IGZhbHNlOworICAgIHByaXZhdGUgYm9vbGVhbiBmYWN0b3J5QmVhbkF0dHJpYnV0ZSA9IGZhbHNlOworICAgIHByaXZhdGUgYm9vbGVhbiBmYWN0b3J5TWV0aG9kQXR0cmlidXRlID0gZmFsc2U7CisKKyAgICBwcml2YXRlIExpc3Q8U3ByaW5nUHJvcGVydHlFbGVtZW50PiBwcm9wZXJ0aWVzID0gbmV3IEFycmF5TGlzdDxTcHJpbmdQcm9wZXJ0eUVsZW1lbnQ+KCk7CisgICAgcHJpdmF0ZSBMaXN0PFNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudD4gY29uc3RydWN0b3JhcmdzID0gbmV3IEFycmF5TGlzdDxTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQ+KCk7CisKKyAgICBwdWJsaWMgU3ByaW5nQmVhbkVsZW1lbnQoU3RyaW5nIGlkLCBTdHJpbmcgY2xhc3NOYW1lKSB7CisgICAgICAgIHRoaXMuaWQgPSBpZDsKKyAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRDbGFzc05hbWUoKSB7CisgICAgICAgIHJldHVybiBjbGFzc05hbWU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRJZCgpIHsKKyAgICAgICAgcmV0dXJuIGlkOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkgeworICAgICAgICB0aGlzLmlkID0gaWQ7CisgICAgfQorCisgICAgcHVibGljIExpc3Q8U3ByaW5nUHJvcGVydHlFbGVtZW50PiBnZXRQcm9wZXJ0aWVzKCkgeworICAgICAgICByZXR1cm4gcHJvcGVydGllczsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBhZGRQcm9wZXJ0eShTcHJpbmdQcm9wZXJ0eUVsZW1lbnQgcHJvcGVydHkpIHsKKyAgICAgICAgcHJvcGVydGllcy5hZGQocHJvcGVydHkpOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudD4gZ2V0Q3VzdHJ1Y3RvckFyZ3MoKSB7CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcmFyZ3M7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkQ3VzdHJ1Y3RvckFyZ3MoU3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50IGFyZ3MpIHsKKyAgICAgICAgY29uc3RydWN0b3JhcmdzLmFkZChhcmdzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBpc0lubmVyQmVhbigpIHsKKyAgICAgICAgcmV0dXJuIGlubmVyQmVhbjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJbm5lckJlYW4oYm9vbGVhbiBpbm5lckJlYW4pIHsKKyAgICAgICAgdGhpcy5pbm5lckJlYW4gPSBpbm5lckJlYW47CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaXNBYnN0cmFjdEJlYW4oKSB7CisgICAgICAgIHJldHVybiBhYnN0cmFjdEJlYW47CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0QWJzdHJhY3RCZWFuKGJvb2xlYW4gYWJzdHJhY3RCZWFuKSB7CisgICAgICAgIHRoaXMuYWJzdHJhY3RCZWFuID0gYWJzdHJhY3RCZWFuOworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIGhhc1BhcmVudEF0dHJpYnV0ZSgpIHsKKyAgICAgICAgcmV0dXJuIHBhcmVudEF0dHJpYnV0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRBdHRyaWJ1dGUoYm9vbGVhbiBwYXJlbnRBdHRyaWJ1dGUpIHsKKyAgICAgICAgdGhpcy5wYXJlbnRBdHRyaWJ1dGUgPSBwYXJlbnRBdHRyaWJ1dGU7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gaGFzRmFjdG9yeUJlYW5BdHRyaWJ1dGUoKSB7CisgICAgICAgIHJldHVybiBmYWN0b3J5QmVhbkF0dHJpYnV0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRGYWN0b3J5QmVhbkF0dHJpYnV0ZShib29sZWFuIGZhY3RvcnlCZWFuQXR0cmlidXRlKSB7CisgICAgICAgIHRoaXMuZmFjdG9yeUJlYW5BdHRyaWJ1dGUgPSBmYWN0b3J5QmVhbkF0dHJpYnV0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBoYXNGYWN0b3J5TWV0aG9kQXR0cmlidXRlKCkgeworICAgICAgICByZXR1cm4gZmFjdG9yeU1ldGhvZEF0dHJpYnV0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRGYWN0b3J5TWV0aG9kQXR0cmlidXRlKGJvb2xlYW4gZmFjdG9yeU1ldGhvZEF0dHJpYnV0ZSkgeworICAgICAgICB0aGlzLmZhY3RvcnlNZXRob2RBdHRyaWJ1dGUgPSBmYWN0b3J5TWV0aG9kQXR0cmlidXRlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJTcHJpbmdCZWFuRWxlbWVudCBbaWQ9IikuYXBwZW5kKGlkKS5hcHBlbmQoIiwgY2xhc3NOYW1lPSIpLmFwcGVuZChjbGFzc05hbWUpCisgICAgICAgICAgICAuYXBwZW5kKCIsIGlubmVyQmVhbj0iKS5hcHBlbmQoaW5uZXJCZWFuKS5hcHBlbmQoIiwgYWJzdHJhY3RCZWFuPSIpLmFwcGVuZChhYnN0cmFjdEJlYW4pCisgICAgICAgICAgICAuYXBwZW5kKCIsIHBhcmVudEF0dHJpYnV0ZT0iKS5hcHBlbmQocGFyZW50QXR0cmlidXRlKS5hcHBlbmQoIiwgZmFjdG9yeUJlYW5BdHRyaWJ1dGU9IikKKyAgICAgICAgICAgIC5hcHBlbmQoZmFjdG9yeUJlYW5BdHRyaWJ1dGUpLmFwcGVuZCgiLCBmYWN0b3J5TWV0aG9kQXR0cmlidXRlPSIpLmFwcGVuZChmYWN0b3J5TWV0aG9kQXR0cmlidXRlKQorICAgICAgICAgICAgLmFwcGVuZCgiLCBwcm9wZXJ0aWVzPSIpLmFwcGVuZChwcm9wZXJ0aWVzKS5hcHBlbmQoIiwgY29uc3RydWN0b3JhcmdzPSIpLmFwcGVuZChjb25zdHJ1Y3RvcmFyZ3MpCisgICAgICAgICAgICAuYXBwZW5kKCJdIik7CisgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCit9IC8vIGVuZCBjbGFzcyBTcHJpbmdCZWFuRWxlbWVudApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzYTk3MmIKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9lbGVtZW50cy90aWUvU3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50LmphdmEKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuZWxlbWVudHMudGllOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBSZXByZXNlbnRzIGEgPGNvbnN0cnVjdG9yLWFyZz4gZWxlbWVudCBpbiBhIFNwcmluZyBhcHBsaWNhdGlvbi1jb250ZXh0CisgKiAtIHRoaXMgaGFzIHJlZiBhdHRyaWJ1dGUKKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgdHlwZTsKKyAgICBwcml2YXRlIGludCBhdXRvSW5kZXggPSAtMTsKKyAgICBwcml2YXRlIGludCBpbmRleCA9IC0xOworICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHJlZnMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKyAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKKworICAgIHB1YmxpYyBTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQoU3RyaW5nIHR5cGUpIHsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnR5cGU7CisgICAgfQorCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRSZWZzKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yZWZzOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIGFkZFJlZihTdHJpbmcgcmVmKSB7CisgICAgICAgIHRoaXMucmVmcy5hZGQocmVmKTsKKyAgICB9CisKKyAgICBwdWJsaWMgaW50IGdldEluZGV4KCkgeworICAgICAgICByZXR1cm4gdGhpcy5pbmRleDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRJbmRleChpbnQgaW5kZXgpIHsKKyAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4OworICAgIH0KKworICAgIHB1YmxpYyBpbnQgZ2V0QXV0b0luZGV4KCkgeworICAgICAgICByZXR1cm4gdGhpcy5hdXRvSW5kZXg7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0QXV0b0luZGV4KGludCBpbmRleCkgeworICAgICAgICB0aGlzLmF1dG9JbmRleCA9IGluZGV4OworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0VmFsdWVzKCkgeworICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkVmFsdWUoU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIHRoaXMudmFsdWVzLmFkZCh2YWx1ZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ0VsZW1lbnRUaWUuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2VsZW1lbnRzL3RpZS9TcHJpbmdFbGVtZW50VGllLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4OGU1ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2VsZW1lbnRzL3RpZS9TcHJpbmdFbGVtZW50VGllLmphdmEKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5lbGVtZW50cy50aWU7CisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5QYXJhbWV0ZXJpemVkVHlwZTsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5UeXBlOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKKy8qKgorICogQSBoYWNraW5nIHV0aWxpdHkgdG8gY29weSBiZWFucyBmaWVsZCBieSBmaWVsZCBiZXR3ZWVuIHR3byBjbGFzcyBsb2FkZXJzCisgKi8KK3B1YmxpYyBjbGFzcyBTcHJpbmdFbGVtZW50VGllIHsKKyAgICBwdWJsaWMgc3RhdGljIDxUPiBUIGNvcHkoT2JqZWN0IHNvdXJjZSwgQ2xhc3M8VD4gY2xzLCBUeXBlIGdlbmVyaWNUeXBlKSB7CisgICAgICAgIGlmIChzb3VyY2UgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNscy5pc1ByaW1pdGl2ZSgpKSB7CisgICAgICAgICAgICByZXR1cm4gKFQpc291cmNlOworICAgICAgICB9CisgICAgICAgIGlmIChDb2xsZWN0aW9uLmNsYXNzLmlzQXNzaWduYWJsZUZyb20oY2xzKSkgeworICAgICAgICAgICAgUGFyYW1ldGVyaXplZFR5cGUgcFR5cGUgPSAoUGFyYW1ldGVyaXplZFR5cGUpZ2VuZXJpY1R5cGU7CisgICAgICAgICAgICBUeXBlIGl0ZW1UeXBlID0gcFR5cGUuZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpWzBdOworICAgICAgICAgICAgQ29sbGVjdGlvbiBjb2wgPSAoQ29sbGVjdGlvbilzb3VyY2U7CisgICAgICAgICAgICBMaXN0IHRhcmdldCA9IG5ldyBBcnJheUxpc3QoKTsKKyAgICAgICAgICAgIGZvciAoT2JqZWN0IGl0ZW0gOiBjb2wpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXQuYWRkKGNvcHkoaXRlbSwgKENsYXNzPD8+KWl0ZW1UeXBlLCBpdGVtVHlwZSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIChUKXRhcmdldDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2xzLmlzSW5zdGFuY2Uoc291cmNlKSkgeworICAgICAgICAgICAgcmV0dXJuIGNscy5jYXN0KHNvdXJjZSk7CisgICAgICAgIH0KKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIENsYXNzPD8+IHNvdXJjZUNsYXNzID0gc291cmNlLmdldENsYXNzKCk7CisgICAgICAgICAgICBUIHRhcmdldCA9IGNscy5uZXdJbnN0YW5jZSgpOworICAgICAgICAgICAgZm9yIChGaWVsZCBzb3VyY2VGaWVsZCA6IHNvdXJjZUNsYXNzLmdldERlY2xhcmVkRmllbGRzKCkpIHsKKyAgICAgICAgICAgICAgICBzb3VyY2VGaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOworICAgICAgICAgICAgICAgIEZpZWxkIHRhcmdldEZpZWxkID0gY2xzLmdldERlY2xhcmVkRmllbGQoc291cmNlRmllbGQuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICB0YXJnZXRGaWVsZC5zZXRBY2Nlc3NpYmxlKHRydWUpOworICAgICAgICAgICAgICAgIE9iamVjdCBzb3VyY2VGaWVsZFZhbHVlID0gc291cmNlRmllbGQuZ2V0KHNvdXJjZSk7CisgICAgICAgICAgICAgICAgT2JqZWN0IHRhcmdldEZpZWxkVmFsdWUgPSBjb3B5KHNvdXJjZUZpZWxkVmFsdWUsIHRhcmdldEZpZWxkLmdldFR5cGUoKSwgdGFyZ2V0RmllbGQuZ2V0R2VuZXJpY1R5cGUoKSk7CisgICAgICAgICAgICAgICAgdGFyZ2V0RmllbGQuc2V0KHRhcmdldCwgdGFyZ2V0RmllbGRWYWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gdGFyZ2V0OworICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ1Byb3BlcnR5RWxlbWVudC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ1Byb3BlcnR5RWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTFmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9lbGVtZW50cy90aWUvU3ByaW5nUHJvcGVydHlFbGVtZW50LmphdmEKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuZWxlbWVudHMudGllOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworLyoqCisgKiBSZXByZXNlbnRzIGEgPHByb3BlcnR5PiBlbGVtZW50IGluIGEgU3ByaW5nIGFwcGxpY2F0aW9uLWNvbnRleHQKKyAqIC0gdGhpcyBoYXMgbmFtZSBhbmQgcmVmIGF0dHJpYnV0ZXMKKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTcHJpbmdQcm9wZXJ0eUVsZW1lbnQgeworCisgICAgcHJpdmF0ZSBTdHJpbmcgbmFtZTsKKyAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiByZWZzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gdmFsdWVzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisKKyAgICBwdWJsaWMgU3ByaW5nUHJvcGVydHlFbGVtZW50KFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFJlZnMoKSB7CisgICAgICAgIHJldHVybiB0aGlzLnJlZnM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkUmVmKFN0cmluZyByZWYpIHsKKyAgICAgICAgdGhpcy5yZWZzLmFkZChyZWYpOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0VmFsdWVzKCkgeworICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgYWRkVmFsdWUoU3RyaW5nIHZhbHVlKSB7CisgICAgICAgIHRoaXMudmFsdWVzLmFkZCh2YWx1ZSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlNwcmluZ1Byb3BlcnR5RWxlbWVudCBbbmFtZT0iKS5hcHBlbmQobmFtZSkuYXBwZW5kKCIsIHJlZnM9IikuYXBwZW5kKHJlZnMpLmFwcGVuZCgiLCB2YWx1ZXM9IikKKyAgICAgICAgICAgIC5hcHBlbmQodmFsdWVzKS5hcHBlbmQoIl0iKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKK30gLy8gZW5kIGNsYXNzIFNwcmluZ1Byb3BlcnR5RWxlbWVudApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ1NDQVByb3BlcnR5RWxlbWVudC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ1NDQVByb3BlcnR5RWxlbWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmOTkwMWEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9lbGVtZW50cy90aWUvU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50LmphdmEKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuZWxlbWVudHMudGllOworCisvKioKKyAqIFJlcHJlc2VudHMgYW4gPHNjYTpwcm9wZXJ0eT4gZWxlbWVudCBpbiBhIFNwcmluZyBhcHBsaWNhdGlvbi1jb250ZXh0CisgKiAtIHRoaXMgaGFzIG5hbWUgYW5kIHR5cGUgYXR0cmlidXRlcworICogQHZlcnNpb24gJFJldiQgJERhdGUkIAorICovCitwdWJsaWMgY2xhc3MgU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50IHsKKworICAgIHByaXZhdGUgU3RyaW5nIG5hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgdHlwZTsKKworICAgIHB1YmxpYyBTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQoU3RyaW5nIG5hbWUsIFN0cmluZyB0eXBlKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgeworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKyAgICAgICAgcmV0dXJuIG5hbWU7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkgeworICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIHR5cGU7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlNwcmluZ1NDQVByb3BlcnR5RWxlbWVudCBbbmFtZT0iKS5hcHBlbmQobmFtZSkuYXBwZW5kKCIsIHR5cGU9IikuYXBwZW5kKHR5cGUpLmFwcGVuZCgiXSIpOworICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworICAgIH0KKworfSAvLyBlbmQgY2xhc3MgU3ByaW5nUHJvcGVydHlFbGVtZW50CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9lbGVtZW50cy90aWUvU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmNiYjczCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQuamF2YQpAQCAtMCwwICsxLDkxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5lbGVtZW50cy50aWU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworCisvKioKKyAqIFJlcHJlc2VudHMgYSA8c2NhOnJlZmVyZW5jZT4gZWxlbWVudCBpbiBhIFNwcmluZyBhcHBsaWNhdGlvbi1jb250ZXh0CisgKiAtIHRoaXMgaGFzIGlkIGFuZCBjbGFzc05hbWUgYXR0cmlidXRlcworICogLSBwbHVzIHplcm8gb3IgbW9yZSBwcm9wZXJ0eSBlbGVtZW50cyBhcyBjaGlsZHJlbgorICoKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudCB7CisKKyAgICBwcml2YXRlIFN0cmluZyBuYW1lOworICAgIHByaXZhdGUgU3RyaW5nIHR5cGU7CisgICAgcHJpdmF0ZSBTdHJpbmcgZGVmYXVsdEJlYW47CisgICAgCisgICAgcHJpdmF0ZSBMaXN0PFFOYW1lPiBpbnRlbnROYW1lcyA9IG5ldyBBcnJheUxpc3Q8UU5hbWU+KCk7CisgICAgcHJpdmF0ZSBMaXN0PFFOYW1lPiBwb2xpY3lTZXROYW1lcyA9IG5ldyBBcnJheUxpc3Q8UU5hbWU+KCk7CisKKworICAgIHB1YmxpYyBTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50KFN0cmluZyBuYW1lLCBTdHJpbmcgdHlwZSkgeworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CisgICAgICAgIHJldHVybiBuYW1lOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpIHsKKyAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7CisgICAgICAgIHJldHVybiB0eXBlOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHNldERlZmF1bHRCZWFuKFN0cmluZyBkZWZhdWx0QmVhbikgeworICAgICAgICB0aGlzLmRlZmF1bHRCZWFuID0gZGVmYXVsdEJlYW47CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0QmVhbigpIHsKKyAgICAgICAgcmV0dXJuIGRlZmF1bHRCZWFuOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgTGlzdDxRTmFtZT4gZ2V0SW50ZW50TmFtZXMoKSB7CisgICAgICAgIHJldHVybiBpbnRlbnROYW1lczsKKyAgICB9CisKKyAgICBwdWJsaWMgTGlzdDxRTmFtZT4gZ2V0UG9saWN5U2V0TmFtZXMoKSB7CisgICAgICAgIHJldHVybiBwb2xpY3lTZXROYW1lczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudCBbbmFtZT0iKS5hcHBlbmQobmFtZSkuYXBwZW5kKCIsIHR5cGU9IikuYXBwZW5kKHR5cGUpCisgICAgICAgICAgICAuYXBwZW5kKCIsIGRlZmF1bHRCZWFuPSIpLmFwcGVuZChkZWZhdWx0QmVhbikuYXBwZW5kKCIsIGludGVudE5hbWVzPSIpLmFwcGVuZChpbnRlbnROYW1lcykKKyAgICAgICAgICAgIC5hcHBlbmQoIiwgcG9saWN5U2V0TmFtZXM9IikuYXBwZW5kKHBvbGljeVNldE5hbWVzKS5hcHBlbmQoIl0iKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKworfSAvLyBlbmQgY2xhc3MgU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ1NDQVNlcnZpY2VFbGVtZW50LmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9lbGVtZW50cy90aWUvU3ByaW5nU0NBU2VydmljZUVsZW1lbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzIyZDE5Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvZWxlbWVudHMvdGllL1NwcmluZ1NDQVNlcnZpY2VFbGVtZW50LmphdmEKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuZWxlbWVudHMudGllOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CisKKworLyoqCisgKiBSZXByZXNlbnRzIGEgPHNjYTpzZXJ2aWNlPiBlbGVtZW50IGluIGEgU3ByaW5nIGFwcGxpY2F0aW9uLWNvbnRleHQKKyAqIC0gdGhpcyBoYXMgaWQgYW5kIGNsYXNzTmFtZSBhdHRyaWJ1dGVzCisgKiAtIHBsdXMgemVybyBvciBtb3JlIHByb3BlcnR5IGVsZW1lbnRzIGFzIGNoaWxkcmVuCisgKgorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudCB7CisKKyAgICBwcml2YXRlIFN0cmluZyBuYW1lOworICAgIHByaXZhdGUgU3RyaW5nIHR5cGU7CisgICAgcHJpdmF0ZSBTdHJpbmcgdGFyZ2V0OworCisgICAgcHJpdmF0ZSBMaXN0PFFOYW1lPiBpbnRlbnROYW1lcyA9IG5ldyBBcnJheUxpc3Q8UU5hbWU+KCk7CisgICAgcHJpdmF0ZSBMaXN0PFFOYW1lPiBwb2xpY3lTZXROYW1lcyA9IG5ldyBBcnJheUxpc3Q8UU5hbWU+KCk7CisKKworICAgIHB1YmxpYyBTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudChTdHJpbmcgbmFtZSwgU3RyaW5nIHRhcmdldCkgeworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgeworICAgICAgICByZXR1cm4gbmFtZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKSB7CisgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBnZXRUeXBlKCkgeworICAgICAgICByZXR1cm4gdHlwZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRUYXJnZXQoU3RyaW5nIHRhcmdldCkgeworICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldFRhcmdldCgpIHsKKyAgICAgICAgcmV0dXJuIHRhcmdldDsKKyAgICB9CisgICAgCisgICAgcHVibGljIExpc3Q8UU5hbWU+IGdldEludGVudE5hbWVzKCkgeworICAgICAgICByZXR1cm4gaW50ZW50TmFtZXM7CisgICAgfQorCisgICAgcHVibGljIExpc3Q8UU5hbWU+IGdldFBvbGljeVNldE5hbWVzKCkgeworICAgICAgICByZXR1cm4gcG9saWN5U2V0TmFtZXM7CisgICAgfQorCisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiU3ByaW5nU0NBU2VydmljZUVsZW1lbnQgW25hbWU9IikuYXBwZW5kKG5hbWUpLmFwcGVuZCgiLCB0eXBlPSIpLmFwcGVuZCh0eXBlKQorICAgICAgICAgICAgLmFwcGVuZCgiLCB0YXJnZXQ9IikuYXBwZW5kKHRhcmdldCkuYXBwZW5kKCIsIGludGVudE5hbWVzPSIpLmFwcGVuZChpbnRlbnROYW1lcykKKyAgICAgICAgICAgIC5hcHBlbmQoIiwgcG9saWN5U2V0TmFtZXM9IikuYXBwZW5kKHBvbGljeVNldE5hbWVzKS5hcHBlbmQoIl0iKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKK30gLy8gZW5kIGNsYXNzIFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9uYW1lc3BhY2UvdGllL1NDQU5hbWVzcGFjZUhhbmRsZXJSZXNvbHZlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL3RpZS9TQ0FOYW1lc3BhY2VIYW5kbGVyUmVzb2x2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2M3YzZhCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL3RpZS9TQ0FOYW1lc3BhY2VIYW5kbGVyUmVzb2x2ZXIuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5uYW1lc3BhY2UudGllOworCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnhtbC5EZWZhdWx0TmFtZXNwYWNlSGFuZGxlclJlc29sdmVyOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWwuTmFtZXNwYWNlSGFuZGxlcjsKKworLyoqCisgKiBPdmVycmlkZXMgdGhlIGRlZmF1bHQgU3ByaW5nIG5hbWVzcGFjZSByZXNvbHZlciB0byBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyCisgKiB7QGxpbmsgU2NhTmFtZXNwYWNlSGFuZGxlcn0gaW5zdGVhZCBvZiByZXF1aXJpbmcgYSB2YWx1ZSB0byBiZSBzdXBwbGllZCBpbiBhCisgKiBTcHJpbmcgY29uZmlndXJhdGlvbgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFNDQU5hbWVzcGFjZUhhbmRsZXJSZXNvbHZlciBleHRlbmRzIERlZmF1bHROYW1lc3BhY2VIYW5kbGVyUmVzb2x2ZXIgeworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0FfTkFNRVNQQUNFID0gImh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvc2NhIjsKKworICAgIHByaXZhdGUgU2NhTmFtZXNwYWNlSGFuZGxlciBoYW5kbGVyOworCisgICAgcHVibGljIFNDQU5hbWVzcGFjZUhhbmRsZXJSZXNvbHZlcihDbGFzc0xvYWRlciBjbGFzc0xvYWRlcikgeworICAgICAgICBzdXBlcihjbGFzc0xvYWRlcik7CisgICAgICAgIGhhbmRsZXIgPSBuZXcgU2NhTmFtZXNwYWNlSGFuZGxlcigvKmNvbXBvbmVudFR5cGUqLyk7CisgICAgfQorCisgICAgcHVibGljIFNDQU5hbWVzcGFjZUhhbmRsZXJSZXNvbHZlcihTdHJpbmcgaGFuZGxlck1hcHBpbmdzTG9jYXRpb24sIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7CisgICAgICAgIHN1cGVyKGNsYXNzTG9hZGVyLCBoYW5kbGVyTWFwcGluZ3NMb2NhdGlvbik7CisgICAgICAgIGhhbmRsZXIgPSBuZXcgU2NhTmFtZXNwYWNlSGFuZGxlcigvKmNvbXBvbmVudFR5cGUqLyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIE5hbWVzcGFjZUhhbmRsZXIgcmVzb2x2ZShTdHJpbmcgbmFtZXNwYWNlVXJpKSB7CisgICAgICAgIGlmIChTQ0FfTkFNRVNQQUNFLmVxdWFscyhuYW1lc3BhY2VVcmkpKSB7CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwZXIucmVzb2x2ZShuYW1lc3BhY2VVcmkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS90aWUvU2NhTmFtZXNwYWNlSGFuZGxlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL3RpZS9TY2FOYW1lc3BhY2VIYW5kbGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdiMTgxMQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS90aWUvU2NhTmFtZXNwYWNlSGFuZGxlci5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMi0yMDA2IHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycy4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLm5hbWVzcGFjZS50aWU7CisKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnhtbC5OYW1lc3BhY2VIYW5kbGVyU3VwcG9ydDsKK2ltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7CisKKy8qKgorICogSGFuZGxlciBmb3IgdGhlICZsdDtzY2E6Jmd0OyBuYW1lc3BhY2UgaW4gYW4gYXBwbGljYXRpb24gY29udGV4dAorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFNjYU5hbWVzcGFjZUhhbmRsZXIgZXh0ZW5kcyBOYW1lc3BhY2VIYW5kbGVyU3VwcG9ydCB7CisKKyAgICBwdWJsaWMgU2NhTmFtZXNwYWNlSGFuZGxlcigpIHsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBpbml0KCkgeworICAgICAgICByZWdpc3RlckJlYW5EZWZpbml0aW9uUGFyc2VyKCJyZWZlcmVuY2UiLCBuZXcgU2NhUmVmZXJlbmNlQmVhbkRlZmluaXRpb25QYXJzZXIoKSk7CisgICAgICAgIHJlZ2lzdGVyQmVhbkRlZmluaXRpb25QYXJzZXIoInNlcnZpY2UiLCBuZXcgU2NhU2VydmljZUJlYW5EZWZpbml0aW9uUGFyc2VyKCkpOworICAgICAgICByZWdpc3RlckJlYW5EZWZpbml0aW9uUGFyc2VyKCJwcm9wZXJ0eSIsIG5ldyBTY2FQcm9wZXJ0eUJlYW5EZWZpbml0aW9uUGFyc2VyKCkpOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXROYW1lc3BhY2VVUkkoRWxlbWVudCBlbGVtZW50LCBTdHJpbmcgcHJlZml4KSB7IAorICAgICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgbmFtZSA9ICgiIi5lcXVhbHMocHJlZml4KSkgPyAieG1sbnMiIDogInhtbG5zOiIgKyBwcmVmaXg7CisgICAgICAgIFN0cmluZyBucyA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpOworICAgICAgICBpZiAobnMgIT0gbnVsbCAmJiAhIiIuZXF1YWxzKG5zKSkgeworICAgICAgICAgICAgcmV0dXJuIG5zOworICAgICAgICB9CisgICAgICAgIE5vZGUgcGFyZW50ID0gZWxlbWVudC5nZXRQYXJlbnROb2RlKCk7CisgICAgICAgIGlmIChwYXJlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7CisgICAgICAgICAgICByZXR1cm4gZ2V0TmFtZXNwYWNlVVJJKChFbGVtZW50KXBhcmVudCwgcHJlZml4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBMaXN0PFFOYW1lPiByZXNvbHZlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIGxpc3RPZk5hbWVzKSB7CisgICAgICAgIExpc3Q8UU5hbWU+IHFuYW1lcyA9IG5ldyBBcnJheUxpc3Q8UU5hbWU+KCk7CisgICAgICAgIFN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKGxpc3RPZk5hbWVzKTsKKyAgICAgICAgd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBxbmFtZSA9IHRva2VuaXplci5uZXh0VG9rZW4oKTsKKyAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAiIjsKKyAgICAgICAgICAgIFN0cmluZyBsb2NhbCA9IHFuYW1lOworICAgICAgICAgICAgaW50IGluZGV4ID0gcW5hbWUuaW5kZXhPZignOicpOworICAgICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgbG9jYWwgPSBxbmFtZS5zdWJzdHJpbmcoaW5kZXggKyAxKTsKKyAgICAgICAgICAgICAgICBwcmVmaXggPSBxbmFtZS5zdWJzdHJpbmcoMCwgaW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIG5zID0gZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQsIHByZWZpeCk7CisgICAgICAgICAgICBpZiAobnMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHFuYW1lcy5hZGQobmV3IFFOYW1lKG5zLCBsb2NhbCwgcHJlZml4KSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIlByZWZpeCAiICsgcHJlZml4ICsgImlzIG5vdCBib3VuZCB0byBhIG5hbWVzcGFjZSIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBxbmFtZXM7CisgICAgfQorCisgICAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0QXR0cmlidXRlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgU3RyaW5nIGF0dHIgPSBlbGVtZW50LmdldEF0dHJpYnV0ZU5TKG51bGwsIG5hbWUpOworICAgICAgICBpZiAoIiIuZXF1YWxzKGF0dHIpKSB7CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBhdHRyOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL3RpZS9TY2FQcm9wZXJ0eUJlYW5EZWZpbml0aW9uUGFyc2VyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9uYW1lc3BhY2UvdGllL1NjYVByb3BlcnR5QmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDExYTMwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL3RpZS9TY2FQcm9wZXJ0eUJlYW5EZWZpbml0aW9uUGFyc2VyLmphdmEKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAyLTIwMDYgdGhlIG9yaWdpbmFsIGF1dGhvciBvciBhdXRob3JzLgorICogCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcubmFtZXNwYWNlLnRpZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmNvbnRleHQudGllLlNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuZWxlbWVudHMudGllLlNwcmluZ1NDQVByb3BlcnR5RWxlbWVudDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkJlYW5EZWZpbml0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkJlYW5EZWZpbml0aW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnhtbC5CZWFuRGVmaW5pdGlvblBhcnNlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkueG1sLlBhcnNlckNvbnRleHQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoqCisgKiBQYXJzZXIgZm9yIHRoZSAmbHQ7c2NhOnJlZmVyZW5jZSZndDsgZWxlbWVudAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2FQcm9wZXJ0eUJlYW5EZWZpbml0aW9uUGFyc2VyIGltcGxlbWVudHMgQmVhbkRlZmluaXRpb25QYXJzZXIgeworCisgICAgcHVibGljIEJlYW5EZWZpbml0aW9uIHBhcnNlKEVsZW1lbnQgZWxlbWVudCwgUGFyc2VyQ29udGV4dCBwYXJzZXJDb250ZXh0KSB7CisgICAgICAgIEJlYW5EZWZpbml0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBwYXJzZXJDb250ZXh0LmdldFJlZ2lzdHJ5KCk7CisgICAgICAgIGlmIChyZWdpc3RyeSBpbnN0YW5jZW9mIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQpIHsKKyAgICAgICAgICAgIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dCA9IChTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KXJlZ2lzdHJ5OworICAgICAgICAgICAgU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50IHByb3BlcnR5RWxlbWVudCA9CisgICAgICAgICAgICAgICAgbmV3IFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudChlbGVtZW50LmdldEF0dHJpYnV0ZU5TKG51bGwsICJuYW1lIiksIGVsZW1lbnQuZ2V0QXR0cmlidXRlTlMobnVsbCwgInR5cGUiKSk7CisgICAgICAgICAgICBjb250ZXh0LmFkZFNDQVByb3BlcnR5RWxlbWVudChwcm9wZXJ0eUVsZW1lbnQpOworICAgICAgICB9CisgICAgICAgIC8vIGRvIG5vdGhpbmcsIHRoaXMgaXMgaGFuZGxlZCBieSBUdXNjYW55CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS90aWUvU2NhUmVmZXJlbmNlQmVhbkRlZmluaXRpb25QYXJzZXIuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL25hbWVzcGFjZS90aWUvU2NhUmVmZXJlbmNlQmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDcwZDJmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL3RpZS9TY2FSZWZlcmVuY2VCZWFuRGVmaW5pdGlvblBhcnNlci5qYXZhCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMi0yMDA2IHRoZSBvcmlnaW5hbCBhdXRob3Igb3IgYXV0aG9ycy4KKyAqIAorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLm5hbWVzcGFjZS50aWU7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcubmFtZXNwYWNlLnRpZS5TY2FOYW1lc3BhY2VIYW5kbGVyLmdldEF0dHJpYnV0ZTsKKworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmNvbnRleHQudGllLlNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuZWxlbWVudHMudGllLlNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5CZWFuRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3Rvcnkuc3VwcG9ydC5CZWFuRGVmaW5pdGlvblJlZ2lzdHJ5OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWwuQmVhbkRlZmluaXRpb25QYXJzZXI7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnhtbC5QYXJzZXJDb250ZXh0OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKKy8qKgorICogUGFyc2VyIGZvciB0aGUgJmx0O3NjYTpyZWZlcmVuY2UmZ3Q7IGVsZW1lbnQKKyAqCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFNjYVJlZmVyZW5jZUJlYW5EZWZpbml0aW9uUGFyc2VyIGltcGxlbWVudHMgQmVhbkRlZmluaXRpb25QYXJzZXIgeworCisgICAgcHVibGljIEJlYW5EZWZpbml0aW9uIHBhcnNlKEVsZW1lbnQgZWxlbWVudCwgUGFyc2VyQ29udGV4dCBwYXJzZXJDb250ZXh0KSB7CisgICAgICAgIEJlYW5EZWZpbml0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBwYXJzZXJDb250ZXh0LmdldFJlZ2lzdHJ5KCk7CisgICAgICAgIGlmIChyZWdpc3RyeSBpbnN0YW5jZW9mIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQpIHsKKyAgICAgICAgICAgIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dCA9IChTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KXJlZ2lzdHJ5OworICAgICAgICAgICAgU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudCByZWZlcmVuY2VFbGVtZW50ID0KKyAgICAgICAgICAgICAgICBuZXcgU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudChnZXRBdHRyaWJ1dGUoZWxlbWVudCwgIm5hbWUiKSwgZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJ0eXBlIikpOworICAgICAgICAgICAgcmVmZXJlbmNlRWxlbWVudC5zZXREZWZhdWx0QmVhbihnZXRBdHRyaWJ1dGUoZWxlbWVudCwgImRlZmF1bHQiKSk7CisKKyAgICAgICAgICAgIFN0cmluZyByZXF1aXJlcyA9IGdldEF0dHJpYnV0ZShlbGVtZW50LCAicmVxdWlyZXMiKTsKKyAgICAgICAgICAgIGlmIChyZXF1aXJlcyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgTGlzdDxRTmFtZT4gcW5hbWVzID0gU2NhTmFtZXNwYWNlSGFuZGxlci5yZXNvbHZlKGVsZW1lbnQsIHJlcXVpcmVzKTsKKyAgICAgICAgICAgICAgICByZWZlcmVuY2VFbGVtZW50LmdldEludGVudE5hbWVzKCkuYWRkQWxsKHFuYW1lcyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0cmluZyBwb2xpY3lTZXRzID0gZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJwb2xpY3lTZXRzIik7CisgICAgICAgICAgICBpZiAocG9saWN5U2V0cyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgTGlzdDxRTmFtZT4gcW5hbWVzID0gU2NhTmFtZXNwYWNlSGFuZGxlci5yZXNvbHZlKGVsZW1lbnQsIHBvbGljeVNldHMpOworICAgICAgICAgICAgICAgIHJlZmVyZW5jZUVsZW1lbnQuZ2V0UG9saWN5U2V0TmFtZXMoKS5hZGRBbGwocW5hbWVzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5hZGRTQ0FSZWZlcmVuY2VFbGVtZW50KHJlZmVyZW5jZUVsZW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gZG8gbm90aGluZywgdGhpcyBpcyBoYW5kbGVkIGJ5IFR1c2NhbnkKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9uYW1lc3BhY2UvdGllL1NjYVNlcnZpY2VCZWFuRGVmaW5pdGlvblBhcnNlci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL3RpZS9TY2FTZXJ2aWNlQmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDAzNTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvbmFtZXNwYWNlL3RpZS9TY2FTZXJ2aWNlQmVhbkRlZmluaXRpb25QYXJzZXIuamF2YQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDItMjAwNiB0aGUgb3JpZ2luYWwgYXV0aG9yIG9yIGF1dGhvcnMuCisgKiAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICoKKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5uYW1lc3BhY2UudGllOworCitpbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLm5hbWVzcGFjZS50aWUuU2NhTmFtZXNwYWNlSGFuZGxlci5nZXRBdHRyaWJ1dGU7CisKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5jb250ZXh0LnRpZS5TQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmVsZW1lbnRzLnRpZS5TcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkJlYW5EZWZpbml0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5zdXBwb3J0LkJlYW5EZWZpbml0aW9uUmVnaXN0cnk7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnhtbC5CZWFuRGVmaW5pdGlvblBhcnNlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkueG1sLlBhcnNlckNvbnRleHQ7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoqCisgKiBQYXJzZXIgZm9yIHRoZSAmbHQ7c2NhOnNlcnZpY2UvJmd0OyBlbGVtZW50CisgKgorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTY2FTZXJ2aWNlQmVhbkRlZmluaXRpb25QYXJzZXIgaW1wbGVtZW50cyBCZWFuRGVmaW5pdGlvblBhcnNlciB7CisKKyAgICBwdWJsaWMgQmVhbkRlZmluaXRpb24gcGFyc2UoRWxlbWVudCBlbGVtZW50LCBQYXJzZXJDb250ZXh0IHBhcnNlckNvbnRleHQpIHsKKyAgICAgICAgQmVhbkRlZmluaXRpb25SZWdpc3RyeSByZWdpc3RyeSA9IHBhcnNlckNvbnRleHQuZ2V0UmVnaXN0cnkoKTsKKyAgICAgICAgaWYgKHJlZ2lzdHJ5IGluc3RhbmNlb2YgU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dCkgeworICAgICAgICAgICAgU0NBR2VuZXJpY0FwcGxpY2F0aW9uQ29udGV4dCBjb250ZXh0ID0gKFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQpcmVnaXN0cnk7CisgICAgICAgICAgICBTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9CisgICAgICAgICAgICAgICAgbmV3IFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50KGdldEF0dHJpYnV0ZShlbGVtZW50LCAibmFtZSIpLCBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgInRhcmdldCIpKTsKKyAgICAgICAgICAgIHNlcnZpY2VFbGVtZW50LnNldFR5cGUoZ2V0QXR0cmlidXRlKGVsZW1lbnQsICJ0eXBlIikpOworCisgICAgICAgICAgICBTdHJpbmcgcmVxdWlyZXMgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgInJlcXVpcmVzIik7CisgICAgICAgICAgICBpZiAocmVxdWlyZXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIExpc3Q8UU5hbWU+IHFuYW1lcyA9IFNjYU5hbWVzcGFjZUhhbmRsZXIucmVzb2x2ZShlbGVtZW50LCByZXF1aXJlcyk7CisgICAgICAgICAgICAgICAgc2VydmljZUVsZW1lbnQuZ2V0SW50ZW50TmFtZXMoKS5hZGRBbGwocW5hbWVzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RyaW5nIHBvbGljeVNldHMgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgInBvbGljeVNldHMiKTsKKyAgICAgICAgICAgIGlmIChwb2xpY3lTZXRzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBMaXN0PFFOYW1lPiBxbmFtZXMgPSBTY2FOYW1lc3BhY2VIYW5kbGVyLnJlc29sdmUoZWxlbWVudCwgcG9saWN5U2V0cyk7CisgICAgICAgICAgICAgICAgc2VydmljZUVsZW1lbnQuZ2V0UG9saWN5U2V0TmFtZXMoKS5hZGRBbGwocW5hbWVzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29udGV4dC5hZGRTQ0FTZXJ2aWNlRWxlbWVudChzZXJ2aWNlRWxlbWVudCk7CisgICAgICAgIH0KKyAgICAgICAgLy8gZG8gbm90aGluZywgaGFuZGxlZCBieSBUdXNjYW55CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Db21wb25lbnROYW1lQW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Db21wb25lbnROYW1lQW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZjlmMzAKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvdGllL0NvbXBvbmVudE5hbWVBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb2Nlc3Nvci50aWU7CisKK2ltcG9ydCBqYXZhLmJlYW5zLlByb3BlcnR5RGVzY3JpcHRvcjsKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOworaW1wb3J0IGphdmEubGFuZy5yZWYuUmVmZXJlbmNlOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Nb2RpZmllcjsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uQ29tcG9uZW50TmFtZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5VdGlsczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuRmF0YWxCZWFuRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay51dGlsLkFzc2VydDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnV0aWwuUmVmbGVjdGlvblV0aWxzOworCitwdWJsaWMgY2xhc3MgQ29tcG9uZW50TmFtZUFubm90YXRpb25Qcm9jZXNzb3IgaW1wbGVtZW50cyBCZWFuUG9zdFByb2Nlc3NvciB7CisKKyAgICBwcml2YXRlIENsYXNzPD8gZXh0ZW5kcyBBbm5vdGF0aW9uPiBjb21wb25lbnROYW1lQW5ub3RhdGlvblR5cGUgPSBDb21wb25lbnROYW1lLmNsYXNzOworCisgICAgcHJpdmF0ZSBTdHJpbmcgY29tcG9uZW50TmFtZTsKKworICAgIHB1YmxpYyBDb21wb25lbnROYW1lQW5ub3RhdGlvblByb2Nlc3NvcihTdHJpbmcgY29tcG9uZW50TmFtZSkgeworICAgICAgICB0aGlzLmNvbXBvbmVudE5hbWUgPSBjb21wb25lbnROYW1lOworICAgIH0KKworICAgIC8qKgorICAgICAqIEdldHMgY29tcG9uZW50TmFtZSBhbm5vdGF0aW9uIHR5cGUuCisgICAgICovCisgICAgcHJvdGVjdGVkIENsYXNzPD8gZXh0ZW5kcyBBbm5vdGF0aW9uPiBnZXRDb21wb25lbnROYW1lQW5ub3RhdGlvblR5cGUoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudE5hbWVBbm5vdGF0aW9uVHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIGNvbXBvbmVudE5hbWUgYW5ub3RhdGlvbiB0eXBlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldENvbXBvbmVudE5hbWVBbm5vdGF0aW9uVHlwZShDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gY29tcG9uZW50TmFtZUFubm90YXRpb25UeXBlKSB7CisgICAgICAgIEFzc2VydC5ub3ROdWxsKGNvbXBvbmVudE5hbWVBbm5vdGF0aW9uVHlwZSwgIidjb21wb25lbnROYW1lQW5ub3RhdGlvblR5cGUnIHR5cGUgbXVzdCBub3QgYmUgbnVsbC4iKTsKKyAgICAgICAgdGhpcy5jb21wb25lbnROYW1lQW5ub3RhdGlvblR5cGUgPSBjb21wb25lbnROYW1lQW5ub3RhdGlvblR5cGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBleGVjdXRlIGJlZm9yZSBhIGJlYW4ncyBpbml0aWFsaXphdGlvbiBjYWxsYmFjay4KKyAgICAgKiAKKyAgICAgKiBAc2VlIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3IjcG9zdFByb2Nlc3NCZWZvcmVJbml0aWFsaXphdGlvbihqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgcG9zdFByb2Nlc3NCZWZvcmVJbml0aWFsaXphdGlvbihPYmplY3QgYmVhbiwgU3RyaW5nIGJlYW5OYW1lKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICBwcm9jZXNzQW5ub3RhdGlvbihiZWFuKTsKKyAgICAgICAgcmV0dXJuIGJlYW47CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBleGVjdXRlIGFmdGVyIGEgYmVhbidzIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrLgorICAgICAqIAorICAgICAqIEBzZWUgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5CZWFuUG9zdFByb2Nlc3NvciNwb3N0UHJvY2Vzc0FmdGVySW5pdGlhbGl6YXRpb24oamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQWZ0ZXJJbml0aWFsaXphdGlvbihPYmplY3QgYmVhbiwgU3RyaW5nIGJlYW5OYW1lKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICByZXR1cm4gYmVhbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8cD5Qcm9jZXNzZXMgYSBiZWFucyBmaWVsZHMgZm9yIGluamVjdGlvbiBpZiBpdCBoYXMgYSB7QGxpbmsgUmVmZXJlbmNlfSBhbm5vdGF0aW9uLjwvcD4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgdm9pZCBwcm9jZXNzQW5ub3RhdGlvbihmaW5hbCBPYmplY3QgYmVhbikgeworCisgICAgICAgIGZpbmFsIENsYXNzPD8+IGNsYXp6ID0gYmVhbi5nZXRDbGFzcygpOworCisgICAgICAgIFJlZmxlY3Rpb25VdGlscy5kb1dpdGhGaWVsZHMoY2xhenosIG5ldyBSZWZsZWN0aW9uVXRpbHMuRmllbGRDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRvV2l0aChGaWVsZCBmaWVsZCkgeworICAgICAgICAgICAgICAgIEFubm90YXRpb24gYW5ub3RhdGlvbiA9IGZpZWxkLmdldEFubm90YXRpb24oZ2V0Q29tcG9uZW50TmFtZUFubm90YXRpb25UeXBlKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNTdGF0aWMoZmllbGQuZ2V0TW9kaWZpZXJzKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJDb21wb25lbnROYW1lIGFubm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBzdGF0aWMgZmllbGRzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNQcml2YXRlKGZpZWxkLmdldE1vZGlmaWVycygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ29tcG9uZW50TmFtZSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gcHJpdmF0ZSBmaWVsZHMiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFJlZmxlY3Rpb25VdGlscy5tYWtlQWNjZXNzaWJsZShmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLmdldFR5cGUoKS5nZXROYW1lKCkuZXF1YWxzKCJqYXZhLmxhbmcuU3RyaW5nIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdCBuYW1lT2JqID0gY29tcG9uZW50TmFtZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lT2JqICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmbGVjdGlvblV0aWxzLnNldEZpZWxkKGZpZWxkLCBiZWFuLCBuYW1lT2JqKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wb25lbnROYW1lIGFubm90YXRpb24gaXMgc3VwcG9ydGVkIG9ubHkgb24gamF2YS5sYW5nLlN0cmluZyBmaWVsZCB0eXBlLiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICBSZWZsZWN0aW9uVXRpbHMuZG9XaXRoTWV0aG9kcyhjbGF6eiwgbmV3IFJlZmxlY3Rpb25VdGlscy5NZXRob2RDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRvV2l0aChNZXRob2QgbWV0aG9kKSB7CisgICAgICAgICAgICAgICAgQW5ub3RhdGlvbiBhbm5vdGF0aW9uID0gbWV0aG9kLmdldEFubm90YXRpb24oZ2V0Q29tcG9uZW50TmFtZUFubm90YXRpb25UeXBlKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNTdGF0aWMobWV0aG9kLmdldE1vZGlmaWVycygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ29tcG9uZW50TmFtZSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gc3RhdGljIG1ldGhvZHMiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChNb2RpZmllci5pc1ByaXZhdGUobWV0aG9kLmdldE1vZGlmaWVycygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiQ29tcG9uZW50TmFtZSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gcHJpdmF0ZSBtZXRob2RzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wb25lbnROYW1lIGFubm90YXRpb24gcmVxdWlyZXMgYXQgbGVhc3Qgb25lIGFyZ3VtZW50OiAiICsgbWV0aG9kKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIFByb3BlcnR5RGVzY3JpcHRvciBwZCA9IEJlYW5VdGlscy5maW5kUHJvcGVydHlGb3JNZXRob2QobWV0aG9kKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocGQuZ2V0UHJvcGVydHlUeXBlKCkuZ2V0TmFtZSgpLmVxdWFscygiamF2YS5sYW5nLlN0cmluZyIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QgbmFtZU9iaiA9IGNvbXBvbmVudE5hbWU7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZU9iaiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGQuZ2V0V3JpdGVNZXRob2QoKS5pbnZva2UoYmVhbiwgbmV3IE9iamVjdFtdIHtuYW1lT2JqfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZhdGFsQmVhbkV4Y2VwdGlvbigiUHJvYmxlbSBpbmplY3RpbmcgcmVmZXJlbmNlOiAgIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcG9uZW50TmFtZSBhbm5vdGF0aW9uIGlzIHN1cHBvcnRlZCBvbmx5IG9uIGphdmEubGFuZy5TdHJpbmcgZmllbGQgdHlwZS4iKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Db21wb25lbnRTdHViLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvdGllL0NvbXBvbmVudFN0dWIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTExYWM0Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Db21wb25lbnRTdHViLmphdmEKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IudGllOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOworCisvKioKKyAqIFRoaXMgaXMgdGhlIFNwcmluZyBydW50aW1lIHNpZGUgc3R1YiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgVHVzY2FueSB0aWUgY2xhc3MuCisgKiBJdCBlbmFibGVzIHRoZSBUdXNjYW55IGNvZGUgdG8gaW52b2tlIG1ldGhvZHMgb24gYSBTcHJpbmcgY29udGV4dCB3aXRob3V0CisgKiBuZWVkaW5nIHRvIGtub3cgYWJvdXQgYW55IFNwcmluZyBjbGFzc2VzLiBTZWUgdGhlIENvbXBvbmVudFRpZSBjbGFzcworICogaW4gdGhlIGltcGxlbWVudGF0aW9uLXNwcmluZyBtb2R1bGUgZm9yIHdoYXQgdGhlIHRpZSBkb2VzLiAKKyAqLworcHVibGljIGNsYXNzIENvbXBvbmVudFN0dWIgeworCisgICAgcHJpdmF0ZSBPYmplY3QgdGllOworICAgIHByaXZhdGUgTWV0aG9kIGdldFNlcnZpY2U7CisKKyAgICBwdWJsaWMgQ29tcG9uZW50U3R1YihPYmplY3QgdGllKSB7CisgICAgICAgIHRoaXMudGllID0gdGllOworICAgICAgICBDbGFzczw/PiB0aWVDbGFzcyA9IHRpZS5nZXRDbGFzcygpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgZ2V0U2VydmljZSA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0U2VydmljZSIsIG5ldyBDbGFzczw/PltdIHtDbGFzcy5jbGFzcywgU3RyaW5nLmNsYXNzfSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgZ2V0U2VydmljZShDbGFzczw/PiB0eXBlLCBTdHJpbmcgbmFtZSkgeworICAgICAgICB0cnkgeworCisgICAgICAgICAgICByZXR1cm4gZ2V0U2VydmljZS5pbnZva2UodGllLCB0eXBlLCBuYW1lKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvdGllL0NvbnN0cnVjdG9yQW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Db25zdHJ1Y3RvckFubm90YXRpb25Qcm9jZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDMzMDdjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Db25zdHJ1Y3RvckFubm90YXRpb25Qcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLnRpZTsKKworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb247CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuQ29uc3RydWN0b3I7CisKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5hbm5vdGF0aW9uLkF1dG93aXJlZDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkluc3RhbnRpYXRpb25Bd2FyZUJlYW5Qb3N0UHJvY2Vzc29yQWRhcHRlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnV0aWwuQXNzZXJ0OworCitwdWJsaWMgY2xhc3MgQ29uc3RydWN0b3JBbm5vdGF0aW9uUHJvY2Vzc29yIGV4dGVuZHMgSW5zdGFudGlhdGlvbkF3YXJlQmVhblBvc3RQcm9jZXNzb3JBZGFwdGVyIHsKKworICAgIHByaXZhdGUgQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IGNvbnN0cnVjdG9yQW5ub3RhdGlvblR5cGUgPSBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkNvbnN0cnVjdG9yLmNsYXNzOworCisgICAgcHJpdmF0ZSBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gYXV0b3dpcmVkQW5ub3RhdGlvblR5cGUgPSBBdXRvd2lyZWQuY2xhc3M7CisKKyAgICBwdWJsaWMgQ29uc3RydWN0b3JBbm5vdGF0aW9uUHJvY2Vzc29yKCkgeworICAgICAgICAvLyBEZWZhdWx0IGNvbnN0cnVjdG9yLgorICAgIH0KKworICAgIC8qKgorICAgICAqIFNldCB0aGUgJ2F1dG93aXJlZCcgYW5ub3RhdGlvbiB0eXBlLCB0byBiZSB1c2VkIG9uIGNvbnN0cnVjdG9ycywgZmllbGRzLAorICAgICAqIHNldHRlciBtZXRob2RzIGFuZCBhcmJpdHJhcnkgY29uZmlnIG1ldGhvZHMuCisgICAgICovCisgICAgcHVibGljIHZvaWQgc2V0QXV0b3dpcmVkQW5ub3RhdGlvblR5cGUoQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IGF1dG93aXJlZEFubm90YXRpb25UeXBlKSB7CisgICAgICAgIEFzc2VydC5ub3ROdWxsKGF1dG93aXJlZEFubm90YXRpb25UeXBlLCAiJ2F1dG93aXJlZEFubm90YXRpb25UeXBlJyBtdXN0IG5vdCBiZSBudWxsIik7CisgICAgICAgIHRoaXMuYXV0b3dpcmVkQW5ub3RhdGlvblR5cGUgPSBhdXRvd2lyZWRBbm5vdGF0aW9uVHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlICdhdXRvd2lyZWQnIGFubm90YXRpb24gdHlwZS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IGdldEF1dG93aXJlZEFubm90YXRpb25UeXBlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5hdXRvd2lyZWRBbm5vdGF0aW9uVHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlICdjb25zdHJ1Y3RvcicgYW5ub3RhdGlvbiB0eXBlLgorICAgICAqLworICAgIHByb3RlY3RlZCBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gZ2V0Q29uc3RydWN0b3JBbm5vdGF0aW9uVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3JBbm5vdGF0aW9uVHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHRoZSAnY29uc3RydWN0b3InIGFubm90YXRpb24gdHlwZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRDb25zdHJ1Y3RvckFubm90YXRpb25UeXBlKENsYXNzPD8gZXh0ZW5kcyBBbm5vdGF0aW9uPiBjb25zdHJ1Y3RvckFubm90YXRpb25UeXBlKSB7CisgICAgICAgIEFzc2VydC5ub3ROdWxsKGNvbnN0cnVjdG9yQW5ub3RhdGlvblR5cGUsICInY29uc3RydWN0b3JBbm5vdGF0aW9uVHlwZScgdHlwZSBtdXN0IG5vdCBiZSBudWxsLiIpOworICAgICAgICB0aGlzLmNvbnN0cnVjdG9yQW5ub3RhdGlvblR5cGUgPSBjb25zdHJ1Y3RvckFubm90YXRpb25UeXBlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZXhlY3V0ZSBiZWZvcmUgYSBiZWFuJ3MgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2suCisgICAgICogCisgICAgICogQHNlZSBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkJlYW5Qb3N0UHJvY2Vzc29yI3Bvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGJlYW47CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBleGVjdXRlIGFmdGVyIGEgYmVhbidzIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrLgorICAgICAqIAorICAgICAqIEBzZWUgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5CZWFuUG9zdFByb2Nlc3NvciNwb3N0UHJvY2Vzc0FmdGVySW5pdGlhbGl6YXRpb24oamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQWZ0ZXJJbml0aWFsaXphdGlvbihPYmplY3QgYmVhbiwgU3RyaW5nIGJlYW5OYW1lKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICByZXR1cm4gYmVhbjsKKyAgICB9CisKKyAgICBwdWJsaWMgQ29uc3RydWN0b3JbXSBkZXRlcm1pbmVDYW5kaWRhdGVDb25zdHJ1Y3RvcnMoQ2xhc3MgYmVhbkNsYXNzLCBTdHJpbmcgYmVhbk5hbWUpIHRocm93cyBCZWFuc0V4Y2VwdGlvbiB7CisgICAgICAgIC8qQ29uc3RydWN0b3JbXSBkZWNsYXJlZENvbnN0cnVjdG9ycyA9IGJlYW5DbGFzcy5nZXREZWNsYXJlZENvbnN0cnVjdG9ycygpOyAgICAgICAgICAgICAgICAKKyAgICAgICAgTWV0aG9kW10gZGVjbGFyZWRNZXRob2RzID0gYmVhbkNsYXNzLmdldERlY2xhcmVkTWV0aG9kcygpOworICAgICAgICBMaXN0IGNhbmRpZGF0ZXMgPSBuZXcgQXJyYXlMaXN0KGRlY2xhcmVkQ29uc3RydWN0b3JzLmxlbmd0aCk7CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNsYXJlZE1ldGhvZHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIE1ldGhvZCBtZXRob2QgPSBkZWNsYXJlZE1ldGhvZHNbaV07CisgICAgICAgICAgICBBbm5vdGF0aW9uIGFubm90YXRpb24gPSBtZXRob2QuZ2V0QW5ub3RhdGlvbihnZXRDb25zdHJ1Y3RvckFubm90YXRpb25UeXBlKCkpOworICAgICAgICAgICAgaWYgKGFubm90YXRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGlmIChNb2RpZmllci5pc1N0YXRpYyhtZXRob2QuZ2V0TW9kaWZpZXJzKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIkNvbnN0cnVjdG9yIGFubm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBzdGF0aWMgbWV0aG9kcyIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlcy5zaXplKCkgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJPbmx5IG9uZSBtZXRob2QgaXMgYWxsb3dlZCB0byBoYXZlIGNvbnN0cnVjdG9yIGFubm90YXRpb24gaW4gYSBiZWFuOiAiICsgbWV0aG9kKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hZGQobWV0aG9kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiAoQ29uc3RydWN0b3JbXSkgY2FuZGlkYXRlcy50b0FycmF5KG5ldyBDb25zdHJ1Y3RvcltjYW5kaWRhdGVzLnNpemUoKV0pOyovCisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci90aWUvSW5pdERlc3Ryb3lBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvdGllL0luaXREZXN0cm95QW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MGVlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvdGllL0luaXREZXN0cm95QW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnByb2Nlc3Nvci50aWU7CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5EZXN0cm95OworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uSW5pdDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbi5Jbml0RGVzdHJveUFubm90YXRpb25CZWFuUG9zdFByb2Nlc3NvcjsKKworcHVibGljIGNsYXNzIEluaXREZXN0cm95QW5ub3RhdGlvblByb2Nlc3NvciBleHRlbmRzIEluaXREZXN0cm95QW5ub3RhdGlvbkJlYW5Qb3N0UHJvY2Vzc29yIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDA7CisKKyAgICBwcml2YXRlIENsYXNzPD8gZXh0ZW5kcyBBbm5vdGF0aW9uPiBpbml0QW5ub3RhdGlvblR5cGUgPSBJbml0LmNsYXNzOworICAgIHByaXZhdGUgQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IGRlc3Ryb3lBbm5vdGF0aW9uVHlwZSA9IERlc3Ryb3kuY2xhc3M7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIGluaXQgYW5ub3RhdGlvbiB0eXBlLgorICAgICAqLworICAgIHByb3RlY3RlZCBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gZ2V0SW5pdEFubm90YXRpb25UeXBlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5pbml0QW5ub3RhdGlvblR5cGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBpbml0IGFubm90YXRpb24gdHlwZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIHB1YmxpYyB2b2lkIHNldEluaXRBbm5vdGF0aW9uVHlwZShDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4KKyAgICAgKiBpbml0QW5ub3RhdGlvblR5cGUpIHsgQXNzZXJ0Lm5vdE51bGwoaW5pdEFubm90YXRpb25UeXBlLAorICAgICAqICJJbml0IGFubm90YXRpb24gdHlwZSBtdXN0IG5vdCBiZSBudWxsLiIpOyB0aGlzLmluaXRBbm5vdGF0aW9uVHlwZSA9CisgICAgICogaW5pdEFubm90YXRpb25UeXBlOyB9CisgICAgICovCisKKyAgICAvKioKKyAgICAgKiBHZXRzIGRlc3Ryb3kgYW5ub3RhdGlvbiB0eXBlLgorICAgICAqLworICAgIHByb3RlY3RlZCBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gZ2V0RGVzdHJveUFubm90YXRpb25UeXBlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5kZXN0cm95QW5ub3RhdGlvblR5cGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2V0cyBkZXN0cm95IGFubm90YXRpb24gdHlwZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIHB1YmxpYyB2b2lkIHNldERlc3Ryb3lBbm5vdGF0aW9uVHlwZShDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4KKyAgICAgKiBkZXN0cm95QW5ub3RhdGlvblR5cGUpIHsgQXNzZXJ0Lm5vdE51bGwoZGVzdHJveUFubm90YXRpb25UeXBlLAorICAgICAqICJEZXN0cm95IGFubm90YXRpb24gdHlwZSBtdXN0IG5vdCBiZSBudWxsLiIpOyB0aGlzLmRlc3Ryb3lBbm5vdGF0aW9uVHlwZQorICAgICAqID0gZGVzdHJveUFubm90YXRpb25UeXBlOyB9CisgICAgICovCisKKyAgICBwdWJsaWMgSW5pdERlc3Ryb3lBbm5vdGF0aW9uUHJvY2Vzc29yKCkgeworICAgICAgICAvLyBTZXQgdGhlIEBJbml0IGFubm90YXRpb24gdHlwZQorICAgICAgICBzZXRJbml0QW5ub3RhdGlvblR5cGUoaW5pdEFubm90YXRpb25UeXBlKTsKKworICAgICAgICAvLyBTZXQgdGhlIEBEZXN0cm95IGFubm90YXRpb24gdHlwZQorICAgICAgICBzZXREZXN0cm95QW5ub3RhdGlvblR5cGUoZGVzdHJveUFubm90YXRpb25UeXBlKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvdGllL1Byb3BlcnR5QW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Qcm9wZXJ0eUFubm90YXRpb25Qcm9jZXNzb3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTNhYWZkCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Qcm9wZXJ0eUFubm90YXRpb25Qcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLnRpZTsKKworaW1wb3J0IGphdmEuYmVhbnMuUHJvcGVydHlEZXNjcmlwdG9yOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb247CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Qcm9wZXJ0eTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5VdGlsczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuRmF0YWxCZWFuRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay51dGlsLkFzc2VydDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnV0aWwuUmVmbGVjdGlvblV0aWxzOworCitwdWJsaWMgY2xhc3MgUHJvcGVydHlBbm5vdGF0aW9uUHJvY2Vzc29yIGltcGxlbWVudHMgQmVhblBvc3RQcm9jZXNzb3IgeworCisgICAgcHJpdmF0ZSBDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gcHJvcGVydHlBbm5vdGF0aW9uVHlwZSA9IFByb3BlcnR5LmNsYXNzOworCisgICAgcHJpdmF0ZSBQcm9wZXJ0eVZhbHVlU3R1YiBwcm9wZXJ0eVZhbHVlOworCisgICAgcHVibGljIFByb3BlcnR5QW5ub3RhdGlvblByb2Nlc3NvcihQcm9wZXJ0eVZhbHVlU3R1YiBwcm9wZXJ0eVZhbHVlKSB7CisgICAgICAgIHRoaXMucHJvcGVydHlWYWx1ZSA9IHByb3BlcnR5VmFsdWU7CisgICAgfQorCisgICAgLyoqCisgICAgICogR2V0cyBwcm9wZXJ0eSBhbm5vdGF0aW9uIHR5cGUuCisgICAgICovCisgICAgcHJvdGVjdGVkIENsYXNzPD8gZXh0ZW5kcyBBbm5vdGF0aW9uPiBnZXRQcm9wZXJ0eUFubm90YXRpb25UeXBlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eUFubm90YXRpb25UeXBlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFNldHMgcHJvcGVydHkgYW5ub3RhdGlvbiB0eXBlLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHNldFByb3BlcnR5QW5ub3RhdGlvblR5cGUoQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IHByb3BlcnR5QW5ub3RhdGlvblR5cGUpIHsKKyAgICAgICAgQXNzZXJ0Lm5vdE51bGwocHJvcGVydHlBbm5vdGF0aW9uVHlwZSwgIidwcm9wZXJ0eUFubm90YXRpb25UeXBlJyB0eXBlIG11c3Qgbm90IGJlIG51bGwuIik7CisgICAgICAgIHRoaXMucHJvcGVydHlBbm5vdGF0aW9uVHlwZSA9IHByb3BlcnR5QW5ub3RhdGlvblR5cGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBleGVjdXRlIGJlZm9yZSBhIGJlYW4ncyBpbml0aWFsaXphdGlvbiBjYWxsYmFjay4KKyAgICAgKiAKKyAgICAgKiBAc2VlIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3IjcG9zdFByb2Nlc3NCZWZvcmVJbml0aWFsaXphdGlvbihqYXZhLmxhbmcuT2JqZWN0LCBqYXZhLmxhbmcuU3RyaW5nKQorICAgICAqLworICAgIHB1YmxpYyBPYmplY3QgcG9zdFByb2Nlc3NCZWZvcmVJbml0aWFsaXphdGlvbihPYmplY3QgYmVhbiwgU3RyaW5nIGJlYW5OYW1lKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICBwcm9jZXNzQW5ub3RhdGlvbihiZWFuKTsKKyAgICAgICAgcmV0dXJuIGJlYW47CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBleGVjdXRlIGFmdGVyIGEgYmVhbidzIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrLgorICAgICAqIAorICAgICAqIEBzZWUgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZy5CZWFuUG9zdFByb2Nlc3NvciNwb3N0UHJvY2Vzc0FmdGVySW5pdGlhbGl6YXRpb24oamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQWZ0ZXJJbml0aWFsaXphdGlvbihPYmplY3QgYmVhbiwgU3RyaW5nIGJlYW5OYW1lKSB0aHJvd3MgQmVhbnNFeGNlcHRpb24geworICAgICAgICByZXR1cm4gYmVhbjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiA8cD5Qcm9jZXNzZXMgYSBiZWFucyBmaWVsZHMgZm9yIGluamVjdGlvbiBpZiBpdCBoYXMgYSB7QGxpbmsgUHJvcGVydHl9IGFubm90YXRpb24uPC9wPgorICAgICAqLworICAgIHByb3RlY3RlZCB2b2lkIHByb2Nlc3NBbm5vdGF0aW9uKGZpbmFsIE9iamVjdCBiZWFuKSB7CisKKyAgICAgICAgZmluYWwgQ2xhc3M8Pz4gY2xhenogPSBiZWFuLmdldENsYXNzKCk7CisKKyAgICAgICAgUmVmbGVjdGlvblV0aWxzLmRvV2l0aE1ldGhvZHMoY2xhenosIG5ldyBSZWZsZWN0aW9uVXRpbHMuTWV0aG9kQ2FsbGJhY2soKSB7CisgICAgICAgICAgICBwdWJsaWMgdm9pZCBkb1dpdGgoTWV0aG9kIG1ldGhvZCkgeworCisgICAgICAgICAgICAgICAgUHJvcGVydHkgYW5ub3RhdGlvbiA9IChQcm9wZXJ0eSltZXRob2QuZ2V0QW5ub3RhdGlvbihnZXRQcm9wZXJ0eUFubm90YXRpb25UeXBlKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGFubm90YXRpb24gIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNTdGF0aWMobWV0aG9kLmdldE1vZGlmaWVycygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiUHJvcGVydHkgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHN0YXRpYyBtZXRob2RzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNQcml2YXRlKG1ldGhvZC5nZXRNb2RpZmllcnMoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlByb3BlcnR5IGFubm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBwcml2YXRlIG1ldGhvZHMiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiUHJvcGVydHkgYW5ub3RhdGlvbiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQ6ICIgKyBtZXRob2QpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHBkID0gQmVhblV0aWxzLmZpbmRQcm9wZXJ0eUZvck1ldGhvZChtZXRob2QpOworICAgICAgICAgICAgICAgICAgICBpZiAocGQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHByb3BOYW1lID0gYW5ub3RhdGlvbi5uYW1lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIiIuZXF1YWxzKHByb3BOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluamVjdFByb3BlcnR5KGJlYW4sIHBkLCBwcm9wZXJ0eVZhbHVlLmdldFByb3BlcnR5T2JqKHBkLmdldFByb3BlcnR5VHlwZSgpLCBwZC5nZXROYW1lKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5qZWN0UHJvcGVydHkoYmVhbiwgcGQsIHByb3BlcnR5VmFsdWUuZ2V0UHJvcGVydHlPYmoocGQuZ2V0UHJvcGVydHlUeXBlKCksIHByb3BOYW1lKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIFJlZmxlY3Rpb25VdGlscy5kb1dpdGhGaWVsZHMoY2xhenosIG5ldyBSZWZsZWN0aW9uVXRpbHMuRmllbGRDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRvV2l0aChGaWVsZCBmaWVsZCkgeworCisgICAgICAgICAgICAgICAgUHJvcGVydHkgYW5ub3RhdGlvbiA9IChQcm9wZXJ0eSlmaWVsZC5nZXRBbm5vdGF0aW9uKGdldFByb3BlcnR5QW5ub3RhdGlvblR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChNb2RpZmllci5pc1N0YXRpYyhmaWVsZC5nZXRNb2RpZmllcnMoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlByb3BlcnR5IGFubm90YXRpb24gaXMgbm90IHN1cHBvcnRlZCBvbiBzdGF0aWMgZmllbGRzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNQcml2YXRlKGZpZWxkLmdldE1vZGlmaWVycygpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiUHJvcGVydHkgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHByaXZhdGUgZmllbGRzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICBSZWZsZWN0aW9uVXRpbHMubWFrZUFjY2Vzc2libGUoZmllbGQpOworCisgICAgICAgICAgICAgICAgICAgIE9iamVjdCBwcm9wZXJ0eU9iaiA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwcm9wTmFtZSA9IGFubm90YXRpb24ubmFtZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoIiIuZXF1YWxzKHByb3BOYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlPYmogPSBwcm9wZXJ0eVZhbHVlLmdldFByb3BlcnR5T2JqKGZpZWxkLmdldFR5cGUoKSwgZmllbGQuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5T2JqID0gcHJvcGVydHlWYWx1ZS5nZXRQcm9wZXJ0eU9iaihmaWVsZC5nZXRUeXBlKCksIHByb3BOYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eU9iaiAhPSBudWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgUmVmbGVjdGlvblV0aWxzLnNldEZpZWxkKGZpZWxkLCBiZWFuLCBwcm9wZXJ0eU9iaik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBpbmplY3RQcm9wZXJ0eShPYmplY3QgYmVhbiwgUHJvcGVydHlEZXNjcmlwdG9yIHBkLCBPYmplY3QgcHJvcGVydHlPYmopIHsKKworICAgICAgICBpZiAocHJvcGVydHlPYmogIT0gbnVsbCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBwZC5nZXRXcml0ZU1ldGhvZCgpLmludm9rZShiZWFuLCBuZXcgT2JqZWN0W10ge3Byb3BlcnR5T2JqfSk7CisgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBGYXRhbEJlYW5FeGNlcHRpb24oIlByb2JsZW0gaW5qZWN0aW5nIHByb3BlcnR5OiAgIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Qcm9wZXJ0eVZhbHVlU3R1Yi5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9Qcm9wZXJ0eVZhbHVlU3R1Yi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNGI1N2MKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvdGllL1Byb3BlcnR5VmFsdWVTdHViLmphdmEKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IudGllOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOworCisvKioKKyAqIFRoaXMgaXMgdGhlIFNwcmluZyBydW50aW1lIHNpZGUgc3R1YiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgVHVzY2FueSB0aWUgY2xhc3MuCisgKiBJdCBlbmFibGVzIHRoZSBUdXNjYW55IGNvZGUgdG8gaW52b2tlIG1ldGhvZHMgb24gYSBTcHJpbmcgY29udGV4dCB3aXRob3V0CisgKiBuZWVkaW5nIHRvIGtub3cgYWJvdXQgYW55IFNwcmluZyBjbGFzc2VzLiBTZWUgdGhlIFByb3BlcnR5VmFsdWVUaWUgY2xhc3MKKyAqIGluIHRoZSBpbXBsZW1lbnRhdGlvbi1zcHJpbmcgbW9kdWxlIGZvciB3aGF0IHRoZSB0aWUgZG9lcy4gCisgKi8KK3B1YmxpYyBjbGFzcyBQcm9wZXJ0eVZhbHVlU3R1YiB7CisKKyAgICBwcml2YXRlIE9iamVjdCB0aWU7CisgICAgcHJpdmF0ZSBNZXRob2QgZ2V0UHJvcGVydHlPYmo7CisKKyAgICBwdWJsaWMgUHJvcGVydHlWYWx1ZVN0dWIoT2JqZWN0IHRpZSkgeworICAgICAgICB0aGlzLnRpZSA9IHRpZTsKKyAgICAgICAgQ2xhc3M8Pz4gdGllQ2xhc3MgPSB0aWUuZ2V0Q2xhc3MoKTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGdldFByb3BlcnR5T2JqID0gdGllQ2xhc3MuZ2V0TWV0aG9kKCJnZXRQcm9wZXJ0eU9iaiIsIG5ldyBDbGFzczw/PltdIHtDbGFzcy5jbGFzcywgU3RyaW5nLmNsYXNzfSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHlPYmooQ2xhc3M8Pz4gcHJvcGVydHlUeXBlLCBTdHJpbmcgbmFtZSkgeworICAgICAgICB0cnkgeworCisgICAgICAgICAgICByZXR1cm4gZ2V0UHJvcGVydHlPYmouaW52b2tlKHRpZSwgcHJvcGVydHlUeXBlLCBuYW1lKTsKKworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci90aWUvUmVmZXJlbmNlQW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvcHJvY2Vzc29yL3RpZS9SZWZlcmVuY2VBbm5vdGF0aW9uUHJvY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ3NjFkMgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci90aWUvUmVmZXJlbmNlQW5ub3RhdGlvblByb2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsMTY3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5wcm9jZXNzb3IudGllOworCitpbXBvcnQgamF2YS5iZWFucy5Qcm9wZXJ0eURlc2NyaXB0b3I7CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5VdGlsczsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLkJlYW5zRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuRmF0YWxCZWFuRXhjZXB0aW9uOworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay51dGlsLkFzc2VydDsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLnV0aWwuUmVmbGVjdGlvblV0aWxzOworCitwdWJsaWMgY2xhc3MgUmVmZXJlbmNlQW5ub3RhdGlvblByb2Nlc3NvciBpbXBsZW1lbnRzIEJlYW5Qb3N0UHJvY2Vzc29yIHsKKworICAgIHByaXZhdGUgQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IHJlZmVyZW5jZUFubm90YXRpb25UeXBlID0gUmVmZXJlbmNlLmNsYXNzOworICAgIHByaXZhdGUgQ29tcG9uZW50U3R1YiBjb21wb25lbnQ7CisKKyAgICBwdWJsaWMgUmVmZXJlbmNlQW5ub3RhdGlvblByb2Nlc3NvcihDb21wb25lbnRTdHViIGNvbXBvbmVudCkgeworICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHJlZmVyZWNlIGFubm90YXRpb24gdHlwZS4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgQ2xhc3M8PyBleHRlbmRzIEFubm90YXRpb24+IGdldFJlZmVyZW5jZUFubm90YXRpb25UeXBlKCkgeworICAgICAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2VBbm5vdGF0aW9uVHlwZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTZXRzIHJlZmVyZWNlIGFubm90YXRpb24gdHlwZS4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBzZXRSZWZlcmVuY2VBbm5vdGF0aW9uVHlwZShDbGFzczw/IGV4dGVuZHMgQW5ub3RhdGlvbj4gcmVmZXJlbmNlQW5ub3RhdGlvblR5cGUpIHsKKyAgICAgICAgQXNzZXJ0Lm5vdE51bGwocmVmZXJlbmNlQW5ub3RhdGlvblR5cGUsICIncmVmZXJlbmNlQW5ub3RhdGlvblR5cGUnIHR5cGUgbXVzdCBub3QgYmUgbnVsbC4iKTsKKyAgICAgICAgdGhpcy5yZWZlcmVuY2VBbm5vdGF0aW9uVHlwZSA9IHJlZmVyZW5jZUFubm90YXRpb25UeXBlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZXhlY3V0ZSBiZWZvcmUgYSBiZWFuJ3MgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2suCisgICAgICogCisgICAgICogQHNlZSBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuY29uZmlnLkJlYW5Qb3N0UHJvY2Vzc29yI3Bvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oamF2YS5sYW5nLk9iamVjdCwgamF2YS5sYW5nLlN0cmluZykKKyAgICAgKi8KKyAgICBwdWJsaWMgT2JqZWN0IHBvc3RQcm9jZXNzQmVmb3JlSW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICAgICAgcHJvY2Vzc0Fubm90YXRpb24oYmVhbik7CisgICAgICAgIHJldHVybiBiZWFuOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZXhlY3V0ZSBhZnRlciBhIGJlYW4ncyBpbml0aWFsaXphdGlvbiBjYWxsYmFjay4KKyAgICAgKiAKKyAgICAgKiBAc2VlIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS5jb25maWcuQmVhblBvc3RQcm9jZXNzb3IjcG9zdFByb2Nlc3NBZnRlckluaXRpYWxpemF0aW9uKGphdmEubGFuZy5PYmplY3QsIGphdmEubGFuZy5TdHJpbmcpCisgICAgICovCisgICAgcHVibGljIE9iamVjdCBwb3N0UHJvY2Vzc0FmdGVySW5pdGlhbGl6YXRpb24oT2JqZWN0IGJlYW4sIFN0cmluZyBiZWFuTmFtZSkgdGhyb3dzIEJlYW5zRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIGJlYW47CisgICAgfQorCisgICAgLyoqCisgICAgICogPHA+UHJvY2Vzc2VzIGEgYmVhbnMgZmllbGRzIGZvciBpbmplY3Rpb24gaWYgaXQgaGFzIGEge0BsaW5rIFJlZmVyZW5jZX0gYW5ub3RhdGlvbi48L3A+CisgICAgICovCisgICAgcHJvdGVjdGVkIHZvaWQgcHJvY2Vzc0Fubm90YXRpb24oZmluYWwgT2JqZWN0IGJlYW4pIHsKKworICAgICAgICBmaW5hbCBDbGFzczw/PiBjbGF6eiA9IGJlYW4uZ2V0Q2xhc3MoKTsKKworICAgICAgICBSZWZsZWN0aW9uVXRpbHMuZG9XaXRoTWV0aG9kcyhjbGF6eiwgbmV3IFJlZmxlY3Rpb25VdGlscy5NZXRob2RDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRvV2l0aChNZXRob2QgbWV0aG9kKSB7CisKKyAgICAgICAgICAgICAgICBSZWZlcmVuY2UgYW5ub3RhdGlvbiA9IChSZWZlcmVuY2UpbWV0aG9kLmdldEFubm90YXRpb24oZ2V0UmVmZXJlbmNlQW5ub3RhdGlvblR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChNb2RpZmllci5pc1N0YXRpYyhtZXRob2QuZ2V0TW9kaWZpZXJzKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJSZWZlcmVuY2UgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIHN0YXRpYyBtZXRob2RzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICBpZiAoTW9kaWZpZXIuaXNQcml2YXRlKG1ldGhvZC5nZXRNb2RpZmllcnMoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJlZmVyZW5jZSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gcHJpdmF0ZSBtZXRob2RzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgYW5ub3RhdGlvbiByZXF1aXJlcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQ6ICIgKyBtZXRob2QpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgUHJvcGVydHlEZXNjcmlwdG9yIHBkID0gQmVhblV0aWxzLmZpbmRQcm9wZXJ0eUZvck1ldGhvZChtZXRob2QpOworICAgICAgICAgICAgICAgICAgICBpZiAocGQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlZk5hbWUgPSBhbm5vdGF0aW9uLm5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgiIi5lcXVhbHMocmVmTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmplY3RSZWZlcmVuY2UoYmVhbiwgcGQsIHBkLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluamVjdFJlZmVyZW5jZShiZWFuLCBwZCwgcmVmTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIFJlZmxlY3Rpb25VdGlscy5kb1dpdGhGaWVsZHMoY2xhenosIG5ldyBSZWZsZWN0aW9uVXRpbHMuRmllbGRDYWxsYmFjaygpIHsKKyAgICAgICAgICAgIHB1YmxpYyB2b2lkIGRvV2l0aChGaWVsZCBmaWVsZCkgeworCisgICAgICAgICAgICAgICAgUmVmZXJlbmNlIGFubm90YXRpb24gPSAoUmVmZXJlbmNlKWZpZWxkLmdldEFubm90YXRpb24oZ2V0UmVmZXJlbmNlQW5ub3RhdGlvblR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChNb2RpZmllci5pc1N0YXRpYyhmaWVsZC5nZXRNb2RpZmllcnMoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJlZmVyZW5jZSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gc3RhdGljIGZpZWxkcyIpOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgaWYgKE1vZGlmaWVyLmlzUHJpdmF0ZShmaWVsZC5nZXRNb2RpZmllcnMoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIlJlZmVyZW5jZSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24gcHJpdmF0ZSBmaWVsZHMiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICAgIFJlZmxlY3Rpb25VdGlscy5tYWtlQWNjZXNzaWJsZShmaWVsZCk7CisKKyAgICAgICAgICAgICAgICAgICAgT2JqZWN0IHJlZmVyZW5jZU9iaiA9IG51bGw7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyByZWZOYW1lID0gYW5ub3RhdGlvbi5uYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgiIi5lcXVhbHMocmVmTmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU9iaiA9IGNvbXBvbmVudC5nZXRTZXJ2aWNlKGZpZWxkLmdldFR5cGUoKSwgZmllbGQuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZU9iaiA9IGNvbXBvbmVudC5nZXRTZXJ2aWNlKGZpZWxkLmdldFR5cGUoKSwgcmVmTmFtZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlT2JqICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICBSZWZsZWN0aW9uVXRpbHMuc2V0RmllbGQoZmllbGQsIGJlYW4sIHJlZmVyZW5jZU9iaik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBQcm9jZXNzZXMgYSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHRvIGluamVjdCBhIHNlcnZpY2UuCisgICAgICovCisgICAgcHVibGljIHZvaWQgaW5qZWN0UmVmZXJlbmNlKE9iamVjdCBiZWFuLCBQcm9wZXJ0eURlc2NyaXB0b3IgcGQsIFN0cmluZyBuYW1lKSB7CisKKyAgICAgICAgT2JqZWN0IHJlZmVyZW5jZU9iaiA9IGNvbXBvbmVudC5nZXRTZXJ2aWNlKHBkLmdldFByb3BlcnR5VHlwZSgpLCBuYW1lKTsKKworICAgICAgICBpZiAocmVmZXJlbmNlT2JqICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcGQuZ2V0V3JpdGVNZXRob2QoKS5pbnZva2UoYmVhbiwgbmV3IE9iamVjdFtdIHtyZWZlcmVuY2VPYmp9KTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZhdGFsQmVhbkV4Y2VwdGlvbigiUHJvYmxlbSBpbmplY3RpbmcgcmVmZXJlbmNlOiAgIiArIGUuZ2V0TWVzc2FnZSgpLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3Byb2Nlc3Nvci90aWUvU3ByaW5nWE1MTG9hZGVyVGllLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvdGllL1NwcmluZ1hNTExvYWRlclRpZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYWExNzYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9wcm9jZXNzb3IvdGllL1NwcmluZ1hNTExvYWRlclRpZS5qYXZhCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcucHJvY2Vzc29yLnRpZTsKKworaW1wb3J0IGphdmEubmV0LlVSTDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmNvbnRleHQudGllLlNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnhtbC5YbWxCZWFuRGVmaW5pdGlvblJlYWRlcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29yZS5pby5VcmxSZXNvdXJjZTsKKworLyoqCisgKiBBIHRpZSB0aGF0IGFsbG93cyBUdXNjYW55IHRvIGNhbGwgU3ByaW5nIGxpYnJhcnkgdG8gbG9hZCB0aGUgYXBwbGljYXRpb24gY29udGV4dCBmb3IgdGhlIHB1cnBvc2Ugb2YgaW50cm9zcGVjdGlvbgorICovCitwdWJsaWMgY2xhc3MgU3ByaW5nWE1MTG9hZGVyVGllIHsKKworICAgIHB1YmxpYyBzdGF0aWMgQXBwbGljYXRpb25Db250ZXh0IGNyZWF0ZUFwcGxpY2F0aW9uQ29udGV4dChPYmplY3Qgc2NhUGFyZW50Q29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NMb2FkZXIgY2xhc3NMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8VVJMPiByZXNvdXJjZXMpIHsKKyAgICAgICAgaWYgKGNsYXNzTG9hZGVyID09IG51bGwpIHsKKyAgICAgICAgICAgIGNsYXNzTG9hZGVyID0gVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5nZXRDb250ZXh0Q2xhc3NMb2FkZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIFNDQUdlbmVyaWNBcHBsaWNhdGlvbkNvbnRleHQgYXBwQ3R4ID0KKyAgICAgICAgICAgIG5ldyBTQ0FHZW5lcmljQXBwbGljYXRpb25Db250ZXh0KChBcHBsaWNhdGlvbkNvbnRleHQpc2NhUGFyZW50Q29udGV4dCwgY2xhc3NMb2FkZXIpOworICAgICAgICBYbWxCZWFuRGVmaW5pdGlvblJlYWRlciB4bWxSZWFkZXIgPSBuZXcgWG1sQmVhbkRlZmluaXRpb25SZWFkZXIoYXBwQ3R4KTsKKworICAgICAgICAvLyBSRVZJRVc6IFtyZmVuZ10gSG93IGRvIHdlIGNvbnRyb2wgdGhlIHNjaGVtYSB2YWxpZGF0aW9uIAorICAgICAgICB4bWxSZWFkZXIuc2V0VmFsaWRhdGluZyhmYWxzZSk7CisKKyAgICAgICAgZm9yIChVUkwgcmVzb3VyY2UgOiByZXNvdXJjZXMpIHsKKyAgICAgICAgICAgIHhtbFJlYWRlci5sb2FkQmVhbkRlZmluaXRpb25zKG5ldyBVcmxSZXNvdXJjZShyZXNvdXJjZSkpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGFwcEN0eDsKKworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcuaGFuZGxlcnMgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy5oYW5kbGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2I2MWJmCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcuaGFuZGxlcnMKQEAgLTAsMCArMSBAQAoraHR0cFw6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvc2NhPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLm5hbWVzcGFjZS50aWUuU2NhTmFtZXNwYWNlSGFuZGxlcg0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nLnNjaGVtYXMgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy5zY2hlbWFzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0OWNjMjEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy5zY2hlbWFzCkBAIC0wLDAgKzEgQEAKK2h0dHBcOi8vd3d3Lm9zb2Eub3JnL3htbG5zL3NjYS8xLjAvc3ByaW5nLXNjYS54c2Q9b3JnL3NwcmluZ2ZyYW1ld29yay9zY2EveG1sL3NwcmluZy1zY2EueHNkCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vcmVzb3VyY2VzL29yZy9zcHJpbmdmcmFtZXdvcmsvc2NhL3htbC9zcHJpbmctc2NhLnhzZCBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL3NwcmluZ2ZyYW1ld29yay9zY2EveG1sL3NwcmluZy1zY2EueHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYTBiOTMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vcmVzb3VyY2VzL29yZy9zcHJpbmdmcmFtZXdvcmsvc2NhL3htbC9zcHJpbmctc2NhLnhzZApAQCAtMCwwICsxLDg0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICogCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICogCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHhzZDpzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvc2NhIiB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgIGF0dHJpYnV0ZUZvcm1EZWZhdWx0PSJ1bnF1YWxpZmllZCIgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiCisgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3NjYSI+CisKKyAgICA8eHNkOmVsZW1lbnQgbmFtZT0icmVmZXJlbmNlIj4KKyAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIiAvPgorICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+CisgICAgICAgICAgICA8L3hzZDphdHRyaWJ1dGU+CisgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgorICAgICAgICAgICAgPC94c2Q6YXR0cmlidXRlPgorICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iZGVmYXVsdCIgdXNlPSJvcHRpb25hbCI+CisgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KKyAgICAgICAgICAgIDwveHNkOmF0dHJpYnV0ZT4KKyAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+CisgICAgPC94c2Q6ZWxlbWVudD4KKworICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJwcm9wZXJ0eSI+CisgICAgICAgIDx4c2Q6Y29tcGxleFR5cGU+CisgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdXNlPSJvcHRpb25hbCI+CisgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KKyAgICAgICAgICAgIDwveHNkOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIiAvPgorICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+CisgICAgICAgICAgICA8L3hzZDphdHRyaWJ1dGU+CisgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0eXBlIiB1c2U9InJlcXVpcmVkIj4KKyAgICAgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGU+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICA8L3hzZDpzaW1wbGVUeXBlPgorICAgICAgICAgICAgPC94c2Q6YXR0cmlidXRlPgorICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICA8L3hzZDplbGVtZW50PgorCisgICAgPHhzZDplbGVtZW50IG5hbWU9InNlcnZpY2UiPgorICAgICAgICA8eHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdXNlPSJyZXF1aXJlZCI+CisgICAgICAgICAgICAgICAgPHhzZDpzaW1wbGVUeXBlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KKyAgICAgICAgICAgIDwveHNkOmF0dHJpYnV0ZT4KKyAgICAgICAgICAgIDx4c2Q6YXR0cmlidXRlIG5hbWU9InR5cGUiIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIiAvPgorICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+CisgICAgICAgICAgICA8L3hzZDphdHRyaWJ1dGU+CisgICAgICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ0YXJnZXQiIHVzZT0icmVxdWlyZWQiPgorICAgICAgICAgICAgICAgIDx4c2Q6c2ltcGxlVHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpyZXN0cmljdGlvbiBiYXNlPSJ4c2Q6c3RyaW5nIiAvPgorICAgICAgICAgICAgICAgIDwveHNkOnNpbXBsZVR5cGU+CisgICAgICAgICAgICA8L3hzZDphdHRyaWJ1dGU+CisgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgIDwveHNkOmVsZW1lbnQ+CisKKzwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvYmluZGluZy1yc3MtcnVudGltZS9MSUNFTlNFIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctd2ViYXBwL0xJQ0VOU0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBtb2R1bGVzL2JpbmRpbmctcnNzLXJ1bnRpbWUvTElDRU5TRQpjb3B5IHRvIG1vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9MSUNFTlNFCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy13ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy13ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDJjNTc3YgotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDI5IEBACitNYW5pZmVzdC1WZXJzaW9uOiAxLjANCitTQ0EtVmVyc2lvbjogMS4xDQorQnVuZGxlLU5hbWU6IEFwYWNoZSBUdXNjYW55IFNDQSBTcHJpbmcgSW1wbGVtZW50YXRpb24gV2ViQXBwIEludGVncmF0aW9uDQorQnVuZGxlLVZlbmRvcjogVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQorQnVuZGxlLVZlcnNpb246IDIuMC4wDQorQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMg0KK0J1bmRsZS1MaWNlbnNlOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0DQorQnVuZGxlLURlc2NyaXB0aW9uOiBBcGFjaGUgVHVzY2FueSBTQ0EgU3ByaW5nIEltcGxlbWVudGF0aW9uIFJ1bnRpbWUgTW9kZWwNCitCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy53ZWJhcHANCitCdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYKK0ltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0LA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmU7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmV4dGVuc2liaWxpdHk7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZzt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmNvbnRleHQ7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFuczt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5O3ZlcnNpb249IjMuMC4yLlJFTEVBU0UiLA0KKyBvcmcuc3ByaW5nZnJhbWV3b3JrLmJlYW5zLmZhY3RvcnkuYW5ub3RhdGlvbjt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LmNvbmZpZzt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5iZWFucy5mYWN0b3J5LnN1cHBvcnQ7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSIsDQorIG9yZy5zcHJpbmdmcmFtZXdvcmsuYmVhbnMuZmFjdG9yeS54bWw7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSIsDQorIG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dDt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQ7dmVyc2lvbj0iMy4wLjIuUkVMRUFTRSIsDQorIG9yZy5zcHJpbmdmcmFtZXdvcmsuY29yZS5pbzt2ZXJzaW9uPSIzLjAuMi5SRUxFQVNFIiwNCisgb3JnLnNwcmluZ2ZyYW1ld29yay51dGlsO3ZlcnNpb249IjMuMC4yLlJFTEVBU0UiDQorDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctd2ViYXBwL05PVElDRSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMyNWVmZAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9OT1RJQ0UKQEAgLTAsMCArMSw2IEBACiske3BvbS5uYW1lfQ0KK0NvcHlyaWdodCAoYykgMjAwNSAtIDIwMDggVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uDQorDQorVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieQ0KK1RoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuDQorDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctd2ViYXBwL3BvbS54bWwgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy13ZWJhcHAvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmFmMWNiCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctd2ViYXBwL3BvbS54bWwKQEAgLTAsMCArMSw2MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW1vZHVsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctd2ViYXBwPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTcHJpbmcgSW1wbGVtZW50YXRpb24gV2ViQXBwIEludGVncmF0aW9uPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWh0dHA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8IS0tIFNwcmluZyBkZXBlbmRlbmNpZXMuLi4gLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNwcmluZ2ZyYW1ld29yazwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNwcmluZy13ZWI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjAuMi5SRUxFQVNFPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgIAk8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPgorICAgICAgICAJPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgIAk8dmVyc2lvbj4yLjU8L3ZlcnNpb24+CisgICAgICAgIAk8dHlwZT5qYXI8L3R5cGU+CisgICAgICAgIAk8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+Cis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy93ZWJhcHAvQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3JCZWFuLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy93ZWJhcHAvQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3JCZWFuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU0ZWY4ZAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3dlYmFwcC9BcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvckJlYW4uamF2YQpAQCAtMCwwICsxLDQzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLndlYmFwcDsKKworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkNvbnRleHRBd2FyZTsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuc3VwcG9ydC5BcHBsaWNhdGlvbk9iamVjdFN1cHBvcnQ7CisKKy8qKgorICogQSBzaW5nbGV0b24gdXRpbGl0eSBjbGFzcyB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgU3ByaW5nIGFwcGxpY2F0aW9uIGNvbnRleHQgdG8gcmVjZWl2ZSBpbmplY3Rpb24gb2YgdGhlIGNvbnRhaW5pbmcKKyAqIFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0LgorICogCisgKiBUaGUgU3ByaW5nIGJlYW4gZGVmaW5pdGlvbiBmaWxlIGlzOiBvcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy93ZWJhcHAvc3ByaW5nLXdlYmFwcC1jb250ZXh0LnhtbAorICovCitwdWJsaWMgY2xhc3MgQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3JCZWFuIGV4dGVuZHMgQXBwbGljYXRpb25PYmplY3RTdXBwb3J0IGltcGxlbWVudHMgQXBwbGljYXRpb25Db250ZXh0QXdhcmUgeworICAgIHB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIEJFQU5fSUQgPSAidHVzY2FueVNwcmluZ0FwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yIjsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvckJlYW4gSU5TVEFOQ0UgPSBuZXcgQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3JCZWFuKCk7CisKKyAgICBwcml2YXRlIEFwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yQmVhbigpIHsKKyAgICB9CisKKyAgICAvLyBTcHJpbmcgc3RhdGljIGZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSB0aGUgc2luZ2xldG9uIGluc3RhbmNlCisgICAgcHVibGljIHN0YXRpYyBBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvckJlYW4gZ2V0SW5zdGFuY2UoKSB7CisgICAgICAgIHJldHVybiBJTlNUQU5DRTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3dlYmFwcC9TcHJpbmdXZWJBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvd2ViYXBwL1NwcmluZ1dlYkFwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk1YmEyNwotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3dlYmFwcC9TcHJpbmdXZWJBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3Nvci5qYXZhCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcud2ViYXBwOworCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0Q29udGV4dDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5MaWZlQ3ljbGVMaXN0ZW5lcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3QuaHR0cC5FeHRlbnNpYmxlU2VydmxldEhvc3Q7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC5TcHJpbmdBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvcjsKK2ltcG9ydCBvcmcuc3ByaW5nZnJhbWV3b3JrLmNvbnRleHQuQXBwbGljYXRpb25Db250ZXh0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuc3VwcG9ydC5XZWJBcHBsaWNhdGlvbkNvbnRleHRVdGlsczsKKworcHVibGljIGNsYXNzIFNwcmluZ1dlYkFwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yIGltcGxlbWVudHMgU3ByaW5nQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3IsIExpZmVDeWNsZUxpc3RlbmVyIHsKKyAgICBwcml2YXRlIHN0YXRpYyBMb2dnZXIgbG9nID0gTG9nZ2VyLmdldExvZ2dlcihTcHJpbmdXZWJBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3Nvci5jbGFzcy5nZXROYW1lKCkpOworICAgIHByaXZhdGUgRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeTsKKyAgICBwcml2YXRlIEFwcGxpY2F0aW9uQ29udGV4dCBwYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQ7CisKKyAgICBwdWJsaWMgU3ByaW5nV2ViQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3IoRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSkgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLnJlZ2lzdHJ5ID0gcmVnaXN0cnk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc3RhcnQoKSB7CisgICAgICAgIEV4dGVuc2libGVTZXJ2bGV0SG9zdCBzZXJ2bGV0SG9zdCA9IEV4dGVuc2libGVTZXJ2bGV0SG9zdC5nZXRJbnN0YW5jZShyZWdpc3RyeSk7CisKKyAgICAgICAgU2VydmxldENvbnRleHQgc2VydmxldENvbnRleHQgPSBzZXJ2bGV0SG9zdC5nZXRTZXJ2bGV0Q29udGV4dCgpOworICAgICAgICBpZiAoc2VydmxldENvbnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgcGFyZW50QXBwbGljYXRpb25Db250ZXh0ID0gV2ViQXBwbGljYXRpb25Db250ZXh0VXRpbHMuZ2V0V2ViQXBwbGljYXRpb25Db250ZXh0KHNlcnZsZXRDb250ZXh0KTsKKyAgICAgICAgICAgIGlmIChwYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGxvZy5pbmZvKCJTcHJpbmcgV2ViQXBwbGljYXRpb25Db250ZXh0IGlzIG5vdyBpbmplY3RlZCBvbiBUdXNjYW55Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocGFyZW50QXBwbGljYXRpb25Db250ZXh0ID09IG51bGwpIHsKKyAgICAgICAgICAgIHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCA9IEFwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yQmVhbi5nZXRJbnN0YW5jZSgpLmdldEFwcGxpY2F0aW9uQ29udGV4dCgpOworICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKKyAgICAgICAgcGFyZW50QXBwbGljYXRpb25Db250ZXh0ID0gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgQXBwbGljYXRpb25Db250ZXh0IGdldFBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCgpIHsKKyAgICAgICAgcmV0dXJuIHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dDsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRQYXJlbnRBcHBsaWNhdGlvbkNvbnRleHQoQXBwbGljYXRpb25Db250ZXh0IHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCkgeworICAgICAgICB0aGlzLnBhcmVudEFwcGxpY2F0aW9uQ29udGV4dCA9IHBhcmVudEFwcGxpY2F0aW9uQ29udGV4dDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC5TcHJpbmdBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvciBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuY29udGV4dC5TcHJpbmdBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDZiMDJjCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctd2ViYXBwL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5jb250ZXh0LlNwcmluZ0FwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yCkBAIC0wLDAgKzEsMTcgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLiAKK29yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLndlYmFwcC5TcHJpbmdXZWJBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvd2ViYXBwL3NwcmluZy13ZWJhcHAtY29udGV4dC54bWwgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy13ZWJhcHAvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3dlYmFwcC9zcHJpbmctd2ViYXBwLWNvbnRleHQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ODM3NGEKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy13ZWJhcHAvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3dlYmFwcC9zcHJpbmctd2ViYXBwLWNvbnRleHQueG1sCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucy9zcHJpbmctYmVhbnMtMy4wLnhzZCI+CisKKyAgICA8YmVhbiBpZD0idHVzY2FueVNwcmluZ0FwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yIgorICAgICAgICBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcud2ViYXBwLkFwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yQmVhbiIKKyAgICAgICAgc2NvcGU9InNpbmdsZXRvbiIgZmFjdG9yeS1tZXRob2Q9ImdldEluc3RhbmNlIj4KKyAgICA8L2JlYW4+CisgICAgCis8L2JlYW5zPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctd2ViYXBwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvd2ViYXBwL0FwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yVGVzdENhc2UuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3dlYmFwcC9BcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE1YWU4OAotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3dlYmFwcC9BcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvclRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy53ZWJhcHA7CisKK2ltcG9ydCBvcmcuanVuaXQuQXNzZXJ0OworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5zcHJpbmdmcmFtZXdvcmsuY29udGV4dC5BcHBsaWNhdGlvbkNvbnRleHQ7CitpbXBvcnQgb3JnLnNwcmluZ2ZyYW1ld29yay5jb250ZXh0LnN1cHBvcnQuQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0OworCitwdWJsaWMgY2xhc3MgQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3JUZXN0Q2FzZSB7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RDb250ZXh0KCkgeworICAgICAgICBBcHBsaWNhdGlvbkNvbnRleHQgY29udGV4dCA9CisgICAgICAgICAgICBuZXcgQ2xhc3NQYXRoWG1sQXBwbGljYXRpb25Db250ZXh0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3RyaW5nW10geyJvcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy93ZWJhcHAvc3ByaW5nLXdlYmFwcC1jb250ZXh0LnhtbCJ9KTsKKyAgICAgICAgT2JqZWN0IGFjY2Vzc29yID0gY29udGV4dC5nZXRCZWFuKEFwcGxpY2F0aW9uQ29udGV4dEFjY2Vzc29yQmVhbi5CRUFOX0lEKTsKKyAgICAgICAgQXNzZXJ0LmFzc2VydFNhbWUoQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3JCZWFuLmdldEluc3RhbmNlKCksIGFjY2Vzc29yKTsKKyAgICAgICAgQXBwbGljYXRpb25Db250ZXh0QWNjZXNzb3JCZWFuIGNvbnRleHRBY2Nlc3NvciA9IChBcHBsaWNhdGlvbkNvbnRleHRBY2Nlc3NvckJlYW4pYWNjZXNzb3I7CisgICAgICAgIEFzc2VydC5hc3NlcnRTYW1lKGNvbnRleHQsIGNvbnRleHRBY2Nlc3Nvci5nZXRBcHBsaWNhdGlvbkNvbnRleHQoKSk7CisKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggOTg4NzE4Yi4uOTIyNmIwNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTEzLDYgKzEzLDcgQEAKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmJ1aWxkZXI7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGw7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udGV4dDt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb2x2ZXI7dmVyc2lvbj0iMi4wLjAiLA0KQEAgLTM5LDE1ICs0MCwxMSBAQAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcNCiBCdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYKLUV4cG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZzt2ZXJzaW9uPSIyLjAuMCI7DQotICB1c2VzOj0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseSwNCi0gICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGwsDQotICAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYsDQotICAgamF2YXgueG1sLm5hbWVzcGFjZSIsDQotIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmludHJvc3BlY3Q7dmVyc2lvbj0iMi4wLjAiOw0KLSAgdXNlczo9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHksDQotICAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QsDQorRXhwb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sO3ZlcnNpb249IjIuMC4wIjsNCisgIHVzZXM6PSJqYXZheC54bWwuc3RyZWFtLA0KKyAgIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLA0KICAgIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLA0KLSAgIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YSwNCi0gICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeSwNCi0gICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhIg0KKyAgIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3NvciwNCisgICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUsDQorICAgamF2YXgueG1sLm5hbWVzcGFjZSINCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9wb20ueG1sIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvcG9tLnhtbAppbmRleCBjMDgzNzhlLi4yMTVmM2IyIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9wb20ueG1sCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3BvbS54bWwKQEAgLTI4LDE3ICsyOCw3IEBACiAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmc8L2FydGlmYWN0SWQ+CiAgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNwcmluZyBJbXBsZW1lbnRhdGlvbiBNb2RlbDwvbmFtZT4KIAotICAgIDxkZXBlbmRlbmNpZXM+Ci0KLSAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPiAgICAKLSAgICAgICAgPCEtLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tPiAgICAKLSAgICAgICAgPCEtLSAqIERPTlQgQUREIEFOWSBTUFJJTkcgREVQRU5ERU5DSUVTISEhICAqIC0tPiAgICAKLSAgICAgICAgPCEtLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tPiAgICAKLSAgICAgICAgPCEtLSAqIFNlZSB0aGUgUkVBRE1FIGZvciBkZXRhaWxzIHdoeSBub3QgICAqIC0tPiAgICAKLSAgICAgICAgPCEtLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tPiAgICAKLSAgICAgICAgPCEtLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tPiAgICAKLSAgICAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPiAgICAKLSAgIAorICAgIDxkZXBlbmRlbmNpZXM+ICAgCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+CkBAIC02MSw3ICs1MSw3IEBACiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmE8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICAgIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdCZWFuRWxlbWVudC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdCZWFuRWxlbWVudC5qYXZhCmluZGV4IGY2NGM1ZjkuLjY0YjM2YTAgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvU3ByaW5nQmVhbkVsZW1lbnQuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ0JlYW5FbGVtZW50LmphdmEKQEAgLTM3LDEwICszNywxMyBAQAogICAgIHByaXZhdGUgYm9vbGVhbiBwYXJlbnRBdHRyaWJ1dGUgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gZmFjdG9yeUJlYW5BdHRyaWJ1dGUgPSBmYWxzZTsKICAgICBwcml2YXRlIGJvb2xlYW4gZmFjdG9yeU1ldGhvZEF0dHJpYnV0ZSA9IGZhbHNlOwotICAgIAorCiAgICAgcHJpdmF0ZSBMaXN0PFNwcmluZ1Byb3BlcnR5RWxlbWVudD4gcHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nUHJvcGVydHlFbGVtZW50PigpOwogICAgIHByaXZhdGUgTGlzdDxTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQ+IGNvbnN0cnVjdG9yYXJncyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50PigpOwogCisgICAgcHVibGljIFNwcmluZ0JlYW5FbGVtZW50KCkgeworICAgIH0KKyAgICAKICAgICBwdWJsaWMgU3ByaW5nQmVhbkVsZW1lbnQoU3RyaW5nIGlkLCBTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICAgICAgIHRoaXMuaWQgPSBpZDsKICAgICAgICAgdGhpcy5jbGFzc05hbWUgPSBjbGFzc05hbWU7CkBAIC01Myw3ICs1Niw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXRJZCgpIHsKICAgICAgICAgcmV0dXJuIGlkOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldElkKFN0cmluZyBpZCkgewogICAgICAgICB0aGlzLmlkID0gaWQ7CiAgICAgfQpAQCAtNjUsNyArNjgsNyBAQAogICAgIHB1YmxpYyB2b2lkIGFkZFByb3BlcnR5KFNwcmluZ1Byb3BlcnR5RWxlbWVudCBwcm9wZXJ0eSkgewogICAgICAgICBwcm9wZXJ0aWVzLmFkZChwcm9wZXJ0eSk7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIExpc3Q8U3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50PiBnZXRDdXN0cnVjdG9yQXJncygpIHsKICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yYXJnczsKICAgICB9CkBAIC03Myw0NSArNzYsNTcgQEAKICAgICBwdWJsaWMgdm9pZCBhZGRDdXN0cnVjdG9yQXJncyhTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQgYXJncykgewogICAgICAgICBjb25zdHJ1Y3RvcmFyZ3MuYWRkKGFyZ3MpOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGlzSW5uZXJCZWFuKCkgewogICAgICAgICByZXR1cm4gaW5uZXJCZWFuOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldElubmVyQmVhbihib29sZWFuIGlubmVyQmVhbikgewogICAgICAgICB0aGlzLmlubmVyQmVhbiA9IGlubmVyQmVhbjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBpc0Fic3RyYWN0QmVhbigpIHsKICAgICAgICAgcmV0dXJuIGFic3RyYWN0QmVhbjsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRBYnN0cmFjdEJlYW4oYm9vbGVhbiBhYnN0cmFjdEJlYW4pIHsKICAgICAgICAgdGhpcy5hYnN0cmFjdEJlYW4gPSBhYnN0cmFjdEJlYW47CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIGJvb2xlYW4gaGFzUGFyZW50QXR0cmlidXRlKCkgewogICAgICAgICByZXR1cm4gcGFyZW50QXR0cmlidXRlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFBhcmVudEF0dHJpYnV0ZShib29sZWFuIHBhcmVudEF0dHJpYnV0ZSkgewogICAgICAgICB0aGlzLnBhcmVudEF0dHJpYnV0ZSA9IHBhcmVudEF0dHJpYnV0ZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgYm9vbGVhbiBoYXNGYWN0b3J5QmVhbkF0dHJpYnV0ZSgpIHsKICAgICAgICAgcmV0dXJuIGZhY3RvcnlCZWFuQXR0cmlidXRlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEZhY3RvcnlCZWFuQXR0cmlidXRlKGJvb2xlYW4gZmFjdG9yeUJlYW5BdHRyaWJ1dGUpIHsKICAgICAgICAgdGhpcy5mYWN0b3J5QmVhbkF0dHJpYnV0ZSA9IGZhY3RvcnlCZWFuQXR0cmlidXRlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBib29sZWFuIGhhc0ZhY3RvcnlNZXRob2RBdHRyaWJ1dGUoKSB7CiAgICAgICAgIHJldHVybiBmYWN0b3J5TWV0aG9kQXR0cmlidXRlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldEZhY3RvcnlNZXRob2RBdHRyaWJ1dGUoYm9vbGVhbiBmYWN0b3J5TWV0aG9kQXR0cmlidXRlKSB7CiAgICAgICAgIHRoaXMuZmFjdG9yeU1ldGhvZEF0dHJpYnV0ZSA9IGZhY3RvcnlNZXRob2RBdHRyaWJ1dGU7CiAgICAgfQogCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlNwcmluZ0JlYW5FbGVtZW50IFtpZD0iKS5hcHBlbmQoaWQpLmFwcGVuZCgiLCBjbGFzc05hbWU9IikuYXBwZW5kKGNsYXNzTmFtZSkKKyAgICAgICAgICAgIC5hcHBlbmQoIiwgaW5uZXJCZWFuPSIpLmFwcGVuZChpbm5lckJlYW4pLmFwcGVuZCgiLCBhYnN0cmFjdEJlYW49IikuYXBwZW5kKGFic3RyYWN0QmVhbikKKyAgICAgICAgICAgIC5hcHBlbmQoIiwgcGFyZW50QXR0cmlidXRlPSIpLmFwcGVuZChwYXJlbnRBdHRyaWJ1dGUpLmFwcGVuZCgiLCBmYWN0b3J5QmVhbkF0dHJpYnV0ZT0iKQorICAgICAgICAgICAgLmFwcGVuZChmYWN0b3J5QmVhbkF0dHJpYnV0ZSkuYXBwZW5kKCIsIGZhY3RvcnlNZXRob2RBdHRyaWJ1dGU9IikuYXBwZW5kKGZhY3RvcnlNZXRob2RBdHRyaWJ1dGUpCisgICAgICAgICAgICAuYXBwZW5kKCIsIHByb3BlcnRpZXM9IikuYXBwZW5kKHByb3BlcnRpZXMpLmFwcGVuZCgiLCBjb25zdHJ1Y3RvcmFyZ3M9IikuYXBwZW5kKGNvbnN0cnVjdG9yYXJncykKKyAgICAgICAgICAgIC5hcHBlbmQoIl0iKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKIH0gLy8gZW5kIGNsYXNzIFNwcmluZ0JlYW5FbGVtZW50CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQuamF2YQppbmRleCA5YWUxMjczLi4xZGUwNTk1IDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudC5qYXZhCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvU3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50LmphdmEKQEAgLTI4LDQ1ICsyOCw0OSBAQAogICogQHZlcnNpb24gJFJldiQgJERhdGUkCiAgKi8KIHB1YmxpYyBjbGFzcyBTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQgewotICAgIAotCXByaXZhdGUgU3RyaW5nIHR5cGU7CisKKyAgICBwcml2YXRlIFN0cmluZyB0eXBlOwogICAgIHByaXZhdGUgaW50IGF1dG9JbmRleCA9IC0xOwogICAgIHByaXZhdGUgaW50IGluZGV4ID0gLTE7CiAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gcmVmcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogCisgICAgcHVibGljIFNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudCgpIHsKKyAgICAgICAgCisgICAgfQorICAgIAogICAgIHB1YmxpYyBTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0aGlzLnR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRSZWZzKCkgewogICAgICAgICByZXR1cm4gdGhpcy5yZWZzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZFJlZihTdHJpbmcgcmVmKSB7CiAgICAgICAgIHRoaXMucmVmcy5hZGQocmVmKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgaW50IGdldEluZGV4KCkgewogICAgICAgICByZXR1cm4gdGhpcy5pbmRleDsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRJbmRleChpbnQgaW5kZXgpIHsKICAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBpbnQgZ2V0QXV0b0luZGV4KCkgewogICAgICAgICByZXR1cm4gdGhpcy5hdXRvSW5kZXg7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0QXV0b0luZGV4KGludCBpbmRleCkgewogICAgICAgICB0aGlzLmF1dG9JbmRleCA9IGluZGV4OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBMaXN0PFN0cmluZz4gZ2V0VmFsdWVzKCkgewogICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXM7CiAgICAgfQpAQCAtNzQsNCArNzgsMTMgQEAKICAgICBwdWJsaWMgdm9pZCBhZGRWYWx1ZShTdHJpbmcgdmFsdWUpIHsKICAgICAgICAgdGhpcy52YWx1ZXMuYWRkKHZhbHVlKTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiU3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50IFt0eXBlPSIpLmFwcGVuZCh0eXBlKS5hcHBlbmQoIiwgYXV0b0luZGV4PSIpLmFwcGVuZChhdXRvSW5kZXgpCisgICAgICAgICAgICAuYXBwZW5kKCIsIGluZGV4PSIpLmFwcGVuZChpbmRleCkuYXBwZW5kKCIsIHJlZnM9IikuYXBwZW5kKHJlZnMpLmFwcGVuZCgiLCB2YWx1ZXM9IikuYXBwZW5kKHZhbHVlcykKKyAgICAgICAgICAgIC5hcHBlbmQoIl0iKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ0ltcGxlbWVudGF0aW9uLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ0ltcGxlbWVudGF0aW9uLmphdmEKaW5kZXggN2E3M2Y3OS4uYTVkNGFkYiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdJbXBsZW1lbnRhdGlvbi5qYXZhCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvU3ByaW5nSW1wbGVtZW50YXRpb24uamF2YQpAQCAtMTksOCArMTksOSBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZzsKIAogaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaHRhYmxlOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CiAKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogCkBAIC0zMyw4ICszNCw2IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5TZXJ2aWNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuaW1wbC5JbXBsZW1lbnRhdGlvbkltcGw7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlQ29udHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7Ci0KIAogLyoqCiAgKiBSZXByZXNlbnRzIGEgU3ByaW5nIGltcGxlbWVudGF0aW9uLgpAQCAtNDksMTEgKzQ4LDExIEBACiAgICAgcHJpdmF0ZSBMaXN0PFVSTD4gcmVzb3VyY2U7CiAgICAgcHJpdmF0ZSBDb21wb25lbnRUeXBlIGNvbXBvbmVudFR5cGU7CiAgICAgLy8gTWFwcGluZyBvZiBTZXJ2aWNlcyB0byBCZWFucwotICAgIHByaXZhdGUgSGFzaHRhYmxlPFN0cmluZywgU3ByaW5nQmVhbkVsZW1lbnQ+IHNlcnZpY2VNYXA7CisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBTcHJpbmdCZWFuRWxlbWVudD4gc2VydmljZU1hcDsKICAgICAvLyBNYXBwaW5nIG9mIHByb3BlcnR5IG5hbWVzIHRvIEphdmEgY2xhc3MKLSAgICBwcml2YXRlIEhhc2h0YWJsZTxTdHJpbmcsIENsYXNzPD8+PiBwcm9wZXJ0eU1hcDsKKyAgICBwcml2YXRlIE1hcDxTdHJpbmcsIENsYXNzPD8+PiBwcm9wZXJ0eU1hcDsKICAgICAvLyBMaXN0IG9mIHVucmVzb2x2ZWQgYmVhbiBwcm9wZXJ0eSByZWZlcmVuY2VzCi0gICAgcHJpdmF0ZSBIYXNodGFibGU8U3RyaW5nLCBSZWZlcmVuY2U+IHVucmVzb2x2ZWRCZWFuUmVmOworICAgIHByaXZhdGUgTWFwPFN0cmluZywgUmVmZXJlbmNlPiB1bnJlc29sdmVkQmVhblJlZjsKICAgICBwcml2YXRlIENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyOwogCiAgICAgcHVibGljIFNwcmluZ0ltcGxlbWVudGF0aW9uKCkgewpAQCAtNjEsOSArNjAsOSBAQAogICAgICAgICB0aGlzLmxvY2F0aW9uID0gbnVsbDsKICAgICAgICAgdGhpcy5yZXNvdXJjZSA9IG51bGw7CiAgICAgICAgIHNldFVucmVzb2x2ZWQodHJ1ZSk7Ci0gICAgICAgIHNlcnZpY2VNYXAgPSBuZXcgSGFzaHRhYmxlPFN0cmluZywgU3ByaW5nQmVhbkVsZW1lbnQ+KCk7Ci0gICAgICAgIHByb3BlcnR5TWFwID0gbmV3IEhhc2h0YWJsZTxTdHJpbmcsIENsYXNzPD8+PigpOwotICAgICAgICB1bnJlc29sdmVkQmVhblJlZiA9IG5ldyBIYXNodGFibGU8U3RyaW5nLCBSZWZlcmVuY2U+KCk7CisgICAgICAgIHNlcnZpY2VNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFNwcmluZ0JlYW5FbGVtZW50PigpOworICAgICAgICBwcm9wZXJ0eU1hcCA9IG5ldyBIYXNoTWFwPFN0cmluZywgQ2xhc3M8Pz4+KCk7CisgICAgICAgIHVucmVzb2x2ZWRCZWFuUmVmID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBSZWZlcmVuY2U+KCk7CiAgICAgfSAvLyBlbmQgbWV0aG9kIFNwcmluZ0ltcGxlbWVudGF0aW9uCiAKICAgICAvKiBSZXR1cm5zIHRoZSBsb2NhdGlvbiBhdHRyaWJ1dGUgZm9yIHRoaXMgU3ByaW5nIGltcGxlbWVudGF0aW9uICovCkBAIC0xNjgsMzAgKzE2NywyNCBAQAogICAgICAgICByZXR1cm4gdW5yZXNvbHZlZEJlYW5SZWYuZ2V0KHJlZk5hbWUpOwogICAgIH0gLy8gZW5kIG1ldGhvZCBnZXRVbnJlc29sdmVkQmVhblJlZgogCi0KICAgICAvKioKICAgICAgKiBVc2UgcHJlUHJvY2VzcyB0byB2YWxpZGF0ZSBhbmQgbWFwIHRoZSByZWZlcmVuY2VzIGFuZCBwcm9wZXJ0aWVzIGR5bmFtaWNhbGx5CiAgICAgICovCiAgICAgcHVibGljIHZvaWQgYnVpbGQoQ29tcG9uZW50IGNvbXBvbmVudCkgewotICAgICAgICBpZiAoIShjb21wb25lbnQgaW5zdGFuY2VvZiBSdW50aW1lQ29tcG9uZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBSdW50aW1lQ29tcG9uZW50IHJ0YyA9IChSdW50aW1lQ29tcG9uZW50KSBjb21wb25lbnQ7Ci0KLSAgICAgICAgZm9yIChSZWZlcmVuY2UgcmVmZXJlbmNlIDogcnRjLmdldFJlZmVyZW5jZXMoKSkgeworICAgICAgICBmb3IgKFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnQuZ2V0UmVmZXJlbmNlcygpKSB7CiAgICAgICAgICAgICBpZiAodW5yZXNvbHZlZEJlYW5SZWYuY29udGFpbnNLZXkocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgIAlSZWZlcmVuY2UgcmVmID0gdW5yZXNvbHZlZEJlYW5SZWYuZ2V0KHJlZmVyZW5jZS5nZXROYW1lKCkpOwotICAgICAgICAgICAgCWNvbXBvbmVudFR5cGUuZ2V0UmVmZXJlbmNlcygpLmFkZCgKLSAgICAgICAgICAgIAkJCWNyZWF0ZVJlZmVyZW5jZShyZWZlcmVuY2UsIHJlZi5nZXRJbnRlcmZhY2VDb250cmFjdCgpKSk7Ci0gICAgICAgICAgICAJdW5yZXNvbHZlZEJlYW5SZWYucmVtb3ZlKHJlZmVyZW5jZS5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIFJlZmVyZW5jZSByZWYgPSB1bnJlc29sdmVkQmVhblJlZi5nZXQocmVmZXJlbmNlLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgY29tcG9uZW50VHlwZS5nZXRSZWZlcmVuY2VzKCkuYWRkKGNyZWF0ZVJlZmVyZW5jZShyZWZlcmVuY2UsIHJlZi5nZXRJbnRlcmZhY2VDb250cmFjdCgpKSk7CisgICAgICAgICAgICAgICAgdW5yZXNvbHZlZEJlYW5SZWYucmVtb3ZlKHJlZmVyZW5jZS5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChQcm9wZXJ0eSBwcm9wZXJ0eSA6IHJ0Yy5nZXRQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgCWlmICh1bnJlc29sdmVkQmVhblJlZi5jb250YWluc0tleShwcm9wZXJ0eS5nZXROYW1lKCkpKSB7Ci0gICAgICAgIAkJY29tcG9uZW50VHlwZS5nZXRQcm9wZXJ0aWVzKCkuYWRkKGNyZWF0ZVByb3BlcnR5KHByb3BlcnR5KSk7Ci0gICAgICAgIAkJdGhpcy5zZXRQcm9wZXJ0eUNsYXNzKHByb3BlcnR5LmdldE5hbWUoKSwgcHJvcGVydHkuZ2V0Q2xhc3MoKSk7Ci0gICAgICAgIAkJdW5yZXNvbHZlZEJlYW5SZWYucmVtb3ZlKHByb3BlcnR5LmdldE5hbWUoKSk7CisgICAgICAgIGZvciAoUHJvcGVydHkgcHJvcGVydHkgOiBjb21wb25lbnQuZ2V0UHJvcGVydGllcygpKSB7CisgICAgICAgICAgICBpZiAodW5yZXNvbHZlZEJlYW5SZWYuY29udGFpbnNLZXkocHJvcGVydHkuZ2V0TmFtZSgpKSkgeworICAgICAgICAgICAgICAgIGNvbXBvbmVudFR5cGUuZ2V0UHJvcGVydGllcygpLmFkZChjcmVhdGVQcm9wZXJ0eShwcm9wZXJ0eSkpOworICAgICAgICAgICAgICAgIHRoaXMuc2V0UHJvcGVydHlDbGFzcyhwcm9wZXJ0eS5nZXROYW1lKCksIHByb3BlcnR5LmdldENsYXNzKCkpOworICAgICAgICAgICAgICAgIHVucmVzb2x2ZWRCZWFuUmVmLnJlbW92ZShwcm9wZXJ0eS5nZXROYW1lKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjAxLDcgKzE5NCw3IEBACiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBuZXdSZWZlcmVuY2UgPSAoUmVmZXJlbmNlKXJlZmVyZW5jZS5jbG9uZSgpOwogICAgICAgICAgICAgaWYgKG5ld1JlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpID09IG51bGwpCi0gICAgICAgICAgICAJbmV3UmVmZXJlbmNlLnNldEludGVyZmFjZUNvbnRyYWN0KGludGVyZmF6ZSk7CisgICAgICAgICAgICAgICAgbmV3UmVmZXJlbmNlLnNldEludGVyZmFjZUNvbnRyYWN0KGludGVyZmF6ZSk7CiAgICAgICAgIH0gY2F0Y2ggKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlKTsgLy8gc2hvdWxkIG5vdCBldmVyIGhhcHBlbgogICAgICAgICB9CkBAIC0yMTcsMTMgKzIxMCwxMyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBuZXdQcm9wZXJ0eTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgQ2xhc3NMb2FkZXIgZ2V0Q2xhc3NMb2FkZXIoKSB7Ci0gICAgCXJldHVybiBjbGFzc0xvYWRlcjsKKyAgICAgICAgcmV0dXJuIGNsYXNzTG9hZGVyOwogICAgIH0KIAogICAgIHB1YmxpYyB2b2lkIHNldENsYXNzTG9hZGVyKENsYXNzTG9hZGVyIGNsYXNzTG9hZGVyKSB7Ci0gICAgCXRoaXMuY2xhc3NMb2FkZXIgPSBjbGFzc0xvYWRlcjsKKyAgICAgICAgdGhpcy5jbGFzc0xvYWRlciA9IGNsYXNzTG9hZGVyOwogICAgIH0KIAogICAgIEBPdmVycmlkZQpAQCAtMjU1LDQgKzI0OCwxMiBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiU3ByaW5nSW1wbGVtZW50YXRpb24gW2xvY2F0aW9uPSIpLmFwcGVuZChsb2NhdGlvbikuYXBwZW5kKCIsIHJlc291cmNlPSIpLmFwcGVuZChyZXNvdXJjZSkKKyAgICAgICAgICAgIC5hcHBlbmQoIl0iKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLmphdmEKaW5kZXggY2FhZTcyZi4uMjdjMDljMSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdJbXBsZW1lbnRhdGlvbkNvbnN0YW50cy5qYXZhCisrKyBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuamF2YQpAQCAtMjUsNDcgKzI1LDQ3IEBACiAgKiBDb25zdGFudHMgdXNlZCBpbiBTcHJpbmcgQXBwbGljYXRpb24gQ29udGV4dCBYTUwgZmlsZXMuCiAgKi8KIHB1YmxpYyBpbnRlcmZhY2UgU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMgewotICAgIAorCiAgICAgU3RyaW5nIFNDQV9OUyA9ICJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3NjYSI7CiAgICAgU3RyaW5nIFNQUklOR19OUyA9ICJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zIjsKLSAgICAKKwogICAgIFN0cmluZyBQUk9QRVJUWSA9ICJwcm9wZXJ0eSI7CiAgICAgUU5hbWUgU0NBX1BST1BFUlRZX0VMRU1FTlQgPSBuZXcgUU5hbWUoU0NBX05TLCBQUk9QRVJUWSk7CiAgICAgUU5hbWUgUFJPUEVSVFlfRUxFTUVOVCA9IG5ldyBRTmFtZShTUFJJTkdfTlMsIFBST1BFUlRZKTsKLSAgICAKKwogICAgIFN0cmluZyBTQ0FTRVJWSUNFID0gInNlcnZpY2UiOwogICAgIFFOYW1lIFNDQV9TRVJWSUNFX0VMRU1FTlQgPSBuZXcgUU5hbWUoU0NBX05TLCBTQ0FTRVJWSUNFKTsKLSAgICAKKwogICAgIFN0cmluZyBTQ0FSRUZFUkVOQ0UgPSAicmVmZXJlbmNlIjsKICAgICBRTmFtZSBTQ0FfUkVGRVJFTkNFX0VMRU1FTlQgPSBuZXcgUU5hbWUoU0NBX05TLCBTQ0FSRUZFUkVOQ0UpOwotICAgIAorCiAgICAgU3RyaW5nIEJFQU5TID0gImJlYW5zIjsKICAgICBRTmFtZSBCRUFOU19FTEVNRU5UID0gbmV3IFFOYW1lKFNQUklOR19OUywgQkVBTlMpOwotICAgIAorCiAgICAgU3RyaW5nIElNUE9SVCA9ICJpbXBvcnQiOwogICAgIFFOYW1lIElNUE9SVF9FTEVNRU5UID0gbmV3IFFOYW1lKFNQUklOR19OUywgSU1QT1JUKTsKLSAgICAKKwogICAgIFN0cmluZyBCRUFOID0gImJlYW4iOwogICAgIFFOYW1lIEJFQU5fRUxFTUVOVCA9IG5ldyBRTmFtZShTUFJJTkdfTlMsIEJFQU4pOwotICAgIAorCiAgICAgU3RyaW5nIENPTlNUUlVDVE9SQVJHID0gImNvbnN0cnVjdG9yLWFyZyI7CiAgICAgUU5hbWUgQ09OU1RSVUNUT1JBUkdfRUxFTUVOVCA9IG5ldyBRTmFtZShTUFJJTkdfTlMsIENPTlNUUlVDVE9SQVJHKTsKLSAgICAKKwogICAgIFN0cmluZyBMSVNUID0gImxpc3QiOwotICAgIFFOYW1lIExJU1RfRUxFTUVOVCA9IG5ldyBRTmFtZShTUFJJTkdfTlMsIExJU1QpOyAKLSAgICAKKyAgICBRTmFtZSBMSVNUX0VMRU1FTlQgPSBuZXcgUU5hbWUoU1BSSU5HX05TLCBMSVNUKTsKKwogICAgIFN0cmluZyBTRVQgPSAic2V0IjsKICAgICBRTmFtZSBTRVRfRUxFTUVOVCA9IG5ldyBRTmFtZShTUFJJTkdfTlMsIFNFVCk7Ci0gICAgCisKICAgICBTdHJpbmcgTUFQID0gIm1hcCI7CiAgICAgUU5hbWUgTUFQX0VMRU1FTlQgPSBuZXcgUU5hbWUoU1BSSU5HX05TLCBNQVApOwotICAgIAorCiAgICAgU3RyaW5nIFZBTFVFID0gInZhbHVlIjsKICAgICBRTmFtZSBWQUxVRV9FTEVNRU5UID0gbmV3IFFOYW1lKFNQUklOR19OUywgVkFMVUUpOwotICAgIAorCiAgICAgU3RyaW5nIFJFRiA9ICJyZWYiOwogICAgIFFOYW1lIFJFRl9FTEVNRU5UID0gbmV3IFFOYW1lKFNQUklOR19OUywgUkVGKTsKLSAgICAKKwogICAgIFN0cmluZyBFTlRSWSA9ICJlbnRyeSI7CiAgICAgUU5hbWUgRU5UUllfRUxFTUVOVCA9IG5ldyBRTmFtZShTUFJJTkdfTlMsIEVOVFJZKTsKIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdQcm9wZXJ0eUVsZW1lbnQuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvU3ByaW5nUHJvcGVydHlFbGVtZW50LmphdmEKaW5kZXggMzdiOGVmMy4uOGRlM2E0YyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdQcm9wZXJ0eUVsZW1lbnQuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ1Byb3BlcnR5RWxlbWVudC5qYXZhCkBAIC0zMyw2ICszMyw5IEBACiAgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gcmVmcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOwogCisgICAgcHVibGljIFNwcmluZ1Byb3BlcnR5RWxlbWVudCgpIHsKKyAgICB9CisKICAgICBwdWJsaWMgU3ByaW5nUHJvcGVydHlFbGVtZW50KFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQpAQCAtNDQsMTEgKzQ3LDExIEBACiAgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRSZWZzKCkgewogICAgICAgICByZXR1cm4gdGhpcy5yZWZzOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIGFkZFJlZihTdHJpbmcgcmVmKSB7CiAgICAgICAgIHRoaXMucmVmcy5hZGQocmVmKTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgTGlzdDxTdHJpbmc+IGdldFZhbHVlcygpIHsKICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzOwogICAgIH0KQEAgLTU2LDUgKzU5LDEzIEBACiAgICAgcHVibGljIHZvaWQgYWRkVmFsdWUoU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgIHRoaXMudmFsdWVzLmFkZCh2YWx1ZSk7CiAgICAgfQotICAgIAorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlNwcmluZ1Byb3BlcnR5RWxlbWVudCBbbmFtZT0iKS5hcHBlbmQobmFtZSkuYXBwZW5kKCIsIHJlZnM9IikuYXBwZW5kKHJlZnMpLmFwcGVuZCgiLCB2YWx1ZXM9IikKKyAgICAgICAgICAgIC5hcHBlbmQodmFsdWVzKS5hcHBlbmQoIl0iKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICB9CisKIH0gLy8gZW5kIGNsYXNzIFNwcmluZ1Byb3BlcnR5RWxlbWVudApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50LmphdmEKaW5kZXggYjE5MjU4MC4uZjI3NTA2ZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ1NDQVByb3BlcnR5RWxlbWVudC5qYXZhCkBAIC0yOCwxMSArMjgsMTUgQEAKICAgICBwcml2YXRlIFN0cmluZyBuYW1lOwogICAgIHByaXZhdGUgU3RyaW5nIHR5cGU7CiAKKyAgICBwdWJsaWMgU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50KCkgeworICAgICAgICBzdXBlcigpOworICAgIH0KKwogICAgIHB1YmxpYyBTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQoU3RyaW5nIG5hbWUsIFN0cmluZyB0eXBlKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0TmFtZShTdHJpbmcgbmFtZSkgewogICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOwogICAgIH0KQEAgLTQwLDcgKzQ0LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7CiAgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldFR5cGUoU3RyaW5nIHR5cGUpIHsKICAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICB9CkBAIC00OSw0ICs1MywxMSBAQAogICAgICAgICByZXR1cm4gdHlwZTsKICAgICB9CiAKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50IFtuYW1lPSIpLmFwcGVuZChuYW1lKS5hcHBlbmQoIiwgdHlwZT0iKS5hcHBlbmQodHlwZSkuYXBwZW5kKCJdIik7CisgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCiB9IC8vIGVuZCBjbGFzcyBTcHJpbmdQcm9wZXJ0eUVsZW1lbnQKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudC5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50LmphdmEKaW5kZXggYmMwMTAyMi4uZjA2ZjA1YSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50LmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50LmphdmEKQEAgLTIwLDYgKzIwLDkgQEAKIAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3kuSW50ZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeVNldDsKIApAQCAtMzgsMTEgKzQxLDE4IEBACiAgICAgcHJpdmF0ZSBMaXN0PEludGVudD4gaW50ZW50cyA9IG5ldyBBcnJheUxpc3Q8SW50ZW50PigpOwogICAgIHByaXZhdGUgTGlzdDxQb2xpY3lTZXQ+IHBvbGljeVNldHMgPSBuZXcgQXJyYXlMaXN0PFBvbGljeVNldD4oKTsKIAorICAgIHByaXZhdGUgTGlzdDxRTmFtZT4gaW50ZW50TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFFOYW1lPigpOworICAgIHByaXZhdGUgTGlzdDxRTmFtZT4gcG9saWN5U2V0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFFOYW1lPigpOworCisgICAgcHVibGljIFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQoKSB7CisKKyAgICB9CisKICAgICBwdWJsaWMgU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudChTdHJpbmcgbmFtZSwgU3RyaW5nIHR5cGUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXROYW1lKFN0cmluZyBuYW1lKSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgfQpAQCAtNTAsNyArNjAsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VHlwZShTdHJpbmcgdHlwZSkgewogICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgIH0KQEAgLTU4LDcgKzY4LDcgQEAKICAgICBwdWJsaWMgU3RyaW5nIGdldFR5cGUoKSB7CiAgICAgICAgIHJldHVybiB0eXBlOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldERlZmF1bHRCZWFuKFN0cmluZyBkZWZhdWx0QmVhbikgewogICAgICAgICB0aGlzLmRlZmF1bHRCZWFuID0gZGVmYXVsdEJlYW47CiAgICAgfQpAQCAtNjYsMTMgKzc2LDMxIEBACiAgICAgcHVibGljIFN0cmluZyBnZXREZWZhdWx0QmVhbigpIHsKICAgICAgICAgcmV0dXJuIGRlZmF1bHRCZWFuOwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyBMaXN0PEludGVudD4gZ2V0UmVxdWlyZWRJbnRlbnRzKCkgewogICAgICAgICByZXR1cm4gaW50ZW50czsKICAgICB9Ci0gICAgCi0gICAgcHVibGljIExpc3Q8UG9saWN5U2V0PiBnZXRQb2xpY3lTZXRzKCkgeyAgIAkKLSAgICAJcmV0dXJuIHBvbGljeVNldHM7CisKKyAgICBwdWJsaWMgTGlzdDxQb2xpY3lTZXQ+IGdldFBvbGljeVNldHMoKSB7CisgICAgICAgIHJldHVybiBwb2xpY3lTZXRzOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFFOYW1lPiBnZXRJbnRlbnROYW1lcygpIHsKKyAgICAgICAgcmV0dXJuIGludGVudE5hbWVzOworICAgIH0KKworICAgIHB1YmxpYyBMaXN0PFFOYW1lPiBnZXRQb2xpY3lTZXROYW1lcygpIHsKKyAgICAgICAgcmV0dXJuIHBvbGljeVNldE5hbWVzOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlciA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50IFtuYW1lPSIpLmFwcGVuZChuYW1lKS5hcHBlbmQoIiwgdHlwZT0iKS5hcHBlbmQodHlwZSkKKyAgICAgICAgICAgIC5hcHBlbmQoIiwgZGVmYXVsdEJlYW49IikuYXBwZW5kKGRlZmF1bHRCZWFuKS5hcHBlbmQoIiwgaW50ZW50cz0iKS5hcHBlbmQoaW50ZW50cykuYXBwZW5kKCIsIHBvbGljeVNldHM9IikKKyAgICAgICAgICAgIC5hcHBlbmQocG9saWN5U2V0cykuYXBwZW5kKCIsIGludGVudE5hbWVzPSIpLmFwcGVuZChpbnRlbnROYW1lcykuYXBwZW5kKCIsIHBvbGljeVNldE5hbWVzPSIpCisgICAgICAgICAgICAuYXBwZW5kKHBvbGljeVNldE5hbWVzKS5hcHBlbmQoIl0iKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CiAKIH0gLy8gZW5kIGNsYXNzIFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvU3ByaW5nU0NBU2VydmljZUVsZW1lbnQuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvU3ByaW5nU0NBU2VydmljZUVsZW1lbnQuamF2YQppbmRleCBkYmRkYzAwLi4zOGMxMjRjIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL1NwcmluZ1NDQVNlcnZpY2VFbGVtZW50LmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9TcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudC5qYXZhCkBAIC0yMCw2ICsyMCw5IEBACiAKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkludGVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5Qb2xpY3lTZXQ7CiAKQEAgLTM3LDEyICs0MCwxOCBAQAogICAgIHByaXZhdGUgU3RyaW5nIHRhcmdldDsKICAgICBwcml2YXRlIExpc3Q8SW50ZW50PiBpbnRlbnRzID0gbmV3IEFycmF5TGlzdDxJbnRlbnQ+KCk7CiAgICAgcHJpdmF0ZSBMaXN0PFBvbGljeVNldD4gcG9saWN5U2V0cyA9IG5ldyBBcnJheUxpc3Q8UG9saWN5U2V0PigpOworICAgIHByaXZhdGUgTGlzdDxRTmFtZT4gaW50ZW50TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFFOYW1lPigpOworICAgIHByaXZhdGUgTGlzdDxRTmFtZT4gcG9saWN5U2V0TmFtZXMgPSBuZXcgQXJyYXlMaXN0PFFOYW1lPigpOworCisgICAgcHVibGljIFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50KCkgeworCisgICAgfQogCiAgICAgcHVibGljIFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50KFN0cmluZyBuYW1lLCBTdHJpbmcgdGFyZ2V0KSB7CiAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0OwogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHNldE5hbWUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICB9CkBAIC01MCw3ICs1OSw3IEBACiAgICAgcHVibGljIFN0cmluZyBnZXROYW1lKCkgewogICAgICAgICByZXR1cm4gbmFtZTsKICAgICB9Ci0gICAgCisKICAgICBwdWJsaWMgdm9pZCBzZXRUeXBlKFN0cmluZyB0eXBlKSB7CiAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICAgfQpAQCAtNTgsNyArNjcsNyBAQAogICAgIHB1YmxpYyBTdHJpbmcgZ2V0VHlwZSgpIHsKICAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIHZvaWQgc2V0VGFyZ2V0KFN0cmluZyB0YXJnZXQpIHsKICAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7CiAgICAgfQpAQCAtNjYsMTMgKzc1LDMxIEBACiAgICAgcHVibGljIFN0cmluZyBnZXRUYXJnZXQoKSB7CiAgICAgICAgIHJldHVybiB0YXJnZXQ7CiAgICAgfQotICAgIAorCiAgICAgcHVibGljIExpc3Q8SW50ZW50PiBnZXRSZXF1aXJlZEludGVudHMoKSB7CiAgICAgICAgIHJldHVybiBpbnRlbnRzOwogICAgIH0KLSAgICAKLSAgICBwdWJsaWMgTGlzdDxQb2xpY3lTZXQ+IGdldFBvbGljeVNldHMoKSB7ICAgCQotICAgIAlyZXR1cm4gcG9saWN5U2V0czsKKworICAgIHB1YmxpYyBMaXN0PFBvbGljeVNldD4gZ2V0UG9saWN5U2V0cygpIHsKKyAgICAgICAgcmV0dXJuIHBvbGljeVNldHM7CisgICAgfQorCisgICAgcHVibGljIExpc3Q8UU5hbWU+IGdldEludGVudE5hbWVzKCkgeworICAgICAgICByZXR1cm4gaW50ZW50TmFtZXM7CisgICAgfQorCisgICAgcHVibGljIExpc3Q8UU5hbWU+IGdldFBvbGljeVNldE5hbWVzKCkgeworICAgICAgICByZXR1cm4gcG9saWN5U2V0TmFtZXM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIlNwcmluZ1NDQVNlcnZpY2VFbGVtZW50IFtuYW1lPSIpLmFwcGVuZChuYW1lKS5hcHBlbmQoIiwgdHlwZT0iKS5hcHBlbmQodHlwZSkKKyAgICAgICAgICAgIC5hcHBlbmQoIiwgdGFyZ2V0PSIpLmFwcGVuZCh0YXJnZXQpLmFwcGVuZCgiLCBpbnRlbnRzPSIpLmFwcGVuZChpbnRlbnRzKS5hcHBlbmQoIiwgcG9saWN5U2V0cz0iKQorICAgICAgICAgICAgLmFwcGVuZChwb2xpY3lTZXRzKS5hcHBlbmQoIiwgaW50ZW50TmFtZXM9IikuYXBwZW5kKGludGVudE5hbWVzKS5hcHBlbmQoIiwgcG9saWN5U2V0TmFtZXM9IikKKyAgICAgICAgICAgIC5hcHBlbmQocG9saWN5U2V0TmFtZXMpLmFwcGVuZCgiXSIpOworICAgICAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwogICAgIH0KIAogfSAvLyBlbmQgY2xhc3MgU3ByaW5nU0NBU2VydmljZUVsZW1lbnQKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW50cm9zcGVjdC9TcHJpbmdCZWFuSW50cm9zcGVjdG9yLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2ludHJvc3BlY3QvU3ByaW5nQmVhbkludHJvc3BlY3Rvci5qYXZhCmluZGV4IDNhYTI1NzYuLjVlYWYyN2EgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW50cm9zcGVjdC9TcHJpbmdCZWFuSW50cm9zcGVjdG9yLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnRyb3NwZWN0L1NwcmluZ0JlYW5JbnRyb3NwZWN0b3IuamF2YQpAQCAtMjgsNiArMjgsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5KYXZhSW1wbGVtZW50YXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFJbXBsZW1lbnRhdGlvbkZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ0ltcGxlbWVudGF0aW9uOwogCiAvKioKICAqIFByb3ZpZGVzIGludHJvc3BlY3Rpb24gZnVuY3Rpb25zIGZvciBTcHJpbmcgYmVhbnMKQEAgLTQ3LDggKzQ4LDcgQEAKICAgICAgKiBAcGFyYW0gamF2YUZhY3RvcnkgVGhlIEphdmEgSW50ZXJmYWNlIEZhY3RvcnkgdG8gdXNlCiAgICAgICogQHBhcmFtIHBvbGljeUZhY3RvcnkgVGhlIFBvbGljeSBGYWN0b3J5IHRvIHVzZS4KICAgICAgKi8KLSAgICBwdWJsaWMgU3ByaW5nQmVhbkludHJvc3BlY3RvcihFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50PiBjb25BcmdzKSB7CisgICAgcHVibGljIFNwcmluZ0JlYW5JbnRyb3NwZWN0b3IoRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSwgTGlzdDxTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQ+IGNvbkFyZ3MpIHsKIAogICAgICAgICBGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgZmFjdG9yaWVzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoRmFjdG9yeUV4dGVuc2lvblBvaW50LmNsYXNzKTsKICAgICAgICAgamF2YUltcGxlbWVudGF0aW9uRmFjdG9yeSA9IGZhY3Rvcmllcy5nZXRGYWN0b3J5KEphdmFJbXBsZW1lbnRhdGlvbkZhY3RvcnkuY2xhc3MpOwpAQCAtNjQsMTMgKzY0LDE1IEBACiAgICAgICogU3ByaW5nIEJlYW4gb3IgaXRzIGNvbXBvbmVudFR5cGUKICAgICAgKgogICAgICAqLwotICAgIHB1YmxpYyBKYXZhSW1wbGVtZW50YXRpb24gaW50cm9zcGVjdEJlYW4oQ2xhc3M8Pz4gYmVhbkNsYXNzLCBDb21wb25lbnRUeXBlIGNvbXBvbmVudFR5cGUpIHRocm93cyBDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uIAotICAgIHsKKyAgICBwdWJsaWMgSmF2YUltcGxlbWVudGF0aW9uIGludHJvc3BlY3RCZWFuKENsYXNzPD8+IGJlYW5DbGFzcywgQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlKQorICAgICAgICB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7CiAgICAgICAgIGlmIChjb21wb25lbnRUeXBlID09IG51bGwpCiAgICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbigiSW50cm9zcGVjdCBTcHJpbmcgYmVhbjogc3VwcGxpZWQgY29tcG9uZW50VHlwZSBpcyBudWxsIik7CiAKICAgICAgICAgLy8gQ3JlYXRlIGEgSmF2YSBpbXBsZW1lbnRhdGlvbiByZWFkeSBmb3IgdGhlIGludHJvc3BlY3Rpb24KICAgICAgICAgSmF2YUltcGxlbWVudGF0aW9uIGphdmFJbXBsZW1lbnRhdGlvbiA9IGphdmFJbXBsZW1lbnRhdGlvbkZhY3RvcnkuY3JlYXRlSmF2YUltcGxlbWVudGF0aW9uKCk7CisgICAgICAgIC8vIFNldCB0aGUgdHlwZSB0byBiZSBpbXBsZW1lbnRhdGlvbi5zcHJpbmcgdG8gYXZvaWQgaGV1cmlzdGljIGludHJvc3BlY3Rpb24KKyAgICAgICAgamF2YUltcGxlbWVudGF0aW9uLnNldFR5cGUoU3ByaW5nSW1wbGVtZW50YXRpb24uVFlQRSk7CiAKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgIC8vIEludHJvc3BlY3QgdGhlIGJlYW4uLi50aGUgcmVzdWx0cyBvZiB0aGUgaW50cm9zcGVjdGlvbiBhcmUgcGxhY2VkIGludG8gdGhlIEphdmEgaW1wbGVtZW50YXRpb24KQEAgLTgxLDE3ICs4MywxMSBAQAogICAgICAgICAgICAgY29tcG9uZW50VHlwZS5nZXRTZXJ2aWNlcygpLmFkZEFsbChqYXZhSW1wbGVtZW50YXRpb24uZ2V0U2VydmljZXMoKSk7CiAgICAgICAgICAgICBjb21wb25lbnRUeXBlLmdldFJlZmVyZW5jZXMoKS5hZGRBbGwoamF2YUltcGxlbWVudGF0aW9uLmdldFJlZmVyZW5jZXMoKSk7CiAgICAgICAgICAgICBjb21wb25lbnRUeXBlLmdldFByb3BlcnRpZXMoKS5hZGRBbGwoamF2YUltcGxlbWVudGF0aW9uLmdldFByb3BlcnRpZXMoKSk7Ci0gICAgICAgICAgICAKKwogICAgICAgICB9IGNhdGNoIChJbnRyb3NwZWN0aW9uRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uKGUpOwogICAgICAgICB9IC8vIGVuZCB0cnkKIAotICAgICAgICAvKiBMaXN0PFNlcnZpY2U+IHNlcnZpY2VzID0gamF2YUltcGxlbWVudGF0aW9uLmdldFNlcnZpY2VzKCk7Ci0gICAgICAgIGZvciAoU2VydmljZSBzZXJ2aWNlIDogc2VydmljZXMpIHsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gc2VydmljZS5nZXROYW1lKCk7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNwcmluZyBCZWFuOiBmb3VuZCBzZXJ2aWNlIHdpdGggbmFtZTogIiArIG5hbWUpOwotICAgICAgICB9IC8vIGVuZCBmb3IgKi8KLSAgICAgICAgCiAgICAgICAgIHJldHVybiBqYXZhSW1wbGVtZW50YXRpb247CiAKICAgICB9IC8vIGVuZCBtZXRob2QgaW50cm9zcGVjdEJlYW4KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW50cm9zcGVjdC9TcHJpbmdCZWFuUG9qb1Byb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnRyb3NwZWN0L1NwcmluZ0JlYW5Qb2pvUHJvY2Vzc29yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhOGVlYzkuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnRyb3NwZWN0L1NwcmluZ0JlYW5Qb2pvUHJvY2Vzc29yLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NjAgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuaW50cm9zcGVjdDsKLQotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5KYXZhSW50cm9zcGVjdGlvbkhlbHBlci5nZXRBbGxJbnRlcmZhY2VzOwotaW1wb3J0IHN0YXRpYyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5KYXZhSW50cm9zcGVjdGlvbkhlbHBlci5nZXRBbGxQdWJsaWNBbmRQcm90ZWN0ZWRGaWVsZHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LkphdmFJbnRyb3NwZWN0aW9uSGVscGVyLmdldEFsbFVuaXF1ZVB1YmxpY1Byb3RlY3RlZE1ldGhvZHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LkphdmFJbnRyb3NwZWN0aW9uSGVscGVyLmdldFByaXZhdGVGaWVsZHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LkphdmFJbnRyb3NwZWN0aW9uSGVscGVyLnRvUHJvcGVydHlOYW1lOwotCi1pbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uQW5ub3RhdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5GaWVsZDsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZW1iZXI7Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1vZGlmaWVyOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlR5cGU7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQXNzZW1ibHlGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29udHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5NdWx0aXBsaWNpdHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkludHJvc3BlY3Rpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFDb25zdHJ1Y3RvckltcGw7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFFbGVtZW50SW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuSmF2YUltcGxlbWVudGF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5KYXZhUGFyYW1ldGVySW1wbDsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5CYXNlSmF2YUNsYXNzVmlzaXRvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5KYXZhSW50cm9zcGVjdGlvbkhlbHBlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLkFtYmlndW91c0NvbnN0cnVjdG9yRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuSW52YWxpZFNlcnZpY2VUeXBlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuTm9Db25zdHJ1Y3RvckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLlJlc291cmNlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlQ29udHJhY3Q7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsLkphdmFYTUxNYXBwZXI7Ci1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5DYWxsYmFjazsKLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkNvbnRleHQ7Ci1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Qcm9wZXJ0eTsKLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsKLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKLQotLyoqCi0gKiBIZXVyaXN0aWNhbGx5IGV2YWx1YXRlcyBhbiB1bi1hbm5vdGF0ZWQgSmF2YSBpbXBsZW1lbnRhdGlvbiB0eXBlIHRvIGRldGVybWluZQotICogc2VydmljZXMsIHJlZmVyZW5jZXMsIGFuZCBwcm9wZXJ0aWVzIGFjY29yZGluZyB0byB0aGUgYWxnb3JpdGhtIGRlc2NyaWJlZCBpbgotICogdGhlIFNDQSBKYXZhIENsaWVudCBhbmQgSW1wbGVtZW50YXRpb24gTW9kZWwgU3BlY2lmaWNhdGlvbiA8cC8+IFRPRE8KLSAqIEltcGxlbWVudDogPHAvPiBXaGVuIG5vIHNlcnZpY2UgaW50ZXJmYWNlIGlzIGFubm90YXRlZCwgbmVlZCB0byBjYWxjdWxhdGUgYQotICogc2luZ2xlIHNlcnZpY2UgY29tcHJpc2luZyBhbGwgcHVibGljIG1ldGhvZHMgdGhhdCBhcmUgbm90IHJlZmVyZW5jZSBvcgotICogcHJvcGVydHkgaW5qZWN0aW9uIHNpdGVzLiBJZiB0aGF0IHNlcnZpY2UgY2FuIGJlIGV4YWN0bHkgbWFwcGVkIHRvIGFuCi0gKiBpbnRlcmZhY2UgaW1wbGVtZW50ZWQgYnkgdGhlIGNsYXNzIHRoZW4gdGhlIHNlcnZpY2UgaW50ZXJmYWNlIHdpbGwgYmUgZGVmaW5lZAotICogaW4gdGVybXMgb2YgdGhhdCBpbnRlcmZhY2UuCi0gKiAKLSAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAotICovCi1wdWJsaWMgY2xhc3MgU3ByaW5nQmVhblBvam9Qcm9jZXNzb3IgZXh0ZW5kcyBCYXNlSmF2YUNsYXNzVmlzaXRvciB7Ci0gICAgcHJpdmF0ZSBMaXN0PFNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudD4gY29uQXJnczsKLQotICAgIHB1YmxpYyBTcHJpbmdCZWFuUG9qb1Byb2Nlc3NvcihBc3NlbWJseUZhY3RvcnkgYXNzZW1ibHlGYWN0b3J5LCBKYXZhSW50ZXJmYWNlRmFjdG9yeSBqYXZhRmFjdG9yeSwgTGlzdDxTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQ+IGNvbkFyZ3MpIHsKLSAgICAgICAgc3VwZXIoYXNzZW1ibHlGYWN0b3J5KTsKLSAgICAgICAgdGhpcy5qYXZhSW50ZXJmYWNlRmFjdG9yeSA9IGphdmFGYWN0b3J5OwotICAgICAgICB0aGlzLmNvbkFyZ3MgPSBjb25BcmdzOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgU3ByaW5nQmVhblBvam9Qcm9jZXNzb3IoRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSkgewotICAgICAgICBzdXBlcihyZWdpc3RyeSk7Ci0gICAgfQotCi0gICAgQE92ZXJyaWRlCi0gICAgcHVibGljIDxUPiB2b2lkIHZpc2l0RW5kKENsYXNzPFQ+IGNsYXp6LCBKYXZhSW1wbGVtZW50YXRpb24gdHlwZSkgdGhyb3dzIEludHJvc3BlY3Rpb25FeGNlcHRpb24gewotICAgICAgICBMaXN0PG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuU2VydmljZT4gc2VydmljZXMgPSB0eXBlLmdldFNlcnZpY2VzKCk7Ci0gICAgICAgIGlmIChzZXJ2aWNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vIGhldXJpc3RpY2FsbHkgZGV0ZXJtaW5lIHRoZSBzZXJ2aWNlCi0gICAgICAgICAgICAvKioKLSAgICAgICAgICAgICAqIFRoZSBmb2xsb3dpbmcgaXMgcXVvdGVkIGZyb20gSmF2YSBTcGVjaWZpY2F0aW9uIDEuMi4xLjMuIEludHJvc3BlY3Rpbmcgc2VydmljZXMgb2ZmZXJlZCBieSBhIEphdmEgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAgICAqIEluIHRoZSBjYXNlcyBkZXNjcmliZWQgYmVsb3csIHRoZSBzZXJ2aWNlcyBvZmZlcmVkIGJ5IGEgSmF2YSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBtYXkgYmUgZGV0ZXJtaW5lZAotICAgICAgICAgICAgICogdGhyb3VnaCBpbnRyb3NwZWN0aW9uLCBlbGlkaW5nIHRoZSBuZWVkIHRvIHNwZWNpZnkgdGhlbSB1c2luZyBAU2VydmljZS4gVGhlIGZvbGxvd2luZyBhbGdvcml0aG0gaXMgdXNlZCAKLSAgICAgICAgICAgICAqIHRvIGRldGVybWluZSBob3cgc2VydmljZXMgYXJlIGludHJvc3BlY3RlZCBmcm9tIGFuIGltcGxlbWVudGF0aW9uIGNsYXNzOgotICAgICAgICAgICAgICogCi0gICAgICAgICAgICAgKiBJZiB0aGUgaW50ZXJmYWNlcyBvZiB0aGUgU0NBIHNlcnZpY2VzIGFyZSBub3Qgc3BlY2lmaWVkIHdpdGggdGhlIEBTZXJ2aWNlIGFubm90YXRpb24gb24gdGhlIAotICAgICAgICAgICAgICogaW1wbGVtZW50YXRpb24gY2xhc3MsIGl0IGlzIGFzc3VtZWQgdGhhdCBhbGwgaW1wbGVtZW50ZWQgaW50ZXJmYWNlcyB0aGF0IGhhdmUgYmVlbiBhbm5vdGF0ZWQgCi0gICAgICAgICAgICAgKiBhcyBAUmVtb3RhYmxlIGFyZSB0aGUgc2VydmljZSBpbnRlcmZhY2VzIHByb3ZpZGVkIGJ5IHRoZSBjb21wb25lbnQuIElmIG5vbmUgb2YgdGhlIGltcGxlbWVudGVkIAotICAgICAgICAgICAgICogaW50ZXJmYWNlcyBpcyByZW1vdGFibGUsIHRoZW4gYnkgZGVmYXVsdCB0aGUgaW1wbGVtZW50YXRpb24gb2ZmZXJzIGEgc2luZ2xlIHNlcnZpY2Ugd2hvc2UgdHlwZSAKLSAgICAgICAgICAgICAqIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcy4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgU2V0PENsYXNzPD8+PiBpbnRlcmZhY2VzID0gZ2V0QWxsSW50ZXJmYWNlcyhjbGF6eik7Ci0gICAgICAgICAgICBmb3IgKENsYXNzPD8+IGkgOiBpbnRlcmZhY2VzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGkuaXNBbm5vdGF0aW9uUHJlc2VudChSZW1vdGFibGUuY2xhc3MpIHx8IGkuaXNBbm5vdGF0aW9uUHJlc2VudChXZWJTZXJ2aWNlLmNsYXNzKSkgewotICAgICAgICAgICAgICAgICAgICBhZGRTZXJ2aWNlKHR5cGUsIGkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzZXJ2aWNlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBjbGFzcyBpcyB0aGUgaW50ZXJmYWNlCi0gICAgICAgICAgICAgICAgYWRkU2VydmljZSh0eXBlLCBjbGF6eik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgU2V0PE1ldGhvZD4gbWV0aG9kcyA9IGdldEFsbFVuaXF1ZVB1YmxpY1Byb3RlY3RlZE1ldGhvZHMoY2xhenosIGZhbHNlKTsKLSAgICAgICAgaWYgKCF0eXBlLmdldFJlZmVyZW5jZU1lbWJlcnMoKS5pc0VtcHR5KCkgfHwgIXR5cGUuZ2V0UHJvcGVydHlNZW1iZXJzKCkuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAvLyByZWZlcmVuY2VzIGFuZCBwcm9wZXJ0aWVzIGhhdmUgYmVlbiBleHBsaWNpdGx5IGRlZmluZWQKLSAgICAgICAgICAgIC8vICAgICAgICAgICAgaWYgKHR5cGUuZ2V0U2VydmljZXMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVNlcnZpY2VJbnRlcmZhY2UoY2xhenosIHR5cGUsIG1ldGhvZHMpOwotICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYgKHR5cGUuZ2V0U2VydmljZXMoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZVR5cGVOb3RGb3VuZEV4Y2VwdGlvbihjbGF6ei5nZXROYW1lKCkpOwotICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gICAgICAgICAgICB9Ci0gICAgICAgICAgICBldmFsdWF0ZUNvbnN0cnVjdG9yKHR5cGUsIGNsYXp6KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBjYWxjUHJvcFJlZnMobWV0aG9kcywgc2VydmljZXMsIHR5cGUsIGNsYXp6KTsKLSAgICAgICAgZXZhbHVhdGVDb25zdHJ1Y3Rvcih0eXBlLCBjbGF6eik7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGFkZFNlcnZpY2UoSmF2YUltcGxlbWVudGF0aW9uIHR5cGUsIENsYXNzPD8+IGNsYXp6KSB0aHJvd3MgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlNlcnZpY2Ugc2VydmljZSA9IGNyZWF0ZVNlcnZpY2UoY2xhenopOwotICAgICAgICAgICAgdHlwZS5nZXRTZXJ2aWNlcygpLmFkZChzZXJ2aWNlKTsKLSAgICAgICAgfSBjYXRjaCAoSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgYm9vbGVhbiBpc1B1YmxpY1NldHRlcihNZXRob2QgbWV0aG9kKSB7Ci0gICAgICAgIHJldHVybiBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPT0gMSAmJiBNb2RpZmllci5pc1B1YmxpYyhtZXRob2QuZ2V0TW9kaWZpZXJzKCkpCi0gICAgICAgICAgICAmJiBtZXRob2QuZ2V0TmFtZSgpLnN0YXJ0c1dpdGgoInNldCIpCi0gICAgICAgICAgICAmJiBtZXRob2QuZ2V0UmV0dXJuVHlwZSgpID09IHZvaWQuY2xhc3M7Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzUHJvdGVjdGVkU2V0dGVyKE1ldGhvZCBtZXRob2QpIHsKLSAgICAgICAgcmV0dXJuIG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA9PSAxICYmIE1vZGlmaWVyLmlzUHJvdGVjdGVkKG1ldGhvZC5nZXRNb2RpZmllcnMoKSkKLSAgICAgICAgICAgICYmIG1ldGhvZC5nZXROYW1lKCkuc3RhcnRzV2l0aCgic2V0IikKLSAgICAgICAgICAgICYmIG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkgPT0gdm9pZC5jbGFzczsKLSAgICB9Ci0KLSAgICBwcml2YXRlIDxUPiB2b2lkIGNhbGNQcm9wUmVmcyhTZXQ8TWV0aG9kPiBtZXRob2RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8b3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5TZXJ2aWNlPiBzZXJ2aWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYXZhSW1wbGVtZW50YXRpb24gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczxUPiBjbGF6eikgdGhyb3dzIEludHJvc3BlY3Rpb25FeGNlcHRpb24gewotICAgICAgICAvLyBoZXVyaXN0aWNhbGx5IGRldGVybWluZSB0aGUgcHJvcGVydGllcyByZWZlcmVuY2VzCi0gICAgICAgIC8vIG1ha2UgYSBmaXJzdCBwYXNzIHRocm91Z2ggYWxsIHB1YmxpYyBtZXRob2RzIHdpdGggb25lIHBhcmFtCi0gICAgICAgIFNldDxTdHJpbmc+IHNldHRlcnMgPSBuZXcgSGFzaFNldDxTdHJpbmc+KCk7Ci0gICAgICAgIFNldDxTdHJpbmc+IG90aGVycyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKLSAgICAgICAgZm9yIChNZXRob2QgbWV0aG9kIDogbWV0aG9kcykgewotICAgICAgICAgICAgaWYgKCFpc1B1YmxpY1NldHRlcihtZXRob2QpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobWV0aG9kLmlzQW5ub3RhdGlvblByZXNlbnQoQ2FsbGJhY2suY2xhc3MpIHx8IG1ldGhvZC5pc0Fubm90YXRpb25QcmVzZW50KENvbnRleHQuY2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBwcm9wZXJ0eSBuYW1lIGFzIG90aGVycwotICAgICAgICAgICAgICAgIG90aGVycy5hZGQodG9Qcm9wZXJ0eU5hbWUobWV0aG9kLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFpc0luU2VydmljZUludGVyZmFjZShtZXRob2QsIHNlcnZpY2VzKSkgewotICAgICAgICAgICAgICAgIC8vIE5vdCBwYXJ0IG9mIHRoZSBzZXJ2aWNlIGludGVyZmFjZQotICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdG9Qcm9wZXJ0eU5hbWUobWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgc2V0dGVycy5hZGQobmFtZSk7Ci0gICAgICAgICAgICAgICAgLy8gYXZvaWQgZHVwbGljYXRlIHByb3BlcnR5IG9yIHJlZiBuYW1lcwotICAgICAgICAgICAgICAgIGlmICghdHlwZS5nZXRQcm9wZXJ0eU1lbWJlcnMoKS5jb250YWluc0tleShuYW1lKSAmJiAhdHlwZS5nZXRSZWZlcmVuY2VNZW1iZXJzKCkuY29udGFpbnNLZXkobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gcGFyYW0gPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKVswXTsKLSAgICAgICAgICAgICAgICAgICAgVHlwZSBnZW5lcmljVHlwZSA9IG1ldGhvZC5nZXRHZW5lcmljUGFyYW1ldGVyVHlwZXMoKVswXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzUmVmZXJlbmNlVHlwZShwYXJhbSwgZ2VuZXJpY1R5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZXMoKS5hZGQoY3JlYXRlUmVmZXJlbmNlKG5hbWUsIHBhcmFtKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZU1lbWJlcnMoKS5wdXQobmFtZSwgbmV3IEphdmFFbGVtZW50SW1wbChtZXRob2QsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUuZ2V0UHJvcGVydGllcygpLmFkZChjcmVhdGVQcm9wZXJ0eShuYW1lLCBwYXJhbSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRQcm9wZXJ0eU1lbWJlcnMoKS5wdXQobmFtZSwgbmV3IEphdmFFbGVtZW50SW1wbChtZXRob2QsIDApKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAvLyBzZWNvbmQgcGFzcyBmb3IgcHJvdGVjdGVkIG1ldGhvZHMgd2l0aCBvbmUgcGFyYW0KLSAgICAgICAgZm9yIChNZXRob2QgbWV0aG9kIDogbWV0aG9kcykgewotICAgICAgICAgICAgaWYgKCFpc1Byb3RlY3RlZFNldHRlcihtZXRob2QpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobWV0aG9kLmlzQW5ub3RhdGlvblByZXNlbnQoQ2FsbGJhY2suY2xhc3MpIHx8IG1ldGhvZC5pc0Fubm90YXRpb25QcmVzZW50KENvbnRleHQuY2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBwcm9wZXJ0eSBuYW1lIGFzIG90aGVycwotICAgICAgICAgICAgICAgIG90aGVycy5hZGQodG9Qcm9wZXJ0eU5hbWUobWV0aG9kLmdldE5hbWUoKSkpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQ2xhc3M8Pz4gcGFyYW0gPSBtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKVswXTsKLSAgICAgICAgICAgIFN0cmluZyBuYW1lID0gdG9Qcm9wZXJ0eU5hbWUobWV0aG9kLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBzZXR0ZXJzLmFkZChuYW1lKTsKLSAgICAgICAgICAgIC8vIGF2b2lkIGR1cGxpY2F0ZSBwcm9wZXJ0eSBvciByZWYgbmFtZXMKLSAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZVR5cGUocGFyYW0sIG1ldGhvZC5nZXRHZW5lcmljUGFyYW1ldGVyVHlwZXMoKVswXSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXR5cGUuZ2V0UmVmZXJlbmNlTWVtYmVycygpLmNvbnRhaW5zS2V5KG5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUuZ2V0UmVmZXJlbmNlcygpLmFkZChjcmVhdGVSZWZlcmVuY2UobmFtZSwgcGFyYW0pKTsKLSAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRSZWZlcmVuY2VNZW1iZXJzKCkucHV0KG5hbWUsIG5ldyBKYXZhRWxlbWVudEltcGwobWV0aG9kLCAwKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXR5cGUuZ2V0UHJvcGVydHlNZW1iZXJzKCkuY29udGFpbnNLZXkobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRQcm9wZXJ0aWVzKCkuYWRkKGNyZWF0ZVByb3BlcnR5KG5hbWUsIHBhcmFtKSk7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUuZ2V0UHJvcGVydHlNZW1iZXJzKCkucHV0KG5hbWUsIG5ldyBKYXZhRWxlbWVudEltcGwobWV0aG9kLCAwKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUHVibGljIG9yIHByb3RlY3RlZCBmaWVsZHMgdW5sZXNzIHRoZXJlIGlzIGEgcHVibGljIG9yIHByb3RlY3RlZAotICAgICAgICAvLyBzZXR0ZXIgbWV0aG9kCi0gICAgICAgIC8vIGZvciB0aGUgc2FtZSBuYW1lCi0gICAgICAgIFNldDxGaWVsZD4gZmllbGRzID0gZ2V0QWxsUHVibGljQW5kUHJvdGVjdGVkRmllbGRzKGNsYXp6LCBmYWxzZSk7Ci0gICAgICAgIGZvciAoRmllbGQgZmllbGQgOiBmaWVsZHMpIHsKLSAgICAgICAgICAgIGlmIChmaWVsZC5pc0Fubm90YXRpb25QcmVzZW50KENhbGxiYWNrLmNsYXNzKSB8fCBmaWVsZC5pc0Fubm90YXRpb25QcmVzZW50KENvbnRleHQuY2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2V0dGVycy5jb250YWlucyhmaWVsZC5nZXROYW1lKCkpIHx8IG90aGVycy5jb250YWlucyhmaWVsZC5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGZpZWxkLmdldE5hbWUoKTsKLSAgICAgICAgICAgIENsYXNzPD8+IHBhcmFtVHlwZSA9IGZpZWxkLmdldFR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZVR5cGUocGFyYW1UeXBlLCBmaWVsZC5nZXRHZW5lcmljVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIGlmICghdHlwZS5nZXRSZWZlcmVuY2VNZW1iZXJzKCkuY29udGFpbnNLZXkobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRSZWZlcmVuY2VzKCkuYWRkKGNyZWF0ZVJlZmVyZW5jZShuYW1lLCBwYXJhbVR5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRSZWZlcmVuY2VNZW1iZXJzKCkucHV0KG5hbWUsIG5ldyBKYXZhRWxlbWVudEltcGwoZmllbGQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICghdHlwZS5nZXRQcm9wZXJ0eU1lbWJlcnMoKS5jb250YWluc0tleShuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlLmdldFByb3BlcnRpZXMoKS5hZGQoY3JlYXRlUHJvcGVydHkobmFtZSwgcGFyYW1UeXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUuZ2V0UHJvcGVydHlNZW1iZXJzKCkucHV0KG5hbWUsIG5ldyBKYXZhRWxlbWVudEltcGwoZmllbGQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFByaXZhdGUgZmllbGRzIHVubGVzcyB0aGVyZSBpcyBhIHB1YmxpYyBvciBwcm90ZWN0ZWQKLSAgICAgICAgLy8gc2V0dGVyIG1ldGhvZCBmb3IgdGhlIHNhbWUgbmFtZQotICAgICAgICBTZXQ8RmllbGQ+IHByaXZhdGVGaWVsZHMgPSBnZXRQcml2YXRlRmllbGRzKGNsYXp6KTsKLSAgICAgICAgZm9yIChGaWVsZCBmaWVsZCA6IHByaXZhdGVGaWVsZHMpIHsKLSAgICAgICAgICAgIGlmIChmaWVsZC5pc0Fubm90YXRpb25QcmVzZW50KENhbGxiYWNrLmNsYXNzKSB8fCBmaWVsZC5pc0Fubm90YXRpb25QcmVzZW50KENvbnRleHQuY2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoc2V0dGVycy5jb250YWlucyhmaWVsZC5nZXROYW1lKCkpIHx8IG90aGVycy5jb250YWlucyhmaWVsZC5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGZpZWxkLmdldE5hbWUoKTsKLSAgICAgICAgICAgIENsYXNzPD8+IHBhcmFtVHlwZSA9IGZpZWxkLmdldFR5cGUoKTsKLSAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZVR5cGUocGFyYW1UeXBlLCBmaWVsZC5nZXRHZW5lcmljVHlwZSgpKSkgewotICAgICAgICAgICAgICAgIGlmICghdHlwZS5nZXRSZWZlcmVuY2VNZW1iZXJzKCkuY29udGFpbnNLZXkobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRSZWZlcmVuY2VzKCkuYWRkKGNyZWF0ZVJlZmVyZW5jZShuYW1lLCBwYXJhbVR5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgdHlwZS5nZXRSZWZlcmVuY2VNZW1iZXJzKCkucHV0KG5hbWUsIG5ldyBKYXZhRWxlbWVudEltcGwoZmllbGQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmICghdHlwZS5nZXRQcm9wZXJ0eU1lbWJlcnMoKS5jb250YWluc0tleShuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICB0eXBlLmdldFByb3BlcnRpZXMoKS5hZGQoY3JlYXRlUHJvcGVydHkobmFtZSwgcGFyYW1UeXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHR5cGUuZ2V0UHJvcGVydHlNZW1iZXJzKCkucHV0KG5hbWUsIG5ldyBKYXZhRWxlbWVudEltcGwoZmllbGQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBEZXRlcm1pbmVzIHRoZSBjb25zdHJ1Y3RvciB0byB1c2UgYmFzZWQgb24gdGhlIGNvbXBvbmVudCB0eXBlJ3MKLSAgICAgKiByZWZlcmVuY2VzIGFuZCBwcm9wZXJ0aWVzCi0gICAgICogCi0gICAgICogQHBhcmFtIHR5cGUgdGhlIGNvbXBvbmVudCB0eXBlCi0gICAgICogQHBhcmFtIGNsYXp6IHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb21wb25lbnQgdHlwZQotICAgICAqIEB0aHJvd3MgTm9Db25zdHJ1Y3RvckV4Y2VwdGlvbiBpZiBubyBzdWl0YWJsZSBjb25zdHJ1Y3RvciBpcyBmb3VuZAotICAgICAqIEB0aHJvd3MgQW1iaWd1b3VzQ29uc3RydWN0b3JFeGNlcHRpb24gaWYgdGhlIHBhcmFtZXRlcnMgb2YgYSBjb25zdHJ1Y3RvcgotICAgICAqICAgICAgICAgICAgIGNhbm5vdCBiZSB1bmFtYmlndW91c2x5IG1hcHBlZCB0byByZWZlcmVuY2VzIGFuZCBwcm9wZXJ0aWVzCi0gICAgICovCi0gICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCi0gICAgcHJpdmF0ZSA8VD4gdm9pZCBldmFsdWF0ZUNvbnN0cnVjdG9yKEphdmFJbXBsZW1lbnRhdGlvbiB0eXBlLCBDbGFzczxUPiBjbGF6eikgdGhyb3dzIEludHJvc3BlY3Rpb25FeGNlcHRpb24gewotICAgICAgICAvLyBkZXRlcm1pbmUgY29uc3RydWN0b3IgaWYgb25lIGlzIG5vdCBhbm5vdGF0ZWQKLSAgICAgICAgSmF2YUNvbnN0cnVjdG9ySW1wbDw/PiBkZWZpbml0aW9uID0gdHlwZS5nZXRDb25zdHJ1Y3RvcigpOwotICAgICAgICBNYXA8U3RyaW5nLCBKYXZhRWxlbWVudEltcGw+IHByb3BzID0gdHlwZS5nZXRQcm9wZXJ0eU1lbWJlcnMoKTsKLSAgICAgICAgTWFwPFN0cmluZywgSmF2YUVsZW1lbnRJbXBsPiByZWZzID0gdHlwZS5nZXRSZWZlcmVuY2VNZW1iZXJzKCk7ICAgICAgICAKLSAgICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3I7Ci0gICAgICAgIGJvb2xlYW4gZXhwbGljdCA9IGZhbHNlOwotICAgICAgICBpZiAoZGVmaW5pdGlvbiAhPSBudWxsICYmIGRlZmluaXRpb24uZ2V0Q29uc3RydWN0b3IoKQotICAgICAgICAgICAgLmlzQW5ub3RhdGlvblByZXNlbnQob3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Db25zdHJ1Y3Rvci5jbGFzcykpIHsKLSAgICAgICAgICAgIC8vIHRoZSBjb25zdHJ1Y3RvciB3YXMgYWxyZWFkeSBkZWZpbmVkIGV4cGxpY2l0bHkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIGlmIChkZWZpbml0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgIGV4cGxpY3QgPSB0cnVlOwotICAgICAgICAgICAgY29uc3RydWN0b3IgPSBkZWZpbml0aW9uLmdldENvbnN0cnVjdG9yKCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBubyBkZWZpbml0aW9uLCBoZXVyaXN0aWNhbGx5IGRldGVybWluZSBjb25zdHJ1Y3RvcgotICAgICAgICAgICAgQ29uc3RydWN0b3JbXSBjb25zdHJ1Y3RvcnMgPSBjbGF6ei5nZXRDb25zdHJ1Y3RvcnMoKTsKLSAgICAgICAgICAgIGlmIChjb25zdHJ1Y3RvcnMubGVuZ3RoID09IDApIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9Db25zdHJ1Y3RvckV4Y2VwdGlvbigiTm8gcHVibGljIGNvbnN0cnVjdG9yIGZvciBjbGFzcyIpOwotICAgICAgICAgICAgfSBlbHNlIGlmIChjb25zdHJ1Y3RvcnMubGVuZ3RoID09IDEpIHsKLSAgICAgICAgICAgICAgICAvLyBPbmx5IG9uZSBjb25zdHJ1Y3RvciwgdGFrZSBpdAotICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3JzWzBdOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBtdWx0aXBsZSBjb25zdHJ1Y3RvcnMgc2NlbmFyaW8KLSAgICAgICAgICAgICAgICBDb25zdHJ1Y3RvcjxUPiBzZWxlY3RlZCA9IG51bGw7ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvciAoQ29uc3RydWN0b3I8VD4gY3RvciA6IGNvbnN0cnVjdG9ycykgewotICAgICAgICAgICAgICAgICAgICBpZiAoY3Rvci5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZCA9IGN0b3I7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3Rvci5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA9PSBjb25BcmdzLnNpemUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBmaW5kIGEgY29uc3RydWN0b3Igd2hpY2ggaGFzIGF0bGVhc3Qgb25lCi0gICAgICAgICAgICAgICAgICAgIAkvLyByZWZlcmVuY2Ugb3IgcHJvcGVydHkgYXMgaXRzIHBhcmFtZXRlciB0eXBlcy4KLSAgICAgICAgICAgICAgICAgICAgCUNsYXNzPD8+W10gcGFyYW1ldGVyc1R5cGVzID0gY3Rvci5nZXRQYXJhbWV0ZXJUeXBlcygpOwotICAgICAgICAgICAgICAgIAkJZm9yIChDbGFzczw/PiBwVHlwZTogcGFyYW1ldGVyc1R5cGVzKSB7Ci0gICAgICAgICAgICAgICAgCQkJZm9yIChKYXZhRWxlbWVudEltcGwgcHJvcGVydHkgOiBwcm9wcy52YWx1ZXMoKSkgeyAgICAgICAgICAgIAkJCQkKLSAgICAgICAgICAgICAgICAJCQkJaWYgKHBUeXBlLmVxdWFscyhwcm9wZXJ0eS5nZXRUeXBlKCkpKSAKLSAgICAgICAgICAgICAgICAJCQkJCXNlbGVjdGVkID0gY3RvcjsKLSAgICAgICAgICAgICAgICAJCQl9Ci0gICAgICAgICAgICAgICAgCQkJZm9yIChKYXZhRWxlbWVudEltcGwgcmVmZXJlbmNlIDogcmVmcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgICAgIAkJCQlpZiAocFR5cGUuZXF1YWxzKHJlZmVyZW5jZS5nZXRUeXBlKCkpKSAKLSAgICAgICAgICAgICAgICAJCQkJCXNlbGVjdGVkID0gY3RvcjsKLSAgICAgICAgICAgICAgICAJCQl9ICAgICAgICAgICAgICAgCQkJICAgICAgICAgICAJCQkKLSAgICAgICAgICAgICAgICAJCX0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgTm9Db25zdHJ1Y3RvckV4Y2VwdGlvbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IHNlbGVjdGVkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmaW5pdGlvbiA9IHR5cGUuZ2V0Q29uc3RydWN0b3JzKCkuZ2V0KGNvbnN0cnVjdG9yKTsKLSAgICAgICAgICAgIHR5cGUuc2V0Q29uc3RydWN0b3IoZGVmaW5pdGlvbik7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEphdmFQYXJhbWV0ZXJJbXBsW10gcGFyYW1ldGVycyA9IGRlZmluaXRpb24uZ2V0UGFyYW1ldGVycygpOwotICAgICAgICBpZiAocGFyYW1ldGVycy5sZW5ndGggPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBBbm5vdGF0aW9uW11bXSBhbm5vdGF0aW9ucyA9IGNvbnN0cnVjdG9yLmdldFBhcmFtZXRlckFubm90YXRpb25zKCk7Ci0gICAgICAgIGlmICghZXhwbGljdCkgewotICAgICAgICAgICAgLy8gdGhlIGNvbnN0cnVjdG9yIHdhc24ndCBkZWZpbmVkIGJ5IGFuIGFubm90YXRpb24sIHNvIGNoZWNrIHRvIHNlZQotICAgICAgICAgICAgLy8gaWYgYW55IG9mIHRoZSBwYXJhbXMgaGF2ZSBhbiBhbm5vdGF0aW9uCi0gICAgICAgICAgICAvLyB3aGljaCB3ZSBjYW4gaW1wdXRlIGFzIGV4cGxpY2l0bHkgZGVmaW5pbmcgdGhlIGNvbnN0cnVjdG9yLCBlLmcuCi0gICAgICAgICAgICAvLyBAUHJvcGVydHksIEBSZWZlcmVuY2UsIG9yIEBBdXRvd2lyZQotICAgICAgICAgICAgZXhwbGljdCA9IGluamVjdGlvbkFubm90YXRpb25zUHJlc2VudChhbm5vdGF0aW9ucyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGV4cGxpY3QpIHsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChpc0Fubm90YXRlZChwYXJhbWV0ZXJzW2ldKSkgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFmaW5kUmVmZXJlbmNlT3JQcm9wZXJ0eShwYXJhbWV0ZXJzW2ldLCBwcm9wcywgcmVmcykpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFtYmlndW91c0NvbnN0cnVjdG9yRXhjZXB0aW9uKHBhcmFtZXRlcnNbaV0udG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFhcmVVbmlxdWUocGFyYW1ldGVycykpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQW1iaWd1b3VzQ29uc3RydWN0b3JFeGNlcHRpb24oIkNhbm5vdCByZXNvbHZlIG5vbi11bmlxdWUgcGFyYW1ldGVyIHR5cGVzLCB1c2UgQENvbnN0cnVjdG9yIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIWNhbGNQcm9wUmVmVW5pcXVlbmVzcyhwcm9wcy52YWx1ZXMoKSwgcmVmcy52YWx1ZXMoKSkpIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQW1iaWd1b3VzQ29uc3RydWN0b3JFeGNlcHRpb24oIkNhbm5vdCByZXNvbHZlIG5vbi11bmlxdWUgcGFyYW1ldGVyIHR5cGVzLCB1c2UgQENvbnN0cnVjdG9yIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIShwcm9wcy5pc0VtcHR5KCkgJiYgcmVmcy5pc0VtcHR5KCkpKSB7Ci0gICAgICAgICAgICAgICAgY2FsY1BhcmFtTmFtZXMocGFyYW1ldGVycywgcHJvcHMsIHJlZnMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBoZXVyaXN0aWNQYXJhbU5hbWVzKHR5cGUsIHBhcmFtZXRlcnMpOwotCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIHZvaWQgY2FsY1BhcmFtTmFtZXMoSmF2YVBhcmFtZXRlckltcGxbXSBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBKYXZhRWxlbWVudEltcGw+IHByb3BzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBKYXZhRWxlbWVudEltcGw+IHJlZnMpIHRocm93cyBBbWJpZ3VvdXNDb25zdHJ1Y3RvckV4Y2VwdGlvbiB7Ci0gICAgICAgIC8vIHRoZSBjb25zdHJ1Y3RvciBwYXJhbSB0eXBlcyBtdXN0IHVuYW1iaWd1b3VzbHkgbWF0Y2ggZGVmaW5lZAotICAgICAgICAvLyByZWZlcmVuY2Ugb3IgcHJvcGVydHkgdHlwZXMKLSAgICAgICAgZm9yIChKYXZhUGFyYW1ldGVySW1wbCBwYXJhbSA6IHBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghZmluZFJlZmVyZW5jZU9yUHJvcGVydHkocGFyYW0sIHByb3BzLCByZWZzKSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBbWJpZ3VvdXNDb25zdHJ1Y3RvckV4Y2VwdGlvbihwYXJhbS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSB2b2lkIGhldXJpc3RpY1BhcmFtTmFtZXMoSmF2YUltcGxlbWVudGF0aW9uIHR5cGUsIEphdmFQYXJhbWV0ZXJJbXBsW10gcGFyYW1ldGVycykKLSAgICAgICAgdGhyb3dzIEludHJvc3BlY3Rpb25FeGNlcHRpb24gewotICAgICAgICAvLyBoZXVyaXN0aWNhbGx5IGRldGVybWluZSByZWZzIGFuZCBwcm9wcyBmcm9tIHRoZSBwYXJhbWV0ZXIgdHlwZXMKLSAgICAgICAgZm9yIChKYXZhUGFyYW1ldGVySW1wbCBwIDogcGFyYW1ldGVycykgewotICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBwLmdldFR5cGUoKS5nZXRTaW1wbGVOYW1lKCkudG9Mb3dlckNhc2UoKTsKLSAgICAgICAgICAgIGlmIChpc1JlZmVyZW5jZVR5cGUocC5nZXRUeXBlKCksIHAuZ2V0R2VuZXJpY1R5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZXMoKS5hZGQoY3JlYXRlUmVmZXJlbmNlKG5hbWUsIHAuZ2V0VHlwZSgpKSk7Ci0gICAgICAgICAgICAgICAgcC5zZXRDbGFzc2lmZXIoUmVmZXJlbmNlLmNsYXNzKTsKLSAgICAgICAgICAgICAgICB0eXBlLmdldFJlZmVyZW5jZU1lbWJlcnMoKS5wdXQobmFtZSwgcCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHR5cGUuZ2V0UHJvcGVydGllcygpLmFkZChjcmVhdGVQcm9wZXJ0eShuYW1lLCBwLmdldFR5cGUoKSkpOwotICAgICAgICAgICAgICAgIHAuc2V0Q2xhc3NpZmVyKFByb3BlcnR5LmNsYXNzKTsKLSAgICAgICAgICAgICAgICB0eXBlLmdldFByb3BlcnR5TWVtYmVycygpLnB1dChuYW1lLCBwKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHAuc2V0TmFtZShuYW1lKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gYXJlVW5pcXVlKENsYXNzW10gY29sbGVjdGlvbikgewotICAgICAgICBTZXQ8Q2xhc3M+IHNldCA9IG5ldyBIYXNoU2V0PENsYXNzPihBcnJheXMuYXNMaXN0KGNvbGxlY3Rpb24pKTsKLSAgICAgICAgcmV0dXJuIHNldC5zaXplKCkgPT0gY29sbGVjdGlvbi5sZW5ndGg7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSB1bmlvbiBvZiB0aGUgZ2l2ZW4gY29sbGVjdGlvbnMgb2YgcHJvcGVydGllcyBhbmQKLSAgICAgKiByZWZlcmVuY2VzIGhhdmUgdW5pcXVlIEphdmEgdHlwZXMKLSAgICAgKi8KLSAgICBwcml2YXRlIGJvb2xlYW4gY2FsY1Byb3BSZWZVbmlxdWVuZXNzKENvbGxlY3Rpb248SmF2YUVsZW1lbnRJbXBsPiBwcm9wcywgQ29sbGVjdGlvbjxKYXZhRWxlbWVudEltcGw+IHJlZnMpIHsKLQotICAgICAgICBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbcHJvcHMuc2l6ZSgpICsgcmVmcy5zaXplKCldOwotICAgICAgICBpbnQgaSA9IDA7Ci0gICAgICAgIGZvciAoSmF2YUVsZW1lbnRJbXBsIHByb3BlcnR5IDogcHJvcHMpIHsKLSAgICAgICAgICAgIGNsYXNzZXNbaV0gPSBwcm9wZXJ0eS5nZXRUeXBlKCk7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChKYXZhRWxlbWVudEltcGwgcmVmZXJlbmNlIDogcmVmcykgewotICAgICAgICAgICAgY2xhc3Nlc1tpXSA9IHJlZmVyZW5jZS5nZXRUeXBlKCk7Ci0gICAgICAgICAgICBpKys7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFyZVVuaXF1ZShjbGFzc2VzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBVbmFtYmlndW91c2x5IGZpbmRzIHRoZSByZWZlcmVuY2Ugb3IgcHJvcGVydHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbgotICAgICAqIHR5cGUKLSAgICAgKiAKLSAgICAgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSByZWZlcmVuY2Ugb3IgcHJvcGVydHkgaWYgZm91bmQsIG51bGwgaWYgbm90Ci0gICAgICogQHRocm93cyBBbWJpZ3VvdXNDb25zdHJ1Y3RvckV4Y2VwdGlvbiBpZiB0aGUgY29uc3RydWN0b3IgcGFyYW1ldGVyIGNhbm5vdAotICAgICAqICAgICAgICAgICAgIGJlIHJlc29sdmVkIHRvIGEgcHJvcGVydHkgb3IgcmVmZXJlbmNlCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGZpbmRSZWZlcmVuY2VPclByb3BlcnR5KEphdmFQYXJhbWV0ZXJJbXBsIHBhcmFtZXRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgSmF2YUVsZW1lbnRJbXBsPiBwcm9wcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFwPFN0cmluZywgSmF2YUVsZW1lbnRJbXBsPiByZWZzKSB0aHJvd3MgQW1iaWd1b3VzQ29uc3RydWN0b3JFeGNlcHRpb24gewotCi0gICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKLSAgICAgICAgaWYgKCEiIi5lcXVhbHMocGFyYW1ldGVyLmdldE5hbWUoKSkpIHsKLSAgICAgICAgICAgIC8vIE1hdGNoIGJ5IG5hbWUKLSAgICAgICAgICAgIEphdmFFbGVtZW50SW1wbCBwcm9wID0gcHJvcHMuZ2V0KHBhcmFtZXRlci5nZXROYW1lKCkpOwotICAgICAgICAgICAgaWYgKHByb3AgIT0gbnVsbCAmJiBwcm9wLmdldFR5cGUoKSA9PSBwYXJhbWV0ZXIuZ2V0VHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyLnNldENsYXNzaWZlcihQcm9wZXJ0eS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBKYXZhRWxlbWVudEltcGwgcmVmID0gcmVmcy5nZXQocGFyYW1ldGVyLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICBpZiAocmVmICE9IG51bGwgJiYgcmVmLmdldFR5cGUoKSA9PSBwYXJhbWV0ZXIuZ2V0VHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyLnNldENsYXNzaWZlcihSZWZlcmVuY2UuY2xhc3MpOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGZvciAoSmF2YUVsZW1lbnRJbXBsIHByb3BlcnR5IDogcHJvcHMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eS5nZXRUeXBlKCkgPT0gcGFyYW1ldGVyLmdldFR5cGUoKSkgewotICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQW1iaWd1b3VzQ29uc3RydWN0b3JFeGNlcHRpb24oIkFtYmlndW91cyBwcm9wZXJ0eSBvciByZWZlcmVuY2UgZm9yIGNvbnN0cnVjdG9yIHR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1lbWJlcilwYXJhbWV0ZXIuZ2V0QW5jaG9yKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuc2V0Q2xhc3NpZmVyKFByb3BlcnR5LmNsYXNzKTsKLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuc2V0TmFtZShwcm9wZXJ0eS5nZXROYW1lKCkpOwotICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAvLyBkbyBub3QgYnJlYWsgc2luY2UgYW1iaWd1aXRpZXMgbXVzdCBiZSBjaGVja2VkLCBpLmUuIG1vcmUKLSAgICAgICAgICAgICAgICAvLyB0aGFuIG9uZSBwcm9wIG9yIHJlZiBvZiB0aGUgc2FtZSB0eXBlCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChKYXZhRWxlbWVudEltcGwgcmVmZXJlbmNlIDogcmVmcy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5nZXRUeXBlKCkgPT0gcGFyYW1ldGVyLmdldFR5cGUoKSkgewotICAgICAgICAgICAgICAgIGlmIChmb3VuZCkgewotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQW1iaWd1b3VzQ29uc3RydWN0b3JFeGNlcHRpb24oIkFtYmlndW91cyBwcm9wZXJ0eSBvciByZWZlcmVuY2UgZm9yIGNvbnN0cnVjdG9yIHR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1lbWJlcilwYXJhbWV0ZXIuZ2V0QW5jaG9yKCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuc2V0Q2xhc3NpZmVyKFJlZmVyZW5jZS5jbGFzcyk7Ci0gICAgICAgICAgICAgICAgcGFyYW1ldGVyLnNldE5hbWUocmVmZXJlbmNlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwotICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBicmVhayBzaW5jZSBhbWJpZ3VpdGllcyBtdXN0IGJlIGNoZWNrZWQsIGkuZS4gbW9yZQotICAgICAgICAgICAgICAgIC8vIHRoYW4gb25lIHByb3Agb3IgcmVmIG9mIHRoZSBzYW1lIHR5cGUKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0cnVlIGlmIGEgZ2l2ZW4gdHlwZSBpcyByZWZlcmVuY2UgYWNjb3JkaW5nIHRvIHRoZSBTQ0EKLSAgICAgKiBzcGVjaWZpY2F0aW9uIHJ1bGVzIGZvciBkZXRlcm1pbmluZyByZWZlcmVuY2UgdHlwZXMgVGhlIGZvbGxvd2luZyBydWxlcwotICAgICAqIGFyZSB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGFuIHVuYW5ub3RhdGVkIGZpZWxkIG9yIHNldHRlciBtZXRob2QgaXMgYQotICAgICAqIHByb3BlcnR5IG9yIHJlZmVyZW5jZToKLSAgICAgKiA8b2w+Ci0gICAgICogPGxpPklmIGl0cyB0eXBlIGlzIHNpbXBsZSwgdGhlbiBpdCBpcyBhIHByb3BlcnR5LgotICAgICAqIDxsaT5JZiBpdHMgdHlwZSBpcyBjb21wbGV4LCB0aGVuIGlmIHRoZSB0eXBlIGlzIGFuIGludGVyZmFjZSBtYXJrZWQgYnkKLSAgICAgKiAKLSAgICAgKiBAUmVtb3RhYmxlLCB0aGVuIGl0IGlzIGEgcmVmZXJlbmNlOyBvdGhlcndpc2UsIGl0IGlzIGEgcHJvcGVydHkuCi0gICAgICogICAgICAgICAgICAgPGxpPk90aGVyd2lzZSwgaWYgdGhlIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZW1iZXIgaXMgYW4KLSAgICAgKiAgICAgICAgICAgICBhcnJheSBvciBhIGphdmEudXRpbC5Db2xsZWN0aW9uLCB0aGUgYmFzZXR5cGUgaXMgdGhlIGVsZW1lbnQKLSAgICAgKiAgICAgICAgICAgICB0eXBlIG9mIHRoZSBhcnJheSBvciB0aGUgcGFyYW1ldGVyaXplZCB0eXBlIG9mIHRoZQotICAgICAqICAgICAgICAgICAgIENvbGxlY3Rpb247IG90aGVyd2lzZSB0aGUgYmFzZXR5cGUgaXMgdGhlIG1lbWJlciB0eXBlLiBJZiB0aGUKLSAgICAgKiAgICAgICAgICAgICBiYXNldHlwZSBpcyBhbiBpbnRlcmZhY2Ugd2l0aCBhbgotICAgICAqIEBSZW1vdGFibGUgb3IKLSAgICAgKiBAU2VydmljZSBhbm5vdGF0aW9uIHRoZW4gdGhlIG1lbWJlciBpcyBkZWZpbmVkIGFzIGEgcmVmZXJlbmNlLiBPdGhlcndpc2UsCi0gICAgICogICAgICAgICAgaXQgaXMgZGVmaW5lZCBhcyBhIHByb3BlcnR5LgotICAgICAqICAgICAgICAgIDwvb2w+Ci0gICAgICogICAgICAgICAgPHA+Ci0gICAgICogICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHJlZmVyZW5jZSBvciBvZiB0aGUgcHJvcGVydHkgaXMgZGVyaXZlZCBmcm9tIHRoZQotICAgICAqICAgICAgICAgIG5hbWUgZm91bmQgb24gdGhlIHNldHRlciBtZXRob2Qgb3Igb24gdGhlIGZpZWxkLgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc1JlZmVyZW5jZVR5cGUoQ2xhc3M8Pz4gY2xzLCBUeXBlIGdlbmVyaWNUeXBlKSB7Ci0gICAgICAgIENsYXNzPD8+IGJhc2VUeXBlID0gSmF2YUludHJvc3BlY3Rpb25IZWxwZXIuZ2V0QmFzZVR5cGUoY2xzLCBnZW5lcmljVHlwZSk7Ci0gICAgICAgIHJldHVybiBiYXNlVHlwZS5pc0ludGVyZmFjZSgpICYmIGJhc2VUeXBlLmlzQW5ub3RhdGlvblByZXNlbnQoUmVtb3RhYmxlLmNsYXNzKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG9wZXJhdGlvbiBpcyBkZWZpbmVkIGluIHRoZSBjb2xsZWN0aW9uIG9mCi0gICAgICogc2VydmljZSBpbnRlcmZhY2VzCi0gICAgICovCi0gICAgcHJpdmF0ZSBib29sZWFuIGlzSW5TZXJ2aWNlSW50ZXJmYWNlKE1ldGhvZCBvcGVyYXRpb24sIExpc3Q8b3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5TZXJ2aWNlPiBzZXJ2aWNlcykgewotICAgICAgICBmb3IgKG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuU2VydmljZSBzZXJ2aWNlIDogc2VydmljZXMpIHsKLSAgICAgICAgICAgIEludGVyZmFjZSBpbnRlcmZhY2UxID0gc2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpLmdldEludGVyZmFjZSgpOwotICAgICAgICAgICAgaWYgKGludGVyZmFjZTEgaW5zdGFuY2VvZiBKYXZhSW50ZXJmYWNlKSB7Ci0gICAgICAgICAgICAgICAgQ2xhc3M8Pz4gY2xhenogPSAoKEphdmFJbnRlcmZhY2UpaW50ZXJmYWNlMSkuZ2V0SmF2YUNsYXNzKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGlzTWV0aG9kTWF0Y2hlZChjbGF6eiwgb3BlcmF0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFRlc3QgaWYgdGhlIGNsYXNzIGRlY2xhcmVzIGEgbWV0aG9kIHdoaWNoIG1hdGNoZXMgdGhlIHNpZ25hdHVyZSBvZiB0aGUKLSAgICAgKiBnaXZlbiBtZXRob2QKLSAgICAgKiAKLSAgICAgKiBAcGFyYW0gY2xhenoKLSAgICAgKiBAcGFyYW0gbWV0aG9kCi0gICAgICogQHJldHVybgotICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc01ldGhvZE1hdGNoZWQoQ2xhc3M8Pz4gY2xhenosIE1ldGhvZCBtZXRob2QpIHsKLSAgICAgICAgaWYgKG1ldGhvZC5nZXREZWNsYXJpbmdDbGFzcygpID09IGNsYXp6KSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBNZXRob2RbXSBtZXRob2RzID0gY2xhenouZ2V0TWV0aG9kcygpOwotICAgICAgICBmb3IgKE1ldGhvZCBtIDogbWV0aG9kcykgewotICAgICAgICAgICAgaWYgKEphdmFJbnRyb3NwZWN0aW9uSGVscGVyLmV4YWN0TWV0aG9kTWF0Y2gobWV0aG9kLCBtKSkgewotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBDcmVhdGVzIGEgbWFwcGVkIHByb3BlcnR5LgotICAgICAqIAotICAgICAqIEBwYXJhbSBuYW1lIHRoZSBwcm9wZXJ0eSBuYW1lCi0gICAgICogQHBhcmFtIHBhcmFtVHlwZSB0aGUgcHJvcGVydHkgdHlwZQotICAgICAqLwotICAgIHByaXZhdGUgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Qcm9wZXJ0eSBjcmVhdGVQcm9wZXJ0eShTdHJpbmcgbmFtZSwgQ2xhc3M8Pz4gcGFyYW1UeXBlKSB7Ci0gICAgICAgIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUHJvcGVydHkgcHJvcGVydHkgPSBhc3NlbWJseUZhY3RvcnkuY3JlYXRlUHJvcGVydHkoKTsKLSAgICAgICAgcHJvcGVydHkuc2V0TmFtZShuYW1lKTsKLSAgICAgICAgcHJvcGVydHkuc2V0WFNEVHlwZShKYXZhWE1MTWFwcGVyLmdldFhNTFR5cGUocGFyYW1UeXBlKSk7Ci0gICAgICAgIHJldHVybiBwcm9wZXJ0eTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGJvb2xlYW4gaXNBbm5vdGF0ZWQoSmF2YVBhcmFtZXRlckltcGwgcGFyYW1ldGVyKSB7Ci0gICAgICAgIGZvciAoQW5ub3RhdGlvbiBhbm5vdGF0aW9uIDogcGFyYW1ldGVyLmdldEFubm90YXRpb25zKCkpIHsKLSAgICAgICAgICAgIENsYXNzPD8gZXh0ZW5kcyBBbm5vdGF0aW9uPiBhbm5vdFR5cGUgPSBhbm5vdGF0aW9uLmFubm90YXRpb25UeXBlKCk7Ci0gICAgICAgICAgICBpZiAoYW5ub3RUeXBlLmVxdWFscyhQcm9wZXJ0eS5jbGFzcykgfHwgYW5ub3RUeXBlLmVxdWFscyhSZWZlcmVuY2UuY2xhc3MpCi0gICAgICAgICAgICAgICAgfHwgYW5ub3RUeXBlLmVxdWFscyhSZXNvdXJjZS5jbGFzcykpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gYXJlVW5pcXVlKEphdmFQYXJhbWV0ZXJJbXBsW10gcGFyYW1ldGVycykgewotICAgICAgICBTZXQ8Q2xhc3M+IHNldCA9IG5ldyBIYXNoU2V0PENsYXNzPihwYXJhbWV0ZXJzLmxlbmd0aCk7Ci0gICAgICAgIGZvciAoSmF2YVBhcmFtZXRlckltcGwgcCA6IHBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghc2V0LmFkZChwLmdldFR5cGUoKSkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcHVibGljIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUmVmZXJlbmNlIGNyZWF0ZVJlZmVyZW5jZShTdHJpbmcgbmFtZSwgQ2xhc3M8Pz4gcGFyYW1UeXBlKQotICAgICAgICB0aHJvd3MgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbiB7Ci0gICAgICAgIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUmVmZXJlbmNlIHJlZmVyZW5jZSA9IGFzc2VtYmx5RmFjdG9yeS5jcmVhdGVSZWZlcmVuY2UoKTsKLSAgICAgICAgcmVmZXJlbmNlLnNldE5hbWUobmFtZSk7Ci0gICAgICAgIEphdmFJbnRlcmZhY2VDb250cmFjdCBpbnRlcmZhY2VDb250cmFjdCA9IGphdmFJbnRlcmZhY2VGYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2VDb250cmFjdCgpOwotICAgICAgICByZWZlcmVuY2Uuc2V0SW50ZXJmYWNlQ29udHJhY3QoaW50ZXJmYWNlQ29udHJhY3QpOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgSmF2YUludGVyZmFjZSBjYWxsSW50ZXJmYWNlID0gamF2YUludGVyZmFjZUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZShwYXJhbVR5cGUpOwotICAgICAgICAgICAgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuc2V0SW50ZXJmYWNlKGNhbGxJbnRlcmZhY2UpOwotICAgICAgICAgICAgaWYgKGNhbGxJbnRlcmZhY2UuZ2V0Q2FsbGJhY2tDbGFzcygpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICBKYXZhSW50ZXJmYWNlIGNhbGxiYWNrSW50ZXJmYWNlID0gamF2YUludGVyZmFjZUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZShjYWxsSW50ZXJmYWNlLmdldENhbGxiYWNrQ2xhc3MoKSk7Ci0gICAgICAgICAgICAgICAgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuc2V0Q2FsbGJhY2tJbnRlcmZhY2UoY2FsbGJhY2tJbnRlcmZhY2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVmZXJlbmNlLnNldE11bHRpcGxpY2l0eShNdWx0aXBsaWNpdHkuWkVST19PTkUpOwotICAgICAgICB9IGNhdGNoIChJbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uIGUxKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbihlMSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogIFRoaXMgcGFydCBzZWVtcyB0byBoYXZlIGFscmVhZHkgYmVlbiB0YWtlbiBjYXJlIGFib3ZlISEKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHByb2Nlc3NDYWxsYmFjayhwYXJhbVR5cGUsIHJlZmVyZW5jZSk7Ci0gICAgICAgIH0gY2F0Y2ggKEludmFsaWRTZXJ2aWNlVHlwZUV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW50cm9zcGVjdGlvbkV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwotICAgIH0KLQotICAgIHB1YmxpYyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlNlcnZpY2UgY3JlYXRlU2VydmljZShDbGFzczw/PiBpbnRlcmZhemUpIHRocm93cyBJbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uIHsKLSAgICAgICAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5TZXJ2aWNlIHNlcnZpY2UgPSBhc3NlbWJseUZhY3RvcnkuY3JlYXRlU2VydmljZSgpOwotICAgICAgICBzZXJ2aWNlLnNldE5hbWUoaW50ZXJmYXplLmdldFNpbXBsZU5hbWUoKSk7Ci0KLSAgICAgICAgSmF2YUludGVyZmFjZUNvbnRyYWN0IGludGVyZmFjZUNvbnRyYWN0ID0gamF2YUludGVyZmFjZUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZUNvbnRyYWN0KCk7Ci0gICAgICAgIHNlcnZpY2Uuc2V0SW50ZXJmYWNlQ29udHJhY3QoaW50ZXJmYWNlQ29udHJhY3QpOwotCi0gICAgICAgIEphdmFJbnRlcmZhY2UgY2FsbEludGVyZmFjZSA9IGphdmFJbnRlcmZhY2VGYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2UoaW50ZXJmYXplKTsKLSAgICAgICAgc2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpLnNldEludGVyZmFjZShjYWxsSW50ZXJmYWNlKTsKLSAgICAgICAgaWYgKGNhbGxJbnRlcmZhY2UuZ2V0Q2FsbGJhY2tDbGFzcygpICE9IG51bGwpIHsKLSAgICAgICAgICAgIEphdmFJbnRlcmZhY2UgY2FsbGJhY2tJbnRlcmZhY2UgPSBqYXZhSW50ZXJmYWNlRmFjdG9yeS5jcmVhdGVKYXZhSW50ZXJmYWNlKGNhbGxJbnRlcmZhY2UuZ2V0Q2FsbGJhY2tDbGFzcygpKTsKLSAgICAgICAgICAgIHNlcnZpY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKS5zZXRDYWxsYmFja0ludGVyZmFjZShjYWxsYmFja0ludGVyZmFjZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBJbnRlcmZhY2UgamF2YUludGVyZmFjZSA9IHNlcnZpY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKS5nZXRJbnRlcmZhY2UoKTsKLSAgICAgICAgamF2YUludGVyZmFjZS5zZXRSZW1vdGFibGUoaW50ZXJmYXplLmdldEFubm90YXRpb24oUmVtb3RhYmxlLmNsYXNzKSAhPSBudWxsKTsKLSAgICAgICAgc2VydmljZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpLnNldEludGVyZmFjZShqYXZhSW50ZXJmYWNlKTsKLSAgICAgICAgcmV0dXJuIHNlcnZpY2U7Ci0gICAgfQotCi0gICAgcHVibGljIHZvaWQgcHJvY2Vzc0NhbGxiYWNrKENsYXNzPD8+IGludGVyZmF6ZSwgQ29udHJhY3QgY29udHJhY3QpIHRocm93cyBJbnZhbGlkU2VydmljZVR5cGVFeGNlcHRpb24gewotICAgICAgICBDYWxsYmFjayBjYWxsYmFjayA9IGludGVyZmF6ZS5nZXRBbm5vdGF0aW9uKENhbGxiYWNrLmNsYXNzKTsKLSAgICAgICAgaWYgKGNhbGxiYWNrICE9IG51bGwgJiYgIVZvaWQuY2xhc3MuZXF1YWxzKGNhbGxiYWNrLnZhbHVlKCkpKSB7Ci0gICAgICAgICAgICBDbGFzczw/PiBjYWxsYmFja0NsYXNzID0gY2FsbGJhY2sudmFsdWUoKTsKLSAgICAgICAgICAgIEphdmFJbnRlcmZhY2UgamF2YUludGVyZmFjZTsKLSAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgamF2YUludGVyZmFjZSA9IGphdmFJbnRlcmZhY2VGYWN0b3J5LmNyZWF0ZUphdmFJbnRlcmZhY2UoY2FsbGJhY2tDbGFzcyk7Ci0gICAgICAgICAgICAgICAgY29udHJhY3QuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKS5zZXRDYWxsYmFja0ludGVyZmFjZShqYXZhSW50ZXJmYWNlKTsKLSAgICAgICAgICAgIH0gY2F0Y2ggKEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkU2VydmljZVR5cGVFeGNlcHRpb24oIkludmFsaWQgY2FsbGJhY2sgaW50ZXJmYWNlICIrY2FsbGJhY2tDbGFzcywgaW50ZXJmYXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChjYWxsYmFjayAhPSBudWxsICYmIFZvaWQuY2xhc3MuZXF1YWxzKGNhbGxiYWNrLnZhbHVlKCkpKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZFNlcnZpY2VUeXBlRXhjZXB0aW9uKCJObyBjYWxsYmFjayBpbnRlcmZhY2Ugc3BlY2lmaWVkIG9uIGFubm90YXRpb24iLCBpbnRlcmZhemUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gaW5qZWN0aW9uQW5ub3RhdGlvbnNQcmVzZW50KEFubm90YXRpb25bXVtdIGFubm90cykgewotICAgICAgICBmb3IgKEFubm90YXRpb25bXSBhbm5vdGF0aW9ucyA6IGFubm90cykgewotICAgICAgICAgICAgZm9yIChBbm5vdGF0aW9uIGFubm90YXRpb24gOiBhbm5vdGF0aW9ucykgewotICAgICAgICAgICAgICAgIENsYXNzPD8gZXh0ZW5kcyBBbm5vdGF0aW9uPiBhbm5vdFR5cGUgPSBhbm5vdGF0aW9uLmFubm90YXRpb25UeXBlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKGFubm90VHlwZS5lcXVhbHMoUHJvcGVydHkuY2xhc3MpIHx8IGFubm90VHlwZS5lcXVhbHMoUmVmZXJlbmNlLmNsYXNzKQotICAgICAgICAgICAgICAgICAgICB8fCBhbm5vdFR5cGUuZXF1YWxzKFJlc291cmNlLmNsYXNzKSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW50cm9zcGVjdC9TcHJpbmdYTUxDb21wb25lbnRUeXBlTG9hZGVyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2ludHJvc3BlY3QvU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlci5qYXZhCmluZGV4IGJkMzEzNGMuLjRmYmU1ZGEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW50cm9zcGVjdC9TcHJpbmdYTUxDb21wb25lbnRUeXBlTG9hZGVyLmphdmEKKysrIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnRyb3NwZWN0L1NwcmluZ1hNTENvbXBvbmVudFR5cGVMb2FkZXIuamF2YQpAQCAtMTgsOSArMTgsNiBAQAogICovCiBwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmludHJvc3BlY3Q7CiAKLWltcG9ydCBzdGF0aWMgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuRU5EX0VMRU1FTlQ7Ci1pbXBvcnQgc3RhdGljIGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLlNUQVJUX0VMRU1FTlQ7Ci0KIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKQEAgLTMyLDE4ICsyOSwxOSBAQAogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247CitpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKIGltcG9ydCBqYXZhLnV0aWwuamFyLkF0dHJpYnV0ZXM7CiBpbXBvcnQgamF2YS51dGlsLmphci5KYXJFbnRyeTsKIGltcG9ydCBqYXZhLnV0aWwuamFyLkphckZpbGU7CiBpbXBvcnQgamF2YS51dGlsLmphci5NYW5pZmVzdDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7CiAKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MSW5wdXRGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtUmVhZGVyOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Bc3NlbWJseUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb25lbnRUeXBlOwpAQCAtNTEsMTYgKzQ5LDE1IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Qcm9wZXJ0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlJlZmVyZW5jZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LlNlcnZpY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWwuUG9saWN5U3ViamVjdFByb2Nlc3NvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5BcnRpZmFjdDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5Db250cmlidXRpb25GYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Qcm9jZXNzb3JDb250ZXh0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLkNsYXNzUmVmZXJlbmNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyLk1vZGVsUmVzb2x2ZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkZhY3RvcnlFeHRlbnNpb25Qb2ludDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuVXRpbGl0eUV4dGVuc2lvblBvaW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5KYXZhQ29uc3RydWN0b3JJbXBsOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5KYXZhRWxlbWVudEltcGw7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFJbXBsZW1lbnRhdGlvbjsKQEAgLTY4LDExICs2NSwxMSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ0JlYW5FbGVtZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbkNvbnN0YW50czsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdQcm9wZXJ0eUVsZW1lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nU0NBU2VydmljZUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sLlNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludmFsaWRJbnRlcmZhY2VFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZUNvbnRyYWN0OwpAQCAtODEsNyArNzgsOSBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Nb25pdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Qcm9ibGVtOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Qcm9ibGVtLlNldmVyaXR5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkludGVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5Qb2xpY3lGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeVNldDsKIAogLyoqCiAgKiBJbnRyb3NwZWN0cyBhIFNwcmluZyBYTUwgYXBwbGljYXRpb24tY29udGV4dCBjb25maWd1cmF0aW9uIGZpbGUgdG8gY3JlYXRlIDxpbXBsZW1lbnRhdGlvbi1zcHJpbmcuLi8+CkBAIC05MCw0MiArODksMjcgQEAKICAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAogICovCiBwdWJsaWMgY2xhc3MgU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlciB7CisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTG9nZ2VyIGxvZyA9IExvZ2dlci5nZXRMb2dnZXIoU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlci5jbGFzcy5nZXROYW1lKCkpOworCiAgICAgcHJpdmF0ZSBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5OwotICAgIHByaXZhdGUgWE1MSW5wdXRGYWN0b3J5IHhtbElucHV0RmFjdG9yeTsKICAgICBwcml2YXRlIENvbnRyaWJ1dGlvbkZhY3RvcnkgY29udHJpYnV0aW9uRmFjdG9yeTsKICAgICBwcml2YXRlIEFzc2VtYmx5RmFjdG9yeSBhc3NlbWJseUZhY3Rvcnk7Ci0gICAgcHJpdmF0ZSBKYXZhSW50ZXJmYWNlRmFjdG9yeSBqYXZhRmFjdG9yeTsKICAgICBwcml2YXRlIFBvbGljeUZhY3RvcnkgcG9saWN5RmFjdG9yeTsKLSAgICBwcml2YXRlIFBvbGljeVN1YmplY3RQcm9jZXNzb3IgcG9saWN5UHJvY2Vzc29yOwotICAgIHByaXZhdGUgTW9uaXRvciBtb25pdG9yOworICAgIHByaXZhdGUgSmF2YUludGVyZmFjZUZhY3RvcnkgamF2YUZhY3Rvcnk7CiAgICAgcHJpdmF0ZSBTcHJpbmdCZWFuSW50cm9zcGVjdG9yIGJlYW5JbnRyb3NwZWN0b3I7CiAKLSAgICBwdWJsaWMgU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlcihFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbml0b3IgbW9uaXRvcikgeworICAgIHByaXZhdGUgU3ByaW5nWE1MQmVhbkRlZmluaXRpb25Mb2FkZXIgeG1sQmVhbkRlZmluaXRpb25Mb2FkZXI7CisKKyAgICBwdWJsaWMgU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlcihFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMucmVnaXN0cnkgPSByZWdpc3RyeTsKICAgICAgICAgRmFjdG9yeUV4dGVuc2lvblBvaW50IGZhY3RvcmllcyA9IHJlZ2lzdHJ5LmdldEV4dGVuc2lvblBvaW50KEZhY3RvcnlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CiAgICAgICAgIHRoaXMuYXNzZW1ibHlGYWN0b3J5ID0gZmFjdG9yaWVzLmdldEZhY3RvcnkoQXNzZW1ibHlGYWN0b3J5LmNsYXNzKTsKLSAgICAgICAgdGhpcy5qYXZhRmFjdG9yeSA9IGZhY3Rvcmllcy5nZXRGYWN0b3J5KEphdmFJbnRlcmZhY2VGYWN0b3J5LmNsYXNzKTsKICAgICAgICAgdGhpcy5wb2xpY3lGYWN0b3J5ID0gZmFjdG9yaWVzLmdldEZhY3RvcnkoUG9saWN5RmFjdG9yeS5jbGFzcyk7Ci0gICAgICAgIHRoaXMucG9saWN5UHJvY2Vzc29yID0gbmV3IFBvbGljeVN1YmplY3RQcm9jZXNzb3IocG9saWN5RmFjdG9yeSk7CisgICAgICAgIHRoaXMuamF2YUZhY3RvcnkgPSBmYWN0b3JpZXMuZ2V0RmFjdG9yeShKYXZhSW50ZXJmYWNlRmFjdG9yeS5jbGFzcyk7CiAgICAgICAgIHRoaXMuY29udHJpYnV0aW9uRmFjdG9yeSA9IGZhY3Rvcmllcy5nZXRGYWN0b3J5KENvbnRyaWJ1dGlvbkZhY3RvcnkuY2xhc3MpOwotICAgICAgICB0aGlzLnhtbElucHV0RmFjdG9yeSA9IGZhY3Rvcmllcy5nZXRGYWN0b3J5KFhNTElucHV0RmFjdG9yeS5jbGFzcyk7Ci0gICAgICAgIHRoaXMubW9uaXRvciA9IG1vbml0b3I7Ci0gICAgfQotICAgIAotICAgIC8qKgotICAgICAqIFJlcG9ydCBhIGV4Y2VwdGlvbi4KLSAgICAgKgotICAgICAqIEBwYXJhbSBwcm9ibGVtcwotICAgICAqIEBwYXJhbSBtZXNzYWdlCi0gICAgICogQHBhcmFtIG1vZGVsCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIGVycm9yKFN0cmluZyBtZXNzYWdlLCBPYmplY3QgbW9kZWwsIEV4Y2VwdGlvbiBleCkgewotICAgIAkgaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCSAgICAgICAgUHJvYmxlbSBwcm9ibGVtID0gbW9uaXRvci5jcmVhdGVQcm9ibGVtKHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCksICJpbXBsLXNwcmluZy12YWxpZGF0aW9uLW1lc3NhZ2VzIiwgU2V2ZXJpdHkuRVJST1IsIG1vZGVsLCBtZXNzYWdlLCBleCk7Ci0JICAgICAgICBtb25pdG9yLnByb2JsZW0ocHJvYmxlbSk7Ci0gICAgCSB9CisgICAgICAgIHRoaXMueG1sQmVhbkRlZmluaXRpb25Mb2FkZXIgPQorICAgICAgICAgICAgcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoVXRpbGl0eUV4dGVuc2lvblBvaW50LmNsYXNzKS5nZXRVdGlsaXR5KFNwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyLmNsYXNzKTsKICAgICB9CiAKICAgICAvKioKQEAgLTEzNSwxMyArMTE5LDM3IEBACiAgICAgICogQHBhcmFtIG1lc3NhZ2UKICAgICAgKiBAcGFyYW0gbW9kZWwKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgZXJyb3IoU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBtb2RlbCwgT2JqZWN0Li4uIG1lc3NhZ2VQYXJhbWV0ZXJzKSB7Ci0gICAgCSBpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JICAgICAgICBQcm9ibGVtIHByb2JsZW0gPSBtb25pdG9yLmNyZWF0ZVByb2JsZW0odGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwgImltcGwtc3ByaW5nLXZhbGlkYXRpb24tbWVzc2FnZXMiLCBTZXZlcml0eS5FUlJPUiwgbW9kZWwsIG1lc3NhZ2UsIChPYmplY3RbXSltZXNzYWdlUGFyYW1ldGVycyk7Ci0JICAgICAgICBtb25pdG9yLnByb2JsZW0ocHJvYmxlbSk7Ci0gICAgCSB9CisgICAgcHJpdmF0ZSB2b2lkIGVycm9yKE1vbml0b3IgbW9uaXRvciwgU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBtb2RlbCwgT2JqZWN0Li4uIG1lc3NhZ2VQYXJhbWV0ZXJzKSB7CisgICAgICAgIGlmIChtb25pdG9yICE9IG51bGwpIHsKKyAgICAgICAgICAgIFByb2JsZW0gcHJvYmxlbSA9CisgICAgICAgICAgICAgICAgbW9uaXRvci5jcmVhdGVQcm9ibGVtKHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsLXNwcmluZy12YWxpZGF0aW9uLW1lc3NhZ2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V2ZXJpdHkuRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT2JqZWN0W10pbWVzc2FnZVBhcmFtZXRlcnMpOworICAgICAgICAgICAgbW9uaXRvci5wcm9ibGVtKHByb2JsZW0pOworICAgICAgICB9CiAgICAgfQotCisgICAgLyoqCisgICAgICogUmVwb3J0IGEgZXJyb3IuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcHJvYmxlbXMKKyAgICAgKiBAcGFyYW0gbWVzc2FnZQorICAgICAqIEBwYXJhbSBtb2RlbAorICAgICAqLworICAgIHByaXZhdGUgdm9pZCB3YXJuaW5nKE1vbml0b3IgbW9uaXRvciwgU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBtb2RlbCwgT2JqZWN0Li4uIG1lc3NhZ2VQYXJhbWV0ZXJzKSB7CisgICAgICAgIGlmIChtb25pdG9yICE9IG51bGwpIHsKKyAgICAgICAgICAgIFByb2JsZW0gcHJvYmxlbSA9CisgICAgICAgICAgICAgICAgbW9uaXRvci5jcmVhdGVQcm9ibGVtKHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsLXNwcmluZy12YWxpZGF0aW9uLW1lc3NhZ2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V2ZXJpdHkuV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPYmplY3RbXSltZXNzYWdlUGFyYW1ldGVycyk7CisgICAgICAgICAgICBtb25pdG9yLnByb2JsZW0ocHJvYmxlbSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgcHJvdGVjdGVkIENsYXNzPFNwcmluZ0ltcGxlbWVudGF0aW9uPiBnZXRJbXBsZW1lbnRhdGlvbkNsYXNzKCkgewogICAgICAgICByZXR1cm4gU3ByaW5nSW1wbGVtZW50YXRpb24uY2xhc3M7CiAgICAgfQpAQCAtMTUxLDkgKzE1OSwxMCBAQAogICAgICAqIFNwcmluZyBpbXBsZW1lbnRhdGlvbgogICAgICAqCiAgICAgICovCi0gICAgcHVibGljIHZvaWQgbG9hZChTcHJpbmdJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRhdGlvbiwgTW9kZWxSZXNvbHZlciByZXNvbHZlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7CisgICAgcHVibGljIHZvaWQgbG9hZChTcHJpbmdJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRhdGlvbiwgTW9kZWxSZXNvbHZlciByZXNvbHZlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KQorICAgICAgICB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7CiAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTcHJpbmcgVHlwZUxvYWRlciAtIGxvYWQgbWV0aG9kIHN0YXJ0Iik7Ci0gICAgCUNvbXBvbmVudFR5cGUgY29tcG9uZW50VHlwZSA9IGltcGxlbWVudGF0aW9uLmdldENvbXBvbmVudFR5cGUoKTsKKyAgICAgICAgQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlID0gaW1wbGVtZW50YXRpb24uZ2V0Q29tcG9uZW50VHlwZSgpOwogICAgICAgICAvKiBDaGVjayB0aGF0IHRoZXJlIGlzIGEgY29tcG9uZW50IHR5cGUgb2JqZWN0IGFscmVhZHkgc2V0CSovCiAgICAgICAgIGlmIChjb21wb25lbnRUeXBlID09IG51bGwpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uKCJTcHJpbmdYTUxMb2FkZXIgbG9hZDogaW1wbGVtZW50YXRpb24gaGFzIG5vIENvbXBvbmVudFR5cGUgb2JqZWN0Iik7CkBAIC0xNjQsMTAgKzE3MywxMSBAQAogICAgICAgICAgICAgaWYgKCFjb21wb25lbnRUeXBlLmlzVW5yZXNvbHZlZCgpKQogICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLnNldFVucmVzb2x2ZWQoZmFsc2UpOwogICAgICAgICB9IC8vIGVuZCBpZgotICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiU3ByaW5nIFR5cGVMb2FkZXIgLSBsb2FkIG1ldGhvZCBjb21wbGV0ZSIpOworICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTcHJpbmcgVHlwZUxvYWRlciAtIGxvYWQgbWV0aG9kIGNvbXBsZXRlIik7CiAgICAgfSAvLyBlbmQgbWV0aG9kIGxvYWQKIAotICAgIHByaXZhdGUgQ2xhc3M8Pz4gcmVzb2x2ZUNsYXNzKE1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXIsIFN0cmluZyBjbGFzc05hbWUsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24geworICAgIHByaXZhdGUgQ2xhc3M8Pz4gcmVzb2x2ZUNsYXNzKE1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXIsIFN0cmluZyBjbGFzc05hbWUsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkKKyAgICAgICAgdGhyb3dzIENsYXNzTm90Rm91bmRFeGNlcHRpb24gewogICAgICAgICBDbGFzc1JlZmVyZW5jZSBjbGFzc1JlZmVyZW5jZSA9IG5ldyBDbGFzc1JlZmVyZW5jZShjbGFzc05hbWUpOwogICAgICAgICBjbGFzc1JlZmVyZW5jZSA9IHJlc29sdmVyLnJlc29sdmVNb2RlbChDbGFzc1JlZmVyZW5jZS5jbGFzcywgY2xhc3NSZWZlcmVuY2UsIGNvbnRleHQpOwogICAgICAgICBpZiAoY2xhc3NSZWZlcmVuY2UuaXNVbnJlc29sdmVkKCkpIHsKQEAgLTE4NCw4ICsxOTQsOCBAQAogICAgICAqIEBwYXJhbSBpbXBsZW1lbnRhdGlvbiBTcHJpbmdJbXBsZW1lbnRhdGlvbiBpbnRvIHdoaWNoIHRvIGxvYWQgdGhlIGNvbXBvbmVudCB0eXBlIGluZm9ybWF0aW9uCiAgICAgICogQHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIEZhaWxlZCB0byByZWFkIHRoZSBjb250cmlidXRpb24KICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgbG9hZEZyb21YTUwoU3ByaW5nSW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb24sIE1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24gewotICAgICAgICBYTUxTdHJlYW1SZWFkZXIgcmVhZGVyOworICAgIHByaXZhdGUgdm9pZCBsb2FkRnJvbVhNTChTcHJpbmdJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRhdGlvbiwgTW9kZWxSZXNvbHZlciByZXNvbHZlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KQorICAgICAgICB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7CiAgICAgICAgIExpc3Q8U3ByaW5nQmVhbkVsZW1lbnQ+IGJlYW5zID0gbmV3IEFycmF5TGlzdDxTcHJpbmdCZWFuRWxlbWVudD4oKTsKICAgICAgICAgTGlzdDxTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudD4gc2VydmljZXMgPSBuZXcgQXJyYXlMaXN0PFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PigpOwogICAgICAgICBMaXN0PFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ+IHJlZmVyZW5jZXMgPSBuZXcgQXJyYXlMaXN0PFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ+KCk7CkBAIC0xOTUsMzUgKzIwNSwzNyBAQAogICAgICAgICBMaXN0PFVSTD4gY29udGV4dFJlc291cmNlcyA9IG5ldyBBcnJheUxpc3Q8VVJMPigpOwogICAgICAgICBTdHJpbmcgY29udGV4dFBhdGggPSBpbXBsZW1lbnRhdGlvbi5nZXRMb2NhdGlvbigpOwogCi0gICAgICAgIHRyeSB7ICAgICAgICAJCisgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXNvdXJjZSA9IHJlc29sdmVMb2NhdGlvbihyZXNvbHZlciwgY29udGV4dFBhdGgsIGNvbnRleHQpOwogICAgICAgICAgICAgY29udGV4dFJlc291cmNlcyA9IGdldEFwcGxpY2F0aW9uQ29udGV4dFJlc291cmNlKHJlc291cmNlKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi5zZXRDbGFzc0xvYWRlcihuZXcgQ29udGV4dENsYXNzTG9hZGVyKHJlc29sdmVyLCBjb250ZXh0KSk7CiAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi5zZXRSZXNvdXJjZShjb250ZXh0UmVzb3VyY2VzKTsKICAgICAgICAgICAgIC8vIFRoZSBVUkkgaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgSW1wbGVtZW50YXRpb24KICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLnNldFVSSShyZXNvdXJjZS50b1N0cmluZygpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZm9yIChVUkwgY29udGV4dFJlc291cmNlIDogY29udGV4dFJlc291cmNlcykgeyAgICAgICAgICAgIAkKLSAgICAgICAgICAgIAlMaXN0PFNwcmluZ0JlYW5FbGVtZW50PiBhcHBDeHRCZWFucyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nQmVhbkVsZW1lbnQ+KCk7Ci0gICAgICAgICAgICAgICAgTGlzdDxTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudD4gYXBwQ3h0U2VydmljZXMgPSBuZXcgQXJyYXlMaXN0PFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PigpOwotICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudD4gYXBwQ3h0UmVmZXJlbmNlcyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudD4oKTsKLSAgICAgICAgICAgICAgICBMaXN0PFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudD4gYXBwQ3h0UHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nU0NBUHJvcGVydHlFbGVtZW50PigpOwotICAgICAgICAgICAgCXJlYWRlciA9IHhtbElucHV0RmFjdG9yeS5jcmVhdGVYTUxTdHJlYW1SZWFkZXIoY29udGV4dFJlc291cmNlLm9wZW5TdHJlYW0oKSk7Ci0gICAgICAgICAgICAJLy8gUmVhZCB0aGUgYmVhbnMsIHNlcnZpY2VzLCByZWZlcmVuY2VzIGFuZCBwcm9wZXJ0aWVzIGZvciBpbmRpdmlkdWFsIGFwcGxpY2F0aW9uIGNvbnRleHQKLSAgICAgICAgICAgIAlyZWFkQ29udGV4dERlZmluaXRpb24ocmVzb2x2ZXIsIHJlYWRlciwgY29udGV4dFBhdGgsIGFwcEN4dEJlYW5zLCBhcHBDeHRTZXJ2aWNlcywgYXBwQ3h0UmVmZXJlbmNlcywgYXBwQ3h0UHJvcGVydGllcywgY29udGV4dCk7Ci0gICAgICAgICAgICAJLy8gVmFsaWRhdGUgdGhlIGJlYW5zIGZyb20gaW5kaXZpZHVhbCBhcHBsaWNhdGlvbiBjb250ZXh0IGZvciB1bmlxdWVuZXNzCi0gICAgICAgICAgICAJdmFsaWRhdGVCZWFucyhhcHBDeHRCZWFucywgYXBwQ3h0U2VydmljZXMsIGFwcEN4dFJlZmVyZW5jZXMsIGFwcEN4dFByb3BlcnRpZXMpOwotICAgICAgICAgICAgCS8vIEFkZCBhbGwgdGhlIHZhbGlkYXRlZCBiZWFucyB0byB0aGUgZ2VuZXJpYyBsaXN0Ci0gICAgICAgICAgICAJYmVhbnMuYWRkQWxsKGFwcEN4dEJlYW5zKTsKLSAgICAgICAgICAgIAlzZXJ2aWNlcy5hZGRBbGwoYXBwQ3h0U2VydmljZXMpOwotICAgICAgICAgICAgCXJlZmVyZW5jZXMuYWRkQWxsKGFwcEN4dFJlZmVyZW5jZXMpOwotICAgICAgICAgICAgCXNjYXByb3BlcnRpZXMuYWRkQWxsKGFwcEN4dFByb3BlcnRpZXMpOwotICAgICAgICAgICAgCXJlYWRlci5jbG9zZSgpOworCisgICAgICAgICAgICBMaXN0PFNwcmluZ0JlYW5FbGVtZW50PiBhcHBDeHRCZWFucyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nQmVhbkVsZW1lbnQ+KCk7CisgICAgICAgICAgICBMaXN0PFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PiBhcHBDeHRTZXJ2aWNlcyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nU0NBU2VydmljZUVsZW1lbnQ+KCk7CisgICAgICAgICAgICBMaXN0PFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ+IGFwcEN4dFJlZmVyZW5jZXMgPSBuZXcgQXJyYXlMaXN0PFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ+KCk7CisgICAgICAgICAgICBMaXN0PFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudD4gYXBwQ3h0UHJvcGVydGllcyA9IG5ldyBBcnJheUxpc3Q8U3ByaW5nU0NBUHJvcGVydHlFbGVtZW50PigpOworCisgICAgICAgICAgICBpZiAoeG1sQmVhbkRlZmluaXRpb25Mb2FkZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHhtbEJlYW5EZWZpbml0aW9uTG9hZGVyLmxvYWQoY29udGV4dFJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcEN4dFNlcnZpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwQ3h0UmVmZXJlbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcEN4dFByb3BlcnRpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBDeHRCZWFucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQpOworICAgICAgICAgICAgICAgIHBvcHVsYXRlUG9saWNpZXMoYXBwQ3h0U2VydmljZXMsIGFwcEN4dFJlZmVyZW5jZXMpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbihlKTsKLSAgICAgICAgfSBjYXRjaCAoWE1MU3RyZWFtRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIC8vIFZhbGlkYXRlIHRoZSBiZWFucyBmcm9tIGluZGl2aWR1YWwgYXBwbGljYXRpb24gY29udGV4dCBmb3IgdW5pcXVlbmVzcworICAgICAgICAgICAgdmFsaWRhdGVCZWFucyhhcHBDeHRCZWFucywgYXBwQ3h0U2VydmljZXMsIGFwcEN4dFJlZmVyZW5jZXMsIGFwcEN4dFByb3BlcnRpZXMsIGNvbnRleHQuZ2V0TW9uaXRvcigpKTsKKyAgICAgICAgICAgIC8vIEFkZCBhbGwgdGhlIHZhbGlkYXRlZCBiZWFucyB0byB0aGUgZ2VuZXJpYyBsaXN0CisgICAgICAgICAgICBiZWFucy5hZGRBbGwoYXBwQ3h0QmVhbnMpOworICAgICAgICAgICAgc2VydmljZXMuYWRkQWxsKGFwcEN4dFNlcnZpY2VzKTsKKyAgICAgICAgICAgIHJlZmVyZW5jZXMuYWRkQWxsKGFwcEN4dFJlZmVyZW5jZXMpOworICAgICAgICAgICAgc2NhcHJvcGVydGllcy5hZGRBbGwoYXBwQ3h0UHJvcGVydGllcyk7CisgICAgICAgIH0gY2F0Y2ggKFRocm93YWJsZSBlKSB7CiAgICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbihlKTsKICAgICAgICAgfQogCkBAIC0yMzUsMTggKzI0Nyw2MSBAQAogICAgICAgICByZXR1cm47CiAgICAgfSAvLyBlbmQgbWV0aG9kIGxvYWRGcm9tWE1MCiAKLSAgICBwcml2YXRlIFVSTCByZXNvbHZlTG9jYXRpb24oTW9kZWxSZXNvbHZlciByZXNvbHZlciwgU3RyaW5nIGNvbnRleHRQYXRoLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sCi0gICAgICAgIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24geworICAgIHB1YmxpYyB2b2lkIHBvcHVsYXRlUG9saWNpZXMoTGlzdDxTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudD4gYXBwQ3h0U2VydmljZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ+IGFwcEN4dFJlZmVyZW5jZXMpIHsKKyAgICAgICAgZm9yIChTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50IGUgOiBhcHBDeHRSZWZlcmVuY2VzKSB7CisgICAgICAgICAgICBmb3IgKFFOYW1lIHFuIDogZS5nZXRJbnRlbnROYW1lcygpKSB7CisgICAgICAgICAgICAgICAgSW50ZW50IGludGVudCA9IHBvbGljeUZhY3RvcnkuY3JlYXRlSW50ZW50KCk7CisgICAgICAgICAgICAgICAgaW50ZW50LnNldE5hbWUocW4pOworICAgICAgICAgICAgICAgIGUuZ2V0UmVxdWlyZWRJbnRlbnRzKCkuYWRkKGludGVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKFFOYW1lIHFuIDogZS5nZXRQb2xpY3lTZXROYW1lcygpKSB7CisgICAgICAgICAgICAgICAgUG9saWN5U2V0IHBzID0gcG9saWN5RmFjdG9yeS5jcmVhdGVQb2xpY3lTZXQoKTsKKyAgICAgICAgICAgICAgICBwcy5zZXROYW1lKHFuKTsKKyAgICAgICAgICAgICAgICBlLmdldFBvbGljeVNldHMoKS5hZGQocHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmb3IgKFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50IGUgOiBhcHBDeHRTZXJ2aWNlcykgeworICAgICAgICAgICAgZm9yIChRTmFtZSBxbiA6IGUuZ2V0SW50ZW50TmFtZXMoKSkgeworICAgICAgICAgICAgICAgIEludGVudCBpbnRlbnQgPSBwb2xpY3lGYWN0b3J5LmNyZWF0ZUludGVudCgpOworICAgICAgICAgICAgICAgIGludGVudC5zZXROYW1lKHFuKTsKKyAgICAgICAgICAgICAgICBlLmdldFJlcXVpcmVkSW50ZW50cygpLmFkZChpbnRlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChRTmFtZSBxbiA6IGUuZ2V0UG9saWN5U2V0TmFtZXMoKSkgeworICAgICAgICAgICAgICAgIFBvbGljeVNldCBwcyA9IHBvbGljeUZhY3RvcnkuY3JlYXRlUG9saWN5U2V0KCk7CisgICAgICAgICAgICAgICAgcHMuc2V0TmFtZShxbik7CisgICAgICAgICAgICAgICAgZS5nZXRQb2xpY3lTZXRzKCkuYWRkKHBzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgVVJMIHJlc29sdmVMb2NhdGlvbihNb2RlbFJlc29sdmVyIHJlc29sdmVyLCBTdHJpbmcgY29udGV4dFBhdGgsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkKKyAgICAgICAgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7CiAgICAgICAgIFVSTCByZXNvdXJjZSA9IG51bGw7CiAgICAgICAgIFVSSSB1cmkgPSBVUkkuY3JlYXRlKGNvbnRleHRQYXRoKTsKICAgICAgICAgaWYgKCF1cmkuaXNBYnNvbHV0ZSgpKSB7CisgICAgICAgICAgICBBcnRpZmFjdCBwYXJlbnQgPSBjb250ZXh0LmdldEFydGlmYWN0KCk7CisgICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwgJiYgcGFyZW50LmdldFVSSSgpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBVUkkgYmFzZSA9IFVSSS5jcmVhdGUoIi8iICsgcGFyZW50LmdldFVSSSgpKTsKKyAgICAgICAgICAgICAgICB1cmkgPSBiYXNlLnJlc29sdmUodXJpKTsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgLyB0byBtYWtlIGFydGlmYWN0IHJlc29sdmVyIGhhcHB5CisgICAgICAgICAgICAgICAgaWYgKHVyaS50b1N0cmluZygpLnN0YXJ0c1dpdGgoIi8iKSkgeworICAgICAgICAgICAgICAgICAgICB1cmkgPSBVUkkuY3JlYXRlKHVyaS50b1N0cmluZygpLnN1YnN0cmluZygxKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgQXJ0aWZhY3QgYXJ0aWZhY3QgPSBjb250cmlidXRpb25GYWN0b3J5LmNyZWF0ZUFydGlmYWN0KCk7CiAgICAgICAgICAgICBhcnRpZmFjdC5zZXRVbnJlc29sdmVkKHRydWUpOwotICAgICAgICAgICAgYXJ0aWZhY3Quc2V0VVJJKGNvbnRleHRQYXRoKTsKKyAgICAgICAgICAgIGFydGlmYWN0LnNldFVSSSh1cmkudG9TdHJpbmcoKSk7CiAgICAgICAgICAgICBhcnRpZmFjdCA9IHJlc29sdmVyLnJlc29sdmVNb2RlbChBcnRpZmFjdC5jbGFzcywgYXJ0aWZhY3QsIGNvbnRleHQpOwogICAgICAgICAgICAgaWYgKCFhcnRpZmFjdC5pc1VucmVzb2x2ZWQoKSkgewogICAgICAgICAgICAgICAgIHJlc291cmNlID0gbmV3IFVSTChhcnRpZmFjdC5nZXRMb2NhdGlvbigpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHJlc291cmNlIGNhbiBiZSBvdXQgb2Ygc2NvcGUgb2YgdGhlIGNvbnRyaWJ1dGlvbiByb290CisgICAgICAgICAgICAgICAgaWYgKHBhcmVudCAhPSBudWxsICYmIHBhcmVudC5nZXRMb2NhdGlvbigpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2UgPSBuZXcgVVJMKG5ldyBVUkwocGFyZW50LmdldExvY2F0aW9uKCkpLCBjb250ZXh0UGF0aCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvdXJjZTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oIkxvY2F0aW9uIGNhbm5vdCBiZSByZXNsb3ZlZDogIiArIGNvbnRleHRQYXRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKQEAgLTI1NiwyODIgKzMxMSw2IEBACiAgICAgfQogCiAgICAgLyoqCi0gICAgICogTWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIFhNTFN0cmVhbVJlYWRlciBmb3IgdGhlIFNwcmluZyBhcHBsaWNhdGlvbi1jb250ZXh0LnhtbCBmaWxlCi0gICAgICogc3BlY2lmaWVkIGluIHRoZSBsb2NhdGlvbiBhdHRyaWJ1dGUKLSAgICAgKi8KLSAgICBwcml2YXRlIFhNTFN0cmVhbVJlYWRlciBnZXRBcHBsaWNhdGlvbkNvbnRleHRSZWFkZXIoTW9kZWxSZXNvbHZlciByZXNvbHZlciwgU3RyaW5nIGxvY2F0aW9uLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIHsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgVVJMIHJlc291cmNlID0gZ2V0QXBwbGljYXRpb25Db250ZXh0UmVzb3VyY2UocmVzb2x2ZUxvY2F0aW9uKHJlc29sdmVyLCBsb2NhdGlvbiwgY29udGV4dCkpLmdldCgwKTsKLSAgICAgICAgICAgIFhNTFN0cmVhbVJlYWRlciByZWFkZXIgPQotICAgICAgICAgICAgCXhtbElucHV0RmFjdG9yeS5jcmVhdGVYTUxTdHJlYW1SZWFkZXIocmVzb3VyY2Uub3BlblN0cmVhbSgpKTsKLSAgICAgICAgICAgIHJldHVybiByZWFkZXI7Ci0gICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uKGUpOwotICAgICAgICB9IGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBNZXRob2Qgd2hpY2ggcmVhZHMgdGhlIHNwcmluZyBjb250ZXh0IGRlZmluaXRpb25zIGZyb20gU3ByaW5nIGFwcGxpY2F0aW9uLWNvbnRleHQueG1sCi0gICAgICogZmlsZSBhbmQgaWRlbnRpZmllcyB0aGUgZGVmaW5lZCBiZWFucywgcHJvcGVydGllcywgc2VydmljZXMgYW5kIHJlZmVyZW5jZXMKLSAgICAgKiBAcGFyYW0gY29udGV4dCAKLSAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVhZENvbnRleHREZWZpbml0aW9uKE1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRleHRQYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdDxTcHJpbmdCZWFuRWxlbWVudD4gYmVhbnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PiBzZXJ2aWNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudD4gcmVmZXJlbmNlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBUHJvcGVydHlFbGVtZW50PiBzY2Fwcm9wZXJ0aWVzLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIHsKLQotICAgICAgICBTcHJpbmdCZWFuRWxlbWVudCBiZWFuID0gbnVsbDsKLQotICAgICAgICB0cnkgewotICAgICAgICAgICAgYm9vbGVhbiBjb21wbGV0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHdoaWxlICghY29tcGxldGVkKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoIChyZWFkZXIubmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgU1RBUlRfRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIFFOYW1lIHFuYW1lID0gcmVhZGVyLmdldE5hbWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTcHJpbmcgVHlwZUxvYWRlciAtIGZvdW5kIGVsZW1lbnQgd2l0aCBuYW1lOiAiICsgcW5hbWUudG9TdHJpbmcoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuSU1QT1JUX0VMRU1FTlQuZXF1YWxzKHFuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgCS8vRklYTUUgLSBwdXQgdGhlIHNlcXVlbmNlIG9mIGNvZGUgYmVsb3cgd2hpY2ggZ2V0cyB0aGUgaXJlYWRlciBpbnRvIGEgc3Vic2lkaWFyeSBtZXRob2QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInJlc291cmNlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJLy8gRklYTUUgLSBuZWVkIHRvIGZpbmQgYSByaWdodCB3YXkgb2YgZ2VuZXJhdGluZyB0aGlzIHBhdGgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHJlc291cmNlUGF0aCA9IGNvbnRleHRQYXRoLnN1YnN0cmluZygwLCBjb250ZXh0UGF0aC5sYXN0SW5kZXhPZigiLyIpKzEpICsgbG9jYXRpb247Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTFN0cmVhbVJlYWRlciBpcmVhZGVyID0gZ2V0QXBwbGljYXRpb25Db250ZXh0UmVhZGVyKHJlc29sdmVyLCByZXNvdXJjZVBhdGgsIGNvbnRleHQpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBSZWFkIHRoZSBjb250ZXh0IGRlZmluaXRpb24gZm9yIHRoZSBpZGVudGlmaWVkIGltcG9ydGVkIHJlc291cmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRDb250ZXh0RGVmaW5pdGlvbihyZXNvbHZlciwgaXJlYWRlciwgY29udGV4dFBhdGgsIGJlYW5zLCBzZXJ2aWNlcywgcmVmZXJlbmNlcywgc2NhcHJvcGVydGllcywgY29udGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTcHJpbmdJbXBsZW1lbnRhdGlvbkNvbnN0YW50cy5TQ0FfU0VSVklDRV9FTEVNRU5ULmVxdWFscyhxbmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAkvLyBUaGUgdmFsdWUgb2YgdGhlIEBuYW1lIGF0dHJpYnV0ZSBvZiBhbiA8c2NhOnNlcnZpY2UvPiBzdWJlbGVtZW50IG9mIGEgPGJlYW5zLz4gCi0gICAgICAgICAgICAgICAgICAgICAgICAJLy8gZWxlbWVudCBNVVNUIGJlIHVuaXF1ZSBhbW9uZ3N0IHRoZSA8c2NhOnNlcnZpY2UvPiBzdWJlbGVtZW50cyBvZiB0aGUgPGJlYW5zLz4gZWxlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAoIXNlcnZpY2VzLmlzRW1wdHkoKSAmJiAoc2VydmljZXMuY29udGFpbnMocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIikpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCWVycm9yKCJTY2FTZXJ2aWNlTmFtZU5vdFVuaXF1ZSIsIHJlc29sdmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgICAgICAgICAgICAgIAlTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50KHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCXJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAidGFyZ2V0IikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInR5cGUiKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlzZXJ2aWNlLnNldFR5cGUocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJ0eXBlIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVByb2Nlc3Nvci5yZWFkUG9saWNpZXMoc2VydmljZSwgcmVhZGVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlcy5hZGQoc2VydmljZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLlNDQV9SRUZFUkVOQ0VfRUxFTUVOVC5lcXVhbHMocW5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJLy8gVGhlIHZhbHVlIG9mIHRoZSBAbmFtZSBhdHRyaWJ1dGUgb2YgYW4gPHNjYTpyZWZlcmVuY2UvPiBzdWJlbGVtZW50IG9mIGEgPGJlYW5zLz4gCi0gICAgICAgICAgICAgICAgICAgICAgICAJLy8gZWxlbWVudCBNVVNUIGJlIHVuaXF1ZSBhbW9uZ3N0IHRoZSBAbmFtZSBhdHRyaWJ1dGVzIG9mIHRoZSA8c2NhOnJlZmVyZW5jZS8+IHN1YmVsZW1lbnRzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgIAkvLyBvZiB0aGUgPGJlYW5zLz4gZWxlbWVudC4KLSAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAoIXJlZmVyZW5jZXMuaXNFbXB0eSgpICYmIChyZWZlcmVuY2VzLmNvbnRhaW5zKHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCQllcnJvcigiU2NhUmVmZXJlbmNlTmFtZU5vdFVuaXF1ZSIsIHJlc29sdmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgICAgICAgICAgICAgIAlTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50IHJlZmVyZW5jZSA9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50KHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCQkJCSAgcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJ0eXBlIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImRlZmF1bHQiKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlyZWZlcmVuY2Uuc2V0RGVmYXVsdEJlYW4ocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJkZWZhdWx0IikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVByb2Nlc3Nvci5yZWFkUG9saWNpZXMocmVmZXJlbmNlLCByZWFkZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMuYWRkKHJlZmVyZW5jZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTcHJpbmdJbXBsZW1lbnRhdGlvbkNvbnN0YW50cy5TQ0FfUFJPUEVSVFlfRUxFTUVOVC5lcXVhbHMocW5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJLy8gVGhlIHZhbHVlIG9mIHRoZSBAbmFtZSBhdHRyaWJ1dGUgb2YgYW4gPHNjYTpwcm9wZXJ0eS8+IHN1YmVsZW1lbnQgb2YgYSA8YmVhbnMvPiAKLSAgICAgICAgICAgICAgICAgICAgICAgIAkvLyBlbGVtZW50IE1VU1QgYmUgdW5pcXVlIGFtb25nc3QgdGhlIEBuYW1lIGF0dHJpYnV0ZXMgb2YgdGhlIDxzY2E6cHJvcGVydHkvPiBzdWJlbGVtZW50cywgCi0gICAgICAgICAgICAgICAgICAgICAgICAJLy8gb2YgdGhlIDxiZWFucy8+IGVsZW1lbnQuCi0gICAgICAgICAgICAgICAgICAgICAgICAJaWYgKCFzY2Fwcm9wZXJ0aWVzLmlzRW1wdHkoKSAmJiAoc2NhcHJvcGVydGllcy5jb250YWlucyhyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgIm5hbWUiKSkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJZXJyb3IoIlNjYVByb3BlcnR5TmFtZU5vdFVuaXF1ZSIsIHJlc29sdmVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgICAgICAgICAgICAgIAlTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQgc2NhcHJvcGVydHkgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50KHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpLCByZWFkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAidHlwZSIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2Fwcm9wZXJ0aWVzLmFkZChzY2Fwcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLkJFQU5fRUxFTUVOVC5lcXVhbHMocW5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVhbiA9IG5ldyBTcHJpbmdCZWFuRWxlbWVudChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImlkIiksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkgcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJjbGFzcyIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJhYnN0cmFjdCIpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCWlmIChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImFic3RyYWN0IikuZXF1YWxzKCJ0cnVlIikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCQliZWFuLnNldEFic3RyYWN0QmVhbih0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJwYXJlbnQiKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAoIXJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAicGFyZW50IikuZXF1YWxzKCIiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCWJlYW4uc2V0UGFyZW50QXR0cmlidXRlKHRydWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJmYWN0b3J5LWJlYW4iKSAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAoIXJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiZmFjdG9yeS1iZWFuIikuZXF1YWxzKCIiKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCWJlYW4uc2V0RmFjdG9yeUJlYW5BdHRyaWJ1dGUodHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJmYWN0b3J5LW1ldGhvZCIpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCWlmICghcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJmYWN0b3J5LW1ldGhvZCIpLmVxdWFscygiIikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCQliZWFuLnNldEZhY3RvcnlNZXRob2RBdHRyaWJ1dGUodHJ1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgCQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgZmlyc3QgbmFtZSBhcyBiZWFuIG5hbWUsIHdoZW4gdGhlIEBpZCBhdHRyaWJ1dGUgaXMgYWJzZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImlkIikgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIikgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJU3RyaW5nW10gbmFtZXMgPSAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIikpLnNwbGl0KCIsIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCQliZWFuLnNldElkKG5hbWVzWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWFucy5hZGQoYmVhbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgPGJlYW4+IGVsZW1lbnQgYW5kIGl0cyBjaGlsZCBlbGVtZW50cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRCZWFuRGVmaW5pdGlvbihyZWFkZXIsIGJlYW4sIGJlYW5zKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFTkRfRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTcHJpbmdJbXBsZW1lbnRhdGlvbkNvbnN0YW50cy5CRUFOU19FTEVNRU5ULmVxdWFscyhyZWFkZXIuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTcHJpbmcgVHlwZUxvYWRlciAtIGZpbmlzaGVkIHJlYWQgb2YgY29udGV4dCBmaWxlIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmCi0gICAgICAgICAgICAgICAgfSAvLyBlbmQgc3dpdGNoCi0gICAgICAgICAgICB9IC8vIGVuZCB3aGlsZQotICAgICAgICB9IGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLQotICAgIC8qKgotICAgICAqIE1ldGhvZCB3aGljaCByZWFkcyB0aGUgYmVhbiBkZWZpbml0aW9ucyBmcm9tIFNwcmluZyBhcHBsaWNhdGlvbi1jb250ZXh0LnhtbCBmaWxlIGFuZCBpZGVudGlmaWVzCi0gICAgICogdGhlIGRlZmluZWQgYmVhbnMsIHByb3BlcnRpZXMsIHNlcnZpY2VzIGFuZCByZWZlcmVuY2VzCi0gICAgICovCi0gICAgcHJpdmF0ZSB2b2lkIHJlYWRCZWFuRGVmaW5pdGlvbihYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ByaW5nQmVhbkVsZW1lbnQgYmVhbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nQmVhbkVsZW1lbnQ+IGJlYW5zKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7Ci0KLSAgICAJU3ByaW5nQmVhbkVsZW1lbnQgaW5uZXJiZWFuID0gbnVsbDsKLSAgICAgICAgU3ByaW5nUHJvcGVydHlFbGVtZW50IHByb3BlcnR5ID0gbnVsbDsKLSAgICAgICAgU3ByaW5nQ29uc3RydWN0b3JBcmdFbGVtZW50IGNvbnN0cnVjdG9yQXJnID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBib29sZWFuIGNvbXBsZXRlZCA9IGZhbHNlOyAgICAgICAgICAgIAotICAgICAgICAgICAgd2hpbGUgKCFjb21wbGV0ZWQpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlYWRlci5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTVEFSVF9FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgUU5hbWUgcW5hbWUgPSByZWFkZXIuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLkJFQU5fRUxFTUVOVC5lcXVhbHMocW5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJaW5uZXJiZWFuID0gbmV3IFNwcmluZ0JlYW5FbGVtZW50KHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiaWQiKSwgcmVhZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImNsYXNzIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgCS8vIFNldCB0aGUgZmlyc3QgbmFtZSBhcyBiZWFuIG5hbWUsIHdoZW4gdGhlIEBpZCBhdHRyaWJ1dGUgaXMgYWJzZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImlkIikgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIikgIT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJU3RyaW5nW10gbmFtZXMgPSAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJuYW1lIikpLnNwbGl0KCIsIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCQlpbm5lcmJlYW4uc2V0SWQobmFtZXNbMF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyYmVhbi5zZXRJbm5lckJlYW4odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVhbnMuYWRkKGlubmVyYmVhbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEJlYW5EZWZpbml0aW9uKHJlYWRlciwgaW5uZXJiZWFuLCBiZWFucyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLlBST1BFUlRZX0VMRU1FTlQuZXF1YWxzKHFuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5ID0gbmV3IFNwcmluZ1Byb3BlcnR5RWxlbWVudChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgIm5hbWUiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAicmVmIikgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJcHJvcGVydHkuYWRkUmVmKHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAicmVmIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlYW4uYWRkUHJvcGVydHkocHJvcGVydHkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTcHJpbmdJbXBsZW1lbnRhdGlvbkNvbnN0YW50cy5DT05TVFJVQ1RPUkFSR19FTEVNRU5ULmVxdWFscyhxbmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvckFyZyA9IG5ldyBTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJ0eXBlIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInJlZiIpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCWNvbnN0cnVjdG9yQXJnLmFkZFJlZihyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInJlZiIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJpbmRleCIpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCWNvbnN0cnVjdG9yQXJnLnNldEluZGV4KChuZXcgSW50ZWdlcihyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImluZGV4IikpKS5pbnRWYWx1ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJ2YWx1ZSIpICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCWNvbnN0cnVjdG9yQXJnLmFkZFZhbHVlKHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAidmFsdWUiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVhbi5hZGRDdXN0cnVjdG9yQXJncyhjb25zdHJ1Y3RvckFyZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLlJFRl9FTEVNRU5ULmVxdWFscyhxbmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlTdHJpbmcgcmVmID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJiZWFuIik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBwYXJlbnQgZWxlbWVudCBpcyBhIHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ICE9IG51bGwpIHByb3BlcnR5LmFkZFJlZihyZWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBwYXJlbnQgZWxlbWVudCBpcyBhIGNvbnN0cnVjdG9yLWFyZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3RvckFyZyAhPSBudWxsKSBjb25zdHJ1Y3RvckFyZy5hZGRSZWYocmVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuVkFMVUVfRUxFTUVOVC5lcXVhbHMocW5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gcmVhZGVyLmdldEVsZW1lbnRUZXh0KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHBhcmVudCBlbGVtZW50IGlzIGEgY29uc3RydWN0b3ItYXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yQXJnICE9IG51bGwpIGNvbnN0cnVjdG9yQXJnLmFkZFZhbHVlKHZhbHVlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuTElTVF9FTEVNRU5ULmVxdWFscyhxbmFtZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuU0VUX0VMRU1FTlQuZXF1YWxzKHFuYW1lKSAgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuTUFQX0VMRU1FTlQuZXF1YWxzKHFuYW1lKSkgeyAgICAgICAgICAgICAgICAgICAgICAgIAkKLSAgICAgICAgICAgICAgICAgICAgICAgIAlpZiAocHJvcGVydHkgIT0gbnVsbCkgCi0gICAgICAgICAgICAgICAgICAgICAgICAJCXJlYWRDb2xsZWN0aW9ucyhyZWFkZXIsIGJlYW4sIGJlYW5zLCBwcm9wZXJ0eSwgbnVsbCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yQXJnICE9IG51bGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgCXJlYWRDb2xsZWN0aW9ucyhyZWFkZXIsIGJlYW4sIGJlYW5zLCBudWxsLCBjb25zdHJ1Y3RvckFyZyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IC8vIGVuZCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgRU5EX0VMRU1FTlQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuQkVBTl9FTEVNRU5ULmVxdWFscyhyZWFkZXIuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLlBST1BFUlRZX0VMRU1FTlQuZXF1YWxzKHJlYWRlci5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydHkgPSBudWxsOwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTcHJpbmdJbXBsZW1lbnRhdGlvbkNvbnN0YW50cy5DT05TVFJVQ1RPUkFSR19FTEVNRU5ULmVxdWFscyhyZWFkZXIuZ2V0TmFtZSgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yQXJnID0gbnVsbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmCi0gICAgICAgICAgICAgICAgfSAvLyBlbmQgc3dpdGNoCi0gICAgICAgICAgICB9IC8vIGVuZCB3aGlsZQotICAgICAgICB9IGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgCi0gICAgLyoqCi0gICAgICogTWV0aG9kIHdoaWNoIHJlYWRzIHRoZSBjb2xsZWN0aW9uIGVsZW1lbnRzIGZyb20gU3ByaW5nIGFwcGxpY2F0aW9uLWNvbnRleHQueG1sIGZpbGUgYW5kIGlkZW50aWZpZXMKLSAgICAgKiB0aGUgZGVmaW5lZCBiZWFucywgbGlzdCwgbWFwcyBhbmQgc2V0cwotICAgICAqLwotICAgIHByaXZhdGUgdm9pZCByZWFkQ29sbGVjdGlvbnMoWE1MU3RyZWFtUmVhZGVyIHJlYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwcmluZ0JlYW5FbGVtZW50IGJlYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFNwcmluZ0JlYW5FbGVtZW50PiBiZWFucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwcmluZ1Byb3BlcnR5RWxlbWVudCBwcm9wZXJ0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudCBjb25zdHJ1Y3RvckFyZykgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24gewotICAgIAkKLSAgICAJU3ByaW5nQmVhbkVsZW1lbnQgaW5uZXJiZWFuID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBib29sZWFuIGNvbXBsZXRlZCA9IGZhbHNlOyAgICAgICAgICAgIAotICAgICAgICAgICAgd2hpbGUgKCFjb21wbGV0ZWQpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKHJlYWRlci5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBTVEFSVF9FTEVNRU5UOgotICAgICAgICAgICAgICAgICAgICAgICAgUU5hbWUgcW5hbWUgPSByZWFkZXIuZ2V0TmFtZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLkJFQU5fRUxFTUVOVC5lcXVhbHMocW5hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJaW5uZXJiZWFuID0gbmV3IFNwcmluZ0JlYW5FbGVtZW50KHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiaWQiKSwgcmVhZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImNsYXNzIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgCS8vIFNldCB0aGUgZmlyc3QgbmFtZSBhcyBiZWFuIG5hbWUsIHdoZW4gdGhlIEBpZCBhdHRyaWJ1dGUgaXMgYWJzZW50LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgImlkIikgPT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJaWYgKHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCVN0cmluZ1tdIG5hbWVzID0gKHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAibmFtZSIpKS5zcGxpdCgiLCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJaW5uZXJiZWFuLnNldElkKG5hbWVzWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAJfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubmVyYmVhbi5zZXRJbm5lckJlYW4odHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVhbnMuYWRkKGlubmVyYmVhbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZEJlYW5EZWZpbml0aW9uKHJlYWRlciwgaW5uZXJiZWFuLCBiZWFucyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLlJFRl9FTEVNRU5ULmVxdWFscyhxbmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlTdHJpbmcgcmVmID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJiZWFuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ICE9IG51bGwpIHByb3BlcnR5LmFkZFJlZihyZWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdHJ1Y3RvckFyZyAhPSBudWxsKSBjb25zdHJ1Y3RvckFyZy5hZGRSZWYocmVmKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLkxJU1RfRUxFTUVOVC5lcXVhbHMocW5hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAJCSAgIFNwcmluZ0ltcGxlbWVudGF0aW9uQ29uc3RhbnRzLlNFVF9FTEVNRU5ULmVxdWFscyhxbmFtZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIAkJICAgU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuTUFQX0VMRU1FTlQuZXF1YWxzKHFuYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgCWlmIChwcm9wZXJ0eSAhPSBudWxsKSAKLSAgICAgICAgICAgICAgICAgICAgICAgIAkJcmVhZENvbGxlY3Rpb25zKHJlYWRlciwgaW5uZXJiZWFuLCBiZWFucywgcHJvcGVydHksIG51bGwpOwotICAgICAgICAgICAgICAgICAgICAgICAgCWlmIChjb25zdHJ1Y3RvckFyZyAhPSBudWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlyZWFkQ29sbGVjdGlvbnMocmVhZGVyLCBpbm5lcmJlYW4sIGJlYW5zLCBudWxsLCBjb25zdHJ1Y3RvckFyZyk7ICAgICAgICAgICAgICAgICAgICAgICAgCQotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChTcHJpbmdJbXBsZW1lbnRhdGlvbkNvbnN0YW50cy5FTlRSWV9FTEVNRU5ULmVxdWFscyhxbmFtZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcga2V5UmVmID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJrZXktcmVmIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlUmVmID0gcmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJ2YWx1ZS1yZWYiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgIT0gbnVsbCkge3Byb3BlcnR5LmFkZFJlZihrZXlSZWYpOyBwcm9wZXJ0eS5hZGRSZWYodmFsdWVSZWYpO30KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3RydWN0b3JBcmcgIT0gbnVsbCkge2NvbnN0cnVjdG9yQXJnLmFkZFJlZihrZXlSZWYpOyBjb25zdHJ1Y3RvckFyZy5hZGRSZWYodmFsdWVSZWYpO30KLSAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBFTkRfRUxFTUVOVDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTcHJpbmdJbXBsZW1lbnRhdGlvbkNvbnN0YW50cy5MSVNUX0VMRU1FTlQuZXF1YWxzKHJlYWRlci5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJY29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuU0VUX0VMRU1FTlQuZXF1YWxzKHJlYWRlci5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJY29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoU3ByaW5nSW1wbGVtZW50YXRpb25Db25zdGFudHMuTUFQX0VMRU1FTlQuZXF1YWxzKHJlYWRlci5nZXROYW1lKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJY29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmCi0gICAgICAgICAgICAgICAgfSAvLyBlbmQgc3dpdGNoCi0gICAgICAgICAgICB9IC8vIGVuZCB3aGlsZQotICAgICAgICB9IGNhdGNoIChYTUxTdHJlYW1FeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKioKICAgICAgKiBHZW5lcmF0ZXMgdGhlIFNwcmluZyBpbXBsZW1lbnRhdGlvbiBjb21wb25lbnQgdHlwZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uIGNvbnRhaW5lZCBpbiB0aGUKICAgICAgKiBsaXN0cyBvZiBiZWFucywgc2VydmljZXMsIHJlZmVyZW5jZXMgYW5kIHNjYXByb3BlcnRpZXMgZGVyaXZlZCBmcm9tIHRoZSBhcHBsaWNhdGlvbiBjb250ZXh0CiAgICAgICovCkBAIC01NTMsMTQgKzMzMiwxNCBAQAogICAgICAgICAgKiAgICBhdCBhbm90aGVyIGJlYW4gaW4gdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQgYmVjb21lcyBhIHByb3BlcnR5IGluIHRoZSBjb21wb25lbnQgdHlwZQogICAgICAgICAgKi8KIAotICAgIAlKYXZhSW1wbGVtZW50YXRpb24gamF2YUltcGxlbWVudGF0aW9uID0gbnVsbDsKKyAgICAgICAgSmF2YUltcGxlbWVudGF0aW9uIGphdmFJbXBsZW1lbnRhdGlvbiA9IG51bGw7CiAgICAgICAgIENvbXBvbmVudFR5cGUgY29tcG9uZW50VHlwZSA9IGltcGxlbWVudGF0aW9uLmdldENvbXBvbmVudFR5cGUoKTsKIAogICAgICAgICB0cnkgewogICAgICAgICAgICAgLy8gRGVhbCB3aXRoIHRoZSBzZXJ2aWNlcyBmaXJzdC4uLi4KICAgICAgICAgICAgIEl0ZXJhdG9yPFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PiBpdHMgPSBzZXJ2aWNlcy5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0cy5oYXNOZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudCBzZXJ2aWNlRWxlbWVudCA9IGl0cy5uZXh0KCk7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gaXRzLm5leHQoKTsKICAgICAgICAgICAgICAgICBDbGFzczw/PiBpbnRlcmZhemUgPSByZXNvbHZlQ2xhc3MocmVzb2x2ZXIsIHNlcnZpY2VFbGVtZW50LmdldFR5cGUoKSwgY29udGV4dCk7CiAgICAgICAgICAgICAgICAgU2VydmljZSB0aGVTZXJ2aWNlID0gY3JlYXRlU2VydmljZShpbnRlcmZhemUsIHNlcnZpY2VFbGVtZW50LmdldE5hbWUoKSk7CiAgICAgICAgICAgICAgICAgLy8gU3ByaW5nIGFsbG93cyBkdXBsaWNhdGlvbiBvZiBiZWFuIGRlZmluaXRpb25zIGluIG11bHRpcGxlIGNvbnRleHQgc2NlbmFyaW8sCkBAIC01NjgsMjUgKzM0NywzNSBAQAogICAgICAgICAgICAgICAgIC8vIHdlIHdpbGwgcmVtb3ZlIGFueSBvbGRlciBkZWZpbml0aW9uIGFuZCB1c2UgdGhlIGxhdGVzdC4KICAgICAgICAgICAgICAgICBTZXJ2aWNlIGR1cGxpY2F0ZSA9IG51bGw7CiAgICAgICAgICAgICAgICAgZm9yIChTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnRUeXBlLmdldFNlcnZpY2VzKCkpIHsKLSAgICAgICAgICAgICAgICAJaWYgKHNlcnZpY2UuZ2V0TmFtZSgpLmVxdWFscyh0aGVTZXJ2aWNlLmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgCQlkdXBsaWNhdGUgPSBzZXJ2aWNlOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmljZS5nZXROYW1lKCkuZXF1YWxzKHRoZVNlcnZpY2UuZ2V0TmFtZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSA9IHNlcnZpY2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChkdXBsaWNhdGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAJY29tcG9uZW50VHlwZS5nZXRTZXJ2aWNlcygpLnJlbW92ZShkdXBsaWNhdGUpOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRUeXBlLmdldFNlcnZpY2VzKCkucmVtb3ZlKGR1cGxpY2F0ZSk7CisKICAgICAgICAgICAgICAgICBjb21wb25lbnRUeXBlLmdldFNlcnZpY2VzKCkuYWRkKHRoZVNlcnZpY2UpOwogICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIHNlcnZpY2UgdG8gdGhlIFNlcnZpY2UgLyBCZWFuIG1hcAogICAgICAgICAgICAgICAgIFN0cmluZyBiZWFuTmFtZSA9IHNlcnZpY2VFbGVtZW50LmdldFRhcmdldCgpOworICAgICAgICAgICAgICAgIGJvb2xlYW4gZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBmb3IgKFNwcmluZ0JlYW5FbGVtZW50IGJlYW5FbGVtZW50IDogYmVhbnMpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJlYW5OYW1lLmVxdWFscyhiZWFuRWxlbWVudC5nZXRJZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAJaWYgKGlzdmFsaWRCZWFuRm9yU2VydmljZShiZWFuRWxlbWVudCkpIHsKLSAgICAgICAgICAgICAgICAgICAgCQkvLyBhZGQgdGhlIHJlcXVpcmVkIGludGVudHMgYW5kIHBvbGljeVNldHMgZm9yIHRoZSBzZXJ2aWNlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNWYWxpZEJlYW5Gb3JTZXJ2aWNlKGJlYW5FbGVtZW50KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgcmVxdWlyZWQgaW50ZW50cyBhbmQgcG9saWN5U2V0cyBmb3IgdGhlIHNlcnZpY2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVTZXJ2aWNlLmdldFJlcXVpcmVkSW50ZW50cygpLmFkZEFsbChzZXJ2aWNlRWxlbWVudC5nZXRSZXF1aXJlZEludGVudHMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlU2VydmljZS5nZXRQb2xpY3lTZXRzKCkuYWRkQWxsKHNlcnZpY2VFbGVtZW50LmdldFBvbGljeVNldHMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24uc2V0QmVhbkZvclNlcnZpY2UodGhlU2VydmljZSwgYmVhbkVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gLy8gZW5kIGZvcgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gUkVWSUVXOiBBZGRpbmcgYSBTcHJpbmdCZWFuRWxlbWVudCAicHJveHkiIHNvIHRoYXQgdGhlIGJlYW4gaWQgY2FuIGJlIHVzZWQgYXQgcnVudGltZSB0byBsb29rCisgICAgICAgICAgICAgICAgICAgIC8vIHVwIHRoZSBiZWFuIGluc3RhbmNlIGZyb20gdGhlIHBhcmVudCBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLnNldEJlYW5Gb3JTZXJ2aWNlKHRoZVNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTcHJpbmdCZWFuRWxlbWVudChzZXJ2aWNlRWxlbWVudC5nZXRUYXJnZXQoKSwgbnVsbCkpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gLy8gZW5kIHdoaWxlCiAKICAgICAgICAgICAgIC8vIE5leHQgaGFuZGxlIHRoZSByZWZlcmVuY2VzCkBAIC01OTksMTIgKzM4OCwxMiBAQAogICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgZHVwbGljYXRlIGRlZmluaXRpb25zIGZvdW5kLgogICAgICAgICAgICAgICAgIFJlZmVyZW5jZSBkdXBsaWNhdGUgPSBudWxsOwogICAgICAgICAgICAgICAgIGZvciAoUmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudFR5cGUuZ2V0UmVmZXJlbmNlcygpKSB7Ci0gICAgICAgICAgICAgICAgCWlmIChyZWZlcmVuY2UuZ2V0TmFtZSgpLmVxdWFscyh0aGVSZWZlcmVuY2UuZ2V0TmFtZSgpKSkKLSAgICAgICAgICAgICAgICAJCWR1cGxpY2F0ZSA9IHJlZmVyZW5jZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jZS5nZXROYW1lKCkuZXF1YWxzKHRoZVJlZmVyZW5jZS5nZXROYW1lKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlID0gcmVmZXJlbmNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlICE9IG51bGwpCi0gICAgICAgICAgICAgICAgCWNvbXBvbmVudFR5cGUuZ2V0UmVmZXJlbmNlcygpLnJlbW92ZShkdXBsaWNhdGUpOwotICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRUeXBlLmdldFJlZmVyZW5jZXMoKS5yZW1vdmUoZHVwbGljYXRlKTsKKwogICAgICAgICAgICAgICAgIC8vIGFkZCB0aGUgcmVxdWlyZWQgaW50ZW50cyBhbmQgcG9saWN5U2V0cyBmb3IgdGhpcyByZWZlcmVuY2UKICAgICAgICAgICAgICAgICB0aGVSZWZlcmVuY2UuZ2V0UmVxdWlyZWRJbnRlbnRzKCkuYWRkQWxsKHJlZmVyZW5jZUVsZW1lbnQuZ2V0UmVxdWlyZWRJbnRlbnRzKCkpOwogICAgICAgICAgICAgICAgIHRoZVJlZmVyZW5jZS5nZXRQb2xpY3lTZXRzKCkuYWRkQWxsKHJlZmVyZW5jZUVsZW1lbnQuZ2V0UG9saWN5U2V0cygpKTsKQEAgLTYyNywxMiArNDE2LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIC8vIGZvciB0aGUgZHVwbGljYXRlIGRlZmluaXRpb25zIGZvdW5kLgogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0eSBkdXBsaWNhdGUgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICBmb3IgKFByb3BlcnR5IHByb3BlcnR5IDogY29tcG9uZW50VHlwZS5nZXRQcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgCWlmIChwcm9wZXJ0eS5nZXROYW1lKCkuZXF1YWxzKHRoZVByb3BlcnR5LmdldE5hbWUoKSkpCi0gICAgICAgICAgICAgICAgICAgIAkJZHVwbGljYXRlID0gcHJvcGVydHk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkuZ2V0TmFtZSgpLmVxdWFscyh0aGVQcm9wZXJ0eS5nZXROYW1lKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSA9IHByb3BlcnR5OwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmIChkdXBsaWNhdGUgIT0gbnVsbCkKLSAgICAgICAgICAgICAgICAgICAgCWNvbXBvbmVudFR5cGUuZ2V0UHJvcGVydGllcygpLnJlbW92ZShkdXBsaWNhdGUpOwotICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFR5cGUuZ2V0UHJvcGVydGllcygpLnJlbW92ZShkdXBsaWNhdGUpOworCiAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFR5cGUuZ2V0UHJvcGVydGllcygpLmFkZCh0aGVQcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBKYXZhIENsYXNzIChpZSB0aGUgdHlwZSkgZm9yIHRoaXMgcHJvcGVydHkKICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24uc2V0UHJvcGVydHlDbGFzcyh0aGVQcm9wZXJ0eS5nZXROYW1lKCksIHByb3BUeXBlKTsKQEAgLTY0NywyNSArNDM2LDM0IEBACiAgICAgICAgICAgICAgICAgLy8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgYmVhbnMgZm91bmQKICAgICAgICAgICAgICAgICB3aGlsZSAoaXRiLmhhc05leHQoKSkgewogICAgICAgICAgICAgICAgICAgICBTcHJpbmdCZWFuRWxlbWVudCBiZWFuRWxlbWVudCA9IGl0Yi5uZXh0KCk7CisKICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXRzIG5vdCBhIHZhbGlkIGJlYW4gZm9yIHNlcnZpY2UsIGlnbm9yZSBpdAotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzdmFsaWRCZWFuRm9yU2VydmljZShiZWFuRWxlbWVudCkpIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIHRoZSBTcHJpbmcgYmVhbiBjbGFzcwotICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiBiZWFuQ2xhc3MgPSByZXNvbHZlQ2xhc3MocmVzb2x2ZXIsIGJlYW5FbGVtZW50LmdldENsYXNzTmFtZSgpLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW50cm9zcGVjdCB0aGUgYmVhbgotICAgICAgICAgICAgICAgICAgICBiZWFuSW50cm9zcGVjdG9yID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBTcHJpbmdCZWFuSW50cm9zcGVjdG9yKHJlZ2lzdHJ5LCBiZWFuRWxlbWVudC5nZXRDdXN0cnVjdG9yQXJncygpKTsKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9uZW50VHlwZSBiZWFuQ29tcG9uZW50VHlwZSA9IGFzc2VtYmx5RmFjdG9yeS5jcmVhdGVDb21wb25lbnRUeXBlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGphdmFJbXBsZW1lbnRhdGlvbiA9IGJlYW5JbnRyb3NwZWN0b3IuaW50cm9zcGVjdEJlYW4oYmVhbkNsYXNzLCBiZWFuQ29tcG9uZW50VHlwZSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc2VydmljZSBuYW1lIGFzIGJlYW4gbmFtZQotICAgICAgICAgICAgICAgICAgICBmb3IgKFNlcnZpY2UgY29tcG9uZW50U2VydmljZSA6IGJlYW5Db21wb25lbnRUeXBlLmdldFNlcnZpY2VzKCkpICAgICAgICAgICAgICAgICAgICAJCi0gICAgICAgICAgICAgICAgICAgIAljb21wb25lbnRTZXJ2aWNlLnNldE5hbWUoYmVhbkVsZW1lbnQuZ2V0SWQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgc2VydmljZSBpbnRlcmZhY2UgZGVmaW5lZCBieSB0aGlzIFNwcmluZyBCZWFuIGFuZCBhZGQgdG8KLSAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCB0eXBlIG9mIHRoZSBTcHJpbmcgQXNzZW1ibHkKLSAgICAgICAgICAgICAgICAgICAgTGlzdDxTZXJ2aWNlPiBiZWFuU2VydmljZXMgPSBiZWFuQ29tcG9uZW50VHlwZS5nZXRTZXJ2aWNlcygpOwotICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRUeXBlLmdldFNlcnZpY2VzKCkuYWRkQWxsKGJlYW5TZXJ2aWNlcyk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGVzZSBzZXJ2aWNlcyB0byB0aGUgU2VydmljZSAvIEJlYW4gbWFwCi0gICAgICAgICAgICAgICAgICAgIGZvciAoU2VydmljZSBiZWFuU2VydmljZSA6IGJlYW5TZXJ2aWNlcykgewotICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24uc2V0QmVhbkZvclNlcnZpY2UoYmVhblNlcnZpY2UsIGJlYW5FbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkQmVhbkZvclNlcnZpY2UoYmVhbkVsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCB0aGUgU3ByaW5nIGJlYW4gY2xhc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPD8+IGJlYW5DbGFzcyA9IHJlc29sdmVDbGFzcyhyZXNvbHZlciwgYmVhbkVsZW1lbnQuZ2V0Q2xhc3NOYW1lKCksIGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW50cm9zcGVjdCB0aGUgYmVhbgorICAgICAgICAgICAgICAgICAgICAgICAgYmVhbkludHJvc3BlY3RvciA9IG5ldyBTcHJpbmdCZWFuSW50cm9zcGVjdG9yKHJlZ2lzdHJ5LCBiZWFuRWxlbWVudC5nZXRDdXN0cnVjdG9yQXJncygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENvbXBvbmVudFR5cGUgYmVhbkNvbXBvbmVudFR5cGUgPSBhc3NlbWJseUZhY3RvcnkuY3JlYXRlQ29tcG9uZW50VHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgamF2YUltcGxlbWVudGF0aW9uID0gYmVhbkludHJvc3BlY3Rvci5pbnRyb3NwZWN0QmVhbihiZWFuQ2xhc3MsIGJlYW5Db21wb25lbnRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc2VydmljZSBuYW1lIGFzIGJlYW4gbmFtZQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChTZXJ2aWNlIGNvbXBvbmVudFNlcnZpY2UgOiBiZWFuQ29tcG9uZW50VHlwZS5nZXRTZXJ2aWNlcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50U2VydmljZS5zZXROYW1lKGJlYW5FbGVtZW50LmdldElkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBzZXJ2aWNlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoaXMgU3ByaW5nIEJlYW4gYW5kIGFkZCB0bworICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNvbXBvbmVudCB0eXBlIG9mIHRoZSBTcHJpbmcgQXNzZW1ibHkKKyAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U2VydmljZT4gYmVhblNlcnZpY2VzID0gYmVhbkNvbXBvbmVudFR5cGUuZ2V0U2VydmljZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFR5cGUuZ2V0U2VydmljZXMoKS5hZGRBbGwoYmVhblNlcnZpY2VzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGVzZSBzZXJ2aWNlcyB0byB0aGUgU2VydmljZSAvIEJlYW4gbWFwCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFNlcnZpY2UgYmVhblNlcnZpY2UgOiBiZWFuU2VydmljZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi5zZXRCZWFuRm9yU2VydmljZShiZWFuU2VydmljZSwgYmVhbkVsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gW3JmZW5nXSBGSVhNRTogU29tZSBTcHJpbmcgYmVhbnMgaGF2ZSBjb25zdHJ1Y3RvcnMgdGhhdCB0YWtlIHBhcmFyZW10ZXJzIGluamVjdGVkIGJ5IFNwcmluZyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFR1c2NhbnkgaXMgbm90IGhhcHB5IHdpdGggdGhhdCBkdXJpbmcgdGhlIGludHJvc3BlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5sb2coTGV2ZWwuU0VWRVJFLCBlLmdldE1lc3NhZ2UoKSwgZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IC8vIGVuZCB3aGlsZQogICAgICAgICAgICAgfSAvLyBlbmQgaWYKQEAgLTY3MywxNiArNDcxLDI4IEBACiAgICAgICAgICAgICBpdGIgPSBiZWFucy5pdGVyYXRvcigpOwogICAgICAgICAgICAgd2hpbGUgKGl0Yi5oYXNOZXh0KCkpIHsKICAgICAgICAgICAgICAgICBTcHJpbmdCZWFuRWxlbWVudCBiZWFuRWxlbWVudCA9IGl0Yi5uZXh0KCk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiBpdHMgbm90IGEgdmFsaWQgYmVhbiBmb3Igc2VydmljZSwgaWdub3JlIGl0CisgICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkQmVhbkZvclNlcnZpY2UoYmVhbkVsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgaWYgdGhlIGJlYW4gaGFzIG5vIHByb3BlcnRpZXMgYW5kIGNvbnN0cnVjdG9yIGFyZ3VtZW50cwogICAgICAgICAgICAgICAgIGlmIChiZWFuRWxlbWVudC5nZXRQcm9wZXJ0aWVzKCkuaXNFbXB0eSgpICYmIGJlYW5FbGVtZW50LmdldEN1c3RydWN0b3JBcmdzKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIAljb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgICAgICBDbGFzczw/PiBiZWFuQ2xhc3MgPSByZXNvbHZlQ2xhc3MocmVzb2x2ZXIsIGJlYW5FbGVtZW50LmdldENsYXNzTmFtZSgpLCBjb250ZXh0KTsKLSAgICAgICAgICAgICAgICAvLyBJbnRyb3NwZWN0IHRoZSBiZWFuCi0gICAgICAgICAgICAgICAgYmVhbkludHJvc3BlY3RvciA9Ci0gICAgICAgICAgICAgICAgICAgIG5ldyBTcHJpbmdCZWFuSW50cm9zcGVjdG9yKHJlZ2lzdHJ5LCBiZWFuRWxlbWVudC5nZXRDdXN0cnVjdG9yQXJncygpKTsKICAgICAgICAgICAgICAgICBDb21wb25lbnRUeXBlIGJlYW5Db21wb25lbnRUeXBlID0gYXNzZW1ibHlGYWN0b3J5LmNyZWF0ZUNvbXBvbmVudFR5cGUoKTsKLSAgICAgICAgICAgICAgICBqYXZhSW1wbGVtZW50YXRpb24gPSBiZWFuSW50cm9zcGVjdG9yLmludHJvc3BlY3RCZWFuKGJlYW5DbGFzcywgYmVhbkNvbXBvbmVudFR5cGUpOworCisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gYmVhbkNsYXNzID0gcmVzb2x2ZUNsYXNzKHJlc29sdmVyLCBiZWFuRWxlbWVudC5nZXRDbGFzc05hbWUoKSwgY29udGV4dCk7CisgICAgICAgICAgICAgICAgICAgIC8vIEludHJvc3BlY3QgdGhlIGJlYW4KKyAgICAgICAgICAgICAgICAgICAgYmVhbkludHJvc3BlY3RvciA9IG5ldyBTcHJpbmdCZWFuSW50cm9zcGVjdG9yKHJlZ2lzdHJ5LCBiZWFuRWxlbWVudC5nZXRDdXN0cnVjdG9yQXJncygpKTsKKyAgICAgICAgICAgICAgICAgICAgamF2YUltcGxlbWVudGF0aW9uID0gYmVhbkludHJvc3BlY3Rvci5pbnRyb3NwZWN0QmVhbihiZWFuQ2xhc3MsIGJlYW5Db21wb25lbnRUeXBlKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBbcmZlbmddIEZJWE1FOiBTb21lIFNwcmluZyBiZWFucyBoYXZlIGNvbnN0cnVjdG9ycyB0aGF0IHRha2UgcGFyYXJlbXRlcnMgaW5qZWN0ZWQgYnkgU3ByaW5nIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyBUdXNjYW55IGlzIG5vdCBoYXBweSB3aXRoIHRoYXQgZHVyaW5nIHRoZSBpbnRyb3NwZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGxvZy5sb2coTGV2ZWwuU0VWRVJFLCBlLmdldE1lc3NhZ2UoKSwgZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBNYXA8U3RyaW5nLCBKYXZhRWxlbWVudEltcGw+IHByb3BlcnR5TWFwID0gamF2YUltcGxlbWVudGF0aW9uLmdldFByb3BlcnR5TWVtYmVycygpOwogICAgICAgICAgICAgICAgIEphdmFDb25zdHJ1Y3RvckltcGwgY29uc3RydWN0b3IgPSBqYXZhSW1wbGVtZW50YXRpb24uZ2V0Q29uc3RydWN0b3IoKTsKICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIHJlZmVyZW5jZXMgYnkgdGhpcyBTcHJpbmcgQmVhbiBhbmQgYWRkIHRoZSB1bnJlc29sdmVkIG9uZXMgdG8KQEAgLTY5MCw2NiArNTAwLDg1IEBACiAgICAgICAgICAgICAgICAgTGlzdDxSZWZlcmVuY2U+IGJlYW5SZWZlcmVuY2VzID0gYmVhbkNvbXBvbmVudFR5cGUuZ2V0UmVmZXJlbmNlcygpOwogICAgICAgICAgICAgICAgIExpc3Q8UHJvcGVydHk+IGJlYW5Qcm9wZXJ0aWVzID0gYmVhbkNvbXBvbmVudFR5cGUuZ2V0UHJvcGVydGllcygpOwogCisgICAgICAgICAgICAgICAgU2V0PFN0cmluZz4gZXhjbHVkZWROYW1lcyA9IG5ldyBIYXNoU2V0PFN0cmluZz4oKTsKICAgICAgICAgICAgICAgICBJdGVyYXRvcjxTcHJpbmdQcm9wZXJ0eUVsZW1lbnQ+IGl0cCA9IGJlYW5FbGVtZW50LmdldFByb3BlcnRpZXMoKS5pdGVyYXRvcigpOwogICAgICAgICAgICAgICAgIHdoaWxlIChpdHAuaGFzTmV4dCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIFNwcmluZ1Byb3BlcnR5RWxlbWVudCBwcm9wZXJ0eUVsZW1lbnQgPSBpdHAubmV4dCgpOworICAgICAgICAgICAgICAgICAgICAvLyBFeGNsdWRlIHRoZSByZWZlcmVuY2UgdGhhdCBpcyBhbHNvIGtub3duIGFzIGEgc3ByaW5nIHByb3BlcnR5CisgICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGVkTmFtZXMuYWRkKHByb3BlcnR5RWxlbWVudC5nZXROYW1lKCkpOwogICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBwcm9wZXJ0eVJlZiA6IHByb3BlcnR5RWxlbWVudC5nZXRSZWZzKCkpIHsKLQkgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eVJlZlVucmVzb2x2ZWQocHJvcGVydHlSZWYsIGJlYW5zLCByZWZlcmVuY2VzLCBzY2Fwcm9wZXJ0aWVzKSkgewotCSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgYW4gdW5yZXNvbHZlZCByZWZlcmVuY2UgZnJvbSB0aGUgc3ByaW5nIGJlYW4uLi4KLQkgICAgICAgICAgICAgICAgICAgIAlmb3IgKFJlZmVyZW5jZSByZWZlcmVuY2UgOiBiZWFuUmVmZXJlbmNlcykgewotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbGVtZW50LmdldE5hbWUoKS5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgCS8vIFRoZSBuYW1lIG9mIHRoZSByZWZlcmVuY2UgaW4gdGhpcyBjYXNlIGlzIHRoZSBzdHJpbmcgaW4KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBAcmVmIGF0dHJpYnV0ZSBvZiB0aGUgU3ByaW5nIHByb3BlcnR5IGVsZW1lbnQsIE5PVCB0aGUKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hbWUgb2YgdGhlIGZpZWxkIGluIHRoZSBTcHJpbmcgYmVhbi4uLi4KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZS5zZXROYW1lKHByb3BlcnR5UmVmKTsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudFR5cGUuZ2V0UmVmZXJlbmNlcygpLmFkZChyZWZlcmVuY2UpOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIGVuZCBpZgotCSAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGZvcgotCQotCSAgICAgICAgICAgICAgICAgICAgCS8vIFN0b3JlIHRoZSB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYXMgdW5yZXNvbHZlZEJlYW5SZWYgaW4gdGhlIFNwcmluZyBJbXBsZW1lbnRhdGlvbiB0eXBlCi0JICAgICAgICAgICAgICAgICAgICAJZm9yIChQcm9wZXJ0eSBzY2Fwcm9wZXJ0eSA6IGJlYW5Qcm9wZXJ0aWVzKSB7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhzY2Fwcm9wZXJ0eS5nZXROYW1lKCkpKSB7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkvLyBUaGUgbmFtZSBvZiB0aGUgcmVmZXJlbmNlIGluIHRoaXMgY2FzZSBpcyB0aGUgc3RyaW5nIGluCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgQHJlZiBhdHRyaWJ1dGUgb2YgdGhlIFNwcmluZyBwcm9wZXJ0eSBlbGVtZW50LCBOT1QgdGhlCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuYW1lIG9mIHRoZSBmaWVsZCBpbiB0aGUgU3ByaW5nIGJlYW4uLi4uCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlDbGFzczw/PiBpbnRlcmZhemUgPSByZXNvbHZlQ2xhc3MocmVzb2x2ZXIsIChwcm9wZXJ0eU1hcC5nZXQocHJvcGVydHlFbGVtZW50LmdldE5hbWUoKSkuZ2V0VHlwZSgpKS5nZXROYW1lKCksIGNvbnRleHQpOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVmZXJlbmNlIHRoZVJlZmVyZW5jZSA9IGNyZWF0ZVJlZmVyZW5jZShpbnRlcmZhemUsIHByb3BlcnR5UmVmKTsKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLnNldFVucmVzb2x2ZWRCZWFuUmVmKHByb3BlcnR5UmVmLCB0aGVSZWZlcmVuY2UpOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIGVuZCBpZgotCSAgICAgICAgICAgICAgICAgICAgCX0gLy8gZW5kIGZvcgotCSAgICAgICAgICAgICAgICAgICAgfSAvLyBlbmQgaWYgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlSZWZVbnJlc29sdmVkKHByb3BlcnR5UmVmLCBiZWFucywgcmVmZXJlbmNlcywgc2NhcHJvcGVydGllcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIGFuIHVucmVzb2x2ZWQgcmVmZXJlbmNlIGZyb20gdGhlIHNwcmluZyBiZWFuLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWZlcmVuY2UgcmVmZXJlbmNlIDogYmVhblJlZmVyZW5jZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5RWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKHJlZmVyZW5jZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbmFtZSBvZiB0aGUgcmVmZXJlbmNlIGluIHRoaXMgY2FzZSBpcyB0aGUgc3RyaW5nIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgQHJlZiBhdHRyaWJ1dGUgb2YgdGhlIFNwcmluZyBwcm9wZXJ0eSBlbGVtZW50LCBOT1QgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuYW1lIG9mIHRoZSBmaWVsZCBpbiB0aGUgU3ByaW5nIGJlYW4uLi4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2Uuc2V0TmFtZShwcm9wZXJ0eVJlZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRUeXBlLmdldFJlZmVyZW5jZXMoKS5hZGQocmVmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGZvcgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhcyB1bnJlc29sdmVkQmVhblJlZiBpbiB0aGUgU3ByaW5nIEltcGxlbWVudGF0aW9uIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFByb3BlcnR5IHNjYXByb3BlcnR5IDogYmVhblByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5RWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKHNjYXByb3BlcnR5LmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBuYW1lIG9mIHRoZSByZWZlcmVuY2UgaW4gdGhpcyBjYXNlIGlzIHRoZSBzdHJpbmcgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBAcmVmIGF0dHJpYnV0ZSBvZiB0aGUgU3ByaW5nIHByb3BlcnR5IGVsZW1lbnQsIE5PVCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5hbWUgb2YgdGhlIGZpZWxkIGluIHRoZSBTcHJpbmcgYmVhbi4uLi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzPD8+IGludGVyZmF6ZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUNsYXNzKHJlc29sdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJvcGVydHlNYXAuZ2V0KHByb3BlcnR5RWxlbWVudC5nZXROYW1lKCkpLmdldFR5cGUoKSkuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSB0aGVSZWZlcmVuY2UgPSBjcmVhdGVSZWZlcmVuY2UoaW50ZXJmYXplLCBwcm9wZXJ0eVJlZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbi5zZXRVbnJlc29sdmVkQmVhblJlZihwcm9wZXJ0eVJlZiwgdGhlUmVmZXJlbmNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGZvcgorICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBlbmQgaWYgCiAgICAgICAgICAgICAgICAgICAgIH0gLy8gZW5kIGZvcgogICAgICAgICAgICAgICAgIH0gLy8gZW5kIHdoaWxlCiAKICAgICAgICAgICAgICAgICBJdGVyYXRvcjxTcHJpbmdDb25zdHJ1Y3RvckFyZ0VsZW1lbnQ+IGl0Y3IgPSBiZWFuRWxlbWVudC5nZXRDdXN0cnVjdG9yQXJncygpLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGl0Y3IuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgCVNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudCBjb25BcmdFbGVtZW50ID0gaXRjci5uZXh0KCk7Ci0gICAgICAgICAgICAgICAgCWZvciAoU3RyaW5nIGNvbnN0cnVjdG9yQXJnUmVmIDogY29uQXJnRWxlbWVudC5nZXRSZWZzKCkpIHsKLQkgICAgICAgICAgICAgICAgCWlmIChwcm9wZXJ0eVJlZlVucmVzb2x2ZWQoY29uc3RydWN0b3JBcmdSZWYsIGJlYW5zLCByZWZlcmVuY2VzLCBzY2Fwcm9wZXJ0aWVzKSkgewotCSAgICAgICAgICAgICAgICAgICAgCWZvciAoSmF2YVBhcmFtZXRlckltcGwgcGFyYW1ldGVyIDogY29uc3RydWN0b3IuZ2V0UGFyYW1ldGVycygpKSB7Ci0JICAgICAgICAgICAgICAgICAgICAJCVN0cmluZyBwYXJhbVR5cGUgPSBwYXJhbWV0ZXIuZ2V0VHlwZSgpLmdldE5hbWUoKTsKLQkgICAgICAgICAgICAgICAgICAgIAkJQ2xhc3M8Pz4gaW50ZXJmYXplID0gcmVzb2x2ZUNsYXNzKHJlc29sdmVyLCBwYXJhbVR5cGUsIGNvbnRleHQpOwotCSAgICAgICAgICAgICAgICAgICAgCQkvLyBDcmVhdGUgYSBjb21wb25lbnQgdHlwZSByZWZlcmVuY2UvcHJvcGVydHkgaWYgdGhlIGNvbnN0cnVjdG9yLWFyZyBlbGVtZW50IGhhcyBhCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR5cGUgYXR0cmlidXRlIE9SIGluZGV4IGF0dHJpYnV0ZSBkZWNsYXJlZC4uLgotCSAgICAgICAgICAgICAgICAgICAgCQlpZiAoKGNvbkFyZ0VsZW1lbnQuZ2V0VHlwZSgpICE9IG51bGwgJiYgcGFyYW1UeXBlLmVxdWFscyhjb25BcmdFbGVtZW50LmdldFR5cGUoKSkpIHx8Ci0JICAgICAgICAgICAgICAgICAgICAJCSAgICAoY29uQXJnRWxlbWVudC5nZXRJbmRleCgpICE9IC0xICYmIChjb25BcmdFbGVtZW50LmdldEluZGV4KCkgPT0gcGFyYW1ldGVyLmdldEluZGV4KCkpKSkKLQkgICAgICAgICAgICAgICAgICAgIAkJewotCSAgICAgICAgICAgICAgICAgICAgCQkJaWYgKHBhcmFtZXRlci5nZXRDbGFzc2lmZXIoKS5nZXROYW1lKCkuZXF1YWxzKCJvcmcub3NvYS5zY2EuYW5ub3RhdGlvbnMuUmVmZXJlbmNlIikpIHsKLQkgICAgICAgICAgICAgICAgICAgIAkJCQlSZWZlcmVuY2UgdGhlUmVmZXJlbmNlID0gY3JlYXRlUmVmZXJlbmNlKGludGVyZmF6ZSwgY29uc3RydWN0b3JBcmdSZWYpOwotCSAgICAgICAgICAgICAgICAgICAgCQkJCWNvbXBvbmVudFR5cGUuZ2V0UmVmZXJlbmNlcygpLmFkZCh0aGVSZWZlcmVuY2UpOwotCSAgICAgICAgICAgICAgICAgICAgCQkJfQotCSAgICAgICAgICAgICAgICAgICAgCQkJaWYgKHBhcmFtZXRlci5nZXRDbGFzc2lmZXIoKS5nZXROYW1lKCkuZXF1YWxzKCJvcmcub3NvYS5zY2EuYW5ub3RhdGlvbnMuUHJvcGVydHkiKSkgewotCSAgICAgICAgICAgICAgICAgICAgCQkJCS8vIFN0b3JlIHRoZSB1bnJlc29sdmVkIHJlZmVyZW5jZXMgYXMgdW5yZXNvbHZlZEJlYW5SZWYgaW4gdGhlIFNwcmluZyBJbXBsZW1lbnRhdGlvbiB0eXBlCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJLy8gd2UgbWlnaHQgbmVlZCB0byB2ZXJpZnkgd2l0aCB0aGUgY29tcG9uZW50IGRlZmluaXRpb24gbGF0ZXIuCi0JICAgICAgICAgICAgICAgICAgICAJCQkJUmVmZXJlbmNlIHRoZVJlZmVyZW5jZSA9IGNyZWF0ZVJlZmVyZW5jZShpbnRlcmZhemUsIGNvbnN0cnVjdG9yQXJnUmVmKTsKLQkgICAgICAgICAgICAgICAgICAgICAgICAJCQlpbXBsZW1lbnRhdGlvbi5zZXRVbnJlc29sdmVkQmVhblJlZihjb25zdHJ1Y3RvckFyZ1JlZiwgdGhlUmVmZXJlbmNlKTsKLQkgICAgICAgICAgICAgICAgICAgIAkJCX0KLQkgICAgICAgICAgICAgICAgICAgIAkJfQotCSAgICAgICAgICAgICAgICAgICAgCX0gLy8gZW5kIGZvcgotCSAgICAgICAgICAgICAgICAgICAgfSAvLyBlbmQgaWYKLSAgICAgICAgICAgICAgICAJfSAvLyBlbmQgZm9yCisgICAgICAgICAgICAgICAgICAgIFNwcmluZ0NvbnN0cnVjdG9yQXJnRWxlbWVudCBjb25BcmdFbGVtZW50ID0gaXRjci5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGNvbnN0cnVjdG9yQXJnUmVmIDogY29uQXJnRWxlbWVudC5nZXRSZWZzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eVJlZlVucmVzb2x2ZWQoY29uc3RydWN0b3JBcmdSZWYsIGJlYW5zLCByZWZlcmVuY2VzLCBzY2Fwcm9wZXJ0aWVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoSmF2YVBhcmFtZXRlckltcGwgcGFyYW1ldGVyIDogY29uc3RydWN0b3IuZ2V0UGFyYW1ldGVycygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBwYXJhbVR5cGUgPSBwYXJhbWV0ZXIuZ2V0VHlwZSgpLmdldE5hbWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gaW50ZXJmYXplID0gcmVzb2x2ZUNsYXNzKHJlc29sdmVyLCBwYXJhbVR5cGUsIGNvbnRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBjb21wb25lbnQgdHlwZSByZWZlcmVuY2UvcHJvcGVydHkgaWYgdGhlIGNvbnN0cnVjdG9yLWFyZyBlbGVtZW50IGhhcyBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHR5cGUgYXR0cmlidXRlIE9SIGluZGV4IGF0dHJpYnV0ZSBkZWNsYXJlZC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGNvbkFyZ0VsZW1lbnQuZ2V0VHlwZSgpICE9IG51bGwgJiYgcGFyYW1UeXBlLmVxdWFscyhjb25BcmdFbGVtZW50LmdldFR5cGUoKSkpIHx8IChjb25BcmdFbGVtZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0SW5kZXgoKSAhPSAtMSAmJiAoY29uQXJnRWxlbWVudC5nZXRJbmRleCgpID09IHBhcmFtZXRlci5nZXRJbmRleCgpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFtyZmVuZ10gQ29tbWVudGluZyBvdXQgdGhlIGZvbGxvd2luZyBjb2RlIGFzIHRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgYmFzZWQgU0NBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2VzIGFyZSBhZGRlZCBhbHJlYWR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5nZXRDbGFzc2lmZXIoKSA9PSBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZS5jbGFzcykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZmVyZW5jZSB0aGVSZWZlcmVuY2UgPSBjcmVhdGVSZWZlcmVuY2UoaW50ZXJmYXplLCBjb25zdHJ1Y3RvckFyZ1JlZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VHlwZS5nZXRSZWZlcmVuY2VzKCkuYWRkKHRoZVJlZmVyZW5jZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5nZXRDbGFzc2lmZXIoKSA9PSBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlByb3BlcnR5LmNsYXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHVucmVzb2x2ZWQgcmVmZXJlbmNlcyBhcyB1bnJlc29sdmVkQmVhblJlZiBpbiB0aGUgU3ByaW5nIEltcGxlbWVudGF0aW9uIHR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBtaWdodCBuZWVkIHRvIHZlcmlmeSB3aXRoIHRoZSBjb21wb25lbnQgZGVmaW5pdGlvbiBsYXRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWZlcmVuY2UgdGhlUmVmZXJlbmNlID0gY3JlYXRlUmVmZXJlbmNlKGludGVyZmF6ZSwgY29uc3RydWN0b3JBcmdSZWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLnNldFVucmVzb2x2ZWRCZWFuUmVmKGNvbnN0cnVjdG9yQXJnUmVmLCB0aGVSZWZlcmVuY2UpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAvLyBlbmQgZm9yCisgICAgICAgICAgICAgICAgICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICAgICAgICAgICAgICB9IC8vIGVuZCBmb3IKICAgICAgICAgICAgICAgICB9IC8vIGVuZCB3aGlsZQogCisgICAgICAgICAgICAgICAgLy8gW3JmZW5nXSBBZGQgdGhlIHJlbWFpbmluZyBpbnRyb3NwZWN0ZWQgcmVmZXJlbmNlcyAody8gQFJlZmVyZW5jZSBidXQgd2l0aG91dCBTcHJpbmcgcHJvcGVydHkgcmVmKQorICAgICAgICAgICAgICAgIGZvciAoUmVmZXJlbmNlIHJlZiA6IGJlYW5SZWZlcmVuY2VzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZXhjbHVkZWROYW1lcy5jb250YWlucyhyZWYuZ2V0TmFtZSgpKSAmJiBjb21wb25lbnRUeXBlLmdldFJlZmVyZW5jZShyZWYuZ2V0TmFtZSgpKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IGFkZCB0aGUgb25lcyB0aGF0IG5vdCBsaXN0ZWQgYnkgc2NhOnJlZmVyZW5jZQorICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50VHlwZS5nZXRSZWZlcmVuY2VzKCkuYWRkKHJlZik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgIH0gLy8gZW5kIHdoaWxlCiAKICAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CkBAIC03NTcsOCArNTg2LDYgQEAKICAgICAgICAgICAgIHRocm93IG5ldyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uKGUpOwogICAgICAgICB9IGNhdGNoIChJbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgIHRocm93IG5ldyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uKGUpOwotICAgICAgICB9IGNhdGNoIChDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uIGUpIHsKLQogICAgICAgICB9IC8vIGVuZCB0cnkKIAogICAgICAgICAvLyBJZiB3ZSBnZXQgaGVyZSwgdGhlIFNwcmluZyBhc3NlbWJseSBjb21wb25lbnQgdHlwZSBpcyByZXNvbHZlZApAQCAtNzkzLDcgKzYyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0gLy8gZW5kIGlmCiAgICAgICAgICAgICB9IC8vIGVuZCB3aGlsZQotICAgICAgICAgICAgLy8gU2NhbiBvdmVyIHRoZSBTQ0EgcmVmZXJlbmNlIGVsZW1lbnRzIGxvb2tpbmcgZm9yIGEgbWF0Y2gKKyAgICAgICAgICAgICAgLy8gU2NhbiBvdmVyIHRoZSBTQ0EgcmVmZXJlbmNlIGVsZW1lbnRzIGxvb2tpbmcgZm9yIGEgbWF0Y2gKICAgICAgICAgICAgIGlmICh1bnJlc29sdmVkKSB7CiAgICAgICAgICAgICAgICAgSXRlcmF0b3I8U3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudD4gaXRyID0gcmVmZXJlbmNlcy5pdGVyYXRvcigpOwogICAgICAgICAgICAgICAgIHdoaWxlIChpdHIuaGFzTmV4dCgpKSB7CkBAIC04MDQsNyArNjMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgfSAvLyBlbmQgaWYKICAgICAgICAgICAgICAgICB9IC8vIGVuZCB3aGlsZQogICAgICAgICAgICAgfSAvLyBlbmQgaWYKLSAgICAgICAgICAgIC8vIFNjYW4gb3ZlciB0aGUgU0NBIHByb3BlcnR5IGVsZW1lbnRzIGxvb2tpbmcgZm9yIGEgbWF0Y2gKKyAgICAgICAgICAgICAgLy8gU2NhbiBvdmVyIHRoZSBTQ0EgcHJvcGVydHkgZWxlbWVudHMgbG9va2luZyBmb3IgYSBtYXRjaAogICAgICAgICAgICAgaWYgKHVucmVzb2x2ZWQpIHsKICAgICAgICAgICAgICAgICBJdGVyYXRvcjxTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ+IGl0c3AgPSBzY2Fwcm9wZXJ0aWVzLml0ZXJhdG9yKCk7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGl0c3AuaGFzTmV4dCgpKSB7CkBAIC04MjQsMzUgKzY1MSwzOSBAQAogICAgICAgICByZXR1cm4gdW5yZXNvbHZlZDsKIAogICAgIH0gLy8gZW5kIG1ldGhvZCBwcm9wZXJ0eVJlZlVucmVzb2x2ZWQKLSAgICAKKwogICAgIC8qKgogICAgICAqIFZhbGlkYXRlcyB3aGV0aGVyIHRoZSA8c2NhOnNlcnZpY2U+LCA8c2NhOnJlZmVyZW5jZT4gYW5kIDxzY2E6cHJvcGVydHk+IGVsZW1lbnRzCiAgICAgICogaGFzIHVuaXF1ZSBuYW1lcyB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uIGNvbnRleHQuCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIHZhbGlkYXRlQmVhbnMoTGlzdDxTcHJpbmdCZWFuRWxlbWVudD4gYmVhbnMsCi0gICAgICAgICAgICAJCQkJICAgTGlzdDxTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudD4gc2VydmljZXMsCi0gICAgICAgICAgICAJCQkJICAgTGlzdDxTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50PiByZWZlcmVuY2VzLAotICAgICAgICAgICAgCQkJCSAgIExpc3Q8U3ByaW5nU0NBUHJvcGVydHlFbGVtZW50PiBzY2Fwcm9wZXJ0aWVzKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7Ci0gICAgCSAgICAgICAgCi0gICAgCS8vIFRoZSBAdGFyZ2V0IGF0dHJpYnV0ZSBvZiBhIDxzZXJ2aWNlLz4gc3ViZWxlbWVudCBvZiBhIDxiZWFucy8+IGVsZW1lbnQgCi0gICAgCS8vIE1VU1QgaGF2ZSB0aGUgdmFsdWUgb2YgdGhlIEBuYW1lIGF0dHJpYnV0ZSBvZiBvbmUgb2YgdGhlIDxiZWFuLz4gCi0gICAgCS8vIHN1YmVsZW1lbnRzIG9mIHRoZSA8YmVhbnMvPiBlbGVtZW50LiAgICAJCi0gICAgCUl0ZXJhdG9yPFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50PiBpdHMgPSBzZXJ2aWNlcy5pdGVyYXRvcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBU2VydmljZUVsZW1lbnQ+IHNlcnZpY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudD4gcmVmZXJlbmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0PFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudD4gc2NhcHJvcGVydGllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIHsKKworICAgICAgICAvLyBUaGUgQHRhcmdldCBhdHRyaWJ1dGUgb2YgYSA8c2VydmljZS8+IHN1YmVsZW1lbnQgb2YgYSA8YmVhbnMvPiBlbGVtZW50IAorICAgICAgICAvLyBNVVNUIGhhdmUgdGhlIHZhbHVlIG9mIHRoZSBAbmFtZSBhdHRyaWJ1dGUgb2Ygb25lIG9mIHRoZSA8YmVhbi8+IAorICAgICAgICAvLyBzdWJlbGVtZW50cyBvZiB0aGUgPGJlYW5zLz4gZWxlbWVudC4gICAgCQorICAgICAgICBJdGVyYXRvcjxTcHJpbmdTQ0FTZXJ2aWNlRWxlbWVudD4gaXRzID0gc2VydmljZXMuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUgKGl0cy5oYXNOZXh0KCkpIHsKLSAgICAgICAgCVNwcmluZ1NDQVNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gaXRzLm5leHQoKTsKLSAgICAgICAgCWJvb2xlYW4gdGFyZ2V0QmVhbkV4aXN0cyA9IGZhbHNlOwotICAgICAgICAJSXRlcmF0b3I8U3ByaW5nQmVhbkVsZW1lbnQ+IGl0YiA9IGJlYW5zLml0ZXJhdG9yKCk7Ci0gICAgICAgIAl3aGlsZSAoaXRiLmhhc05leHQoKSkgewotICAgICAgICAJCVNwcmluZ0JlYW5FbGVtZW50IGJlYW5FbGVtZW50ID0gaXRiLm5leHQoKTsKLSAgICAgICAgCQlpZiAoc2VydmljZUVsZW1lbnQuZ2V0VGFyZ2V0KCkuZXF1YWxzKGJlYW5FbGVtZW50LmdldElkKCkpKQotICAgICAgICAJCQl0YXJnZXRCZWFuRXhpc3RzID0gdHJ1ZTsKLSAgICAgICAgCX0KLSAgICAgICAgCWlmICghdGFyZ2V0QmVhbkV4aXN0cykKLSAgICAgICAgCQllcnJvcigiVGFyZ2V0QmVhbkRvZXNOb3RFeGlzdCIsIGJlYW5zKTsKKyAgICAgICAgICAgIFNwcmluZ1NDQVNlcnZpY2VFbGVtZW50IHNlcnZpY2VFbGVtZW50ID0gaXRzLm5leHQoKTsKKyAgICAgICAgICAgIGJvb2xlYW4gdGFyZ2V0QmVhbkV4aXN0cyA9IGZhbHNlOworICAgICAgICAgICAgSXRlcmF0b3I8U3ByaW5nQmVhbkVsZW1lbnQ+IGl0YiA9IGJlYW5zLml0ZXJhdG9yKCk7CisgICAgICAgICAgICB3aGlsZSAoaXRiLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIFNwcmluZ0JlYW5FbGVtZW50IGJlYW5FbGVtZW50ID0gaXRiLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VydmljZUVsZW1lbnQuZ2V0VGFyZ2V0KCkuZXF1YWxzKGJlYW5FbGVtZW50LmdldElkKCkpKQorICAgICAgICAgICAgICAgICAgICB0YXJnZXRCZWFuRXhpc3RzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdGFyZ2V0QmVhbkV4aXN0cykgeworICAgICAgICAgICAgICAgIC8vIFJFVklFVzogW3JmZW5nXSBUaGUgdGFyZ2V0IGJlYW4gY2FuIGV4aXN0IGluIHRoZSBwYXJlbnQgU3ByaW5nIGFwcGxpY2F0aW9uIGNvbnRleHQgd2hpY2ggd2UgZG9uJ3Qga25vdworICAgICAgICAgICAgICAgIC8vIHVudGlsIHJ1bnRpbWUKKyAgICAgICAgICAgICAgICB3YXJuaW5nKG1vbml0b3IsICJUYXJnZXRCZWFuRG9lc05vdEV4aXN0IiwgYmVhbnMpOworICAgICAgICAgICAgfQogICAgICAgICB9IC8vIGVuZCB3aGlsZQotICAgICAgICAKLSAgICAJLy8gVGhlIHZhbHVlIG9mIHRoZSBAbmFtZSBhdHRyaWJ1dGUgb2YgYW4gPHNjYTpyZWZlcmVuY2UvPiBzdWJlbGVtZW50IG9mIGEgPGJlYW5zLz4gCi0gICAgCS8vIGVsZW1lbnQgTVVTVCBiZSB1bmlxdWUgYW1vbmdzdCB0aGUgQG5hbWUgYXR0cmlidXRlcyBvZiB0aGUgPHNjYTpwcm9wZXJ0eS8+IAorCisgICAgICAgIC8vIFRoZSB2YWx1ZSBvZiB0aGUgQG5hbWUgYXR0cmlidXRlIG9mIGFuIDxzY2E6cmVmZXJlbmNlLz4gc3ViZWxlbWVudCBvZiBhIDxiZWFucy8+IAorICAgICAgICAvLyBlbGVtZW50IE1VU1QgYmUgdW5pcXVlIGFtb25nc3QgdGhlIEBuYW1lIGF0dHJpYnV0ZXMgb2YgdGhlIDxzY2E6cHJvcGVydHkvPiAKICAgICAgICAgLy8gc3ViZWxlbWVudHMgYW5kIHRoZSA8YmVhbi8+IHN1YmVsZW1lbnRzIG9mIHRoZSA8YmVhbnMvPiBlbGVtZW50LgogICAgICAgICAvLyAJCQkJCQkJCQlBTkQKICAgICAgICAgLy8gVGhlIEBkZWZhdWx0IGF0dHJpYnV0ZSBvZiBhIDxzY2E6cmVmZXJlbmNlLz4gc3ViZWxlbWVudCBvZiBhIDxiZWFucy8+ICAKQEAgLTg2MCwyMTMgKzY5MSwyMTkgQEAKICAgICAgICAgLy8gc3ViZWxlbWVudHMgb2YgdGhlIDxiZWFucy8+IGVsZW1lbnQuCiAgICAgICAgIEl0ZXJhdG9yPFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ+IGl0ciA9IHJlZmVyZW5jZXMuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUgKGl0ci5oYXNOZXh0KCkpIHsKLSAgICAgICAgCVNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQgcmVmZXJlbmNlRWxlbWVudCA9IGl0ci5uZXh0KCk7Ci0gICAgICAgIAlib29sZWFuIGRlZmF1bHRCZWFuRXhpc3RzID0gdHJ1ZTsKLSAgICAgICAgCWJvb2xlYW4gaXNVbmlxdWVSZWZlcmVuY2VOYW1lID0gdHJ1ZTsKLSAgICAgICAgCUl0ZXJhdG9yPFNwcmluZ0JlYW5FbGVtZW50PiBpdGIgPSBiZWFucy5pdGVyYXRvcigpOwotICAgICAgICAJd2hpbGUgKGl0Yi5oYXNOZXh0KCkpIHsKLSAgICAgICAgCQlTcHJpbmdCZWFuRWxlbWVudCBiZWFuRWxlbWVudCA9IGl0Yi5uZXh0KCk7Ci0gICAgICAgIAkJaWYgKHJlZmVyZW5jZUVsZW1lbnQuZ2V0RGVmYXVsdEJlYW4oKSAhPSBudWxsKQotICAgICAgICAJCQlpZiAocmVmZXJlbmNlRWxlbWVudC5nZXREZWZhdWx0QmVhbigpLmVxdWFscyhiZWFuRWxlbWVudC5nZXRJZCgpKSkKLSAgICAgICAgCQkJCWRlZmF1bHRCZWFuRXhpc3RzID0gZmFsc2U7Ci0gICAgICAgIAkJaWYgKHJlZmVyZW5jZUVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhiZWFuRWxlbWVudC5nZXRJZCgpKSkKLSAgICAgICAgCQkJaXNVbmlxdWVSZWZlcmVuY2VOYW1lID0gZmFsc2U7Ci0gICAgICAgIAl9Ci0gICAgICAgIAlJdGVyYXRvcjxTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ+IGl0cCA9IHNjYXByb3BlcnRpZXMuaXRlcmF0b3IoKTsKLSAgICAgICAgCXdoaWxlIChpdHAuaGFzTmV4dCgpKSB7Ci0gICAgICAgIAkJU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50IHByb3BlcnR5RWxlbWVudCA9IGl0cC5uZXh0KCk7Ci0gICAgICAgIAkJaWYgKHJlZmVyZW5jZUVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhwcm9wZXJ0eUVsZW1lbnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgCQkJaXNVbmlxdWVSZWZlcmVuY2VOYW1lID0gZmFsc2U7Ci0gICAgICAgIAl9Ci0gICAgICAgIAlpZiAoIWRlZmF1bHRCZWFuRXhpc3RzKQotICAgICAgICAJCWVycm9yKCJEZWZhdWx0QmVhbkRvZXNOb3RFeGlzdCIsIGJlYW5zKTsKLSAgICAgICAgCWlmICghaXNVbmlxdWVSZWZlcmVuY2VOYW1lKQotICAgICAgICAJCWVycm9yKCJTY2FSZWZlcmVuY2VOYW1lTm90VW5pcXVlIiwgYmVhbnMpOworICAgICAgICAgICAgU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudCByZWZlcmVuY2VFbGVtZW50ID0gaXRyLm5leHQoKTsKKyAgICAgICAgICAgIGJvb2xlYW4gZGVmYXVsdEJlYW5FeGlzdHMgPSB0cnVlOworICAgICAgICAgICAgYm9vbGVhbiBpc1VuaXF1ZVJlZmVyZW5jZU5hbWUgPSB0cnVlOworICAgICAgICAgICAgSXRlcmF0b3I8U3ByaW5nQmVhbkVsZW1lbnQ+IGl0YiA9IGJlYW5zLml0ZXJhdG9yKCk7CisgICAgICAgICAgICB3aGlsZSAoaXRiLmhhc05leHQoKSkgeworICAgICAgICAgICAgICAgIFNwcmluZ0JlYW5FbGVtZW50IGJlYW5FbGVtZW50ID0gaXRiLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlRWxlbWVudC5nZXREZWZhdWx0QmVhbigpICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2VFbGVtZW50LmdldERlZmF1bHRCZWFuKCkuZXF1YWxzKGJlYW5FbGVtZW50LmdldElkKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdEJlYW5FeGlzdHMgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlRWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKGJlYW5FbGVtZW50LmdldElkKCkpKQorICAgICAgICAgICAgICAgICAgICBpc1VuaXF1ZVJlZmVyZW5jZU5hbWUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEl0ZXJhdG9yPFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudD4gaXRwID0gc2NhcHJvcGVydGllcy5pdGVyYXRvcigpOworICAgICAgICAgICAgd2hpbGUgKGl0cC5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQgcHJvcGVydHlFbGVtZW50ID0gaXRwLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNlRWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKHByb3BlcnR5RWxlbWVudC5nZXROYW1lKCkpKQorICAgICAgICAgICAgICAgICAgICBpc1VuaXF1ZVJlZmVyZW5jZU5hbWUgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghZGVmYXVsdEJlYW5FeGlzdHMpCisgICAgICAgICAgICAgICAgZXJyb3IobW9uaXRvciwgIkRlZmF1bHRCZWFuRG9lc05vdEV4aXN0IiwgYmVhbnMpOworICAgICAgICAgICAgaWYgKCFpc1VuaXF1ZVJlZmVyZW5jZU5hbWUpCisgICAgICAgICAgICAgICAgZXJyb3IobW9uaXRvciwgIlNjYVJlZmVyZW5jZU5hbWVOb3RVbmlxdWUiLCBiZWFucyk7CiAgICAgICAgIH0gLy8gZW5kIHdoaWxlCi0gICAgICAgICAgICAJCi0gICAgCS8vIFRoZSB2YWx1ZSBvZiB0aGUgQG5hbWUgYXR0cmlidXRlIG9mIGFuIDxzY2E6cHJvcGVydHkvPiBzdWJlbGVtZW50IG9mIGEgPGJlYW5zLz4gCi0gICAgCS8vIGVsZW1lbnQgTVVTVCBiZSB1bmlxdWUgYW1vbmdzdCB0aGUgQG5hbWUgYXR0cmlidXRlcyBvZiB0aGUgPHNjYTpyZWZlcmVuY2UvPiAKKworICAgICAgICAvLyBUaGUgdmFsdWUgb2YgdGhlIEBuYW1lIGF0dHJpYnV0ZSBvZiBhbiA8c2NhOnByb3BlcnR5Lz4gc3ViZWxlbWVudCBvZiBhIDxiZWFucy8+IAorICAgICAgICAvLyBlbGVtZW50IE1VU1QgYmUgdW5pcXVlIGFtb25nc3QgdGhlIEBuYW1lIGF0dHJpYnV0ZXMgb2YgdGhlIDxzY2E6cmVmZXJlbmNlLz4gCiAgICAgICAgIC8vIHN1YmVsZW1lbnRzIGFuZCB0aGUgPGJlYW4vPiBzdWJlbGVtZW50cyBvZiB0aGUgPGJlYW5zLz4gZWxlbWVudC4gICAgCQogICAgICAgICBJdGVyYXRvcjxTcHJpbmdTQ0FQcm9wZXJ0eUVsZW1lbnQ+IGl0cCA9IHNjYXByb3BlcnRpZXMuaXRlcmF0b3IoKTsKICAgICAgICAgd2hpbGUgKGl0cC5oYXNOZXh0KCkpIHsKLSAgICAgICAgCVNwcmluZ1NDQVByb3BlcnR5RWxlbWVudCBwcm9wZXJ0eUVsZW1lbnQgPSBpdHAubmV4dCgpOwotICAgICAgICAJYm9vbGVhbiBpc1VuaXF1ZVByb3BlcnR5TmFtZSA9IHRydWU7Ci0gICAgICAgIAlJdGVyYXRvcjxTcHJpbmdCZWFuRWxlbWVudD4gaXRiID0gYmVhbnMuaXRlcmF0b3IoKTsKLSAgICAgICAgCXdoaWxlIChpdGIuaGFzTmV4dCgpKSB7Ci0gICAgICAgIAkJU3ByaW5nQmVhbkVsZW1lbnQgYmVhbkVsZW1lbnQgPSBpdGIubmV4dCgpOwotICAgICAgICAJCWlmIChwcm9wZXJ0eUVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhiZWFuRWxlbWVudC5nZXRJZCgpKSkKLSAgICAgICAgCQkJaXNVbmlxdWVQcm9wZXJ0eU5hbWUgPSBmYWxzZTsJCi0gICAgICAgIAl9Ci0gICAgICAgIAlJdGVyYXRvcjxTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50PiBpdHJwID0gcmVmZXJlbmNlcy5pdGVyYXRvcigpOwotICAgICAgICAgICAgd2hpbGUgKGl0cnAuaGFzTmV4dCgpKSB7Ci0gICAgICAgICAgICAJU3ByaW5nU0NBUmVmZXJlbmNlRWxlbWVudCByZWZlcmVuY2VFbGVtZW50ID0gaXRycC5uZXh0KCk7Ci0gICAgICAgICAgICAJaWYgKHByb3BlcnR5RWxlbWVudC5nZXROYW1lKCkuZXF1YWxzKHJlZmVyZW5jZUVsZW1lbnQuZ2V0TmFtZSgpKSkKLSAgICAgICAgCQkJaXNVbmlxdWVQcm9wZXJ0eU5hbWUgPSBmYWxzZTsKKyAgICAgICAgICAgIFNwcmluZ1NDQVByb3BlcnR5RWxlbWVudCBwcm9wZXJ0eUVsZW1lbnQgPSBpdHAubmV4dCgpOworICAgICAgICAgICAgYm9vbGVhbiBpc1VuaXF1ZVByb3BlcnR5TmFtZSA9IHRydWU7CisgICAgICAgICAgICBJdGVyYXRvcjxTcHJpbmdCZWFuRWxlbWVudD4gaXRiID0gYmVhbnMuaXRlcmF0b3IoKTsKKyAgICAgICAgICAgIHdoaWxlIChpdGIuaGFzTmV4dCgpKSB7CisgICAgICAgICAgICAgICAgU3ByaW5nQmVhbkVsZW1lbnQgYmVhbkVsZW1lbnQgPSBpdGIubmV4dCgpOworICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eUVsZW1lbnQuZ2V0TmFtZSgpLmVxdWFscyhiZWFuRWxlbWVudC5nZXRJZCgpKSkKKyAgICAgICAgICAgICAgICAgICAgaXNVbmlxdWVQcm9wZXJ0eU5hbWUgPSBmYWxzZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgCWlmICghaXNVbmlxdWVQcm9wZXJ0eU5hbWUpCi0gICAgICAgIAkJZXJyb3IoIlNjYVByb3BlcnR5TmFtZU5vdFVuaXF1ZSIsIGJlYW5zKTsKKyAgICAgICAgICAgIEl0ZXJhdG9yPFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ+IGl0cnAgPSByZWZlcmVuY2VzLml0ZXJhdG9yKCk7CisgICAgICAgICAgICB3aGlsZSAoaXRycC5oYXNOZXh0KCkpIHsKKyAgICAgICAgICAgICAgICBTcHJpbmdTQ0FSZWZlcmVuY2VFbGVtZW50IHJlZmVyZW5jZUVsZW1lbnQgPSBpdHJwLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlFbGVtZW50LmdldE5hbWUoKS5lcXVhbHMocmVmZXJlbmNlRWxlbWVudC5nZXROYW1lKCkpKQorICAgICAgICAgICAgICAgICAgICBpc1VuaXF1ZVByb3BlcnR5TmFtZSA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFpc1VuaXF1ZVByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgICAgICBlcnJvcihtb25pdG9yLCAiU2NhUHJvcGVydHlOYW1lTm90VW5pcXVlIiwgYmVhbnMpOwogICAgICAgICB9IC8vIGVuZCB3aGlsZQogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFZhbGlkYXRlcyB3aGV0aGVyIGEgYmVhbiBkZWZpbml0aW9uIGlzIHZhbGlkIGZvciBleHBvc2luZyBhcyBzZXJ2aWNlLgogICAgICAqLwotICAgIHByaXZhdGUgYm9vbGVhbiBpc3ZhbGlkQmVhbkZvclNlcnZpY2UoU3ByaW5nQmVhbkVsZW1lbnQgYmVhbkVsZW1lbnQpIHsKLSAgICAJCi0gICAgCWlmIChiZWFuRWxlbWVudC5pc0lubmVyQmVhbigpKQotICAgIAkJcmV0dXJuIGZhbHNlOwotICAgIAlpZiAoYmVhbkVsZW1lbnQuaGFzUGFyZW50QXR0cmlidXRlKCkpCi0gICAgCQlyZXR1cm4gZmFsc2U7Ci0gICAgCWlmIChiZWFuRWxlbWVudC5oYXNGYWN0b3J5TWV0aG9kQXR0cmlidXRlKCkpCi0gICAgCQlyZXR1cm4gZmFsc2U7Ci0gICAgCWlmIChiZWFuRWxlbWVudC5oYXNGYWN0b3J5QmVhbkF0dHJpYnV0ZSgpKQotICAgIAkJcmV0dXJuIGZhbHNlOwotICAgIAlpZiAoYmVhbkVsZW1lbnQuZ2V0Q2xhc3NOYW1lKCkgPT0gbnVsbCkKLSAgICAJCXJldHVybiBmYWxzZTsKLSAgICAJaWYgKGJlYW5FbGVtZW50LmdldENsYXNzTmFtZSgpLnN0YXJ0c1dpdGgoIm9yZy5zcHJpbmdmcmFtZXdvcmsiKSkKLSAgICAJCXJldHVybiBmYWxzZTsKKyAgICBwcml2YXRlIGJvb2xlYW4gaXNWYWxpZEJlYW5Gb3JTZXJ2aWNlKFNwcmluZ0JlYW5FbGVtZW50IGJlYW5FbGVtZW50KSB7CisKKyAgICAgICAgaWYgKGJlYW5FbGVtZW50LmlzSW5uZXJCZWFuKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChiZWFuRWxlbWVudC5oYXNQYXJlbnRBdHRyaWJ1dGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGJlYW5FbGVtZW50Lmhhc0ZhY3RvcnlNZXRob2RBdHRyaWJ1dGUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKGJlYW5FbGVtZW50Lmhhc0ZhY3RvcnlCZWFuQXR0cmlidXRlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChiZWFuRWxlbWVudC5nZXRDbGFzc05hbWUoKSA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoYmVhbkVsZW1lbnQuZ2V0Q2xhc3NOYW1lKCkuc3RhcnRzV2l0aCgib3JnLnNwcmluZ2ZyYW1ld29yayIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAvLyByZXR1cm4gdHJ1ZSBvdGhlcndpc2UJCi0gICAgCXJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCi0gICAgCisKICAgICAvKioKICAgICAgKiBHZXRzIGhvbGQgb2YgdGhlIGFwcGxpY2F0aW9uLWNvbnRleHQueG1sIGZpbGUgYXMgYSBTcHJpbmcgcmVzb3VyY2UKICAgICAgKiBAcGFyYW0gbG9jYXRpb25BdHRyIC0gdGhlIGxvY2F0aW9uIGF0dHJpYnV0ZSBmcm9tIHRoZSA8aW1wbGVtZW50YXRpb24uc3ByaW5nLi4vPiBlbGVtZW50CiAgICAgICogQHBhcmFtIGNsIC0gdGhlIENsYXNzTG9hZGVyIGZvciB0aGUgU3ByaW5nIGltcGxlbWVudGF0aW9uCiAgICAgICovCi0gICAgcHJvdGVjdGVkIExpc3Q8VVJMPiBnZXRBcHBsaWNhdGlvbkNvbnRleHRSZXNvdXJjZShVUkwgdXJsKQotICAgICAgICB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7CisgICAgcHJvdGVjdGVkIExpc3Q8VVJMPiBnZXRBcHBsaWNhdGlvbkNvbnRleHRSZXNvdXJjZShVUkwgdXJsKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiB7CiAgICAgICAgIEZpbGUgbWFuaWZlc3RGaWxlID0gbnVsbDsKICAgICAgICAgRmlsZSBhcHBYbWxGaWxlOwogICAgICAgICBGaWxlIGFwcFhtbEZvbGRlcjsKICAgICAgICAgRmlsZSBsb2NhdGlvbkZpbGUgPSBudWxsOwogICAgICAgICBMaXN0PFVSTD4gYXBwQ3R4UmVzb3VyY2VzID0gbmV3IEFycmF5TGlzdDxVUkw+KCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICh1cmwgIT0gbnVsbCkgewogICAgICAgICAgICAgU3RyaW5nIHBhdGggPSB1cmwuZ2V0UGF0aCgpOwogICAgICAgICAgICAgbG9jYXRpb25GaWxlID0gbmV3IEZpbGUocGF0aCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbigiU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlciBnZXRBcHBsaWNhdGlvbkNvbnRleHRSZXNvdXJjZTogIiAKLSAgICAgICAgICAgIAkJICAgICAgICAgICAgICArICJ1bmFibGUgdG8gZmluZCByZXNvdXJjZSBmaWxlICIgKyB1cmwpOworICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlciBnZXRBcHBsaWNhdGlvbkNvbnRleHRSZXNvdXJjZTogIiArICJ1bmFibGUgdG8gZmluZCByZXNvdXJjZSBmaWxlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHVybCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobG9jYXRpb25GaWxlLmlzRGlyZWN0b3J5KCkpIHsKICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgbWFuaWZlc3RGaWxlID0gbmV3IEZpbGUobG9jYXRpb25GaWxlLCAiTUVUQS1JTkYiKyBGaWxlLnNlcGFyYXRvciArIk1BTklGRVNULk1GIik7CisgICAgICAgICAgICAgICAgbWFuaWZlc3RGaWxlID0gbmV3IEZpbGUobG9jYXRpb25GaWxlLCAiTUVUQS1JTkYiICsgRmlsZS5zZXBhcmF0b3IgKyAiTUFOSUZFU1QuTUYiKTsKICAgICAgICAgICAgICAgICBpZiAobWFuaWZlc3RGaWxlLmV4aXN0cygpKSB7CiAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0IG1mID0gbmV3IE1hbmlmZXN0KG5ldyBGaWxlSW5wdXRTdHJlYW0obWFuaWZlc3RGaWxlKSk7CiAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMgbWFpbkF0dHJzID0gbWYuZ2V0TWFpbkF0dHJpYnV0ZXMoKTsKICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFwcEN0eFBhdGggPSBtYWluQXR0cnMuZ2V0VmFsdWUoIlNwcmluZy1Db250ZXh0Iik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBDdHhQYXRoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgCVN0cmluZ1tdIGN4dFBhdGhzID0gYXBwQ3R4UGF0aC5zcGxpdCgiOyIpOwotCSAgICAgICAgICAgIAkJZm9yIChTdHJpbmcgcGF0aCA6IGN4dFBhdGhzKSB7Ci0JICAgICAgICAgICAgCQkJYXBwWG1sRmlsZSA9IG5ldyBGaWxlKGxvY2F0aW9uRmlsZSwgcGF0aC50cmltKCkpOwotCSAgICAgICAgICAgIAkJCWlmIChhcHBYbWxGaWxlLmV4aXN0cygpKSB7Ci0JICAgICAgICAgICAgCQkJCWFwcEN0eFJlc291cmNlcy5hZGQoYXBwWG1sRmlsZS50b1VSSSgpLnRvVVJMKCkpOwotCSAgICAgICAgICAgIAkJCX0KLQkgICAgICAgICAgICAJCX0KLQkgICAgICAgICAgICAJCXJldHVybiBhcHBDdHhSZXNvdXJjZXM7CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdbXSBjeHRQYXRocyA9IGFwcEN0eFBhdGguc3BsaXQoIjsiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHBhdGggOiBjeHRQYXRocykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFhtbEZpbGUgPSBuZXcgRmlsZShsb2NhdGlvbkZpbGUsIHBhdGgudHJpbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwWG1sRmlsZS5leGlzdHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBDdHhSZXNvdXJjZXMuYWRkKGFwcFhtbEZpbGUudG9VUkkoKS50b1VSTCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwQ3R4UmVzb3VyY2VzOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gTm8gTUFOSUZFU1QuTUYgZmlsZSBPUiBubyBtYW5pZmVzdC1zcGVjaWZpZWQgU3ByaW5nIGNvbnRleHQgLCB0aGVuIHJlYWQgYWxsIHRoZSAKICAgICAgICAgICAgICAgICAvLyB4bWwgZmlsZXMgYXZhaWxhYmxlIGluIHRoZSBNRVRBLUlORi9zcHJpbmcgZm9sZGVyLgogICAgICAgICAgICAgICAgIGFwcFhtbEZvbGRlciA9IG5ldyBGaWxlKGxvY2F0aW9uRmlsZSwgIk1FVEEtSU5GIiArIEZpbGUuc2VwYXJhdG9yICsgInNwcmluZyIpOwogICAgICAgICAgICAgICAgIGlmIChhcHBYbWxGb2xkZXIuZXhpc3RzKCkpIHsKLSAgICAgICAgICAgICAgICAJRmlsZVtdIGZpbGVzID0gYXBwWG1sRm9sZGVyLmxpc3RGaWxlcygpOwotICAgICAgICAgICAgICAgIAlmb3IgKEZpbGUgYXBwRmlsZTogZmlsZXMpIHsKLSAgICAgICAgICAgICAgICAJCWlmIChhcHBGaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiLnhtbCIpKSB7Ci0gICAgICAgICAgICAgICAgCQkJYXBwQ3R4UmVzb3VyY2VzLmFkZChhcHBGaWxlLnRvVVJJKCkudG9VUkwoKSk7Ci0gICAgICAgICAgICAgICAgCQl9Ci0gICAgICAgICAgICAgICAgCX0KLSAgICAgICAgICAgICAgICAJcmV0dXJuIGFwcEN0eFJlc291cmNlczsKKyAgICAgICAgICAgICAgICAgICAgRmlsZVtdIGZpbGVzID0gYXBwWG1sRm9sZGVyLmxpc3RGaWxlcygpOworICAgICAgICAgICAgICAgICAgICBmb3IgKEZpbGUgYXBwRmlsZSA6IGZpbGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwRmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIi54bWwiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcEN0eFJlc291cmNlcy5hZGQoYXBwRmlsZS50b1VSSSgpLnRvVVJMKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHBDdHhSZXNvdXJjZXM7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgICAgIHRocm93IG5ldyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uKCJFcnJvciByZWFkaW5nIG1hbmlmZXN0ICIgKyBtYW5pZmVzdEZpbGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAJaWYgKGxvY2F0aW9uRmlsZS5pc0ZpbGUoKSAmJiBsb2NhdGlvbkZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIuamFyIikpIHsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbkZpbGUuaXNGaWxlKCkgJiYgbG9jYXRpb25GaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiLmphciIpKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgSmFyRmlsZSBqZiA9IG5ldyBKYXJGaWxlKGxvY2F0aW9uRmlsZSk7ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgSmFyRmlsZSBqZiA9IG5ldyBKYXJGaWxlKGxvY2F0aW9uRmlsZSk7CiAgICAgICAgICAgICAgICAgICAgIEphckVudHJ5IGplOwogICAgICAgICAgICAgICAgICAgICBNYW5pZmVzdCBtZiA9IGpmLmdldE1hbmlmZXN0KCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChtZiAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVzIG1haW5BdHRycyA9IG1mLmdldE1haW5BdHRyaWJ1dGVzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgYXBwQ3R4UGF0aCA9IG1haW5BdHRycy5nZXRWYWx1ZSgiU3ByaW5nLUNvbnRleHQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBDdHhQYXRoICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlTdHJpbmdbXSBjeHRQYXRocyA9IGFwcEN0eFBhdGguc3BsaXQoIjsiKTsKLSAgICAJICAgICAgICAgICAgCQlmb3IgKFN0cmluZyBwYXRoIDogY3h0UGF0aHMpIHsKLSAgICAJICAgICAgICAgICAgCQkJamUgPSBqZi5nZXRKYXJFbnRyeShwYXRoLnRyaW0oKSk7Ci0gICAgCSAgICAgICAgICAgIAkJCWlmIChqZSAhPSBudWxsKQotICAgIAkgICAgICAgICAgICAJCQkJYXBwQ3R4UmVzb3VyY2VzLmFkZChuZXcgVVJMKCJqYXI6IiArIGxvY2F0aW9uRmlsZS50b1VSSSgpLnRvVVJMKCkgKyAiIS8iICsgYXBwQ3R4UGF0aCkpOwotICAgIAkgICAgICAgICAgICAJCX0KLSAgICAJICAgICAgICAgICAgCQlyZXR1cm4gYXBwQ3R4UmVzb3VyY2VzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGN4dFBhdGhzID0gYXBwQ3R4UGF0aC5zcGxpdCgiOyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIHBhdGggOiBjeHRQYXRocykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZSA9IGpmLmdldEphckVudHJ5KHBhdGgudHJpbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGplICE9IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBDdHhSZXNvdXJjZXMuYWRkKG5ldyBVUkwoImphcjoiICsgbG9jYXRpb25GaWxlLnRvVVJJKCkudG9VUkwoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiEvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgYXBwQ3R4UGF0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwQ3R4UmVzb3VyY2VzOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIC8vIE5vIE1BTklGRVNULk1GIGZpbGUgT1Igbm8gbWFuaWZlc3Qtc3BlY2lmaWVkIFNwcmluZyBjb250ZXh0ICwgdGhlbiByZWFkIGFsbCB0aGUgCiAgICAgICAgICAgICAgICAgICAgIC8vIC54bWwgZmlsZXMgYXZhaWxhYmxlIGluIHRoZSBNRVRBLUlORi9zcHJpbmcgZm9sZGVyLgogICAgICAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbjxKYXJFbnRyeT4gZW50cmllcyA9IGpmLmVudHJpZXMoKTsKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgCWplID0gZW50cmllcy5uZXh0RWxlbWVudCgpOwotICAgICAgICAgICAgICAgICAgICAJaWYgKGplLmdldE5hbWUoKS5zdGFydHNXaXRoKCJNRVRBLUlORi9zcHJpbmcvIikgJiYgamUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIueG1sIikpIHsKLSAgICAgICAgICAgICAgICAgICAgCQlhcHBDdHhSZXNvdXJjZXMuYWRkKG5ldyBVUkwoImphcjoiICsgbG9jYXRpb25GaWxlLnRvVVJJKCkudG9VUkwoKSArICIhLyIgKyBqZS5nZXROYW1lKCkpKTsKLSAgICAgICAgICAgICAgICAgICAgCX0KKyAgICAgICAgICAgICAgICAgICAgICAgIGplID0gZW50cmllcy5uZXh0RWxlbWVudCgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGplLmdldE5hbWUoKS5zdGFydHNXaXRoKCJNRVRBLUlORi9zcHJpbmcvIikgJiYgamUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIueG1sIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBDdHhSZXNvdXJjZXMuYWRkKG5ldyBVUkwoImphcjoiICsgbG9jYXRpb25GaWxlLnRvVVJJKCkudG9VUkwoKSArICIhLyIgKyBqZS5nZXROYW1lKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwQ3R4UmVzb3VyY2VzOwogICAgICAgICAgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogY3JlYXRlIGEgbW9yZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gdHlwZQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbigiU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlciBnZXRBcHBsaWNhdGlvbkNvbnRleHRSZXNvdXJjZTogIgotICAgICAgICAgICAgICAgICAgICAJCQkJCQkJCQkJCQkrICIgSU8gZXhjZXB0aW9uIHJlYWRpbmcgY29udGV4dCBmaWxlLiIsIGUpOworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNwcmluZ1hNTENvbXBvbmVudFR5cGVMb2FkZXIgZ2V0QXBwbGljYXRpb25Db250ZXh0UmVzb3VyY2U6ICIgKyAiIElPIGV4Y2VwdGlvbiByZWFkaW5nIGNvbnRleHQgZmlsZS4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIAl9Ci0gICAgICAgIAllbHNlIHsKLSAgICAgICAgCQlpZiAobG9jYXRpb25GaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiLnhtbCIpKSB7Ci0gICAgICAgIAkJCWFwcEN0eFJlc291cmNlcy5hZGQodXJsKTsKLSAgICAgICAgICAgICAgICAJcmV0dXJuIGFwcEN0eFJlc291cmNlczsKLSAgICAgICAgCQl9Ci0gICAgICAgIAkJZWxzZSB7Ci0gICAgICAgIAkJCS8vIERlYWwgd2l0aCB0aGUgZGlyZWN0b3J5IGluc2lkZSBhIGphciBmaWxlLCBpbiBjYXNlIHRoZSBjb250cmlidXRpb24gaXRzZWxmIGlzIGEgSkFSIGZpbGUuCi0gICAgICAgIAkJCXRyeSB7Ci0JICAgICAgICAJCQlpZiAobG9jYXRpb25GaWxlLmdldFBhdGgoKS5pbmRleE9mKCIuamFyIikgPiAwKSB7Ci0JICAgICAgICAJCQkJU3RyaW5nIGphclBhdGggPSB1cmwuZ2V0UGF0aCgpLnN1YnN0cmluZyg1LCB1cmwuZ2V0UGF0aCgpLmluZGV4T2YoIiEiKSk7Ci0JICAgICAgICAJCQkJSmFyRmlsZSBqZiA9IG5ldyBKYXJGaWxlKGphclBhdGgpOwotCSAgICAgICAgCQkJCUphckVudHJ5IGplID0gamYuZ2V0SmFyRW50cnkodXJsLmdldFBhdGgoKS5zdWJzdHJpbmcodXJsLmdldFBhdGgoKS5pbmRleE9mKCIhLyIpKzIpCi0JICAgICAgICAJCQkJCQkJCQkJCQkrICIvIiArICJNRVRBLUlORiIgKyAiLyIgKyAiTUFOSUZFU1QuTUYiKTsKLQkgICAgICAgIAkJCSAgICBpZiAoamUgIT0gbnVsbCkgewotCSAgICAgICAgCQkJCQlNYW5pZmVzdCBtZiA9IG5ldyBNYW5pZmVzdChqZi5nZXRJbnB1dFN0cmVhbShqZSkpOwotCSAgICAgICAgCQkJCQlBdHRyaWJ1dGVzIG1haW5BdHRycyA9IG1mLmdldE1haW5BdHRyaWJ1dGVzKCk7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBhcHBDdHhQYXRoID0gbWFpbkF0dHJzLmdldFZhbHVlKCJTcHJpbmctQ29udGV4dCIpOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwQ3R4UGF0aCAhPSBudWxsKSB7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIAlTdHJpbmdbXSBjeHRQYXRocyA9IGFwcEN0eFBhdGguc3BsaXQoIjsiKTsKLQkgICAgICAgIAkgICAgICAgICAgICAJCWZvciAoU3RyaW5nIHBhdGggOiBjeHRQYXRocykgewotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGplID0gamYuZ2V0SmFyRW50cnkodXJsLmdldFBhdGgoKS5zdWJzdHJpbmcodXJsLmdldFBhdGgoKS5pbmRleE9mKCIhLyIpKzIpICsgIi8iICsgcGF0aC50cmltKCkpOwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqZSAhPSBudWxsKSB7Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCWFwcEN0eFJlc291cmNlcy5hZGQobmV3IFVSTCgiamFyOiIgKyB1cmwuZ2V0UGF0aCgpICsgIi8iICsgcGF0aC50cmltKCkpKTsJCSAgICAJICAgICAgICAgICAgICAgICAgICAgICAgCQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgIAkgICAgICAgICAgICAJCX0KLQkgICAgICAgIAkgICAgICAgICAgICAJCXJldHVybiBhcHBDdHhSZXNvdXJjZXM7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQkgICAgICAgIAkJCQl9CSAgICAgICAgCQkJICAgIAotCSAgICAgICAgCQkJICAgIC8vIE5vIE1BTklGRVNULk1GIGZpbGUgT1Igbm8gbWFuaWZlc3Qtc3BlY2lmaWVkIFNwcmluZyBjb250ZXh0ICwgdGhlbiByZWFkIGFsbCB0aGUgCi0JICAgICAgICAgICAgICAgICAgICAgICAgLy8gLnhtbCBmaWxlcyBhdmFpbGFibGUgaW4gdGhlIE1FVEEtSU5GL3NwcmluZyBmb2xkZXIuCi0JICAgICAgICAJCQkgICAgRW51bWVyYXRpb248SmFyRW50cnk+IGVudHJpZXMgPSBqZi5lbnRyaWVzKCk7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVudHJpZXMuaGFzTW9yZUVsZW1lbnRzKCkpIHsKLQkgICAgICAgICAgICAgICAgICAgICAgICAJamUgPSBlbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgCWlmIChqZS5nZXROYW1lKCkuc3RhcnRzV2l0aCgiTUVUQS1JTkYvc3ByaW5nLyIpICYmIGplLmdldE5hbWUoKS5lbmRzV2l0aCgiLnhtbCIpKSB7Ci0JICAgICAgICAgICAgICAgICAgICAgICAgCQlhcHBDdHhSZXNvdXJjZXMuYWRkKG5ldyBVUkwoImphcjoiICsgdXJsLmdldFBhdGgoKSArICIvIiArIGplLmdldE5hbWUoKSkpOwotCSAgICAgICAgICAgICAgICAgICAgICAgIAl9Ci0JICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYXRpb25GaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiLnhtbCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcEN0eFJlc291cmNlcy5hZGQodXJsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcEN0eFJlc291cmNlczsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBEZWFsIHdpdGggdGhlIGRpcmVjdG9yeSBpbnNpZGUgYSBqYXIgZmlsZSwgaW4gY2FzZSB0aGUgY29udHJpYnV0aW9uIGl0c2VsZiBpcyBhIEpBUiBmaWxlLgorICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2F0aW9uRmlsZS5nZXRQYXRoKCkuaW5kZXhPZigiLmphciIpID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBqYXJQYXRoID0gdXJsLmdldFBhdGgoKS5zdWJzdHJpbmcoNSwgdXJsLmdldFBhdGgoKS5pbmRleE9mKCIhIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIEphckZpbGUgamYgPSBuZXcgSmFyRmlsZShqYXJQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYXJFbnRyeSBqZSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpmLmdldEphckVudHJ5KHVybC5nZXRQYXRoKCkuc3Vic3RyaW5nKHVybC5nZXRQYXRoKCkuaW5kZXhPZigiIS8iKSArIDIpICsgIi8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJNRVRBLUlORiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIi8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArICJNQU5JRkVTVC5NRiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqZSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hbmlmZXN0IG1mID0gbmV3IE1hbmlmZXN0KGpmLmdldElucHV0U3RyZWFtKGplKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXMgbWFpbkF0dHJzID0gbWYuZ2V0TWFpbkF0dHJpYnV0ZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGFwcEN0eFBhdGggPSBtYWluQXR0cnMuZ2V0VmFsdWUoIlNwcmluZy1Db250ZXh0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBDdHhQYXRoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZ1tdIGN4dFBhdGhzID0gYXBwQ3R4UGF0aC5zcGxpdCgiOyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgcGF0aCA6IGN4dFBhdGhzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamUgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZi5nZXRKYXJFbnRyeSh1cmwuZ2V0UGF0aCgpLnN1YnN0cmluZyh1cmwuZ2V0UGF0aCgpLmluZGV4T2YoIiEvIikgKyAyKSArICIvIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBwYXRoLnRyaW0oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGplICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwQ3R4UmVzb3VyY2VzLmFkZChuZXcgVVJMKCJqYXI6IiArIHVybC5nZXRQYXRoKCkgKyAiLyIgKyBwYXRoLnRyaW0oKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHBDdHhSZXNvdXJjZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm8gTUFOSUZFU1QuTUYgZmlsZSBPUiBubyBtYW5pZmVzdC1zcGVjaWZpZWQgU3ByaW5nIGNvbnRleHQgLCB0aGVuIHJlYWQgYWxsIHRoZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAueG1sIGZpbGVzIGF2YWlsYWJsZSBpbiB0aGUgTUVUQS1JTkYvc3ByaW5nIGZvbGRlci4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtZXJhdGlvbjxKYXJFbnRyeT4gZW50cmllcyA9IGpmLmVudHJpZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqZSA9IGVudHJpZXMubmV4dEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGplLmdldE5hbWUoKS5zdGFydHNXaXRoKCJNRVRBLUlORi9zcHJpbmcvIikgJiYgamUuZ2V0TmFtZSgpLmVuZHNXaXRoKCIueG1sIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcEN0eFJlc291cmNlcy5hZGQobmV3IFVSTCgiamFyOiIgKyB1cmwuZ2V0UGF0aCgpICsgIi8iICsgamUuZ2V0TmFtZSgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcEN0eFJlc291cmNlczsKLQkgICAgICAgIAkJCX0KLSAgICAgICAgICAgIAkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbigiRXJyb3IgcmVhZGluZyBtYW5pZmVzdCAiICsgbWFuaWZlc3RGaWxlKTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAJCX0KLSAgICAgICAgCX0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbigiU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlciBnZXRBcHBsaWNhdGlvbkNvbnRleHRSZXNvdXJjZTogIgotICAgICAgICAJCQkJCQkJCQkJCQkJCQkJKyAidW5hYmxlIHRvIHJlYWQgcmVzb3VyY2UgZmlsZSAiICsgdXJsKTsKKyAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTcHJpbmdYTUxDb21wb25lbnRUeXBlTG9hZGVyIGdldEFwcGxpY2F0aW9uQ29udGV4dFJlc291cmNlOiAiICsgInVuYWJsZSB0byByZWFkIHJlc291cmNlIGZpbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyB1cmwpOwogICAgIH0gLy8gZW5kIG1ldGhvZCBnZXRBcHBsaWNhdGlvbkNvbnRleHRSZXNvdXJjZQogCiAgICAgLyoqCkBAIC0xMTE0LDQwICs5NTEsNDAgQEAKIAogICAgICAgICByZXR1cm4gcmVmZXJlbmNlOwogICAgIH0KLSAgICAKLSAgICBwcml2YXRlIGNsYXNzIENvbnRleHRDbGFzc0xvYWRlciBleHRlbmRzIENsYXNzTG9hZGVyIHsKLSAgICAJcHVibGljIENvbnRleHRDbGFzc0xvYWRlcihNb2RlbFJlc29sdmVyIHJlc29sdmVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHsKLSAgICAJCXN1cGVyKCk7Ci0gICAgCQl0aGlzLnJlc29sdmVyID0gcmVzb2x2ZXI7Ci0gICAgCQl0aGlzLmNvbnRleHQgPSBjb250ZXh0OwotICAgIAl9CiAKLQkJcHJpdmF0ZSBNb2RlbFJlc29sdmVyIHJlc29sdmVyOwotCQlwcml2YXRlIFByb2Nlc3NvckNvbnRleHQgY29udGV4dDsKLQkJCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgQ2xhc3M8Pz4gZmluZENsYXNzKFN0cmluZyBuYW1lKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7Ci0JCQlyZXR1cm4gU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlci50aGlzLnJlc29sdmVDbGFzcyhyZXNvbHZlciwgbmFtZSwgY29udGV4dCk7Ci0JCX0KLQkJCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgVVJMIGZpbmRSZXNvdXJjZShTdHJpbmcgbmFtZSkgewotCQkJdHJ5IHsKLQkJCQlyZXR1cm4gcmVzb2x2ZUxvY2F0aW9uKHJlc29sdmVyLCBuYW1lLCBjb250ZXh0KTsKLQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJcmV0dXJuIG51bGw7Ci0JCQl9Ci0JCX0KLQkJCi0JCUBPdmVycmlkZQotCQlwcm90ZWN0ZWQgRW51bWVyYXRpb248VVJMPiBmaW5kUmVzb3VyY2VzKFN0cmluZyBuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkJVVJMIHVybCA9IGZpbmRSZXNvdXJjZShuYW1lKTsKLQkJCWlmICh1cmwgIT0gbnVsbCkgewotCQkJCXJldHVybiBDb2xsZWN0aW9ucy5lbnVtZXJhdGlvbihBcnJheXMuYXNMaXN0KHVybCkpOwotCQkJfSBlbHNlIHsKLQkJCQlDb2xsZWN0aW9uPFVSTD4gdXJscyA9IENvbGxlY3Rpb25zLmVtcHR5TGlzdCgpOwotCQkJCXJldHVybiBDb2xsZWN0aW9ucy5lbnVtZXJhdGlvbih1cmxzKTsKLQkJCX0KLQkJfQorICAgIHByaXZhdGUgY2xhc3MgQ29udGV4dENsYXNzTG9hZGVyIGV4dGVuZHMgQ2xhc3NMb2FkZXIgeworICAgICAgICBwdWJsaWMgQ29udGV4dENsYXNzTG9hZGVyKE1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkgeworICAgICAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgICAgIHRoaXMucmVzb2x2ZXIgPSByZXNvbHZlcjsKKyAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7CisgICAgICAgIH0KKworICAgICAgICBwcml2YXRlIE1vZGVsUmVzb2x2ZXIgcmVzb2x2ZXI7CisgICAgICAgIHByaXZhdGUgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0OworCisgICAgICAgIEBPdmVycmlkZQorICAgICAgICBwcm90ZWN0ZWQgQ2xhc3M8Pz4gZmluZENsYXNzKFN0cmluZyBuYW1lKSB0aHJvd3MgQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiB7CisgICAgICAgICAgICByZXR1cm4gU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlci50aGlzLnJlc29sdmVDbGFzcyhyZXNvbHZlciwgbmFtZSwgY29udGV4dCk7CisgICAgICAgIH0KKworICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgcHJvdGVjdGVkIFVSTCBmaW5kUmVzb3VyY2UoU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmVMb2NhdGlvbihyZXNvbHZlciwgbmFtZSwgY29udGV4dCk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQE92ZXJyaWRlCisgICAgICAgIHByb3RlY3RlZCBFbnVtZXJhdGlvbjxVUkw+IGZpbmRSZXNvdXJjZXMoU3RyaW5nIG5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgICAgICBVUkwgdXJsID0gZmluZFJlc291cmNlKG5hbWUpOworICAgICAgICAgICAgaWYgKHVybCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVudW1lcmF0aW9uKEFycmF5cy5hc0xpc3QodXJsKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIENvbGxlY3Rpb248VVJMPiB1cmxzID0gQ29sbGVjdGlvbnMuZW1wdHlMaXN0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENvbGxlY3Rpb25zLmVudW1lcmF0aW9uKHVybHMpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQotfSAvLyBlbmQgY2xhc3MgU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30gLy8gZW5kIGNsYXNzIFNwcmluZ1hNTENvbXBvbmVudFR5cGVMb2FkZXIKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW52b2NhdGlvbi9Db21wb25lbnRUaWUuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW52b2NhdGlvbi9Db21wb25lbnRUaWUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk3YzAyZC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2ludm9jYXRpb24vQ29tcG9uZW50VGllLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmludm9jYXRpb247Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgVHVzY2FueSBzaWRlIHRpZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgU3ByaW5nIHJ1bnRpbWUgc2lkZSBzdHViIGNsYXNzLgotICogSXQgZW5hYmxlcyB0aGUgVHVzY2FueSBjb2RlIHRvIGludm9rZSBtZXRob2RzIG9uIGEgU3ByaW5nIGNvbnRleHQgd2l0aG91dAotICogbmVlZGluZyB0byBrbm93IGFib3V0IGFueSBTcHJpbmcgY2xhc3Nlcy4gU2VlIHRoZSBDb21wb25lbnRTdHViIGNsYXNzCi0gKiBpbiB0aGUgaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWUgbW9kdWxlIGZvciB3aGF0IHRoZSBzdHViIGRvZXMuIAotICovCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBDb21wb25lbnRUaWUgewotCi0gICAgcHJpdmF0ZSBSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudDsKLSAgICAKLSAgICBwdWJsaWMgQ29tcG9uZW50VGllKFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50KSB7Ci0gICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50OwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0U2VydmljZShDbGFzczw/PiB0eXBlLCBTdHJpbmcgbmFtZSkgewotICAgICAgICByZXR1cm4gY29tcG9uZW50LmdldENvbXBvbmVudENvbnRleHQoKS5nZXRTZXJ2aWNlKHR5cGUsIG5hbWUpOwotICAgIH0KLX0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW52b2NhdGlvbi9Qcm9wZXJ0eVZhbHVlVGllLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2ludm9jYXRpb24vUHJvcGVydHlWYWx1ZVRpZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWQxNDk2Li4wMDAwMDAwCi0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW52b2NhdGlvbi9Qcm9wZXJ0eVZhbHVlVGllLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmludm9jYXRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9uZW50UHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmluamVjdGlvbi5KYXZhUHJvcGVydHlWYWx1ZU9iamVjdEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgVHVzY2FueSBzaWRlIHRpZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgU3ByaW5nIHJ1bnRpbWUgc2lkZSBzdHViIGNsYXNzLgotICogSXQgZW5hYmxlcyB0aGUgVHVzY2FueSBjb2RlIHRvIGludm9rZSBtZXRob2RzIG9uIGEgU3ByaW5nIGNvbnRleHQgd2l0aG91dAotICogbmVlZGluZyB0byBrbm93IGFib3V0IGFueSBTcHJpbmcgY2xhc3Nlcy4gU2VlIHRoZSBQcm9wZXJ0eVZhbHVlU3R1YiBjbGFzcwotICogaW4gdGhlIGltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lIG1vZHVsZSBmb3Igd2hhdCB0aGUgc3R1YiBkb2VzLiAKLSAqLwotcHVibGljIGNsYXNzIFByb3BlcnR5VmFsdWVUaWUgewotCi0gICAgcHJpdmF0ZSBSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudDsKLSAgICBwcml2YXRlIEphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSBwcm9wZXJ0eUZhY3Rvcnk7Ci0gICAgCi0gICAgcHVibGljIFByb3BlcnR5VmFsdWVUaWUoUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQsIEphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSBwcm9wZXJ0eUZhY3RvcnkpIHsKLSAgICAgICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7Ci0gICAgICAgIHRoaXMucHJvcGVydHlGYWN0b3J5ID0gcHJvcGVydHlGYWN0b3J5OwotICAgIH0KLQotICAgIHB1YmxpYyBPYmplY3QgZ2V0UHJvcGVydHlPYmooQ2xhc3M8Pz4gdHlwZSwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgTGlzdDxDb21wb25lbnRQcm9wZXJ0eT4gcHJvcHMgPSBjb21wb25lbnQuZ2V0UHJvcGVydGllcygpOwotICAgICAgICBmb3IgKENvbXBvbmVudFByb3BlcnR5IHByb3AgOiBwcm9wcykgewotICAgICAgICAgICAgaWYgKHByb3AuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eUZhY3RvcnkuY3JlYXRlVmFsdWVGYWN0b3J5KHByb3AsIHByb3AuZ2V0VmFsdWUoKSwgdHlwZSkuZ2V0SW5zdGFuY2UoKTsKLSAgICAgICAgICAgIH0gCi0gICAgICAgIH0gICAgICAgICAKLSAgICAgICAgcmV0dXJuIG51bGw7IC8vIHByb3BlcnR5IG5hbWUgbm90IGZvdW5kCi0gICAgfQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnZvY2F0aW9uL1NwcmluZ0NvbnRleHRTdHViLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2ludm9jYXRpb24vU3ByaW5nQ29udGV4dFN0dWIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGNiOWE1My4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2ludm9jYXRpb24vU3ByaW5nQ29udGV4dFN0dWIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmludm9jYXRpb247Ci0KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5Db25zdHJ1Y3RvcjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5pbnZvY2F0aW9uLlByb3h5RmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW5qZWN0aW9uLkphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudDsKLQotLyoqCi0gKiBUaGlzIGlzIHRoZSBUdXNjYW55IHNpZGUgc3R1YiBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcnVudGltZSB0aWUgY2xhc3MuCi0gKiBJdCBlbmFibGVzIHRoZSBUdXNjYW55IGNvZGUgdG8gaW52b2tlIG1ldGhvZHMgb24gYSBTcHJpbmcgY29udGV4dCB3aXRob3V0Ci0gKiBuZWVkaW5nIHRvIGtub3cgYWJvdXQgYW55IFNwcmluZyBjbGFzc2VzLiBTZWUgdGhlIFNwcmluZ0NvbnRleHRUaWUgY2xhc3MKLSAqIGluIHRoZSBpbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZSBtb2R1bGUgZm9yIHdoYXQgdGhlIHRpZSBkb2VzLiAKLSAqLwotcHVibGljIGNsYXNzIFNwcmluZ0NvbnRleHRTdHViIHsKLQotICAgIHByaXZhdGUgT2JqZWN0IHRpZTsKLSAgICBwcml2YXRlIE1ldGhvZCBzdGFydE1ldGhvZDsKLSAgICBwcml2YXRlIE1ldGhvZCBjbG9zZU1ldGhvZDsKLSAgICBwcml2YXRlIE1ldGhvZCBnZXRCZWFuTWV0aG9kOwotCi0gICAgcHVibGljIFNwcmluZ0NvbnRleHRTdHViKFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwcmluZ0ltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb3h5RmFjdG9yeSBwcm94eVNlcnZpY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSmF2YVByb3BlcnR5VmFsdWVPYmplY3RGYWN0b3J5IHByb3BlcnR5VmFsdWVPYmplY3RGYWN0b3J5KSB7Ci0KLSAgICAgICAgaW5pdFRpZShjb21wb25lbnQsIGltcGxlbWVudGF0aW9uLCBwcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSk7ICAgICAgICAKLQotICAgIH0KLQotICAgIHByaXZhdGUgdm9pZCBpbml0VGllKFJ1bnRpbWVDb21wb25lbnQgY29tcG9uZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgIFNwcmluZ0ltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgIEphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSBwcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSkgewotCi0gICAgICAgIC8vIFRPRE86IHdoYXQgY2xhc3MgbG9hZGVyIHRvIHVzZT8KLSAgICAgICAgQ2xhc3NMb2FkZXIgY2wgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOwotCi0gICAgICAgIHRyeSB7Ci0KLSAgICAgICAgICAgIENsYXNzPD8+IHN0dWJDbGFzcyA9IENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLnJ1bnRpbWUuY29udGV4dC5TcHJpbmdJbXBsZW1lbnRhdGlvblN0dWIiLCB0cnVlLCBjbCk7Ci0gICAgICAgICAgICBDb25zdHJ1Y3Rvcjw/PiBzdHViQ29uc3RydWN0b3IgPSBzdHViQ2xhc3MuZ2V0Q29uc3RydWN0b3IobmV3IENsYXNzPD8+W117T2JqZWN0LmNsYXNzfSk7Ci0gICAgICAgICAgICBPYmplY3Qgc3R1YiA9IHN0dWJDb25zdHJ1Y3Rvci5uZXdJbnN0YW5jZShuZXcgU3ByaW5nSW1wbGVtZW50YXRpb25UaWUoaW1wbGVtZW50YXRpb24sIGNvbXBvbmVudCwgcHJvcGVydHlWYWx1ZU9iamVjdEZhY3RvcnkpKTsKLQotICAgICAgICAgICAgQ2xhc3M8Pz4gdGllQ2xhc3MgPSBDbGFzcy5mb3JOYW1lKCJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5ydW50aW1lLmNvbnRleHQuU3ByaW5nQ29udGV4dFRpZSIsIHRydWUsIGNsKTsKLSAgICAgICAgICAgIENvbnN0cnVjdG9yPD8+IHRpZUNvbnN0cnVjdG9yID0gdGllQ2xhc3MuZ2V0Q29uc3RydWN0b3IobmV3IENsYXNzPD8+W117c3R1YkNsYXNzLCBMaXN0LmNsYXNzfSk7Ci0gICAgICAgICAgICB0aGlzLnRpZSA9IHRpZUNvbnN0cnVjdG9yLm5ld0luc3RhbmNlKHN0dWIsIGltcGxlbWVudGF0aW9uLmdldFJlc291cmNlKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICB0aGlzLnN0YXJ0TWV0aG9kID0gdGllQ2xhc3MuZ2V0TWV0aG9kKCJzdGFydCIpOwotICAgICAgICAgICAgdGhpcy5jbG9zZU1ldGhvZCA9IHRpZUNsYXNzLmdldE1ldGhvZCgiY2xvc2UiKTsKLSAgICAgICAgICAgIHRoaXMuZ2V0QmVhbk1ldGhvZCA9IHRpZUNsYXNzLmdldE1ldGhvZCgiZ2V0QmVhbiIsIFN0cmluZy5jbGFzcyk7Ci0KLSAgICAgICAgfSBjYXRjaCAoQ2xhc3NOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0gY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9IGNhdGNoIChJbnN0YW50aWF0aW9uRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgewotICAgICAgICB0cnkgewotICAgICAgICAgICAgc3RhcnRNZXRob2QuaW52b2tlKHRpZSk7Ci0gICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFjY2Vzc0V4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfSBjYXRjaCAoSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgIAllLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCBjbG9zZSgpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGNsb3NlTWV0aG9kLmludm9rZSh0aWUpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0gY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7Ci0gICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotICAgICAgICAJZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIE9iamVjdCBnZXRCZWFuKFN0cmluZyBpZCkgdGhyb3dzIFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24gewotICAgICAgICB0cnkgewotCi0gICAgICAgICAgICByZXR1cm4gZ2V0QmVhbk1ldGhvZC5pbnZva2UodGllLCBpZCk7Ci0KLSAgICAgICAgfSBjYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQWNjZXNzRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOwotICAgICAgICB9IGNhdGNoIChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGUpIHsKLSAgICAgICAgCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgfQotICAgIH0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW52b2NhdGlvbi9TcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2ludm9jYXRpb24vU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWNkMDBkLi4wMDAwMDAwCi0tLSBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW52b2NhdGlvbi9TcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5pbnZvY2F0aW9uOwotCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmludm9jYXRpb24uUHJveHlGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbmplY3Rpb24uSmF2YVByb3BlcnR5VmFsdWVPYmplY3RGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ0ltcGxlbWVudGF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlOwotCi0vKioKLSAqIEEgcHJvdmlkZXIgY2xhc3MgZm9yIHJ1bnRpbWUgU3ByaW5nIGltcGxlbWVudGF0aW9uIGluc3RhbmNlcwotICogQHZlcnNpb24gJFJldiQgJERhdGUkIAotICovCi1wdWJsaWMgY2xhc3MgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlciBpbXBsZW1lbnRzIEltcGxlbWVudGF0aW9uUHJvdmlkZXIgewotICAgIHByaXZhdGUgUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQ7Ci0gICAgCi0gICAgLy8gQSBTcHJpbmcgYXBwbGljYXRpb24gY29udGV4dCBvYmplY3QKLSAgICBwcml2YXRlIFNwcmluZ0NvbnRleHRTdHViIHNwcmluZ0NvbnRleHQ7Ci0gICAgCi0gICAgcHJpdmF0ZSBTcHJpbmdJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRhdGlvbjsKLSAgICAKLSAgICBwcml2YXRlIEphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSBwcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeTsKLQotICAgIC8qKgotICAgICAqIENvbnN0cnVjdG9yIGZvciB0aGUgcHJvdmlkZXIgLSB0YWtlcyBhIGNvbXBvbmVudCBkZWZpbml0aW9uIGFuZCBhIFNwcmluZyBpbXBsZW1lbnRhdGlvbgotICAgICAqIGRlc2NyaXB0aW9uCi0gICAgICogQHBhcmFtIGNvbXBvbmVudCAtIHRoZSBjb21wb25lbnQgaW4gdGhlIGFzc2VtYmx5Ci0gICAgICogQHBhcmFtIGltcGxlbWVudGF0aW9uIC0gdGhlIGltcGxlbWVudGF0aW9uCi0gICAgICovCi0gICAgcHVibGljIFNwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIoUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3ByaW5nSW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveHlGYWN0b3J5IHByb3h5U2VydmljZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKYXZhUHJvcGVydHlWYWx1ZU9iamVjdEZhY3RvcnkgcHJvcGVydHlWYWx1ZU9iamVjdEZhY3RvcnkpIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5pbXBsZW1lbnRhdGlvbiA9IGltcGxlbWVudGF0aW9uOwotICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKLSAgICAgICAgdGhpcy5wcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSA9IHByb3BlcnR5VmFsdWVPYmplY3RGYWN0b3J5OwotCi0gICAgICAgIHNwcmluZ0NvbnRleHQgPSBuZXcgU3ByaW5nQ29udGV4dFN0dWIoY29tcG9uZW50LCBpbXBsZW1lbnRhdGlvbiwgcHJveHlTZXJ2aWNlLCBwcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSk7ICAgICAgICAKLSAgICAgICAgCi0gICAgfSAvLyBlbmQgY29uc3RydWN0b3IKLQotICAgIHB1YmxpYyBJbnZva2VyIGNyZWF0ZUludm9rZXIoUnVudGltZUNvbXBvbmVudFNlcnZpY2Ugc2VydmljZSwgT3BlcmF0aW9uIG9wZXJhdGlvbikgewotICAgICAgICByZXR1cm4gbmV3IFNwcmluZ0ludm9rZXIoY29tcG9uZW50LCBzcHJpbmdDb250ZXh0LCBzZXJ2aWNlLCBvcGVyYXRpb24pOwotICAgIH0KLSAgICAKLSAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c09uZVdheUludm9jYXRpb24oKSB7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBTdGFydCB0aGlzIFNwcmluZyBpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZQotICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgewotICAgICAgICBzcHJpbmdDb250ZXh0LnN0YXJ0KCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogU3RvcCB0aGlzIGltcGxlbWVudGF0aW9uIGluc3RhbmNlCi0gICAgICovCi0gICAgcHVibGljIHZvaWQgc3RvcCgpIHsKLSAgICAJc3ByaW5nQ29udGV4dC5jbG9zZSgpOwotICAgIH0KLQotfSAvLyBlbmQgY2xhc3MgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlcgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnZvY2F0aW9uL1NwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5LmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2ludm9jYXRpb24vU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFiNDU4ZC4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL2ludm9jYXRpb24vU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmludm9jYXRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbi5FeHRlbnNpYmxlUHJveHlGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5pbnZvY2F0aW9uLlByb3h5RmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLmltcGwuTWVkaWF0b3JJbXBsOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbmplY3Rpb24uSmF2YVByb3BlcnR5VmFsdWVPYmplY3RGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ0ltcGxlbWVudGF0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50OwotCi0vKioKLSAqIEltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5IGZvciBTcHJpbmcgaW1wbGVtZW50YXRpb24gdHlwZQotICogQHZlcnNpb24gJFJldiQgJERhdGUkIAotICoKLSAqLwotcHVibGljIGNsYXNzIFNwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5IGltcGxlbWVudHMgSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3Rvcnk8U3ByaW5nSW1wbGVtZW50YXRpb24+IHsKLQotICAgIHByaXZhdGUgUHJveHlGYWN0b3J5IHByb3h5RmFjdG9yeTsKLSAgICBwcml2YXRlIEphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSBwcm9wZXJ0eUZhY3Rvcnk7Ci0KLSAgICAvKioKLSAgICAgKiBTaW1wbGUgY29uc3RydWN0b3IKLSAgICAgKgotICAgICAqLwotICAgIHB1YmxpYyBTcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeShFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGV4dGVuc2lvblBvaW50cykgewotICAgICAgICBzdXBlcigpOwotICAgICAgICAKLSAgICAgICAgcHJveHlGYWN0b3J5ID0gRXh0ZW5zaWJsZVByb3h5RmFjdG9yeS5nZXRJbnN0YW5jZShleHRlbnNpb25Qb2ludHMpOyAKLQotICAgICAgICAvLyBUT0RPOiBjb3VsZCB0aGUgcnVudGltZSBoYXZlIGEgZGVmYXVsdCBQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeT8KLSAgICAgICAgcHJvcGVydHlGYWN0b3J5ID0gbmV3IEphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeShuZXcgTWVkaWF0b3JJbXBsKGV4dGVuc2lvblBvaW50cykpOwotICAgIH0KLQotICAgIC8qKgotICAgICAqIFJldHVybnMgYSBTcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyIGZvciBhIGdpdmVuIGNvbXBvbmVudCBhbmQgU3ByaW5nIGltcGxlbWVudGF0aW9uCi0gICAgICogQHBhcmFtIGNvbXBvbmVudCB0aGUgY29tcG9uZW50IGZvciB3aGljaCBpbXBsZW1lbnRhdGlvbiBpbnN0YW5jZXMgYXJlIHJlcXVpcmVkCi0gICAgICogQHBhcmFtIGltcGxlbWVudGF0aW9uIHRoZSBTcHJpbmcgaW1wbGVtZW50YXRpb24gd2l0aCBkZXRhaWxzIG9mIHRoZSBjb21wb25lbnQKLSAgICAgKiBpbXBsZW1lbnRhdGlvbgotICAgICAqIEByZXR1cm4gdGhlIFNwcmluZ0ltcGxlbWVudGF0aW9uUHJvdmlkZXIgZm9yIHRoZSBzcGVjaWZpZWQgY29tcG9uZW50Ci0gICAgICovCi0gICAgcHVibGljIEltcGxlbWVudGF0aW9uUHJvdmlkZXIgY3JlYXRlSW1wbGVtZW50YXRpb25Qcm92aWRlcihSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNwcmluZ0ltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uKSB7Ci0gICAgICAgIHJldHVybiBuZXcgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlcihjb21wb25lbnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveHlGYWN0b3J5LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnR5RmFjdG9yeSk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogUmV0dXJucyB0aGUgY2xhc3Mgb2YgdGhlIFNwcmluZyBpbXBsZW1lbnRhdGlvbgotICAgICAqLwotICAgIHB1YmxpYyBDbGFzczxTcHJpbmdJbXBsZW1lbnRhdGlvbj4gZ2V0TW9kZWxUeXBlKCkgewotICAgICAgICByZXR1cm4gU3ByaW5nSW1wbGVtZW50YXRpb24uY2xhc3M7Ci0gICAgfQotfSAvLyBlbmQgY2xhc3MgU3ByaW5nSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW52b2NhdGlvbi9TcHJpbmdJbXBsZW1lbnRhdGlvblRpZS5qYXZhIGIvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnZvY2F0aW9uL1NwcmluZ0ltcGxlbWVudGF0aW9uVGllLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NWRiNTEuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnZvY2F0aW9uL1NwcmluZ0ltcGxlbWVudGF0aW9uVGllLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDcgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5pbnZvY2F0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvbmVudFByb3BlcnR5OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUHJvcGVydHk7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5SZWZlcmVuY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmZhY3RvcnkuT2JqZWN0RmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW5qZWN0aW9uLkphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2U7Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7Ci0KLS8qKgotICogVGhpcyBpcyB0aGUgVHVzY2FueSBzaWRlIHRpZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgcnVudGltZSBzdHViIGNsYXNzLgotICogSXQgZW5hYmxlcyB0aGUgU3BpbmcgY29kZSBpbiB0aGUgcnVudGltZSBtb2R1bGUgdG8gaW52b2tlIG1ldGhvZHMgb24gYQotICogVHVzY2FueSBTcHJpbmdJbXBsZW1lbnRhdGlvbiB3aXRob3V0IHRoZSBTcHJpbmcgcnVudGltZSBtb2R1bGUKLSAqIG5lZWRpbmcgdG8ga25vdyBhYm91dCBhbnkgVHVzY2FueSBjbGFzc2VzLiBTZWUgdGhlIFNwcmluZ0ltcGxlbWVudGF0aW9uU3R1YiBjbGFzcwotICogaW4gdGhlIGltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lIG1vZHVsZSBmb3Igd2hhdCB0aGUgc3R1YiBkb2VzLiAKLSAqLwotcHVibGljIGNsYXNzIFNwcmluZ0ltcGxlbWVudGF0aW9uVGllIHsKLQotICAgIHByaXZhdGUgU3ByaW5nSW1wbGVtZW50YXRpb24gaW1wbGVtZW50YXRpb247Ci0gICAgcHJpdmF0ZSBSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudDsKLSAgICBwcml2YXRlIEphdmFQcm9wZXJ0eVZhbHVlT2JqZWN0RmFjdG9yeSBwcm9wZXJ0eUZhY3Rvcnk7Ci0gICAgCi0gICAgcHVibGljIFNwcmluZ0ltcGxlbWVudGF0aW9uVGllKFNwcmluZ0ltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLCBSdW50aW1lQ29tcG9uZW50IGNvbXBvbmVudCwgSmF2YVByb3BlcnR5VmFsdWVPYmplY3RGYWN0b3J5IHByb3BlcnR5RmFjdG9yeSkgewotICAgICAgICB0aGlzLmltcGxlbWVudGF0aW9uID0gaW1wbGVtZW50YXRpb247Ci0gICAgICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50OwotICAgICAgICB0aGlzLnByb3BlcnR5RmFjdG9yeSA9IHByb3BlcnR5RmFjdG9yeTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFN0cmluZyBnZXRVUkkoKSB7Ci0gICAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvbi5nZXRVUkkoKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgU3RyaW5nIGdldENvbXBvbmVudE5hbWUoKSB7Ci0gICAgICAgIHJldHVybiBjb21wb25lbnQuZ2V0TmFtZSgpOwotICAgIH0KLSAgICAvKioKLSAgICAgKiBNZXRob2QgdG8gY3JlYXRlIGEgSmF2YSBCZWFuIGZvciBhIFByb3BlcnR5IHZhbHVlCi0gICAgICogQHBhcmFtIDxCPiB0aGUgY2xhc3MgdHlwZSBvZiB0aGUgQmVhbgotICAgICAqIEBwYXJhbSByZXF1aXJlZFR5cGUgLSBhIENsYXNzIG9iamVjdCBmb3IgdGhlIHJlcXVpcmVkIHR5cGUKLSAgICAgKiBAcGFyYW0gbmFtZSAtIHRoZSBQcm9wZXJ0eSBuYW1lCi0gICAgICogQHJldHVybiAtIGEgQmVhbiBvZiB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LCB3aXRoIHZhbHVlIHNldAotICAgICAqLwotICAgIHByaXZhdGUgPEI+IEIgZ2V0UHJvcGVydHlCZWFuKENsYXNzPD8+IHJlcXVpcmVkVHlwZSwgU3RyaW5nIG5hbWUpIHsKLSAgICAgICAgQiBwcm9wZXJ0eU9iamVjdCA9IG51bGw7Ci0gICAgICAgIC8vIEdldCB0aGUgY29tcG9uZW50J3MgbGlzdCBvZiBwcm9wZXJ0aWVzCi0gICAgICAgIExpc3Q8Q29tcG9uZW50UHJvcGVydHk+IHByb3BzID0gY29tcG9uZW50LmdldFByb3BlcnRpZXMoKTsKLSAgICAgICAgZm9yIChDb21wb25lbnRQcm9wZXJ0eSBwcm9wIDogcHJvcHMpIHsKLSAgICAgICAgICAgIGlmIChwcm9wLmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKLSAgICAgICAgICAgICAgICAvLyBPbiBmaW5kaW5nIHRoZSBwcm9wZXJ0eSwgY3JlYXRlIGEgZmFjdG9yeSBmb3IgaXQgYW5kIGNyZWF0ZSBhIEJlYW4gdXNpbmcKLSAgICAgICAgICAgICAgICAvLyB0aGUgZmFjdG9yeQotICAgICAgICAgICAgICAgIE9iamVjdEZhY3Rvcnk8Pz4gZmFjdG9yeSA9IHByb3BlcnR5RmFjdG9yeS5jcmVhdGVWYWx1ZUZhY3RvcnkocHJvcCwgcHJvcC5nZXRWYWx1ZSgpLCByZXF1aXJlZFR5cGUpOwotICAgICAgICAgICAgICAgIHByb3BlcnR5T2JqZWN0ID0gKEIpZmFjdG9yeS5nZXRJbnN0YW5jZSgpOwotICAgICAgICAgICAgfSAvLyBlbmQgaWYKLSAgICAgICAgfSAvLyBlbmQgZm9yCi0KLSAgICAgICAgcmV0dXJuIHByb3BlcnR5T2JqZWN0OwotICAgIH0KLQotICAgIC8qKgotICAgICAqIENyZWF0ZXMgYSBwcm94eSBCZWFuIGZvciBhIHJlZmVyZW5jZQotICAgICAqIEBwYXJhbSA8Qj4gdGhlIEJ1c2luZXNzIGludGVyZmFjZSB0eXBlIGZvciB0aGUgcmVmZXJlbmNlCi0gICAgICogQHBhcmFtIGJ1c2luZXNzSW50ZXJmYWNlIC0gdGhlIGJ1c2luZXNzIGludGVyZmFjZSBhcyBhIENsYXNzCi0gICAgICogQHBhcmFtIHJlZmVyZW5jZU5hbWUgLSB0aGUgbmFtZSBvZiB0aGUgUmVmZXJlbmNlCi0gICAgICogQHJldHVybiBhbiBCZWFuIG9mIHRoZSB0eXBlIGRlZmluZWQgYnkgPEI+Ci0gICAgICovCi0gICAgcHJpdmF0ZSA8Qj4gQiBnZXRTZXJ2aWNlKENsYXNzPEI+IGJ1c2luZXNzSW50ZXJmYWNlLCBTdHJpbmcgcmVmZXJlbmNlTmFtZSkgewotICAgICAgICByZXR1cm4gY29tcG9uZW50LmdldENvbXBvbmVudENvbnRleHQoKS5nZXRTZXJ2aWNlKGJ1c2luZXNzSW50ZXJmYWNlLCByZWZlcmVuY2VOYW1lKTsKLSAgICB9Ci0KLSAgICAvKioKLSAgICAgKiBHZXQgYSBCZWFuIGZvciBhIHJlZmVyZW5jZSBvciBmb3IgYSBwcm9wZXJ0eS4KLSAgICAgKgotICAgICAqIEBwYXJhbSBuYW1lIC0gdGhlIG5hbWUgb2YgdGhlIEJlYW4gcmVxdWlyZWQKLSAgICAgKiBAcGFyYW0gcmVxdWlyZWRUeXBlIC0gdGhlIHJlcXVpcmVkIHR5cGUgb2YgdGhlIEJlYW4gKGVpdGhlciBhIEphdmEgY2xhc3Mgb3IgYSBKYXZhIGludGVyZmFjZSkKLSAgICAgKiBAcmV0dXJuIE9iamVjdCAtIGEgQmVhbiB3aGljaCBtYXRjaGVzIHRoZSByZXF1ZXN0ZWQgYmVhbgotICAgICAqLwotICAgIHB1YmxpYyBPYmplY3QgZ2V0QmVhbihTdHJpbmcgbmFtZSwgQ2xhc3M8Pz4gcmVxdWlyZWRUeXBlKSB7Ci0gICAgICAgIC8vIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSByZXF1ZXN0ZWQgQmVhbiBpcyBlaXRoZXIgYSByZWZlcmVuY2Ugb3IgYSBwcm9wZXJ0eQotICAgICAgICAvLyBmcm9tIHRoZSBTcHJpbmcgY29udGV4dAotICAgICAgICBmb3IgKFJlZmVyZW5jZSByZWZlcmVuY2UgOiBpbXBsZW1lbnRhdGlvbi5nZXRSZWZlcmVuY2VzKCkpIHsKLSAgICAgICAgICAgIGlmIChyZWZlcmVuY2UuZ2V0TmFtZSgpLmVxdWFscyhuYW1lKSkgewotICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIEphdmEgaW50ZXJmYWNlIGZvciB0aGUgcmVmZXJlbmNlIChpdCBjYW4ndCBiZSBhbnkgb3RoZXIgaW50ZXJmYWNlIHR5cGUKLSAgICAgICAgICAgICAgICAvLyBmb3IgYSBTcHJpbmcgYXBwbGljYXRpb24gY29udGV4dCkKLSAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWRUeXBlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgSmF2YUludGVyZmFjZSBqYXZhSW50ZXJmYWNlID0gKEphdmFJbnRlcmZhY2UpcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkuZ2V0SW50ZXJmYWNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkVHlwZSA9IGphdmFJbnRlcmZhY2UuZ2V0SmF2YUNsYXNzKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhbmQgcmV0dXJuIHRoZSBwcm94eSBmb3IgdGhlIHJlZmVyZW5jZQotICAgICAgICAgICAgICAgIHJldHVybiBnZXRTZXJ2aWNlKHJlcXVpcmVkVHlwZSwgcmVmZXJlbmNlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgICB9IC8vIGVuZCBpZgotICAgICAgICB9IC8vIGVuZCBmb3IKLQotICAgICAgICAvLyBGb3IgYSBwcm9wZXJ0eSwgZ2V0IHRoZSBuYW1lIGFuZCB0aGUgcmVxdWlyZWQgSmF2YSB0eXBlIGFuZCBjcmVhdGUgYSBCZWFuCi0gICAgICAgIC8vIG9mIHRoYXQgdHlwZSB3aXRoIHRoZSB2YWx1ZSBpbnNlcnRlZC4KLSAgICAgICAgZm9yIChQcm9wZXJ0eSBwcm9wZXJ0eSA6IGltcGxlbWVudGF0aW9uLmdldFByb3BlcnRpZXMoKSkgewotICAgICAgICAgICAgaWYgKHByb3BlcnR5LmdldE5hbWUoKS5lcXVhbHMobmFtZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVxdWlyZWRUeXBlID09IG51bGwpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIG9ubHkgZGVhbHMgd2l0aCBhIHN1YnNldCBvZiB0eXBlcyBhbmQgd2FzIHN1cGVyY2VkZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gYnkgdGhlIGluZm9ybWF0aW9uIGZyb20gdGhlIGltcGxlbWVudGF0aW9uICh3aGljaCB1c2VzIENsYXNzZXMgYXMgZm91bmQKLSAgICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIFNwcmluZyBpbXBsZW1lbnRhdGlvbiBpdHNlbGYuCi0gICAgICAgICAgICAgICAgICAgIC8vcmVxdWlyZWRUeXBlID0gSmF2YVhNTE1hcHBlci5nZXRKYXZhVHlwZSggcHJvcGVydHkuZ2V0WFNEVHlwZSgpICk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkVHlwZSA9IGltcGxlbWVudGF0aW9uLmdldFByb3BlcnR5Q2xhc3MobmFtZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBnZXRQcm9wZXJ0eUJlYW4ocmVxdWlyZWRUeXBlLCBwcm9wZXJ0eS5nZXROYW1lKCkpOwotICAgICAgICAgICAgfSAvLyBlbmQgaWYKLSAgICAgICAgfSAvLyBlbmQgZm9yCi0gICAgICAgIC8vIFRPRE86IE5vU3VjaEJlYW5FeGNlcHRpb24KLSAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBmaW5kIEJlYW4gd2l0aCBuYW1lICIgKyBuYW1lKTsKLQotICAgIH0gLy8gZW5kIG1ldGhvZCBnZXRCZWFuKCBTdHJpbmcsIENsYXNzICkKLSAgICAKLSAgICBwdWJsaWMgT2JqZWN0IGdldENvbXBvbmVudFRpZSgpIHsKLSAgICAgICAgcmV0dXJuIG5ldyBDb21wb25lbnRUaWUoY29tcG9uZW50KTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgT2JqZWN0IGdldFByb3BlcnR5VmFsdWVUaWUoKSB7Ci0gICAgICAgIHJldHVybiBuZXcgUHJvcGVydHlWYWx1ZVRpZShjb21wb25lbnQsIHByb3BlcnR5RmFjdG9yeSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBDbGFzc0xvYWRlciBnZXRDbGFzc0xvYWRlcigpIHsKLSAgICAJcmV0dXJuIGltcGxlbWVudGF0aW9uLmdldENsYXNzTG9hZGVyKCk7Ci0gICAgfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnZvY2F0aW9uL1NwcmluZ0ludm9jYXRpb25FeGNlcHRpb24uamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW52b2NhdGlvbi9TcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMjM4MzAuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnZvY2F0aW9uL1NwcmluZ0ludm9jYXRpb25FeGNlcHRpb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLmludm9jYXRpb247Ci0KLS8qKgotICogQHZlcnNpb24gJFJldiQgJERhdGUkCi0gKi8KLXB1YmxpYyBjbGFzcyBTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uIHsKLQotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IC0xMTU3NzkwMDM2NjM4MTU3NTEzTDsKLQotICAgIHB1YmxpYyBTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uKFN0cmluZyBtc2cpIHsKLSAgICAgICAgc3VwZXIobXNnKTsKLSAgICB9Ci0gICAgCi0gICAgcHVibGljIFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24oVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgc3VwZXIoZSk7Ci0gICAgfQotICAgIAotICAgIHB1YmxpYyBTcHJpbmdJbnZvY2F0aW9uRXhjZXB0aW9uKFN0cmluZyBtc2csVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgc3VwZXIobXNnLGUpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnZvY2F0aW9uL1NwcmluZ0ludm9rZXIuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcvaW52b2NhdGlvbi9TcHJpbmdJbnZva2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmOTc5NmMuLjAwMDAwMDAKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy9pbnZvY2F0aW9uL1NwcmluZ0ludm9rZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5pbnZvY2F0aW9uOwotCi1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdCZWFuRWxlbWVudDsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbjsKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5pbXBsLkphdmFJbnRlcmZhY2VVdGlsOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5JbnZva2VyOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW52b2NhdGlvbi5NZXNzYWdlOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50OwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50U2VydmljZTsKLQotLyoqCi0gKiBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIGEgU3ByaW5nIGJlYW4gaW52b2tlcgotICogQHZlcnNpb24gJFJldiQgJERhdGUkIAotICovCi1wdWJsaWMgY2xhc3MgU3ByaW5nSW52b2tlciBpbXBsZW1lbnRzIEludm9rZXIgewotCi0gICAgcHJpdmF0ZSBNZXRob2QgdGhlTWV0aG9kID0gbnVsbDsKLSAgICBwcml2YXRlIE9iamVjdCBiZWFuOwotICAgIHByaXZhdGUgU3ByaW5nQmVhbkVsZW1lbnQgYmVhbkVsZW1lbnQ7Ci0gICAgcHJpdmF0ZSBib29sZWFuIGJhZEludm9rZXIgPSBmYWxzZTsKLQotICAgIHByaXZhdGUgU3ByaW5nQ29udGV4dFN0dWIgc3ByaW5nQ29udGV4dDsKLSAgICBwcml2YXRlIE9wZXJhdGlvbiBvcGVyYXRpb247Ci0KLSAgICAvKioKLSAgICAgKiBTcHJpbmdJbnZva2VyIGNvbnN0cnVjdG9yCi0gICAgICogQHBhcmFtIGNvbXBvbmVudCAtIHRoZSBTcHJpbmcgY29tcG9uZW50IHRvIGludm9rZQotICAgICAqIEBwYXJhbSBzZXJ2aWNlIC0gdGhlIHNlcnZpY2UgdG8gaW52b2tlCi0gICAgICogQHBhcmFtIG9wZXJhdGlvbiAtIHRoZSBvcGVyYXRpb24gdG8gaW52b2tlCi0gICAgICovCi0gICAgcHVibGljIFNwcmluZ0ludm9rZXIoUnVudGltZUNvbXBvbmVudCBjb21wb25lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgU3ByaW5nQ29udGV4dFN0dWIgc3ByaW5nQ29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbiBvcGVyYXRpb24pIHsKLQotICAgICAgICB0aGlzLnNwcmluZ0NvbnRleHQgPSBzcHJpbmdDb250ZXh0OwotICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKLQotICAgICAgICAvLyBGcm9tIHRoZSBjb21wb25lbnQgYW5kIHRoZSBzZXJ2aWNlLCBpZGVudGlmeSB0aGUgU3ByaW5nIEJlYW4gd2hpY2ggaXMgdGhlIHRhcmdldAotICAgICAgICBTcHJpbmdJbXBsZW1lbnRhdGlvbiB0aGVJbXBsZW1lbnRhdGlvbiA9IChTcHJpbmdJbXBsZW1lbnRhdGlvbiljb21wb25lbnQuZ2V0SW1wbGVtZW50YXRpb24oKTsKLSAgICAgICAgYmVhbkVsZW1lbnQgPSB0aGVJbXBsZW1lbnRhdGlvbi5nZXRCZWFuRnJvbVNlcnZpY2Uoc2VydmljZS5nZXRTZXJ2aWNlKCkpOwotCi0gICAgICAgIGlmIChiZWFuRWxlbWVudCA9PSBudWxsKSB7Ci0gICAgICAgICAgICBiYWRJbnZva2VyID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgfSAvLyBlbmQgY29uc3RydWN0b3IgU3ByaW5nSW52b2tlcgotCi0gICAgLy8gTGF6eS1sb2FkIHRoZSBtZXRob2QgdG8gYXZvaWQgdGltaW5nIHByb2JsZW1zIHdpdGggdGhlIFNwcmluZyBDb250ZXh0Ci0gICAgcHJpdmF0ZSB2b2lkIHNldHVwTWV0aG9kKCkgdGhyb3dzIFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb257Ci0gICAgICAgIHRyeSB7Ci0gICAgICAgICAgICBiZWFuID0gc3ByaW5nQ29udGV4dC5nZXRCZWFuKGJlYW5FbGVtZW50LmdldElkKCkpOwotICAgICAgICAgICAgQ2xhc3M8Pz4gYmVhbkNsYXNzID0gYmVhbi5nZXRDbGFzcygpOwotICAgICAgICAgICAgdGhlTWV0aG9kID0gSmF2YUludGVyZmFjZVV0aWwuZmluZE1ldGhvZChiZWFuQ2xhc3MsIG9wZXJhdGlvbik7Ci0gICAgICAgICAgICAvL1N5c3RlbS5vdXQucHJpbnRsbigiU3ByaW5nSW52b2tlciAtIGZvdW5kIG1ldGhvZCAiICsgdGhlTWV0aG9kLmdldE5hbWUoKSApOwotICAgICAgICB9IGNhdGNoIChOb1N1Y2hNZXRob2RFeGNlcHRpb24gZSkgewotICAgICAgICAJdGhyb3cgbmV3IFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24oZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcml2YXRlIE9iamVjdCBkb0ludm9rZShPYmplY3QgcGF5bG9hZCkgdGhyb3dzIFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24gewotICAgICAgICBpZiAodGhlTWV0aG9kID09IG51bGwpCi0gICAgICAgICAgICBzZXR1cE1ldGhvZCgpOwotCi0gICAgICAgIGlmIChiYWRJbnZva2VyKQotICAgICAgICAgICAgdGhyb3cgbmV3IFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24oIlNwcmluZyBpbnZva2VyIGluY29ycmVjdGx5IGNvbmZpZ3VyZWQiKTsKLSAgICAgICAgLy8gSW52b2tlIHRoZSBtZXRob2Qgb24gdGhlIFNwcmluZyBiZWFuIHVzaW5nIHRoZSBwYXlsb2FkLCByZXR1cm5pbmcgdGhlIHJlc3VsdHMKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIE9iamVjdCByZXQ7Ci0KLSAgICAgICAgICAgIGlmIChwYXlsb2FkICE9IG51bGwgJiYgIXBheWxvYWQuZ2V0Q2xhc3MoKS5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICByZXQgPSB0aGVNZXRob2QuaW52b2tlKGJlYW4sIHBheWxvYWQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXQgPSB0aGVNZXRob2QuaW52b2tlKGJlYW4sIChPYmplY3RbXSlwYXlsb2FkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiByZXQ7Ci0gICAgICAgIH0gY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24oIlNwcmluZyBpbnZva2VyIGludm9rZSBtZXRob2QgJyIrIHRoZU1ldGhvZC5nZXROYW1lKCkrIicgZXJyb3IuIixlLmdldENhdXNlKCkpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgdGhyb3cgbmV3IFNwcmluZ0ludm9jYXRpb25FeGNlcHRpb24oIlNwcmluZyBpbnZva2VyIGludm9rZSBtZXRob2QgJyIrIHRoZU1ldGhvZC5nZXROYW1lKCkrIicgZXJyb3IuIixlKTsKLSAgICAgICAgfQotCi0gICAgfSAvLyBlbmQgbWV0aG9kIGRvSW52b2tlCi0KLSAgICAvKioKLSAgICAgKiBAcGFyYW0gbXNnIHRoZSBtZXNzYWdlIHRvIGludm9rZSBvbiB0aGUgdGFyZ2V0IGJlYW4KLSAgICAgKi8KLSAgICBwdWJsaWMgTWVzc2FnZSBpbnZva2UoTWVzc2FnZSBtc2cpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIE9iamVjdCByZXNwID0gZG9JbnZva2UobXNnLmdldEJvZHkoKSk7Ci0gICAgICAgICAgICBtc2cuc2V0Qm9keShyZXNwKTsKLSAgICAgICAgfSBjYXRjaCAoU3ByaW5nSW52b2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICBtc2cuc2V0RmF1bHRCb2R5KGUuZ2V0Q2F1c2UoKSk7Ci0gICAgICAgIH1jYXRjaCAoVGhyb3dhYmxlIGUpIHsKLSAgICAgICAgICAgIG1zZy5zZXRGYXVsdEJvZHkoZSk7Ci0gICAgICAgIH0KLSAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIlNwcmluZyBJbnZva2VyIC0gaW52b2tlIGNhbGxlZCIpOwotICAgICAgICByZXR1cm4gbXNnOwotICAgIH0gLy8gZW5kIG1ldGhvZCBpbnZva2UKLQotfSAvLyBlbmQgY2xhc3MgU3ByaW5nSW52b2tlcgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy94bWwvU3ByaW5nSW1wbGVtZW50YXRpb25Qcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcveG1sL1NwcmluZ0ltcGxlbWVudGF0aW9uUHJvY2Vzc29yLmphdmEKaW5kZXggZDU1MzAxMS4uNGI0MTQ0ZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy94bWwvU3ByaW5nSW1wbGVtZW50YXRpb25Qcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3htbC9TcHJpbmdJbXBsZW1lbnRhdGlvblByb2Nlc3Nvci5qYXZhCkBAIC01MSw3ICs1MSw4IEBACiAgKgogICogQHZlcnNpb24gJFJldiQgJERhdGUkCiAgKi8KLXB1YmxpYyBjbGFzcyBTcHJpbmdJbXBsZW1lbnRhdGlvblByb2Nlc3NvciBleHRlbmRzIEJhc2VTdEFYQXJ0aWZhY3RQcm9jZXNzb3IgaW1wbGVtZW50cyBTdEFYQXJ0aWZhY3RQcm9jZXNzb3I8U3ByaW5nSW1wbGVtZW50YXRpb24+IHsKK3B1YmxpYyBjbGFzcyBTcHJpbmdJbXBsZW1lbnRhdGlvblByb2Nlc3NvciBleHRlbmRzIEJhc2VTdEFYQXJ0aWZhY3RQcm9jZXNzb3IgaW1wbGVtZW50cworICAgIFN0QVhBcnRpZmFjdFByb2Nlc3NvcjxTcHJpbmdJbXBsZW1lbnRhdGlvbj4gewogCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExPQ0FUSU9OID0gImxvY2F0aW9uIjsKICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU1QTEVNRU5UQVRJT05fU1BSSU5HID0gImltcGxlbWVudGF0aW9uLnNwcmluZyI7CkBAIC02MSw3ICs2Miw2IEBACiAgICAgcHJpdmF0ZSBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5OwogICAgIHByaXZhdGUgQXNzZW1ibHlGYWN0b3J5IGFzc2VtYmx5RmFjdG9yeTsKICAgICBwcml2YXRlIFBvbGljeVN1YmplY3RQcm9jZXNzb3IgcG9saWN5UHJvY2Vzc29yOwotICAgIAogCiAgICAgcHJpdmF0ZSBGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgZmFjdG9yaWVzOwogCkBAIC04MCwxMCArODAsMTYgQEAKICAgICAgKiBAcGFyYW0gbW9kZWwKICAgICAgKi8KICAgICBwcml2YXRlIHZvaWQgZXJyb3IoTW9uaXRvciBtb25pdG9yLCBTdHJpbmcgbWVzc2FnZSwgT2JqZWN0IG1vZGVsLCBFeGNlcHRpb24gZXgpIHsKLSAgICAJIGlmIChtb25pdG9yICE9IG51bGwpIHsKLQkgICAgICAgIFByb2JsZW0gcHJvYmxlbSA9IG1vbml0b3IuY3JlYXRlUHJvYmxlbSh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLCAiaW1wbC1zcHJpbmctdmFsaWRhdGlvbi1tZXNzYWdlcyIsIFNldmVyaXR5LkVSUk9SLCBtb2RlbCwgbWVzc2FnZSwgZXgpOwotCSAgICAgICAgbW9uaXRvci5wcm9ibGVtKHByb2JsZW0pOwotICAgIAkgfQorICAgICAgICBpZiAobW9uaXRvciAhPSBudWxsKSB7CisgICAgICAgICAgICBQcm9ibGVtIHByb2JsZW0gPQorICAgICAgICAgICAgICAgIG1vbml0b3IuY3JlYXRlUHJvYmxlbSh0aGlzLmdldENsYXNzKCkuZ2V0TmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW1wbC1zcHJpbmctdmFsaWRhdGlvbi1tZXNzYWdlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldmVyaXR5LkVSUk9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXgpOworICAgICAgICAgICAgbW9uaXRvci5wcm9ibGVtKHByb2JsZW0pOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoqCkBAIC05NCwxMCArMTAwLDE2IEBACiAgICAgICogQHBhcmFtIG1vZGVsCiAgICAgICovCiAgICAgcHJpdmF0ZSB2b2lkIGVycm9yKE1vbml0b3IgbW9uaXRvciwgU3RyaW5nIG1lc3NhZ2UsIE9iamVjdCBtb2RlbCwgT2JqZWN0Li4uIG1lc3NhZ2VQYXJhbWV0ZXJzKSB7Ci0gICAgCSBpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JICAgICAgICBQcm9ibGVtIHByb2JsZW0gPSBtb25pdG9yLmNyZWF0ZVByb2JsZW0odGhpcy5nZXRDbGFzcygpLmdldE5hbWUoKSwgImltcGwtc3ByaW5nLXZhbGlkYXRpb24tbWVzc2FnZXMiLCBTZXZlcml0eS5FUlJPUiwgbW9kZWwsIG1lc3NhZ2UsIChPYmplY3RbXSltZXNzYWdlUGFyYW1ldGVycyk7Ci0JICAgICAgICBtb25pdG9yLnByb2JsZW0ocHJvYmxlbSk7Ci0gICAgCSB9CisgICAgICAgIGlmIChtb25pdG9yICE9IG51bGwpIHsKKyAgICAgICAgICAgIFByb2JsZW0gcHJvYmxlbSA9CisgICAgICAgICAgICAgICAgbW9uaXRvci5jcmVhdGVQcm9ibGVtKHRoaXMuZ2V0Q2xhc3MoKS5nZXROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbXBsLXNwcmluZy12YWxpZGF0aW9uLW1lc3NhZ2VzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V2ZXJpdHkuRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoT2JqZWN0W10pbWVzc2FnZVBhcmFtZXRlcnMpOworICAgICAgICAgICAgbW9uaXRvci5wcm9ibGVtKHByb2JsZW0pOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyoKQEAgLTExNyw5ICsxMjksMTAgQEAKICAgICAgKiBzcGVjaWZpZWQgaW4gdGhlIGhlYWRlciBpZGVudGlmeSB0aGUgY29udGV4dCBjb25maWd1cmF0aW9uIGZpbGVzLgogICAgICAqIElmIHRoZXJlIGlzIG5vIE1BTklGRVNULk1GIGZpbGUgb3Igbm8gU3ByaW5nLUNvbnRleHQgaGVhZGVyIHdpdGhpbiB0aGF0IGZpbGUsCiAgICAgICogdGhlbiB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgdG8gYnVpbGQgYW4gYXBwbGljYXRpb24gY29udGV4dCB1c2luZyBhbGwgdGhlICoueG1sIGZpbGVzCi0gICAgICogaW4gdGhlIE1FVEFJTkYvc3ByaW5nIGRpcmVjdG9yeS4KKyAgICAgKiBpbiB0aGUgTUVUQS1JTkYvc3ByaW5nIGRpcmVjdG9yeS4KICAgICAgKi8KLSAgICBwdWJsaWMgU3ByaW5nSW1wbGVtZW50YXRpb24gcmVhZChYTUxTdHJlYW1SZWFkZXIgcmVhZGVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uLCBYTUxTdHJlYW1FeGNlcHRpb24geworICAgIHB1YmxpYyBTcHJpbmdJbXBsZW1lbnRhdGlvbiByZWFkKFhNTFN0cmVhbVJlYWRlciByZWFkZXIsIFByb2Nlc3NvckNvbnRleHQgY29udGV4dCkKKyAgICAgICAgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gQ3JlYXRlIHRoZSBTcHJpbmcgaW1wbGVtZW50YXRpb24KICAgICAgICAgU3ByaW5nSW1wbGVtZW50YXRpb24gc3ByaW5nSW1wbGVtZW50YXRpb24gPSBudWxsOwpAQCAtMTI3LDEyICsxNDAsMTIgQEAKICAgICAgICAgLy8gUmVhZCB0aGUgbG9jYXRpb24gYXR0cmlidXRlIGZvciB0aGUgc3ByaW5nIGltcGxlbWVudGF0aW9uCiAgICAgICAgIFN0cmluZyBzcHJpbmdMb2NhdGlvbiA9IGdldFVSSVN0cmluZyhyZWFkZXIsIExPQ0FUSU9OKTsKICAgICAgICAgaWYgKHNwcmluZ0xvY2F0aW9uICE9IG51bGwpIHsKLSAgICAgICAgCXNwcmluZ0ltcGxlbWVudGF0aW9uID0gbmV3IFNwcmluZ0ltcGxlbWVudGF0aW9uKCk7Ci0gICAgICAgIAlzcHJpbmdJbXBsZW1lbnRhdGlvbi5zZXRMb2NhdGlvbihzcHJpbmdMb2NhdGlvbik7Ci0gICAgICAgIAlzcHJpbmdJbXBsZW1lbnRhdGlvbi5zZXRVbnJlc29sdmVkKHRydWUpOworICAgICAgICAgICAgc3ByaW5nSW1wbGVtZW50YXRpb24gPSBuZXcgU3ByaW5nSW1wbGVtZW50YXRpb24oKTsKKyAgICAgICAgICAgIHNwcmluZ0ltcGxlbWVudGF0aW9uLnNldExvY2F0aW9uKHNwcmluZ0xvY2F0aW9uKTsKKyAgICAgICAgICAgIHNwcmluZ0ltcGxlbWVudGF0aW9uLnNldFVucmVzb2x2ZWQodHJ1ZSk7CiAgICAgICAgICAgICBwcm9jZXNzQ29tcG9uZW50VHlwZShzcHJpbmdJbXBsZW1lbnRhdGlvbik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIAllcnJvcihjb250ZXh0LmdldE1vbml0b3IoKSwgIkxvY2F0aW9uQXR0cmlidXRlTWlzc2luZyIsIHJlYWRlcik7CisgICAgICAgICAgICBlcnJvcihjb250ZXh0LmdldE1vbml0b3IoKSwgIkxvY2F0aW9uQXR0cmlidXRlTWlzc2luZyIsIHJlYWRlcik7CiAgICAgICAgICAgICAvL3Rocm93IG5ldyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uKE1TR19MT0NBVElPTl9NSVNTSU5HKTsKICAgICAgICAgfQogCkBAIC0xNjcsNyArMTgwLDggQEAKICAgICAgKiBXcml0ZSBvdXQgdGhlIFhNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgU3ByaW5nIGltcGxlbWVudGF0aW9uCiAgICAgICogPGltcGxlbWVudGF0aW9uLnNwcmluZyBsb2NhdGlvbj0iLi4uIiAvPgogICAgICAqLwotICAgIHB1YmxpYyB2b2lkIHdyaXRlKFNwcmluZ0ltcGxlbWVudGF0aW9uIHNwcmluZ0ltcGxlbWVudGF0aW9uLCBYTUxTdHJlYW1Xcml0ZXIgd3JpdGVyLCBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpIHRocm93cyBDb250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uIHsKKyAgICBwdWJsaWMgdm9pZCB3cml0ZShTcHJpbmdJbXBsZW1lbnRhdGlvbiBzcHJpbmdJbXBsZW1lbnRhdGlvbiwgWE1MU3RyZWFtV3JpdGVyIHdyaXRlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KQorICAgICAgICB0aHJvd3MgQ29udHJpYnV0aW9uV3JpdGVFeGNlcHRpb24sIFhNTFN0cmVhbUV4Y2VwdGlvbiB7CiAKICAgICAgICAgLy8gV3JpdGUgPGltcGxlbWVudGF0aW9uLnNwcmluZz4KICAgICAgICAgd3JpdGVyLndyaXRlU3RhcnRFbGVtZW50KENvbnN0YW50cy5TQ0ExMV9OUywgSU1QTEVNRU5UQVRJT05fU1BSSU5HKTsKQEAgLTE4OCwxOSArMjAyLDE4IEBACiAgICAgcHVibGljIHZvaWQgcmVzb2x2ZShTcHJpbmdJbXBsZW1lbnRhdGlvbiBzcHJpbmdJbXBsZW1lbnRhdGlvbiwgTW9kZWxSZXNvbHZlciByZXNvbHZlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KQogICAgICAgICB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7CiAKLSAgICAJaWYgKHNwcmluZ0ltcGxlbWVudGF0aW9uID09IG51bGwpCi0gICAgCQlyZXR1cm47CisgICAgICAgIGlmIChzcHJpbmdJbXBsZW1lbnRhdGlvbiA9PSBudWxsKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgCU1vbml0b3IgbW9uaXRvciA9IGNvbnRleHQuZ2V0TW9uaXRvcigpOworICAgICAgICBNb25pdG9yIG1vbml0b3IgPSBjb250ZXh0LmdldE1vbml0b3IoKTsKICAgICAgICAgLyogTG9hZCB0aGUgU3ByaW5nIGNvbXBvbmVudCB0eXBlIGJ5IHJlYWRpbmcgdGhlIFNwcmluZyBhcHBsaWNhdGlvbiBjb250ZXh0ICovCi0gICAgICAgIFNwcmluZ1hNTENvbXBvbmVudFR5cGVMb2FkZXIgc3ByaW5nTG9hZGVyID0KLSAgICAgICAgICAgIG5ldyBTcHJpbmdYTUxDb21wb25lbnRUeXBlTG9hZGVyKHJlZ2lzdHJ5LCBtb25pdG9yKTsKKyAgICAgICAgU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlciBzcHJpbmdMb2FkZXIgPSBuZXcgU3ByaW5nWE1MQ29tcG9uZW50VHlwZUxvYWRlcihyZWdpc3RyeSk7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAvLyBMb2FkIHRoZSBTcHJpbmcgSW1wbGVtZW50YXRpb24gaW5mb3JtYXRpb24gZnJvbSBpdHMgYXBwbGljYXRpb24gY29udGV4dCBmaWxlLi4uCiAgICAgICAgICAgICBzcHJpbmdMb2FkZXIubG9hZChzcHJpbmdJbXBsZW1lbnRhdGlvbiwgcmVzb2x2ZXIsIGNvbnRleHQpOwogICAgICAgICB9IGNhdGNoIChDb250cmlidXRpb25SZWFkRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgCUNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24gY2UgPSBuZXcgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbihlKTsKLSAgICAgICAgCWVycm9yKG1vbml0b3IsICJDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uIiwgcmVzb2x2ZXIsIGNlKTsKKyAgICAgICAgICAgIENvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24gY2UgPSBuZXcgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgICAgIGVycm9yKG1vbml0b3IsICJDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uIiwgcmVzb2x2ZXIsIGNlKTsKICAgICAgICAgICAgIHRocm93IGNlOwogICAgICAgICB9CiAKQEAgLTIwOSwxMiArMjIyLDEyIEBACiAgICAgICAgICAgICAvLyBJZiB0aGUgaW50cm9zcGVjdGlvbiBmYWlscyB0byByZXNvbHZlLCB0cnkgdG8gZmluZCBhIHNpZGUgZmlsZS4uLgogICAgICAgICAgICAgQ29tcG9uZW50VHlwZSBjb21wb25lbnRUeXBlID0gcmVzb2x2ZXIucmVzb2x2ZU1vZGVsKENvbXBvbmVudFR5cGUuY2xhc3MsIGN0LCBjb250ZXh0KTsKICAgICAgICAgICAgIGlmIChjb21wb25lbnRUeXBlLmlzVW5yZXNvbHZlZCgpKSB7Ci0gICAgICAgICAgICAJZXJyb3IobW9uaXRvciwgIlVuYWJsZVRvUmVzb2x2ZUNvbXBvbmVudFR5cGUiLCByZXNvbHZlcik7CisgICAgICAgICAgICAgICAgZXJyb3IobW9uaXRvciwgIlVuYWJsZVRvUmVzb2x2ZUNvbXBvbmVudFR5cGUiLCByZXNvbHZlcik7CiAgICAgICAgICAgICAgICAgLy90aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbigiU3ByaW5nQXJ0aWZhY3RQcm9jZXNzb3I6IHVuYWJsZSB0byByZXNvbHZlIGNvbXBvbmVudFR5cGUgZm9yIFNwcmluZyBjb21wb25lbnQiKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc3ByaW5nSW1wbGVtZW50YXRpb24uc2V0Q29tcG9uZW50VHlwZShjb21wb25lbnRUeXBlKTsKICAgICAgICAgICAgICAgICBzcHJpbmdJbXBsZW1lbnRhdGlvbi5zZXRVbnJlc29sdmVkKGZhbHNlKTsKLSAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCiAgICAgICAgIH0gLy8gZW5kIGlmCiAKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbXBsZW1lbnRhdGlvbi9zcHJpbmcveG1sL1NwcmluZ1hNTEJlYW5EZWZpbml0aW9uTG9hZGVyLmphdmEgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3htbC9TcHJpbmdYTUxCZWFuRGVmaW5pdGlvbkxvYWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzZGMzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3htbC9TcHJpbmdYTUxCZWFuRGVmaW5pdGlvbkxvYWRlci5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcueG1sOworCitpbXBvcnQgamF2YS5uZXQuVVJMOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlByb2Nlc3NvckNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nQmVhbkVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nU0NBUHJvcGVydHlFbGVtZW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uc3ByaW5nLlNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuU3ByaW5nU0NBU2VydmljZUVsZW1lbnQ7CisKKy8qKgorICogVGhlIHV0aWxpdHkgaW50ZXJmYWNlIHRvIGxvYWQgU3ByaW5nIFhNTCBiZWFuIGRlZmluaXRpb25zIGludG8gYW4gYXBwbGljYXRpb24gY29udGV4dCAKKyAqLworcHVibGljIGludGVyZmFjZSBTcHJpbmdYTUxCZWFuRGVmaW5pdGlvbkxvYWRlciB7CisgICAgLyoqCisgICAgICogQHBhcmFtIHJlc291cmNlcworICAgICAqIEBwYXJhbSBzZXJ2aWNlRWxlbWVudHMKKyAgICAgKiBAcGFyYW0gcmVmZXJlbmNlRWxlbWVudHMKKyAgICAgKiBAcGFyYW0gcHJvcGVydHlFbGVtZW50cworICAgICAqIEBwYXJhbSBiZWFuRWxlbWVudHMKKyAgICAgKiBAcGFyYW0gY29udGV4dAorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBPYmplY3QgbG9hZChMaXN0PFVSTD4gcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBU2VydmljZUVsZW1lbnQ+IHNlcnZpY2VFbGVtZW50cywKKyAgICAgICAgICAgICAgICBMaXN0PFNwcmluZ1NDQVJlZmVyZW5jZUVsZW1lbnQ+IHJlZmVyZW5jZUVsZW1lbnRzLAorICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nU0NBUHJvcGVydHlFbGVtZW50PiBwcm9wZXJ0eUVsZW1lbnRzLAorICAgICAgICAgICAgICAgIExpc3Q8U3ByaW5nQmVhbkVsZW1lbnQ+IGJlYW5FbGVtZW50cywKKyAgICAgICAgICAgICAgICBQcm9jZXNzb3JDb250ZXh0IGNvbnRleHQpOworfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkgYi9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5JbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRkM2QyZS4uMDAwMDAwMAotLS0gYS9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5JbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSMgDQotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSMgDQotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0jIHVuZGVyIHRoZSBMaWNlbnNlLiANCi0NCi0jIEltcGxlbWVudGF0aW9uIGNsYXNzIGZvciB0aGUgaW1wbGVtZW50YXRpb24gZXh0ZW5zaW9uDQotb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5zcHJpbmcuaW52b2NhdGlvbi5TcHJpbmdJbXBsZW1lbnRhdGlvblByb3ZpZGVyRmFjdG9yeTttb2RlbD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLnNwcmluZy5TcHJpbmdJbXBsZW1lbnRhdGlvbg0KLQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2pheHJzL0dlbmVyYXRlZENsYXNzTG9hZGVyLmphdmEgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9qYXhycy9HZW5lcmF0ZWRDbGFzc0xvYWRlci5qYXZhCmluZGV4IGI2NzlmMzQuLjVkMjk2ZGYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2pheHJzL0dlbmVyYXRlZENsYXNzTG9hZGVyLmphdmEKKysrIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvamF4cnMvR2VuZXJhdGVkQ2xhc3NMb2FkZXIuamF2YQpAQCAtNiwxNSArNiwxNSBAQAogICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQogICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQogICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCisgKgogICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAorICoKICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCiAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQogICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICogdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmpheHJzOwpAQCAtNjcsNCArNjcsMjAgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY2xzLmdldEdlbmVyYXRlZENsYXNzKCk7CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgaWYoIGdldFBhcmVudCgpICE9IG51bGwgKSB7CisgICAgICAgICAgIHJldHVybiAiamF2YS5uZXQuVVJMQ2xhc3NMb2FkZXI6XG4iCisgICAgICAgICAgICAgICsgImhhc2hjb2RlOiAiICsgaGFzaENvZGUoKSArICJcbiIKKyAgICAgICAgICAgICAgKyAiVVJMczogIiArIGphdmEudXRpbC5BcnJheXMuYXNMaXN0KAorICAgICAgICAgICAgICAgICBnZXRVUkxzKCkgKSArICJcbiIKKyAgICAgICAgICAgICAgKyAicGFyZW50IHsgIiArIGdldFBhcmVudCgpICsgIiB9XG4iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICByZXR1cm4gImphdmEubmV0LlVSTENsYXNzTG9hZGVyOlxuIgorICAgICAgICAgICAgICArICJoYXNoY29kZTogIiArIGhhc2hDb2RlKCkgKyAiXG4iCisgICAgICAgICAgICAgICsgIlVSTHM6ICIgKyBqYXZhLnV0aWwuQXJyYXlzLmFzTGlzdCgKKyAgICAgICAgICAgICAgICAgZ2V0VVJMcygpICkgKyAiXG4iOworICAgICAgICB9CisgICAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9qYXhycy9Sb290UmVzb3VyY2VDbGFzc0dlbmVyYXRvci5qYXZhIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXhycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvamF4cnMvUm9vdFJlc291cmNlQ2xhc3NHZW5lcmF0b3IuamF2YQppbmRleCA4ZWUzNGU3Li5jM2QxZWM0IDEwMDY0NAotLS0gYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9qYXhycy9Sb290UmVzb3VyY2VDbGFzc0dlbmVyYXRvci5qYXZhCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4cnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2pheHJzL1Jvb3RSZXNvdXJjZUNsYXNzR2VuZXJhdG9yLmphdmEKQEAgLTYsMTUgKzYsMTUgQEAKICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAorICoKICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKKyAqCiAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCiAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgogICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5qYXhyczsKQEAgLTQ1LDcgKzQ1LDcgQEAKICAgICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9CiAgICAgICAgICAgICBpbnRlcmZhY2VOYW1lLnN1YnN0cmluZygwLCBpbmRleCkgKyAiLkdlbmVyYXRlZCIgKyBpbnRlcmZhY2VOYW1lLnN1YnN0cmluZyhpbmRleCArIDEpICsgIkltcGwiOwogCi0gICAgICAgIGJ5dGVbXSBjb250ZW50ID0gZ2VuZXJhdGUoaW50ZXJmYXplLCBwYXRoLCBjb25zdW1lcywgcHJvZHVjZXMpOworICAgICAgICBmaW5hbCBieXRlW10gY29udGVudCA9IGdlbmVyYXRlKGludGVyZmF6ZSwgcGF0aCwgY29uc3VtZXMsIHByb2R1Y2VzKTsKICAgICAgICAgQ2xhc3M8Pz4gY2xzID0gY2xhc3NMb2FkZXIuZ2V0R2VuZXJhdGVkQ2xhc3MoY2xhc3NOYW1lLCBjb250ZW50KTsKICAgICAgICAgcmV0dXJuIGNsczsKICAgICB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHdzL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXh3cy9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBjYTQ1ZjgyLi41YzM2NDIyIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHdzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3MvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTM4LDYgKzM4LDcgQEAKICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmludHJvc3BlY3Q7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmpheHdzO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYudXRpbDt2ZXJzaW9uPSIyLjAuMCIsDQorIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGw7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeTt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5vYXNpc29wZW4uc2NhO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbjt2ZXJzaW9uPSIyLjAuMCI7cmVzb2x1dGlvbjo9b3B0aW9uYWwsDQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXh3cy9wb20ueG1sIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXh3cy9wb20ueG1sCmluZGV4IDkzNWU2MTcuLmFmYTM4N2IgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3MvcG9tLnhtbAorKysgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHdzL3BvbS54bWwKQEAgLTIxMywxMSArMjEzLDM1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxGaWxlcz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxGaWxlPlN0b2NrRXhjZXB0aW9uVGVzdC53c2RsPC93c2RsRmlsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxGaWxlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RhbGVGaWxlPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3dzaW1wb3J0LXN5bmMuc3RhbGU8L3N0YWxlRmlsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlRGVzdERpcj4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9qYXh3cy1zb3VyY2U8L3NvdXJjZURlc3REaXI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZlcmJvc2U+ZmFsc2U8L3ZlcmJvc2U+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhub2NvbXBpbGU+dHJ1ZTwveG5vY29tcGlsZT4KICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+d3NpbXBvcnQtYXN5bmM8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXRlc3Qtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+d3NpbXBvcnQ8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhY2thZ2VOYW1lPmNvbS5leGFtcGxlLnN0b2NrLmFzeW5jPC9wYWNrYWdlTmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbERpcmVjdG9yeT4ke2Jhc2VkaXJ9L3NyYy90ZXN0L3Jlc291cmNlcy93c2RsPC93c2RsRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsRmlsZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsRmlsZT5TdG9ja0V4Y2VwdGlvblRlc3Qud3NkbDwvd3NkbEZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93c2RsRmlsZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRpbmdEaXJlY3Rvcnk+JHtiYXNlZGlyfS9zcmMvdGVzdC9yZXNvdXJjZXMvd3NkbDwvYmluZGluZ0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZGluZ0ZpbGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZGluZ0ZpbGU+YmluZGluZ3MueG1sPC9iaW5kaW5nRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JpbmRpbmdGaWxlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RhbGVGaWxlPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3dzaW1wb3J0LWFzeW5jLnN0YWxlPC9zdGFsZUZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZURlc3REaXI+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vamF4d3Mtc291cmNlPC9zb3VyY2VEZXN0RGlyPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJib3NlPmZhbHNlPC92ZXJib3NlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bm9jb21waWxlPnRydWU8L3hub2NvbXBpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPiAgICAgICAgICAgICAgICAgICAgCiAKICAgICAgICAgICAgICAgICAgICAgPCEtLQogICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXh3cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvamF4d3MvSkFYV1NBc3luY0ludGVyZmFjZVByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXh3cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvamF4d3MvSkFYV1NBc3luY0ludGVyZmFjZVByb2Nlc3Nvci5qYXZhCmluZGV4IDE1NWM4OWMuLmE4NjZjNWIgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2pheHdzL0pBWFdTQXN5bmNJbnRlcmZhY2VQcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9qYXh3cy9KQVhXU0FzeW5jSW50ZXJmYWNlUHJvY2Vzc29yLmphdmEKQEAgLTIwLDQ4ICsyMCw1NCBAQAogcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmpheHdzOwogCiBpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuUGFyYW1ldGVyaXplZFR5cGU7CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuVHlwZTsKIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKKworaW1wb3J0IGphdmF4LnhtbC53cy5Bc3luY0hhbmRsZXI7CitpbXBvcnQgamF2YXgueG1sLndzLlJlc3BvbnNlOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuRGF0YVR5cGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YU9wZXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmludHJvc3BlY3QuSmF2YUludGVyZmFjZVZpc2l0b3I7CiAKIHB1YmxpYyBjbGFzcyBKQVhXU0FzeW5jSW50ZXJmYWNlUHJvY2Vzc29yIGltcGxlbWVudHMgSmF2YUludGVyZmFjZVZpc2l0b3IgewogICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBBU1lOQyA9ICJBc3luYyI7CiAKICAgICBwdWJsaWMgSkFYV1NBc3luY0ludGVyZmFjZVByb2Nlc3NvcihFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5KSB7Ci0gICAgICAgIAogICAgIH0KLSAgICAKKwogICAgIHB1YmxpYyB2b2lkIHZpc2l0SW50ZXJmYWNlKEphdmFJbnRlcmZhY2UgamF2YUludGVyZmFjZSkgdGhyb3dzIEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gewogICAgICAgICBMaXN0PE9wZXJhdGlvbj4gdmFsaWRPcGVyYXRpb25zID0gbmV3IEFycmF5TGlzdDxPcGVyYXRpb24+KCk7CiAgICAgICAgIExpc3Q8T3BlcmF0aW9uPiBhc3luY09wZXJhdGlvbnMgPSBuZXcgQXJyYXlMaXN0PE9wZXJhdGlvbj4oKTsKLSAgICAgICAgCisKICAgICAgICAgdmFsaWRPcGVyYXRpb25zLmFkZEFsbChqYXZhSW50ZXJmYWNlLmdldE9wZXJhdGlvbnMoKSk7Ci0gICAgICAgIGZvcihPcGVyYXRpb24gbyA6IGphdmFJbnRlcmZhY2UuZ2V0T3BlcmF0aW9ucygpKSB7Ci0gICAgICAgICAgICBpZiAoISBvLmdldE5hbWUoKS5lbmRzV2l0aChBU1lOQykpIHsKLSAgICAgICAgICAgICAgICBPcGVyYXRpb24gb3AgPSBvOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGZvcihPcGVyYXRpb24gYXN5bmNPcCA6IGdldEFzeW5jT3BlcmF0aW9ucyhqYXZhSW50ZXJmYWNlLmdldE9wZXJhdGlvbnMoKSwgby5nZXROYW1lKCkpICkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaXNKQVhXU0FzeW5jUG9vbGluZ09wZXJhdGlvbihvcCwgYXN5bmNPcCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzSkFYV1NBc3luY0NhbGxiYWNrT3BlcmF0aW9uKG9wLCBhc3luY09wKSkgeworICAgICAgICBmb3IgKE9wZXJhdGlvbiBvIDogamF2YUludGVyZmFjZS5nZXRPcGVyYXRpb25zKCkpIHsKKyAgICAgICAgICAgIGlmICghby5nZXROYW1lKCkuZW5kc1dpdGgoQVNZTkMpKSB7CisgICAgICAgICAgICAgICAgSmF2YU9wZXJhdGlvbiBvcCA9IChKYXZhT3BlcmF0aW9uKW87CisgICAgICAgICAgICAgICAgaWYgKG9wLmdldEphdmFNZXRob2QoKS5nZXROYW1lKCkuZW5kc1dpdGgoQVNZTkMpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKE9wZXJhdGlvbiBhc3luY09wIDogZ2V0QXN5bmNPcGVyYXRpb25zKGphdmFJbnRlcmZhY2UuZ2V0T3BlcmF0aW9ucygpLCBvcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSkFYV1NBc3luY1Bvb2xpbmdPcGVyYXRpb24ob3AsIGFzeW5jT3ApIHx8IGlzSkFYV1NBc3luY0NhbGxiYWNrT3BlcmF0aW9uKG9wLCBhc3luY09wKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRPcGVyYXRpb25zLnJlbW92ZShhc3luY09wKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jT3BlcmF0aW9ucy5hZGQoYXN5bmNPcCk7Ci0gICAgICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IAorICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGphdmFJbnRlcmZhY2UuZ2V0T3BlcmF0aW9ucygpLmNsZWFyKCk7CiAgICAgICAgIGphdmFJbnRlcmZhY2UuZ2V0T3BlcmF0aW9ucygpLmFkZEFsbCh2YWxpZE9wZXJhdGlvbnMpOwotICAgICAgICAKKwogICAgICAgICBqYXZhSW50ZXJmYWNlLmdldEF0dHJpYnV0ZXMoKS5wdXQoIkpBWFdTLUFTWU5DLU9QRVJBVElPTlMiLCBhc3luY09wZXJhdGlvbnMpOwogICAgIH0KLSAgICAKKwogICAgIC8qKgogICAgICAqIFRoZSBhZGRpdGlvbmFsIGNsaWVudC1zaWRlIGFzeW5jaHJvbm91cyBwb2xsaW5nIGFuZCBjYWxsYmFjayBtZXRob2RzIGRlZmluZWQgYnkgSkFYLVdTIGFyZSByZWNvZ25pemVkIGluIGEgSmF2YSBpbnRlcmZhY2UgYXMgZm9sbG93czoKICAgICAgKiBGb3IgZWFjaCBtZXRob2QgTSBpbiB0aGUgaW50ZXJmYWNlLCBpZiBhbm90aGVyIG1ldGhvZCBQIGluIHRoZSBpbnRlcmZhY2UgaGFzCkBAIC03NSw1MyArODEsNTkgQEAKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0pBWFdTQXN5bmNQb29saW5nT3BlcmF0aW9uKE9wZXJhdGlvbiBvcGVyYXRpb24sIE9wZXJhdGlvbiBhc3luY09wZXJhdGlvbikgewotICAgICAgICAvL2EgbWV0aG9kIG5hbWUgdGhhdCBpcyBNJ3MgbWV0aG9kIG5hbWUgd2l0aCB0aGUgY2hhcmFjdGVycyAiQXN5bmMiIGFwcGVuZGVkCi0gICAgICAgIGlmIChvcGVyYXRpb24uZ2V0TmFtZSgpLmVuZHNXaXRoKEFTWU5DKSkgeworCisgICAgICAgIGlmIChhc3luY09wZXJhdGlvbi5nZXRPdXRwdXRUeXBlKCkgPT0gbnVsbCB8fCBSZXNwb25zZS5jbGFzcyAhPSBhc3luY09wZXJhdGlvbi5nZXRPdXRwdXRUeXBlKCkuZ2V0UGh5c2ljYWwoKSkgeworICAgICAgICAgICAgLy8gVGhlIHJldHVybiB0eXBlIGlzIG5vdCBSZXNwb25zZTxUPgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCEgYXN5bmNPcGVyYXRpb24uZ2V0TmFtZSgpLmVuZHNXaXRoKEFTWU5DKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZighIGFzeW5jT3BlcmF0aW9uLmdldE5hbWUoKS5lcXVhbHMob3BlcmF0aW9uLmdldE5hbWUoKSArIEFTWU5DKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICAvL3RoZSBzYW1lIHBhcmFtZXRlciBzaWduYXR1cmUgYXMgTQogICAgICAgICBMaXN0PERhdGFUeXBlPiBvcGVyYXRpb25JbnB1dFR5cGUgPSBvcGVyYXRpb24uZ2V0SW5wdXRUeXBlKCkuZ2V0TG9naWNhbCgpOwogICAgICAgICBMaXN0PERhdGFUeXBlPiBhc3luY09wZXJhdGlvbklucHV0VHlwZSA9IGFzeW5jT3BlcmF0aW9uLmdldElucHV0VHlwZSgpLmdldExvZ2ljYWwoKTsKICAgICAgICAgaW50IHNpemUgPSBvcGVyYXRpb25JbnB1dFR5cGUuc2l6ZSgpOworICAgICAgICBpZiAoYXN5bmNPcGVyYXRpb25JbnB1dFR5cGUuc2l6ZSgpICE9IHNpemUpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgaWYgKCFpc0NvbXBhdGlibGUob3BlcmF0aW9uSW5wdXRUeXBlLmdldChpKSwgYXN5bmNPcGVyYXRpb25JbnB1dFR5cGUuZ2V0KGkpKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvL2EgcmV0dXJuIHR5cGUgb2YgUmVzcG9uc2U8Uj4gd2hlcmUgUiBpcyB0aGUgcmV0dXJuIHR5cGUgb2YgTQogICAgICAgICBEYXRhVHlwZTw/PiBvcGVyYXRpb25PdXRwdXRUeXBlID0gb3BlcmF0aW9uLmdldE91dHB1dFR5cGUoKTsKICAgICAgICAgRGF0YVR5cGU8Pz4gYXN5bmNPcGVyYXRpb25PdXRwdXRUeXBlID0gYXN5bmNPcGVyYXRpb24uZ2V0T3V0cHV0VHlwZSgpOwotICAgICAgICAKKwogICAgICAgICBpZiAob3BlcmF0aW9uT3V0cHV0VHlwZSAhPSBudWxsICYmIGFzeW5jT3BlcmF0aW9uT3V0cHV0VHlwZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICBQYXJhbWV0ZXJpemVkVHlwZSBhc3luY1JldHVyblR5cGUgPSAgKFBhcmFtZXRlcml6ZWRUeXBlKSBhc3luY09wZXJhdGlvbk91dHB1dFR5cGUuZ2V0R2VuZXJpY1R5cGUoKTsKLSAgICAgICAgICAgIENsYXNzPD8+IGFzeW5jUmV0dXJuVHlwZUNsYXNzID0gKENsYXNzPD8+KWFzeW5jUmV0dXJuVHlwZS5nZXRSYXdUeXBlKCk7Ci0gICAgICAgICAgICBpZihhc3luY1JldHVyblR5cGVDbGFzcy5nZXROYW1lKCkuZXF1YWxzKCJqYXZheC54bWwud3MuUmVzcG9uc2UiKSkgeworICAgICAgICAgICAgQ2xhc3M8Pz4gYXN5bmNSZXR1cm5UeXBlQ2xhc3MgPSAoQ2xhc3M8Pz4pYXN5bmNPcGVyYXRpb25PdXRwdXRUeXBlLmdldFBoeXNpY2FsKCk7CisgICAgICAgICAgICBpZiAoYXN5bmNSZXR1cm5UeXBlQ2xhc3MgPT0gUmVzcG9uc2UuY2xhc3MpIHsKICAgICAgICAgICAgICAgICAvL25vdyBjaGVjayB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIFJlc3BvbnNlPFI+IHdpdGggUgotICAgICAgICAgICAgICAgIENsYXNzPD8+IHJldHVyblR5cGUgPSAgb3BlcmF0aW9uT3V0cHV0VHlwZS5nZXRQaHlzaWNhbCgpOwotICAgICAgICAgICAgICAgIENsYXNzPD8+IGFzeW5jQWN0dWFsUmV0dXJuVHlwZUNsYXNzID0gKENsYXNzPD8+KSBhc3luY1JldHVyblR5cGUuZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpWzBdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYocmV0dXJuVHlwZSA9PSBhc3luY0FjdHVhbFJldHVyblR5cGVDbGFzcyB8fAotICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlLmlzUHJpbWl0aXZlKCkgJiYgcHJpbWl0aXZlQXNzaWduYWJsZShyZXR1cm5UeXBlLGFzeW5jQWN0dWFsUmV0dXJuVHlwZUNsYXNzKSkgewotICAgICAgICAgICAgICAgICAgICAvL3ZhbGlkCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsgCi0gICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIENsYXNzPD8+IHJldHVyblR5cGUgPSBvcGVyYXRpb25PdXRwdXRUeXBlLmdldFBoeXNpY2FsKCk7CisgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gYXN5bmNBY3R1YWxSZXR1cm5UeXBlQ2xhc3MgPSBPYmplY3QuY2xhc3M7CisgICAgICAgICAgICAgICAgaWYgKGFzeW5jT3BlcmF0aW9uT3V0cHV0VHlwZS5nZXRHZW5lcmljVHlwZSgpIGluc3RhbmNlb2YgUGFyYW1ldGVyaXplZFR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyaXplZFR5cGUgYXN5bmNSZXR1cm5UeXBlID0gKFBhcmFtZXRlcml6ZWRUeXBlKWFzeW5jT3BlcmF0aW9uT3V0cHV0VHlwZS5nZXRHZW5lcmljVHlwZSgpOworICAgICAgICAgICAgICAgICAgICBhc3luY0FjdHVhbFJldHVyblR5cGVDbGFzcyA9IChDbGFzczw/Pilhc3luY1JldHVyblR5cGUuZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpWzBdOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24uZ2V0V3JhcHBlcigpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJldHVybiB0eXBlIGNvdWxkIGJlIHRoZSB3cmFwcGVyIHR5cGUgcGVyIEpBWC1XUyBzcGVjIAorICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiB3cmFwcGVyQ2xhc3MgPSBvcGVyYXRpb24uZ2V0V3JhcHBlcigpLmdldE91dHB1dFdyYXBwZXJDbGFzcygpOworICAgICAgICAgICAgICAgICAgICBpZiAod3JhcHBlckNsYXNzID09IGFzeW5jQWN0dWFsUmV0dXJuVHlwZUNsYXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocmV0dXJuVHlwZSA9PSBhc3luY0FjdHVhbFJldHVyblR5cGVDbGFzcyB8fCByZXR1cm5UeXBlLmlzUHJpbWl0aXZlKCkKKyAgICAgICAgICAgICAgICAgICAgJiYgcHJpbWl0aXZlQXNzaWduYWJsZShyZXR1cm5UeXBlLCBhc3luY0FjdHVhbFJldHVyblR5cGVDbGFzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgCisKICAgICAvKioKICAgICAgKiBGb3IgZWFjaCBtZXRob2QgTSBpbiB0aGUgaW50ZXJmYWNlLCBpZiBhbm90aGVyIG1ldGhvZCBDIGluIHRoZSBpbnRlcmZhY2UgaGFzCiAgICAgICogYSkgYSBtZXRob2QgbmFtZSB0aGF0IGlzIE0ncyBtZXRob2QgbmFtZSB3aXRoIHRoZSBjaGFyYWN0ZXJzICJBc3luYyIgYXBwZW5kZWQsIGFuZApAQCAtMTM2LDcxICsxNDgsNTcgQEAKICAgICAgKiBAcmV0dXJuCiAgICAgICovCiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0pBWFdTQXN5bmNDYWxsYmFja09wZXJhdGlvbihPcGVyYXRpb24gb3BlcmF0aW9uLCBPcGVyYXRpb24gYXN5bmNPcGVyYXRpb24pIHsKLSAgICAgICAgLy9hIG1ldGhvZCBuYW1lIHRoYXQgaXMgTSdzIG1ldGhvZCBuYW1lIHdpdGggdGhlIGNoYXJhY3RlcnMgIkFzeW5jIiBhcHBlbmRlZAotICAgICAgICBpZiAob3BlcmF0aW9uLmdldE5hbWUoKS5lbmRzV2l0aChBU1lOQykpIHsKKworICAgICAgICBpZiAoYXN5bmNPcGVyYXRpb24uZ2V0T3V0cHV0VHlwZSgpID09IG51bGwgfHwgRnV0dXJlLmNsYXNzICE9IGFzeW5jT3BlcmF0aW9uLmdldE91dHB1dFR5cGUoKS5nZXRQaHlzaWNhbCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgaXMgbm90IEZ1dHVyZTw/PgogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCEgYXN5bmNPcGVyYXRpb24uZ2V0TmFtZSgpLmVuZHNXaXRoKEFTWU5DKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZighIGFzeW5jT3BlcmF0aW9uLmdldE5hbWUoKS5lcXVhbHMob3BlcmF0aW9uLmdldE5hbWUoKSArIEFTWU5DKSkgewotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAogICAgICAgICAvL2EgcGFyYW1ldGVyIHNpZ25hdHVyZSB0aGF0IGlzIE0ncyBwYXJhbWV0ZXIgc2lnbmF0dXJlIAogICAgICAgICAvL3dpdGggYW4gYWRkaXRpb25hbCBmaW5hbCBwYXJhbWV0ZXIgb2YgdHlwZSBBc3luY0hhbmRsZXI8Uj4gd2hlcmUgUiBpcyB0aGUgcmV0dXJuIHR5cGUgb2YgTSwgYW5kCiAgICAgICAgIExpc3Q8RGF0YVR5cGU+IG9wZXJhdGlvbklucHV0VHlwZSA9IG9wZXJhdGlvbi5nZXRJbnB1dFR5cGUoKS5nZXRMb2dpY2FsKCk7CiAgICAgICAgIExpc3Q8RGF0YVR5cGU+IGFzeW5jT3BlcmF0aW9uSW5wdXRUeXBlID0gYXN5bmNPcGVyYXRpb24uZ2V0SW5wdXRUeXBlKCkuZ2V0TG9naWNhbCgpOwogICAgICAgICBpbnQgc2l6ZSA9IG9wZXJhdGlvbklucHV0VHlwZS5zaXplKCk7CisgICAgICAgIGlmIChhc3luY09wZXJhdGlvbklucHV0VHlwZS5zaXplKCkgIT0gc2l6ZSArIDEpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgaWYgKCFpc0NvbXBhdGlibGUob3BlcmF0aW9uSW5wdXRUeXBlLmdldChpKSwgYXN5bmNPcGVyYXRpb25JbnB1dFR5cGUuZ2V0KGkpKSkgewogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYoYXN5bmNPcGVyYXRpb25JbnB1dFR5cGUuc2l6ZSgpID09IHNpemUgKyAxKSB7Ci0gICAgICAgICAgICBQYXJhbWV0ZXJpemVkVHlwZSBhc3luY0xhc3RQYXJhbWV0ZXJUeXBlID0gIChQYXJhbWV0ZXJpemVkVHlwZSkgYXN5bmNPcGVyYXRpb25JbnB1dFR5cGUuZ2V0KHNpemUgKyAxKS5nZXRHZW5lcmljVHlwZSgpOwotICAgICAgICAgICAgQ2xhc3M8Pz4gYXN5bmNMYXN0UGFyYW1ldGVyVHlwZUNsYXNzID0gKENsYXNzPD8+KWFzeW5jTGFzdFBhcmFtZXRlclR5cGUuZ2V0UmF3VHlwZSgpOwotICAgICAgICAgICAgaWYoYXN5bmNMYXN0UGFyYW1ldGVyVHlwZUNsYXNzLmdldE5hbWUoKS5lcXVhbHMoImphdmF4LnhtbC53cy5Bc3luY0hhbmRsZXIiKSkgewotICAgICAgICAgICAgICAvL25vdyBjaGVjayB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIEFzeW5jSGFuZGxlcjxSPiB3aXRoIFIKLSAgICAgICAgICAgICAgICBDbGFzczw/PiByZXR1cm5UeXBlID0gIG9wZXJhdGlvbi5nZXRPdXRwdXRUeXBlKCkuZ2V0UGh5c2ljYWwoKTsKLSAgICAgICAgICAgICAgICBDbGFzczw/PiBhc3luY0FjdHVhbExhc3RQYXJhbWV0ZXJUeXBlQ2xhc3MgPSAoQ2xhc3M8Pz4pIGFzeW5jTGFzdFBhcmFtZXRlclR5cGUuZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpWzBdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYocmV0dXJuVHlwZSA9PSBhc3luY0FjdHVhbExhc3RQYXJhbWV0ZXJUeXBlQ2xhc3MgfHwKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZS5pc1ByaW1pdGl2ZSgpICYmIHByaW1pdGl2ZUFzc2lnbmFibGUocmV0dXJuVHlwZSxhc3luY0FjdHVhbExhc3RQYXJhbWV0ZXJUeXBlQ2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vdmFsaWQKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvL2EgcmV0dXJuIHR5cGUgb2YgUmVzcG9uc2U8Uj4gd2hlcmUgUiBpcyB0aGUgcmV0dXJuIHR5cGUgb2YgTQotICAgICAgICBEYXRhVHlwZTw/PiBvcGVyYXRpb25PdXRwdXRUeXBlID0gb3BlcmF0aW9uLmdldE91dHB1dFR5cGUoKTsKLSAgICAgICAgRGF0YVR5cGU8Pz4gYXN5bmNPcGVyYXRpb25PdXRwdXRUeXBlID0gYXN5bmNPcGVyYXRpb24uZ2V0T3V0cHV0VHlwZSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKG9wZXJhdGlvbk91dHB1dFR5cGUgIT0gbnVsbCAmJiBhc3luY09wZXJhdGlvbk91dHB1dFR5cGUgIT0gbnVsbCkgewotICAgICAgICAgICAgUGFyYW1ldGVyaXplZFR5cGUgYXN5bmNSZXR1cm5UeXBlID0gIChQYXJhbWV0ZXJpemVkVHlwZSkgYXN5bmNPcGVyYXRpb25PdXRwdXRUeXBlLmdldEdlbmVyaWNUeXBlKCk7Ci0gICAgICAgICAgICBDbGFzczw/PiBhc3luY1JldHVyblR5cGVDbGFzcyA9IChDbGFzczw/Pilhc3luY1JldHVyblR5cGUuZ2V0UmF3VHlwZSgpOwotICAgICAgICAgICAgaWYoYXN5bmNSZXR1cm5UeXBlQ2xhc3MuZ2V0TmFtZSgpLmVxdWFscygiamF2YXgueG1sLndzLlJlc3BvbnNlIikpIHsKLSAgICAgICAgICAgICAgICAvL25vdyBjaGVjayB0aGUgYWN0dWFsIHR5cGUgb2YgdGhlIFJlc3BvbnNlPFI+IHdpdGggUgotICAgICAgICAgICAgICAgIENsYXNzPD8+IHJldHVyblR5cGUgPSAgb3BlcmF0aW9uT3V0cHV0VHlwZS5nZXRQaHlzaWNhbCgpOwotICAgICAgICAgICAgICAgIENsYXNzPD8+IGFzeW5jQWN0dWFsUmV0dXJuVHlwZUNsYXNzID0gKENsYXNzPD8+KSBhc3luY1JldHVyblR5cGUuZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpWzBdOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYocmV0dXJuVHlwZSA9PSBhc3luY0FjdHVhbFJldHVyblR5cGVDbGFzcyB8fAotICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlLmlzUHJpbWl0aXZlKCkgJiYgcHJpbWl0aXZlQXNzaWduYWJsZShyZXR1cm5UeXBlLGFzeW5jQWN0dWFsUmV0dXJuVHlwZUNsYXNzKSkgewotICAgICAgICAgICAgICAgICAgICAvL3ZhbGlkCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIFR5cGUgZ2VuZXJpY1BhcmFtVHlwZSA9IGFzeW5jT3BlcmF0aW9uSW5wdXRUeXBlLmdldChzaXplKS5nZXRHZW5lcmljVHlwZSgpOworCisgICAgICAgIENsYXNzPD8+IGFzeW5jTGFzdFBhcmFtZXRlclR5cGVDbGFzcyA9IGFzeW5jT3BlcmF0aW9uSW5wdXRUeXBlLmdldChzaXplKS5nZXRQaHlzaWNhbCgpOworICAgICAgICBpZiAoYXN5bmNMYXN0UGFyYW1ldGVyVHlwZUNsYXNzID09IEFzeW5jSGFuZGxlci5jbGFzcykgeworICAgICAgICAgICAgLy9ub3cgY2hlY2sgdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSBBc3luY0hhbmRsZXI8Uj4gd2l0aCBSCisgICAgICAgICAgICBDbGFzczw/PiByZXR1cm5UeXBlID0gb3BlcmF0aW9uLmdldE91dHB1dFR5cGUoKS5nZXRQaHlzaWNhbCgpOworICAgICAgICAgICAgQ2xhc3M8Pz4gYXN5bmNBY3R1YWxMYXN0UGFyYW1ldGVyVHlwZUNsYXNzID0gT2JqZWN0LmNsYXNzOworICAgICAgICAgICAgaWYgKGdlbmVyaWNQYXJhbVR5cGUgaW5zdGFuY2VvZiBQYXJhbWV0ZXJpemVkVHlwZSkgeworICAgICAgICAgICAgICAgIFBhcmFtZXRlcml6ZWRUeXBlIGFzeW5jTGFzdFBhcmFtZXRlclR5cGUgPSAoUGFyYW1ldGVyaXplZFR5cGUpZ2VuZXJpY1BhcmFtVHlwZTsKKyAgICAgICAgICAgICAgICBhc3luY0FjdHVhbExhc3RQYXJhbWV0ZXJUeXBlQ2xhc3MgPSAoQ2xhc3M8Pz4pYXN5bmNMYXN0UGFyYW1ldGVyVHlwZS5nZXRBY3R1YWxUeXBlQXJndW1lbnRzKClbMF07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChvcGVyYXRpb24uZ2V0V3JhcHBlcigpICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgY291bGQgYmUgdGhlIHdyYXBwZXIgdHlwZSBwZXIgSkFYLVdTIHNwZWMgCisgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gd3JhcHBlckNsYXNzID0gb3BlcmF0aW9uLmdldFdyYXBwZXIoKS5nZXRPdXRwdXRXcmFwcGVyQ2xhc3MoKTsKKyAgICAgICAgICAgICAgICBpZiAod3JhcHBlckNsYXNzID09IGFzeW5jQWN0dWFsTGFzdFBhcmFtZXRlclR5cGVDbGFzcykgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChyZXR1cm5UeXBlID09IGFzeW5jQWN0dWFsTGFzdFBhcmFtZXRlclR5cGVDbGFzcyB8fCByZXR1cm5UeXBlLmlzUHJpbWl0aXZlKCkKKyAgICAgICAgICAgICAgICAmJiBwcmltaXRpdmVBc3NpZ25hYmxlKHJldHVyblR5cGUsIGFzeW5jQWN0dWFsTGFzdFBhcmFtZXRlclR5cGVDbGFzcykpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gICAgCi0gICAgCisgICAgfQorCiAgICAgLyoqCiAgICAgICogR2V0IG9wZXJhdGlvbiBieSBuYW1lCiAgICAgICogCkBAIC0yMDgsMTggKzIwNiwzMCBAQAogICAgICAqIEBwYXJhbSBvcGVyYXRpb25OYW1lCiAgICAgICogQHJldHVybgogICAgICAqLwotICAgIHByaXZhdGUgc3RhdGljIExpc3Q8T3BlcmF0aW9uPiBnZXRBc3luY09wZXJhdGlvbnMoTGlzdDxPcGVyYXRpb24+IG9wZXJhdGlvbnMsIFN0cmluZyBvcGVyYXRpb25OYW1lKSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgTGlzdDxPcGVyYXRpb24+IGdldEFzeW5jT3BlcmF0aW9ucyhMaXN0PE9wZXJhdGlvbj4gb3BlcmF0aW9ucywgSmF2YU9wZXJhdGlvbiBvcCkgewogICAgICAgICBMaXN0PE9wZXJhdGlvbj4gcmV0dXJuT3BlcmF0aW9ucyA9IG5ldyBBcnJheUxpc3Q8T3BlcmF0aW9uPigpOwogCi0gICAgICAgIGZvcihPcGVyYXRpb24gbyA6IG9wZXJhdGlvbnMpIHsKLSAgICAgICAgICAgIGlmKG8uZ2V0TmFtZSgpLmVxdWFscyhvcGVyYXRpb25OYW1lICsgQVNZTkMpKSB7CisgICAgICAgIGZvciAoT3BlcmF0aW9uIG8gOiBvcGVyYXRpb25zKSB7CisgICAgICAgICAgICBpZiAobyA9PSBvcCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIG9wZXJhdGlvbk5hbWUgPSBvcC5nZXROYW1lKCk7CisgICAgICAgICAgICBpZiAoby5nZXROYW1lKCkuZXF1YWxzKG9wZXJhdGlvbk5hbWUpKSB7CisgICAgICAgICAgICAgICAgLy8gQXN5bmMgb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIG5hbWUgd2hlbiBAV2ViTWV0aG9kIGlzIHByZXNlbnQgCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICBKYXZhT3BlcmF0aW9uIGpvcCA9IChKYXZhT3BlcmF0aW9uKW87CisgICAgICAgICAgICAgICAgaWYgKG9wLmdldEphdmFNZXRob2QoKS5nZXROYW1lKCkuZXF1YWxzKGpvcC5nZXRKYXZhTWV0aG9kKCkuZ2V0TmFtZSgpICsgQVNZTkMpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybk9wZXJhdGlvbnMuYWRkKG8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldHVybk9wZXJhdGlvbnMuYWRkKG8pOworICAgICAgICAgICAgfSBlbHNlIGlmIChvLmdldE5hbWUoKS5lcXVhbHMob3BlcmF0aW9uTmFtZSArIEFTWU5DKSkgewogICAgICAgICAgICAgICAgIHJldHVybk9wZXJhdGlvbnMuYWRkKG8pOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIHJldHVybiByZXR1cm5PcGVyYXRpb25zOwogICAgIH0KLSAgICAKIAogICAgIC8qKgogICAgICAqIENoZWNrIGlmIHR3byBvcGVyYXRpb24gcGFyYW1ldGVycyBhcmUgY29tcGF0aWJsZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXh3cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvamF4d3MvSkFYV1NKYXZhSW50ZXJmYWNlUHJvY2Vzc29yLmphdmEgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9qYXh3cy9KQVhXU0phdmFJbnRlcmZhY2VQcm9jZXNzb3IuamF2YQppbmRleCAxZDZiMDAyLi43MzVmOGNmIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9qYXh3cy9KQVhXU0phdmFJbnRlcmZhY2VQcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9qYXh3cy9KQVhXU0phdmFJbnRlcmZhY2VQcm9jZXNzb3IuamF2YQpAQCAtMzEsOCArMzEsOCBAQAogaW1wb3J0IGphdmF4Lmp3cy5PbmV3YXk7CiBpbXBvcnQgamF2YXguandzLldlYk1ldGhvZDsKIGltcG9ydCBqYXZheC5qd3MuV2ViUGFyYW07CitpbXBvcnQgamF2YXguandzLldlYlBhcmFtLk1vZGU7CiBpbXBvcnQgamF2YXguandzLldlYlJlc3VsdDsKLWltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsKIGltcG9ydCBqYXZheC5qd3Muc29hcC5TT0FQQmluZGluZzsKIGltcG9ydCBqYXZheC5qd3Muc29hcC5TT0FQQmluZGluZy5TdHlsZTsKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwpAQCAtNDAsNiArNDAsNyBAQAogaW1wb3J0IGphdmF4LnhtbC53cy5SZXNwb25zZVdyYXBwZXI7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRmFjdG9yeUV4dGVuc2lvblBvaW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5VdGlsaXR5RXh0ZW5zaW9uUG9pbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy5EYXRhQmluZGluZ0V4dGVuc2lvblBvaW50OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGF0YWJpbmRpbmcuamF2YWJlYW5zLkphdmFFeGNlcHRpb25EYXRhQmluZGluZzsKQEAgLTQ5LDE1ICs1MCwxNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkZhdWx0RXhjZXB0aW9uTWFwcGVyOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludmFsaWRJbnRlcmZhY2VFeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLlBhcmFtZXRlck1vZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuaW1wbC5EYXRhVHlwZUltcGw7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhT3BlcmF0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuaW50cm9zcGVjdC5KYXZhSW50ZXJmYWNlVmlzaXRvcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsLkVsZW1lbnRJbmZvOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLnV0aWwuSmF2YVhNTE1hcHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsLlR5cGVJbmZvOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLnV0aWwuV3JhcHBlckluZm87CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYudXRpbC5YTUxUeXBlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGwuV1NETEZhY3Rvcnk7CiAKIC8qKgogICogSW50cm9zcGVjdCB0aGUgamF2YSBjbGFzcy9pbnRlcmZhY2Ugd2l0aCBKU1ItMTgxIGFuZCBKQVhXUyBhbm5vdGF0aW9ucwpAQCAtNzAsMjggKzczLDM1IEBACiAgICAgcHJpdmF0ZSBEYXRhQmluZGluZ0V4dGVuc2lvblBvaW50IGRhdGFCaW5kaW5nRXh0ZW5zaW9uUG9pbnQ7CiAgICAgcHJpdmF0ZSBGYXVsdEV4Y2VwdGlvbk1hcHBlciBmYXVsdEV4Y2VwdGlvbk1hcHBlcjsKICAgICBwcml2YXRlIFhNTEFkYXB0ZXJFeHRlbnNpb25Qb2ludCB4bWxBZGFwdGVyRXh0ZW5zaW9uUG9pbnQ7CisgICAgcHJvdGVjdGVkIEphdmFJbnRlcmZhY2VGYWN0b3J5IGphdmFJbnRlcmZhY2VGYWN0b3J5OworICAgIHByaXZhdGUgV1NETEZhY3Rvcnkgd3NkbEZhY3Rvcnk7CiAKIAogICAgIHB1YmxpYyBKQVhXU0phdmFJbnRlcmZhY2VQcm9jZXNzb3IoRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSByZWdpc3RyeSkgewogICAgICAgICBkYXRhQmluZGluZ0V4dGVuc2lvblBvaW50ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoRGF0YUJpbmRpbmdFeHRlbnNpb25Qb2ludC5jbGFzcyk7CiAgICAgICAgIGZhdWx0RXhjZXB0aW9uTWFwcGVyID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoVXRpbGl0eUV4dGVuc2lvblBvaW50LmNsYXNzKS5nZXRVdGlsaXR5KEZhdWx0RXhjZXB0aW9uTWFwcGVyLmNsYXNzKTsKICAgICAgICAgeG1sQWRhcHRlckV4dGVuc2lvblBvaW50ID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoWE1MQWRhcHRlckV4dGVuc2lvblBvaW50LmNsYXNzKTsKLSAgICB9Ci0gICAgCi0gICAgCi0gICAgcHVibGljIEpBWFdTSmF2YUludGVyZmFjZVByb2Nlc3NvcihEYXRhQmluZGluZ0V4dGVuc2lvblBvaW50IGRhdGFCaW5kaW5nRXh0ZW5zaW9uUG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGYXVsdEV4Y2VwdGlvbk1hcHBlciBmYXVsdEV4Y2VwdGlvbk1hcHBlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTEFkYXB0ZXJFeHRlbnNpb25Qb2ludCB4bWxBZGFwdGVycykgewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLmRhdGFCaW5kaW5nRXh0ZW5zaW9uUG9pbnQgPSBkYXRhQmluZGluZ0V4dGVuc2lvblBvaW50OwotICAgICAgICB0aGlzLmZhdWx0RXhjZXB0aW9uTWFwcGVyID0gZmF1bHRFeGNlcHRpb25NYXBwZXI7Ci0gICAgICAgIHRoaXMueG1sQWRhcHRlckV4dGVuc2lvblBvaW50ID0geG1sQWRhcHRlcnM7CisgICAgICAgIAorICAgICAgICBGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgZmFjdG9yaWVzID0gcmVnaXN0cnkuZ2V0RXh0ZW5zaW9uUG9pbnQoRmFjdG9yeUV4dGVuc2lvblBvaW50LmNsYXNzKTsKKyAgICAgICAgdGhpcy5qYXZhSW50ZXJmYWNlRmFjdG9yeSA9IGZhY3Rvcmllcy5nZXRGYWN0b3J5KEphdmFJbnRlcmZhY2VGYWN0b3J5LmNsYXNzKTsKKyAgICAgICAgdGhpcy53c2RsRmFjdG9yeSA9IGZhY3Rvcmllcy5nZXRGYWN0b3J5KFdTRExGYWN0b3J5LmNsYXNzKTsKICAgICB9CiAKKyAgCiAgICAgcHVibGljIEpBWFdTSmF2YUludGVyZmFjZVByb2Nlc3NvcigpIHsKICAgICAgICAgc3VwZXIoKTsKICAgICB9CiAKKyAgICBwcml2YXRlIFBhcmFtZXRlck1vZGUgZ2V0UGFyYW1ldGVyTW9kZShXZWJQYXJhbS5Nb2RlIG1vZGUpIHsKKyAgICAJaWYgKG1vZGUgPT0gTW9kZS5JTk9VVCkgeworICAgIAkJcmV0dXJuIFBhcmFtZXRlck1vZGUuSU5PVVQ7CisgICAgCX0gZWxzZSBpZiAobW9kZSA9PSBNb2RlLk9VVCkgeworICAgIAkJcmV0dXJuIFBhcmFtZXRlck1vZGUuT1VUOworICAgIAl9IGVsc2UgeworICAgIAkJcmV0dXJuIFBhcmFtZXRlck1vZGUuSU47CisgICAgCX0KKyAgICB9CisgICAgCiAgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGNhcGl0YWxpemUoU3RyaW5nIG5hbWUpIHsKICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCB8fCBuYW1lLmxlbmd0aCgpID09IDApIHsKICAgICAgICAgICAgIHJldHVybiBuYW1lOwpAQCAtMTAzLDE2ICsxMTMsMTAgQEAKICAgICBwdWJsaWMgdm9pZCB2aXNpdEludGVyZmFjZShKYXZhSW50ZXJmYWNlIGNvbnRyYWN0KSB0aHJvd3MgSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbiB7CiAKICAgICAgICAgZmluYWwgQ2xhc3M8Pz4gY2xhenogPSBjb250cmFjdC5nZXRKYXZhQ2xhc3MoKTsKLSAgICAgICAgV2ViU2VydmljZSB3ZWJTZXJ2aWNlID0gY2xhenouZ2V0QW5ub3RhdGlvbihXZWJTZXJ2aWNlLmNsYXNzKTsKLSAgICAgICAgU3RyaW5nIHRucyA9IEphdmFYTUxNYXBwZXIuZ2V0TmFtZXNwYWNlKGNsYXp6KTsKLSAgICAgICAgU3RyaW5nIGxvY2FsTmFtZSA9IGNsYXp6LmdldFNpbXBsZU5hbWUoKTsKLSAgICAgICAgaWYgKHdlYlNlcnZpY2UgIT0gbnVsbCkgewotICAgICAgICAgICAgdG5zID0gZ2V0VmFsdWUod2ViU2VydmljZS50YXJnZXROYW1lc3BhY2UoKSwgdG5zKTsKLSAgICAgICAgICAgIGxvY2FsTmFtZSA9IGdldFZhbHVlKHdlYlNlcnZpY2UubmFtZSgpLCBsb2NhbE5hbWUpOwotICAgICAgICAgICAgY29udHJhY3Quc2V0UU5hbWUobmV3IFFOYW1lKHRucywgbG9jYWxOYW1lKSk7Ci0gICAgICAgICAgICAvLyBNYXJrIFNFSSBhcyBSZW1vdGFibGUKLSAgICAgICAgICAgIGNvbnRyYWN0LnNldFJlbW90YWJsZSh0cnVlKTsKLSAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgY29udHJhY3QgPSBKQVhXU1V0aWxzLmNvbmZpZ3VyZUphdmFJbnRlcmZhY2UoY29udHJhY3QsIGNsYXp6KTsKKyAgICAgICAgU3RyaW5nIHRucyA9IGNvbnRyYWN0LmdldFFOYW1lKCkuZ2V0TmFtZXNwYWNlVVJJKCk7ICAgICAgCisgICAgICAgIAogICAgICAgICBpZiAoIWNvbnRyYWN0LmlzUmVtb3RhYmxlKCkpIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTc4LDYgKzE4Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9naWNhbCBpbnN0YW5jZW9mIFhNTFR5cGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFhNTFR5cGUpbG9naWNhbCkuc2V0RWxlbWVudE5hbWUoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24uZ2V0UGFyYW1ldGVyTW9kZXMoKS5zZXQoaSwgZ2V0UGFyYW1ldGVyTW9kZShwYXJhbS5tb2RlKCkpKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBXZWJSZXN1bHQgcmVzdWx0ID0gbWV0aG9kLmdldEFubm90YXRpb24oV2ViUmVzdWx0LmNsYXNzKTsKQEAgLTI4Nyw2ICsyOTIsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICgoWE1MVHlwZSlsb2dpY2FsKS5nZXRUeXBlTmFtZSgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlucHV0RWxlbWVudHMuYWRkKG5ldyBFbGVtZW50SW5mbyhlbGVtZW50LCBuZXcgVHlwZUluZm8odHlwZSwgZmFsc2UsIG51bGwpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbSAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIAlvcGVyYXRpb24uZ2V0UGFyYW1ldGVyTW9kZXMoKS5zZXQoaSwgZ2V0UGFyYW1ldGVyTW9kZShwYXJhbS5tb2RlKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIExpc3Q8RWxlbWVudEluZm8+IG91dHB1dEVsZW1lbnRzID0gbmV3IEFycmF5TGlzdDxFbGVtZW50SW5mbz4oKTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2pheHdzL0pBWFdTVXRpbHMuamF2YSBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2pheHdzL0pBWFdTVXRpbHMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTFkNzQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXh3cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvamF4d3MvSkFYV1NVdGlscy5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmpheHdzOw0KKw0KK2ltcG9ydCBqYXZheC5qd3MuV2ViU2VydmljZTsNCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsNCitpbXBvcnQgamF2YXgueG1sLndzLldlYlNlcnZpY2VQcm92aWRlcjsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhSW50ZXJmYWNlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsLkphdmFYTUxNYXBwZXI7DQorDQorDQorLyoqDQorICogQSBzZXQgb2YgdXRpbGl0eSBtZXRob2RzIGZvciBwcm9jZXNzaW5nIEpBWFdTIGFubm90YXRpb25zIHRoYXQgYXJlIA0KKyAqIHNoYXJlZCBiZXR3ZWVuIEphdmEgaW50ZWZhY2UgYW5kIGltcGxlbWVudGF0aW9uIHByb2Nlc3NpbmcNCisgKi8NCitwdWJsaWMgY2xhc3MgSkFYV1NVdGlscyB7DQorICAgIA0KKyAgICAvKioNCisgICAgICogSkFYV1MgYW5ub3RhdGlvbnMgbWF5IGlkZW50aWZ5IGEgc2VydmljZSBpbnRlcmZhY2UgdmlhIGVpdGhlcg0KKyAgICAgKiAgIC0gYW4gaW50ZXJmYWNlIGNsYXNzIG5hbWUsIGUuZy4gQFdlYlNlcnZpY2UoZW5kcG9pbnRJbnRlcmZhY2U9Im15LnNlcnZpY2UuU2VydmljZUltcGwiKSANCisgICAgICogICAtIGEgd3NkbCBmaWxlIG5hbWUsIGUuZy4gQFdlYlNlcnZpY2Uod3NkbExvY2F0aW9uPSJzb21lLndzZGwiKQ0KKyAgICAgKiAgIC0gYSBKYXZhIGNsYXNzL2ludGVyZmFjZSwgZS5nLiBAV2ViU2VydmljZQ0KKyAgICAgKiBUaGlzIG9wZXJhdGlvbiBjb25maWd1cmVzIHRoZSBKYXZhIGludGVyZmFjZSBiYXNlZCBvbiB0aGVzZSBzZXBhcmF0ZSBwaWVjZXMNCisgICAgICogb2YgaW5mb3JtYXRpb24uIFRoZSByZXN1bHRpbmcgaW50ZXJmYWNlIGNvbnRyYWN0IG11c3QgYmUgc3Vic2VxdWVudGx5IHJlc29sdmVkIGluIG9yZGVyIHRoYXQNCisgICAgICogdGhlIG5hbWVkIGVuZHBvaW50IGludGVyZmFjZSBjbGFzcyBvciB3c2RsIGZpbGUgaXMgZm91bmQNCisgICAgICogICANCisgICAgICogQHBhcmFtIGphdmFJbnRlcmZhY2UgdGhlIFR1c2NhbnkgcmVwcmVzZW50YXRpb24gb2YgdGhlIEphdmEgaW50ZXJmYWNlDQorICAgICAqIEBwYXJhbSBjbGF6eiB0aGUgSmF2YSBjbGFzcyB0aGF0IHRoZSBpbnRlcmZhY2UgcmVmZXJzIHRvIChtYXkgaGF2ZSBKQVhXUyBhbm5vdGF0aW9ucykNCisgICAgICogQHJldHVybg0KKyAgICAgKi8NCisgICAgcHVibGljIHN0YXRpYyBKYXZhSW50ZXJmYWNlIGNvbmZpZ3VyZUphdmFJbnRlcmZhY2UoSmF2YUludGVyZmFjZSBqYXZhSW50ZXJmYWNlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzczw/PiBjbGF6eil7DQorICAgICAgICANCisgICAgICAgIFN0cmluZyBzZXJ2aW5lTmFtZXNwYWNlID0gSmF2YVhNTE1hcHBlci5nZXROYW1lc3BhY2UoY2xhenopOw0KKyAgICAgICAgU3RyaW5nIHNlcnZpY2VOYW1lID0gY2xhenouZ2V0U2ltcGxlTmFtZSgpOw0KKyAgICAgICAgUU5hbWUgc2VydmljZVFOYW1lID0gbnVsbDsNCisgICAgICAgIFN0cmluZyBzZXJ2aWNlSW50ZXJmYWNlQ2xhc3NOYW1lID0gbnVsbDsNCisgICAgICAgIFN0cmluZyB3c2RsRmlsZU5hbWUgPSBudWxsOw0KKyAgICAgICAgDQorICAgICAgICBXZWJTZXJ2aWNlIHdlYlNlcnZpY2VBbm5vdGF0aW9uID0gY2xhenouZ2V0QW5ub3RhdGlvbihXZWJTZXJ2aWNlLmNsYXNzKTsNCisgICAgICAgIGlmICh3ZWJTZXJ2aWNlQW5ub3RhdGlvbiAhPSBudWxsKSB7DQorICAgICAgICAgICAgc2VydmluZU5hbWVzcGFjZSA9IGdldFZhbHVlKHdlYlNlcnZpY2VBbm5vdGF0aW9uLnRhcmdldE5hbWVzcGFjZSgpLCBzZXJ2aW5lTmFtZXNwYWNlKTsNCisgICAgICAgICAgICBzZXJ2aWNlTmFtZSA9IGdldFZhbHVlKHdlYlNlcnZpY2VBbm5vdGF0aW9uLm5hbWUoKSwgc2VydmljZU5hbWUpOw0KKyAgICAgICAgICAgIHNlcnZpY2VJbnRlcmZhY2VDbGFzc05hbWUgPSB3ZWJTZXJ2aWNlQW5ub3RhdGlvbi5lbmRwb2ludEludGVyZmFjZSgpOw0KKyAgICAgICAgICAgIHdzZGxGaWxlTmFtZSA9IHdlYlNlcnZpY2VBbm5vdGF0aW9uLndzZGxMb2NhdGlvbigpOw0KKyAgICAgICAgICAgIGphdmFJbnRlcmZhY2Uuc2V0UmVtb3RhYmxlKHRydWUpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBXZWJTZXJ2aWNlUHJvdmlkZXIgd2ViU2VydmljZVByb3ZpZGVyQW5ub3RhdGlvbiA9IGNsYXp6LmdldEFubm90YXRpb24oV2ViU2VydmljZVByb3ZpZGVyLmNsYXNzKTsNCisgICAgICAgIGlmICh3ZWJTZXJ2aWNlUHJvdmlkZXJBbm5vdGF0aW9uICE9IG51bGwpIHsNCisgICAgICAgICAgICBzZXJ2aW5lTmFtZXNwYWNlID0gZ2V0VmFsdWUod2ViU2VydmljZVByb3ZpZGVyQW5ub3RhdGlvbi50YXJnZXROYW1lc3BhY2UoKSwgc2VydmluZU5hbWVzcGFjZSk7DQorICAgICAgICAgICAgc2VydmljZU5hbWUgPSBnZXRWYWx1ZSh3ZWJTZXJ2aWNlUHJvdmlkZXJBbm5vdGF0aW9uLnNlcnZpY2VOYW1lKCksIHNlcnZpY2VOYW1lKTsNCisgICAgICAgICAgICB3c2RsRmlsZU5hbWUgPSB3ZWJTZXJ2aWNlUHJvdmlkZXJBbm5vdGF0aW9uLndzZGxMb2NhdGlvbigpOw0KKyAgICAgICAgICAgIGphdmFJbnRlcmZhY2Uuc2V0UmVtb3RhYmxlKHRydWUpOw0KKyAgICAgICAgfSAgDQorICAgICAgICANCisgICAgICAgIHNlcnZpY2VRTmFtZSA9IG5ldyBRTmFtZShzZXJ2aW5lTmFtZXNwYWNlLCBzZXJ2aWNlTmFtZSk7DQorICAgICAgICBqYXZhSW50ZXJmYWNlLnNldFFOYW1lKHNlcnZpY2VRTmFtZSk7DQorICAgICAgICANCisgICAgICAgIC8vIHVzZSB0aGUgcHJvdmlkZWQgSmF2YSBpbnRlcmZhY2UgbmFtZSB0byBvdmVyd3JpdGUNCisgICAgICAgIC8vIGFueSBKYXZhIGludGVyZmFjZSBjcmVhdGVkIGZyb20gYW4gaW1wbGVtZW50ZWQgaW50ZXJmYWNlcw0KKyAgICAgICAgaWYgKHNlcnZpY2VJbnRlcmZhY2VDbGFzc05hbWUgIT0gbnVsbCAmJg0KKyAgICAgICAgICAgICAgICBzZXJ2aWNlSW50ZXJmYWNlQ2xhc3NOYW1lLmxlbmd0aCgpID4gMCl7DQorICAgICAgICAgICAgamF2YUludGVyZmFjZS5zZXROYW1lKHNlcnZpY2VJbnRlcmZhY2VDbGFzc05hbWUpOw0KKyAgICAgICAgICAgIGphdmFJbnRlcmZhY2Uuc2V0SkFYV1NKYXZhSW50ZXJmYWNlTmFtZShzZXJ2aWNlSW50ZXJmYWNlQ2xhc3NOYW1lKTsNCisgICAgICAgICAgICBqYXZhSW50ZXJmYWNlLnNldFVucmVzb2x2ZWQodHJ1ZSk7DQorICAgICAgICB9IA0KKyAgICAgICAgDQorICAgICAgICAvLyBTdG9yZSB0aGUgV1NETCBsb2NhdGlvbiBpZiBpdCdzIHNwZWNpZmllZCBpbiANCisgICAgICAgIC8vIHRoZSBAV2ViU2VydmljZSBhbm5vdGF0aW9uLiBMYXRlciB0aGlzIGlzIHJlc29sdmVkIGFuZCBpcyBhdHRhY2hlZCANCisgICAgICAgIC8vIHRvIHRoZSBKYXZhIGludGVyZmFjZSBjb250cmFjdCBpbiB0aGUgbm9ybWFsaXplZCBzcGFjZSBzbyB0aGF0IGVmZmVjdGl2ZWx5IHRoZSBjb250cmFjdA0KKyAgICAgICAgLy8gaGFzIGJvdGggSmF2YSBhbmQgV1NETCBpbnRlcmZhY2VzLiBUaGlzIGFsbG93cyBkYXRhYmluZGluZyB0byANCisgICAgICAgIC8vIG9wZXJhdGUgY29ycmVjdGx5IGFzIGl0IHN0aWxsIGV4cGVjdHMgYSBKYXZhIGludGVyZmFjZSBmb3IgYSBKYXZhIGltcGxlbWVudGF0aW9uDQorICAgICAgICBpZiAod3NkbEZpbGVOYW1lICE9IG51bGwgJiYNCisgICAgICAgICAgICB3c2RsRmlsZU5hbWUubGVuZ3RoKCkgPiAwKXsgICAgICAgICANCisgICAgICAgICAgICBqYXZhSW50ZXJmYWNlLnNldEpBWFdTV1NETExvY2F0aW9uKHdzZGxGaWxlTmFtZSk7DQorICAgICAgICB9ICANCisgICAgICAgIA0KKyAgICAgICAgcmV0dXJuIGphdmFJbnRlcmZhY2U7DQorICAgIH0gICAgICANCisgICAgDQorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBnZXRWYWx1ZShTdHJpbmcgdmFsdWUsIFN0cmluZyBkZWZhdWx0VmFsdWUpIHsNCisgICAgICAgIHJldHVybiAiIi5lcXVhbHModmFsdWUpID8gZGVmYXVsdFZhbHVlIDogdmFsdWU7DQorICAgIH0gICAgDQorfQ0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuaW50cm9zcGVjdC5KYXZhSW50ZXJmYWNlVmlzaXRvciBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuaW50cm9zcGVjdC5KYXZhSW50ZXJmYWNlVmlzaXRvcgppbmRleCA4NjI1NWY0Li4wNWIxY2NlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHdzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmludHJvc3BlY3QuSmF2YUludGVyZmFjZVZpc2l0b3IKKysrIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXh3cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5pbnRyb3NwZWN0LkphdmFJbnRlcmZhY2VWaXNpdG9yCkBAIC0xMyw3ICsxMywxMSBAQAogIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCiAjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSMgdW5kZXIgdGhlIExpY2Vuc2UuIAorIyB1bmRlciB0aGUgTGljZW5zZS4KKyMgCisjIGZpcnN0IG9uZSwgc2V0IHJlbW90YWJsZSBmbGFnIAogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5qYXh3cy5XZWJTZXJ2aWNlSW50ZXJmYWNlUHJvY2Vzc29yO3Jhbmtpbmc9NDAwCisjIHNlY29uZCBvbmUsIGludHJvc3BlY3QgdGhlIEpBWFdTIGFubm90YXRpb25zCiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLmpheHdzLkpBWFdTSmF2YUludGVyZmFjZVByb2Nlc3NvcjtyYW5raW5nPTEwMAotb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5qYXh3cy5KQVhXU0FzeW5jSW50ZXJmYWNlUHJvY2Vzc29yO3Jhbmtpbmc9OTAwDQorIyB0aGlyZCBvbmUsIGludHJvc3BlY3QgSkFYV1MgYXN5bmMgbWV0aG9kcworb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5qYXh3cy5KQVhXU0FzeW5jSW50ZXJmYWNlUHJvY2Vzc29yO3Jhbmtpbmc9NTANCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhLWpheHdzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9qYXh3cy9KQVhXU0FzeW5jSW50ZXJmYWNlUHJvY2Vzc29yVGVzdENhc2UuamF2YSBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2pheHdzL0pBWFdTQXN5bmNJbnRlcmZhY2VQcm9jZXNzb3JUZXN0Q2FzZS5qYXZhCmluZGV4IGVjNzNhZDQuLmM1MzUyMWQgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2pheHdzL0pBWFdTQXN5bmNJbnRlcmZhY2VQcm9jZXNzb3JUZXN0Q2FzZS5qYXZhCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2pheHdzL0pBWFdTQXN5bmNJbnRlcmZhY2VQcm9jZXNzb3JUZXN0Q2FzZS5qYXZhCkBAIC0zMyw2ICszMyw4IEBACiBpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIAoraW1wb3J0IGNvbS5leGFtcGxlLnN0b2NrLmFzeW5jLlN0b2NrRXhjZXB0aW9uVGVzdDsKKwogcHVibGljIGNsYXNzIEpBWFdTQXN5bmNJbnRlcmZhY2VQcm9jZXNzb3JUZXN0Q2FzZSB7CiAgICAgcHJpdmF0ZSBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IHJlZ2lzdHJ5OwogICAgIApAQCAtNjQsNCArNjYsMjQgQEAKICAgICAgICAgfQogICAgICAgICAKICAgICB9CisgICAgCisgICAgQFRlc3QKKyAgICBwdWJsaWMgZmluYWwgdm9pZCB0ZXN0UHJvY2Vzc29yR2VuZXJhdGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIERlZmF1bHRKYXZhSW50ZXJmYWNlRmFjdG9yeSBpRmFjdG9yeSA9IG5ldyBEZWZhdWx0SmF2YUludGVyZmFjZUZhY3RvcnkocmVnaXN0cnkpOworICAgICAgICBKYXZhSW50ZXJmYWNlIGNvbnRyYWN0ID0gaUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZShTdG9ja0V4Y2VwdGlvblRlc3QuY2xhc3MpOworICAgICAgICAKKyAgICAgICAgYXNzZXJ0VHJ1ZShjb250cmFjdC5pc1JlbW90YWJsZSgpKTsKKyAgICAgICAgCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMSxjb250cmFjdC5nZXRPcGVyYXRpb25zKCkuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIExpc3Q8T3BlcmF0aW9uPiBhc3luY09wZXJhdGlvbnMgPSAoTGlzdDxPcGVyYXRpb24+KSBjb250cmFjdC5nZXRBdHRyaWJ1dGVzKCkuZ2V0KCJKQVhXUy1BU1lOQy1PUEVSQVRJT05TIik7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMixhc3luY09wZXJhdGlvbnMuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIC8vbGlzdCBvcGVyYXRpb24KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gRmlsdGVyZWQgT3BlcmF0aW9ucyIpOworICAgICAgICBmb3IoT3BlcmF0aW9uIG8gOiBjb250cmFjdC5nZXRPcGVyYXRpb25zKCkpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPj4+Pj4+IiArIG8pOworICAgICAgICB9CisgICAgICAgIAorICAgIH0KIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzZGwvYmluZGluZ3MueG1sIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS1qYXh3cy9zcmMvdGVzdC9yZXNvdXJjZXMvd3NkbC9iaW5kaW5ncy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc4YWJiNQotLS0gL2Rldi9udWxsCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEtamF4d3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzZGwvYmluZGluZ3MueG1sCkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKgorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8YmluZGluZ3MKKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorICAgIHdzZGxMb2NhdGlvbj0iU3RvY2tFeGNlcHRpb25UZXN0LndzZGwiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4KKyAgICA8YmluZGluZ3Mgbm9kZT0id3NkbDpkZWZpbml0aW9ucyI+CisgICAgICAgIDxlbmFibGVBc3luY01hcHBpbmc+dHJ1ZTwvZW5hYmxlQXN5bmNNYXBwaW5nPgorICAgIDwvYmluZGluZ3M+Cis8L2JpbmRpbmdzPgpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNDFkZDY4ZS4uYTM3NGNmYyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0xOSwxMSArMTksMTQgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDINCiBCdW5kbGUtTGljZW5zZTogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wLnR4dA0KIEJ1bmRsZS1EZXNjcmlwdGlvbjogQXBhY2hlIFR1c2NhbnkgU0NBIEphdmEgSW50ZXJmYWNlIE1vZGVsDQotSW1wb3J0LVBhY2thZ2U6IGphdmF4LnhtbC5uYW1lc3BhY2UsDQorSW1wb3J0LVBhY2thZ2U6IGphdmF4Lmp3cywNCisgamF2YXguandzLnNvYXAsDQorIGphdmF4LnhtbC5uYW1lc3BhY2UsDQogIGphdmF4LnhtbC5zdHJlYW0sDQotIG9yZy5vYXNpc29wZW4uc2NhO3ZlcnNpb249IjIuMC4wIiwNCisgamF2YXgueG1sLndzLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbjt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvcjt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnJlc29sdmVyO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlO3ZlcnNpb249IjIuMC4wIiwNCkBAIC0zNSw4ICszOCwxMCBAQAogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuaW1wbDt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuaW50cm9zcGVjdDt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLnV0aWw7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yO3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wb2xpY3k7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcub2FzaXNvcGVuLnNjYTt2ZXJzaW9uPSIyLjAuMCIsDQogIG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb247dmVyc2lvbj0iMi4wLjAiDQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2UuamF2YQ0KIEJ1bmRsZS1Eb2NVUkw6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8NCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3BvbS54bWwgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3BvbS54bWwKaW5kZXggMjg0ODlhZi4uMmRiZTZmZSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9wb20ueG1sCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEvcG9tLnhtbApAQCAtNTIsNiArNTIsMTIgQEAKICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWludGVyZmFjZS13c2RsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgICAgICAKIAogICAgIDwvZGVwZW5kZW5jaWVzPgogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9KYXZhSW50ZXJmYWNlLmphdmEgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9KYXZhSW50ZXJmYWNlLmphdmEKaW5kZXggOGVkZDk0Yi4uZTA0MmQ4NiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvSmF2YUludGVyZmFjZS5qYXZhCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL0phdmFJbnRlcmZhY2UuamF2YQpAQCAtMjEsNiArMjEsNyBAQAogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkJhc2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQ29udHJpYnV0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludGVyZmFjZTsKIAogLyoqCkBAIC04Niw0ICs4Nyw0OCBAQAogICAgICAqIEBwYXJhbSBjYWxsYmFja0NsYXNzIHRoZSBjYWxsYmFjayBjbGFzcyBzcGVjaWZpZWQgaW4gYW4gQENhbGxiYWNrIGFubm90YXRpb24KICAgICAgKi8KICAgICB2b2lkIHNldENhbGxiYWNrQ2xhc3MoQ2xhc3M8Pz4gY2FsbGJhY2tDbGFzcyk7CisgICAgCisgICAgLyoqCisgICAgICogQSBKYXZhIGludGVyZmFjZSBtYXkgaGF2ZSBKQVhXUyBhbm5vdGF0aW9ucyB0aGF0IHJlZmVyIHRvIGEKKyAgICAgKiBhIFdTREwgZG9jdW1lbnQuIFRoZSByZXN1bHRpbmcgV1NETCBsb2NhdGlvbiBpcyBzdG9yZWQgaGVyZSAKKyAgICAgKiBzbyB0aGF0IGlzIGNhbiBiZSByZXNvbHZlZCBhZnRlciB0aGUgSmF2YSBpbnRlcmZhY2UgaXRzZWxmCisgICAgICogaGFzIGJlZW4gcmVzb2x2ZWQKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIFdTREwgaW50ZXJmYWNlCisgICAgICovCisgICAgU3RyaW5nIGdldEpBWFdTV1NETExvY2F0aW9uKCk7CisgICAgCisgICAgLyoqCisgICAgICogQSBKYXZhIGludGVyZmFjZSBtYXkgaGF2ZSBKQVhXUyBhbm5vdGF0aW9ucyB0aGF0IHJlZmVyIHRvIGEKKyAgICAgKiBhIFdTREwgZG9jdW1lbnQuIFRoZSByZXN1bHRpbmcgV1NETCBsb2NhdGlvbiBpcyBzdG9yZWQgaGVyZSAKKyAgICAgKiBzbyB0aGF0IGlzIGNhbiBiZSByZXNvbHZlZCBhZnRlciB0aGUgSmF2YSBpbnRlcmZhY2UgaXRzZWxmCisgICAgICogaGFzIGJlZW4gcmVzb2x2ZWQKKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gd3NkbEludGVyZmFjZQorICAgICAqLworICAgIHZvaWQgc2V0SkFYV1NXU0RMTG9jYXRpb24oU3RyaW5nIHdzZGxMb2NhdGlvbik7ICAKKyAgICAKKyAgICAvKioKKyAgICAgKiBBIEphdmEgaW50ZXJmYWNlIG1heSBoYXZlIEpBWFdTIGFubm90YXRpb25zIHRoYXQgcmVmZXIgdG8gYQorICAgICAqIGEgSmF2YSBpbnRlcmZhY2UgYnkgbmFtZS4gVGhlIHJlc3VsdGluZyBjbGFzcyBuYW1lIGlzIHN0b3JlZCBoZXJlIAorICAgICAqIHNvIHRoYXQgaXMgY2FuIGJlIHJlc29sdmVkIGFmdGVyIHRoaXMgSmF2YSBpbnRlcmZhY2UgCisgICAgICogaGFzIGJlZW4gcmVzb2x2ZWQKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgU3RyaW5nIGdldEpBWFdTSmF2YUludGVyZmFjZU5hbWUoKTsKKyAgICAKKyAgICAvKioKKyAgICAgKiBBIEphdmEgaW50ZXJmYWNlIG1heSBoYXZlIEpBWFdTIGFubm90YXRpb25zIHRoYXQgcmVmZXIgdG8gYQorICAgICAqIGEgSmF2YSBpbnRlcmZhY2UgYnkgbmFtZS4gVGhlIHJlc3VsdGluZyBjbGFzcyBuYW1lIGlzIHN0b3JlZCBoZXJlIAorICAgICAqIHNvIHRoYXQgaXMgY2FuIGJlIHJlc29sdmVkIGFmdGVyIHRoaXMgSmF2YSBpbnRlcmZhY2UgCisgICAgICogaGFzIGJlZW4gcmVzb2x2ZWQKKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuCisgICAgICovICAgIAorICAgIHZvaWQgc2V0SkFYV1NKYXZhSW50ZXJmYWNlTmFtZShTdHJpbmcgamF2YUludGVyZmFjZU5hbWUpOworICAgIAorICAgIHB1YmxpYyBDb250cmlidXRpb24gZ2V0Q29udHJpYnV0aW9uQ29udGFpbmluZ0NsYXNzKCk7CisgICAgCisgICAgcHVibGljIHZvaWQgc2V0Q29udHJpYnV0aW9uQ29udGFpbmluZ0NsYXNzKENvbnRyaWJ1dGlvbiBjb250cmlidXRpb25Db250YWluaW5nQ2xhc3MpOwogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvaW1wbC9KYXZhSW50ZXJmYWNlSW1wbC5qYXZhIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvaW1wbC9KYXZhSW50ZXJmYWNlSW1wbC5qYXZhCmluZGV4IDU0OTQ2YTkuLmEyMTdmM2UgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2ltcGwvSmF2YUludGVyZmFjZUltcGwuamF2YQorKysgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9pbXBsL0phdmFJbnRlcmZhY2VJbXBsLmphdmEKQEAgLTI4LDYgKzI4LDcgQEAKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWwuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkNvbnRyaWJ1dGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5EYXRhVHlwZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuaW1wbC5EYXRhVHlwZUltcGw7CkBAIC01MCw2ICs1MSw5IEBACiAgICAgcHJpdmF0ZSBXZWFrUmVmZXJlbmNlPENsYXNzPD8+PiBqYXZhQ2xhc3M7CiAgICAgcHJpdmF0ZSBDbGFzczw/PiBjYWxsYmFja0NsYXNzOwogICAgIHByaXZhdGUgUU5hbWUgcW5hbWU7CisgICAgcHJpdmF0ZSBTdHJpbmcgamF4d3NXU0RMTG9jYXRpb247CisgICAgcHJpdmF0ZSBTdHJpbmcgamF4d3NKYXZhSW50ZXJmYWNlTmFtZTsKKyAgICBwcml2YXRlIENvbnRyaWJ1dGlvbiBjb250cmlidXRpb25Db250YWluaW5nQ2xhc3M7CiAgICAgCiAgICAgcHJvdGVjdGVkIEphdmFJbnRlcmZhY2VJbXBsKCkgewogICAgIAlzdXBlcigpOwpAQCAtMzIxLDUgKzMyNSwzNiBAQAogICAgIAl9IC8vIGVuZCBmb3IKICAgICAJcmV0dXJuIGZhbHNlOwogICAgIH0gLy8gZW5kIG1ldGhvZCBpc0FzeW5jU2VydmVyCi0KKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIGdldEpBWFdTV1NETExvY2F0aW9uKCkgeworICAgICAgICByZXR1cm4gamF4d3NXU0RMTG9jYXRpb247CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHNldEpBWFdTV1NETExvY2F0aW9uKFN0cmluZyB3c2RsTG9jYXRpb24pIHsKKyAgICAgICAgdGhpcy5qYXh3c1dTRExMb2NhdGlvbiA9IHdzZGxMb2NhdGlvbjsKKyAgICB9CisgICAgCisgICAgcHVibGljIFN0cmluZyBnZXRKQVhXU0phdmFJbnRlcmZhY2VOYW1lKCkgeworICAgICAgICByZXR1cm4gamF4d3NKYXZhSW50ZXJmYWNlTmFtZTsKKyAgICB9CisgICAgCisgICAgcHVibGljIHZvaWQgc2V0SkFYV1NKYXZhSW50ZXJmYWNlTmFtZShTdHJpbmcgamF2YUludGVyZmFjZU5hbWUpIHsKKyAgICAgICAgdGhpcy5qYXh3c0phdmFJbnRlcmZhY2VOYW1lID0gamF2YUludGVyZmFjZU5hbWU7CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEEgSmF2YSBjbGFzcyBtYXkgcmVmZXJlbmNlIGEgV1NETCBmaWxlIHZpYSBhIEpBWFdTIGFubm90YXRpb24uIFdlIG5lZWQgdG8gcmVzb2x2ZQorICAgICAqIHRoZSBXU0RMIGZpbGUgbG9jYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNhbWUgY29udHJpYnV0aW9uIHRoYXQgaG9sZHMgdGhlIAorICAgICAqIEphdmEgZmlsZS4gSW4gb3JkZXIgdG8gZG8gdGhpcyB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSBhY3R1YWwgY29udHJpYnV0aW9uIHRoYXQKKyAgICAgKiB3YXMgdXNlZCB0byByZXNvbHZlIGEgSmF2YSBjbGFzcy4gCisgICAgICogCisgICAgICogQHJldHVybgorICAgICAqLworICAgIHB1YmxpYyBDb250cmlidXRpb24gZ2V0Q29udHJpYnV0aW9uQ29udGFpbmluZ0NsYXNzKCkgeworICAgICAgICByZXR1cm4gY29udHJpYnV0aW9uQ29udGFpbmluZ0NsYXNzOworICAgIH0KKyAgICAKKyAgICBwdWJsaWMgdm9pZCBzZXRDb250cmlidXRpb25Db250YWluaW5nQ2xhc3MoQ29udHJpYnV0aW9uIGNvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzcykgeworICAgICAgICB0aGlzLmNvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzcyA9IGNvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzczsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9pbXBsL0phdmFJbnRlcmZhY2VJbnRyb3NwZWN0b3JJbXBsLmphdmEgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9pbXBsL0phdmFJbnRlcmZhY2VJbnRyb3NwZWN0b3JJbXBsLmphdmEKaW5kZXggZGUzMjEzNi4uN2YzM2IwNSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvaW1wbC9KYXZhSW50ZXJmYWNlSW50cm9zcGVjdG9ySW1wbC5qYXZhCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2ltcGwvSmF2YUludGVyZmFjZUludHJvc3BlY3RvckltcGwuamF2YQpAQCAtMzUsNiArMzUsNyBAQAogCiBpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKIGltcG9ydCBqYXZheC54bWwud3MuQXN5bmNIYW5kbGVyOworaW1wb3J0IGphdmF4LnhtbC53cy5Ib2xkZXI7CiBpbXBvcnQgamF2YXgueG1sLndzLlJlc3BvbnNlOwogCiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuRGF0YVR5cGU7CkBAIC00NCw2ICs0NSw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3ZlcmxvYWRlZE9wZXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5QYXJhbWV0ZXJNb2RlOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmltcGwuRGF0YVR5cGVJbXBsOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2VGYWN0b3J5OwpAQCAtMjIwLDYgKzIyMiw5IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBKYXZhT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG5ldyBKYXZhT3BlcmF0aW9uSW1wbCgpOworICAgICAgICAgICAgb3BlcmF0aW9uLnNldE5hbWUobmFtZSk7CisgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIFNldCBvdXRwdXRUeXBlIHRvIG51bGwgZm9yIHZvaWQKICAgICAgICAgICAgIFhNTFR5cGUgeG1sUmV0dXJuVHlwZSA9IG5ldyBYTUxUeXBlKG5ldyBRTmFtZShucywgInJldHVybiIpLCBudWxsKTsKICAgICAgICAgICAgIERhdGFUeXBlPFhNTFR5cGU+IHJldHVybkRhdGFUeXBlID0KQEAgLTIyOSwxMCArMjM0LDI0IEBACiAgICAgICAgICAgICBUeXBlW10gZ2VuZXJpY1BhcmFtVHlwZXMgPSBtZXRob2QuZ2V0R2VuZXJpY1BhcmFtZXRlclR5cGVzKCk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlclR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgQ2xhc3M8Pz4gcGFyYW1UeXBlID0gcGFyYW1ldGVyVHlwZXNbaV07Ci0gICAgICAgICAgICAgICAgWE1MVHlwZSB4bWxQYXJhbVR5cGUgPSBuZXcgWE1MVHlwZShuZXcgUU5hbWUobnMsICJhcmciICsgaSksIG51bGwpOwotICAgICAgICAgICAgICAgIHBhcmFtRGF0YVR5cGVzLmFkZChuZXcgRGF0YVR5cGVJbXBsPFhNTFR5cGU+KFVOS05PV05fREFUQUJJTkRJTkcsIHBhcmFtVHlwZSwgZ2VuZXJpY1BhcmFtVHlwZXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sUGFyYW1UeXBlKSk7CisgICAgICAgICAgICAgICAgWE1MVHlwZSB4bWxQYXJhbVR5cGUgPSBuZXcgWE1MVHlwZShuZXcgUU5hbWUobnMsICJhcmciICsgaSksIG51bGwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgCisgICAgICAgICAgICAgICAgRGF0YVR5cGVJbXBsPFhNTFR5cGU+IHhtbERhdGFUeXBlID0gbmV3IERhdGFUeXBlSW1wbDxYTUxUeXBlPigKKyAgICAgICAgICAgICAgICAJCVVOS05PV05fREFUQUJJTkRJTkcsIHBhcmFtVHlwZSwgZ2VuZXJpY1BhcmFtVHlwZXNbaV0seG1sUGFyYW1UeXBlKTsKKyAgICAgICAgICAgICAgICBQYXJhbWV0ZXJNb2RlIG1vZGUgPSBQYXJhbWV0ZXJNb2RlLklOOworICAgICAgICAgICAgICAgIC8vIEhvbGRlciBwYXR0ZXJuLiBQaHlzaWNhbCB0eXBlcyBvZiBIb2xkZXI8VD4gY2xhc3NlcyBhcmUgdXBkYXRlZCB0byA8VD4gdG8gYWlkIGluIHRyYW5zZm9ybWF0aW9ucy4KKyAgICAgICAgICAgICAgICBpZiAoIEhvbGRlci5jbGFzcyA9PSBwYXJhbVR5cGUpIHsKKyAgICAgICAgICAgICAgICAJVHlwZSBmaXJzdEFjdHVhbCA9IGdldEZpcnN0QWN0dWFsVHlwZSggZ2VuZXJpY1BhcmFtVHlwZXNbIGkgXSApOworICAgICAgICAgICAgICAgIAlpZiAoIGZpcnN0QWN0dWFsICE9IG51bGwgKSB7CisgICAgICAgICAgICAgICAgCQl4bWxEYXRhVHlwZS5zZXRQaHlzaWNhbCggKENsYXNzPD8+KWZpcnN0QWN0dWFsICk7CisgICAgICAgICAgICAgICAgCQltb2RlID0gUGFyYW1ldGVyTW9kZS5JTk9VVDsKKyAgICAgICAgICAgICAgICAJfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwYXJhbURhdGFUeXBlcy5hZGQoIHhtbERhdGFUeXBlKTsKKyAgICAgICAgICAgICAgICBvcGVyYXRpb24uZ2V0UGFyYW1ldGVyTW9kZXMoKS5hZGQobW9kZSk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmF1bHQgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBMaXN0PERhdGFUeXBlPiBmYXVsdERhdGFUeXBlcyA9IG5ldyBBcnJheUxpc3Q8RGF0YVR5cGU+KGZhdWx0VHlwZXMubGVuZ3RoKTsKICAgICAgICAgICAgIFR5cGVbXSBnZW5lcmljRmF1bHRUeXBlcyA9IG1ldGhvZC5nZXRHZW5lcmljRXhjZXB0aW9uVHlwZXMoKTsKICAgICAgICAgICAgIGlmKCBtZXRob2QuaXNBbm5vdGF0aW9uUHJlc2VudChBc3luY0ZhdWx0LmNsYXNzKSApIHsKQEAgLTI1NCw4ICsyNzMsNyBAQAogCiAgICAgICAgICAgICBEYXRhVHlwZTxMaXN0PERhdGFUeXBlPj4gaW5wdXRUeXBlID0KICAgICAgICAgICAgICAgICBuZXcgRGF0YVR5cGVJbXBsPExpc3Q8RGF0YVR5cGU+PihJRExfSU5QVVQsIE9iamVjdFtdLmNsYXNzLCBwYXJhbURhdGFUeXBlcyk7Ci0gICAgICAgICAgICBKYXZhT3BlcmF0aW9uIG9wZXJhdGlvbiA9IG5ldyBKYXZhT3BlcmF0aW9uSW1wbCgpOwotICAgICAgICAgICAgb3BlcmF0aW9uLnNldE5hbWUobmFtZSk7CisgICAgICAgICAgIAogICAgICAgICAgICAgb3BlcmF0aW9uLnNldElucHV0VHlwZShpbnB1dFR5cGUpOwogICAgICAgICAgICAgb3BlcmF0aW9uLnNldE91dHB1dFR5cGUocmV0dXJuRGF0YVR5cGUpOwogICAgICAgICAgICAgb3BlcmF0aW9uLnNldEZhdWx0VHlwZXMoZmF1bHREYXRhVHlwZXMpOwpAQCAtMjkwLDIwICszMDgsMzUgQEAKIAogICAgIHByaXZhdGUgYm9vbGVhbiBqYXh3c0FzeW5jTWV0aG9kKE1ldGhvZCBtZXRob2QpIHsKICAgICAgICAgaWYgKG1ldGhvZC5nZXROYW1lKCkuZW5kc1dpdGgoIkFzeW5jIikpIHsKLSAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0TmFtZSgpLmVuZHNXaXRoKCJBc3luYyIpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuaXNBc3NpZ25hYmxlRnJvbShGdXR1cmUuY2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0UGFyYW1ldGVyVHlwZXMoKS5sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKClbbWV0aG9kLmdldFBhcmFtZXRlclR5cGVzKCkubGVuZ3RoLTFdLmlzQXNzaWduYWJsZUZyb20oQXN5bmNIYW5kbGVyLmNsYXNzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1ldGhvZC5nZXRSZXR1cm5UeXBlKCkuaXNBc3NpZ25hYmxlRnJvbShGdXR1cmUuY2xhc3MpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpW21ldGhvZC5nZXRQYXJhbWV0ZXJUeXBlcygpLmxlbmd0aC0xXS5pc0Fzc2lnbmFibGVGcm9tKEFzeW5jSGFuZGxlci5jbGFzcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0UmV0dXJuVHlwZSgpLmlzQXNzaWduYWJsZUZyb20oUmVzcG9uc2UuY2xhc3MpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtZXRob2QuZ2V0UmV0dXJuVHlwZSgpLmlzQXNzaWduYWJsZUZyb20oUmVzcG9uc2UuY2xhc3MpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICAKKworICAgIC8qKgorICAgICAqIEdpdmVuIGEgQ2xhc3M8VD4sIHJldHVybnMgVCwgb3RoZXJ3aXNlIG51bGwuCisgICAgICogQHBhcmFtIHRlc3RDbGFzcworICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgc3RhdGljIFR5cGUgZ2V0Rmlyc3RBY3R1YWxUeXBlKFR5cGUgZ2VuZXJpY1R5cGUpIHsKKyAgICAgICAgaWYgKGdlbmVyaWNUeXBlIGluc3RhbmNlb2YgUGFyYW1ldGVyaXplZFR5cGUpIHsKKyAgICAgICAgICAgIFBhcmFtZXRlcml6ZWRUeXBlIHBUeXBlID0gKFBhcmFtZXRlcml6ZWRUeXBlKWdlbmVyaWNUeXBlOworICAgICAgICAgICAgVHlwZVtdIGFjdHVhbFR5cGVzID0gcFR5cGUuZ2V0QWN0dWFsVHlwZUFyZ3VtZW50cygpOworICAgICAgICAgICAgaWYgKChhY3R1YWxUeXBlcyAhPSBudWxsKSAmJiAoYWN0dWFsVHlwZXMubGVuZ3RoID4gMCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gYWN0dWFsVHlwZXNbMF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQogCiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9pbXBsL1BvbGljeUphdmFJbnRlcmZhY2VWaXNpdG9yLmphdmEgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9pbXBsL1BvbGljeUphdmFJbnRlcmZhY2VWaXNpdG9yLmphdmEKaW5kZXggMTYxMGEyZS4uMWMwMzMzZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvaW1wbC9Qb2xpY3lKYXZhSW50ZXJmYWNlVmlzaXRvci5qYXZhCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL2ltcGwvUG9saWN5SmF2YUludGVyZmFjZVZpc2l0b3IuamF2YQpAQCAtMjAsMTMgKzIwLDE4IEBACiAKIGltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAoraW1wb3J0IGphdmF4Lmp3cy5XZWJQYXJhbTsKK2ltcG9ydCBqYXZheC5qd3MuV2ViUmVzdWx0OworaW1wb3J0IGphdmF4Lmp3cy5zb2FwLlNPQVBCaW5kaW5nOwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbC5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkZhY3RvcnlFeHRlbnNpb25Qb2ludDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uOwpAQCAtMzcsNiArNDIsNyBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LkludGVudDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5Qb2xpY3lGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucG9saWN5LlBvbGljeVNldDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5Qb2xpY3lTdWJqZWN0OwogaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUG9saWN5U2V0czsKIGltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlF1YWxpZmllcjsKIGltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlcXVpcmVzOwpAQCAtNzQsNyArODAsNyBAQAogICAgICAqIEBwYXJhbSBjbGF6egogICAgICAqIEBwYXJhbSByZXF1aXJlZEludGVudHMKICAgICAgKi8KLSAgICBwcml2YXRlIHZvaWQgcmVhZEludGVudHNBbmRQb2xpY3lTZXRzKENsYXNzPD8+IGNsYXp6LCBMaXN0PEludGVudD4gcmVxdWlyZWRJbnRlbnRzLCBMaXN0PFBvbGljeVNldD4gcG9saWN5U2V0cykgeworICAgIHByaXZhdGUgdm9pZCByZWFkSW50ZW50c0FuZFBvbGljeVNldHMoQ2xhc3M8Pz4gY2xhenosIFBvbGljeVN1YmplY3Qgc3ViamVjdCkgewogICAgICAgICBSZXF1aXJlcyBpbnRlbnRBbm5vdGF0aW9uID0gY2xhenouZ2V0QW5ub3RhdGlvbihSZXF1aXJlcy5jbGFzcyk7CiAgICAgICAgIGlmIChpbnRlbnRBbm5vdGF0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgIFN0cmluZ1tdIGludGVudE5hbWVzID0gaW50ZW50QW5ub3RhdGlvbi52YWx1ZSgpOwpAQCAtODQsMTIgKzkwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCBlYWNoIGludGVudCB0byB0aGUgbGlzdAogICAgICAgICAgICAgICAgICAgICBJbnRlbnQgaW50ZW50ID0gcG9saWN5RmFjdG9yeS5jcmVhdGVJbnRlbnQoKTsKICAgICAgICAgICAgICAgICAgICAgaW50ZW50LnNldE5hbWUoZ2V0UU5hbWUoaW50ZW50TmFtZSkpOwotICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEludGVudHMuYWRkKGludGVudCk7CisgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuZ2V0UmVxdWlyZWRJbnRlbnRzKCkuYWRkKGludGVudCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcmVhZFNwZWNpZmljSW50ZW50cyhjbGF6ei5nZXRBbm5vdGF0aW9ucygpLCByZXF1aXJlZEludGVudHMpOworICAgICAgICByZWFkU3BlY2lmaWNJbnRlbnRzKGNsYXp6LmdldEFubm90YXRpb25zKCksIHN1YmplY3QuZ2V0UmVxdWlyZWRJbnRlbnRzKCkpOwogICAgICAgICAKICAgICAgICAgUG9saWN5U2V0cyBwb2xpY3lTZXRBbm5vdGF0aW9uID0gY2xhenouZ2V0QW5ub3RhdGlvbihQb2xpY3lTZXRzLmNsYXNzKTsKICAgICAgICAgaWYgKHBvbGljeVNldEFubm90YXRpb24gIT0gbnVsbCkgewpAQCAtMTAwLDEwICsxMDYsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGVhY2ggaW50ZW50IHRvIHRoZSBsaXN0CiAgICAgICAgICAgICAgICAgICAgIFBvbGljeVNldCBwb2xpY3lTZXQgPSBwb2xpY3lGYWN0b3J5LmNyZWF0ZVBvbGljeVNldCgpOwogICAgICAgICAgICAgICAgICAgICBwb2xpY3lTZXQuc2V0TmFtZShnZXRRTmFtZShwb2xpY3lTZXROYW1lKSk7Ci0gICAgICAgICAgICAgICAgICAgIHBvbGljeVNldHMuYWRkKHBvbGljeVNldCk7CisgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuZ2V0UG9saWN5U2V0cygpLmFkZChwb2xpY3lTZXQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCBjbGF6ei5pc0Fubm90YXRpb25QcmVzZW50KFNPQVBCaW5kaW5nLmNsYXNzKSApIHsKKyAgICAgICAgCS8vIGFkZCBzb2FwIGludGVudCAgICAgICAgCQorICAgICAgICAgICAgSW50ZW50IGludGVudCA9IHBvbGljeUZhY3RvcnkuY3JlYXRlSW50ZW50KCk7CisgICAgICAgICAgICBpbnRlbnQuc2V0TmFtZShDb25zdGFudHMuU09BUF9JTlRFTlQpOworICAgICAgICAgICAgc3ViamVjdC5nZXRSZXF1aXJlZEludGVudHMoKS5hZGQoaW50ZW50KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAKICAgICB9CiAKICAgICBwcml2YXRlIHZvaWQgcmVhZEludGVudHMoUmVxdWlyZXMgaW50ZW50QW5ub3RhdGlvbiwgTGlzdDxJbnRlbnQ+IHJlcXVpcmVkSW50ZW50cykgewpAQCAtMTQ2LDI1ICsxNjEsNzggQEAKICAgICAgICAgfQogICAgIH0KIAorCXB1YmxpYyB2b2lkIHJlYWRXZWJTZXJ2aWNlc0Fubm90YXRpb25zKE1ldGhvZCBtLCBDbGFzczw/PiBjbGF6eiwgTGlzdDxJbnRlbnQ+IHJlcXVpcmVkSW50ZW50cykgeworCQkKKwkJV2ViUmVzdWx0IHdlYlJlc3VsdEFubm90YXRpb24gPSBtLmdldEFubm90YXRpb24oV2ViUmVzdWx0LmNsYXNzKTsKKwkJaWYgKHdlYlJlc3VsdEFubm90YXRpb24gIT0gbnVsbCkgeworCQkJaWYgKHdlYlJlc3VsdEFubm90YXRpb24uaGVhZGVyKCkpIHsKKwkJCQkvLyBBZGQgU09BUCBpbnRlbnQKKwkJCQlJbnRlbnQgaW50ZW50ID0gcG9saWN5RmFjdG9yeS5jcmVhdGVJbnRlbnQoKTsKKwkJCQlpbnRlbnQuc2V0TmFtZShDb25zdGFudHMuU09BUF9JTlRFTlQpOworCQkJCXJlcXVpcmVkSW50ZW50cy5hZGQoaW50ZW50KTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJCisJCUFubm90YXRpb25bXVtdIHBhcmFtZXRlckFubm90YXRpb25zID0gbS5nZXRQYXJhbWV0ZXJBbm5vdGF0aW9ucygpOworCQlmb3IgKCBpbnQgaT0wOyBpIDwgcGFyYW1ldGVyQW5ub3RhdGlvbnMubGVuZ3RoOyBpKysgKSB7CisJCQlmb3IgKCBpbnQgaj0wOyBqIDwgcGFyYW1ldGVyQW5ub3RhdGlvbnNbaV0ubGVuZ3RoOyBqKyspIHsKKwkJCQlpZiAoIHBhcmFtZXRlckFubm90YXRpb25zW2ldW2pdIGluc3RhbmNlb2YgV2ViUGFyYW0gKSB7CisJCQkJCVdlYlBhcmFtIHdlYlBhcmFtID0gKFdlYlBhcmFtKXBhcmFtZXRlckFubm90YXRpb25zW2ldW2pdOworCQkJCQlpZiAoIHdlYlBhcmFtLmhlYWRlcigpICkgeworCQkJCQkJLy8gQWRkIFNPQVAgaW50ZW50CisJCQkJCQlJbnRlbnQgaW50ZW50ID0gcG9saWN5RmFjdG9yeS5jcmVhdGVJbnRlbnQoKTsKKwkJCQkJCWludGVudC5zZXROYW1lKENvbnN0YW50cy5TT0FQX0lOVEVOVCk7CisJCQkJCQlyZXF1aXJlZEludGVudHMuYWRkKGludGVudCk7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKworCX0KICAgICBwdWJsaWMgdm9pZCB2aXNpdEludGVyZmFjZShKYXZhSW50ZXJmYWNlIGphdmFJbnRlcmZhY2UpIHRocm93cyBJbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uIHsKIAogICAgICAgICBpZiAoamF2YUludGVyZmFjZS5nZXRKYXZhQ2xhc3MoKSAhPSBudWxsKSB7Ci0gICAgICAgICAgICByZWFkSW50ZW50c0FuZFBvbGljeVNldHMoamF2YUludGVyZmFjZS5nZXRKYXZhQ2xhc3MoKSwgamF2YUludGVyZmFjZS5nZXRSZXF1aXJlZEludGVudHMoKSwgamF2YUludGVyZmFjZQotICAgICAgICAgICAgICAgIC5nZXRQb2xpY3lTZXRzKCkpOworICAgICAgICAJcmVhZEludGVudHNBbmRQb2xpY3lTZXRzKGphdmFJbnRlcmZhY2UuZ2V0SmF2YUNsYXNzKCksIGphdmFJbnRlcmZhY2UpOwogCiAgICAgICAgICAgICAvLyBSZWFkIGludGVudHMgb24gdGhlIHNlcnZpY2UgaW50ZXJmYWNlIG1ldGhvZHMgCiAgICAgICAgICAgICBMaXN0PE9wZXJhdGlvbj4gb3BlcmF0aW9ucyA9IGphdmFJbnRlcmZhY2UuZ2V0T3BlcmF0aW9ucygpOwogICAgICAgICAgICAgZm9yIChPcGVyYXRpb24gb3AgOiBvcGVyYXRpb25zKSB7CiAgICAgICAgICAgICAgICAgSmF2YU9wZXJhdGlvbiBvcGVyYXRpb24gPSAoSmF2YU9wZXJhdGlvbilvcDsKICAgICAgICAgICAgICAgICBNZXRob2QgbWV0aG9kID0gb3BlcmF0aW9uLmdldEphdmFNZXRob2QoKTsKKyAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgcmVhZEludGVudHMobWV0aG9kLmdldEFubm90YXRpb24oUmVxdWlyZXMuY2xhc3MpLCBvcC5nZXRSZXF1aXJlZEludGVudHMoKSk7CiAgICAgICAgICAgICAgICAgcmVhZFNwZWNpZmljSW50ZW50cyhtZXRob2QuZ2V0QW5ub3RhdGlvbnMoKSwgb3AuZ2V0UmVxdWlyZWRJbnRlbnRzKCkpOwogICAgICAgICAgICAgICAgIHJlYWRQb2xpY3lTZXRzKG1ldGhvZC5nZXRBbm5vdGF0aW9uKFBvbGljeVNldHMuY2xhc3MpLCBvcC5nZXRQb2xpY3lTZXRzKCkpOworICAgICAgICAgICAgICAgIHJlYWRXZWJTZXJ2aWNlc0Fubm90YXRpb25zKG1ldGhvZCwgamF2YUludGVyZmFjZS5nZXRKYXZhQ2xhc3MoKSwgamF2YUludGVyZmFjZS5nZXRSZXF1aXJlZEludGVudHMoKSk7CisgICAgICAgICAgICAgICAgaW5oZXJpdChqYXZhSW50ZXJmYWNlLCBvcCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIAorICAgICAKKyAgICAgICAKICAgICB9CiAKLSAgICBwcml2YXRlIHZvaWQgcmVhZFNwZWNpZmljSW50ZW50cyhBbm5vdGF0aW9uW10gYW5ub3RhdGlvbnMsIExpc3Q8SW50ZW50PiByZXF1aXJlZEludGVudHMpIHsKKyAgICBwcml2YXRlIHZvaWQgaW5oZXJpdChKYXZhSW50ZXJmYWNlIGphdmFJbnRlcmZhY2UsIE9wZXJhdGlvbiBvcCkgeworICAgIAlMaXN0PEludGVudD4gaW50ZXJmYWNlSW50ZW50cyA9IG5ldyBBcnJheUxpc3Q8SW50ZW50PihqYXZhSW50ZXJmYWNlLmdldFJlcXVpcmVkSW50ZW50cygpKTsKKwkJZm9yICggSW50ZW50IGludGVudCA6IGphdmFJbnRlcmZhY2UuZ2V0UmVxdWlyZWRJbnRlbnRzKCkgKSB7CisJCQkKKwkJCWZvciAoIEludGVudCBvcGVyYXRpb25JbnRlbnQgOiBvcC5nZXRSZXF1aXJlZEludGVudHMoKSApIHsKKwkJCQlpZiAoIGludGVudC5nZXRFeGNsdWRlZEludGVudHMoKS5jb250YWlucyhvcGVyYXRpb25JbnRlbnQpIHx8IAorCQkJCQkJb3BlcmF0aW9uSW50ZW50LmdldEV4Y2x1ZGVkSW50ZW50cygpLmNvbnRhaW5zKGludGVudCkgKSB7CisJCQkJCWludGVyZmFjZUludGVudHMucmVtb3ZlKGludGVudCk7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJfQorCQlvcC5nZXRSZXF1aXJlZEludGVudHMoKS5hZGRBbGwoaW50ZXJmYWNlSW50ZW50cyk7CisJCQorCQlvcC5nZXRQb2xpY3lTZXRzKCkuYWRkQWxsKGphdmFJbnRlcmZhY2UuZ2V0UG9saWN5U2V0cygpKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgcmVhZFNwZWNpZmljSW50ZW50cyhBbm5vdGF0aW9uW10gYW5ub3RhdGlvbnMsIExpc3Q8SW50ZW50PiByZXF1aXJlZEludGVudHMpIHsKICAgICAgICAgZm9yIChBbm5vdGF0aW9uIGEgOiBhbm5vdGF0aW9ucykgewogICAgICAgICAgICAgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5JbnRlbnQgaW50ZW50QW5ub3RhdGlvbiA9CiAgICAgICAgICAgICAgICAgYS5hbm5vdGF0aW9uVHlwZSgpLmdldEFubm90YXRpb24ob3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5JbnRlbnQuY2xhc3MpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEveG1sL0phdmFJbnRlcmZhY2VQcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi9qYXZhL3htbC9KYXZhSW50ZXJmYWNlUHJvY2Vzc29yLmphdmEKaW5kZXggODA1ZTY5MS4uOWUwMTM3NCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEveG1sL0phdmFJbnRlcmZhY2VQcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS94bWwvSmF2YUludGVyZmFjZVByb2Nlc3Nvci5qYXZhCkBAIC0zMSw2ICszMSw3IEBACiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Xcml0ZXI7CitpbXBvcnQgamF2YXgueG1sLndzLldlYlNlcnZpY2VDbGllbnQ7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbC5Qb2xpY3lTdWJqZWN0UHJvY2Vzc29yOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOwpAQCAtNDIsMTAgKzQzLDE3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb2x2ZXIuTW9kZWxSZXNvbHZlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRmFjdG9yeUV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5VdGlsaXR5RXh0ZW5zaW9uUG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuQ29tcGF0aWJpbGl0eTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbmNvbXBhdGlibGVJbnRlcmZhY2VDb250cmFjdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2VDb250cmFjdE1hcHBlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2VDb250cmFjdDsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2VGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGwuV1NETEZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYud3NkbC5XU0RMSW50ZXJmYWNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGwuV1NETEludGVyZmFjZUNvbnRyYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Nb25pdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Qcm9ibGVtOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvci5Qcm9ibGVtLlNldmVyaXR5OwpAQCAtNzYsMTMgKzg0LDIwIEBACiAgICAgcHJpdmF0ZSBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGV4dGVuc2lvblBvaW50czsKICAgICBwcml2YXRlIFBvbGljeUZhY3RvcnkgcG9saWN5RmFjdG9yeTsKICAgICBwcml2YXRlIFBvbGljeVN1YmplY3RQcm9jZXNzb3IgcG9saWN5UHJvY2Vzc29yOworICAgIHByaXZhdGUgV1NETEZhY3Rvcnkgd3NkbEZhY3Rvcnk7CisgICAgcHJpdmF0ZSBTdEFYQXJ0aWZhY3RQcm9jZXNzb3I8T2JqZWN0PiBleHRlbnNpb25Qcm9jZXNzb3I7CisgICAgcHJpdmF0ZSB0cmFuc2llbnQgSW50ZXJmYWNlQ29udHJhY3RNYXBwZXIgaW50ZXJmYWNlQ29udHJhY3RNYXBwZXI7CiAKLSAgICBwdWJsaWMgSmF2YUludGVyZmFjZVByb2Nlc3NvcihFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGV4dGVuc2lvblBvaW50cykgeworICAgIHB1YmxpYyBKYXZhSW50ZXJmYWNlUHJvY2Vzc29yKEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXh0ZW5zaW9uUG9pbnRzLCAgU3RBWEFydGlmYWN0UHJvY2Vzc29yPD8+IHN0YXhQcm9jZXNzb3IpIHsKICAgICAgICAgdGhpcy5leHRlbnNpb25Qb2ludHMgPSBleHRlbnNpb25Qb2ludHM7CiAgICAgICAgIEZhY3RvcnlFeHRlbnNpb25Qb2ludCBtb2RlbEZhY3RvcmllcyA9IGV4dGVuc2lvblBvaW50cy5nZXRFeHRlbnNpb25Qb2ludChGYWN0b3J5RXh0ZW5zaW9uUG9pbnQuY2xhc3MpOwogICAgICAgICB0aGlzLnBvbGljeUZhY3RvcnkgPSBtb2RlbEZhY3Rvcmllcy5nZXRGYWN0b3J5KFBvbGljeUZhY3RvcnkuY2xhc3MpOwogICAgICAgICB0aGlzLnBvbGljeVByb2Nlc3NvciA9IG5ldyBQb2xpY3lTdWJqZWN0UHJvY2Vzc29yKHBvbGljeUZhY3RvcnkpOwogICAgICAgICB0aGlzLmphdmFGYWN0b3J5ID0gbW9kZWxGYWN0b3JpZXMuZ2V0RmFjdG9yeShKYXZhSW50ZXJmYWNlRmFjdG9yeS5jbGFzcyk7CisgICAgICAgIHRoaXMud3NkbEZhY3RvcnkgPSBtb2RlbEZhY3Rvcmllcy5nZXRGYWN0b3J5KFdTRExGYWN0b3J5LmNsYXNzKTsKKyAgICAgICAgdGhpcy5leHRlbnNpb25Qcm9jZXNzb3IgPSAoU3RBWEFydGlmYWN0UHJvY2Vzc29yPE9iamVjdD4pc3RheFByb2Nlc3NvcjsKKyAgICAgICAgVXRpbGl0eUV4dGVuc2lvblBvaW50IHV0aWxpdGllcyA9IGV4dGVuc2lvblBvaW50cy5nZXRFeHRlbnNpb25Qb2ludChVdGlsaXR5RXh0ZW5zaW9uUG9pbnQuY2xhc3MpOworICAgICAgICB0aGlzLmludGVyZmFjZUNvbnRyYWN0TWFwcGVyID0gdXRpbGl0aWVzLmdldFV0aWxpdHkoSW50ZXJmYWNlQ29udHJhY3RNYXBwZXIuY2xhc3MpOwogICAgIH0KICAgICAKICAgICAvKioKQEAgLTIxMSw2ICsyMjYsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgLy8gSW50cm9zcGVjdCB0aGUgSmF2YSBpbnRlcmZhY2UgYW5kIHBvcHVsYXRlIHRoZSBpbnRlcmZhY2UgYW5kCiAgICAgICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbnMKICAgICAgICAgICAgICAgICAgICAgamF2YUZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZShqYXZhSW50ZXJmYWNlLCBqYXZhQ2xhc3MpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gY2FjaGUgdGhlIGNvbnRyaWJ1dGlvbiB0aGF0IHdhcyB1c2VkIHRvIHJlc29sdmUgdGhlIEphdmEgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIC8vIGluIGNhc2Ugd2UgbmVlZCBpdCB0byByZW9sdmUgYSByZWZlcmVuY2VkIFdTREwgZmlsZQorICAgICAgICAgICAgICAgICAgICBqYXZhSW50ZXJmYWNlLnNldENvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzcyhjbGFzc1JlZmVyZW5jZS5nZXRDb250cmlidXRpb25Db250YWluaW5nQ2xhc3MoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgICAgICAgCUNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24gY2UgPSBuZXcgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbigiUmVzb2x2aW5nIEphdmEgaW50ZXJmYWNlICIgKyBqYXZhSW50ZXJmYWNlLmdldE5hbWUoKSwgZSk7CkBAIC0yNDIsNiArMjYxLDggQEAKICAgICAgICAgICAgIEphdmFJbnRlcmZhY2UgamF2YUNhbGxiYWNrSW50ZXJmYWNlID0KICAgICAgICAgICAgICAgICByZXNvbHZlSmF2YUludGVyZmFjZSgoSmF2YUludGVyZmFjZSlqYXZhSW50ZXJmYWNlQ29udHJhY3QuZ2V0Q2FsbGJhY2tJbnRlcmZhY2UoKSwgcmVzb2x2ZXIsIGNvbnRleHQpOwogICAgICAgICAgICAgamF2YUludGVyZmFjZUNvbnRyYWN0LnNldENhbGxiYWNrSW50ZXJmYWNlKGphdmFDYWxsYmFja0ludGVyZmFjZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHBvc3RKQVhXU1Byb2Nlc3NvclJlc29sdmUoamF2YUludGVyZmFjZUNvbnRyYWN0LCByZXNvbHZlciwgY29udGV4dCk7CiAJICAgICAgICAKIAkgICAgICAgIGNoZWNrRm9yYmlkZGVuQW5ub3RhdGlvbnMobW9uaXRvciwgamF2YUludGVyZmFjZUNvbnRyYWN0KTsKIAkgICAgICAgIApAQCAtMjc5LDYgKzMwMCwxMSBAQAogICAgICAgICAgICAgICAgICAgICBlcnJvcihtb25pdG9yLCAiRm9yYmlkZGVuQW5ub3RhdGlvbkpDQTMwMDA4IiwgamF2YUludGVyZmFjZUNvbnRyYWN0LCBhLmFubm90YXRpb25UeXBlKCksIGlmYy5nZXROYW1lKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCBhLmFubm90YXRpb25UeXBlKCkuZXF1YWxzKFdlYlNlcnZpY2VDbGllbnQuY2xhc3MpICkgeworICAgICAgICAgICAgCWVycm9yKG1vbml0b3IsICJGb3JiaWRkZW5Bbm5vdGF0aW9uSkNBMTAwMDE4IiwgamF2YUludGVyZmFjZUNvbnRyYWN0LCBhLmFubm90YXRpb25UeXBlKCksIGlmYy5nZXROYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCQogICAgICAgICB9CiAgICAgICAgIGZvciAoTWV0aG9kIG0gOiBpZmMuZ2V0TWV0aG9kcygpKSB7CiAgICAgICAgICAgICBmb3IgKEFubm90YXRpb24gYSA6IG0uZ2V0QW5ub3RhdGlvbnMoKSkgewpAQCAtMzYxLDQgKzM4Nyw1OSBAQAogICAgIHB1YmxpYyBDbGFzczxKYXZhSW50ZXJmYWNlQ29udHJhY3Q+IGdldE1vZGVsVHlwZSgpIHsKICAgICAgICAgcmV0dXJuIEphdmFJbnRlcmZhY2VDb250cmFjdC5jbGFzczsKICAgICB9CisgICAgCisgICAgcHJpdmF0ZSB2b2lkIHBvc3RKQVhXU1Byb2Nlc3NvclJlc29sdmUoSmF2YUludGVyZmFjZUNvbnRyYWN0IGphdmFJbnRlcmZhY2VDb250cmFjdCwgTW9kZWxSZXNvbHZlciByZXNvbHZlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KQorICAgICAgICB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiwgSW5jb21wYXRpYmxlSW50ZXJmYWNlQ29udHJhY3RFeGNlcHRpb24geworICAgICAgICAKKyAgICAgICAgSmF2YUludGVyZmFjZSBqYXZhSW50ZXJmYWNlID0gKEphdmFJbnRlcmZhY2UpamF2YUludGVyZmFjZUNvbnRyYWN0LmdldEludGVyZmFjZSgpOworICAgICAgICAKKyAgICAgICAgLy8gdGhlIEphdmEgaW50ZXJmYWNlIG1heSBub3cgYmUgbWFya2VkIGFzIHVucmVzb2x2ZWQgZHVlIHRvIGEgbmV3IEphdmEgaW50ZXJmYWNlIAorICAgICAgICAvLyBuYW1lIHJldHJpZXZlZCBmcm9tIEpBWFdTIGFubm90YXRpb25zLiBSZXNvbHZlIGl0IGFnYWluIGlmIGl0IGlzLgorICAgICAgICBpZiAoamF2YUludGVyZmFjZSAhPSBudWxsICYmIGphdmFJbnRlcmZhY2UuaXNVbnJlc29sdmVkKCkpeworICAgICAgICAgICAgamF2YUludGVyZmFjZSA9IHJlc29sdmVKYXZhSW50ZXJmYWNlKGphdmFJbnRlcmZhY2UsIHJlc29sdmVyLCBjb250ZXh0KTsKKyAgICAgICAgICAgIGphdmFJbnRlcmZhY2VDb250cmFjdC5zZXRJbnRlcmZhY2UoamF2YUludGVyZmFjZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEphdmFJbnRlcmZhY2UgamF2YUNhbGxiYWNrSW50ZXJmYWNlID0gKEphdmFJbnRlcmZhY2UpamF2YUludGVyZmFjZUNvbnRyYWN0LmdldENhbGxiYWNrSW50ZXJmYWNlKCk7CisgICAgICAgIC8vIHRoZSBKYXZhIGNhbGxiYWNrIGludGVyZmFjZSBtYXkgbm93IGJlIG1hcmtlZCBhcyB1bnJlc29sdmVkIGR1ZSB0byBhIG5ldyBKYXZhIGludGVyZmFjZSAKKyAgICAgICAgLy8gbmFtZSByZXRyaWV2ZWQgZnJvbSBKQVhXUyBhbm5vdGF0aW9ucy4gUmVzb2x2ZSBpdCBhZ2FpbiBpZiBpdCBpcy4KKyAgICAgICAgaWYgKGphdmFDYWxsYmFja0ludGVyZmFjZSAhPSBudWxsICYmIGphdmFDYWxsYmFja0ludGVyZmFjZS5pc1VucmVzb2x2ZWQoKSl7CisgICAgICAgICAgICBqYXZhQ2FsbGJhY2tJbnRlcmZhY2UgPSByZXNvbHZlSmF2YUludGVyZmFjZShqYXZhQ2FsbGJhY2tJbnRlcmZhY2UsIHJlc29sdmVyLCBjb250ZXh0KTsKKyAgICAgICAgICAgIGphdmFJbnRlcmZhY2VDb250cmFjdC5zZXRDYWxsYmFja0ludGVyZmFjZShqYXZhQ2FsbGJhY2tJbnRlcmZhY2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyB0aGUgSmF2YSBpbnRlcmZhY2UgbWF5IGJlIHJlcGxhY2VkIGJ5IGEgV1NETCBjb250cmFjdCBwaWNrZWQgdXAgZnJvbSBKQVhXUyBhbm5vdGF0aW9uCisgICAgICAgIC8vIGlmIHNvIHdlIG5lZWQgdG8gZmx1ZmYgdXAgYSBXU0RMIGNvbnRyYWN0IGFuZCBzZXQgaXQgdG8gYmUgdGhlIG5vcm1hbGl6ZWQgY29udHJhY3QKKyAgICAgICAgLy8gZm9yIHRoZSBKYXZhIGludGVyZmFjZSBzbyBpdCdzIHVzZWQgZHVyaW5nIGNvbnRyYWN0IG1hcHBpbmcKKyAgICAgICAgaWYgKGphdmFJbnRlcmZhY2UgIT0gbnVsbCAmJiBqYXZhSW50ZXJmYWNlLmdldEpBWFdTV1NETExvY2F0aW9uKCkgIT0gbnVsbCl7CisgICAgICAgICAgICBXU0RMSW50ZXJmYWNlIHdzZGxJbnRlcmZhY2UgPSB3c2RsRmFjdG9yeS5jcmVhdGVXU0RMSW50ZXJmYWNlKCk7CisgICAgICAgICAgICB3c2RsSW50ZXJmYWNlLnNldFVucmVzb2x2ZWQodHJ1ZSk7CisgICAgICAgICAgICB3c2RsSW50ZXJmYWNlLnNldFJlbW90YWJsZSh0cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgV1NETEludGVyZmFjZUNvbnRyYWN0IHdzZGxJbnRlcmZhY2VDb250cmFjdCA9IHdzZGxGYWN0b3J5LmNyZWF0ZVdTRExJbnRlcmZhY2VDb250cmFjdCgpOworICAgICAgICAgICAgd3NkbEludGVyZmFjZUNvbnRyYWN0LnNldEludGVyZmFjZSh3c2RsSW50ZXJmYWNlKTsKKyAgICAgICAgICAgIHdzZGxJbnRlcmZhY2VDb250cmFjdC5zZXRMb2NhdGlvbihqYXZhSW50ZXJmYWNlLmdldEpBWFdTV1NETExvY2F0aW9uKCkpOworICAgICAgICAgICAgamF2YUludGVyZmFjZUNvbnRyYWN0LnNldE5vcm1haWxpemVkV1NETENvbnRyYWN0KHdzZGxJbnRlcmZhY2VDb250cmFjdCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFByb2Nlc3NvckNvbnRleHQgd3NkbENvbnRleHQgPSBuZXcgUHJvY2Vzc29yQ29udGV4dChqYXZhSW50ZXJmYWNlLmdldENvbnRyaWJ1dGlvbkNvbnRhaW5pbmdDbGFzcygpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmdldE1vbml0b3IoKSk7CisgICAgICAgICAgICBleHRlbnNpb25Qcm9jZXNzb3IucmVzb2x2ZSh3c2RsSW50ZXJmYWNlQ29udHJhY3QsIHJlc29sdmVyLCB3c2RsQ29udGV4dCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIEphdmEgYW5kIFdTREwgY29udHJhY3RzIGFyZSBjb21wYXRpYmxlCisgICAgICAgICAgICBpbnRlcmZhY2VDb250cmFjdE1hcHBlci5jaGVja0NvbXBhdGliaWxpdHkod3NkbEludGVyZmFjZUNvbnRyYWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGphdmFJbnRlcmZhY2VDb250cmFjdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcGF0aWJpbGl0eS5TVUJTRVQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIGNvcHkgcG9saWN5IGZyb20gdGhlIFdTREwgaW50ZXJmYWNlIHRvIHRoZSBKYXZhIGludGVyZmFjZQorICAgICAgICAgICAgamF2YUludGVyZmFjZS5nZXRQb2xpY3lTZXRzKCkuYWRkQWxsKHdzZGxJbnRlcmZhY2UuZ2V0UG9saWN5U2V0cygpKTsKKyAgICAgICAgICAgIGphdmFJbnRlcmZhY2UuZ2V0UmVxdWlyZWRJbnRlbnRzKCkuYWRkQWxsKHdzZGxJbnRlcmZhY2UuZ2V0UmVxdWlyZWRJbnRlbnRzKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgIC8vIFRPRE8gLSBpcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRvIGJlIGNvcGllZCBmcm9tIHRoZSB1c2VyIHNwZWNpZmllZCBXU0RMPworICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFRPRE8gLSBob3cgdG8gaGFuZGxlIGNhbGxiYWNrcyBhcyB0aGUgbG9jYXRpb24gaXMgc3RvcmVkIGF0IHRoZSBjb250cmFjdCBsZXZlbD8gICAgICAgIAorICAgIH0gICAgICAKIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvaW50ZXJmYWNlLWphdmEvc3JjL21haW4vcmVzb3VyY2VzL2ludGVyZmFjZS1qYXZheG1sLXZhbGlkYXRpb24tbWVzc2FnZXMucHJvcGVydGllcyBiL21vZHVsZXMvaW50ZXJmYWNlLWphdmEvc3JjL21haW4vcmVzb3VyY2VzL2ludGVyZmFjZS1qYXZheG1sLXZhbGlkYXRpb24tbWVzc2FnZXMucHJvcGVydGllcwppbmRleCA3M2EyNTU1Li4zMjlmNTVlIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9pbnRlcmZhY2UtamF2YXhtbC12YWxpZGF0aW9uLW1lc3NhZ2VzLnByb3BlcnRpZXMKKysrIGIvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9zcmMvbWFpbi9yZXNvdXJjZXMvaW50ZXJmYWNlLWphdmF4bWwtdmFsaWRhdGlvbi1tZXNzYWdlcy5wcm9wZXJ0aWVzCkBAIC0yNCw0ICsyNCw1IEBACiBGb3JiaWRkZW5Bbm5vdGF0aW9uSkNBMzAwMDYgPSBbSkNBMzAwMDZdIEZvcmJpZGRlbiBhbm5vdGF0aW9uIHswfSBmb3VuZCBvbiBzZXJ2aWNlIGludGVyZmFjZSBpbiBjbGFzcyB7MX0KIEZvcmJpZGRlbkFubm90YXRpb25KQ0EzMDAwNyA9IFtKQ0EzMDAwN10gRm9yYmlkZGVuIGFubm90YXRpb24gezB9IGZvdW5kIG9uIGNhbGxiYWNrIGludGVyZmFjZSBpbiBjbGFzcyB7MX0KIEZvcmJpZGRlbkFubm90YXRpb25KQ0EzMDAwOCA9IFtKQ0EzMDAwOF0gRm9yYmlkZGVuIGFubm90YXRpb24gezB9IGZvdW5kIGluIGNsYXNzIHsxfQorRm9yYmlkZGVuQW5ub3RhdGlvbkpDQTEwMDAxOCA9IFtKQ0ExMDAwMThdIEZvcmJpZGRlbiBhbm5vdGF0aW9uIHswfSBmb3VuZCBpbiBjbGFzcyB7MX0KIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9pbnRlcmZhY2UtamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL2phdmEvaW50cm9zcGVjdGlvbi9pbXBsL1BvbGljeVByb2Nlc3NvclRlc3RDYXNlLmphdmEgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9pbnRyb3NwZWN0aW9uL2ltcGwvUG9saWN5UHJvY2Vzc29yVGVzdENhc2UuamF2YQppbmRleCA4OGVmOTBlLi40MWZhY2RiIDEwMDY0NAotLS0gYS9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9pbnRyb3NwZWN0aW9uL2ltcGwvUG9saWN5UHJvY2Vzc29yVGVzdENhc2UuamF2YQorKysgYi9tb2R1bGVzL2ludGVyZmFjZS1qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvamF2YS9pbnRyb3NwZWN0aW9uL2ltcGwvUG9saWN5UHJvY2Vzc29yVGVzdENhc2UuamF2YQpAQCAtNjQsMTEgKzY0LDExIEBACiAgICAgICAgIEphdmFJbnRlcmZhY2UgdHlwZSA9IGZhY3RvcnkuY3JlYXRlSmF2YUludGVyZmFjZShJbnRlcmZhY2UzLmNsYXNzKTsKICAgICAgICAgLy8gcG9saWN5UHJvY2Vzc29yLnZpc2l0SW50ZXJmYWNlKHR5cGUpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdHlwZS5nZXRSZXF1aXJlZEludGVudHMoKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdHlwZS5nZXRPcGVyYXRpb25zKCkuZ2V0KDApLmdldFJlcXVpcmVkSW50ZW50cygpLnNpemUoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygxLCB0eXBlLmdldE9wZXJhdGlvbnMoKS5nZXQoMSkuZ2V0UmVxdWlyZWRJbnRlbnRzKCkuc2l6ZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHR5cGUuZ2V0T3BlcmF0aW9ucygpLmdldCgwKS5nZXRSZXF1aXJlZEludGVudHMoKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMywgdHlwZS5nZXRPcGVyYXRpb25zKCkuZ2V0KDEpLmdldFJlcXVpcmVkSW50ZW50cygpLnNpemUoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygxLCB0eXBlLmdldFBvbGljeVNldHMoKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdHlwZS5nZXRPcGVyYXRpb25zKCkuZ2V0KDApLmdldFBvbGljeVNldHMoKS5zaXplKCkpOwotICAgICAgICBhc3NlcnRFcXVhbHMoMSwgdHlwZS5nZXRPcGVyYXRpb25zKCkuZ2V0KDEpLmdldFBvbGljeVNldHMoKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdHlwZS5nZXRPcGVyYXRpb25zKCkuZ2V0KDApLmdldFBvbGljeVNldHMoKS5zaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgdHlwZS5nZXRPcGVyYXRpb25zKCkuZ2V0KDEpLmdldFBvbGljeVNldHMoKS5zaXplKCkpOwogICAgIH0KIAogICAgIEBCZWZvcmUKZGlmZiAtLWdpdCBhL21vZHVsZXMvaW50ZXJmYWNlLXdzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9tb2R1bGVzL2ludGVyZmFjZS13c2RsL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDc1YWQ2ODEuLjUxYzI1Y2EgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvaW50ZXJmYWNlLXdzZGwvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvbW9kdWxlcy9pbnRlcmZhY2Utd3NkbC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMjAsNiArMjAsNyBAQAogIGphdmF4LndzZGwueG1sLA0KICBqYXZheC54bWwubmFtZXNwYWNlLA0KICBqYXZheC54bWwuc3RyZWFtLA0KKyBqYXZheC54bWwudHJhbnNmb3JtLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCiAgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw7dmVyc2lvbj0iMi4wLjAiLA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi5qYXZhLmlvO3ZlcnNpb249IjIuMC4wIiwNCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ludGVyZmFjZS13c2RsL3BvbS54bWwgYi9tb2R1bGVzL2ludGVyZmFjZS13c2RsL3BvbS54bWwKaW5kZXggM2IwZDNhYy4uNGVjODkwNCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9pbnRlcmZhY2Utd3NkbC9wb20ueG1sCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLXdzZGwvcG9tLnhtbApAQCAtNTksMTIgKzU5LDEyIEBACiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgCi0gICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICA8IS0tIGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXNjYS1ydW50aW1lPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKKyAgICAgICAgPC9kZXBlbmRlbmN5LS0+ICAgICAgICAKIAogICAgIDwvZGVwZW5kZW5jaWVzPgogCmRpZmYgLS1naXQgYS9tb2R1bGVzL2ludGVyZmFjZS13c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvd3NkbC94bWwvV1NETEludGVyZmFjZVByb2Nlc3Nvci5qYXZhIGIvbW9kdWxlcy9pbnRlcmZhY2Utd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW50ZXJmYWNlZGVmL3dzZGwveG1sL1dTRExJbnRlcmZhY2VQcm9jZXNzb3IuamF2YQppbmRleCA0ZjgzOGU5Li4zYzU1MGQ5IDEwMDY0NAotLS0gYS9tb2R1bGVzL2ludGVyZmFjZS13c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pbnRlcmZhY2VkZWYvd3NkbC94bWwvV1NETEludGVyZmFjZVByb2Nlc3Nvci5qYXZhCisrKyBiL21vZHVsZXMvaW50ZXJmYWNlLXdzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ludGVyZmFjZWRlZi93c2RsL3htbC9XU0RMSW50ZXJmYWNlUHJvY2Vzc29yLmphdmEKQEAgLTIxLDEzICsyMSwxOCBAQAogCiBpbXBvcnQgc3RhdGljIGphdmF4LnhtbC5zdHJlYW0uWE1MU3RyZWFtQ29uc3RhbnRzLkVORF9FTEVNRU5UOwogCitpbXBvcnQgamF2YS5uZXQuVVJJOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCiBpbXBvcnQgamF2YXgud3NkbC5Qb3J0VHlwZTsKK2ltcG9ydCBqYXZheC53c2RsLldTRExFbGVtZW50OwogaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7CiBpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Xcml0ZXI7CiAKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LnhtbC5Qb2xpY3lTdWJqZWN0UHJvY2Vzc29yOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkFydGlmYWN0OwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5CYXNlU3RBWEFydGlmYWN0UHJvY2Vzc29yOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOwpAQCAtMzYyLDggKzM2Nyw5OSBAQAogICAgICAqLwogICAgIHB1YmxpYyB2b2lkIHJlc29sdmUoV1NETEludGVyZmFjZUNvbnRyYWN0IHdzZGxJbnRlcmZhY2VDb250cmFjdCwgTW9kZWxSZXNvbHZlciByZXNvbHZlciwgUHJvY2Vzc29yQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7CiAgICAgICAgIE1vbml0b3IgbW9uaXRvciA9IGNvbnRleHQuZ2V0TW9uaXRvcigpOworICAgICAgICAKKyAgICAgICAgV1NETEludGVyZmFjZSB3c2RsSW50ZXJmYWNlID0gKFdTRExJbnRlcmZhY2Upd3NkbEludGVyZmFjZUNvbnRyYWN0LmdldEludGVyZmFjZSgpOworICAgICAgICAKKyAgICAgICAgLy8gaWYgdGhlIGNvbnRyYWN0IGhhcyBhIGxvY2F0aW9uIGJ1dCBubyBXU0RMIGRlZmluaXRpb24geWV0IHdlIG5lZWQgdG8gcmVhZCB0aGUgV1NETAorICAgICAgICAvLyBmcm9tIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gYW5kIGNyZWF0ZSBhbiBpbnRlcmZhY2UgYmFzZWQgb24gdGhlIGZpcnN0IHBvcnQgdHlwZQorICAgICAgICAvLyB0aGlzIGlzIHJlcXVpcmVkIGlmIHRoZSB1c2VyIHVzZXMgdGhlIEBXZWJTZXJ2aWNlKHdzZGxMb2NhdGlvbj0iIikgb3IgCisgICAgICAgIC8vIEBXZWJTZXJ2aWNlUHJvdmlkZXIod3NkbExvY2F0aW9uPSIiKSBhbm5vdGF0aW9uIGluIGEgSmF2YSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24uIAorICAgICAgICBpZiAod3NkbEludGVyZmFjZUNvbnRyYWN0LmdldExvY2F0aW9uKCkgIT0gbnVsbCAmJgorICAgICAgICAgICAgd3NkbEludGVyZmFjZS5nZXRXc2RsRGVmaW5pdGlvbigpID09IG51bGwpeworICAgICAgICAgICAgCisgICAgICAgICAgICBXU0RMRGVmaW5pdGlvbiB3c2RsRGVmaW5pdGlvbiA9IG51bGw7CisgCisgICAgICAgICAgICBVUkkgd3NkbEZpbGVVUkkgPSBudWxsOworICAgICAgICAgICAgCisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHdzZGxGaWxlVVJJID0gbmV3IFVSSSh3c2RsSW50ZXJmYWNlQ29udHJhY3QuZ2V0TG9jYXRpb24oKSk7CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICBNb25pdG9yLmVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIFdTRExJbnRlcmZhY2VQcm9jZXNzb3IuY2xhc3MuZ2V0TmFtZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2Utd3NkbHhtbC12YWxpZGF0aW9uLW1lc3NhZ2VzIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAid3NkbGlMb2NhdGlvbkV4Y2VwdGlvbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgZXguZ2V0TWVzc2FnZSgpICk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmQgYSBwb3J0VHlwZSBmcm9tIHRoZSB1c2VyIHNwZWNpZmllZCBXU0RMICh0aGUgZmlyc3Qgb25lPykgZnJvbSB3aGljaCB0byBkZWZpbmVkCisgICAgICAgICAgICAvLyB0aGUgc2VydmljZSBpbnRlcmZhY2UuIFdlIGNhbid0IGp1c3QgdXNlIHRoZSBUdXNjYW55IHJlc29sdXRpb24gbWVjaGFuaXNtIHRvIGZpbmQgdGhlIFdTREwgZmlsZQorICAgICAgICAgICAgLy8gYXMgdGhhdCBsdW1wcyB0b2dldGhlciBhbGwgV1NETCBpbiB0aGUgc2FtZSBuYW1lc3BhY2UuIFRoYXQncyBmaW5lIGlmIHlvdSBhbHJlYWR5IGtub3cgd2hhdCBwb3J0VHlwZQorICAgICAgICAgICAgLy8geW91ciBhZnRlci4gSW4gdGhpcyBjYXNlIHdlIGRvbid0IHNvIHdlIGhhdmUgdG8gZ2V0IHRoZSBXU0RMIHNwZWNpZmllZCwgZmluZCBvdXQgd2hhdCBpdCdzIGZpcnN0IHBvcnRUeXBlCisgICAgICAgICAgICAvLyBpcyBhbmQgdGhlbiBnbyBmcm9tIHRoZXJlIHdpdGggdGhlIHVzdWFsIFR1c2NhbnkgcmVzb2x1dGlvbiBtZWNoYW5pc20KKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgaWYgKHdzZGxGaWxlVVJJLmlzQWJzb2x1dGUoKSl7CisgICAgICAgICAgICAgICAgICAgIC8vIHVzZSB0aGUgd3NkbGk6d3NkbExvY2F0aW9uIG1lY2hhbmlzbSBpbiB0aGUgV1NETE1vZGVsUmVzb2x2ZXIgdG8gCisgICAgICAgICAgICAgICAgICAgIC8vIGxvYWQgdGhlIFdTREwgZnJvbSBhbiBhYnNvbHV0ZSBsb2NhdGlvbiAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgd3NkbERlZmluaXRpb24gPSB3c2RsRmFjdG9yeS5jcmVhdGVXU0RMRGVmaW5pdGlvbigpOworICAgICAgICAgICAgICAgICAgICB3c2RsRGVmaW5pdGlvbi5zZXRVbnJlc29sdmVkKHRydWUpOworICAgICAgICAgICAgICAgICAgICB3c2RsRGVmaW5pdGlvbi5zZXROYW1lc3BhY2UoIm5vbmFtZXNwYWNlIik7IAorICAgICAgICAgICAgICAgICAgICB3c2RsRGVmaW5pdGlvbi5nZXRXc2RsaUxvY2F0aW9ucygpLnB1dCgibm9uYW1lc3BhY2UiLCB3c2RsSW50ZXJmYWNlQ29udHJhY3QuZ2V0TG9jYXRpb24oKSk7CisgICAgICAgICAgICAgICAgICAgIHdzZGxEZWZpbml0aW9uLnNldExvY2F0aW9uKG5ldyBVUkkod3NkbEludGVyZmFjZUNvbnRyYWN0LmdldExvY2F0aW9uKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIHRoZSB3c2RsIGluIHRoZSBjb250cmlidXRpb24gcmVhZHkgZm9yIGZ1cnRoZXIgcmVzb2x1dGlvbgorICAgICAgICAgICAgICAgICAgICBmb3IgKEFydGlmYWN0IGFydGlmYWN0IDogY29udGV4dC5nZXRDb250cmlidXRpb24oKS5nZXRBcnRpZmFjdHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFydGlmYWN0LmdldExvY2F0aW9uKCkuZW5kc1dpdGgod3NkbEludGVyZmFjZUNvbnRyYWN0LmdldExvY2F0aW9uKCkpKXsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXU0RMRGVmaW5pdGlvbiBhcnRpZmFjdFdTRExEZWZpbml0aW9uID0gYXJ0aWZhY3QuZ2V0TW9kZWwoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c2RsRGVmaW5pdGlvbiA9IHdzZGxGYWN0b3J5LmNyZWF0ZVdTRExEZWZpbml0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3NkbERlZmluaXRpb24uc2V0VW5yZXNvbHZlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3c2RsRGVmaW5pdGlvbi5zZXROYW1lc3BhY2UoYXJ0aWZhY3RXU0RMRGVmaW5pdGlvbi5nZXROYW1lc3BhY2UoKSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzZGxEZWZpbml0aW9uLmdldFdzZGxpTG9jYXRpb25zKCkucHV0KGFydGlmYWN0V1NETERlZmluaXRpb24uZ2V0TmFtZXNwYWNlKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFydGlmYWN0LmdldExvY2F0aW9uKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdzZGxEZWZpbml0aW9uLnNldExvY2F0aW9uKG5ldyBVUkkoYXJ0aWZhY3QuZ2V0TG9jYXRpb24oKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAod3NkbERlZmluaXRpb24gPT0gbnVsbCl7CisgICAgICAgICAgICAgICAgICAgICAgICBNb25pdG9yLmVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NETEludGVyZmFjZVByb2Nlc3Nvci5jbGFzcy5nZXROYW1lKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJmYWNlLXdzZGx4bWwtdmFsaWRhdGlvbi1tZXNzYWdlcyIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3NkbGlMb2NhdGlvbkV4Y2VwdGlvbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV1NETCBub3QgZm91bmQgaW5zaWRlIGNvbnRyaWJ1dGlvbiBhdCByZWxhdGl2ZSBVUkkgIiArIHdzZGxGaWxlVVJJICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZXgpIHsKKyAgICAgICAgICAgICAgICBNb25pdG9yLmVycm9yKGNvbnRleHQuZ2V0TW9uaXRvcigpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdTRExJbnRlcmZhY2VQcm9jZXNzb3IuY2xhc3MuZ2V0TmFtZSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2Utd3NkbHhtbC12YWxpZGF0aW9uLW1lc3NhZ2VzIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3NkbGlMb2NhdGlvbkV4Y2VwdGlvbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXguZ2V0TWVzc2FnZSgpICk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB3c2RsRGVmaW5pdGlvbi5zZXRVbnJlc29sdmVkKHRydWUpOworICAgICAgICAgICAgd3NkbERlZmluaXRpb24gPSByZXNvbHZlci5yZXNvbHZlTW9kZWwoV1NETERlZmluaXRpb24uY2xhc3MsIHdzZGxEZWZpbml0aW9uLCBjb250ZXh0KTsKKyAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSBmaXJzdCBwb3J0IHR5cGUKKyAgICAgICAgICAgIFBvcnRUeXBlIHBvcnRUeXBlID0gKFBvcnRUeXBlKXdzZGxEZWZpbml0aW9uLmdldERlZmluaXRpb24oKS5nZXRBbGxQb3J0VHlwZXMoKS52YWx1ZXMoKS5pdGVyYXRvcigpLm5leHQoKTsKKyAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgV1NETEludGVyZmFjZSBuZXdXU0RMSW50ZXJmYWNlID0gd3NkbEZhY3RvcnkuY3JlYXRlV1NETEludGVyZmFjZShwb3J0VHlwZSwgd3NkbERlZmluaXRpb24sIHJlc29sdmVyLCBtb25pdG9yKTsKKyAgICAgICAgICAgICAgICBuZXdXU0RMSW50ZXJmYWNlLmdldFJlcXVpcmVkSW50ZW50cygpLmFkZEFsbCh3c2RsSW50ZXJmYWNlLmdldFJlcXVpcmVkSW50ZW50cygpKTsKKyAgICAgICAgICAgICAgICBuZXdXU0RMSW50ZXJmYWNlLmdldFBvbGljeVNldHMoKS5hZGRBbGwod3NkbEludGVyZmFjZS5nZXRQb2xpY3lTZXRzKCkpOworICAgICAgICAgICAgICAgIHdzZGxJbnRlcmZhY2UgPSBuZXdXU0RMSW50ZXJmYWNlOworICAgICAgICAgICAgfSBjYXRjaCAoSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiBjZSA9IG5ldyBDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uKCJJbnZhbGlkIGludGVyZmFjZSB3aGVuIHJlc29sdmluZyAiICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0VHlwZS50b1N0cmluZygpLCBlKTsKKyAgICAgICAgICAgICAgICBlcnJvcihtb25pdG9yLCAiQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiIsIHdzZGxGYWN0b3J5LCBjZSk7CisgICAgICAgICAgICB9ICAgIAorICAgICAgICAgICAgCisgICAgICAgICAgICB3c2RsSW50ZXJmYWNlLnNldFdzZGxEZWZpbml0aW9uKHdzZGxEZWZpbml0aW9uKTsKKyAgICAgICAgICAgIHdzZGxJbnRlcmZhY2VDb250cmFjdC5zZXRJbnRlcmZhY2Uod3NkbEludGVyZmFjZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIC8vIFJlc29sdmUgdGhlIGludGVyZmFjZSBhbmQgY2FsbGJhY2sgaW50ZXJmYWNlCi0gICAgICAgIFdTRExJbnRlcmZhY2Ugd3NkbEludGVyZmFjZSA9IHJlc29sdmVXU0RMSW50ZXJmYWNlKChXU0RMSW50ZXJmYWNlKXdzZGxJbnRlcmZhY2VDb250cmFjdC5nZXRJbnRlcmZhY2UoKSwgcmVzb2x2ZXIsIGNvbnRleHQpOworICAgICAgICB3c2RsSW50ZXJmYWNlID0gcmVzb2x2ZVdTRExJbnRlcmZhY2Uod3NkbEludGVyZmFjZSwgcmVzb2x2ZXIsIGNvbnRleHQpOwogICAgICAgICB3c2RsSW50ZXJmYWNlQ29udHJhY3Quc2V0SW50ZXJmYWNlKHdzZGxJbnRlcmZhY2UpOwogICAgICAgICAKICAgICAgICAgLy8gVGhlIGZvcndhcmQgaW50ZXJmYWNlIChwb3J0VHlwZSkgbWF5IGhhdmUgYSBjYWxsYmFjayBpbnRlcmZhY2UgZGVjbGFyZWQgb24gaXQgdXNpbmcgYW4gc2NhOmNhbGxiYWNrIGF0dHJpYnV0ZQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9ub2RlLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9Ob2RlRmFjdG9yeS5qYXZhIGIvbW9kdWxlcy9ub2RlLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9Ob2RlRmFjdG9yeS5qYXZhCmluZGV4IDJkMmRmODQuLjk1ZDFhZGMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvbm9kZS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvTm9kZUZhY3RvcnkuamF2YQorKysgYi9tb2R1bGVzL25vZGUtYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL05vZGVGYWN0b3J5LmphdmEKQEAgLTYwOSw2ICs2MDksMTMgQEAKICAgICAgKiBAcmV0dXJuIFRoZSBTQ0Egbm9kZQogICAgICAqLwogICAgIHB1YmxpYyBhYnN0cmFjdCBOb2RlIGNyZWF0ZU5vZGUoTm9kZUNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbik7CisgICAgCisgICAgLyoqCisgICAgICogQ3JlYXRlIGFuIFNDQSBub2RlIGZyb20gYSBsaXN0IG9mIHByZS1idWlsdCBvLmEudC5zY2EuY29udHJpYnV0aW9uLkNvbnRyaWJ1dGlvbiBvYmplY3RzLgorICAgICAqIFBhc3MgamF2YS5sYW5nLk9iamVjdHMgZm9yIG5vdyBhcyB0aGlzIGNsYXNzIGRvZXNuJ3QgaGF2ZSBkaXJlY3QgZGVwZW5kZW5jaWVzIG9uCisgICAgICogby5hLnQuc2NhLmNvbnRyaWJ1dGlvbi5Db250cmlidXRpb24uCisgICAgICovCisgICAgcHVibGljIGFic3RyYWN0IE5vZGUgY3JlYXRlTm9kZShMaXN0PD8+IGNvbnRyaWJ1dGlvbnMpOwogCiAgICAgLyoqCiAgICAgICogQ3JlYXRlIHRoZSBub2RlIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgWE1MIGRvY3VtZW50CmRpZmYgLS1naXQgYS9tb2R1bGVzL25vZGUtYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2NvbmZpZ3VyYXRpb24vQ29udHJpYnV0aW9uQ29uZmlndXJhdGlvbi5qYXZhIGIvbW9kdWxlcy9ub2RlLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9jb25maWd1cmF0aW9uL0NvbnRyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uamF2YQppbmRleCAwNWM3MThkLi5lZTc5MGY1IDEwMDY0NAotLS0gYS9tb2R1bGVzL25vZGUtYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2NvbmZpZ3VyYXRpb24vQ29udHJpYnV0aW9uQ29uZmlndXJhdGlvbi5qYXZhCisrKyBiL21vZHVsZXMvbm9kZS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvY29uZmlndXJhdGlvbi9Db250cmlidXRpb25Db25maWd1cmF0aW9uLmphdmEKQEAgLTk5LDQgKzk5LDQzIEBACiAgICAgICogQHJldHVybgogICAgICAqLwogICAgIENvbnRyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gYWRkRGVwbG95bWVudENvbXBvc2l0ZShJbnB1dFN0cmVhbSBjb250ZW50KTsKKworICAgIC8qKgorICAgICAqIFNldCBpZiB0aGUgZGVwbG95YWJsZSBjb21wb3NpdGVzIHNob3VsZCBiZSBzdGFydGVkIHdoZW4gdGhlIGNvbnRyaWJ1dGlvbiBpcyBpbnN0YWxsZWQKKyAgICAgKiBAcGFyYW0gc3RhcnREZXBsb3lhYmxlcyAgd2hldGhlciBvciBub3QgZGVwbG95YWJsZSBjb21wb3NpdGVzIHNob3VsZCBiZSBzdGFydGVkLiBUaGUgZGVmYXVsdCBpcyBmYWxzZS4KKyAgICAgKi8KKyAgICB2b2lkIHNldFN0YXJ0RGVwbG95YWJsZXMoYm9vbGVhbiBzdGFydERlcGxveWFibGVzKTsKKworICAgIC8qKgorICAgICAqIFRlc3RzIGlmIHRoZSBkZXBsb3lhYmxlIGNvbXBvc2l0ZXMgc2hvdWxkIGJlIHN0YXJ0ZWQgd2hlbiB0aGUgY29udHJpYnV0aW9uIGlzIGluc3RhbGxlZAorICAgICAqLworICAgIGJvb2xlYW4gaXNTdGFydERlcGxveWFibGVzKCk7CisKKyAgICAvKioKKyAgICAgKiBHZXRzIHRoZSBVUklzIG9mIGFueSBkZXBlbmRlbnQgY29udHJpYnV0aW9ucy4gVGhlIGRlcGVuZGVudCBjb250cmlidXRpb25zIGFyZSB0aGUKKyAgICAgKiBjb250cmlidXRpb25zIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHJlc29sdmUgYW55IGltcG9ydHMgdXNlZCBieSB0aGlzIGNvbnRyaWJ1dGlvbi4KKyAgICAgKiBAcmV0dXJuIHRoZSBVUklzIG9mIGFueSBkZXBlbmRlbnQgY29udHJpYnV0aW9uCisgICAgICovCisgICAgTGlzdDxTdHJpbmc+IGdldERlcGVuZGVudENvbnRyaWJ1dGlvblVSSXMoKTsKKworICAgIC8qKgorICAgICAqIFNldHMgdGhlIGRlcGVuZGVudCBjb250cmlidXRpb24gVVJJcyBmb3IgdGhpcyBjb250cmlidXRpb24uIFRoZSBkZXBlbmRlbnQgY29udHJpYnV0aW9ucyBhcmUgdGhlCisgICAgICogY29udHJpYnV0aW9ucyB0aGF0IHdpbGwgYmUgdXNlZCB0byByZXNvbHZlIGFueSBpbXBvcnRzIHVzZWQgYnkgdGhpcyBjb250cmlidXRpb24uCisgICAgICogQHBhcmFtIGRlcGVuZGVudENvbnRyaWJ1dGlvblVSSXMKKyAgICAgKi8KKyAgICB2b2lkIHNldERlcGVuZGVudENvbnRyaWJ1dGlvblVSSXMoTGlzdDxTdHJpbmc+IGRlcGVuZGVudENvbnRyaWJ1dGlvblVSSXMpOworCisgICAgLyoqCisgICAgICogR2V0IHRoZSBjb250cmlidXRpb24gbWV0YSBkYXRhIHVybC4gVGhpcyBpcyBzY2EtY29udHJpYnV0aW9uLnhtbCBkYXRhIHRoYXQgaXMgYWRkZWQgdG8gYW55IAorICAgICAqIGV4aXN0aW5nIG1ldGEtaW5mL3NjYS1jb250cmlidXRpb24ueG1sIGZpbGUgd2l0aGluIHRoZSBjb250cmlidXRpb24uCisgICAgICogQHJldHVybiB0aGUgbWV0YWRhdGEgdXJsIHN0cmluZworICAgICAqLworICAgIFN0cmluZyBnZXRNZXRhRGF0YVVSTCgpOworCisgICAgLyoqCisgICAgICogU2V0IHRoZSBjb250cmlidXRpb24gbWV0YSBkYXRhIHVybC4gVGhpcyBpcyBzY2EtY29udHJpYnV0aW9uLnhtbCBkYXRhIHRoYXQgaXMgYWRkZWQgdG8gYW55IAorICAgICAqIGV4aXN0aW5nIG1ldGEtaW5mL3NjYS1jb250cmlidXRpb24ueG1sIGZpbGUgd2l0aGluIHRoZSBjb250cmlidXRpb24uCisgICAgICogQHBhcmFtIG1ldGFEYXRhVVJMICB0aGUgdXJsIHN0cmluZyB0byB0aGUgbWV0YWRhdGEgZmlsZS4KKyAgICAgKi8KKyAgICB2b2lkIHNldE1ldGFEYXRhVVJMKFN0cmluZyBtZXRhRGF0YVVSTCk7CiB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL25vZGUtYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2NvbmZpZ3VyYXRpb24vaW1wbC9Db250cmlidXRpb25Db25maWd1cmF0aW9uSW1wbC5qYXZhIGIvbW9kdWxlcy9ub2RlLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9jb25maWd1cmF0aW9uL2ltcGwvQ29udHJpYnV0aW9uQ29uZmlndXJhdGlvbkltcGwuamF2YQppbmRleCA1MjI5ODAxLi5mNmU0NjIxIDEwMDY0NAotLS0gYS9tb2R1bGVzL25vZGUtYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2NvbmZpZ3VyYXRpb24vaW1wbC9Db250cmlidXRpb25Db25maWd1cmF0aW9uSW1wbC5qYXZhCisrKyBiL21vZHVsZXMvbm9kZS1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvY29uZmlndXJhdGlvbi9pbXBsL0NvbnRyaWJ1dGlvbkNvbmZpZ3VyYXRpb25JbXBsLmphdmEKQEAgLTM5LDYgKzM5LDkgQEAKICAgICBwcml2YXRlIExpc3Q8RGVwbG95bWVudENvbXBvc2l0ZT4gZGVwbG95bWVudENvbXBvc2l0ZXMgPSBuZXcgQXJyYXlMaXN0PERlcGxveW1lbnRDb21wb3NpdGU+KCk7CiAgICAgcHJpdmF0ZSBTdHJpbmcgdXJpOwogICAgIHByaXZhdGUgU3RyaW5nIGxvY2F0aW9uOworICAgIHByaXZhdGUgYm9vbGVhbiBzdGFydERlcGxveWFibGVzOworICAgIHByaXZhdGUgTGlzdDxTdHJpbmc+IGRlcGVuZGVudENvbnRyaWJ1dGlvblVSSXM7CisgICAgcHJpdmF0ZSBTdHJpbmcgbWV0YURhdGFVUkw7CiAKICAgICBwdWJsaWMgQ29udHJpYnV0aW9uQ29uZmlndXJhdGlvbkltcGwoKSB7CiAgICAgICAgIHN1cGVyKCk7CkBAIC0xNTIsNCArMTU1LDM0IEBACiAgICAgICAgIGNvbXBvc2l0ZS5zZXRMb2NhdGlvbihsb2NhdGlvbi50b1N0cmluZygpKTsKICAgICAgICAgcmV0dXJuIGFkZERlcGxveW1lbnRDb21wb3NpdGUoY29tcG9zaXRlKTsKICAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXRTdGFydERlcGxveWFibGVzKGJvb2xlYW4gc3RhcnREZXBsb3lhYmxlcykgeworICAgICAgICB0aGlzLnN0YXJ0RGVwbG95YWJsZXMgPSBzdGFydERlcGxveWFibGVzOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBib29sZWFuIGlzU3RhcnREZXBsb3lhYmxlcygpIHsKKyAgICAgICAgcmV0dXJuIHN0YXJ0RGVwbG95YWJsZXM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXREZXBlbmRlbnRDb250cmlidXRpb25VUklzKCkgeworICAgICAgICByZXR1cm4gZGVwZW5kZW50Q29udHJpYnV0aW9uVVJJczsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBzZXREZXBlbmRlbnRDb250cmlidXRpb25VUklzKExpc3Q8U3RyaW5nPiBkZXBlbmRlbnRDb250cmlidXRpb25VUklzKSB7CisgICAgICAgIHRoaXMuZGVwZW5kZW50Q29udHJpYnV0aW9uVVJJcyA9IGRlcGVuZGVudENvbnRyaWJ1dGlvblVSSXM7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBnZXRNZXRhRGF0YVVSTCgpIHsKKyAgICAgICAgcmV0dXJuIG1ldGFEYXRhVVJMOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIHNldE1ldGFEYXRhVVJMKFN0cmluZyBtZXRhRGF0YVVSTCkgeworICAgICAgICB0aGlzLm1ldGFEYXRhVVJMID0gbWV0YURhdGFVUkw7CisgICAgfQogfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9ub2RlLWltcGwtb3NnaS9wb20ueG1sIGIvbW9kdWxlcy9ub2RlLWltcGwtb3NnaS9wb20ueG1sCmluZGV4IGZhMzYzODQuLjE5MmNhNTEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvbm9kZS1pbXBsLW9zZ2kvcG9tLnhtbAorKysgYi9tb2R1bGVzL25vZGUtaW1wbC1vc2dpL3BvbS54bWwKQEAgLTExMCwxMiArMTEwLDE0IEBACiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAorPCEtLQogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcm1pLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CiAgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KKy0tPgogICAgIDwvZGVwZW5kZW5jaWVzPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9tb2R1bGVzL25vZGUtaW1wbC9wb20ueG1sIGIvbW9kdWxlcy9ub2RlLWltcGwvcG9tLnhtbAppbmRleCAxMzFlMWM1Li4zZDg2NzcxIDEwMDY0NAotLS0gYS9tb2R1bGVzL25vZGUtaW1wbC9wb20ueG1sCisrKyBiL21vZHVsZXMvbm9kZS1pbXBsL3BvbS54bWwKQEAgLTEwMiw2ICsxMDIsMTMgQEAKICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PiAgCisgICAgICAgIAorICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy13c2RsZ2VuPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgIAogICAgICAgICAgICAgICAKICAgICA8L2RlcGVuZGVuY2llcz4KIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9ub2RlLWltcGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvY29uZmlndXJhdGlvbi94bWwvTm9kZUNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IuamF2YSBiL21vZHVsZXMvbm9kZS1pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2NvbmZpZ3VyYXRpb24veG1sL05vZGVDb25maWd1cmF0aW9uUHJvY2Vzc29yLmphdmEKaW5kZXggNDZmNDZhMy4uNjYzMTI5YiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9ub2RlLWltcGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvY29uZmlndXJhdGlvbi94bWwvTm9kZUNvbmZpZ3VyYXRpb25Qcm9jZXNzb3IuamF2YQorKysgYi9tb2R1bGVzL25vZGUtaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9jb25maWd1cmF0aW9uL3htbC9Ob2RlQ29uZmlndXJhdGlvblByb2Nlc3Nvci5qYXZhCkBAIC0yMiw2ICsyMiw3IEBACiAKIGltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKIGltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwogaW1wb3J0IGphdmEudXRpbC5TdHJpbmdUb2tlbml6ZXI7CiAKIGltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOwpAQCAtMTA3LDYgKzEwOCwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uID0gbm9kZUNvbmZpZ3VyYXRpb25GYWN0b3J5LmNyZWF0ZUNvbnRyaWJ1dGlvbkNvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbi5zZXRVUkkocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJ1cmkiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb24uc2V0TG9jYXRpb24ocmVhZGVyLmdldEF0dHJpYnV0ZVZhbHVlKG51bGwsICJsb2NhdGlvbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbi5zZXRNZXRhRGF0YVVSTChyZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgIm1ldGFEYXRhVVJMIikpOworICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0YXJ0RGVwbG95YWJsZXMgPSByZWFkZXIuZ2V0QXR0cmlidXRlVmFsdWUobnVsbCwgInN0YXJ0RGVwbG95YWJsZXMiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFydERlcGxveWFibGVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb24uc2V0U3RhcnREZXBsb3lhYmxlcyhCb29sZWFuLnBhcnNlQm9vbGVhbihzdGFydERlcGxveWFibGVzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgZGVwZW5kZW50VVJJcyA9IHJlYWRlci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiZGVwZW5kZW50VVJJcyIpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlcGVuZGVudFVSSXMgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbi5zZXREZXBlbmRlbnRDb250cmlidXRpb25VUklzKEFycmF5cy5hc0xpc3QoZGVwZW5kZW50VVJJcy5zcGxpdCgiLCIpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLmdldENvbnRyaWJ1dGlvbnMoKS5hZGQoY29udHJpYnV0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChCSU5ESU5HLmVxdWFscyhuYW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZyA9IG5vZGVDb25maWd1cmF0aW9uRmFjdG9yeS5jcmVhdGVCaW5kaW5nQ29uZmlndXJhdGlvbigpOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9ub2RlLWltcGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvaW1wbC9Ob2RlRmFjdG9yeUltcGwuamF2YSBiL21vZHVsZXMvbm9kZS1pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2ltcGwvTm9kZUZhY3RvcnlJbXBsLmphdmEKaW5kZXggZmM5NzVjMC4uNTQ5N2FjZCAxMDA2NDQKLS0tIGEvbW9kdWxlcy9ub2RlLWltcGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvaW1wbC9Ob2RlRmFjdG9yeUltcGwuamF2YQorKysgYi9tb2R1bGVzL25vZGUtaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9pbXBsL05vZGVGYWN0b3J5SW1wbC5qYXZhCkBAIC03NSw4ICs3NSwxMCBAQAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuY29uZmlndXJhdGlvbi5CaW5kaW5nQ29uZmlndXJhdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuY29uZmlndXJhdGlvbi5Db250cmlidXRpb25Db25maWd1cmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5jb25maWd1cmF0aW9uLkRlZmF1bHROb2RlQ29uZmlndXJhdGlvbkZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmNvbmZpZ3VyYXRpb24uRGVwbG95bWVudENvbXBvc2l0ZTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuY29uZmlndXJhdGlvbi5Ob2RlQ29uZmlndXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuY29uZmlndXJhdGlvbi5Ob2RlQ29uZmlndXJhdGlvbkZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkRvbWFpblJlZ2lzdHJ5RmFjdG9yeTsKIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuRW5kcG9pbnRSZWZlcmVuY2VCaW5kZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkVuZHBvaW50UmVnaXN0cnk7CkBAIC0xMjMsNiArMTI1LDEzIEBACiAgICAgICAgIHJldHVybiBub2RlOwogICAgIH0KIAorICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBOb2RlIGNyZWF0ZU5vZGUoTGlzdDw/PiBjb250cmlidXRpb25zKSB7CisgICAgICAgIE5vZGVDb25maWd1cmF0aW9uRmFjdG9yeSBub2RlQ29uZmlndXJhdGlvbkZhY3RvcnkgPSBuZXcgRGVmYXVsdE5vZGVDb25maWd1cmF0aW9uRmFjdG9yeSgpOworICAgICAgICByZXR1cm4gbmV3IE5vZGVJbXBsKHRoaXMsIG5vZGVDb25maWd1cmF0aW9uRmFjdG9yeS5jcmVhdGVOb2RlQ29uZmlndXJhdGlvbigpLCBuZXcgQXJyYXlMaXN0PENvbnRyaWJ1dGlvbj4oKExpc3Q8Q29udHJpYnV0aW9uPiljb250cmlidXRpb25zKSk7CisgICAgfQorCiAgICAgcHJvdGVjdGVkIHZvaWQgYWRkTm9kZShOb2RlQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLCBOb2RlIG5vZGUpIHsKICAgICAgICAgbm9kZXMucHV0KGdldE5vZGVLZXkoY29uZmlndXJhdGlvbiksIG5vZGUpOwogICAgIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvbm9kZS1pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2ltcGwvTm9kZUltcGwuamF2YSBiL21vZHVsZXMvbm9kZS1pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2ltcGwvTm9kZUltcGwuamF2YQppbmRleCBjNzY3Yzk0Li44ZWVjY2ExIDEwMDY0NAotLS0gYS9tb2R1bGVzL25vZGUtaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9pbXBsL05vZGVJbXBsLmphdmEKKysrIGIvbW9kdWxlcy9ub2RlLWltcGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvaW1wbC9Ob2RlSW1wbC5qYXZhCkBAIC0xMzQsNyArMTM0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJhdGlvbi5nZXRVUkkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZUZhY3RvcnkuZ2V0RGVwbG95ZXIoKS5nZXRTeXN0ZW1EZWZpbml0aW9ucygpKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBDb21wb3NpdGVDb250ZXh0LnNldFRocmVhZENvbXBvc2l0ZUNvbnRleHQoY29tcG9zaXRlQ29udGV4dCk7CiAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB0aHJlYWQgY29udGV4dCBtb25pdG9yCiAgICAgICAgICAgICAgICAgbm9kZUZhY3RvcnkubW9uaXRvckZhY3Rvcnkuc2V0Q29udGV4dE1vbml0b3IodGNtKTsKQEAgLTIxMyw3ICsyMTIsNiBAQAogICAgICAgICAgICAgdGhpcy5jb21wb3NpdGVDb250ZXh0ID0gbnVsbDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgVGhyZWFkTWVzc2FnZUNvbnRleHQucmVtb3ZlTWVzc2FnZUNvbnRleHQoKTsKLSAgICAgICAgICAgIENvbXBvc2l0ZUNvbnRleHQucmVtb3ZlQ29tcG9zaXRlQ29udGV4dCgpOwogCiAgICAgICAgIH0gY2F0Y2ggKEFjdGl2YXRpb25FeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlKTsKQEAgLTM3NSw3ICszNzMsNyBAQAogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICAKLSAgICBMaXN0PENvbnRyaWJ1dGlvbj4gZ2V0Q29udHJpYnV0aW9ucygpIHsKKyAgICBwdWJsaWMgTGlzdDxDb250cmlidXRpb24+IGdldENvbnRyaWJ1dGlvbnMoKSB7CiAgICAgICAgIHJldHVybiBjb250cmlidXRpb25zOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9ub2RlLWxhdW5jaGVyLWVxdWlub3gvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvZXF1aW5veC9sYXVuY2hlci9FcXVpbm94SG9zdC5qYXZhIGIvbW9kdWxlcy9ub2RlLWxhdW5jaGVyLWVxdWlub3gvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvZXF1aW5veC9sYXVuY2hlci9FcXVpbm94SG9zdC5qYXZhCmluZGV4IGY4MmU4NTUuLmFlN2FhNTcgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2VxdWlub3gvbGF1bmNoZXIvRXF1aW5veEhvc3QuamF2YQorKysgYi9tb2R1bGVzL25vZGUtbGF1bmNoZXItZXF1aW5veC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9lcXVpbm94L2xhdW5jaGVyL0VxdWlub3hIb3N0LmphdmEKQEAgLTMyMCw3ICszMjAsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKChsYXVuY2hlckJ1bmRsZS5nZXRTdGF0ZSgpICYgQnVuZGxlLkFDVElWRSkgPT0gMCkgewogICAgICAgICAgICAgICAgIGlmIChsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSkgewotICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZmluZSgiU3RhcnRpbmcgYnVuZGxlOiAiICsgc3RyaW5nKGxhdW5jaGVyQnVuZGxlLCBmYWxzZSkpOworICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZmluZSgiU3RhcnRpbmcgbGF1bmNoZXIgYnVuZGxlOiAiICsgc3RyaW5nKGxhdW5jaGVyQnVuZGxlLCBmYWxzZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBsYXVuY2hlckJ1bmRsZS5zdGFydCgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChsb2dnZXIuaXNMb2dnYWJsZShMZXZlbC5GSU5FKSkgewpAQCAtNTE0LDcgKzUxNCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBidW5kbGUgPSBidW5kbGVDb250ZXh0Lmluc3RhbGxCdW5kbGUobG9jYXRpb24pOwogICAgICAgICAgICAgaWYgKGxvZ2dlci5pc0xvZ2dhYmxlKExldmVsLkZJTkUpKSB7Ci0gICAgICAgICAgICAgICAgbG9nZ2VyLmZpbmUoIkJ1bmRsZSBpbnN0YWxsZWQgaW4gIiArIChjdXJyZW50VGltZU1pbGxpcygpIC0gaW5zdGFsbFN0YXJ0KQorICAgICAgICAgICAgICAgIGxvZ2dlci5maW5lKCJCdW5kbGUgIiArIGJ1bmRsZUZpbGUgKyAiIGluc3RhbGxlZCBpbiAiICsgKGN1cnJlbnRUaW1lTWlsbGlzKCkgLSBpbnN0YWxsU3RhcnQpCiAgICAgICAgICAgICAgICAgICAgICsgIiBtczogIgogICAgICAgICAgICAgICAgICAgICArIHN0cmluZyhidW5kbGUsIGZhbHNlKSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9tb2R1bGVzL29zZ2ktcnVudGltZS1wb20vcG9tLnhtbCBiL21vZHVsZXMvb3NnaS1ydW50aW1lLXBvbS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZjhiMDYKLS0tIC9kZXYvbnVsbAorKysgYi9tb2R1bGVzL29zZ2ktcnVudGltZS1wb20vcG9tLnhtbApAQCAtMCwwICsxLDY1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1tb2R1bGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW9zZ2ktcnVudGltZS1wb208L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBPU0dpIFJ1bnRpbWUgUE9NPC9uYW1lPg0KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPg0KKw0KKyAgICA8IS0tIA0KKyAgICAgICAgIFRoZSBkZXBlbmRlbmNpZXMgcmVxdWlyZWQgdG8gcnVuIGluIGFuIE9TR2kgZW52aXJvbm1lbnQNCisgICAgICAgICBhbHNvIHJlcXVpcmVzIGNvcmUgYW5kIGJhc2UgcnVudGltZXMNCisgICAgLS0+DQorICAgIDxkZXBlbmRlbmNpZXM+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29udHJpYnV0aW9uLW9zZ2k8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZXh0ZW5zaWJpbGl0eS1lcXVpbm94PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbC1vc2dpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFIGIvbW9kdWxlcy9vc2dpLXJ1bnRpbWUtcG9tL3NyYy9tYWluL3Jlc291cmNlcy9MSUNFTlNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2hhZGVzL2Jhc2Utbm9kZXAvc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKY29weSB0byBtb2R1bGVzL29zZ2ktcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UgYi9tb2R1bGVzL29zZ2ktcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL05PVElDRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNoYWRlcy9iYXNlLW5vZGVwL3NyYy9tYWluL3Jlc291cmNlcy9OT1RJQ0UKY29weSB0byBtb2R1bGVzL29zZ2ktcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL05PVElDRQpkaWZmIC0tZ2l0IGEvc2hhZGVzL2Jhc2Uvc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQgYi9tb2R1bGVzL29zZ2ktcnVudGltZS1wb20vc3JjL21haW4vcmVzb3VyY2VzL1JFQURNRS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzaGFkZXMvYmFzZS9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dApjb3B5IHRvIG1vZHVsZXMvb3NnaS1ydW50aW1lLXBvbS9zcmMvbWFpbi9yZXNvdXJjZXMvUkVBRE1FLnR4dApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9wb2xpY3ktc2VjdXJpdHkvcG9tLnhtbCBiL21vZHVsZXMvcG9saWN5LXNlY3VyaXR5L3BvbS54bWwKaW5kZXggZjE4NGMzNS4uZDU0MjBiMiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9wb2xpY3ktc2VjdXJpdHkvcG9tLnhtbAorKysgYi9tb2R1bGVzL3BvbGljeS1zZWN1cml0eS9wb20ueG1sCkBAIC0yOSwyMiArMjksMTMgQEAKICAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgUG9saWN5IFNlY3VyaXR5IE1vZGVsPC9uYW1lPgogICAgIAogICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5LXhtbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgogCiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1zcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmUtcnVudGltZS1wb208L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICA8L2RlcGVuZGVuY2llcz4KZGlmZiAtLWdpdCBhL21vZHVsZXMvcG9saWN5LXRyYW5zYWN0aW9uLXJ1bnRpbWUtZ2Vyb25pbW8vcG9tLnhtbCBiL21vZHVsZXMvcG9saWN5LXRyYW5zYWN0aW9uLXJ1bnRpbWUtZ2Vyb25pbW8vcG9tLnhtbAppbmRleCAzNTI4ZjFhLi44OWNjODM4IDEwMDY0NAotLS0gYS9tb2R1bGVzL3BvbGljeS10cmFuc2FjdGlvbi1ydW50aW1lLWdlcm9uaW1vL3BvbS54bWwKKysrIGIvbW9kdWxlcy9wb2xpY3ktdHJhbnNhY3Rpb24tcnVudGltZS1nZXJvbmltby9wb20ueG1sCkBAIC01NiwxMyArNTYsMTMgQEAKICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLmNvbXBvbmVudHM8L2dyb3VwSWQ+CiAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby10cmFuc2FjdGlvbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMS4zPC92ZXJzaW9uPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4xLjQ8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uY29tcG9uZW50czwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLWNvbm5lY3RvcjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMS4zPC92ZXJzaW9uPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4xLjQ8L3ZlcnNpb24+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgCiAgICAgPC9kZXBlbmRlbmNpZXM+CmRpZmYgLS1naXQgYS9tb2R1bGVzL3BvbGljeS10cmFuc2FjdGlvbi1ydW50aW1lLWdlcm9uaW1vL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvdHJhbnNhY3Rpb24vcnVudGltZS9nZXJvbmltby9UcmFuc2FjdGlvbk1vZHVsZUFjdGl2YXRvci5qYXZhIGIvbW9kdWxlcy9wb2xpY3ktdHJhbnNhY3Rpb24tcnVudGltZS1nZXJvbmltby9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3RyYW5zYWN0aW9uL3J1bnRpbWUvZ2Vyb25pbW8vVHJhbnNhY3Rpb25Nb2R1bGVBY3RpdmF0b3IuamF2YQppbmRleCAzZjQzY2FjLi5lNWZmMjFmIDEwMDY0NAotLS0gYS9tb2R1bGVzL3BvbGljeS10cmFuc2FjdGlvbi1ydW50aW1lLWdlcm9uaW1vL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvdHJhbnNhY3Rpb24vcnVudGltZS9nZXJvbmltby9UcmFuc2FjdGlvbk1vZHVsZUFjdGl2YXRvci5qYXZhCisrKyBiL21vZHVsZXMvcG9saWN5LXRyYW5zYWN0aW9uLXJ1bnRpbWUtZ2Vyb25pbW8vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS90cmFuc2FjdGlvbi9ydW50aW1lL2dlcm9uaW1vL1RyYW5zYWN0aW9uTW9kdWxlQWN0aXZhdG9yLmphdmEKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICB0cnkgewotICAgICAgICAgICAgd3JhcHBlciA9IG5ldyBUcmFuc2FjdGlvbk1hbmFnZXJXcmFwcGVyKCk7CisgICAgICAgICAgICB3cmFwcGVyID0gbmV3IFRyYW5zYWN0aW9uTWFuYWdlcldyYXBwZXIoKTsgICAgICAgIAogICAgICAgICAgICAgd3JhcHBlci5zdGFydCgpOwogICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewogICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbihlKTsKZGlmZiAtLWdpdCBhL21vZHVsZXMvcG9saWN5LXRyYW5zYWN0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS90cmFuc2FjdGlvbi9kZWZpbml0aW9ucy54bWwgYi9tb2R1bGVzL3BvbGljeS10cmFuc2FjdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvdHJhbnNhY3Rpb24vZGVmaW5pdGlvbnMueG1sCmluZGV4IDBjOGFiNzUuLjk5YWIzMDAgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvcG9saWN5LXRyYW5zYWN0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS90cmFuc2FjdGlvbi9kZWZpbml0aW9ucy54bWwKKysrIGIvbW9kdWxlcy9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3RyYW5zYWN0aW9uL2RlZmluaXRpb25zLnhtbApAQCAtMjIsNyArMjIsNyBAQAogICAgICAgICAgICAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAKICAgICAgICAgICAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiPgogCi0gICAgPHBvbGljeVNldCBuYW1lPSJNYW5hZ2VkVHJhbnNhY3Rpb25Qb2xpY3lTZXQiIHByb3ZpZGVzPSJtYW5hZ2VkVHJhbnNhY3Rpb24iIGFwcGxpZXNUbz0iaW1wbGVtZW50YXRpb24iIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6bWFuYWdlZFRyYW5zYWN0aW9uJykgfCBJbnRlbnRSZWZzKCdzY2E6bWFuYWdlZFRyYW5zYWN0aW9uLmxvY2FsJykgfCBJbnRlbnRSZWZzKCdzY2E6bWFuYWdlZFRyYW5zYWN0aW9uLmdsb2JhbCcpIj4KKyAgICA8cG9saWN5U2V0IG5hbWU9Ik1hbmFnZWRUcmFuc2FjdGlvblBvbGljeVNldCIgcHJvdmlkZXM9Im1hbmFnZWRUcmFuc2FjdGlvbiIgYXBwbGllc1RvPSIvLypbc3RhcnRzLXdpdGgobmFtZSguKSwnaW1wbGVtZW50YXRpb24nKV0iIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6bWFuYWdlZFRyYW5zYWN0aW9uJykgfCBJbnRlbnRSZWZzKCdzY2E6bWFuYWdlZFRyYW5zYWN0aW9uLmxvY2FsJykgfCBJbnRlbnRSZWZzKCdzY2E6bWFuYWdlZFRyYW5zYWN0aW9uLmdsb2JhbCcpIj4KICAgICAgICAgPGludGVudE1hcCBwcm92aWRlcz0ibWFuYWdlZFRyYW5zYWN0aW9uIj4KICAgICAgICAgICAgIDxxdWFsaWZpZXIgbmFtZT0iZ2xvYmFsIj4gPCEtLSBkZWZhdWx0PSJ0cnVlIiAtLT4KICAgICAgICAgICAgICAgICA8dHVzY2FueTp0cmFuc2FjdGlvblBvbGljeSB0cmFuc2FjdGlvblRpbWVvdXQ9IjEyMDAiIGFjdGlvbj0iUkVRVUlSRV9HTE9CQUwiIC8+CkBAIC0zNCwyMyArMzQsMjMgQEAKICAgICA8L3BvbGljeVNldD4KIAogICAgIDxwb2xpY3lTZXQgbmFtZT0iTm9NYW5hZ2VkVHJhbnNhY3Rpb25Qb2xpY3lTZXQiIHByb3ZpZGVzPSJub01hbmFnZWRUcmFuc2FjdGlvbiIKLSAgICAgICAgYXBwbGllc1RvPSJpbXBsZW1lbnRhdGlvbiIgYXR0YWNoVG89IkludGVudFJlZnMoJ3NjYTpub01hbmFnZWRUcmFuc2FjdGlvbicpIj4KKyAgICAgICAgYXBwbGllc1RvPSIvLypbc3RhcnRzLXdpdGgobmFtZSguKSwnaW1wbGVtZW50YXRpb24nKV0iIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6bm9NYW5hZ2VkVHJhbnNhY3Rpb24nKSI+CiAgICAgICAgIDx0dXNjYW55OnRyYW5zYWN0aW9uUG9saWN5IGFjdGlvbj0iUkVRVUlSRV9OT05FIiAvPgogICAgIDwvcG9saWN5U2V0PgogICAgIAotICAgIDxwb2xpY3lTZXQgbmFtZT0iVHJhbnNhY3RlZE9uZVdheVBvbGljeVNldCIgcHJvdmlkZXM9InRyYW5zYWN0ZWRPbmVXYXkiIGFwcGxpZXNUbz0iYmluZGluZyIgYXR0YWNoVG89IkludGVudFJlZnMoJ3NjYTp0cmFuc2FjdGVkT25lV2F5JykiPgorICAgIDxwb2xpY3lTZXQgbmFtZT0iVHJhbnNhY3RlZE9uZVdheVBvbGljeVNldCIgcHJvdmlkZXM9InRyYW5zYWN0ZWRPbmVXYXkiIGFwcGxpZXNUbz0iLy8qW3N0YXJ0cy13aXRoKG5hbWUoLiksJ2JpbmRpbmcnKV0iIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6dHJhbnNhY3RlZE9uZVdheScpIj4KICAgICAgICAgPHR1c2Nhbnk6dHJhbnNhY3Rpb25Qb2xpY3kgYWN0aW9uPSJQUk9QQUdBVEUiIC8+CiAgICAgPC9wb2xpY3lTZXQ+ICAgIAogICAgIAotICAgIDxwb2xpY3lTZXQgbmFtZT0iSW1tZWRpYXRlT25lV2F5UG9saWN5U2V0IiBwcm92aWRlcz0iaW1tZWRpYXRlT25lV2F5IiBhcHBsaWVzVG89ImJpbmRpbmciIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6aW1tZWRpYXRlT25lV2F5JykiPgorICAgIDxwb2xpY3lTZXQgbmFtZT0iSW1tZWRpYXRlT25lV2F5UG9saWN5U2V0IiBwcm92aWRlcz0iaW1tZWRpYXRlT25lV2F5IiBhcHBsaWVzVG89Ii8vKltzdGFydHMtd2l0aChuYW1lKC4pLCdiaW5kaW5nJyldIiBhdHRhY2hUbz0iSW50ZW50UmVmcygnc2NhOmltbWVkaWF0ZU9uZVdheScpIj4KICAgICAgICAgPHR1c2Nhbnk6dHJhbnNhY3Rpb25Qb2xpY3kgYWN0aW9uPSJTVVNQRU5EIiAvPgogICAgIDwvcG9saWN5U2V0PiAgICAKIAotICAgIDxwb2xpY3lTZXQgbmFtZT0iUHJvcGFnYXRlc1RyYW5zYWN0aW9uUG9saWN5U2V0IiBwcm92aWRlcz0icHJvcGFnYXRlc1RyYW5zYWN0aW9uIiBhdHRhY2hUbz0iSW50ZW50UmVmcygnc2NhOnByb3BhZ2F0ZXNUcmFuc2FjdGlvbicpIiBhcHBsaWVzVG89ImJpbmRpbmciPgorICAgIDxwb2xpY3lTZXQgbmFtZT0iUHJvcGFnYXRlc1RyYW5zYWN0aW9uUG9saWN5U2V0IiBwcm92aWRlcz0icHJvcGFnYXRlc1RyYW5zYWN0aW9uIiBhdHRhY2hUbz0iSW50ZW50UmVmcygnc2NhOnByb3BhZ2F0ZXNUcmFuc2FjdGlvbicpIiBhcHBsaWVzVG89Ii8vKltzdGFydHMtd2l0aChuYW1lKC4pLCdiaW5kaW5nJyldIj4KICAgICAgICAgPHR1c2Nhbnk6dHJhbnNhY3Rpb25Qb2xpY3kgYWN0aW9uPSJQUk9QQUdBVEUiIC8+CiAgICAgPC9wb2xpY3lTZXQ+CiAKLSAgICA8cG9saWN5U2V0IG5hbWU9IlN1c3BlbmRzVHJhbnNhY3Rpb25Qb2xpY3lTZXQiIHByb3ZpZGVzPSJzdXNwZW5kc1RyYW5zYWN0aW9uIiBhcHBsaWVzVG89ImJpbmRpbmciIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6c3VzcGVuZHNUcmFuc2FjdGlvbicpIj4KKyAgICA8cG9saWN5U2V0IG5hbWU9IlN1c3BlbmRzVHJhbnNhY3Rpb25Qb2xpY3lTZXQiIHByb3ZpZGVzPSJzdXNwZW5kc1RyYW5zYWN0aW9uIiBhcHBsaWVzVG89Ii8vKltzdGFydHMtd2l0aChuYW1lKC4pLCdiaW5kaW5nJyldIiBhdHRhY2hUbz0iSW50ZW50UmVmcygnc2NhOnN1c3BlbmRzVHJhbnNhY3Rpb24nKSI+CiAgICAgICAgIDx0dXNjYW55OnRyYW5zYWN0aW9uUG9saWN5IGFjdGlvbj0iU1VTUEVORCIgLz4KICAgICA8L3BvbGljeVNldD4gIAogCmRpZmYgLS1naXQgYS9tb2R1bGVzL3BvbGljeS13c3BvbGljeS9wb20ueG1sIGIvbW9kdWxlcy9wb2xpY3ktd3Nwb2xpY3kvcG9tLnhtbAppbmRleCBjODkxZThjLi4wNjYwMDQzIDEwMDY0NAotLS0gYS9tb2R1bGVzL3BvbGljeS13c3BvbGljeS9wb20ueG1sCisrKyBiL21vZHVsZXMvcG9saWN5LXdzcG9saWN5L3BvbS54bWwKQEAgLTMxLDggKzMxLDEwIEBACiAgICAgPGRlcGVuZGVuY2llcz4KICAgICAgICAgPGRlcGVuZGVuY3k+CiAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1hc3NlbWJseTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CiAgICAgICAgIDwvZGVwZW5kZW5jeT4KIAogICAgICAgICA8ZGVwZW5kZW5jeT4KQEAgLTEwOSw3ICsxMTEsNyBAQAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy53b29kc3RveDwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPndzdHgtYXNsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+My4yLjQ8L3ZlcnNpb24+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjIuNjwvdmVyc2lvbj4KICAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KICAgICAgICAgICAgIDxleGNsdXNpb25zPgogICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CmRpZmYgLS1naXQgYS9tb2R1bGVzL3BvbS54bWwgYi9tb2R1bGVzL3BvbS54bWwKaW5kZXggZmVkMTQyNS4uZjZjNmI3MyAxMDA2NDQKLS0tIGEvbW9kdWxlcy9wb20ueG1sCisrKyBiL21vZHVsZXMvcG9tLnhtbApAQCAtMzYsOSArMzYsMTAgQEAKICAgICAgICAgPG1vZHVsZT5iaW5kaW5nLWF0b208L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5iaW5kaW5nLWF0b20tanMtZG9qbzwvbW9kdWxlPiAgICAgICAgCiAgICAgICAgIDxtb2R1bGU+YmluZGluZy1hdG9tLXJ1bnRpbWU8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5iaW5kaW5nLWNvbWV0PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+YmluZGluZy1jb21ldC1ydW50aW1lPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+YmluZGluZy1lamI8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5iaW5kaW5nLWVqYi1ydW50aW1lPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+YmluZGluZy1oYXplbGNhc3QtcnVudGltZTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmJpbmRpbmctaHR0cDwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmJpbmRpbmctaHR0cC1ydW50aW1lPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+YmluZGluZy1qbXM8L21vZHVsZT4KQEAgLTQ5LDExICs1MCwxMCBAQAogICAgICAgICA8bW9kdWxlPmJpbmRpbmctanNvbnJwYy1qcy1kb2pvPC9tb2R1bGU+ICAgICAgICAKICAgICAgICAgPG1vZHVsZT5iaW5kaW5nLWpzb25ycGMtcnVudGltZTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmJpbmRpbmctcmVzdDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmJpbmRpbmctcmVzdC1qcy1kb2pvPC9tb2R1bGU+ICAgICAgICAKICAgICAgICAgPG1vZHVsZT5iaW5kaW5nLXJlc3QtcnVudGltZTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmJpbmRpbmctcm1pPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+YmluZGluZy1ybWktcnVudGltZTwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmJpbmRpbmctcnNzPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+YmluZGluZy1yc3MtcnVudGltZTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmJpbmRpbmctc2NhLXJ1bnRpbWU8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5iaW5kaW5nLXdzPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+YmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9tb2R1bGU+CkBAIC02NSw2ICs2NSw3IEBACiAgICAgICAgIDxtb2R1bGU+Y29tbW9uLWphdmE8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5jb21tb24teG1sPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uLXJlc291cmNlPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+Y29yZTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmNvcmUtZGF0YWJpbmRpbmc8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5jb3JlLXNwaTwvbW9kdWxlPgpAQCAtNzcsMTAgKzc4LDkgQEAKICAgICAgICAgPG1vZHVsZT5kYXRhYmluZGluZy1zZG8tYXhpb208L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5kYXRhYmluZGluZy1qc29uPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+ZGVwbG95bWVudDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmRvbWFpbi1oYXplbGNhc3Q8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5kb21haW4tbm9kZTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmVuZHBvaW50LXRyaWJlczwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmVuZHBvaW50LWhhemVsY2FzdDwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmVuZHBvaW50LWhhemVsY2FzdC1jbGllbnQ8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5leHRlbnNpYmlsaXR5PC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+ZXh0ZW5zaWJpbGl0eS1lcXVpbm94PC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+aG9zdC1odHRwPC9tb2R1bGU+CkBAIC05MSw4ICs5MSwxNyBAQAogICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLWJwZWwtcnVudGltZTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLWphdmE8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi1qYXhyczwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLWpheHJzLXJ1bnRpbWU8L21vZHVsZT4JCQorICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXB5dGhvbjwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+aW1wbGVtZW50YXRpb24tc2NyaXB0PC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+aW1wbGVtZW50YXRpb24tc2NyaXB0LXJ1bnRpbWU8L21vZHVsZT4JCQogICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXNwcmluZzwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+aW1wbGVtZW50YXRpb24tc3ByaW5nLXdlYmFwcDwvbW9kdWxlPgorICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXNwcmluZy1zdHViPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+aW1wbGVtZW50YXRpb24tc3ByaW5nLXRpZTwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXdlYjwvbW9kdWxlPgogICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXdlYi1jbGllbnQ8L21vZHVsZT4KICAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi13ZWItcnVudGltZTwvbW9kdWxlPgpAQCAtMTQwLDEwICsxNDksMjAgQEAKICAgICAgICAgPG1vZHVsZT5iaW5kaW5nLWNvcmJhPC9tb2R1bGU+CiAgICAgICAgIDxtb2R1bGU+YmluZGluZy1jb3JiYS1ydW50aW1lPC9tb2R1bGU+CiAKLSAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi1zY3JpcHQ8L21vZHVsZT4KLSAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi1zY3JpcHQtcnVudGltZTwvbW9kdWxlPgotICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLWpheHJzPC9tb2R1bGU+Ci0gICAgICAgIDxtb2R1bGU+aW1wbGVtZW50YXRpb24tamF4cnMtcnVudGltZTwvbW9kdWxlPgorICAgICAgICA8IS0tIAorICAgICAgICAgICAgUnVudGltZSBjb2xsZWN0aW9uIGZlYXR1cmVzIAorCisgICAgICAgICAgICBOb24tb3ZlcmFsbGFwcGluZyBncm91cHMgb2YgVHVzY2FueSBtb2R1bGVzIHRoYXQgZGVmaW5lIHRoZSAKKyAgICAgICAgICAgIGNvcmUgcnVudGltZSBtb2R1bGVzLCBjb250YWluaW5nIHRoZSBUdXNjYW55IGV4dGVuc2lvbiBTUEksIAorICAgICAgICAgICAgYW5kIHRoZSBiYXNlIHJ1bnRpbWUgdGhhdCBkZWZpbmVzIHRoZSBtaW5pbWFsIFR1c2NhbnkgcnVudGltZQorICAgICAgICAgICAgdG8gd2hpY2ggb3RoZXIgZXh0ZW5zaW9ucyBjYW4gYmUgYWRkZWQKKyAgICAgICAKKyAgICAgICAgICAgIEV4dGVuc2lvbnMgYXJlIGluY2x1ZGVkIHVzaW5nIG1hdmVuIGRlcGVuZGVuY2llcyBvbiB0aGUgKi1ydW50aW1lCisgICAgICAgICAgICBtb2R1bGVzIGluIHRoZSAvbW9kdWxlcyBkaXJlY3RvcnkgCisgICAgICAgIC0tPgorICAgICAgICA8bW9kdWxlPmNvcmUtcnVudGltZS1wb208L21vZHVsZT4KKyAgICAgICAgPG1vZHVsZT5iYXNlLXJ1bnRpbWUtcG9tPC9tb2R1bGU+CisgICAgICAgIDxtb2R1bGU+b3NnaS1ydW50aW1lLXBvbTwvbW9kdWxlPgogCiAgICAgPC9tb2R1bGVzPgogCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NjYS1jbGllbnQtaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY2xpZW50L2ltcGwvU0NBQ2xpZW50RmFjdG9yeUltcGwyLmphdmEgYi9tb2R1bGVzL3NjYS1jbGllbnQtaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY2xpZW50L2ltcGwvU0NBQ2xpZW50RmFjdG9yeUltcGwyLmphdmEKaW5kZXggODYyNjkyNy4uOTVlMjM4MSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9zY2EtY2xpZW50LWltcGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NsaWVudC9pbXBsL1NDQUNsaWVudEZhY3RvcnlJbXBsMi5qYXZhCisrKyBiL21vZHVsZXMvc2NhLWNsaWVudC1pbXBsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jbGllbnQvaW1wbC9TQ0FDbGllbnRGYWN0b3J5SW1wbDIuamF2YQpAQCAtMjIsNiArMjIsNyBAQAogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lkludm9jYXRpb25IYW5kbGVyOwogaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LlByb3h5OwogaW1wb3J0IGphdmEubmV0LlVSSTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIAogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuRW5kcG9pbnQ7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CkBAIC00MSw5ICs0MiwyMCBAQAogCiAgICAgcHVibGljIFNDQUNsaWVudEZhY3RvcnlJbXBsMihVUkkgZG9tYWluVVJJKSB0aHJvd3MgTm9TdWNoRG9tYWluRXhjZXB0aW9uIHsKICAgICAgICAgc3VwZXIoZG9tYWluVVJJKTsKKyAgICAgICAgY2hlY2tEb21haW5VUkkoZG9tYWluVVJJKTsKICAgICB9ICAgCiAgICAgCi0gICAgQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrRG9tYWluVVJJKFVSSSBkb21haW5VUkkpIHRocm93cyBOb1N1Y2hEb21haW5FeGNlcHRpb24geworCQlmb3IgKCBOb2RlRmFjdG9yeSBub2RlRmFjdG9yeSA6IE5vZGVGYWN0b3J5LmdldE5vZGVGYWN0b3JpZXMoKSkgeworCQkJU3RyaW5nIGRvbWFpbk5hbWUgPSBnZXREb21haW5OYW1lKCk7CisJCQlMaXN0PE5vZGU+IG5vZGVzID0gKChOb2RlRmFjdG9yeUltcGwpbm9kZUZhY3RvcnkpLmdldE5vZGVzSW5Eb21haW4oZG9tYWluTmFtZSk7CisJCQlpZiAoICFub2Rlcy5pc0VtcHR5KCkgKSAKKwkJCQlyZXR1cm47CQkJCisJCX0KKwkJdGhyb3cgbmV3IE5vU3VjaERvbWFpbkV4Y2VwdGlvbihnZXREb21haW5OYW1lKCkpOworCX0KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogCUBPdmVycmlkZQogICAgIHB1YmxpYyA8VD4gVCBnZXRTZXJ2aWNlKENsYXNzPFQ+IHNlcnZpY2VJbnRlcmZhY2UsIFN0cmluZyBzZXJ2aWNlTmFtZSkgdGhyb3dzIE5vU3VjaFNlcnZpY2VFeGNlcHRpb24sIE5vU3VjaERvbWFpbkV4Y2VwdGlvbiB7CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2hlbGwvU2hlbGwuamF2YSBiL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL1NoZWxsLmphdmEKaW5kZXggMjk4N2IxZi4uZDBjZmMyNSAxMDA2NDQKLS0tIGEvbW9kdWxlcy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2hlbGwvU2hlbGwuamF2YQorKysgYi9tb2R1bGVzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zaGVsbC9TaGVsbC5qYXZhCkBAIC0yMywxOSArMjMsMTcgQEAKIGltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN5c3RlbS5vdXQ7DQogDQogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7DQotaW1wb3J0IGphdmEuaW8uRmlsZTsNCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsNCi1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7DQogaW1wb3J0IGphdmEubmV0LlVSTDsNCiBpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQogaW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KIGltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTsNCiANCi1pbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247DQotDQogaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9zaXRlOw0KIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi5qYXZhLmlvLklPSGVscGVyOw0KIGltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5BcnRpZmFjdDsNCkBAIC01MiwxNSArNTAsMTcgQEAKICAqIEEgbGl0dGxlIFNDQSBjb21tYW5kIHNoZWxsLg0KICAqLw0KIHB1YmxpYyBjbGFzcyBTaGVsbCB7DQotICAgIA0KLSAgICBwdWJsaWMgTm9kZSBub2RlOw0KKw0KICAgICBwcml2YXRlIGJvb2xlYW4gdXNlSmxpbmU7DQogICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBoaXN0b3J5ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQogICAgIHByaXZhdGUgTm9kZUZhY3RvcnkgZmFjdG9yeTsNCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBDT01NQU5EUyA9IG5ldyBTdHJpbmdbXSB7ImFkZERlcGxveW1lbnRDb21wb3NpdGUiLCAiaGVscCIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiaW5zdGFsbGVkIiwgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByaW50RG9tYWluTGV2ZWxDb21wb3NpdGUiLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlIiwgInN0YXJ0IiwgInN0YXR1cyIsICJzdG9wIn07DQorICAgIHByaXZhdGUgU3RyaW5nIGN1cnJlbnREb21haW4gPSAiIjsNCisgICAgcHJpdmF0ZSBNYXA8U3RyaW5nLCBOb2RlPiBzdGFuZGFsb25lTm9kZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE5vZGU+KCk7DQorICAgIHByaXZhdGUgTWFwPFN0cmluZywgTm9kZT4gbm9kZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE5vZGU+KCk7DQorDQorICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gQ09NTUFORFMgPSBuZXcgU3RyaW5nW10geyJieWUiLCAiZG9tYWluIiwgImRvbWFpbnMiLCAiaGVscCIsICJpbnN0YWxsIiwgImluc3RhbGxlZCIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2FkIiwgInJlbW92ZSIsICJydW4iLCAic2F2ZSIsICJzdGFydCIsICJzdGF0dXMiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3RvcCJ9Ow0KIA0KICAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihmaW5hbCBTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsNCiAgICAgICAgIGJvb2xlYW4gdXNlSmxpbmUgPSB0cnVlOw0KQEAgLTc3LDMzICs3Nyw1OCBAQAogDQogICAgIHB1YmxpYyBTaGVsbChTdHJpbmcgZG9tYWluVVJJLCBib29sZWFuIHVzZUpMaW5lKSB7DQogICAgICAgICB0aGlzLmZhY3RvcnkgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KLSAgICAgICAgdGhpcy5ub2RlID0gZmFjdG9yeS5jcmVhdGVOb2RlKGRvbWFpblVSSSk7DQogICAgICAgICB0aGlzLnVzZUpsaW5lID0gdXNlSkxpbmU7DQorICAgICAgICBpZiAoZG9tYWluVVJJICE9IG51bGwpIHsNCisgICAgICAgICAgICBkb21haW4oZG9tYWluVVJJKTsNCisgICAgICAgIH0NCiAgICAgfQ0KIA0KLSAgICBib29sZWFuIGFkZERlcGxveW1lbnRDb21wb3NpdGUoZmluYWwgU3RyaW5nIGN1cmksIFN0cmluZyBjb250ZW50VVJMKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uLCBBY3RpdmF0aW9uRXhjZXB0aW9uLCBWYWxpZGF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQotICAgICAgICBub2RlLmFkZERlcGxveW1lbnRDb21wb3NpdGUoY3VyaSwgbmV3IFN0cmluZ1JlYWRlcihyZWFkQ29udGVudHMoY29udGVudFVSTCkpKTsNCisgICAgYm9vbGVhbiBkb21haW4oZmluYWwgU3RyaW5nIGRvbWFpblVSSSkgew0KKyAgICAgICAgaWYgKGRvbWFpblVSSS5sZW5ndGgoKSA8IDEpIHsNCisgICAgICAgICAgICBjdXJyZW50RG9tYWluID0gIiI7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGZvciAoTm9kZSBub2RlIDogbm9kZXMudmFsdWVzKCkpIHsNCisgICAgICAgICAgICAgICAgaWYgKGRvbWFpblVSSS5lcXVhbHMobm9kZS5nZXREb21haW5OYW1lKCkpKSB7DQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RG9tYWluID0gbm9kZS5nZXREb21haW5OYW1lKCk7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICBOb2RlIG5vZGUgPSBmYWN0b3J5LmNyZWF0ZU5vZGUoZG9tYWluVVJJKTsNCisgICAgICAgICAgICBjdXJyZW50RG9tYWluID0gbm9kZS5nZXREb21haW5OYW1lKCk7DQorICAgICAgICAgICAgbm9kZXMucHV0KGN1cnJlbnREb21haW4sIG5vZGUpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgYm9vbGVhbiBkb21haW5zKCkgew0KKyAgICAgICAgZm9yIChOb2RlIG5vZGUgOiBub2Rlcy52YWx1ZXMoKSkgew0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihub2RlLmdldERvbWFpbk5hbWUoKSk7DQorICAgICAgICB9DQogICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgfQ0KIA0KICAgICBib29sZWFuIGluc3RhbGwoZmluYWwgTGlzdDxTdHJpbmc+IHRva3MpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uLCBBY3RpdmF0aW9uRXhjZXB0aW9uLCBWYWxpZGF0aW9uRXhjZXB0aW9uIHsNCi0gICAgICAgIGJvb2xlYW4gcnVuRGVwbG95YWJsZXMgPSAhdG9rcy5jb250YWlucygiLW5vcnVuIik7DQorICAgICAgICBpZiAoZ2V0Tm9kZSgpID09IG51bGwpIHsNCisgICAgICAgICAgICBvdXQucHJpbnRsbigibm90IGluIGRvbWFpbiwgdXNlIGRvbWFpbiBjb21tYW5kIGZpcnN0Iik7DQorICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICB9DQorICAgICAgICBib29sZWFuIHN0YXJ0RGVwbG95YWJsZXMgPSB0b2tzLmNvbnRhaW5zKCItc3RhcnQiKTsNCiAgICAgICAgIFN0cmluZyBtZXRhRGF0YVVSTCA9IG51bGw7DQogICAgICAgICBpZiAodG9rcy5jb250YWlucygiLW1ldGFkYXRhIikpIHsNCi0gICAgICAgICAgICBtZXRhRGF0YVVSTCA9IHRva3MuZ2V0KHRva3MuaW5kZXhPZigiLW1ldGFkYXRhIikrMSk7DQorICAgICAgICAgICAgbWV0YURhdGFVUkwgPSB0b2tzLmdldCh0b2tzLmluZGV4T2YoIi1tZXRhZGF0YSIpICsgMSk7DQogICAgICAgICB9DQogICAgICAgICBMaXN0PFN0cmluZz4gZHVyaXMgPSBudWxsOw0KICAgICAgICAgaWYgKHRva3MuY29udGFpbnMoIi1kdXJpcyIpKSB7DQotICAgICAgICAgICAgZHVyaXMgPSBBcnJheXMuYXNMaXN0KHRva3MuZ2V0KHRva3MuaW5kZXhPZigiLWR1cmlzIikrMSkuc3BsaXQoIiwiKSk7DQorICAgICAgICAgICAgZHVyaXMgPSBBcnJheXMuYXNMaXN0KHRva3MuZ2V0KHRva3MuaW5kZXhPZigiLWR1cmlzIikgKyAxKS5zcGxpdCgiLCIpKTsNCiAgICAgICAgIH0NCiANCiAgICAgICAgIFN0cmluZyBmaXJzdCA9IG51bGw7DQogICAgICAgICBTdHJpbmcgc2Vjb25kID0gbnVsbDsNCi0gICAgICAgIGZvciAoaW50IGk9MTsgaTx0b2tzLnNpemUoKTtpKyspIHsNCisgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgdG9rcy5zaXplKCk7IGkrKykgew0KICAgICAgICAgICAgIGlmICh0b2tzLmdldChpKS5zdGFydHNXaXRoKCItIikpIHsNCi0gICAgICAgICAgICAgIGlmICghdG9rcy5nZXQoaSkuZXF1YWxzKCItbm9ydW4iKSkgew0KLSAgICAgICAgICAgICAgICAgIGkrKzsNCi0gICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgaWYgKCF0b2tzLmdldChpKS5lcXVhbHMoIi1zdGFydCIpKSB7DQorICAgICAgICAgICAgICAgICAgICBpKys7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICBpZiAoZmlyc3QgPT0gbnVsbCkgew0KICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSB0b2tzLmdldChpKTsNCkBAIC0xMTMsNyArMTM4LDcgQEAKICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KLSAgICAgICAgDQorDQogICAgICAgICBTdHJpbmcgY3VyaSA9IG51bGw7DQogICAgICAgICBTdHJpbmcgY3VybCA9IG51bGw7DQogICAgICAgICBpZiAoc2Vjb25kICE9IG51bGwpIHsNCkBAIC0xMjEsMzUgKzE0Niw0MyBAQAogICAgICAgICAgICAgY3VybCA9IHNlY29uZDsNCiAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgY3VybCA9IGZpcnN0Ow0KLSAgICAgICAgICAgIGN1cmkgPSBnZXREZWZhdWx0VVJJKGN1cmwpOw0KLSAgICAgICAgICAgIG91dC5wcmludGxuKCJpbnN0YWxsaW5nIGF0OiAiICsgY3VyaSk7DQogICAgICAgICB9DQogDQotICAgICAgICBub2RlLmluc3RhbGxDb250cmlidXRpb24oY3VyaSwgY3VybCwgbWV0YURhdGFVUkwsIGR1cmlzLCBydW5EZXBsb3lhYmxlcyk7DQorICAgICAgICBTdHJpbmcgdXJpID0gZ2V0Tm9kZSgpLmluc3RhbGxDb250cmlidXRpb24oY3VyaSwgY3VybCwgbWV0YURhdGFVUkwsIGR1cmlzLCBzdGFydERlcGxveWFibGVzKTsNCisgICAgICAgIG91dC5wcmludGxuKCJpbnN0YWxsZWQgYXQ6ICIgKyB1cmkpOw0KICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgIH0NCiANCiAgICAgYm9vbGVhbiBpbnN0YWxsZWQoZmluYWwgTGlzdDxTdHJpbmc+IHRva3MpIHsNCiAgICAgICAgIExpc3Q8U3RyaW5nPiBjdXJpczsNCiAgICAgICAgIGlmICh0b2tzLnNpemUoKSA+IDEpIHsNCi0gICAgICAgICAgICBjdXJpcyA9IEFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tde3Rva3MuZ2V0KDEpfSk7DQorICAgICAgICAgICAgY3VyaXMgPSBBcnJheXMuYXNMaXN0KG5ldyBTdHJpbmdbXSB7dG9rcy5nZXQoMSl9KTsNCiAgICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgY3VyaXMgPW5vZGUuZ2V0SW5zdGFsbGVkQ29udHJpYnV0aW9ucygpOw0KKyAgICAgICAgICAgIGlmIChnZXROb2RlKCkgPT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgY3VyaXMgPSBnZXROb2RlKCkuZ2V0SW5zdGFsbGVkQ29udHJpYnV0aW9ucygpOw0KICAgICAgICAgfQ0KICAgICAgICAgZm9yIChTdHJpbmcgY3VyaSA6IGN1cmlzKSB7DQotICAgICAgICAgICAgb3V0LnByaW50bG4oY3VyaSArICIgIiArIG5vZGUuZ2V0SW5zdGFsbGVkQ29udHJpYnV0aW9uKGN1cmkpLmdldExvY2F0aW9uKCkpOw0KLSAgICAgICAgICAgIENvbnRyaWJ1dGlvbiBjID0gbm9kZS5nZXRJbnN0YWxsZWRDb250cmlidXRpb24oY3VyaSk7DQorICAgICAgICAgICAgb3V0LnByaW50bG4oY3VyaSArICIgIiArIGdldE5vZGUoKS5nZXRJbnN0YWxsZWRDb250cmlidXRpb24oY3VyaSkuZ2V0TG9jYXRpb24oKSk7DQorICAgICAgICAgICAgQ29udHJpYnV0aW9uIGMgPSBnZXROb2RlKCkuZ2V0SW5zdGFsbGVkQ29udHJpYnV0aW9uKGN1cmkpOw0KKyAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBkZXBsb3llZHMgPSBnZXROb2RlKCkuZ2V0RGVwbG95ZWRDb21wb3NpdGVzKGN1cmkpOw0KICAgICAgICAgICAgIGZvciAoQXJ0aWZhY3QgYSA6IGMuZ2V0QXJ0aWZhY3RzKCkpIHsNCiAgICAgICAgICAgICAgICAgaWYgKGEuZ2V0TW9kZWwoKSBpbnN0YW5jZW9mIENvbXBvc2l0ZSkgew0KLSAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZSA9IChDb21wb3NpdGUpIGEuZ2V0TW9kZWwoKTsNCi0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCIgICAiICsgY29tcG9zaXRlLmdldFVSSSgpICsgIiAiICsgY29tcG9zaXRlLmdldE5hbWUoKSk7DQorICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGUgY29tcG9zaXRlID0gKENvbXBvc2l0ZSlhLmdldE1vZGVsKCk7DQorICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcnVubmluZyA9IGRlcGxveWVkcy5jb250YWlucyhjb21wb3NpdGUuZ2V0VVJJKCkpID8gIioqKnJ1bm5pbmcqKioiIDogIiI7DQorICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigiICAgIiArIGNvbXBvc2l0ZS5nZXRVUkkoKSArICIgIiArIGNvbXBvc2l0ZS5nZXROYW1lKCkgKyAiICIgKyBydW5uaW5nKTsNCiAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCiAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICB9DQorDQogICAgIGJvb2xlYW4gbGlzdENvbXBvc2l0ZXMoZmluYWwgU3RyaW5nIGN1cmkpIHsNCi0gICAgICAgIENvbnRyaWJ1dGlvbiBjID0gbm9kZS5nZXRJbnN0YWxsZWRDb250cmlidXRpb24oY3VyaSk7DQorICAgICAgICBpZiAoZ2V0Tm9kZSgpID09IG51bGwpIHsNCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICAgIENvbnRyaWJ1dGlvbiBjID0gZ2V0Tm9kZSgpLmdldEluc3RhbGxlZENvbnRyaWJ1dGlvbihjdXJpKTsNCiAgICAgICAgIGZvciAoQXJ0aWZhY3QgYSA6IGMuZ2V0QXJ0aWZhY3RzKCkpIHsNCiAgICAgICAgICAgICBpZiAoYS5nZXRNb2RlbCgpIGluc3RhbmNlb2YgQ29tcG9zaXRlKSB7DQogICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCgoQ29tcG9zaXRlKWEuZ2V0TW9kZWwoKSkuZ2V0TmFtZSgpKTsNCkBAIC0xNTgsOTEgKzE5MSwxNTIgQEAKICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgIH0NCiANCi0NCi0gICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RGVmYXVsdFVSSShTdHJpbmcgY29udHJpYnV0aW9uVVJMKSB7DQotICAgICAgICBTdHJpbmcgdXJpID0gbnVsbDsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoY29udHJpYnV0aW9uVVJMKTsNCi0gICAgICAgICAgICBpZiAoImNsYXNzZXMiLmVxdWFscyhmLmdldE5hbWUoKSkgJiYgInRhcmdldCIuZXF1YWxzKGYuZ2V0UGFyZW50RmlsZSgpLmdldE5hbWUoKSkpIHsNCi0gICAgICAgICAgICAgICAgdXJpID0gZi5nZXRQYXJlbnRGaWxlKCkuZ2V0UGFyZW50RmlsZSgpLmdldE5hbWUoKTsgICAgICAgICAgICAgICAgICAgDQotICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgdXJpID0gZi5nZXROYW1lKCk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICAvLyBpZ25vcmUNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICh1cmkgPT0gbnVsbCkgew0KLSAgICAgICAgICAgIHVyaSA9IGNvbnRyaWJ1dGlvblVSTDsNCi0gICAgICAgIH0NCi0gICAgICAgIGludCBsYXN0RG90ID0gdXJpLmxhc3RJbmRleE9mKCcuJyk7DQotICAgICAgICBpZiAobGFzdERvdCA+IC0xKSB7DQotICAgICAgICAgICAgdXJpID0gdXJpLnN1YnN0cmluZygwLCBsYXN0RG90KTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiB1cmk7DQotICAgIH0NCi0NCi0gICAgYm9vbGVhbiBwcmludERvbWFpbkxldmVsQ29tcG9zaXRlKCkgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb24gew0KLSAgICAgICAgb3V0LnByaW50bG4oIlRPRE8iKTsNCi0gICAgICAgIC8vb3V0LnByaW50bG4obm9kZS5nZXREb21haW5MZXZlbENvbXBvc2l0ZUFzU3RyaW5nKCkpOw0KLSAgICAgICAgcmV0dXJuIHRydWU7DQotICAgIH0NCi0gICAgDQotICAgIGJvb2xlYW4gZ2V0UU5hbWVEZWZpbml0aW9uKGZpbmFsIFN0cmluZyBjdXJpLCBTdHJpbmcgZGVmaW5pbnRpb24sIFN0cmluZyBzeW1ib2xTcGFjZSkgdGhyb3dzIENvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb24sIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb24gew0KLSAgICAgICAgLy8gVE9ETzoNCisgICAgYm9vbGVhbiBsb2FkKGZpbmFsIFN0cmluZyBjb25maWdYbWxVcmwpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uLCBBY3RpdmF0aW9uRXhjZXB0aW9uLCBWYWxpZGF0aW9uRXhjZXB0aW9uIHsNCisgICAgICAgIE5vZGUgbm9kZSA9IGZhY3RvcnkuY3JlYXRlTm9kZUZyb21YTUwoY29uZmlnWG1sVXJsKTsNCisgICAgICAgIGN1cnJlbnREb21haW4gPSBub2RlLmdldERvbWFpbk5hbWUoKTsNCisgICAgICAgIG5vZGVzLnB1dChjdXJyZW50RG9tYWluLCBub2RlKTsNCiAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICB9DQogDQogICAgIGJvb2xlYW4gcmVtb3ZlKGZpbmFsIFN0cmluZyBjdXJpKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiwgQWN0aXZhdGlvbkV4Y2VwdGlvbiwgVmFsaWRhdGlvbkV4Y2VwdGlvbiB7DQotICAgICAgICBub2RlLnJlbW92ZUNvbnRyaWJ1dGlvbihjdXJpKTsNCisgICAgICAgIGlmIChnZXROb2RlKCkgPT0gbnVsbCkgew0KKyAgICAgICAgICAgIG91dC5wcmludGxuKCJub3QgaW4gZG9tYWluLCB1c2UgZG9tYWluIGNvbW1hbmQgZmlyc3QiKTsNCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICAgIGdldE5vZGUoKS5yZW1vdmVDb250cmlidXRpb24oY3VyaSk7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBib29sZWFuIHJ1bihmaW5hbCBTdHJpbmcgY29tbWFuZHNGaWxlVVJMKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoSU9IZWxwZXIuZ2V0TG9jYXRpb25Bc1VSTChjb21tYW5kc0ZpbGVVUkwpLm9wZW5TdHJlYW0oKSkpOw0KKyAgICAgICAgU3RyaW5nIGw7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIHdoaWxlICgobCA9IHIucmVhZExpbmUoKSkgIT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbihsKTsNCisgICAgICAgICAgICAgICAgU3RyaW5nW10gdG9rcyA9IGwgIT0gbnVsbCA/IGwudHJpbSgpLnNwbGl0KCIgIikgOiAiIi5zcGxpdCgiICIpOw0KKyAgICAgICAgICAgICAgICBMaXN0PFN0cmluZz4gdG9rc0xpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCisgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgcyA6IHRva3MpIHsNCisgICAgICAgICAgICAgICAgICAgIGlmIChzICE9IG51bGwgJiYgcy50cmltKCkubGVuZ3RoKCkgPiAwKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rc0xpc3QuYWRkKHMpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIGFwcGx5KGV2YWwodG9rc0xpc3QpKTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9IGZpbmFsbHkgew0KKyAgICAgICAgICAgIHIuY2xvc2UoKTsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9DQorDQorICAgIGJvb2xlYW4gc2F2ZShmaW5hbCBTdHJpbmcgZGlyZWN0b3J5KSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKyAgICAgICAgb3V0LnByaW50bG4oIlRPRE86IG5vdCB5ZXQgaW1wbGVtZW50ZWQiKTsNCiAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICB9DQogDQogICAgIHB1YmxpYyBib29sZWFuIHN0b3AoTGlzdDxTdHJpbmc+IHRva3MpIHRocm93cyBBY3RpdmF0aW9uRXhjZXB0aW9uIHsNCi0gICAgICAgIGlmICh0b2tzID09IG51bGwgfHwgdG9rcy5zaXplKCkgPCAyKSB7DQotICAgICAgICAgICAgbm9kZS5zdG9wKCk7DQotICAgICAgICAgICAgZmFjdG9yeS5zdG9wKCk7DQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KLSAgICAgICAgfQ0KICAgICAgICAgU3RyaW5nIGN1cmkgPSB0b2tzLmdldCgxKTsNCiAgICAgICAgIGlmICh0b2tzLnNpemUoKSA+IDIpIHsNCi0gICAgICAgICAgICBub2RlLnJlbW92ZUZyb21Eb21haW5MZXZlbENvbXBvc2l0ZShjdXJpICsgIi8iICsgdG9rcy5nZXQoMikpOw0KKyAgICAgICAgICAgIGdldE5vZGUoKS5yZW1vdmVGcm9tRG9tYWluTGV2ZWxDb21wb3NpdGUoY3VyaSwgdG9rcy5nZXQoMikpOw0KICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBmb3IgKFN0cmluZyBjb21wb3NpdGVVUkkgOiBub2RlLmdldERlcGxveWVkQ29tcG9zdGVzKGN1cmkpKSB7DQotICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlRnJvbURvbWFpbkxldmVsQ29tcG9zaXRlKGN1cmkgKyAiLyIgKyBjb21wb3NpdGVVUkkpOw0KKyAgICAgICAgICAgIGlmIChzdGFuZGFsb25lTm9kZXMuY29udGFpbnNLZXkoY3VyaSkpIHsNCisgICAgICAgICAgICAgICAgc3RhbmRhbG9uZU5vZGVzLnJlbW92ZShjdXJpKS5zdG9wKCk7DQorICAgICAgICAgICAgfSBlbHNlIGlmIChub2Rlcy5jb250YWluc0tleShjdXJpKSkgew0KKyAgICAgICAgICAgICAgICBOb2RlIG4gPSBub2Rlcy5yZW1vdmUoY3VyaSk7DQorICAgICAgICAgICAgICAgIG4uc3RvcCgpOw0KKyAgICAgICAgICAgICAgICBpZiAobi5nZXREb21haW5OYW1lKCkuZXF1YWxzKGN1cnJlbnREb21haW4pKSB7DQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50RG9tYWluID0gIiI7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBjb21wb3NpdGVVUkkgOiBnZXROb2RlKCkuZ2V0RGVwbG95ZWRDb21wb3NpdGVzKGN1cmkpKSB7DQorICAgICAgICAgICAgICAgICAgICBnZXROb2RlKCkucmVtb3ZlRnJvbURvbWFpbkxldmVsQ29tcG9zaXRlKGN1cmksIGNvbXBvc2l0ZVVSSSk7DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQogICAgICAgICB9DQotDQogICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgfQ0KIA0KKyAgICBwdWJsaWMgYm9vbGVhbiBieWUoKSB7DQorICAgICAgICBmb3IgKE5vZGUgbm9kZSA6IG5vZGVzLnZhbHVlcygpKSB7DQorICAgICAgICAgICAgbm9kZS5zdG9wKCk7DQorICAgICAgICB9DQorICAgICAgICBmYWN0b3J5LnN0b3AoKTsNCisgICAgICAgIGZvciAoTm9kZSBub2RlIDogc3RhbmRhbG9uZU5vZGVzLnZhbHVlcygpKSB7DQorICAgICAgICAgICAgbm9kZS5zdG9wKCk7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgIH0NCisNCiAgICAgYm9vbGVhbiBzdGFydChTdHJpbmcgY3VyaSwgU3RyaW5nIGNvbXBvc2l0ZVVSSSkgdGhyb3dzIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb24gew0KLSAgICAgICAgbm9kZS5hZGRUb0RvbWFpbkxldmVsQ29tcG9zaXRlKGN1cmkgKyAiLyIgKyBjb21wb3NpdGVVUkkpOw0KLSAgICAgICAgcmV0dXJuIHRydWU7DQotICAgIH0NCi0gICAgDQotICAgIGJvb2xlYW4gc3RhdHVzKGZpbmFsIExpc3Q8U3RyaW5nPiB0b2tzKSB7DQotICAgICAgICBvdXQucHJpbnRsbigiRG9tYWluOiAiICsgbm9kZS5nZXREb21haW5OYW1lKCkpOw0KLSAgICAgICAgTGlzdDxTdHJpbmc+IGljczsNCi0gICAgICAgIGlmICh0b2tzLnNpemUoKT4xKSB7DQotICAgICAgICAgICAgaWNzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQotICAgICAgICAgICAgaWNzLmFkZCh0b2tzLmdldCgxKSk7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIGljcyA9IG5vZGUuZ2V0SW5zdGFsbGVkQ29udHJpYnV0aW9ucygpOw0KKyAgICAgICAgQ29udHJpYnV0aW9uIGMgPSBnZXROb2RlKCkuZ2V0SW5zdGFsbGVkQ29udHJpYnV0aW9uKGN1cmkpOw0KKyAgICAgICAgZm9yIChBcnRpZmFjdCBhIDogYy5nZXRBcnRpZmFjdHMoKSkgew0KKyAgICAgICAgICAgIGlmIChjb21wb3NpdGVVUkkuZXF1YWxzKGEuZ2V0VVJJKCkpKSB7DQorICAgICAgICAgICAgICAgIGdldE5vZGUoKS5hZGRUb0RvbWFpbkxldmVsQ29tcG9zaXRlKGN1cmksIGNvbXBvc2l0ZVVSSSk7DQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisgICAgICAgIC8vIGV4dGVybmFsIGNvbXBvc2l0ZSBmaWxlICgnY29tcG9zaXRlIGJ5IHZhbHVlJykNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgVVJMIHVybCA9IElPSGVscGVyLmdldExvY2F0aW9uQXNVUkwoY29tcG9zaXRlVVJJKTsNCisgICAgICAgICAgICBJbnB1dFN0cmVhbSBpcyA9IElPSGVscGVyLm9wZW5TdHJlYW0odXJsKTsNCisgICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMsICJVVEYtOCIpKTsNCisgICAgICAgICAgICBnZXROb2RlKCkuYWRkRGVwbG95bWVudENvbXBvc2l0ZShjdXJpLCBicik7DQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlKTsNCiAgICAgICAgIH0NCiANCi0gICAgICAgIGZvciAoU3RyaW5nIGN1cmkgOiBpY3MpIHsNCi0gICAgICAgICAgICBDb250cmlidXRpb24gYyA9IG5vZGUuZ2V0SW5zdGFsbGVkQ29udHJpYnV0aW9uKGN1cmkpOw0KLSAgICAgICAgICAgIExpc3Q8U3RyaW5nPiBkY3MgPSBub2RlLmdldERlcGxveWVkQ29tcG9zdGVzKGN1cmkpOw0KLSAgICAgICAgICAgIGlmICh0b2tzLnNpemUoKT4yKSB7DQotICAgICAgICAgICAgICAgIGRjcyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOw0KLSAgICAgICAgICAgICAgICBkY3MuYWRkKHRva3MuZ2V0KDIpKTsNCi0gICAgICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgICAgICBkY3MgPSBub2RlLmdldERlcGxveWVkQ29tcG9zdGVzKGN1cmkpOw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgYm9vbGVhbiBzdGFydChTdHJpbmcgbm9kZU5hbWUsIFN0cmluZyBjb21wb3NpdGVVUkksIFN0cmluZyBjb250cmlidXRpb25VUkwsIFN0cmluZy4uLiBkZXBlbmRlbnRDb250cmlidXRpb25VUkxzKQ0KKyAgICAgICAgdGhyb3dzIEFjdGl2YXRpb25FeGNlcHRpb24sIFZhbGlkYXRpb25FeGNlcHRpb24gew0KKyAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3U3RhbmRhbG9uZU5vZGUoY29tcG9zaXRlVVJJLCBjb250cmlidXRpb25VUkwsIGRlcGVuZGVudENvbnRyaWJ1dGlvblVSTHMpOw0KKyAgICAgICAgc3RhbmRhbG9uZU5vZGVzLnB1dChub2RlTmFtZSwgbm9kZSk7DQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfQ0KKw0KKyAgICBib29sZWFuIHN0YXR1cyhmaW5hbCBMaXN0PFN0cmluZz4gdG9rcykgew0KKyAgICAgICAgaWYgKHN0YW5kYWxvbmVOb2Rlcy5zaXplKCkgPiAwKSB7DQorICAgICAgICAgICAgb3V0LnByaW50bG4oIlN0YW5kYWxvbmUgTm9kZXM6Iik7DQorICAgICAgICAgICAgZm9yIChTdHJpbmcgbm9kZU5hbWUgOiBzdGFuZGFsb25lTm9kZXMua2V5U2V0KCkpIHsNCisgICAgICAgICAgICAgICAgTm9kZSBub2RlID0gc3RhbmRhbG9uZU5vZGVzLmdldChub2RlTmFtZSk7DQorICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGN1cmkgOiBub2RlLmdldEluc3RhbGxlZENvbnRyaWJ1dGlvbnMoKSkgew0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgZGMgOiBub2RlLmdldERlcGxveWVkQ29tcG9zaXRlcyhjdXJpKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wcmludGxuKCIgICAiICsgbm9kZU5hbWUgKyAiICIgKyBkYyk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQotICAgICAgICAgICAgZm9yIChTdHJpbmcgY29tcG9zaXRlVXJpIDogZGNzKSB7DQotICAgICAgICAgICAgICAgIGZvciAoQXJ0aWZhY3QgYSA6IGMuZ2V0QXJ0aWZhY3RzKCkpIHsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChjb21wb3NpdGVVcmkuZXF1YWxzKGEuZ2V0VVJJKCkpKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIiAgICIgKyBjdXJpICsgIiAiICsgY29tcG9zaXRlVXJpICsgIiAiICsgKChDb21wb3NpdGUpYS5nZXRNb2RlbCgpKS5nZXROYW1lKCkpOw0KKyAgICAgICAgICAgIG91dC5wcmludGxuKCk7DQorICAgICAgICB9DQorICAgICAgICBpZiAobm9kZXMuc2l6ZSgpID4gMCkgew0KKyAgICAgICAgICAgIGZvciAoTm9kZSBub2RlIDogbm9kZXMudmFsdWVzKCkpIHsNCisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkRvbWFpbjogIiArIG5vZGUuZ2V0RG9tYWluTmFtZSgpKTsNCisgICAgICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGljczsNCisgICAgICAgICAgICAgICAgaWYgKHRva3Muc2l6ZSgpID4gMSkgew0KKyAgICAgICAgICAgICAgICAgICAgaWNzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQorICAgICAgICAgICAgICAgICAgICBpY3MuYWRkKHRva3MuZ2V0KDEpKTsNCisgICAgICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgICAgIGljcyA9IG5vZGUuZ2V0SW5zdGFsbGVkQ29udHJpYnV0aW9ucygpOw0KKyAgICAgICAgICAgICAgICB9DQorDQorICAgICAgICAgICAgICAgIGZvciAoU3RyaW5nIGN1cmkgOiBpY3MpIHsNCisgICAgICAgICAgICAgICAgICAgIENvbnRyaWJ1dGlvbiBjID0gbm9kZS5nZXRJbnN0YWxsZWRDb250cmlidXRpb24oY3VyaSk7DQorICAgICAgICAgICAgICAgICAgICBMaXN0PFN0cmluZz4gZGNzID0gbm9kZS5nZXREZXBsb3llZENvbXBvc2l0ZXMoY3VyaSk7DQorICAgICAgICAgICAgICAgICAgICBpZiAodG9rcy5zaXplKCkgPiAyKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGNzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQorICAgICAgICAgICAgICAgICAgICAgICAgZGNzLmFkZCh0b2tzLmdldCgyKSk7DQorICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRjcyA9IG5vZGUuZ2V0RGVwbG95ZWRDb21wb3NpdGVzKGN1cmkpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICAgICAgZm9yIChTdHJpbmcgY29tcG9zaXRlVXJpIDogZGNzKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChBcnRpZmFjdCBhIDogYy5nZXRBcnRpZmFjdHMoKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcG9zaXRlVXJpLmVxdWFscyhhLmdldFVSSSgpKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIiAgICIgKyBjdXJpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAiICINCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIGNvbXBvc2l0ZVVyaQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgIiAiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKENvbXBvc2l0ZSlhLmdldE1vZGVsKCkpLmdldE5hbWUoKSk7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICB9DQpAQCAtMjUxLDEzICszNDUsMTcgQEAKICAgICB9DQogDQogICAgIGJvb2xlYW4gaGlzdG9yeSgpIHsNCi0gICAgICAgIGZvciAoU3RyaW5nIGw6IGhpc3RvcnkpDQorICAgICAgICBmb3IgKFN0cmluZyBsIDogaGlzdG9yeSkNCiAgICAgICAgICAgICBvdXQucHJpbnRsbihsKTsNCiAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICB9DQotICAgIA0KKw0KKyAgICBwdWJsaWMgTm9kZSBnZXROb2RlKCkgew0KKyAgICAgICAgcmV0dXJuIG5vZGVzLmdldChjdXJyZW50RG9tYWluKTsNCisgICAgfQ0KKw0KICAgICBMaXN0PFN0cmluZz4gcmVhZChPYmplY3QgcikgdGhyb3dzIElPRXhjZXB0aW9uIHsNCi0gICAgICAgIG91dC5wcmludCgiPT4gIik7DQorICAgICAgICBvdXQucHJpbnQoY3VycmVudERvbWFpbiArICI+ICIpOw0KICAgICAgICAgZmluYWwgU3RyaW5nIGw7DQogICAgICAgICBpZiAodXNlSmxpbmUpIHsNCiAgICAgICAgICAgICBsID0gSkxpbmUucmVhZExpbmUocik7DQpAQCAtMjY1LDEwICszNjMsMTAgQEAKICAgICAgICAgICAgIGwgPSAoKEJ1ZmZlcmVkUmVhZGVyKXIpLnJlYWRMaW5lKCk7DQogICAgICAgICAgICAgaGlzdG9yeS5hZGQobCk7DQogICAgICAgICB9DQotICAgICAgICBTdHJpbmdbXSB0b2tzID0gbCAhPSBudWxsPyBsLnRyaW0oKS5zcGxpdCgiICIpIDogInN0b3AiLnNwbGl0KCIgIik7DQorICAgICAgICBTdHJpbmdbXSB0b2tzID0gbCAhPSBudWxsID8gbC50cmltKCkuc3BsaXQoIiAiKSA6ICJieWUiLnNwbGl0KCIgIik7DQogICAgICAgICBMaXN0PFN0cmluZz4gdG9rc0xpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsNCiAgICAgICAgIGZvciAoU3RyaW5nIHMgOiB0b2tzKSB7DQotICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCAmJiBzLnRyaW0oKS5sZW5ndGgoKT4wKSB7DQorICAgICAgICAgICAgaWYgKHMgIT0gbnVsbCAmJiBzLnRyaW0oKS5sZW5ndGgoKSA+IDApIHsNCiAgICAgICAgICAgICAgICAgdG9rc0xpc3QuYWRkKHMpOw0KICAgICAgICAgICAgIH0NCiAgICAgICAgIH0NCkBAIC0yNzgsNDkgKzM3NiwxMjIgQEAKICAgICBDYWxsYWJsZTxCb29sZWFuPiBldmFsKGZpbmFsIExpc3Q8U3RyaW5nPiB0b2tzKSB7DQogICAgICAgICBmaW5hbCBTdHJpbmcgb3AgPSB0b2tzLnNpemUoKSA+IDAgPyB0b2tzLmdldCgwKSA6ICIiOw0KIA0KLSAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoImFkZERlcGxveW1lbnRDb21wb3NpdGUiKSkgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgICAgIHJldHVybiBhZGREZXBsb3ltZW50Q29tcG9zaXRlKHRva3MuZ2V0KDEpLCB0b2tzLmdldCgyKSk7DQotICAgICAgICB9fTsNCi0gICAgICAgIGlmIChvcC5lcXVhbHNJZ25vcmVDYXNlKCJpbnN0YWxsIikpIHJldHVybiBuZXcgQ2FsbGFibGU8Qm9vbGVhbj4oKSB7IHB1YmxpYyBCb29sZWFuIGNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgICAgICAgICByZXR1cm4gaW5zdGFsbCh0b2tzKTsNCi0gICAgICAgIH19Ow0KLSAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoImluc3RhbGxlZCIpKSByZXR1cm4gbmV3IENhbGxhYmxlPEJvb2xlYW4+KCkgeyBwdWJsaWMgQm9vbGVhbiBjYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZCh0b2tzKTsNCi0gICAgICAgIH19Ow0KLSAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoInByaW50RG9tYWluTGV2ZWxDb21wb3NpdGUiKSkgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgICAgIHJldHVybiBwcmludERvbWFpbkxldmVsQ29tcG9zaXRlKCk7DQotICAgICAgICB9fTsNCi0gICAgICAgIGlmIChvcC5lcXVhbHNJZ25vcmVDYXNlKCJnZXRRTmFtZURlZmluaXRpb24iKSkgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgICAgIHJldHVybiBnZXRRTmFtZURlZmluaXRpb24odG9rcy5nZXQoMSksIHRva3MuZ2V0KDIpLCB0b2tzLmdldCgzKSk7DQotICAgICAgICB9fTsNCi0gICAgICAgIGlmIChvcC5lcXVhbHNJZ25vcmVDYXNlKCJyZW1vdmUiKSkgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgICAgIHJldHVybiByZW1vdmUodG9rcy5nZXQoMSkpOw0KLSAgICAgICAgfX07DQotICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgiaGVscCIpKSByZXR1cm4gbmV3IENhbGxhYmxlPEJvb2xlYW4+KCkgeyBwdWJsaWMgQm9vbGVhbiBjYWxsKCkgew0KLSAgICAgICAgICAgIHJldHVybiBoZWxwKHRva3MpOw0KLSAgICAgICAgfX07DQotICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgic3RvcCIpKSByZXR1cm4gbmV3IENhbGxhYmxlPEJvb2xlYW4+KCkgeyBwdWJsaWMgQm9vbGVhbiBjYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICAgICAgcmV0dXJuIHN0b3AodG9rcyk7DQotICAgICAgICB9fTsNCi0gICAgICAgIGlmIChvcC5lcXVhbHNJZ25vcmVDYXNlKCJieWUiKSkgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgICAgIHJldHVybiBzdG9wKG51bGwpOw0KLSAgICAgICAgfX07DQotICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgic3RhcnQiKSkgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgICAgIHJldHVybiBzdGFydCh0b2tzLmdldCgxKSwgdG9rcy5nZXQoMikpOw0KLSAgICAgICAgfX07DQotICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgic3RhdHVzIikpIHJldHVybiBuZXcgQ2FsbGFibGU8Qm9vbGVhbj4oKSB7IHB1YmxpYyBCb29sZWFuIGNhbGwoKSB7DQotICAgICAgICAgICAgcmV0dXJuIHN0YXR1cyh0b2tzKTsNCi0gICAgICAgIH19Ow0KLSAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoImhpc3RvcnkiKSkgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsgcHVibGljIEJvb2xlYW4gY2FsbCgpIHsNCi0gICAgICAgICAgICByZXR1cm4gaGlzdG9yeSgpOw0KLSAgICAgICAgfX07DQotICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgiIikpIHJldHVybiBuZXcgQ2FsbGFibGU8Qm9vbGVhbj4oKSB7IHB1YmxpYyBCb29sZWFuIGNhbGwoKSB7DQotICAgICAgICAgICAgcmV0dXJuIHRydWU7DQotICAgICAgICB9fTsNCi0gICAgICAgIHJldHVybiBuZXcgQ2FsbGFibGU8Qm9vbGVhbj4oKSB7IHB1YmxpYyBCb29sZWFuIGNhbGwoKSB7DQotICAgICAgICAgICAgb3V0LnByaW50bG4oInVua25vd24gY29tbWFuZCIpOw0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOw0KLSAgICAgICAgfX07DQorICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgiZG9tYWluIikpDQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsNCisgICAgICAgICAgICAgICAgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRvbWFpbih0b2tzLnNpemUoKSA+IDEgPyB0b2tzLmdldCgxKSA6ICIiKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH07DQorICAgICAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoImRvbWFpbnMiKSkNCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsNCisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBCb29sZWFuIGNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZG9tYWlucygpOw0KKyAgICAgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgICAgICB9Ow0KKyAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoImluc3RhbGwiKSkNCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxhYmxlPEJvb2xlYW4+KCkgew0KKyAgICAgICAgICAgICAgICBwdWJsaWMgQm9vbGVhbiBjYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdGFsbCh0b2tzKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH07DQorICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgiaW5zdGFsbGVkIikpDQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsNCisgICAgICAgICAgICAgICAgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluc3RhbGxlZCh0b2tzKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH07DQorICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgibG9hZCIpKQ0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGFibGU8Qm9vbGVhbj4oKSB7DQorICAgICAgICAgICAgICAgIHB1YmxpYyBCb29sZWFuIGNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkKHRva3MuZ2V0KDEpKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH07DQorICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgicmVtb3ZlIikpDQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsNCisgICAgICAgICAgICAgICAgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlbW92ZSh0b2tzLmdldCgxKSk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9Ow0KKyAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoInJ1biIpKQ0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGFibGU8Qm9vbGVhbj4oKSB7DQorICAgICAgICAgICAgICAgIHB1YmxpYyBCb29sZWFuIGNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBydW4odG9rcy5nZXQoMSkpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfTsNCisgICAgICAgIGlmIChvcC5lcXVhbHNJZ25vcmVDYXNlKCJoZWxwIikpDQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsNCisgICAgICAgICAgICAgICAgcHVibGljIEJvb2xlYW4gY2FsbCgpIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoZWxwKHRva3MpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfTsNCisgICAgICAgIGlmIChvcC5lcXVhbHNJZ25vcmVDYXNlKCJzYXZlIikpDQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsNCisgICAgICAgICAgICAgICAgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmUodG9rcy5nZXQoMSkpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfTsNCisgICAgICAgIGlmIChvcC5lcXVhbHNJZ25vcmVDYXNlKCJzdG9wIikpDQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsNCisgICAgICAgICAgICAgICAgcHVibGljIEJvb2xlYW4gY2FsbCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AodG9rcyk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9Ow0KKyAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoImJ5ZSIpKQ0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGFibGU8Qm9vbGVhbj4oKSB7DQorICAgICAgICAgICAgICAgIHB1YmxpYyBCb29sZWFuIGNhbGwoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBieWUoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH07DQorICAgICAgICBpZiAob3AuZXF1YWxzSWdub3JlQ2FzZSgic3RhcnQiKSkNCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxhYmxlPEJvb2xlYW4+KCkgew0KKyAgICAgICAgICAgICAgICBwdWJsaWMgQm9vbGVhbiBjYWxsKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudERvbWFpbi5sZW5ndGgoKSA+IDApIHsNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQodG9rcy5nZXQoMSksIHRva3MuZ2V0KDIpKTsNCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nW10gZHVyaXMgPSBudWxsOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0b2tzLmNvbnRhaW5zKCItZHVyaXMiKSkgew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaSA9IHRva3MuaW5kZXhPZigiLWR1cmlzIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmlzID0gdG9rcy5nZXQoaSArIDEpLnNwbGl0KCIsIik7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva3MucmVtb3ZlKGkpOyB0b2tzLnJlbW92ZShpKzEpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IHRva3MuZ2V0KDEpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cmluZyBjb250cmlidXRpb25VUkw7DQorICAgICAgICAgICAgICAgICAgICAgICAgU3RyaW5nIGNvbXBvc2l0ZVVSSTsNCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG9rcy5zaXplKCkgPiAzKSB7DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvc2l0ZVVSSSA9IHRva3MuZ2V0KDIpOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb25VUkwgPSB0b2tzLmdldCgzKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVVUkkgPSBudWxsOw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cmlidXRpb25VUkwgPSB0b2tzLmdldCgyKTsNCisgICAgICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0KG5hbWUsIGNvbXBvc2l0ZVVSSSwgY29udHJpYnV0aW9uVVJMLCBkdXJpcyk7DQorICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9Ow0KKyAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoInN0YXR1cyIpKQ0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGFibGU8Qm9vbGVhbj4oKSB7DQorICAgICAgICAgICAgICAgIHB1YmxpYyBCb29sZWFuIGNhbGwoKSB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzKHRva3MpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfTsNCisgICAgICAgIGlmIChvcC5lcXVhbHNJZ25vcmVDYXNlKCJoaXN0b3J5IikpDQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsNCisgICAgICAgICAgICAgICAgcHVibGljIEJvb2xlYW4gY2FsbCgpIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBoaXN0b3J5KCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9Ow0KKyAgICAgICAgaWYgKG9wLmVxdWFsc0lnbm9yZUNhc2UoIiIpIHx8IG9wLnN0YXJ0c1dpdGgoIiMiKSkNCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxhYmxlPEJvb2xlYW4+KCkgew0KKyAgICAgICAgICAgICAgICBwdWJsaWMgQm9vbGVhbiBjYWxsKCkgew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9Ow0KKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxCb29sZWFuPigpIHsNCisgICAgICAgICAgICBwdWJsaWMgQm9vbGVhbiBjYWxsKCkgew0KKyAgICAgICAgICAgICAgICBvdXQucHJpbnRsbigidW5rbm93biBjb21tYW5kIik7DQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH07DQogICAgIH0NCiANCiAgICAgYm9vbGVhbiBhcHBseShmaW5hbCBDYWxsYWJsZTxCb29sZWFuPiBmdW5jKSB7DQpAQCAtMzQwLDcyICs1MTEsNzMgQEAKICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGluKSk7DQogICAgICAgICB9DQotICAgICAgICB3aGlsZShhcHBseShldmFsKHJlYWQocmVhZGVyKSkpKTsNCisgICAgICAgIHdoaWxlIChhcHBseShldmFsKHJlYWQocmVhZGVyKSkpKQ0KKyAgICAgICAgICAgIDsNCiAgICAgfQ0KIA0KLSAgICBTdHJpbmcgcmVhZENvbnRlbnRzKFN0cmluZyBsb2NhdGlvbikgdGhyb3dzIElPRXhjZXB0aW9uIHsNCi0gICAgICAgIFVSTCB1cmwgPSBJT0hlbHBlci5nZXRMb2NhdGlvbkFzVVJMKGxvY2F0aW9uKTsNCi0gICAgICAgIElucHV0U3RyZWFtIGlzID0gSU9IZWxwZXIub3BlblN0cmVhbSh1cmwpOw0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaXMsICJVVEYtOCIpKTsNCi0gICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU3RyaW5nQnVpbGRlcig4MTkyKTsNCi0gICAgICAgICAgICBmb3IoU3RyaW5nIGxpbmU9YnIucmVhZExpbmUoKTsgbGluZSE9bnVsbDsgbGluZT1ici5yZWFkTGluZSgpKSB7DQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGxpbmUpOw0KLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnXG4nKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsNCi0gICAgICAgIH0gZmluYWxseSB7DQotICAgICAgICAgICAgSU9IZWxwZXIuY2xvc2UoaXMpOw0KLSAgICAgICAgfQ0KLSAgICAgfQ0KLSAgICANCiAgICAgYm9vbGVhbiBoZWxwKExpc3Q8U3RyaW5nPiB0b2tzKSB7DQogICAgICAgICBTdHJpbmcgY29tbWFuZCA9ICh0b2tzID09IG51bGwgfHwgdG9rcy5zaXplKCkgPCAyKSA/IG51bGwgOiB0b2tzLmdldCgxKTsNCiAgICAgICAgIGlmIChjb21tYW5kID09IG51bGwpIHsNCiAgICAgICAgICAgICBoZWxwT3ZlcnZpZXcoKTsNCi0gICAgICAgIH0gZWxzZSBpZiAoImhlbHAiLmVxdWFsc0lnbm9yZUNhc2UoY29tbWFuZCkpew0KKyAgICAgICAgfSBlbHNlIGlmICgiaGVscCIuZXF1YWxzSWdub3JlQ2FzZShjb21tYW5kKSkgew0KICAgICAgICAgICAgIGhlbHBIZWxwKCk7DQogICAgICAgICB9IGVsc2UgaWYgKCJpbnN0YWxsIi5lcXVhbHNJZ25vcmVDYXNlKGNvbW1hbmQpKSB7DQogICAgICAgICAgICAgaGVscEluc3RhbGwoKTsNCiAgICAgICAgIH0gZWxzZSBpZiAoImluc3RhbGxlZCIuZXF1YWxzSWdub3JlQ2FzZShjb21tYW5kKSkgew0KICAgICAgICAgICAgIGhlbHBJbnN0YWxsZWQoKTsNCisgICAgICAgIH0gZWxzZSBpZiAoImxvYWQiLmVxdWFsc0lnbm9yZUNhc2UoY29tbWFuZCkpIHsNCisgICAgICAgICAgICBoZWxwTG9hZCgpOw0KICAgICAgICAgfSBlbHNlIGlmICgicmVtb3ZlIi5lcXVhbHNJZ25vcmVDYXNlKGNvbW1hbmQpKSB7DQogICAgICAgICAgICAgaGVscFJlbW92ZSgpOw0KLSAgICAgICAgfSBlbHNlIGlmICgiYWRkRGVwbG95bWVudENvbXBvc2l0ZSIuZXF1YWxzSWdub3JlQ2FzZShjb21tYW5kKSkgew0KLSAgICAgICAgICAgIGhlbHBBZGREZXBsb3ltZW50Q29tcG9zaXRlKCk7DQotICAgICAgICB9IGVsc2UgaWYgKCJwcmludERvbWFpbkxldmVsQ29tcG9zaXRlIi5lcXVhbHNJZ25vcmVDYXNlKGNvbW1hbmQpKSB7DQotICAgICAgICAgICAgaGVscFByaW50RG9tYWluTGV2ZWxDb21wb3NpdGUoKTsNCisgICAgICAgIH0gZWxzZSBpZiAoInJ1biIuZXF1YWxzSWdub3JlQ2FzZShjb21tYW5kKSkgew0KKyAgICAgICAgICAgIGhlbHBSdW4oKTsNCisgICAgICAgIH0gZWxzZSBpZiAoInNhdmUiLmVxdWFsc0lnbm9yZUNhc2UoY29tbWFuZCkpIHsNCisgICAgICAgICAgICBoZWxwU2F2ZSgpOw0KICAgICAgICAgfSBlbHNlIGlmICgic3RhcnQiLmVxdWFsc0lnbm9yZUNhc2UoY29tbWFuZCkpIHsNCiAgICAgICAgICAgICBoZWxwU3RhcnQoKTsNCiAgICAgICAgIH0gZWxzZSBpZiAoInN0YXR1cyIuZXF1YWxzSWdub3JlQ2FzZShjb21tYW5kKSkgew0KICAgICAgICAgICAgIGhlbHBTdGF0dXMoKTsNCiAgICAgICAgIH0gZWxzZSBpZiAoInN0b3AiLmVxdWFsc0lnbm9yZUNhc2UoY29tbWFuZCkpIHsNCiAgICAgICAgICAgICBoZWxwU3RvcCgpOw0KLSAgICAgICAgfSBlbHNlIGlmICgic3RhcnR1cCIuZXF1YWxzSWdub3JlQ2FzZShjb21tYW5kKSl7DQorICAgICAgICB9IGVsc2UgaWYgKCJzdGFydHVwIi5lcXVhbHNJZ25vcmVDYXNlKGNvbW1hbmQpKSB7DQogICAgICAgICAgICAgaGVscFN0YXJ0VXAoKTsNCisgICAgICAgIH0gZWxzZSBpZiAoImJ5ZSIuZXF1YWxzSWdub3JlQ2FzZShjb21tYW5kKSkgew0KKyAgICAgICAgICAgIGhlbHBCeWUoKTsNCiAgICAgICAgIH0NCiAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICB9DQogDQogICAgIGJvb2xlYW4gaGVscE92ZXJ2aWV3KCkgew0KLSAgICAgICAgb3V0LnByaW50bG4oIkFwYWNoZSBUdXNjYW55IFNoZWxsICgiICsgVmVyc2lvbi5nZXRWZXJzaW9uKCkgKyAiICIgKyBWZXJzaW9uLmdldFJldnNpb24oKSArICIgIiArIFZlcnNpb24uZ2V0QnVpbGRUaW1lKCkgKyAiKSIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIkFwYWNoZSBUdXNjYW55IFNoZWxsICgiICsgVmVyc2lvbi5nZXRWZXJzaW9uKCkNCisgICAgICAgICAgICArICIgIg0KKyAgICAgICAgICAgICsgVmVyc2lvbi5nZXRSZXZzaW9uKCkNCisgICAgICAgICAgICArICIgIg0KKyAgICAgICAgICAgICsgVmVyc2lvbi5nZXRCdWlsZFRpbWUoKQ0KKyAgICAgICAgICAgICsgIikiKTsNCiAgICAgICAgIG91dC5wcmludGxuKCJDb21tYW5kczoiKTsNCiAgICAgICAgIG91dC5wcmludGxuKCk7DQogICAgICAgICBvdXQucHJpbnRsbigiICAgaGVscCIpOw0KLSAgICAgICAgb3V0LnByaW50bG4oIiAgIGluc3RhbGwgWzx1cmk+XSA8Y29udHJpYnV0aW9uVVJMPiBbLW5vcnVuIC1tZXRhZGF0YSA8dXJsPiAtZHVyaXMgPHVyaSx1cmksLi4uPl0iKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBkb21haW4gPGRvbWFpblVSST4iKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBkb21haW5zIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgaW5zdGFsbCBbPHVyaT5dIDxjb250cmlidXRpb25VUkw+IFstc3RhcnRdIFstbWV0YWRhdGEgPHVybD5dIFstZHVyaXMgPHVyaSx1cmksLi4uPl0iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICBpbnN0YWxsZWQgWzxjb250cmlidXRpb25VUkk+XSIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIGxvYWQgPGNvbmZpZ1htbFVSTD4iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICByZW1vdmUgPGNvbnRyaWJ1dGlvblVSST4iKTsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICBhZGREZXBsb3ltZW50Q29tcG9zaXRlIDxjb250cmlidXRpb25VUkk+IDxjb250ZW50VVJMPiIpOw0KLSAgICAgICAgb3V0LnByaW50bG4oIiAgIHByaW50RG9tYWluTGV2ZWxDb21wb3NpdGUiKTsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICBzdGFydCA8Y3VyaT4gPGNvbXBvc2l0ZVVyaT4iKTsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICBzdGF0dXMgWzxjdXJpPiA8Y29tcG9zaXRlVXJpPl0iKTsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICBzdG9wIFs8Y3VyaT4gPGNvbXBvc2l0ZVVyaT5dIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgcnVuIDxjb21tYW5kc0ZpbGVVUkw+Iik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgc2F2ZSA8ZGlyZWN0b3J5UGF0aD4iKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBzdGFydCA8Y3VyaT4gPGNvbXBvc2l0ZVVyaT58PGNvbnRlbnRVUkw+Iik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgc3RhcnQgPG5hbWU+IFs8Y29tcG9zaXRlVXJpPl0gPGNvbnRyaWJ1dGlvblVSTD4gWy1kdXJpcyA8dXJpLHVyaSwuLi4+XSIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIHN0YXR1cyBbPGN1cmk+IFs8Y29tcG9zaXRlVXJpPl1dIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgc3RvcCBbPGN1cmk+IFs8Y29tcG9zaXRlVXJpPl1dIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgYnllIik7DQogICAgICAgICBvdXQucHJpbnRsbigpOw0KLSAgICAgICAgaWYgKHVzZUpsaW5lKSBvdXQucHJpbnRsbigiVXNlIFRhYiBrZXkgZm9yIGNvbW1hbmQgYW5kIGFyZ3VtZW50IGNvbXBsZXRpb24iKTsNCisgICAgICAgIGlmICh1c2VKbGluZSkNCisgICAgICAgICAgICBvdXQucHJpbnRsbigiVXNlIFRhYiBrZXkgZm9yIGNvbW1hbmQgYW5kIGFyZ3VtZW50IGNvbXBsZXRpb24iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCJGb3IgZGV0YWlsZWQgaGVscCBvbiBlYWNoIGNvbW1hbmQgZG8gJ2hlbHAgPGNvbW1hbmQ+JywgZm9yIGhlbHAgb2Ygc3RhcnR1cCBvcHRpb25zIGRvICdoZWxwIHN0YXJ0dXAnIik7DQogICAgICAgICBvdXQucHJpbnRsbigpOw0KICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgIH0NCisNCiAgICAgdm9pZCBoZWxwSGVscCgpIHsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICBoZWxwIFs8Y29tbWFuZD5dIik7DQogICAgICAgICBvdXQucHJpbnRsbigpOw0KQEAgLTQxOSwyNSArNTkxLDI3IEBACiAgICAgICAgIG91dC5wcmludGxuKCIgICAgICA8Y29tbWFuZD4gLSAob3B0aW9uYWwpIHRoZSBjb21tYW5kIHRvIGdldCBkZXRhaWxlZCBoZWxwIG9uIik7DQogICAgIH0NCiANCi0gICAgdm9pZCBoZWxwQWRkRGVwbG95bWVudENvbXBvc2l0ZSgpIHsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICBhZGREZXBsb3ltZW50Q29tcG9zaXRlIDxjb250cmlidXRpb25VUkk+IDxjb250ZW50VVJMPiIpOw0KKyAgICB2b2lkIGhlbHBEb21haW4oKSB7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgZG9tYWluIFs8ZG9tYWluVVJJPl0iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCk7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgQWRkcyBhIGRlcGxveW1lbnQgY29tcG9zaXRlIHVzaW5nIGEgc3VwcGxpZWQgY29tcG9zaXRlICgnY29tcG9zaXRlIGJ5IHZhbHVlJyAtIGEgZGF0YSIpOw0KLSAgICAgICAgb3V0LnByaW50bG4oIiAgIHN0cnVjdHVyZSwgbm90IGFuIGV4aXN0aW5nIHJlc291cmNlIGluIHRoZSBEb21haW4pIHRvIHRoZSBjb250cmlidXRpb24gaWRlbnRpZmllZCBieSBhIik7IA0KLSAgICAgICAgb3V0LnByaW50bG4oIiAgIHN1cHBsaWVkIGNvbnRyaWJ1dGlvbiBVUkkuIFRoZSBhZGRlZCBkZXBsb3ltZW50IGNvbXBvc2l0ZSBpcyBnaXZlbiBhIHJlbGF0aXZlIFVSSSB0aGF0Iik7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgbWF0Y2hlcyB0aGUgQG5hbWUgYXR0cmlidXRlIG9mIHRoZSBjb21wb3NpdGUsIHdpdGggYSAnLmNvbXBvc2l0ZScgc3VmZml4LiBTaW5jZSBhbGwgY29tcG9zaXRlcyIpOyANCi0gICAgICAgIG91dC5wcmludGxuKCIgICBydW4gd2l0aGluIHRoZSBjb250ZXh0IG9mIGFuIGluc3RhbGxlZCBjb250cmlidXRpb24gKGFueSBjb21wb25lbnQgaW1wbGVtZW50YXRpb25zIG9yIG90aGVyIik7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgZGVmaW5pdGlvbnMgYXJlIHJlc29sdmVkIHdpdGhpbiB0aGF0IGNvbnRyaWJ1dGlvbiksIHRoaXMgZnVuY3Rpb25hbGl0eSBtYWtlcyBpdCBwb3NzaWJsZSIpOw0KLSAgICAgICAgb3V0LnByaW50bG4oIiAgIGZvciB0aGUgZGVwbG95ZXIgdG8gY3JlYXRlIGEgY29tcG9zaXRlIHdpdGggZmluYWwgY29uZmlndXJhdGlvbiBhbmQgd2lyaW5nIGRlY2lzaW9ucyBhbmQgYWRkIik7ICANCi0gICAgICAgIG91dC5wcmludGxuKCIgICBpdCB0byBhbiBpbnN0YWxsZWQgY29udHJpYnV0aW9uIHdpdGhvdXQgaGF2aW5nIHRvIG1vZGlmeSB0aGUgY29udGVudHMgb2YgdGhlIHJvb3QgY29udHJpYnV0aW9uLiIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIFN0YXJ0cyBvciBjb25uZWN0cyB0byBhIGRvbWFpbiBmb3IgdGhlIGdpdmVuIGRvbWFpbiBVUkkuIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgSWYgbm8gZG9tYWluIFVSSSBpcyBzcGVjaWZpZWQgc3dpdGNoIHRvIHN0YW5kYWxvbmUgbW9kZS4iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCk7DQogICAgICAgICBvdXQucHJpbnRsbigiICAgQXJndW1lbnRzOiIpOw0KLSAgICAgICAgb3V0LnByaW50bG4oIiAgICAgIDxjb250cmlidXRpb25VUkk+IC0gKHJlcXVpcmVkKSB0aGUgVVJJIG9mIGFuIGluc3RhbGxlZCBjb250cmlidXRpb24iKTsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICAgICA8Y29udGVudFVSTD4gLSAocmVxdWlyZWQpIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tcG9zaXRlIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgICAgPGRvbWFpblVSST4gLSAob3B0aW9uYWwpIHRoZSBkb21haW4gVVJJIG9mIHRoZSBkb21haW4iKTsNCisgICAgfQ0KKw0KKyAgICB2b2lkIGhlbHBEb21haW5zKCkgew0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIGRvbWFpbnMiKTsNCisgICAgICAgIG91dC5wcmludGxuKCk7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgU2hvd3MgdGhlIGN1cnJlbnRseSBkZWZpbmVkIGRvbWFpbiBVUklzIik7DQorICAgICAgICBvdXQucHJpbnRsbigpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIEFyZ3VtZW50czoiKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICAgICBub25lIik7DQogICAgIH0NCiANCiAgICAgdm9pZCBoZWxwSW5zdGFsbCgpIHsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICBpbnN0YWxsIFs8dXJpPl0gPGNvbnRyaWJ1dGlvblVSTD4gWy1ub3J1biAtbWV0YWRhdGEgPHVybD4gLWR1cmlzIDx1cmksdXJpLC4uLj5dIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgaW5zdGFsbCBbPHVyaT5dIDxjb250cmlidXRpb25VUkw+IFstc3RhcnRdIFstbWV0YWRhdGEgPHVybD5dIFstZHVyaXMgPHVyaSx1cmksLi4uPl0iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCk7DQogICAgICAgICBvdXQucHJpbnRsbigiICAgQ3JlYXRlcyBhbiBpbnN0YWxsZWQgY29udHJpYnV0aW9uIHdpdGggYSBzdXBwbGllZCByb290IGNvbnRyaWJ1dGlvbiwgaW5zdGFsbGVkIGF0IGFiYXNlIFVSSS4iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCk7DQpAQCAtNDQ1LDcgKzYxOSw3IEBACiAgICAgICAgIG91dC5wcmludGxuKCIgICAgICB1cmkgLSAob3B0aW9uYWwpIHRoZSBVUkkgKG5hbWUpIHRvIHVzZSBmb3IgdGhlIGNvbnRyaWJ1dGlvbi4gV2hlbiBubyB1cmkgaXMgc3BlY2lmaWVkIik7DQogICAgICAgICBvdXQucHJpbnRsbigiICAgICAgICAgICAgICAgYSBkZWZhdWx0IFVSSSBpcyB1c2VkIGRlcml2ZWQgZnJvbSB0aGUgY29udHJpYnV0aW9uIFVSTCIpOw0KICAgICAgICAgb3V0LnByaW50bG4oIiAgICAgIGNvbnRyaWJ1dGlvblVSTCAtIChyZXF1aXJlZCkgdGhlIFVSTCB0byB0aGUgY29udHJpYnV0aW9uIHRvIGluc3RhbGwiKTsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICAgICAtbm9ydW4gLSAob3B0aW9uYWwpIGRvIG5vdCBzdGFydCBhbnkgY29tcG9zaXRlcyBsaXN0ZWQgYXMgZGVwbG95YWJsZSBpbiB0aGUgc2NhLWNvbnRyaWJ1dGlvbi54bWwgZmlsZSIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgICAgIC1zdGFydCAtIChvcHRpb25hbCkgc3RhcnQgYW55IGNvbXBvc2l0ZXMgbGlzdGVkIGFzIGRlcGxveWFibGUgaW4gdGhlIHNjYS1jb250cmlidXRpb24ueG1sIGZpbGUiKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICAgICAtbWV0YWRhdGEgPHVybD4gLSAob3B0aW9uYWwpIHRoZSBVUkwgdG8gYW4gZXh0ZXJuYWwgY29udHJpYnV0aW9uIG1ldGEgZGF0YSBkb2N1bWVudCB0aGF0IHNob3VsZCBiZSIpOw0KICAgICAgICAgb3V0LnByaW50bG4oIiAgICAgICAgICAgICAgIG1lcmdlZCBpbnRvIGFueSBleGlzdGluZyBzY2EtY29udHJpYnV0aW9ucy54bWwgZmlsZSB3aXRoaW4gdGhlIGNvbnRyaWJ1dGlvbi4iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICAgICAtZHVyaXMgPHVyaSx1cmksLi4uPiAtIChvcHRpb25hbCkgc3BlY2lmaWVzIHRoZSBVUklzIG9mIGNvbnRyaWJ1dGlvbnMgdGhhdCBhcmUgdXNlZCB0byByZXNvbHZlIHRoZSIpOw0KQEAgLTQ2NCw2ICs2MzgsMTcgQEAKICAgICAgICAgb3V0LnByaW50bG4oIiAgICAgIGNvbnRyaWJ1dGlvblVSSSAtIChvcHRpb25hbCkgdGhlIFVSSSBvZiBhbiBpbnN0YWxsZWQgY29udHJpYnV0aW9uIik7DQogICAgIH0NCiANCisgICAgdm9pZCBoZWxwTG9hZCgpIHsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBsb2FkIDxjb25maWdYbWxVcmw+Iik7DQorICAgICAgICBvdXQucHJpbnRsbigpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIFNob3dzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb250cmlidXRpb25zIGluc3RhbGxlZCBvbiB0aGlzIG5vZGUsIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgaW5jbHVkaW5nIHRoZSBjb250cmlidXRpb24gVVJJIGFuZCBsb2NhdGlvbiBhbG9uZyB3aXRoIHRoZSBVUkkiKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBhbmQgUU5hbWUgb2YgYW55IGNvbXBvc2l0ZXMgd2l0aGluIHRoZSBjb250cmlidXRpb24iKTsNCisgICAgICAgIG91dC5wcmludGxuKCk7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgQXJndW1lbnRzOiIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgICAgIGNvbmZpZ1htbFVybCAtIChyZXF1aXJlZCkgdGhlIFVSTCBvZiB0aGUgY29uZmlnIGZpbGUgdG8gbG9hZCIpOw0KKyAgICB9DQorDQogICAgIHZvaWQgaGVscFJlbW92ZSgpIHsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICByZW1vdmUgPGNvbnRyaWJ1dGlvblVSST4iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCk7DQpAQCAtNDczLDE3ICs2NTgsMzEgQEAKICAgICAgICAgb3V0LnByaW50bG4oIiAgICAgIGNvbnRyaWJ1dGlvblVSSSAtIChyZXF1aXJlZCkgdGhlIFVSSSBvZiBhbiBpbnN0YWxsZWQgY29udHJpYnV0aW9uIik7DQogICAgIH0NCiANCi0gICAgdm9pZCBoZWxwUHJpbnREb21haW5MZXZlbENvbXBvc2l0ZSgpIHsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICBwcmludERvbWFpbkxldmVsQ29tcG9zaXRlIik7DQorICAgIHZvaWQgaGVscFJ1bigpIHsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBydW4gPGNvbW1hbmRzRmlsZVVSTD4iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCk7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgTm90IHlldCBpbXBsZW1lbnRlZCIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIFJ1bnMgc2hlbGwgY29tbWFuZHMgc3RvcmVkIGluIGZpbGUuIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgVGhlIGZpbGUgc2hvdWxkIGJlIGEgdGV4dCBmaWxlIHdpdGggb25lIHNoZWxsIGNvbW1hbmQgcGVyIGxpbmUuIEJsYW5rIGxpbmVzIGFuZCAiKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBsaW5lcyBzdGFydGluZyB3aXRoICMgd2lsbCBiZSBpZ25vcmVkLiIpOw0KICAgICAgICAgb3V0LnByaW50bG4oKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICBBcmd1bWVudHM6Iik7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgICAgbm9uZSIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgICAgIGNvbW1hbmRzRmlsZVVSTCAtIChyZXF1aXJlZCkgdGhlIFVSTCBvZiB0aGUgY29tbWFuZHMgZmlsZSB0byBydW4iKTsNCisgICAgfQ0KKw0KKyAgICB2b2lkIGhlbHBTYXZlKCkgew0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIHNhdmUgPGRpcmVjdG9yeVBhdGg+Iik7DQorICAgICAgICBvdXQucHJpbnRsbigpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIFNhdmVzIHRoZSBjdXJyZW50IE5vZGUgc3RhdGUgdG8gZGlyZWN0b3J5LiIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIFRoaXMgd2lsbCBpbmNsdWRlIGEgbm9kZS1jb25maWcueG1sIGZpbGUgYW5kIGNvcGllcyBvZiBhbGwgYXJ0aWZhY3RzIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgYmVpbmcgdXNlZCBieSB0aGUgTm9kZS4iKTsNCisgICAgICAgIG91dC5wcmludGxuKCk7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgQXJndW1lbnRzOiIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgICAgIGRpcmVjdG9yeVBhdGggLSAocmVxdWlyZWQpIHRoZSBVUkwgb2YgYSBkaXJlY3RvcnkgdG8gYmUgdXNlZCB0byBzdG9yZSB0aGUgc3RhdGUuIik7DQogICAgIH0NCiANCiAgICAgdm9pZCBoZWxwU3RhcnQoKSB7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgc3RhcnQgPGN1cmk+IDxjb21wb3NpdGVVcmk+Iik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgc3RhcnQgPGN1cmk+IDxjb21wb3NpdGVVcmk+fDxjb250ZW50VVJMPiIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIHN0YXJ0IDxuYW1lPiBbPGNvbXBvc2l0ZVVyaT5dIDxjb250cmlidXRpb25VUkw+IFstZHVyaXMgPHVyaSx1cmksLi4uPl0iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCk7DQogICAgICAgICBvdXQucHJpbnRsbigiICAgU3RhcnRzIGEgY29tcG9zaXRlLiIpOw0KICAgICAgICAgb3V0LnByaW50bG4oIiAgIFRoZSBjb21wb3NpdGUgaXMgYWRkZWQgdG8gdGhlIGRvbWFpbiBjb21wb3NpdGUgd2l0aCBzZW1hbnRpY3MgdGhhdCBjb3JyZXNwb25kIHRvIHRoZSBkb21haW4tbGV2ZWwiKTsNCkBAIC00OTEsMTMgKzY5MCwyMiBAQAogICAgICAgICBvdXQucHJpbnRsbigiICAgY29tcG9uZW50cyBiZWNvbWUgdG9wLWxldmVsIGNvbXBvbmVudHMgYW5kIHRoZSBjb21wb25lbnQgc2VydmljZXMgYmVjb21lIGV4dGVybmFsbHkgdmlzaWJsZSIpOw0KICAgICAgICAgb3V0LnByaW50bG4oIiAgIHNlcnZpY2VzIChlZy4gdGhleSB3b3VsZCBiZSBwcmVzZW50IGluIGEgV1NETCBkZXNjcmlwdGlvbiBvZiB0aGUgRG9tYWluKS4iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCk7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgQXJndW1lbnRzOiIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIFRoZSBzZWNvbmQgZm9ybSBvZiB0aGUgc3RhcnQgY29tbWFuZCBzdGFydHMgaW4gc3RhbmRhbG9uZSBtb2RlIG5vdCBwYXJ0IG9mIGFueSBTQ0EgZG9tYWluLiIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBBcmd1bWVudHMgKGZvcm0xKToiKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICAgICBjdXJpIC0gKHJlcXVpcmVkKSB0aGUgVVJJIG9mIGFuIGluc3RhbGxlZCBjb250cmlidXRpb24iKTsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICAgICBjb21wb3NpdGVVcmkgLSAocmVxdWlyZWQpIHRoZSBVUkkgb2YgYSBjb21wb3NpdGUiKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICAgICBjb21wb3NpdGVVcmkgb3IgY29udGVudFVSTCAtIChyZXF1aXJlZCkgZWl0aGVyIHRoZSBVUkkgb2YgYSBjb21wb3NpdGUgd2l0aGluIHRoZSBjb250cmlidXRpb24iKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSBVUkwgdG8gYW4gZXh0ZXJuYWwgY29tcG9zaXRlIGZpbGUuIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgQXJndW1lbnRzIChmb3JtMik6Iik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgICAgbmFtZSAtIChyZXF1aXJlZCkgYSBuYW1lIGZvciB0aGUgc3RhcnRlZCBjb21wb3NpdGUvY29udHJpYnV0aW9uIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgICAgY29tcG9zaXRlVXJpIC0gKG9wdGlvbmFsKSB0aGUgVVJJIG9mIGEgY29tcG9zaXRlIHdpdGhpbiB0aGUgY29udHJpYnV0aW9uIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgICAgY29udHJpYnV0aW9uVVJMIC0gKHJlcXVpcmVkKSB0aGUgVVJMIHRvIHRoZSBjb250cmlidXRpb24iKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICAgICAtZHVyaXMgPHVyaSx1cmksLi4uPiAtIChvcHRpb25hbCkgc3BlY2lmaWVzIHRoZSBVUklzIG9mIGNvbnRyaWJ1dGlvbnMgdGhhdCBhcmUgdXNlZCB0byByZXNvbHZlIHRoZSIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcyBvZiB0aGUgcm9vdCBjb250cmlidXRpb24gYW5kIG90aGVyIGRlcGVuZGVudCBjb250cmlidXRpb25zLiIpOw0KICAgICB9DQogDQogICAgIHZvaWQgaGVscFN0YXR1cygpIHsNCi0gICAgICAgIG91dC5wcmludGxuKCIgICBzdGF0dXMgWzxjdXJpPiA8Y29tcG9zaXRlVXJpPl0iKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBzdGF0dXMgWzxjdXJpPiBbPGNvbXBvc2l0ZVVyaT5dXSIpOw0KICAgICAgICAgb3V0LnByaW50bG4oKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICBTaG93cyB0aGUgc3RhdHVzIG9mIHRoZSBOb2RlLCBsaXN0aW5nIGZvciBlYWNoIGRlcGxveWVkIGNvbXBvc2l0ZSBpdHMiKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICBjb250cmlidXRpb24gVVJJLCB0aGUgY29tcG9zaXRlIFVSSSwgYW5kIHRoZSBjb21wb3NpdGUgUU5hbWUuIik7DQpAQCAtNTA4LDE4ICs3MTYsMjggQEAKICAgICB9DQogDQogICAgIHZvaWQgaGVscFN0b3AoKSB7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgc3RvcCBbPGN1cmk+IDxjb21wb3NpdGVVcmk+XSIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIHN0b3AgWzxjdXJpPiBbPGNvbXBvc2l0ZVVyaT5dXSIpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIHN0b3AgPG5hbWU+Iik7DQogICAgICAgICBvdXQucHJpbnRsbigpOw0KLSAgICAgICAgb3V0LnByaW50bG4oIiAgIFN0b3BzIHRoaXMgTm9kZSBvciBpbmRpdmlkdWFsIGNvbXBvc2l0ZXMgYW5kIGNvbnRyaWJ1dGlvbnMgaW4gdGhlIE5vZGUuIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgU3RvcHMgYSBkb21haW4gb3Igc3RhbmRhbG9uZSBub2RlIG9yIGluZGl2aWR1YWwgY29tcG9zaXRlcyBhbmQgY29udHJpYnV0aW9ucyBpbiBhIERvbWFpbi4iKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICBJZiBhIGNvbXBvc2l0ZSBVUkkgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGNvbXBvc2l0ZSBpcyByZW1vdmVkIGZyb20gdGhlIERvbWFpbiBMZXZlbCBjb21wb3NpdGUiKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICBUaGlzIG1lYW5zIHRoYXQgdGhlIHJlbW92YWwgb2YgdGhlIGNvbXBvbmVudHMsIHdpcmVzLCBzZXJ2aWNlcyBhbmQgcmVmZXJlbmNlcyBvcmlnaW5hbGx5IGFkZGVkIik7DQogICAgICAgICBvdXQucHJpbnRsbigiICAgdG8gdGhlIGRvbWFpbiBsZXZlbCBjb21wb3NpdGUgYnkgdGhlIGlkZW50aWZpZWQgY29tcG9zaXRlLiBJZiBhIGNvbnRyaWJ1dGlvbiBVUkkgaXMgc3BlY2lmaWVkIik7DQogICAgICAgICBvdXQucHJpbnRsbigiICAgd2l0aG91dCBhIGNvbXBvc2l0ZSBVUkkgdGhlbiBhbGwgZGVwbG95ZWQgY29tcG9zaXRlcyBjb21wb3NpdGVzIGluIHRoZSBjb250cmlidXRpb24gYXJlIHN0b3BwZWQuIik7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgSWYgbm8gY29udHJpYnV0aW9uIFVSSSBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZW50aXJlIE5vZGUgaXMgc3RvcHBlZCBhbmQgdGhlIFNoZWxsIGV4aXRzLiIpOw0KICAgICAgICAgb3V0LnByaW50bG4oKTsNCiAgICAgICAgIG91dC5wcmludGxuKCIgICBBcmd1bWVudHM6Iik7DQotICAgICAgICBvdXQucHJpbnRsbigiICAgICAgY3VyaSAtIChvcHRpb25hbCkgdGhlIFVSSSBvZiBhbiBpbnN0YWxsZWQgY29udHJpYnV0aW9uIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgICAgY3VyaSAtIChyZXF1aXJlZCkgdGhlIFVSSSBvZiBhbiBpbnN0YWxsZWQgY29udHJpYnV0aW9uIik7DQogICAgICAgICBvdXQucHJpbnRsbigiICAgICAgY29tcG9zaXRlVXJpIC0gKG9wdGlvbmFsKSB0aGUgVVJJIG9mIGEgY29tcG9zaXRlIik7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgICAgbmFtZSAtIChyZXF1aXJlZCkgdGhlIG5hbWUgb2YgYSBzdGFuZGFsb24gbm9kZSBvciBkb21haW4gdG8gc3RvcCIpOw0KKyAgICB9DQorDQorICAgIHZvaWQgaGVscEJ5ZSgpIHsNCisgICAgICAgIG91dC5wcmludGxuKCIgICBieWUiKTsNCisgICAgICAgIG91dC5wcmludGxuKCk7DQorICAgICAgICBvdXQucHJpbnRsbigiICAgQWxsIGRlcGxveWVkIGNvbXBvc2l0ZXMgYXJlIHN0b3BwZWQgYW5kIHRoZSBTaGVsbCBleGlzdHMuIik7DQorICAgICAgICBvdXQucHJpbnRsbigpOw0KKyAgICAgICAgb3V0LnByaW50bG4oIiAgIEFyZ3VtZW50czoiKTsNCisgICAgICAgIG91dC5wcmludGxuKCIgICAgICBub25lIik7DQogICAgIH0NCiANCiAgICAgdm9pZCBoZWxwU3RhcnRVcCgpIHsNCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zaGVsbC9qbGluZS9Db21wb3NpdGVVUklDb21wbGV0b3IuamF2YSBiL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL0NvbXBvc2l0ZVVSSUNvbXBsZXRvci5qYXZhCmluZGV4IGZjZmQ1ZjAuLmMwN2MzYWMgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL0NvbXBvc2l0ZVVSSUNvbXBsZXRvci5qYXZhCisrKyBiL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL0NvbXBvc2l0ZVVSSUNvbXBsZXRvci5qYXZhCkBAIC0yNyw3ICsyNyw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb3NpdGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQXJ0aWZhY3Q7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQ29udHJpYnV0aW9uOwotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZTIuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoZWxsLlNoZWxsOwogCiAvKioKICAqIEEgQ29tcGxldG9yIHRoYXQgdXNlcyB0aGUgY29tcG9zaXRlIFVSSXMgd2l0aGluIGEgQ29udHJpYnV0aW9uCkBAIC0zNSwxNiArMzUsMTkgQEAKICAqLwogcHVibGljIGNsYXNzIENvbXBvc2l0ZVVSSUNvbXBsZXRvciBleHRlbmRzIFNpbXBsZUNvbXBsZXRvciB7CiAKLSAgICBwcml2YXRlIE5vZGUgbm9kZTsKKyAgICBwcml2YXRlIFNoZWxsIHNoZWxsOwogCi0gICAgcHVibGljIENvbXBvc2l0ZVVSSUNvbXBsZXRvcihOb2RlIG5vZGUpIHsKKyAgICBwdWJsaWMgQ29tcG9zaXRlVVJJQ29tcGxldG9yKFNoZWxsIHNoZWxsKSB7CiAgICAgICAgIHN1cGVyKCIiKTsKLSAgICAgICAgdGhpcy5ub2RlID0gbm9kZTsKKyAgICAgICAgdGhpcy5zaGVsbCA9IHNoZWxsOwogICAgIH0KICAgICAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGNvbXBsZXRlKGZpbmFsIFN0cmluZyBidWZmZXIsIGZpbmFsIGludCBjdXJzb3IsIGZpbmFsIExpc3QgY2xpc3QpIHsKLSAgICAgICBDb250cmlidXRpb24gYyA9IG5vZGUuZ2V0SW5zdGFsbGVkQ29udHJpYnV0aW9uKGdldENvbnRyaWJ1dGlvblVSSSgpKTsKKyAgICAgICAgaWYgKHNoZWxsLmdldE5vZGUoKSA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICBDb250cmlidXRpb24gYyA9IHNoZWxsLmdldE5vZGUoKS5nZXRJbnN0YWxsZWRDb250cmlidXRpb24oZ2V0Q29udHJpYnV0aW9uVVJJKCkpOwogICAgICAgIGlmIChjID09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KZGlmZiAtLWdpdCBhL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL0lDVVJJQ29tcGxldG9yLmphdmEgYi9tb2R1bGVzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zaGVsbC9qbGluZS9JQ1VSSUNvbXBsZXRvci5qYXZhCmluZGV4IGMwMjczMzIuLmIxOTdiYzkgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL0lDVVJJQ29tcGxldG9yLmphdmEKKysrIGIvbW9kdWxlcy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2hlbGwvamxpbmUvSUNVUklDb21wbGV0b3IuamF2YQpAQCAtMjMsMjQgKzIzLDI2IEBACiAKIGltcG9ydCBqbGluZS5TaW1wbGVDb21wbGV0b3I7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUyLk5vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGVsbC5TaGVsbDsKIAogLyoqCiAgKiBBbiBJbnN0YWxsZWQgQ29udHJpYnV0aW9uIFVSSSBDb21wbGV0b3IKICAqLwogcHVibGljIGNsYXNzIElDVVJJQ29tcGxldG9yIGV4dGVuZHMgU2ltcGxlQ29tcGxldG9yIHsKIAotICAgIHByaXZhdGUgTm9kZSBub2RlOworICAgIHByaXZhdGUgU2hlbGwgc2hlbGw7CiAKLSAgICBwdWJsaWMgSUNVUklDb21wbGV0b3IoTm9kZSBub2RlKSB7CisgICAgcHVibGljIElDVVJJQ29tcGxldG9yKFNoZWxsIHNoZWxsKSB7CiAgICAgICAgIHN1cGVyKCIiKTsKLSAgICAgICAgdGhpcy5ub2RlID0gbm9kZTsKKyAgICAgICAgdGhpcy5zaGVsbCA9IHNoZWxsOwogICAgIH0KICAgICAKICAgICBAT3ZlcnJpZGUKICAgICBwdWJsaWMgaW50IGNvbXBsZXRlKGZpbmFsIFN0cmluZyBidWZmZXIsIGZpbmFsIGludCBjdXJzb3IsIGZpbmFsIExpc3QgY2xpc3QpIHsKLSAgICAgICBMaXN0PFN0cmluZz4gaWNzID0gbm9kZS5nZXRJbnN0YWxsZWRDb250cmlidXRpb25zKCk7Ci0gICAgICAgc2V0Q2FuZGlkYXRlU3RyaW5ncyhpY3MudG9BcnJheShuZXcgU3RyaW5nW2ljcy5zaXplKCldKSk7CisgICAgICAgIGlmIChzaGVsbC5nZXROb2RlKCkgIT0gbnVsbCkgeworICAgICAgICAgICAgTGlzdDxTdHJpbmc+IGljcyA9IHNoZWxsLmdldE5vZGUoKS5nZXRJbnN0YWxsZWRDb250cmlidXRpb25zKCk7CisgICAgICAgICAgICBzZXRDYW5kaWRhdGVTdHJpbmdzKGljcy50b0FycmF5KG5ldyBTdHJpbmdbaWNzLnNpemUoKV0pKTsKKyAgICAgICAgfQogICAgICAgIHJldHVybiBzdXBlci5jb21wbGV0ZShidWZmZXIsIGN1cnNvciwgY2xpc3QpOyAgIAogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL0luc3RhbGxDb21wbGV0b3IuamF2YSBiL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL0luc3RhbGxDb21wbGV0b3IuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjE1ZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2hlbGwvamxpbmUvSW5zdGFsbENvbXBsZXRvci5qYXZhCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hlbGwuamxpbmU7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqbGluZS5GaWxlTmFtZUNvbXBsZXRvcjsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hlbGwuU2hlbGw7CisKKy8qKgorICogQSBDb21wbGV0b3IgZm9yIHRoZSBpbnN0YWxsIGNvbW1hbmQuCisgKiBUaGUgY29tbWFuZCBmb3JtYXQgaXM6IGluc3RhbGwgWzx1cmk+XSA8Y29udHJpYnV0aW9uVVJMPiBbLXN0YXJ0XSBbLW1ldGFkYXRhIDx1cmw+XSBbLWR1cmlzIDx1cmksdXJpLC4uLj5dCisgKiAKKyAqIFRPRE86IGRvZXNuJ3Qgc2VlbSB0byBjb21wbGV0ZSB0aGUgLXh4eCBwYXJhbWV0ZXJzIHByb3Blcmx5IHlldAorICogCisgKi8KK3B1YmxpYyBjbGFzcyBJbnN0YWxsQ29tcGxldG9yIGV4dGVuZHMgRmlsZU5hbWVDb21wbGV0b3IgeworCisgICAgSUNVUklDb21wbGV0b3IgaWN1cmlDb21wbGV0b3I7CisgICAgCisgICAgcHVibGljIEluc3RhbGxDb21wbGV0b3IoU2hlbGwgc2hlbGwpIHsKKyAgICAgICAgaWN1cmlDb21wbGV0b3IgPSBuZXcgSUNVUklDb21wbGV0b3Ioc2hlbGwpOworICAgIH0KKworICAgIHB1YmxpYyBpbnQgY29tcGxldGUoZmluYWwgU3RyaW5nIGJ1ZiwgZmluYWwgaW50IGN1cnNvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsIExpc3QgY2FuZGlkYXRlcykgeworCisvLyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJidWY6IiArIGJ1Zik7CisvLyAgICAgICAgU3lzdGVtLmVyci5wcmludGxuKCJjYW5kaWRhdGVzOiIgKyBjYW5kaWRhdGVzKTsKKworICAgICAgICBpZiAoIi1kdXJpcyIuZXF1YWxzKFRTaGVsbENvbXBsZXRvci5sYXN0QXJnKSkgeworICAgICAgICAgICAgcmV0dXJuIGljdXJpQ29tcGxldG9yLmNvbXBsZXRlKGJ1ZiwgY3Vyc29yLCBjYW5kaWRhdGVzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIi1tZXRhZGF0YSIuZXF1YWxzKFRTaGVsbENvbXBsZXRvci5sYXN0QXJnKSkgeworICAgICAgICAgICAgcmV0dXJuIHN1cGVyLmNvbXBsZXRlKGJ1ZiwgY3Vyc29yLCBjYW5kaWRhdGVzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHN1cGVyLmNvbXBsZXRlKGJ1ZiwgY3Vyc29yLCBjYW5kaWRhdGVzKTsKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGludCBtYXRjaEZpbGVzKFN0cmluZyBidWZmZXIsIFN0cmluZyB0cmFuc2xhdGVkLCBGaWxlW10gZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBjYW5kaWRhdGVzKSB7CisgICAgICAgIGlmIChlbnRyaWVzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBtYXRjaGVzID0gMDsKKworICAgICAgICAvLyBmaXJzdCBwYXNzOiBqdXN0IGNvdW50IHRoZSBtYXRjaGVzCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKGVudHJpZXNbaV0uZ2V0QWJzb2x1dGVQYXRoKCkuc3RhcnRzV2l0aCh0cmFuc2xhdGVkKSkgeworICAgICAgICAgICAgICAgIG1hdGNoZXMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIi1tZXRhZGF0YSIuc3RhcnRzV2l0aChidWZmZXIpKSB7CisgICAgICAgICAgICBtYXRjaGVzKys7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCItZHVyaXMiLnN0YXJ0c1dpdGgoYnVmZmVyKSkgeworICAgICAgICAgICAgbWF0Y2hlcysrOworICAgICAgICB9CisgICAgICAgIGlmICgiLXN0YXJ0Ii5zdGFydHNXaXRoKGJ1ZmZlcikpIHsKKyAgICAgICAgICAgIG1hdGNoZXMrKzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGdyZWVuIC0gZXhlY3V0YWJsZQorICAgICAgICAvLyBibHVlIC0gZGlyZWN0b3J5CisgICAgICAgIC8vIHJlZCAtIGNvbXByZXNzZWQKKyAgICAgICAgLy8gY3lhbiAtIHN5bWxpbmsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoZW50cmllc1tpXS5nZXRBYnNvbHV0ZVBhdGgoKS5zdGFydHNXaXRoKHRyYW5zbGF0ZWQpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPQorICAgICAgICAgICAgICAgICAgICBlbnRyaWVzW2ldLmdldE5hbWUoKQorICAgICAgICAgICAgICAgICAgICArICgoKG1hdGNoZXMgPT0gMSkgJiYgZW50cmllc1tpXS5pc0RpcmVjdG9yeSgpKQorICAgICAgICAgICAgICAgICAgICAgICA/IEZpbGUuc2VwYXJhdG9yIDogIiAiKTsKKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgaWYgKGVudHJpZXMgW2ldLmlzRGlyZWN0b3J5ICgpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuZXcgQU5TSUJ1ZmZlciAoKS5ibHVlIChuYW1lKS50b1N0cmluZyAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFkZChuYW1lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmICgiLW1ldGFkYXRhIi5zdGFydHNXaXRoKGJ1ZmZlcikgJiYgIVRTaGVsbENvbXBsZXRvci5hbGxBcmdzLmNvbnRhaW5zKCItbWV0YWRhdGEiKSkgeworICAgICAgICAgICAgY2FuZGlkYXRlcy5hZGQoIi1tZXRhZGF0YSIgKyAobWF0Y2hlcyA9PSAxID8gIiAiIDogIiIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIi1kdXJpcyIuc3RhcnRzV2l0aChidWZmZXIpICYmICFUU2hlbGxDb21wbGV0b3IuYWxsQXJncy5jb250YWlucygiLWR1cmlzIikpIHsKKyAgICAgICAgICAgIGNhbmRpZGF0ZXMuYWRkKCItZHVyaXMiICsgKG1hdGNoZXMgPT0gMSA/ICIgIiA6ICIiKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCItc3RhcnQiLnN0YXJ0c1dpdGgoYnVmZmVyKSAmJiAhVFNoZWxsQ29tcGxldG9yLmFsbEFyZ3MuY29udGFpbnMoIi1zdGFydCIpKSB7CisgICAgICAgICAgICBjYW5kaWRhdGVzLmFkZCgiLXN0YXJ0IiArIChtYXRjaGVzID09IDEgPyAiICIgOiAiIikpOworICAgICAgICB9CisKKyAgICAgICAgZmluYWwgaW50IGluZGV4ID0gYnVmZmVyLmxhc3RJbmRleE9mKEZpbGUuc2VwYXJhdG9yKTsKKworICAgICAgICBpbnQgeD0gaW5kZXggKyBGaWxlLnNlcGFyYXRvci5sZW5ndGgoKTsKKy8vICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIng9Iit4KTsKKyAgICAgICAgcmV0dXJuIHg7CisvLyAgICAgICAgcmV0dXJuIGluZGV4ICsgRmlsZS5zZXBhcmF0b3IubGVuZ3RoKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbW9kdWxlcy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2hlbGwvamxpbmUvSkxpbmUuamF2YSBiL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL0pMaW5lLmphdmEKaW5kZXggM2FjZjY5Yi4uZThmY2Q2MiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9zaGVsbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2hlbGwvamxpbmUvSkxpbmUuamF2YQorKysgYi9tb2R1bGVzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zaGVsbC9qbGluZS9KTGluZS5qYXZhCkBAIC0yNiwxMyArMjYsOSBAQAogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwogaW1wb3J0IGphdmEudXRpbC5MaXN0OwogCi1pbXBvcnQgamxpbmUuQXJndW1lbnRDb21wbGV0b3I7CiBpbXBvcnQgamxpbmUuQ29tcGxldG9yOwogaW1wb3J0IGpsaW5lLkNvbnNvbGVSZWFkZXI7Ci1pbXBvcnQgamxpbmUuRmlsZU5hbWVDb21wbGV0b3I7Ci1pbXBvcnQgamxpbmUuU2ltcGxlQ29tcGxldG9yOwogCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkFjdGl2YXRpb25FeGNlcHRpb247CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGVsbC5TaGVsbDsKIAogLyoqCkBAIC01MSwxMSArNDcsNyBAQAogICAgICAgICAvLyBBZGQgYSBDdHJsLWMgbGlzdGVuZXIKICAgICAgICAgcmVhZGVyLmFkZFRyaWdnZXJlZEFjdGlvbigoY2hhcikzLCBuZXcgQWN0aW9uTGlzdGVuZXIoKSB7CiAgICAgICAgICAgICBwdWJsaWMgdm9pZCBhY3Rpb25QZXJmb3JtZWQoQWN0aW9uRXZlbnQgZSkgewotICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHNoZWxsLnN0b3AobnVsbCk7Ci0gICAgICAgICAgICAgICAgfSBjYXRjaCAoQWN0aXZhdGlvbkV4Y2VwdGlvbiBlMSkgewotICAgICAgICAgICAgICAgICAgICBlMS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc2hlbGwuYnllKCk7CiAgICAgICAgICAgICAgICAgU3lzdGVtLmV4aXQoMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwpAQCAtNjYsNyArNTgsNyBAQAogLy8gICAgICAgIGNvbXBsZXRvcnMuYWRkKG5ldyBJQ1VSSUNvbXBsZXRvcihzaGVsbC5ub2RlKSk7CiAvLyAgICAgICAgY29tcGxldG9ycy5hZGQobmV3IEZpbGVOYW1lQ29tcGxldG9yKCkpOwogLy8gICAgICAgIHJlYWRlci5hZGRDb21wbGV0b3IobmV3IEFyZ3VtZW50Q29tcGxldG9yKGNvbXBsZXRvcnMpKTsKLSAgICAgICAgcmVhZGVyLmFkZENvbXBsZXRvcihuZXcgVFNoZWxsQ29tcGxldG9yKHNoZWxsLm5vZGUpKTsKKyAgICAgICAgcmVhZGVyLmFkZENvbXBsZXRvcihuZXcgVFNoZWxsQ29tcGxldG9yKHNoZWxsKSk7CiAgICAgICAgIHJldHVybiByZWFkZXI7CiAgICAgfQogCmRpZmYgLS1naXQgYS9tb2R1bGVzL3NoZWxsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zaGVsbC9qbGluZS9UU2hlbGxDb21wbGV0b3IuamF2YSBiL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL1RTaGVsbENvbXBsZXRvci5qYXZhCmluZGV4IGFkNmZiNzQuLjgzZDI5MmEgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL1RTaGVsbENvbXBsZXRvci5qYXZhCisrKyBiL21vZHVsZXMvc2hlbGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NoZWxsL2psaW5lL1RTaGVsbENvbXBsZXRvci5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiAKIHBhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGVsbC5qbGluZTsKIAoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CkBAIC0zMSw3ICszMiw2IEBACiBpbXBvcnQgamxpbmUuTnVsbENvbXBsZXRvcjsKIGltcG9ydCBqbGluZS5TaW1wbGVDb21wbGV0b3I7CiAKLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUyLk5vZGU7CiBpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGVsbC5TaGVsbDsKIAogLyoqCkBAIC00MywyNCArNDMsMjUgQEAKICAgICBNYXA8U3RyaW5nLCBDb21wbGV0b3JbXT4gY29tcGxldG9yczsKICAgICBmaW5hbCBDb21wbGV0b3IgY29tbWFuZENvbXBsZXRvciA9IG5ldyBTaW1wbGVDb21wbGV0b3IoU2hlbGwuQ09NTUFORFMpOwogICAgIGZpbmFsIEFyZ3VtZW50RGVsaW1pdGVyIGRlbGltID0gbmV3IFdoaXRlc3BhY2VBcmd1bWVudERlbGltaXRlcigpOwotICAgIGZpbmFsIE5vZGUgbm9kZTsKKyAgICBmaW5hbCBTaGVsbCBzaGVsbDsKICAgICAKICAgICBzdGF0aWMgU3RyaW5nIGxhc3RBcmc7CisgICAgc3RhdGljIExpc3Q8U3RyaW5nPiBhbGxBcmdzOwogCi0gICAgcHVibGljIFRTaGVsbENvbXBsZXRvcihOb2RlIG5vZGUpIHsKKyAgICBwdWJsaWMgVFNoZWxsQ29tcGxldG9yKFNoZWxsIHNoZWxsKSB7CiAgICAgICAgIHN1cGVyKChDb21wbGV0b3IpbnVsbCk7Ci0gICAgICAgIHRoaXMubm9kZSA9IG5vZGU7CisgICAgICAgIHRoaXMuc2hlbGwgPSBzaGVsbDsKICAgICAgICAgY29tcGxldG9ycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgQ29tcGxldG9yW10+KCk7CiAgICAgICAgIGNvbXBsZXRvcnMucHV0KCJoZWxwIiwgbmV3IENvbXBsZXRvcltde2NvbW1hbmRDb21wbGV0b3IsIGNvbW1hbmRDb21wbGV0b3IsIG5ldyBOdWxsQ29tcGxldG9yKCl9KTsgICAgCi0vLyAgICAgICAgY29tcGxldG9ycy5wdXQoImluc3RhbGwiLCBuZXcgQ29tcGxldG9yW117Y29tbWFuZENvbXBsZXRvciwgbmV3IEluc3RhbGxDb21wbGV0b3IoKSwgbmV3IE51bGxDb21wbGV0b3IoKX0pOyAgICAKLSAgICAgICAgY29tcGxldG9ycy5wdXQoImluc3RhbGwiLCBuZXcgQ29tcGxldG9yW117Y29tbWFuZENvbXBsZXRvciwgbmV3IEZpbGVOYW1lQ29tcGxldG9yKCksIG5ldyBGaWxlTmFtZUNvbXBsZXRvcigpLCBuZXcgTnVsbENvbXBsZXRvcigpfSk7ICAgIAotICAgICAgICBjb21wbGV0b3JzLnB1dCgiaW5zdGFsbGVkIiwgbmV3IENvbXBsZXRvcltde2NvbW1hbmRDb21wbGV0b3IsIG5ldyBJQ1VSSUNvbXBsZXRvcihub2RlKSwgbmV3IE51bGxDb21wbGV0b3IoKX0pOyAgICAKLSAgICAgICAgY29tcGxldG9ycy5wdXQoInJlbW92ZSIsIG5ldyBDb21wbGV0b3JbXXtjb21tYW5kQ29tcGxldG9yLCBuZXcgSUNVUklDb21wbGV0b3Iobm9kZSksIG5ldyBOdWxsQ29tcGxldG9yKCl9KTsgICAgCi0gICAgICAgIGNvbXBsZXRvcnMucHV0KCJhZGREZXBsb3ltZW50Q29tcG9zaXRlIiwgbmV3IENvbXBsZXRvcltde2NvbW1hbmRDb21wbGV0b3IsIG5ldyBJQ1VSSUNvbXBsZXRvcihub2RlKSwgbmV3IEZpbGVOYW1lQ29tcGxldG9yKCksIG5ldyBOdWxsQ29tcGxldG9yKCl9KTsgICAgCi0gICAgICAgIGNvbXBsZXRvcnMucHV0KCJwcmludERvbWFpbkxldmVsQ29tcG9zaXRlIiwgbmV3IENvbXBsZXRvcltde2NvbW1hbmRDb21wbGV0b3IsIG5ldyBOdWxsQ29tcGxldG9yKCl9KTsgICAgCi0gICAgICAgIGNvbXBsZXRvcnMucHV0KCJzdGFydCIsIG5ldyBDb21wbGV0b3JbXXtjb21tYW5kQ29tcGxldG9yLCBuZXcgSUNVUklDb21wbGV0b3Iobm9kZSksIG5ldyBDb21wb3NpdGVVUklDb21wbGV0b3Iobm9kZSksIG5ldyBOdWxsQ29tcGxldG9yKCl9KTsgICAgCi0gICAgICAgIGNvbXBsZXRvcnMucHV0KCJzdGF0dXMiLCBuZXcgQ29tcGxldG9yW117Y29tbWFuZENvbXBsZXRvciwgbmV3IElDVVJJQ29tcGxldG9yKG5vZGUpLCBuZXcgQ29tcG9zaXRlVVJJQ29tcGxldG9yKG5vZGUpLCBuZXcgTnVsbENvbXBsZXRvcigpfSk7ICAgIAotICAgICAgICBjb21wbGV0b3JzLnB1dCgic3RvcCIsIG5ldyBDb21wbGV0b3JbXXtjb21tYW5kQ29tcGxldG9yLCBuZXcgSUNVUklDb21wbGV0b3Iobm9kZSksIG5ldyBDb21wb3NpdGVVUklDb21wbGV0b3Iobm9kZSksIG5ldyBOdWxsQ29tcGxldG9yKCl9KTsgICAgCisgICAgICAgIGNvbXBsZXRvcnMucHV0KCJpbnN0YWxsIiwgbmV3IENvbXBsZXRvcltde2NvbW1hbmRDb21wbGV0b3IsIG5ldyBJbnN0YWxsQ29tcGxldG9yKHNoZWxsKX0pOyAgICAKKyAgICAgICAgY29tcGxldG9ycy5wdXQoImluc3RhbGxlZCIsIG5ldyBDb21wbGV0b3JbXXtjb21tYW5kQ29tcGxldG9yLCBuZXcgSUNVUklDb21wbGV0b3Ioc2hlbGwpLCBuZXcgTnVsbENvbXBsZXRvcigpfSk7ICAgIAorICAgICAgICBjb21wbGV0b3JzLnB1dCgibG9hZCIsIG5ldyBDb21wbGV0b3JbXXtjb21tYW5kQ29tcGxldG9yLCBuZXcgRmlsZU5hbWVDb21wbGV0b3IoKSwgbmV3IE51bGxDb21wbGV0b3IoKX0pOyAgICAKKyAgICAgICAgY29tcGxldG9ycy5wdXQoInJlbW92ZSIsIG5ldyBDb21wbGV0b3JbXXtjb21tYW5kQ29tcGxldG9yLCBuZXcgSUNVUklDb21wbGV0b3Ioc2hlbGwpLCBuZXcgTnVsbENvbXBsZXRvcigpfSk7ICAgIAorICAgICAgICBjb21wbGV0b3JzLnB1dCgicnVuIiwgbmV3IENvbXBsZXRvcltde2NvbW1hbmRDb21wbGV0b3IsIG5ldyBGaWxlTmFtZUNvbXBsZXRvcigpLCBuZXcgTnVsbENvbXBsZXRvcigpfSk7ICAgIAorICAgICAgICBjb21wbGV0b3JzLnB1dCgic2F2ZSIsIG5ldyBDb21wbGV0b3JbXXtjb21tYW5kQ29tcGxldG9yLCBuZXcgRmlsZU5hbWVDb21wbGV0b3IoKSwgbmV3IE51bGxDb21wbGV0b3IoKX0pOyAgICAKKyAgICAgICAgY29tcGxldG9ycy5wdXQoInN0YXJ0IiwgbmV3IENvbXBsZXRvcltde2NvbW1hbmRDb21wbGV0b3IsIG5ldyBJQ1VSSUNvbXBsZXRvcihzaGVsbCksIG5ldyBDb21wb3NpdGVVUklDb21wbGV0b3Ioc2hlbGwpLCBuZXcgTnVsbENvbXBsZXRvcigpfSk7ICAgIAorICAgICAgICBjb21wbGV0b3JzLnB1dCgic3RhdHVzIiwgbmV3IENvbXBsZXRvcltde2NvbW1hbmRDb21wbGV0b3IsIG5ldyBJQ1VSSUNvbXBsZXRvcihzaGVsbCksIG5ldyBDb21wb3NpdGVVUklDb21wbGV0b3Ioc2hlbGwpLCBuZXcgTnVsbENvbXBsZXRvcigpfSk7ICAgIAorICAgICAgICBjb21wbGV0b3JzLnB1dCgic3RvcCIsIG5ldyBDb21wbGV0b3JbXXtjb21tYW5kQ29tcGxldG9yLCBuZXcgSUNVUklDb21wbGV0b3Ioc2hlbGwpLCBuZXcgQ29tcG9zaXRlVVJJQ29tcGxldG9yKHNoZWxsKSwgbmV3IE51bGxDb21wbGV0b3IoKX0pOyAgICAKICAgICB9CiAKICAgICBAT3ZlcnJpZGUKQEAgLTcwLDYgKzcxLDcgQEAKICAgICAgKi8KICAgICBwdWJsaWMgaW50IGNvbXBsZXRlKGZpbmFsIFN0cmluZyBidWZmZXIsIGZpbmFsIGludCBjdXJzb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbCBMaXN0IGNhbmRpZGF0ZXMpIHsKKyAgICAgICAgCiAgICAgICAgIEFyZ3VtZW50TGlzdCBsaXN0ID0gZGVsaW0uZGVsaW1pdChidWZmZXIsIGN1cnNvcik7CiAgICAgICAgIGludCBhcmdwb3MgPSBsaXN0LmdldEFyZ3VtZW50UG9zaXRpb24oKTsKICAgICAgICAgaW50IGFyZ0luZGV4ID0gbGlzdC5nZXRDdXJzb3JBcmd1bWVudEluZGV4KCk7CkBAIC04Myw2ICs4NSw3IEBACiAgICAgICAgICAgICBsYXN0QXJnID0gbGlzdC5nZXRBcmd1bWVudHMoKVthcmdJbmRleC0xXTsKICAgICAgICAgICAgIGlmIChsYXN0QXJnICE9IG51bGwpIGxhc3RBcmcgPSBsYXN0QXJnLnRyaW0oKTsKICAgICAgICAgfQorICAgICAgICBhbGxBcmdzID0gQXJyYXlzLmFzTGlzdChsaXN0LmdldEFyZ3VtZW50cygpKTsKICAgICAgICAgCiAgICAgICAgIGZpbmFsIENvbXBsZXRvciBjb21wOwogICAgICAgICAKZGlmZiAtLWdpdCBhL21vZHVsZXMvc3RyaXBlcy9wb20ueG1sIGIvbW9kdWxlcy9zdHJpcGVzL3BvbS54bWwKaW5kZXggYjI2YjQ5OC4uNTk5MGIxZiAxMDA2NDQKLS0tIGEvbW9kdWxlcy9zdHJpcGVzL3BvbS54bWwKKysrIGIvbW9kdWxlcy9zdHJpcGVzL3BvbS54bWwKQEAgLTM1LDE3ICszNSwyMCBAQAogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC13ZWJhcHA8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIDxkZXBlbmRlbmN5PgogICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24td2ViLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgogICAgICAgICA8L2RlcGVuZGVuY3k+CiAgICAgICAgIAogICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5zdHJpcGVzPC9ncm91cElkPgogICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RyaXBlczwvYXJ0aWZhY3RJZD4KICAgICAgICAgICAgIDx2ZXJzaW9uPjEuNS4yPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KICAgICAgICAgPC9kZXBlbmRlbmN5PgogICAgICAgIAogICAgICAgICA8ZGVwZW5kZW5jeT4KZGlmZiAtLWdpdCBhL21vZHVsZXMvd2ViLWphdmFzY3JpcHQtZG9qby9zcmMvbWFpbi9yZXNvdXJjZXMvdHVzY2FueS9SZXN0U2VydmljZS5qcyBiL21vZHVsZXMvd2ViLWphdmFzY3JpcHQtZG9qby9zcmMvbWFpbi9yZXNvdXJjZXMvdHVzY2FueS9SZXN0U2VydmljZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzJiOTMwCi0tLSAvZGV2L251bGwKKysrIGIvbW9kdWxlcy93ZWItamF2YXNjcmlwdC1kb2pvL3NyYy9tYWluL3Jlc291cmNlcy90dXNjYW55L1Jlc3RTZXJ2aWNlLmpzCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworZG9qby5wcm92aWRlKCJ0dXNjYW55LlJlc3RTZXJ2aWNlIik7Citkb2pvLmRlY2xhcmUoInR1c2NhbnkuUmVzdFNlcnZpY2UiLCBudWxsLCB7CisgICB1cmw6bnVsbCwKKyAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veG1sIiAvKmFwcGxpY2F0aW9uL2pzb24qLywgCisgICBjb250ZW50SGFuZGxlcjogInhtbCIgLypqc29uKi8sCisgICAKKyAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbihhcmdzKXsKKwkJLy9zdW1tYXJ5OgorCQkvL3VybCA6IFRha2UgYSBzdHJpbmcgYXMgYSB1cmwgdGhhdCBwb2ludHMgdG8gdGhlIHJlc3QgZW5kcG9pbnQKKwkJLy9jb250ZW50VHlwZSA6IFRha2UgdGhlIGNvbnRlbnRUeXBlIHRvIHVzZSB3aGVuIHJldHJpZXZpbmcgdGhlIHJlc3QgZW5kcG9pbnQJCQkJCisKKwkJaWYoYXJncyl7CisJCSAgICB2YXIgYXJnVXJsOworCQkgICAgdmFyIGFyZ0NvbnRlbnRUeXBlOworCQkgICAgCisJCSAgICBpZiggZG9qby5pc0FycmF5KGFyZ3MpICkgeworCQkgICAgICAgYXJnVXJsID0gYXJnc1swXTsKKwkJICAgICAgIGFyZ0NvbnRlbnRUeXBlID0gYXJnc1sxXTsKKwkJICAgIH0gZWxzZSB7CisJCSAgICAgICBhcmdVcmwgPSBhcmdzOworCQkgICAgfQorCQkgICAgCisJCQkvL2lmIHRoZSBhcmcgaXMgYSBzdHJpbmcsIHdlIGFzc3VtZSBpdCBpcyBhIHVybCB0byB0aGUgYXRvbSBmZWVkCisJCQlpZiggKGRvam8uaXNTdHJpbmcoYXJnVXJsKSkgfHwgKGFyZ1VybCBpbnN0YW5jZW9mIGRvam8uX1VybCkpeworCQkJCWlmIChhcmdVcmwgaW5zdGFuY2VvZiBkb2pvLl9VcmwpeworCQkJCQl0aGlzLnVybCA9IGFyZ1VybCArICIiOworCQkJCX1lbHNleworCQkJCQl0aGlzLnVybCA9IGFyZ1VybDsKKwkJCQl9CisJCQl9CisJCQkKKwkJCWlmKGFyZ0NvbnRlbnRUeXBlKSB7CisJCQkgICBpZihkb2pvLmlzU3RyaW5nKGFyZ0NvbnRlbnRUeXBlKSkgeworCQkJICAgICAgaWYgKGFyZ0NvbnRlbnRUeXBlID09ICJhcHBsaWNhdGlvbi94bWwiKSB7CisJCQkgICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBhcmdDb250ZW50VHlwZTsKKwkJCSAgICAgIAl0aGlzLmNvbnRlbnRIYW5kbGVyID0gInhtbCI7CisJCQkgICAgICB9IGVsc2UgaWYgKGFyZ0NvbnRlbnRUeXBlID09ICJhcHBsaWNhdGlvbi9qc29uIikgeworCQkJICAgICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYXJnQ29udGVudFR5cGU7CisJCQkgICAgICAgIHRoaXMuY29udGVudEhhbmRsZXIgPSAianNvbiI7CisJCQkgICAgICB9CisJCQkgICB9CisJCQl9CisJCX0KKwl9LAorCQorCWdldDogZnVuY3Rpb24oaWQgLypzdHJpbmcqLykgeworCQkvL1RoZSBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8geGhyR2V0LCB0aGUgdXJsLCBob3cgdG8gaGFuZGxlIGl0LCBhbmQgdGhlIGNhbGxiYWNrcy4KKwkJdmFyIHhockFyZ3MgPSB7CisgICAgICAJCXVybDogdGhpcy51cmwgKyAiLyIgKyBpZCwKKyAgICAgIAkJaGFuZGxlQXM6IHRoaXMuY29udGVudEhhbmRsZXIsCisgICAgICAJCWhlYWRlcnM6IHsiQWNjZXB0IjogdGhpcy5jb250ZW50VHlwZX0KKyAgICAJfTsKKwkKKwkJLy9DYWxsIHRoZSBhc3luY2hyb25vdXMgeGhyR2V0CisgICAgICAgIHZhciBkZWZlcnJlZCA9IGRvam8ueGhyR2V0KHhockFyZ3MpOworICAgICAgICAKKyAgICAgICAgZGVmZXJyZWQuYWRkRXJyYmFjayhmdW5jdGlvbihlcnJvcil7CisgICAgICAJCWFsZXJ0KCJBbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkOiAiICsgZXJyb3IpOworICAgIAl9KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBkZWZlcnJlZDsgICAgICAgIAkKKwl9LAorCQorCQorCXBvc3Q6IGZ1bmN0aW9uKCBlbnRyeSAvKmVudHJ5IG9iamVjdCovKSB7CisJCS8vVGhlIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB4aHJHZXQsIHRoZSB1cmwsIGhvdyB0byBoYW5kbGUgaXQsIGFuZCB0aGUgY2FsbGJhY2tzLgorCQl2YXIgeGhyQXJncyA9IHsKKyAgICAgIAkJdXJsOiB0aGlzLnVybCwKKyAgICAgIAkJaGFuZGxlQXM6IHRoaXMuY29udGVudEhhbmRsZXIsCisgICAgICAJCWhlYWRlcnM6IHsiQWNjZXB0IjogdGhpcy5jb250ZW50VHlwZSwKKyAgICAgIAkJICAgICAgICAgICJDb250ZW50LVR5cGUiOiB0aGlzLmNvbnRlbnRUeXBlfSwKKyAgICAgIAkJcG9zdERhdGE6IGVudHJ5CisgICAgCX07CisJCisJCS8vQ2FsbCB0aGUgYXN5bmNocm9ub3VzIHhockdldAorICAgICAgICB2YXIgZGVmZXJyZWQgPSBkb2pvLnhoclBvc3QoeGhyQXJncyk7CisgICAgICAgIAorICAgICAgICBkZWZlcnJlZC5hZGRFcnJiYWNrKGZ1bmN0aW9uKGVycm9yKXsKKyAgICAgIAkJYWxlcnQoIkFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQ6ICIgKyBlcnJvcik7CisgICAgCX0pOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGRlZmVycmVkOyAgICAgICAgCQkJCisJfSwKKworCXB1dDogZnVuY3Rpb24oaWQgLypzdHJpbmcqLywgZW50cnkgLyplbnRyeSBvYmplY3QqLykgeworCQkvL1RoZSBwYXJhbWV0ZXJzIHRvIHBhc3MgdG8geGhyR2V0LCB0aGUgdXJsLCBob3cgdG8gaGFuZGxlIGl0LCBhbmQgdGhlIGNhbGxiYWNrcy4KKwkJdmFyIHhockFyZ3MgPSB7CisgICAgICAJCXVybDogdGhpcy51cmwgKyAiLyIgKyBpZCwKKyAgICAgIAkJaGFuZGxlQXM6IHRoaXMuY29udGVudEhhbmRsZXIsCisgICAgICAJCWhlYWRlcnM6IHsiQWNjZXB0IjogdGhpcy5jb250ZW50VHlwZSwKKyAgICAgIAkJICAgICAgICAgICJDb250ZW50LVR5cGUiOiB0aGlzLmNvbnRlbnRUeXBlfSwKKyAgICAgIAkJcG9zdERhdGE6IGVudHJ5CisgICAgCX07CisJCisJCS8vQ2FsbCB0aGUgYXN5bmNocm9ub3VzIHhockdldAorICAgICAgICB2YXIgZGVmZXJyZWQgPSBkb2pvLnhoclB1dCh4aHJBcmdzKTsKKyAgICAgICAgCisgICAgICAgIGRlZmVycmVkLmFkZEVycmJhY2soZnVuY3Rpb24oZXJyb3IpeworICAgICAgCQlhbGVydCgiQW4gdW5leHBlY3RlZCBlcnJvciBvY2N1cnJlZDogIiArIGVycm9yKTsKKyAgICAJfSk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gZGVmZXJyZWQ7ICAgICAgICAJCQorCX0sCisJCisJZGVsOiBmdW5jdGlvbihpZCAvKnN0cmluZyovKSB7CisJCS8vVGhlIHBhcmFtZXRlcnMgdG8gcGFzcyB0byB4aHJHZXQsIHRoZSB1cmwsIGhvdyB0byBoYW5kbGUgaXQsIGFuZCB0aGUgY2FsbGJhY2tzLgorCQl2YXIgeGhyQXJncyA9IHsKKyAgICAgIAkJdXJsOiB0aGlzLnVybCArICIvIiArIGlkLAorICAgICAgCQloYW5kbGVBczogdGhpcy5jb250ZW50SGFuZGxlciwKKyAgICAgIAkJaGVhZGVyczogeyJBY2NlcHQiOiB0aGlzLmNvbnRlbnRUeXBlfQorICAgIAl9OworCQorCQkvL0NhbGwgdGhlIGFzeW5jaHJvbm91cyB4aHJHZXQKKyAgICAgICAgdmFyIGRlZmVycmVkID0gZG9qby54aHJEZWxldGUoeGhyQXJncyk7CisgICAgICAgIAorICAgICAgICBkZWZlcnJlZC5hZGRFcnJiYWNrKGZ1bmN0aW9uKGVycm9yKXsKKyAgICAgIAkJYWxlcnQoIkFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQ6ICIgKyBlcnJvcik7CisgICAgCX0pOworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIHJldHVybiBkZWZlcnJlZDsgICAgICAgIAkJCisJfQkKK30pOwpkaWZmIC0tZ2l0IGEvbW9kdWxlcy93aW5rL01FVEEtSU5GL01BTklGRVNULk1GIGIvbW9kdWxlcy93aW5rL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDNlNmM5MmQuLjE3YmVmMjYgMTAwNjQ0Ci0tLSBhL21vZHVsZXMvd2luay9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9tb2R1bGVzL3dpbmsvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTcsMTEgKzcsMTEgQEAKIEJ1bmRsZS1MaWNlbnNlOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAudHh0DQogQnVuZGxlLURlc2NyaXB0aW9uOiBBcGFjaGUgVHVzY2FueSBTQ0EgV2luaw0KIEltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0LA0KLSBvcmcuYXBhY2hlLndpbmsuY29tbW9uLA0KLSBvcmcuYXBhY2hlLndpbmsuY29tbW9uLmludGVybmFsLnJlZ2lzdHJ5LA0KLSBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmludGVybmFsLA0KLSBvcmcuYXBhY2hlLndpbmsuc2VydmVyLmludGVybmFsLnJlZ2lzdHJ5LA0KICBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLndlYi5ydW50aW1lLnV0aWxzO3ZlcnNpb249IjIuMCIsDQorIG9yZy5hcGFjaGUud2luay5jb21tb247dmVyc2lvbj0iMS4xLjEuaW5jdWJhdGluZyIsDQorIG9yZy5hcGFjaGUud2luay5jb21tb24uaW50ZXJuYWwucmVnaXN0cnk7dmVyc2lvbj0iMS4xLjEuaW5jdWJhdGluZyIsDQorIG9yZy5hcGFjaGUud2luay5zZXJ2ZXIuaW50ZXJuYWw7dmVyc2lvbj0iMS4xLjEuaW5jdWJhdGluZyIsDQorIG9yZy5hcGFjaGUud2luay5zZXJ2ZXIuaW50ZXJuYWwucmVnaXN0cnk7dmVyc2lvbj0iMS4xLjEuaW5jdWJhdGluZyIsDQogIG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb247dmVyc2lvbj0iMi4wIg0KIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eud2luaw0KIEJ1bmRsZS1Eb2NVUkw6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8NCmRpZmYgLS1naXQgYS9wb20ueG1sIGIvcG9tLnhtbAppbmRleCA3YWQ1ZTRiLi5mNWE2ZTI2IDEwMDY0NAotLS0gYS9wb20ueG1sCisrKyBiL3BvbS54bWwKQEAgLTIyLDcgKzIyLDcgQEAKICAgICA8cGFyZW50PgogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlPC9ncm91cElkPgogICAgICAgICA8YXJ0aWZhY3RJZD5hcGFjaGU8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjQ8L3ZlcnNpb24+CisgICAgICAgIDx2ZXJzaW9uPjc8L3ZlcnNpb24+CiAgICAgPC9wYXJlbnQ+CiAKICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+CkBAIC0yMTEsNiArMjExLDcgQEAKICAgICAgICAgPC9wbHVnaW5SZXBvc2l0b3J5PgogCiAgICAgICAgIDwhLS0gQ29kZWhhdXMgU05BUFNIT1QgcmVwb3NpdG9yeSAtLT4KKyAgICAgICAgPCEtLQogICAgICAgICA8cGx1Z2luUmVwb3NpdG9yeT4KICAgICAgICAgICAgIDxpZD5jb2RlaGF1cy1zbmFwc2hvdDwvaWQ+CiAgICAgICAgICAgICA8bmFtZT5Db2RlaGF1cyBTbmFwc2hvdCBSZXBvc2l0b3J5PC9uYW1lPgpAQCAtMjE5LDYgKzIyMCw3IEBACiAgICAgICAgICAgICAgICAgPGVuYWJsZWQ+dHJ1ZTwvZW5hYmxlZD4KICAgICAgICAgICAgIDwvc25hcHNob3RzPgogICAgICAgICA8L3BsdWdpblJlcG9zaXRvcnk+CisgICAgICAgIC0tPgogCiAgICAgICAgPCEtLSBNYXZlbiBjZW50cmFsIHJlcG9zaXRvcnkgLS0+CiAgICAgICAgPHBsdWdpblJlcG9zaXRvcnk+CkBAIC0yNzIsMTIgKzI3NCwxMSBAQAogICAgICAgICAgICAgICAgIDxtb2R1bGU+bWF2ZW4vbWF2ZW4tdHVzY2FueS1wbHVnaW48L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPm1vZHVsZXM8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPnNhbXBsZXM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPml0ZXN0PC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT50ZXN0aW5nL2l0ZXN0PC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5mZWF0dXJlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+c2hhZGVzPC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5kaXN0cmlidXRpb248L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmFyY2hldHlwZXM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNvbXBsaWFuY2UtdGVzdHM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPm1hdmVuL2FyY2hldHlwZXM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnRlc3RpbmcvY29tcGxpYW5jZS10ZXN0czwvbW9kdWxlPgogICAgICAgICAgICAgPC9tb2R1bGVzPgogICAgICAgICA8L3Byb2ZpbGU+CiAgICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4KQEAgLTI5OCwxMiArMjk5LDExIEBACiAgICAgICAgICAgICAgICAgPG1vZHVsZT5tYXZlbi9tYXZlbi10dXNjYW55LXBsdWdpbjwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+bW9kdWxlczwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+c2FtcGxlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+aXRlc3Q8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnRlc3RpbmcvaXRlc3Q8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPmZlYXR1cmVzPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5zaGFkZXM8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPmRpc3RyaWJ1dGlvbjwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+YXJjaGV0eXBlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+Y29tcGxpYW5jZS10ZXN0czwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+bWF2ZW4vYXJjaGV0eXBlczwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+dGVzdGluZy9jb21wbGlhbmNlLXRlc3RzPC9tb2R1bGU+CiAgICAgICAgICAgICA8L21vZHVsZXM+CiAgICAgICAgIDwvcHJvZmlsZT4KIApAQCAtMzE1LDcgKzMxNSw3IEBACiAgICAgICAgICAgICA8bW9kdWxlcz4KICAgICAgICAgICAgICAgICA8bW9kdWxlPm1vZHVsZXM8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPnNhbXBsZXM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPml0ZXN0PC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT50ZXN0aW5nL2l0ZXN0PC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5mZWF0dXJlczwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+ZGlzdHJpYnV0aW9uPC9tb2R1bGU+CiAgICAgICAgICAgICA8L21vZHVsZXM+CkBAIC0zNTMsNyArMzUzLDcgQEAKICAgICAgICAgICAgIDxtb2R1bGVzPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+bW9kdWxlczwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+c2FtcGxlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+aXRlc3Q8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnRlc3RpbmcvaXRlc3Q8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPmZlYXR1cmVzPC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5kaXN0cmlidXRpb248L21vZHVsZT4KICAgICAgICAgICAgIDwvbW9kdWxlcz4KQEAgLTM4OCwxMiArMzg4LDExIEBACiAgICAgICAgICAgICAgICAgPG1vZHVsZT5tYXZlbi9tYXZlbi10dXNjYW55LXBsdWdpbjwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+bW9kdWxlczwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+c2FtcGxlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+aXRlc3Q8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnRlc3RpbmcvaXRlc3Q8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPmZlYXR1cmVzPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5zaGFkZXM8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPmRpc3RyaWJ1dGlvbjwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+YXJjaGV0eXBlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+Y29tcGxpYW5jZS10ZXN0czwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+bWF2ZW4vYXJjaGV0eXBlczwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+dGVzdGluZy9jb21wbGlhbmNlLXRlc3RzPC9tb2R1bGU+CiAgICAgICAgICAgICA8L21vZHVsZXM+CiAgICAgICAgICAgIDxidWlsZD4KICAgICAgICAgICAgICAgPHBsdWdpbnM+CkBAIC00MDQsNyArNDAzLDcgQEAKICAgICAgICAgPHByb2ZpbGU+CiAgICAgICAgICAgICA8aWQ+Y29tcGxpYW5jZTwvaWQ+CiAgICAgICAgICAgICA8bW9kdWxlcz4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNvbXBsaWFuY2UtdGVzdHM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnRlc3RpbmcvY29tcGxpYW5jZS10ZXN0czwvbW9kdWxlPgogICAgICAgICAgICAgPC9tb2R1bGVzPgogICAgICAgICA8L3Byb2ZpbGU+CiAKQEAgLTQ4MCw5ICs0NzksOSBAQAogICAgICAgICAgICAgPGlkPmRlcGVuZGVuY2llczwvaWQ+CiAgICAgICAgICAgICA8bW9kdWxlcz4KICAgICAgICAgICAgICAgICA8bW9kdWxlPm1vZHVsZXM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8IS0tbW9kdWxlPnNhbXBsZXM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnNhbXBsZXM8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPnR1dG9yaWFsczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+ZGVtb3M8L21vZHVsZS0tPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+ZGVtb3M8L21vZHVsZT4KICAgICAgICAgICAgIDwvbW9kdWxlcz4KICAgICAgICAgICAgIDxidWlsZD4KICAgICAgICAgICAgICAgICA8cGx1Z2lucz4KQEAgLTUwNiw3ICs1MDUsNyBAQAogICAgICAgICA8cHJvZmlsZT4KICAgICAgICAgICAgIDxpZD5zZWN1cml0eTwvaWQ+CiAgICAgICAgICAgICA8bW9kdWxlcz4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPml0ZXN0PC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT50ZXN0aW5nL2l0ZXN0PC9tb2R1bGU+CiAgICAgICAgICAgICA8L21vZHVsZXM+CiAgICAgICAgICAgICA8YWN0aXZhdGlvbj4KICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CkBAIC01NjQsNiArNTYzLDExIEBACiAgICAgICAgICAgICA8L2J1aWxkPgogICAgICAgICA8L3Byb2ZpbGU+CiAKKyAgICAgICAgPCEtLQorICAgICAgICAgIHRvIHRlc3QgdGhpcyBwcm9maWxlIHlvdSBtYXkgbGlrZSB0byBydW4gbXZuIHdpdGggYXJndW1lbnRzIC4uLgorICAgICAgICAgIC1EYWx0RGVwbG95bWVudFJlcG9zaXRvcnk9aWQ6OmRlZmF1bHQ6OmZpbGU6dGFyZ2V0L2RlcGxveSAtUHJlbGVhc2UgLURncGcuc2tpcAorICAgICAgICAgIHRoZW4gbG9vayBpbiB0aGUgdGFyZ2V0L2RlcGxveSBkaXJlY3RvcnkgZm9yIGEgbG9jYWxseSBkZXBsb3llZCByZXBvc2l0b3J5IG9mIGFydGlmYWN0cyAKKyAgICAgICAgLS0+CiAgICAgICAgIDxwcm9maWxlPgogICAgICAgICAgICAgPGlkPnJlbGVhc2U8L2lkPgogICAgICAgICAgICAgPHByb3BlcnRpZXM+CkBAIC01NzMsMTYgKzU3NywxNCBAQAogICAgICAgICAgICAgPG1vZHVsZXM+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5tYXZlbi9tYXZlbi10dXNjYW55LXBsdWdpbjwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+bW9kdWxlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+c2hhZGVzPC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5mZWF0dXJlczwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+ZGlzdHJpYnV0aW9uPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5hcmNoZXR5cGVzPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5tYXZlbi9hcmNoZXR5cGVzPC9tb2R1bGU+CiAgICAgICAgICAgICA8L21vZHVsZXM+CiAgICAgICAgICAgIDxidWlsZD4KICAgICAgICAgICAgICAgPGRlZmF1bHRHb2FsPmRlcGxveTwvZGVmYXVsdEdvYWw+CiAgICAgICAgICAgICAgIDxwbHVnaW5zPgogICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgICAgICAgICAgPGluaGVyaXRlZD50cnVlPC9pbmhlcml0ZWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBsb3ktcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi40PC92ZXJzaW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CkBAIC02MjEsNiArNjIzLDQ3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CiAgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamF2YWRvYy1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjYuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXhtZW1vcnk+MTAyNG08L21heG1lbW9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFncz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPnR1c2Nhbnkuc3BpLmV4dGVuc2lvbi5pbmhlcml0ZnJvbTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZXh0ZW5zaW9uIHNwaSBieSBpbmhlcml0YW5jZSB0YWcgZm9yIHBsYWNpbmcgaW4gY2xhc3NlcyAvaW50ZXJmYWNlcyAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwbGFjZW1lbnQ+dDwvcGxhY2VtZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWQ+UHJvdmlkZXMgcGFydCBvZiB0aGUgVHVzY2FueSBTUEkgZm9yIEV4dGVuc2lvbiBEZXZlbG9wZXJzIGJ5IHNwZWNpYWxpemF0aW9uIG9mIHRoaXMgY2xhc3MvaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2hlYWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dHVzY2FueS5zcGkuZXh0ZW5zaW9uLmFzY2xpZW50PC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBleHRlbnNpb24gc3BpIGJ5IGNsaWVudCBhY2Nlc3MgdGFnIGZvciBwbGFjaW5nIGluIGNsYXNzZXMgLyBpbnRlcmZhY2VzLiBUaGUgdGVybSBjbGllbnQgaGVyZSBpcyB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0aGUgT08gZGVzaWduIHNlbnNlIG9mIGFueSBjbGFzcyB0aGF0IGNhbGxzIHRoZSBtZXRob2RzIG9mIGFub3RoZXIgaXMgYSBjbGllbnQgb2YgdGhlIGxhdHRlciAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwbGFjZW1lbnQ+dDwvcGxhY2VtZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWQ+UHJvdmlkZXMgcGFydCBvZiB0aGUgVHVzY2FueSBTUEkgZm9yIEV4dGVuc2lvbiBEZXZlbG9wZXJzIGJ5IGNhbGxpbmcgbWV0aG9kcyBvbiB0aGlzIGludGVyZmFjZS9jbGFzcy48L2hlYWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+dHVzY2FueS5zcGkuZXh0ZW5zaW9uPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBleHRlbnNpb24gc3BpIGluZGljYXRvciBmb3Igb3ZlcnZpZXdzLCBwYWNrYWdlcyAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwbGFjZW1lbnQ+YTwvcGxhY2VtZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhlYWQ+RWxlbWVudHMgb2YgdGhlIFR1c2NhbnkgU1BJIGZvciBFeHRlbnNpb24gZGV2ZWxvcGVycyBhcmUgcHJvdmlkZWQuPC9oZWFkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhZ3M+CisKKyAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmV3YXJlOiB0aGlzIGdyb3VwIHN0YW56YSByZXN1bHRzIGluIGEgZ3JvdXBpbmcgb2YgcGFnZXMgdGhhdCBjb250YWlucyBhIHN1cGVyc2V0IG9mIHRoZSBzcGksIHVudGlsIHdlIGNvbXBsZXRlIGlkZW50aWZpY2F0aW9uIGFuZCB0aGVuIHJlZmFjdG9yIG91dCBub24gc3BpIGNvZGUgZnJvbSBsaXN0ZWQgcGFja2FnZXMtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRpdGxlPkV4dGVuc2lvbiBEZXZlbG9wZXIncyBTUElzIChXb3JrIGluIFByb2dyZXNzKTwvdGl0bGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGFja2FnZXM+CitvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5Om9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuYnVpbGRlcjpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGw6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWw6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24uaHR0cDpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi54bWw6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb21tb24ueG1sLmRvbTpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbW1vbi54bWwuc3RheDpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRleHQ6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb246b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ubmFtZXNwYWNlOm9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3NvcjpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvbHZlcjpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmU6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5Om9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5mYWN0b3J5Om9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5pbnZvY2F0aW9uOm9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5zY29wZTpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGEuY29sbGVjdGlvbjpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nOm9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGF0YWJpbmRpbmcuaW1wbDpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLmphdmFiZWFuczpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRhdGFiaW5kaW5nLnhtbDpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmV4dGVuc2liaWxpdHk6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0Lmh0dHA6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWY6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuaW1wbDpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi51dGlsOm9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGw6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uOm9yZy5hcGFjaGUudHVzY2FueS5zY2EubW9uaXRvcjpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeTpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5hdXRoZW50aWNhdGlvbi50b2tlbjpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS5zZWN1cml0eTpvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnBvbGljeS51dGlsOm9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXI6b3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lOm9yZy5hcGFjaGUudHVzY2FueS5zY2Eud2ViLmphdmFzY3JpcHQ6b3JnLmFwYWNoZS50dXNjYW55LnNjYS53b3JrOm9yZy5hcGFjaGUudHVzY2FueS5zY2EueHNkPC9wYWNrYWdlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9ncm91cD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2dyb3Vwcz4gIDwhLS0gLS0+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgogICAgICAgICAgICAgICA8L3BsdWdpbnM+CiAgICAgICAgICAgIDwvYnVpbGQ+CiAgICAgICAgIDwvcHJvZmlsZT4KQEAgLTY1MCw4ICs2OTMsNyBAQAogICAgICAgICAgICAgICAgIDxtb2R1bGU+bW9kdWxlcy9kYXRhYmluZGluZy1qYXhiPC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5tb2R1bGVzL2RlcGxveW1lbnQ8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPm1vZHVsZXMvZG9tYWluLW5vZGU8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPm1vZHVsZXMvZW5kcG9pbnQtaGF6ZWxjYXN0PC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5tb2R1bGVzL2VuZHBvaW50LWhhemVsY2FzdC1jbGllbnQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPm1vZHVsZXMvZG9tYWluLWhhemVsY2FzdDwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+bW9kdWxlcy9leHRlbnNpYmlsaXR5PC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5tb2R1bGVzL2hvc3QtaHR0cDwvbW9kdWxlPgogICAgICAgICAgICAgICAgIDxtb2R1bGU+bW9kdWxlcy9ob3N0LWpldHR5PC9tb2R1bGU+CkBAIC02NzMsOSArNzE1LDcgQEAKICAgICAgICAgICAgICAgICA8bW9kdWxlPm1vZHVsZXMvc2NhLWNsaWVudC1pbXBsPC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5tb2R1bGVzL3dpbms8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPm1vZHVsZXMveHNkPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5zaGFkZXMvYmFzZTwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+c2hhZGVzL2Jhc2Utbm9kZXA8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNvbXBsaWFuY2UtdGVzdHM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnRlc3RpbmcvY29tcGxpYW5jZS10ZXN0czwvbW9kdWxlPgogICAgICAgICAgICAgPC9tb2R1bGVzPgogICAgICAgICA8L3Byb2ZpbGU+CiAgICAgICAgIDxwcm9maWxlPgpAQCAtNjg0LDcgKzcyNCw3IEBACiAgICAgICAgICAgICAgICAgPG1vZHVsZT5tb2R1bGVzL2JpbmRpbmctam1zPC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5tb2R1bGVzL2JpbmRpbmctam1zLXJ1bnRpbWU8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPnNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWptczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+aXRlc3Qvam1zPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT50ZXN0aW5nL2l0ZXN0L2ptczwvbW9kdWxlPgogICAgICAgICAgICAgPC9tb2R1bGVzPgogICAgICAgICA8L3Byb2ZpbGU+CiAKQEAgLTY5NSwxMiArNzM1LDExIEBACiAgICAgICAgICAgICA8bW9kdWxlcz4KICAgICAgICAgICAgICAgICA8bW9kdWxlPm1vZHVsZXM8L21vZHVsZT4KICAgICAgICAgICAgICAgICA8bW9kdWxlPnNhbXBsZXM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPml0ZXN0PC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT50ZXN0aW5nL2l0ZXN0PC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5mZWF0dXJlczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+c2hhZGVzPC9tb2R1bGU+CiAgICAgICAgICAgICAgICAgPG1vZHVsZT5kaXN0cmlidXRpb248L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmFyY2hldHlwZXM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8IS0tIG1vZHVsZT5jb21wbGlhbmNlLXRlc3RzPC9tb2R1bGUgLS0+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5tYXZlbi9hcmNoZXR5cGVzPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPCEtLSBtb2R1bGU+dGVzdGluZy9jb21wbGlhbmNlLXRlc3RzPC9tb2R1bGUgLS0+CiAgICAgICAgICAgICA8L21vZHVsZXM+CiAgICAgICAgICAgIDxidWlsZD4KICAgICAgICAgICAgICAgPHBsdWdpbnM+CkBAIC03OTAsNyArODI5LDggQEAKICAgICAgICAgICAgICAgICAgICA8bWVzc2FnZT5CZXN0IFByYWN0aWNlIGlzIHRvIGFsd2F5cyBkZWZpbmUgcmVsZWFzZWQgcGx1Z2luIHZlcnNpb25zITwvbWVzc2FnZT4KICAgICAgICAgICAgICAgICAgICA8YmFuTGF0ZXN0PnRydWU8L2JhbkxhdGVzdD4KICAgICAgICAgICAgICAgICAgICA8YmFuUmVsZWFzZT50cnVlPC9iYW5SZWxlYXNlPgotICAgICAgICAgICAgICAgICAgIDxiYW5TbmFwc2hvdHM+dHJ1ZTwvYmFuU25hcHNob3RzPgorPCEtLSBUVVNDQU5ZLTM2NzQgLS0+CisgICAgICAgICAgICAgICAgICAgPGJhblNuYXBzaG90cz5mYWxzZTwvYmFuU25hcHNob3RzPgogICAgICAgICAgICAgICAgICAgIDxwaGFzZXM+Y2xlYW4sZGVwbG95LHNpdGU8L3BoYXNlcz4KICAgICAgICAgICAgICAgICAgICA8YWRkaXRpb25hbFBsdWdpbnM+CiAgICAgICAgICAgICAgICAgICAgPC9hZGRpdGlvbmFsUGx1Z2lucz4KQEAgLTg0MSw2ICs4ODEsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZWNsaXBzZS1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuODwvdmVyc2lvbj4KICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWFyY2hldHlwZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1hbHBoYS01PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvcGx1Z2luPgogCiAgICAgICAgICAgICAgICAgPCEtLSBjb21waWxlciBwbHVnaW4gY29uZmlndXJhdGlvbiAtLT4KICAgICAgICAgICAgICAgICA8cGx1Z2luPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9SRUFETUUgYi9zYW1wbGVzL1JFQURNRQppbmRleCA0M2I3Y2IzLi5lN2I4YWY4IDEwMDY0NAotLS0gYS9zYW1wbGVzL1JFQURNRQorKysgYi9zYW1wbGVzL1JFQURNRQpAQCAtMSwyMDIgKzEsMTI5IEBACiBUaGUgQXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1OZXcgU2FtcGxlcyBTdHJ1Y3R1cmUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2VsY29tZSB0byB0aGUgQXBhY2hlIFR1c2NhbnkgU0NBIEphdmEgcnVudGltZS4gWW91IGNhbiBmaW5kIG1vcmUgZ2VuZXJhbCAKK2RvY3VtZW50YXRpb24gYWJvdXQgdGhlIHJ1bnRpbWUgYXQ6CiAKLUZvciB0aGUgTWlsZXN0b25lIDUgcmVsZWFzZSBvZiBUdXNjYW55IFNDQSBKYXZhIDIueCB3ZSBhcmUgYmVnaW5uaW5nCi10aGUgcHJvY2VzcyBvZiBtb3ZpbmcgdG8gYSBuZXcgc3RydWN0dXJlIGZvciBzYW1wbGVzLiBNaWxlc3RvbmUgNSBpcyAKLWRlbGl2ZXJlZCBpbiBhIHN0YXRlIG9mIHBhcnRpYWwgY2hhbmdlIG92ZXIgdG8gdGhpcyBuZXcgZW1waGFzaXMsIGFuZCBoZW5jZQotdGhpcyBSRUFETUUgcmVmbGVjdHMgdGhhdCBoeWJyaWQgc3RhdGUuIAoraHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9kb2N1bWVudGF0aW9uLTJ4Ly4gCiAKLVRoZXJlIGFyZSBwcmltYXJpbHkgMyB0eXBlcyBvZiBzYW1wbGU7IHRob3NlIHdoaWNoIGZvY3VzIG9uIHB1cmUgU0NBCi1jb25jZXB0cywgdGhvc2Ugd2hpY2ggZGVtb25zdHJhdGUgZmVhdHVyZXMgb2YgVHVzY2FueSBhbmQgdGhlIGxhc3QgZ3JvdXAKLWlzIG9mIHNhbXBsZXMgd2hpY2ggZ2l2ZSBhIGZsYXZvdXIgb2YgbW9yZSBjb21wbGV0ZSwgcmVhbGlzdGljIGFwcGxpY2F0aW9ucy4KK0hlcmUgd2UgZ2l2ZSBhIHNob3J0IG92ZXJ2aWV3IG9mIHdoYXQgeW91IGNhbiBmaW5kIGluIHRoZSBzYW1wbGVzIGRpcmVjdG9yeS4gCitNb3JlIGRldGFpbCBvbiB0aGUgaW5kaXZpZHVhbCBzYW1wbGUgY29udHJpYnV0aW9ucyBjYW4gYmUgZm91bmQgYXQ6CiAKLVRoZSBuZXcgc3RydWN0dXJlIHByaW1hcmlseSBmb2N1c3NlcyBzZXBhcmF0aW5nIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgd2F5IHRoYXQgCi1jb250cmlidXRpb25zIGFyZSBsYXVuY2hlZC4gVGhlIHNhbXBsZXMgZGVtb25zdHJhdGUgdGhlIHdheSBpbiB3aGljaCBjb250cmlidXRpb25zIGFyZSB1c2VkIGJ5Ci1sYXVuY2hlcnMgdG8gZXhlY3V0ZSB0dXNjYW55IFNDQSBhcHBsaWNhdGlvbnMuCitodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL2RvY3VtZW50YXRpb24tMngvMi4wLWJldGEtU2FtcGxlcytkb2N1bWVudGF0aW9uCiAKLUluIHRoaXMgd2F5IHlvdSBjYW4gZXhwbG9yZSB0aGUgc2FtcGxlcyBieSBjaG9zaW5nIHdoaWNoIGxhdW5jaGVyIHlvdSB3aXNoCi10byBpbnZva2Ugd2hpY2ggY29udHJpYnV0aW9uLiBJbiB0aGUgb2xkIHN0eWxlIG9mIHNhbXBsZSB0aGlzIGRpc3RpbmN0aW9uIHdhcyBub3QgY2xlYXI7Ci1hbnkgZ2l2ZW4gc2FtcGxlIGNvbnRhaW5lZCBib3RoIGxhdW5jaGVyIGFuZCBjb250cmlidXRpb24sIGFuZCB0aGUgc2V0IG9mIHNhbXBsZXMgcHJvdmlkZWQKLXJlcHJlc2VudGVkIGEgc21hbGwgc3Vic2V0IG9mIHRoZSBjb21iaW5hdGlvbnMgcG9zc2libGUgYnkgdGhlIG5ldyBhcHByb2FjaC4KK1RoZXJlIGFyZSBzZXZlcmFsIHNhbXBsZXMgc3ViZGlyZWN0b3JpZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbjsgCisgIAorZ2V0dGluZy1zdGFydGVkCis9PT09PT09PT09PT09PT0KKyAgICAgCitUaGlzIGlzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBpZiB5b3UndmUgbm90IHRyaWVkIFR1c2NhbnkgU0NBIEphdmEgYmVmb3JlLiBUaGlzIAorZGlyZWN0b3J5IGNvbnRhaW5zIGEgbnVtYmVyIG9mIHNpbXBsZSAiU0NBIENvbnRyaWJ1dGlvbnMiIHRoYXQgY2FuIGJlIHJ1biB1c2luZyAKK3RoZSBUdXNjYW55IFNDQSBydW50aW1lLiBBbiBTQ0EgQ29udHJpYnV0aW9uIGlzIHRoZSB3YXkgdGhhdCBTQ0EgY29tcG9zaXRlCithcHBsaWNhdGlvbnMgYXJlIHBhY2thZ2VkIHNvIHRoZXkgY2FuIGJlIHJ1bi4gRm9yIGdlbmVyYWwgaW5mb3JtYXRpb24gb24gU0NBCitzZWUgaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9kb2N1bWVudGF0aW9uLTJ4L3NjYS1pbnRyb2R1Y3Rpb24uaHRtbAogCi1XaXRoaW4gdGhlIFNDQSBjYXRlZ29yeSBvZiBzYW1wbGVzLCBtb3N0IG9mIHRoZSBjYWxjdWxhdG9yIHNhbXBsZXMsIGhhdmUgYmVlbgotbWlncmF0ZWQgdG8gdGhpcyBuZXcgc3RydWN0dXJlIGFzIGZvbGxvd3MuCitsZWFybmluZy1tb3JlCis9PT09PT09PT09PT09CiAKLVNDQSBTYW1wbGVzCi0gIGJpbmRpbmctcm1pLWNhbGN1bGF0b3IKLSAgICBjb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2UKLSAgICBjb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlCi0gIGJpbmRpbmctc2NhCi0gICAgY29udHJpYnV0aW9uLWNhbGN1bGF0b3IKLSAgY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvcgotICBjb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yCi0gIGNhbGN1bGF0b3Itc2NhLWNsaWVudAotICBsYXVuY2hlci1jb21tYW5kLWxpbmUgCi0gIGxhdW5jaGVyLWVtYmVkZGVkLWpzZQotICBsYXVuY2hlci1lbWJlZGRlZC1vc2dpCi0gIGxhdW5jaGVyLW12bgorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbWFueSBtb3JlIFNDQSBDb250cmlidXRpb25zIHRoYXQgeW91IGNhbiB0cnkgd2l0aCAKK3RoZSBUdXNjYW55IFNDQSBKYXZhIHJ1bnRpbWUuIFNvbWUgZGVtb25zdHJhdGUgcGFydGljdWxhciBmZWF0dXJlcyBvZiB0aGUgCitydW50aW1lLCBvciBleGFtcGxlLCB0aGUgY29udHJpYnV0aW9ucyB1bmRlciB0aGUgYXN5bmMgZGlyZWN0b3J5IGRlbW9uc3RyYXRlCit0aGUgYXN5bmNocm9ub3VzIHByb2dyYW1taW5nIG1vZGVsIHRoYXQgdGhlIHJ1bnRpbWUgc3VwcG9ydHMuIAogCi1QbGVhc2UgdmlzaXQgdGhlIDIueCBkb2N1bWVudGF0aW9uIGluIG91ciAgd2Vic2l0ZSBbMV0gdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgU0NBCi1hbmQgVHVzY2FueSAyLngKK1NDQSBpcyBleHRlbnNpYmxlLiBZb3UgY2FuIHBsdWcgaW4gZXh0ZW5zaW9ucyB0byBzdXBwb3J0IG1hbnkgZGlmZmVyZW50IHR5cGVzCitvZiB0ZWNobm9sb2d5LiBUaGUgVHVzY2FueSBTQ0EgSmF2YSBydW50aW1lIGNvbWVzIHdpdGggbG90cyBvZiBleHRlbnNpb25zCithbmQgdGhlIG1ham9yaXR5IG9mIGNvbnRyaWJ1dGlvbnMgaGVyZSBkZW1vbnN0cmF0ZSB0aGVzZSBleHRlbnNpb25zLiBUaGV5IGFyZQorb3JnYW5pemVkIHVuZGVyIGRpcmVjdG9yaWVzIGZvbGxvd2luZyB0aGUgbmFtZSBvZiB0aGUgZXh0ZW5zaW9uLCBmb3IgZXhhbXBsZSwgCitjb250cmlidXRpb25zIHRoYXQgZGVtb25zdHJhdGUgdGhlIHdlYiBzZXJ2aWNlcyBiaW5kaW5nIGluIG9wZXJhdGlvbiBjYW4KK2JlIGZvdW5kIGluIHRoZSBiaW5kaW5nLXdzIGRpcmVjdG9yeS4gV2hlbiB5b3Ugd2FudCB0byB1c2UgdGhlIHdlYiBzZXJ2aWNlCitiaW5kaW5nIHdpdGggYW4gU0NBIHNlcnZpY2UgYSByZWZlcmVuY2UgaXQgYXBwZWFycyBpbiB0aGUgY29tcG9zaXRlIFhNTCBpbiAKK3RoZSBmb2xsb3dpbmcgd2F5OgogCi1SdW5uaW5nIHRoZSBOZXcgU3R5bGUgc2FtcGxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzxzZXJ2aWNlPgorICA8YmluZGluZy53cy8+Cis8L3NlcnZpY2U+IAogCi1UbyBydW4gYSBuZXcgc3R5bGUgc2FtcGxlIHRoZXJlIGFyZSAzIGJhc2ljIHN0ZXBzCitIZW5jZSBpdCBzaG91bGQgYmUgZWFzeSB0byBtYXAgYmV0d2VlbiBleHRlbnNpb25zLCBhcyB0aGV5IGFwcGVhciBpbiAKK2NvbXBvc2l0ZSBmaWxlcyBhbmQgb3RoZXIgc2FtcGxlcyB0aGF0IGRlbW9uc3RyYXRlIHZhcmlvdXMgZmVhdHVyZXMgb2YgdGhlIAorZXh0ZW5zaW9uLiAKIAotMSkgYnVpbGQgdGhlIGNvbnRyaWJ1dGlvbjogdXNpbmcgZWl0aGVyIHRoZSBjb21tYW5kICJtdm4iLCAiYW50IHJ1biIgb3IgeW91ciB1c3VhbCBzdGVwcyB0byBidWlsZCBhCi0gICBtb2R1bGUgaW4geW91ciBJREUKLTIpIHVuaXQgdGVzdCB0aGUgY29udHJpYnV0aW9uOiBpZiB5b3UgdXNlZCBtdm4gb3IgYW50IGluIHN0ZXAgMSB0aGVuIHlvdSB3aWxsIGFscmVhZHkgaGF2ZSBkb25lIHRoaXM7Ci0gICBpZiB5b3UgdXNlZCBhbiBJREUgZm9sbG93IHlvdXIgdXN1YWwgc3RlcHMgdG8gcnVuIHRoZSB1bml0IHRlc3QgaW4gdGhlIGNvbnRyaWJ1dGlvbidzIG1vZHVsZQotMykgbGF1bmNoIHRoZSBjb250cmlidXRpb246IGdvIHRvIG9uZSBvZiB0aGUgbGF1bmNoZXIqIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSBzYW1wbGVzIHJvb3QgZGlyZWN0b3J5Ci0gICBhbmQgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgdGhlcmUgdG8gdXNlIGEgbGF1bmNoZXIgdG8gbGF1bmNoIHlvdXIgY2hvc2VuIGNvbnRyaWJ1dGlvbiAKK1RoZSBjb250cmlidXRpb25zIGhlcmUgY2FuIGJlIHJ1biB3aXRoIHVzaW5nIHRoZSBhcHByb2FjaCB0aGF0IHlvdSBmaW5kCittb3N0IGNvbnZlbmllbnQgZnJvbSB0aGUgcnVubmluZy10dXNjYW55IGRpcmVjdG9yeS4gCiAKLUkgdGhlIGNhc2Ugd2hlcmUgeW91IHdhbnQgdG8gZXhlcmNpc2UgdGhlIHNhbXBsZSBjb250cmlidXRpb24gd2l0aCBhIHNlcGFyYXRlIGNsaWVudCBwcm9ncmFtLCBzdWNoIGFzCi1hbiBhcHBsaWNhdGlvbiB1c2luZyB0aGUgU0NBIGNsaWVudCBBUEkgdGhlbiB0aGVyZSBpcyBhIDR0aCBzdGVwIG9mIHN0YXJ0aW5nIHRoYXQgY2xpZW50IGFwcGxpY2F0aW9uCitydW5uaW5nLXR1c2NhbnkKKz09PT09PT09PT09PT09PQogCi1bMV0gaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9kb2N1bWVudGF0aW9uLTJ4LworVGhlIFR1c2NhbnkgU0NBIEphdmEgcnVudGltZSBjYW4gYmUgdXNlZCBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIEl0IGNhbgorYWxzbyBiZSBlbWJlZGRlZCBpbiBvdGhlciBwcm9ncmFtcy4gQXMgc3VjaCB0aGVyZSBhcmUgbWFueSBkaWZmZXJlbnQgd2F5cyB0aGF0IAoreW91IGNhbiBzdGFydCB0aGUgVHVzY2FueSBTQ0EgcnVudGltZSBhbmQgZGVwbG95IGNvbnRyaWJ1dGlvbnMgdG8gaXQuIEVhY2ggCitkaXJlY3RvcnkgaGVyZSBkZXNjcmliZXMgYSBkaWZmZXJlbnQgd2F5IG9mIHJ1bm5pbmcgVHVzY2FueS4gSW4gbW9zdCBjYXNlcyB0aGVzZSAKK2RpZmZlcmVudCBhcHByb2FjaGVzIGNhbiBiZSB1c2VkIHRvIHJ1biBhbnkgb2YgdGhlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgCitnZXR0aW5nLXN0YXJ0ZWQgb3IgbGVhcm5pbmctbW9yZSBkaXJlY3Rvcmllcy4KIAotUnVubmluZyB0aGUgT2xkIFN0eWxlIFNhbXBsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIEFwYWNoZSBUdXNjYW55IFNDQSBzYW1wbGVzIGFyZSBidWlsdCBhcyBwYXJ0IG9mIHRoZSBtYWluIE1hdmVuIGJ1aWxkIGFuZCAKLXJ1biwgdXNpbmcgdGhlIHByb3ZpZGVkIEpVbml0IHRlc3QgY2FzZXMsIGFzIHRlc3RzIGluIHRoZSBNYXZlbiBidWlsZC4KK2FwcGxpY2F0aW9ucworPT09PT09PT09PT09CiAKLUluIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIG9mIEFwYWNoZSBUdXNjYW55IG1vc3Qgc2FtcGxlcyBjYW4gYWxzbyAKLWJlIHJ1biB1c2luZyB0aGUgcHJvdmlkZWQgQW50IGJ1aWxkLnhtbCBmaWxlcy4gVGhlc2Ugc2hvdyB0aGUgc2FtcGxlcyBydW5uaW5nIAotZnJvbSBhIHNpbXBsZSBtYWluKCkgbWV0aG9kIHdpdGhvdXQgdGhlIG5lZWQgZm9yIGEgSlVuaXQgdGVzdCBjYXNlLiAKK1RoZSBjb250cmlidXRpb25zIGhlcmUgZGVtb25zdHJhdGUgbW9yZSBmdWxseSBmb3JtZWQgYXBwbGljYXRpb25zIHdoZW4gCitjb21wYXJlZCB0byB0aGUgY29udHJpYnV0aW9ucyBmb3VuZCB0aGUgZ2V0dGluZy1zdGFydGVkIG9yIGxlYXJuaW5nLW1vcmUgCitkaXJlY3Rvcmllcy4KIAotSW4gdGhlc2Ugbm90ZXMgdGV4dCB0aGF0IGFwcGVhcnMgaW4gYW5nbGVkIGJyYWNrZXRzIGxpa2UgdGhpcyA8ZXhhbXBsZT4gbWVhbnMgCi10aGF0IHlvdSBuZWVkIHRvIG1ha2UgYSBjaG9pY2UgYW5kIHByb3ZpZGUgeW91ciBvd24gdGV4dCBhdCB0aGF0IHBvaW50LiAKK2V4dGVuZGluZy10dXNjYW55Cis9PT09PT09PT09PT09PT09PQogCi1UaGVzZSBzaW1wbGUgc2FtcGxlcyBoYXZlIGJlZW4gY3JlYXRlZCB3aXRoIHRoZSBpbnRlbnRpb24gb2YgaWxsdXN0cmF0aW5nIHRoZSAKLXVzYWdlIG9mIHRoZSBTQ0EgQVBJIGFuZCBhbm5vdGF0aW9ucyBhbmQgY2VydGFpbmx5IG5vdCB0byBsZXZlbHMgb2YgU0NBIGNvbXBvbmVudCAKLWFic3RyYWN0aW9uLiAgSW4gcmVhbCBsaWZlIHNpdHVhdGlvbnMgeW91IHNob3VsZCB1c2UgU0NBIHRvIGFzc2VtYmxlIHJlYWwgYW5kIAotdXN1YWxseSBiaWdnZXIgY29tcG9uZW50cywgYW5kIHdoZW4geW91IGRvIHRoYXQgeW91J2xsIGdldCBhbGwgdGhlIGJlbmVmaXRzIG9mIAotU0NBLCBiaW5kaW5ncywgcG9saWNpZXMsIGludGVncmF0aW9uIGluIGFuIFNPQSBlbnZpcm9ubWVudCBldGMuLgorT25jZSB5b3UncmUgZmFtaWxpYXIgd2l0aCBUdXNjYW55IGFuZCBTQ0EgeW91J3JlIGxpa2VseSB0byBmaW5kIHRoYXQgdG8gCitpbXBsZW1lbnQgeW91J3JlIGFwcGxpY2F0aW9uIHlvdSBuZWVkIHBhcnRpY3VsYXIgYmluZGluZ3MsIGltcGxlbWVudGF0aW9uIAordHlwZXMsIHBvbGljaWVzIG9yIGRhdGFiaW5kaW5ncy4gVGhlIGV4YW1wbGVzIGluIHRoaXMgZGlyZWN0b3J5IHNob3cgeW91Citob3cgdG8gZXh0ZW5kIHRoZSBUdXNjYW55IHJ1bnRpbWUgdG8gaW5jbHVkZSB0aGUgdGVjaG5vbG9naWVzIHlvdSBuZWVkIHRvIHVzZS4KIAotU2FtcGxlIExheW91dAotLS0tLS0tLS0tLS0tLQotR2VuZXJhbGx5IHNhbXBsZSBkaXJlY3RvcmllcyBhcmUgb3JnYW5pemVkIGluIHRoZSBzYW1lIHdheSBiYXNlZCBvbiB0aGUgZGVmYXVsdCAKLXByb2plY3QgdGVtcGxhdGUgcHJvdmlkZWQgYnkgTWF2ZW4uIEZvciBleGFtcGxlLCB0YWtlIGEgbG9vayBhdCB0aGUgY2FsY3VsYXRvciAKLXNhbXBsZTsKK1J1bm5pbmcgc2FtcGxlcworLS0tLS0tLS0tLS0tLS0tCiAKLWNhbGN1bGF0b3IvICAgICAgICAKLSAgc3JjLyAgICAgICAgICAgICAgLSBIb2xkcyBhbGwgb2YgdGhlIHNvdXJjZSBmaWxlcyBmb3IgdGhlIHNhbXBsZQotICAgIG1haW4vICAgICAgICAgICAtIEdyb3VwcyB0b2dldGhlciB0aGUgZmlsZXMgdGhhdCBpbXBsZW1lbnQgdGhlIHNhbXBsZSAKLSAgICAgIGphdmEvICAgICAgICAgLSBKYXZhIHNvdXJjZSBmaWxlcwotICAgICAgcmVzb3VyY2VzLyAgICAtIE5vbiBqYXZhIHJlc291cmNlIGZpbGVzIHN1Y2ggYXMgY29tcG9zdGUgZmlsZXMKLSAgICB0ZXN0LyAgICAgICAgICAgLSBHcm91cHMgdG9nZXRoZXIgZmlsZXMgdGhhdCBwcm92aWRlIHNhbXBsZSB0ZXN0cwotICAgICAgamF2YSAgICAgICAgICAtIEphdmEgdGVzdCBzb3VyY2VzIGZpbGVzLiBVc3VhbGx5IEpVbml0IHRlc3QgY2FzZXMKLSAgdGFyZ2V0LyAgICAgICAgICAgLSBIb2xkcyB0aGUgZmlsZXMgZ2VuZXJhdGVkIHdoZW4gdGhlIHNhbXBsZSBpcyBidWlsdAotICAgIGNsYXNzZXMvICAgICAgICAtIEZvciBleGFtcGxlLCBKYXZhIGNsYXNzIGZpbGVzCi0gICAgdGVzdC1jbGFzc2VzLyAgIC0gY2xhc3NlcyBmcm9tIHNyYy90ZXN0IGFuZCBvdGhlciB0ZXN0IGZpbGVzCitSdW5uaW5nIGEgc2FtcGxlcyBjb250cmlidXRpb24gaW52b2x2ZXMgMyBiYXNpYyBzdGVwcwogCi1HZXR0aW5nIFJlYWR5IFRvIEJ1aWxkCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Zb3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgdGhlIGZvbGxvd2luZyBzb2Z0d2FyZSBiZWZvcmUgeW91IHN0YXJ0LiAKKzEpIGJ1aWxkIHRoZSBjb250cmlidXRpb24KIAotSjJTRSBEZXZlbG9wbWVudCBLaXQgKEpESykgNS4wCi1BcGFjaGUgQW50IDEuNy4xICAgICAgICAgICAgICAgIC0gaWYgeW91IGFyZSBnb2luZyB0byB1c2UgQW50IAotQXBhY2hlIE1hdmVuIDIuMC45ICAgICAgICAgICAgICAtIGlmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIE1hdmVuCitVc2luZyBhbnQsIG1hdmVuIG9yIGVjbGlwc2UgKHNlZSBiZWxvdykKIAotSmF2YSBhbmQgQW50IGFuZC9vciBNYXZlbiBiaW5hcnkgZGlyZWN0b3JpZXMgbXVzdCBiZSBwcmVzZW50IGluIHlvdXIgUEFUSCBzbyAKLXRoYXQgdGhlaXIgZXhlY3V0YWJsZSBwcm9ncmFtcyBhcmUgYXZhaWxhYmxlIGluIHlvdXIgZW52aXJvbm1lbnQuIFlvdSBtYXkgCi1maW5kIGl0IHVzZWZ1bCB0byB1c2UgYSBzY3JpcHQgdG8gc2V0IHVwIHlvdXIgZW52aXJvbm1lbnQsIGZvciBleGFtcGxlOworMikgbGF1bmNoIHRoZSBjb250cmlidXRpb24KIAotRm9yIFVOSVg6Ci0gIEpBVkFfSE9NRT0vPGluc3RhbGxhdGlvbl9kaXJlY3Rvcnk+Ci0gIEFOVF9IT01FPS88aW5zdGFsbGF0aW9uX2RpcmVjdG9yeT4vYXBhY2hlLWFudC0xLjcuMAotICBNQVZFTl9IT01FPS88aW5zdGFsbGF0aW9uX2RpcmVjdG9yeT4vbWF2ZW4tMi4wLjYKLSAgZXhwb3J0IFBBVEg9JEpBVkFfSE9NRS9iaW46JEFOVF9IT01FL2JpbjokTUFWRU5fSE9NRS9iaW46JFBBVEgKK1VzaW5nIG9uZSBvZiB0aGUgYXBwcm9hY2hlcyBkZXNjcmliZWQgaW4gdGhlIHJ1bm5pbmctdHVzY2FueSBkaXJlY3RvcnkKIAotRm9yIFdpbmRvd3M6Ci0gIHNldCBKQVZBX0hPTUU9QzpcPGluc3RhbGxhdGlvbl9kaXJlY3Rvcnk+Ci0gIHNldCBBTlRfSE9NRT1DOlw8aW5zdGFsbGF0aW9uX2RpcmVjdG9yeT5cYXBhY2hlLWFudC0xLjcuMAotICBzZXQgTUFWRU5fSE9NRT1DOlw8aW5zdGFsbGF0aW9uX2RpcmVjdG9yeT5cbWF2ZW4tMi4wLjYKLSAgc2V0IFBBVEg9JUpBVkFfSE9NRSVcYmluOyVBTlRfSE9NRSVcYmluOyVNQVZFTl9IT01FJVxiaW47JVBBVEglCiszKSBzZW5kIGEgdGVzdCBtZXNzYWdlIHRvIHRoZSBhIGNvbXBvbmVudCBzZXJ2aWNlIAogCitXaGVuIHlvdSB3YW50IHRvIGV4ZXJjaXNlIGFuIFNDQSBjb21wb3NpdGUgYXBwbGljYXRpb24geW91IGhhdmUgdG8gc2VuZCBhIAorbWVzc2FnZSB0byBhIGNvbXBvbmVudCBzZXJ2aWNlLiBUaGVyZSBhcmUgc2V2ZXJhbCB3YXlzIG9mIGRvaW5nIHRoaXMgZGVwZW5kaW5nCitvbiBob3cgdGhlIHNhbXBsZSBjb250cmlidXRpb24gaGFzIGJlZW4gY29uZmlndXJlZC4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZAorc2VuZCBhIFNPQVAgbWVzc2FnZSB1c2luZyB0aGUgV2ViIFNlcnZpY2VzIGV4cGxvcmVyIGluIEVjbGlwc2UsIHlvdSBjb3VsZCAKK3VzZSBhIHNlcGFyYXRlIGNsaWVudCBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgU0NBIGNsaWVudCBBUEksIHRoZSBzYW1wbGUKK2NvbnRyaWJ1dGlvbiBpdHNlbGYgbWF5IGV2ZW4gaW5jbHVkZSBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgc2VuZHMgYSB0ZXN0CittZXNzYWdlIHdoZW4gdGhlIGNvbnRyaWJ1dGlvbiBpcyBzdGFydGVkLiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgZWFjaCBzYW1wbGUKK2Rlc2NyaWJlcyB3aGF0IHRvIGRvIHRvIHNlbmQgYSB0ZXN0IG1lc3NhZ2UuICAKIAotQnVpbGRpbmcgQW5kIFJ1bm5pbmcgVGhlIFNDQSBTYW1wbGVzIFVzaW5nIEFudAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlIGJ1aWxkLnhtbCBmaWxlcyBwcm92aWRlZCB3aXRoIHRoZSBBcGFjaGUgVHVzY2FueSBTQ0Egc2FtcGxlcyBhcmUgZGVzaWduZWQgCi10byB3b3JrIHdpdGggdGhlIGJpbmFyeSBkaXN0cmlidXRpb24uIFRoZXkgcmVseSBvbiB0aGUgdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyCi10byBkZXNjcmliZSB0aGUgY2xhc3MgcGF0aCBhbmQgdGhpcyBqYXIgaXMgb25seSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSAKLWJpbmFyeSBkaXN0cmlidXRpb24uCitCdWlsZGluZyB0aGUgc2FtcGxlIGNvbnRyaWJ1dGlvbnMgdXNpbmcgQW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTW9zdCBzYW1wbGUgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgd2l0aCBhIGJ1aWxkLnhtbCBmaWxlLiBXaGVuIHlvdSBzZWUgb25lCit5b3UgY2FuIGJ1aWxkIGl0IHVzaW5nIEFudC4gCiAKLVRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIG9mIFNDQSBhbHNvIGluY2x1ZGVzIHByZWNvbXBpbGVkIHZlcnNpb25zIG9mIGVhY2ggc2FtcGxlLiAKLUlmIHlvdSBsb29rIGluIHRoZSB0YXJnZXQgZGlyZWN0b3J5IG9mIGVhY2ggc2FtcGxlIHlvdSB3aWxsIHNlZSB0aGlzIGphciBmaWxlLiBUbwotcnVuIGEgc2FtcGxlIGJhc2VkIG9uIGFsbCBvZiB0aGUgcHJlY29tcGlsZWQgYXJ0aWZhY3RzIGFsbCB5b3UgaGF2ZSB0byBkbyBpczoKK1RoZXNlIGJ1aWxkLnhtbCBmaWxlcyBhcmUgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBUdXNjYW55IFNDQSBKYXZhIGJpbmFyeQorZGlzdHJpYnV0aW9uIGFuZCBidWlsZCBhIGNsYXNzcGF0aCB0aGF0LCBieSB2YXJpb3VzIG1lYW5zLCByZWZlcnMgdG8gdGhlIAoramFycyB0aGF0IGFyZSBzaGlwcGVkIGluIHRoZSBtb2R1bGVzIGRpcmVjdG9yeS4gRm9yIHRoZW0gdG8gd29yayBwcm9wZXJseQordGhleSBzaG91bGQgYmUgcnVuIGZyb20gdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB5b3UgZmluZCB0aGUgYnVpbGQueG1sIGZpbGUuIAogCiBjZCA8c2FtcGxlZGlyPgotYW50IHJ1bgorYW50CiAKLUNoZWNrIGVhY2ggPHNhbXBsZWRpcj4vUkVBRE1FIGZpbGUgYXMgc29tZSBzYW1wbGVzIHJlcXVpcmUgdGhhdCB0d28gcHJvZ2FtcyBhcmUKLXJ1biB0byBnZXQgdGhlIGRlc2lyZWQgcmVzdWx0LCBmb3IgZXhhbXBsZSwgdGhlIHR3byBzYW1wbGVzIHRoYXQgc2hvdyBob3cKLXRvIGJ1aWxkIGV4dGVuc2lvbnMgYXJlIHJ1biBmcm9tIHRoZWlyIGFzc29jaWF0ZWQgYXBwbGljYXRpb24gc2FtcGxlcy4gCi0KLUlmIHlvdSB3YW50IHRvIHJlYnVpbGQgYSBzYW1wbGUsIGZvciBleGFtcGxlLCBpZiB5b3UgaGF2ZSBjaGFuZ2VkIGl0LCBkbyB0aGUKLWZvbGxvd2luZzoKLQotY2QgPHNhbXBsZWRpcj4KLWFudCBjb21waWxlCitUaGUgcmVzdWx0IG9mIHRoaXMgcHJvY2VzcyB3aWxsIGJlIHRoZSBidWlsdCBjb250cmlidXRpb24gKGEgamFyIGZpbGUpIGluIHRoZSAKK3RhcmdldCBzdWJkaXJlY3Rvcnkgb2YgdGhlIHNhbXBsZSBjb250cmlidXRpb24gZGlyZWN0b3J5LiAKIAogT25jZSB0aGUgc2FtcGxlIGlzIGJ1aWx0IHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgcnVubmluZyB0aGUgc2FtcGxlIGluIHdoYXRldmVyIAotd2F5IGJlc3Qgc3VpdHMgeW91LiBUd28gYWx0ZXJuYXRpdmVzIGFyZSBwcm92aWRlZCBpbiB0aGUgYW50IGJ1aWxkIGZpbGVzLgord2F5IGJlc3Qgc3VpdHMgeW91LiAgCiAKLVRoZSBjb21waWxlIHRhcmdldCBidWlsZHMgdGhlIGNsYXNzIGZpbGVzIGFuZCB0aGVuIGJ1aWxkcyB0aGUgamFyIHNvIHlvdSBjYW4gdXNlIAotdGhlIHNhbWUgY29tbWFuZCBhcyBiZWZvcmU6CitCdWlsZGluZyBTQ0EgU2FtcGxlcyBVc2luZyBNYXZlbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FsbCBzYW1wbGUgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgd2l0aCBhIHBvbS54bWwgTWF2ZW4gYnVpbGQgZmlsZS4gVGhlIAorTWF2ZW4gYnVpbGQgcHJvY2VzcyB3aWxsIHdvcmsgZnJvbSBib3RoIHNvdXJjZSBhbmQgYmluYXJ5IGRpc3RyaWJ1dGlvbnMuIAogCi1hbnQgcnVuCi0KLVRoaXMgd2lsbCB1c2UgdGhlIGdlbmVyYXRlZCBqYXIgdG8gcnVuIHRoZSBzYW1wbGVzLiBUaGUgY29tbWFuZCBsaW5lIHZlcnNpb24gb2YKLXRoaXMgaXM6Ci0KLW9uIFdpbmRvd3MKLQotamF2YSAtY3AgLi5cLi5cZmVhdHVyZXNcdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyO3RhcmdldFw8c2FtcGxlIGphciBmaWxlPiA8c2FtcGxlIHJ1bm5hYmxlIGNsYXNzPgotCi1mb3IgZXhhbXBsZSA6IGphdmEgLWNwIC4uXC4uXGZlYXR1cmVzXHR1c2Nhbnktc2NhLW1hbmlmZXN0Lmphcjt0YXJnZXRcc2FtcGxlLWNhbGN1bGF0b3IuamFyIGNhbGN1bGF0b3IuQ2FsY3VsYXRvckNsaWVudAotCi1vbiAqbml4IAotCi1qYXZhIC1jcCAuLi8uLi9mZWF0dXJlcy90dXNjYW55LXNjYS1tYW5pZmVzdC5qYXI6dGFyZ2V0LzxzYW1wbGUgamFyIGZpbGU+IDxzYW1wbGUgcnVubmFibGUgY2xhc3M+Ci0KLWZvciBleGFtcGxlIDogamF2YSAtY3AgLi4vLi4vZmVhdHVyZXMvdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyOnRhcmdldC9zYW1wbGUtY2FsY3VsYXRvci5qYXIgY2FsY3VsYXRvci5DYWxjdWxhdG9yQ2xpZW50Ci0KLQotWW91IGNhbiB1c2UgdGhlIGNvbXBpbGVkIGNsYXNzZXMgZGlyZWN0bHkgdXNpbmcKLQotYW50IHJ1bi1jbGFzc2VzCi0KLVRoZSBjb21tYW5kIGxpbmUgdmVyc2lvbiBvZiB0aGlzIGlzOgotCi1vbiBXaW5kb3dzCi0KLWphdmEgLWNwIC4uXC4uXGZlYXR1cmVzXHR1c2Nhbnktc2NhLW1hbmlmZXN0Lmphcjt0YXJnZXRcY2xhc3NlcyA8c2FtcGxlIHJ1bm5hYmxlIGNsYXNzPgotCi1mb3IgZXhhbXBsZSA6IGphdmEgLWNwIC4uXC4uXGZlYXR1cmVzXHR1c2Nhbnktc2NhLW1hbmlmZXN0Lmphcjt0YXJnZXRcY2xhc3NlcyBjYWxjdWxhdG9yLkNhbGN1bGF0b3JDbGllbnQKLQotb24gKm5peCAKLQotamF2YSAtY3AgLi4vLi4vZmVhdHVyZXMvdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyOnRhcmdldC9jbGFzc2VzIDxzYW1wbGUgcnVubmFibGUgY2xhc3M+Ci0KLWZvciBleGFtcGxlIDogamF2YSAtY3AgLi4vLi4vZmVhdHVyZXMvdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyOnRhcmdldC9jbGFzc2VzIGNhbGN1bGF0b3IuQ2FsY3VsYXRvckNsaWVudAotCi1UaGUgY2xhc3Mgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIG9mIGNvdXJzZSBkZXBlbmRzIG9uIHdoaWNoIHNhbXBsZSB5b3Ugd2FudCB0byAKLXJ1bi4gSW4gdGhlIGV4YW1wbGVzIHdlIGhhdmUgdXNlZCB3ZSBhcmUgcnVubmluZyB0aGUgQ2FsY3VsYXRvckNsaWVudCBmcm9tIHRoZSBjYWxjdWxhdG9yIHNhbXBsZS4gCi0KLQotQnVpbGRpbmcgQW5kIFJ1bm5pbmcgVGhlIFNDQSBTYW1wbGVzIFVzaW5nIE1hdmVuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIE1hdmVuIGJ1aWxkIHByb2Nlc3Mgd2lsbCB3b3JrIGZyb20gYm90aCBzb3VyY2UgYW5kIGJpbmFyeSBkaXN0cmlidXRpb25zLiAKLVRvIGJ1aWxkIGFuZCB0ZXN0IGFsbCBvZiB0aGUgQXBhY2hlIFR1c2NhbnkgU0NBIHNvdXJjZXMsIGluY2x1ZGluZyB0aGUgc2FtcGxlcywKLWRvIHRoZSBmb2xsb3dpbmcuCi0KLWNkIHNjYQorY2QgPHNhbXBsZWRpcj4KIG12bgogCiBUaGlzIHdpbGwgdGFrZSBhIGxpdHRsZSB3aGlsZSB0byBjb21wbGV0ZS4gRXhwZXJpZW5jZSB3aXRoIE1hdmVuIHRlbGxzIHVzIHRoYXQgCkBAIC0yMDQsNjYgKzEzMSwyNCBAQAogU0NBIHJlcXVpcmVzLiBJZiBNYXZlbiByZXBvcnRzIHRoYXQgaXQgY2Fubm90IGRvd25sb2FkIHJlcXVpcmVkIGRlcGVuZGVuY2llcyAKIHRyeSBydW5uaW5nIHRoZSBNYXZlbiBidWlsZCBhZ2Fpbi4gCiAKLU9uY2UgeW91IGhhdmUgYWxsIG9mIHRoZSBzb3VyY2UgYnVpbHQgeW91IGNhbiBidWlsZCBhbmQgcnVuIGVhY2ggc2FtcGxlIAotaW5kZXBlbmRlbnRseSBpZiByZXF1aXJlZC4KK1doZW4gdXNpbmcgTWF2ZW4gdGhlIHNhbXBsZXMgYXJlIHVuaXQgdGVzdGVkIHVzaW5nIEpVbml0IHRlc3QgY2FzZXMgYW5kIHNvIHlvdSAKK3dpbGwgc29tZXRpbWVzIHNlZSB0ZXN0IG91dHB1dCBkdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MuICAKIAotY2QgPHNhbXBsZWRpcj4KLW12bgorVGhlIHJlc3VsdCBvZiB0aGlzIHByb2Nlc3Mgd2lsbCBiZSB0aGUgYnVpbHQgY29udHJpYnV0aW9uIChhIGphciBmaWxlKSBpbiB0aGUgCit0YXJnZXQgc3ViZGlyZWN0b3J5IG9mIHRoZSBzYW1wbGUgY29udHJpYnV0aW9uIGRpcmVjdG9yeS4gCiAKLVdoZW4gdXNpbmcgTWF2ZW4gdGhlIHNhbXBsZXMgYXJlIHJ1biB3aXRoaW4gSlVuaXQgdGVzdCBjYXNlcyBhbmQgc28geW91IHdpbGwgCi1zb21ldGltZXMgbm90IHNlZSBhbnkgdGVzdCBvdXRwdXQuIFlvdSB3aWxsIGFsd2F5cyBzZWUgYW4gaW5kaWNhdGlvbiBvZiB0ZXN0IAotc3VjY2VzcyBvciBmYWlsdXJlLiAKK09uY2UgdGhlIHNhbXBsZSBpcyBidWlsdCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIHJ1bm5pbmcgdGhlIHNhbXBsZSBpbiB3aGF0ZXZlciAKK3dheSBiZXN0IHN1aXRzIHlvdS4gCiAKLVVzaW5nIFRoZSBTYW1wbGVzIEluIEFuIElERQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCdWlsZGluZyBTYW1wbGVzIEluIEFuIElERQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFRoZSBlYXNpZXN0IHdheSB0byB1c2UgdGhlIHNhbXBsZXMgaW4gYW4gSURFIGlzIHRvIHVzZSBNYXZlbiB0byBnZW5lcmF0ZSBhbGwgCi1vZiB0aGUgSURFIHByb2plY3QgZmlsZXMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5LiBUaGlzIHdvcmtzIGJlc3QgaWYgeW91IAotZ2VuZXJhdGUgSURFIHByb2plY3RzIGZvciBhbGwgb2YgdGhlIEFwYWNoZSBUdXNjYW55IG1vZHVsZXMuIFlvdSBjYW4gdGhlbiAKLWluY2x1ZGUgdGhlIG9uZXMgeW91IGFyZSBpbnRlcmVzdGVkIGluIHdvcmtpbmcgd2l0aCBpbiB5b3UgSURFLiAKK29mIHRoZSBJREUgcHJvamVjdCBmaWxlcyBmb3IgeW91IGF1dG9tYXRpY2FsbHkuIFlvdSBkb24ndCBoYXZlIHRvIGRvIHRoaXMgCit0aG91Z2ggYW5kIGNhbiB1c2UgYSBzZXJpZXMgb2YgbWFudWFsIHN0ZXBzIGluIG9yZGVyIHRvIGltcG9ydCB0aGUgVHVzY2FueQorc2FtcGxlcyBpbnRvIGFuIElERS4gCiAKLVRvIGJ1aWxkIElERSBwcm9qZWN0IGZpbGVzIGZvciBhbGwgb2YgdGhlIG1vZHVsZXMgaW4gQXBhY2hlIFR1c2NhbnkgU0NBOworQm90aCBhcHByb2FjaGVzIHRvIGltcG9ydGluZyBTQ0EgY29udHJpYnV0aW9uIHByb2plY3RzIGludG8gRWNsaXBzZSBhcmUgCitkb2N1bWVudGVkIGF0OgogCi1jZCBzY2EgCi0KLUlmIHlvdSBhcmUgYW4gRWNsaXBzZSB1c2VyIGRvIHRoZSBmb2xsb3dpbmcKLQotbXZuIC1QZWNsaXBzZQotCi1JZiB5b3UgYXJlIGFuIElERUEgdXNlciBkbyB0aGUgZm9sbG93aW5nIAotCi1tdm4gaWRlYTppZGVhCi0KLVRoZXNlIGNvbW1hbmRzIGdlbmVyYXRlIHByb2plY3QgZmlsZXMgZm9yIGVhY2ggbW9kdWxlIGluIEFwYWNoZSBUdXNjYW55IFNDQS4gCi1UaGUgbW9kdWxlcyB5b3UgYXJlIGludGVyZXN0ZWQgaW4gY2FuIG5vdyBiZSBpbmNsdWRlZCBpbiB5b3VyIElERSwgZm9yIGV4YW1wbGUsCi1pbiBFY2xpcHNlLCBpZiB5b3UgY3JlYXRlIGEgbmV3IEphdmEgcHJvamVjdCBhbmQgdXNlIHRoZSBvcHRpb24gdG8gImNyZWF0ZSBhIAotbmV3IHByb2plY3QgZnJvbSBleGlzdGluZyBzb3VyY2UiIHlvdSBjYW4gc3BlY2lmeSBhbiBTQ0EgbW9kdWxlIGRpcmVjdG9yeSwgCi13aGljaCBpbmNsdWRlcyB0aGUgZ2VuZXJhdGVkIHByb2plY3QgZmlsZXMsIGFuZCBFY2xpcHNlIHdpbGwgdHJlYXQgaXQgbGlrZSBhbnkKLW90aGVyIEphdmEgcHJvamVjdC4gCi0KLVVzaW5nIFRoZSBTYW1wbGVzIEluIEFuIElERSBXaXRob3V0IE1hdmVuCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotV2UgZG9uJ3QgcHJvdmlkZSBhbnkgSURFIHByb2plY3QgZmlsZXMgd2l0aCBvdXIgZGlzdHJpYnV0aW9ucyBzbyB5b3Ugd2lsbCBoYXZlIHRvIAotaW1wb3J0IHRoZSBzYW1wbGUgZmlsZXMgaW50byB5b3VyIElERSBtYW51YWxseS4gSGVyZSdzIGFuIGV4YW1wbGUgb2YgaG93IGl0IGNhbiBiZSAKLWRvbmUgdXNpbmcgRWNsaXBzZS4KLSAKLUluIGEgbmV3IG9yIGV4aXN0aW5nIHdvcmtzcGFjZQotICAgIENyZWF0ZSBhIG5ldyBqYXZhIHByb2plY3QgdG8gcmVwcmVzZW50IHRoZSBzYW1wbGUgeW91IHdhbnQgdG8gd29yayBvbiwgZS5nLgotICAgICAgICBsYXVuY2hlci1lbWJlZGRlZC1qc2UKLSAgICBJbXBvcnQgYWxsIG9mIHRoZSBzYW1wbGUgY29kZSBhbmQgcmVzb3VyY2VzIGludG8gdGhpcyBwcm9qZWN0LCBlLmcuCi0gICAgICAgIEZpbGUsIEltcG9ydCBhbmQgdGhlbiBzZWxlY3QgdHVzY2FueS1zY2EtMS4wLWluY3ViYXRpbmdcc2FtcGxlc1xsYXVuY2hlci1lbWJlZGRlZC1qc2UgZnJvbSB0aGUgZmlsZXN5c3RlbQotICAgIENvbmZpZ3VyZSB0aGUgc291cmNlIHBhdGggdG8gaW5jbHVkZQotICAgICAgICBzcmMvbWFpbi9qYXZhCi0gICAgICAgIHNyYy9tYWluL3Jlc291cmNlcwotICAgIENvbmZpZ3VyZSB0aGUgb3V0cHV0IGZvbGRlciB0byBiZQotICAgICAgICB0YXJnZXQKLSAgICBDb25maWd1cmUgdGhlIGJ1aWxkIHBhdGggdG8gaW5jbHVkZSB0aGUgbWFuaWZlc3QgamFyIHR1c2Nhbnktc2NhLW1hbmlmaWVzdC5qYXIgcHJvdmlkZWQgaW4KLSAgICAgICAgZmVhdHVyZXMKLSAgICAgRm9yIGhlcmUgeW91IGhhdmUgcnVuOwotICAgICAgICB0aGUgdW5pdCB0ZXN0ICAobG9hZHMgYSBzZXF1ZW5jZSBvZiBjb250cmlidXRpb25zIGFuZCBydW5zIHRoZW0pCi0gICAgICAgIFNhbXBsZUpTRUxhdW5jaGVyICh5b3UnbGwgbmVlZCB0byBhZGQgdGhlIG5hbWUgb2YgdGhlIGNvbnRyaWJ1dGlvbiB0byBydW4gYXMgYSBwYXJhbWV0ZXIpCi0gICAgICAgIGJ1aWxkLnhtbCAoeW91J2xsIG5lZWQgdG8gc2V0IHR1c2NhbnkuaG9tZSB0byBwb2ludCB0byBkaXN0cmlidXRpb25cYWxsXHRhcmdldFxhcGFjaGUtdHVzY2FueS1zY2EtYWxsLTIuMC1TTkFQU0hPVC5kaXJcdHVzY2FueS1zY2EtMi4wLVNOQVBTSE9UKSAKLQotVGhlIGRldGFpbHMgb2YgaG93IHRvIGRvIHRoaXMgZm9yIG90aGVyIGRldmVsb3BtZW50IGVudmlyb25tZW50cyB3aWxsCi12YXJ5IGJ1dCB0aGUgcHJvY2VzcyB3aWxsIGJlIHNpbWlsYXIuIAotCi0KK2h0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcvaW1wb3J0LWV4aXN0aW5nLXR1c2Nhbnktc2NhLXByb2plY3RzLWludG8tZWNsaXBzZS5odG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xvZ2dpbmctc2NyaWJlL1JFQURNRSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL1JFQURNRQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvaGVsbG93b3JsZC1zY3JpYmUvcG9tLnhtbCBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUxZjMwNQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3BvbS54bWwKQEAgLTAsMCArMSw5NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4NCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWxvZ2dpbmctc2NyaWJlPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2NyaWJlIExvZ2dpbmcgU2FtcGxlPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudGhyaWZ0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmxpYnRocmlmdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4xLjAtU05BUFNIT1Q8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuc2xmNGo8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2xmNGotYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLXNpbXBsZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4xLjYuMDwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtbGFuZzwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWxhbmc8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi40PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgICAgPHBsdWdpbnM+DQorICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgPC9wbHVnaW4+DQorICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9qYXZhL2dlbmVyYXRlZC9jb20vZmFjZWJvb2svZmIzMDMvRmFjZWJvb2tTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvbWFpbi9qYXZhL2dlbmVyYXRlZC9jb20vZmFjZWJvb2svZmIzMDMvRmFjZWJvb2tTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvbG9nZ2luZy1zY3JpYmUvc3JjL21haW4vamF2YS9nZW5lcmF0ZWQvY29tL2ZhY2Vib29rL2ZiMzAzL0ZhY2Vib29rU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvbWFpbi9qYXZhL2dlbmVyYXRlZC9jb20vZmFjZWJvb2svZmIzMDMvRmFjZWJvb2tTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbG9nZ2luZy1zY3JpYmUvc3JjL21haW4vamF2YS9nZW5lcmF0ZWQvY29tL2ZhY2Vib29rL2ZiMzAzL2ZiX3N0YXR1cy5qYXZhIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvaGVsbG93b3JsZC1zY3JpYmUvc3JjL21haW4vamF2YS9nZW5lcmF0ZWQvY29tL2ZhY2Vib29rL2ZiMzAzL2ZiX3N0YXR1cy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xvZ2dpbmctc2NyaWJlL3NyYy9tYWluL2phdmEvZ2VuZXJhdGVkL2NvbS9mYWNlYm9vay9mYjMwMy9mYl9zdGF0dXMuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvaGVsbG93b3JsZC1zY3JpYmUvc3JjL21haW4vamF2YS9nZW5lcmF0ZWQvY29tL2ZhY2Vib29rL2ZiMzAzL2ZiX3N0YXR1cy5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xvZ2dpbmctc2NyaWJlL3NyYy9tYWluL2phdmEvZ2VuZXJhdGVkL3NjcmliZS90aHJpZnQvTG9nRW50cnkuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL2phdmEvZ2VuZXJhdGVkL3NjcmliZS90aHJpZnQvTG9nRW50cnkuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9qYXZhL2dlbmVyYXRlZC9zY3JpYmUvdGhyaWZ0L0xvZ0VudHJ5LmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL2phdmEvZ2VuZXJhdGVkL3NjcmliZS90aHJpZnQvTG9nRW50cnkuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9qYXZhL2dlbmVyYXRlZC9zY3JpYmUvdGhyaWZ0L1Jlc3VsdENvZGUuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL2phdmEvZ2VuZXJhdGVkL3NjcmliZS90aHJpZnQvUmVzdWx0Q29kZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xvZ2dpbmctc2NyaWJlL3NyYy9tYWluL2phdmEvZ2VuZXJhdGVkL3NjcmliZS90aHJpZnQvUmVzdWx0Q29kZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvbWFpbi9qYXZhL2dlbmVyYXRlZC9zY3JpYmUvdGhyaWZ0L1Jlc3VsdENvZGUuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9qYXZhL2dlbmVyYXRlZC9zY3JpYmUvdGhyaWZ0L3NjcmliZS5qYXZhIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvaGVsbG93b3JsZC1zY3JpYmUvc3JjL21haW4vamF2YS9nZW5lcmF0ZWQvc2NyaWJlL3RocmlmdC9zY3JpYmUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9qYXZhL2dlbmVyYXRlZC9zY3JpYmUvdGhyaWZ0L3NjcmliZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvbWFpbi9qYXZhL2dlbmVyYXRlZC9zY3JpYmUvdGhyaWZ0L3NjcmliZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xvZ2dpbmctc2NyaWJlL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGQuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb1dvcmxkSW1wbC5qYXZhIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvaGVsbG93b3JsZC1zY3JpYmUvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb1dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb1dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xvZ2dpbmctc2NyaWJlL3NyYy9tYWluL2phdmEvc2FtcGxlL0xvZ2dlci5qYXZhIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvaGVsbG93b3JsZC1zY3JpYmUvc3JjL21haW4vamF2YS9zYW1wbGUvTG9nZ2VyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvbG9nZ2luZy1zY3JpYmUvc3JjL21haW4vamF2YS9zYW1wbGUvTG9nZ2VyLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL2phdmEvc2FtcGxlL0xvZ2dlci5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xvZ2dpbmctc2NyaWJlL3NyYy9tYWluL2phdmEvc2FtcGxlL1NjcmliZUxvZ2dlckltcGwuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL2phdmEvc2FtcGxlL1NjcmliZUxvZ2dlckltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9TY3JpYmVMb2dnZXJJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL2phdmEvc2FtcGxlL1NjcmliZUxvZ2dlckltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvbG9nZ2luZy1zY3JpYmUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbG9nZ2luZy1zY3JpYmUvc3JjL21haW4vcmVzb3VyY2VzL2ZiMzAzLnRocmlmdCBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL3Jlc291cmNlcy9mYjMwMy50aHJpZnQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvbG9nZ2luZy1zY3JpYmUvc3JjL21haW4vcmVzb3VyY2VzL2ZiMzAzLnRocmlmdApyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvaGVsbG93b3JsZC1zY3JpYmUvc3JjL21haW4vcmVzb3VyY2VzL2ZiMzAzLnRocmlmdApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9yZXNvdXJjZXMvc2NyaWJlLmNvbXBvc2l0ZSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL3Jlc291cmNlcy9zY3JpYmUuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xvZ2dpbmctc2NyaWJlL3NyYy9tYWluL3Jlc291cmNlcy9zY3JpYmUuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvbWFpbi9yZXNvdXJjZXMvc2NyaWJlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvbWFpbi9yZXNvdXJjZXMvc2NyaWJlLnRocmlmdCBiL3NhbXBsZXMvYXBwbGljYXRpb25zL2xvZ2dpbmctc2NyaWJlL2hlbGxvd29ybGQtc2NyaWJlL3NyYy9tYWluL3Jlc291cmNlcy9zY3JpYmUudGhyaWZ0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xvZ2dpbmctc2NyaWJlL3NyYy9tYWluL3Jlc291cmNlcy9zY3JpYmUudGhyaWZ0CnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvbWFpbi9yZXNvdXJjZXMvc2NyaWJlLnRocmlmdApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9Mb2dnaW5nVGVzdC5qYXZhIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvaGVsbG93b3JsZC1zY3JpYmUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvTG9nZ2luZ1Rlc3QuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sb2dnaW5nLXNjcmliZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9Mb2dnaW5nVGVzdC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9oZWxsb3dvcmxkLXNjcmliZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9Mb2dnaW5nVGVzdC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2FwcGxpY2F0aW9ucy9sb2dnaW5nLXNjcmliZS9wb20ueG1sIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTU4NTRlCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvbG9nZ2luZy1zY3JpYmUvcG9tLnhtbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZS1sb2dnaW5nLXNjcmliZTwvYXJ0aWZhY3RJZD4NCisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBMb2dnaW5nIFNjcmliZTwvbmFtZT4NCisNCisgICAgPHByb2ZpbGVzPg0KKyAgICAgICAgPHByb2ZpbGU+DQorICAgICAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPg0KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4NCisgICAgICAgICAgICA8L2FjdGl2YXRpb24+DQorICAgICAgICAgICAgPG1vZHVsZXM+DQorICAgICAgICAgICAgICAgIDwhLS1tb2R1bGU+aGVsbG93b3JsZC1zY3JpYmU8L21vZHVsZS0tPg0KKyAgICAgICAgICAgIDwvbW9kdWxlcz4NCisgICAgICAgIDwvcHJvZmlsZT4NCisgICAgPC9wcm9maWxlcz4gICAgDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvYXBwbGljYXRpb25zL3BvbS54bWwgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDM0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9wb20ueG1sCkBAIC0wLDAgKzEsNDYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlcy1hcHBsaWNhdGlvbnM8L2FydGlmYWN0SWQ+CisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNhbXBsZSBBcHBsaWNhdGlvbnM8L25hbWU+CisKKyAgICA8cHJvZmlsZXM+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPgorICAgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+CisgICAgICAgICAgICA8L2FjdGl2YXRpb24+CisgICAgICAgICAgICA8bW9kdWxlcz4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmxvZ2dpbmctc2NyaWJlPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5zdG9yZTwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+c3RvcmUtd2ViYXBwPC9tb2R1bGU+CisgICAgICAgICAgICA8L21vZHVsZXM+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPiAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUtd2ViYXBwL1JFQURNRSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUtd2ViYXBwL1JFQURNRQpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL1JFQURNRQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3BvbS54bWwgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDcyNzFiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3BvbS54bWwKQEAgLTAsMCArMSw4NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLXN0b3JlLXdlYmFwcDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgR2V0dGluZyBTdGFydGVkIE9ubGluZSBTdG9yZSBhcyBXZWJBcHA8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3Qtd2ViYXBwPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS13ZWIyMDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgICAKKyAgICA8YnVpbGQ+CisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+CisgICAgICAgPHBsdWdpbnM+CisJCQk8cGx1Z2luPgorCQkJCTxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPnRvbWNhdC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisJCQkJPHZlcnNpb24+MS4wLWJldGEtMTwvdmVyc2lvbj4KKwkJCQk8Y29uZmlndXJhdGlvbj4KKwkJCQkJPCEtLSBLZXkgdXNlZCBmb3IgY29uZmlndXJpbmcgYWNjZXNzIHRvIHNlcnZlciBpbiBzZXR0aW5ncy54bWwtLT4KKworCQkJCQk8c2VydmVyPnRvbWNhdDwvc2VydmVyPgorCQkJCQk8IS0tIGNvbnRleHQgZm9yIHRoZSB3ZWJhcHAsIGFzIGZpbmFsTmFtZSBpcyBub3QgYmVpbmcgaG9ub3JlZCAtLT4KKwkJCQkJPHBhdGg+LyR7YXJ0aWZhY3RJZH08L3BhdGg+CisJCQkJPC9jb25maWd1cmF0aW9uPgorCQkJPC9wbHVnaW4+ICAgICAgIAorICAgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamV0dHktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Ni4xLjE4PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+ICAgICAgIAorICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0NhcnQuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0NhcnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DYXJ0LmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0NhcnQuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DYXRhbG9nLmphdmEgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DYXRhbG9nLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL2phdmEvc2VydmljZXMvQ2F0YWxvZy5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DYXRhbG9nLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL2phdmEvc2VydmljZXMvQ3VycmVuY3lDb252ZXJ0ZXIuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0N1cnJlbmN5Q29udmVydGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL2phdmEvc2VydmljZXMvQ3VycmVuY3lDb252ZXJ0ZXIuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL2phdmEvc2VydmljZXMvQ3VycmVuY3lDb252ZXJ0ZXIuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DdXJyZW5jeUNvbnZlcnRlckltcGwuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0N1cnJlbmN5Q29udmVydGVySW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0N1cnJlbmN5Q29udmVydGVySW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DdXJyZW5jeUNvbnZlcnRlckltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9GcnVpdHNDYXRhbG9nSW1wbC5qYXZhIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL2phdmEvc2VydmljZXMvRnJ1aXRzQ2F0YWxvZ0ltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9GcnVpdHNDYXRhbG9nSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9GcnVpdHNDYXRhbG9nSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0l0ZW0uamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0l0ZW0uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9JdGVtLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0l0ZW0uamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9TaG9wcGluZ0NhcnRJbXBsLmphdmEgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9TaG9wcGluZ0NhcnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL2phdmEvc2VydmljZXMvU2hvcHBpbmdDYXJ0SW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9TaG9wcGluZ0NhcnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL2phdmEvc2VydmljZXMvVG90YWwuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL1RvdGFsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL2phdmEvc2VydmljZXMvVG90YWwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL2phdmEvc2VydmljZXMvVG90YWwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vcmVzb3VyY2VzL3N0b3JlLmNvbXBvc2l0ZSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RvcmUuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RvcmUuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvc3JjL21haW4vcmVzb3VyY2VzL3N0b3JlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nZXJvbmltby13ZWIueG1sIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dlcm9uaW1vLXdlYi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2dlcm9uaW1vLXdlYi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9nZXJvbmltby13ZWIueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvc3RvcmUuaHRtbCBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvc3RvcmUuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3JjL21haW4vd2ViYXBwL3N0b3JlLmh0bWwKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvc3RvcmUuaHRtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3RvcmUucG5nIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3N0b3JlLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9zdG9yZS13ZWJhcHAvc3RvcmUucG5nCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS13ZWJhcHAvc3RvcmUucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUtd2ViYXBwL3N0b3JlLnN2ZyBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlLXdlYmFwcC9zdG9yZS5zdmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUtd2ViYXBwL3N0b3JlLnN2ZwpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUtd2ViYXBwL3N0b3JlLnN2ZwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9SRUFETUUgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUvUkVBRE1FCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL2J1aWxkLnhtbCBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjhlN2M4Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUvYnVpbGQueG1sCkBAIC0wLDAgKzEsODIgQEAKKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0IG5hbWU9InN0b3JlIiBkZWZhdWx0PSJjb21waWxlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4iLz4KKyAgICA8cHJvcGVydHkgbmFtZT0idGVzdC5jbGFzcyIgdmFsdWU9ImxhdW5jaC5MYXVuY2giIC8+CisJPHByb3BlcnR5IG5hbWU9InRlc3QuamFyIiAgIHZhbHVlPSJzYW1wbGUtc3RvcmUuamFyIiAvPgorCisgICAgPGltcG9ydCBmaWxlPSIke3R1c2NhbnkuaG9tZX0vZmVhdHVyZXMvdHVzY2FueS1iYXNlLXJ1bnRpbWUtcG9tL2J1aWxkLXBhdGgueG1sIi8+CisJCisgICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KKyAgICAgICAgPG1rZGlyIGRpcj0idGFyZ2V0L2NsYXNzZXMiLz4KKyAgICA8L3RhcmdldD4KKwkKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIgorICAgICAgICAgICAgICAgZGVzdGRpcj0idGFyZ2V0L2NsYXNzZXMiCisgICAgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICAgICBzb3VyY2U9IjEuNSIKKyAgICAgICAgICAgICAgIHRhcmdldD0iMS41Ij4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisJCTxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2xpYiI+CisJCSAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LWJhc2UtKi5qYXIiLz4KKwkJPC9maWxlc2V0PgorICAgICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICAgIDwvamF2YWM+IAorICAgICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJzcmMvbWFpbi9yZXNvdXJjZXMiLz4KKyAgICAgICAgPC9jb3B5PgorICAgICAgICA8amFyIGRlc3RmaWxlPSJ0YXJnZXQvJHt0ZXN0Lmphcn0iIGJhc2VkaXI9InRhcmdldC9jbGFzc2VzIj4KKyAgICAgICAgICAgIDxtYW5pZmVzdD4KKyAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik1haW4tQ2xhc3MiIHZhbHVlPSIke3Rlc3QuY2xhc3N9IiAvPiAKKyAgICAgICAgICAgIDwvbWFuaWZlc3Q+CisgICAgICAgIDwvamFyPiAgICAJCisgICAgPC90YXJnZXQ+CQorCQorICAgIDx0YXJnZXQgbmFtZT0icnVuLWNsYXNzZXMiPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7dGVzdC5jbGFzc30iCisgICAgICAgICAgICAgIGZvcms9InRydWUiPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgcGF0aD0idGFyZ2V0L2NsYXNzZXMiLz4KKwkJPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vZmVhdHVyZXMiPgorCQkgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtbWFuaWZlc3QuamFyIi8+CisJCTwvZmlsZXNldD4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CisJCisgICAgPHRhcmdldCBuYW1lPSJydW4iPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7dGVzdC5jbGFzc30iCisgICAgICAgICAgICAgIGZvcms9InRydWUiPgorICAgICAgICAgICAgPGNsYXNzcGF0aD4KKyAgICAgICAgICAgIAk8cGF0aGVsZW1lbnQgcGF0aD0idGFyZ2V0LyR7dGVzdC5qYXJ9Ii8+CisJCTxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2ZlYXR1cmVzIj4KKwkJICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktc2NhLW1hbmlmZXN0LmphciIvPgorCQk8L2ZpbGVzZXQ+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPiAgICAJCisgICAgPC90YXJnZXQ+CQorCQorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgorICAgICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIiBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0idGFyZ2V0Ii8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUvcG9tLnhtbCBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2MjhhNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3BvbS54bWwKQEAgLTAsMCArMSw3MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLXN0b3JlPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgR2V0dGluZyBTdGFydGVkIE9ubGluZSBTdG9yZTwvbmFtZT4KKworCTxkZXBlbmRlbmNpZXM+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorCQk8L2RlcGVuZGVuY3k+CisKKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhLWFwaTwvYXJ0aWZhY3RJZD4KKwkJCTx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKwkJPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS13ZWIyMDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5uZXQuc291cmNlZm9yZ2UuaHRtbHVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuNjwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgICAKKyAgICA8YnVpbGQ+CisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zcmMvbWFpbi9qYXZhL2xhdW5jaC9MYXVuY2guamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3NyYy9tYWluL2phdmEvbGF1bmNoL0xhdW5jaC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3N0b3JlL3NyYy9tYWluL2phdmEvbGF1bmNoL0xhdW5jaC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9qYXZhL2xhdW5jaC9MYXVuY2guamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0NhcnQuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3NyYy9tYWluL2phdmEvc2VydmljZXMvQ2FydC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3N0b3JlL3NyYy9tYWluL2phdmEvc2VydmljZXMvQ2FydC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0NhcnQuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0NhdGFsb2cuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3NyYy9tYWluL2phdmEvc2VydmljZXMvQ2F0YWxvZy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3N0b3JlL3NyYy9tYWluL2phdmEvc2VydmljZXMvQ2F0YWxvZy5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0NhdGFsb2cuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0N1cnJlbmN5Q29udmVydGVyLmphdmEgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0N1cnJlbmN5Q29udmVydGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DdXJyZW5jeUNvbnZlcnRlci5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0N1cnJlbmN5Q29udmVydGVyLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DdXJyZW5jeUNvbnZlcnRlckltcGwuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3NyYy9tYWluL2phdmEvc2VydmljZXMvQ3VycmVuY3lDb252ZXJ0ZXJJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DdXJyZW5jeUNvbnZlcnRlckltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9DdXJyZW5jeUNvbnZlcnRlckltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0ZydWl0c0NhdGFsb2dJbXBsLmphdmEgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0ZydWl0c0NhdGFsb2dJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9GcnVpdHNDYXRhbG9nSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0ZydWl0c0NhdGFsb2dJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9JdGVtLmphdmEgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0l0ZW0uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL0l0ZW0uamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9JdGVtLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9TaG9wcGluZ0NhcnRJbXBsLmphdmEgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL1Nob3BwaW5nQ2FydEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9zdG9yZS9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL1Nob3BwaW5nQ2FydEltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9TaG9wcGluZ0NhcnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9Ub3RhbC5qYXZhIGIvc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9Ub3RhbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3N0b3JlL3NyYy9tYWluL2phdmEvc2VydmljZXMvVG90YWwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUvc3JjL21haW4vamF2YS9zZXJ2aWNlcy9Ub3RhbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0b3JlL3NyYy9tYWluL3Jlc291cmNlcy9zdG9yZS5jb21wb3NpdGUgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9yZXNvdXJjZXMvc3RvcmUuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3N0b3JlL3NyYy9tYWluL3Jlc291cmNlcy9zdG9yZS5jb21wb3NpdGUKcmVuYW1lIHRvIHNhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3NyYy9tYWluL3Jlc291cmNlcy9zdG9yZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3NyYy9tYWluL3Jlc291cmNlcy91aXNlcnZpY2VzL3N0b3JlLmh0bWwgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9yZXNvdXJjZXMvdWlzZXJ2aWNlcy9zdG9yZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlM2VmZWEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvbWFpbi9yZXNvdXJjZXMvdWlzZXJ2aWNlcy9zdG9yZS5odG1sCkBAIC0wLDAgKzEsMTYyIEBACis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlN0b3JlPC90aXRsZT4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vZG9qby9kb2pvLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InN0b3JlLmpzIj48L3NjcmlwdD4KKworPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCI+CisKKwkvL0BSZWZlcmVuY2UKKwl2YXIgY2F0YWxvZyA9IG5ldyB0dXNjYW55LnNjYS5SZWZlcmVuY2UoImNhdGFsb2ciKTsKKwkKKwkvL0BSZWZlcmVuY2UKKwl2YXIgc2hvcHBpbmdDYXJ0ID0gbmV3IHR1c2Nhbnkuc2NhLlJlZmVyZW5jZSgic2hvcHBpbmdDYXJ0Iik7CisKKwkvL0BSZWZlcmVuY2UKKwl2YXIgc2hvcHBpbmdUb3RhbCA9IG5ldyB0dXNjYW55LnNjYS5SZWZlcmVuY2UoInNob3BwaW5nVG90YWwiKTsKKwkKKwl2YXIgY2F0YWxvZ0l0ZW1zOworCisJZnVuY3Rpb24gY2F0YWxvZ19nZXRSZXNwb25zZShpdGVtcyxleGNlcHRpb24pIHsKKwkJaWYoZXhjZXB0aW9uKXsKKwkJCWFsZXJ0KGV4Y2VwdGlvbi5tZXNzYWdlKTsKKwkJCXJldHVybjsKKwkJfQorCQl2YXIgY2F0YWxvZyA9ICIiOworCQkKKwkJZm9yICh2YXIgaT0wOyBpPGl0ZW1zLmxlbmd0aDsgaSsrKSB7CisJCQl2YXIgaXRlbSA9IGl0ZW1zW2ldLm5hbWUgKyAnIC0gJyArIGl0ZW1zW2ldLnByaWNlOworCQkJY2F0YWxvZyArPSAnPGlucHV0IG5hbWU9Iml0ZW1zIiB0eXBlPSJjaGVja2JveCIgdmFsdWU9IicgKyAKKwkJCQkJCWl0ZW0gKyAnIj4nICsgaXRlbSArICcgPGJyPic7CisJCX0KKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NhdGFsb2cnKS5pbm5lckhUTUw9Y2F0YWxvZzsKKwkJY2F0YWxvZ0l0ZW1zID0gaXRlbXM7CisJfQorCQorCWZ1bmN0aW9uIHNob3BwaW5nQ2FydF9nZXRSZXNwb25zZShmZWVkKSB7CisJCWlmIChmZWVkICE9IG51bGwpIHsKKwkJCXZhciBlbnRyaWVzID0gZmVlZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZW50cnkiKTsgCisJCQl2YXIgbGlzdCA9ICIiOworCQkJZm9yICh2YXIgaT0wOyBpPGVudHJpZXMubGVuZ3RoOyBpKyspIHsKKwkJCQl2YXIgY29udGVudCA9IGVudHJpZXNbaV0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImNvbnRlbnQiKVswXTsKKwkJCQl2YXIgbmFtZSA9IGNvbnRlbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIm5hbWUiKVswXS5maXJzdENoaWxkLm5vZGVWYWx1ZTsKKwkJCQl2YXIgcHJpY2UgPSBjb250ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwcmljZSIpWzBdLmZpcnN0Q2hpbGQubm9kZVZhbHVlOworCQkJCWxpc3QgKz0gbmFtZSArICcgLSAnICsgcHJpY2UgKyAnIDxicj4nOworCQkJfQorCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNob3BwaW5nQ2FydCIpLmlubmVySFRNTCA9IGxpc3Q7CisKKwkJCWlmIChlbnRyaWVzLmxlbmd0aCAhPSAwKSB7CQkJCisJCQkJdHJ5CXsKKwkJCQkJc2hvcHBpbmdUb3RhbC5nZXRUb3RhbCgpLmFkZENhbGxiYWNrKHNob3BwaW5nVG90YWxfZ2V0VG90YWxSZXNwb25zZSk7CisJCQkJfQorCQkJCWNhdGNoKGUpeworCQkJCQlhbGVydChlKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJCisJZnVuY3Rpb24gc2hvcHBpbmdUb3RhbF9nZXRUb3RhbFJlc3BvbnNlKHRvdGFsLGV4Y2VwdGlvbikgeworCQlpZihleGNlcHRpb24pIHsgCisJCQlhbGVydChleGNlcHRpb24ubWVzc2FnZSk7IAorCQkJcmV0dXJuOworCQl9CisJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b3RhbCcpLmlubmVySFRNTCA9IHRvdGFsOworCX0KKwkKKwlmdW5jdGlvbiBzaG9wcGluZ0NhcnRfcG9zdFJlc3BvbnNlKGVudHJ5KSB7CisJCXNob3BwaW5nQ2FydC5nZXQoIiIpLmFkZENhbGxiYWNrKHNob3BwaW5nQ2FydF9nZXRSZXNwb25zZSk7CisJfQkJCQkKKworCWZ1bmN0aW9uIGFkZFRvQ2FydCgpIHsKKwkJdmFyIGl0ZW1zICA9IGRvY3VtZW50LmNhdGFsb2dGb3JtLml0ZW1zOworCQl2YXIgaiA9IDA7CisJCWZvciAodmFyIGk9MDsgaTxpdGVtcy5sZW5ndGg7IGkrKykgeworCQkJaWYgKGl0ZW1zW2ldLmNoZWNrZWQpIHsKKwkJCQl2YXIgZW50cnkgPSAnPGVudHJ5IHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iPjx0aXRsZT5pdGVtPC90aXRsZT48Y29udGVudCB0eXBlPSJ0ZXh0L3htbCI+JyArCisgICAgICAgICAgICAgICAgCSc8SXRlbSB4bWxucz0iaHR0cDovL3NlcnZpY2VzLyI+JyArCisgICAgICAgICAgICAgICAgCSc8bmFtZSB4bWxucz0iIj4nICsgY2F0YWxvZ0l0ZW1zW2ldLm5hbWUgKyAnPC9uYW1lPicgKyAnPHByaWNlIHhtbG5zPSIiPicgKyBjYXRhbG9nSXRlbXNbaV0ucHJpY2UgKyAnPC9wcmljZT4nICsKKyAgICAgICAgICAgICAgICAgCSc8L0l0ZW0+JyArICc8L2NvbnRlbnQ+PC9lbnRyeT4nOworCQkJCXNob3BwaW5nQ2FydC5wb3N0KGVudHJ5KS5hZGRDYWxsYmFjayhzaG9wcGluZ0NhcnRfcG9zdFJlc3BvbnNlKTsKKwkJCQlpdGVtc1tpXS5jaGVja2VkID0gZmFsc2U7CisJCQl9CisJCX0KKwl9CisJZnVuY3Rpb24gY2hlY2tvdXRDYXJ0KCkgeworCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3RvcmUnKS5pbm5lckhUTUw9JzxoMj4nICsKKwkJCQknVGhhbmtzIGZvciBTaG9wcGluZyBXaXRoIFVzITwvaDI+JysKKwkJCQknPGgyPllvdXIgT3JkZXI8L2gyPicrCisJCQkJJzxmb3JtIG5hbWU9Im9yZGVyRm9ybSI+JysKKwkJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3BwaW5nQ2FydCcpLmlubmVySFRNTCsKKwkJCQkJJzxicj4nKworCQkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90YWwnKS5pbm5lckhUTUwrCisJCQkJCSc8YnI+JysKKwkJCQkJJzxicj4nKworCQkJCQknPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNvbnRpbnVlIFNob3BwaW5nIj4nKyAKKwkJCQknPC9mb3JtPic7CisJCXNob3BwaW5nQ2FydC5kZWwoIiIpOworCX0KKwlmdW5jdGlvbiBkZWxldGVDYXJ0KCkgeworCQlzaG9wcGluZ0NhcnQuZGVsKCIiKTsKKwkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Nob3BwaW5nQ2FydCcpLmlubmVySFRNTCA9ICIiOworCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90YWwnKS5pbm5lckhUTUwgPSAiIjsJCisJfQkKKworCWZ1bmN0aW9uIGluaXQoKSB7CisJCXRyeQl7CisJCQljYXRhbG9nLmdldCgpLmFkZENhbGxiYWNrKGNhdGFsb2dfZ2V0UmVzcG9uc2UpOworCQkJc2hvcHBpbmdDYXJ0LmdldCgiIikuYWRkQ2FsbGJhY2soc2hvcHBpbmdDYXJ0X2dldFJlc3BvbnNlKTsKKwkJfQorCQljYXRjaChlKXsKKwkJCWFsZXJ0KGUpOworCQl9CisJfQorCQorPC9zY3JpcHQ+CisKKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJpbml0KCkiPgorPGgxPlN0b3JlPC9oMT4KKyAgPGRpdiBpZD0ic3RvcmUiPgorICAgCTxoMj5DYXRhbG9nPC9oMj4KKyAgIAk8Zm9ybSBuYW1lPSJjYXRhbG9nRm9ybSI+CisJCTxkaXYgaWQ9ImNhdGFsb2ciID48L2Rpdj4KKwkJPGJyPgorCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBvbkNsaWNrPSJhZGRUb0NhcnQoKSIgIHZhbHVlPSJBZGQgdG8gQ2FydCI+CisgICAJPC9mb3JtPgorIAorIAk8YnI+CisgIAorICAgCTxoMj5Zb3VyIFNob3BwaW5nIENhcnQ8L2gyPgorICAgCTxmb3JtIG5hbWU9InNob3BwaW5nQ2FydEZvcm0iPgorCQk8ZGl2IGlkPSJzaG9wcGluZ0NhcnQiPjwvZGl2PgorCQk8YnI+CisJCTxkaXYgaWQ9InRvdGFsIj48L2Rpdj4KKwkJPGJyPgkJCisJCTxpbnB1dCB0eXBlPSJidXR0b24iIG9uQ2xpY2s9ImNoZWNrb3V0Q2FydCgpIiB2YWx1ZT0iQ2hlY2tvdXQiPiAKKwkJPGlucHV0IHR5cGU9ImJ1dHRvbiIgb25DbGljaz0iZGVsZXRlQ2FydCgpIiB2YWx1ZT0iRW1wdHkiPiAgICAgCisJICAgCTxhIGhyZWY9Ii4uL1Nob3BwaW5nQ2FydC9DYXJ0LyI+KGZlZWQpPC9hPgorCTwvZm9ybT4gICAgCisgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zcmMvdGVzdC9qYXZhL2NsaWVudC9TaG9wcGVyLmphdmEgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvdGVzdC9qYXZhL2NsaWVudC9TaG9wcGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUvc3JjL3Rlc3QvamF2YS9jbGllbnQvU2hvcHBlci5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvdGVzdC9qYXZhL2NsaWVudC9TaG9wcGVyLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUvc3JjL3Rlc3QvamF2YS9jbGllbnQvU2hvcHBlckltcGwuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3NyYy90ZXN0L2phdmEvY2xpZW50L1Nob3BwZXJJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUvc3JjL3Rlc3QvamF2YS9jbGllbnQvU2hvcHBlckltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9hcHBsaWNhdGlvbnMvc3RvcmUvc3JjL3Rlc3QvamF2YS9jbGllbnQvU2hvcHBlckltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zcmMvdGVzdC9qYXZhL3N0b3JlL1N0b3JlVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3NyYy90ZXN0L2phdmEvc3RvcmUvU3RvcmVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3N0b3JlL3NyYy90ZXN0L2phdmEvc3RvcmUvU3RvcmVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvdGVzdC9qYXZhL3N0b3JlL1N0b3JlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zcmMvdGVzdC9yZXNvdXJjZXMvc3RvcmUtY2xpZW50LmNvbXBvc2l0ZSBiL3NhbXBsZXMvYXBwbGljYXRpb25zL3N0b3JlL3NyYy90ZXN0L3Jlc291cmNlcy9zdG9yZS1jbGllbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3N0b3JlL3NyYy90ZXN0L3Jlc291cmNlcy9zdG9yZS1jbGllbnQuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zcmMvdGVzdC9yZXNvdXJjZXMvc3RvcmUtY2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zdG9yZS5wbmcgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zdG9yZS5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUvc3RvcmUucG5nCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zdG9yZS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zdG9yZS5zdmcgYi9zYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zdG9yZS5zdmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvc3RvcmUvc3RvcmUuc3ZnCnJlbmFtZSB0byBzYW1wbGVzL2FwcGxpY2F0aW9ucy9zdG9yZS9zdG9yZS5zdmcKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL2J1aWxkLnhtbCBiL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL2J1aWxkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmUyOGE0Ni4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci0KLTxwcm9qZWN0IG5hbWU9ImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXJtaS1jYWxjdWxhdG9yLXJlZmVyZW5jZSIgZGVmYXVsdD0iY29tcGlsZSI+Ci0KLSAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4iLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iamFyLm5hbWUiICAgdmFsdWU9ImNvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS5qYXIiIC8+Ci0gICAgCi0gICAgPGVjaG8+JHt0dXNjYW55LmhvbWV9PC9lY2hvPgotCi0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4gCi0gICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIiBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4gCi0gICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPiAKLSAgICAgIDwvZGVsZXRlPiAKLSAgICAgIDxta2RpciBkaXI9InRhcmdldC9jbGFzc2VzIi8+IAotICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCI+Ci0gICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIiAKLSAgICAgICAgICAgICBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIgCi0gICAgICAgICAgICAgZGVidWc9Im9uIgotICAgICAgICAgICAgIHNvdXJjZT0iMS41IgotICAgICAgICAgICAgIHRhcmdldD0iMS41IgotICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4gCi0gICAgICAgICA8Y2xhc3NwYXRoPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vbGliIj4KLSAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktc2NhLWFwaS0qLmphciIgLz4KLSAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgPC9qYXZhYz4gCi0gICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPiAKLSAgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL21haW4vcmVzb3VyY2VzIi8+IAotICAgICAgPC9jb3B5PiAKLSAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke2phci5uYW1lfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPiAKLSAgICAgICAgIDxtYW5pZmVzdD4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9IiR7bWFpbi5jbGFzc30iIC8+IAotICAgICAgICAgPC9tYW5pZmVzdD4KLSAgICAgIDwvamFyPiAgICAgICAgCi0gICAgPC90YXJnZXQ+Ci0JCi08L3Byb2plY3Q+IAotCi0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3BvbS54bWwgYi9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTQ5ODhhLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICAgICogCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAgICogCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1jb250cmlidXRpb24tYmluZGluZy1ybWktY2FsY3VsYXRvci1yZWZlcmVuY2U8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBDb250cmlidXRpb24gYmluZGluZy1ybWkgQ2FsY3VsYXRvciBSZWZlcmVuY2U8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1ybWktcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPgotCi0gICAgPGJ1aWxkPgotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgotICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi10dXNjYW55LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICA8L3BsdWdpbj4KLSAgICAgICA8L3BsdWdpbnM+Ci0gICAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL2J1aWxkLnhtbCBiL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4OGExYzguLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLQotPHByb2plY3QgbmFtZT0iY29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3Itc2VydmljZSIgZGVmYXVsdD0iY29tcGlsZSI+Ci0KLSAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4iLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iamFyLm5hbWUiICAgdmFsdWU9ImNvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2UuamFyIiAvPgotICAgIAotICAgIDxlY2hvPiR7dHVzY2FueS5ob21lfTwvZWNobz4KLQotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+IAotICAgICAgPGRlbGV0ZSBxdWlldD0idHJ1ZSIgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+IAotICAgICAgICAgPGZpbGVzZXQgZGlyPSJ0YXJnZXQiLz4gCi0gICAgICA8L2RlbGV0ZT4gCi0gICAgICA8bWtkaXIgZGlyPSJ0YXJnZXQvY2xhc3NlcyIvPiAKLSAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiPgotICAgICAgPGphdmFjIHNyY2Rpcj0ic3JjL21haW4vamF2YSIgCi0gICAgICAgICAgICAgZGVzdGRpcj0idGFyZ2V0L2NsYXNzZXMiIAotICAgICAgICAgICAgIGRlYnVnPSJvbiIKLSAgICAgICAgICAgICBzb3VyY2U9IjEuNSIKLSAgICAgICAgICAgICB0YXJnZXQ9IjEuNSIKLSAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+IAotICAgICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2xpYiI+Ci0gICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LXNjYS1hcGktKi5qYXIiIC8+Ci0gICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgIDwvamF2YWM+IAotICAgICAgPGNvcHkgdG9kaXI9InRhcmdldC9jbGFzc2VzIj4gCi0gICAgICAgICA8ZmlsZXNldCBkaXI9InNyYy9tYWluL3Jlc291cmNlcyIvPiAKLSAgICAgIDwvY29weT4gCi0gICAgICA8amFyIGRlc3RmaWxlPSJ0YXJnZXQvJHtqYXIubmFtZX0iIGJhc2VkaXI9InRhcmdldC9jbGFzc2VzIj4gCi0gICAgICAgICA8bWFuaWZlc3Q+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik1haW4tQ2xhc3MiIHZhbHVlPSIke21haW4uY2xhc3N9IiAvPiAKLSAgICAgICAgIDwvbWFuaWZlc3Q+Ci0gICAgICA8L2phcj4gICAgICAgIAotICAgIDwvdGFyZ2V0PgotCQotPC9wcm9qZWN0PiAKLQotCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2UvcG9tLnhtbCBiL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWEyYmJkLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtY29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3Itc2VydmljZTwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIENvbnRyaWJ1dGlvbiBiaW5kaW5nLXJtaSBDYWxjdWxhdG9yIFNlcnZpY2U8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1ybWktcnVudGltZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPgotCi0gICAgPGJ1aWxkPgotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgotICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi10dXNjYW55LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICA8L3BsdWdpbj4KLSAgICAgICA8L3BsdWdpbnM+Ci0gICAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIzNWU2NC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgdGhlIGFkZCBzZXJ2aWNlCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQWRkU2VydmljZSB7Ci0KLSAgICBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjZmQ4ODcuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ2FsY3VsYXRvciBzZXJ2aWNlLgotICovCi1wdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclNlcnZpY2VJbXBsIGltcGxlbWVudHMgQ2FsY3VsYXRvclNlcnZpY2UgewotCi0gICAgcHJpdmF0ZSBBZGRTZXJ2aWNlIGFkZFNlcnZpY2U7Ci0gICAgcHJpdmF0ZSBTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3RTZXJ2aWNlOwotICAgIHByaXZhdGUgTXVsdGlwbHlTZXJ2aWNlIG11bHRpcGx5U2VydmljZTsKLSAgICBwcml2YXRlIERpdmlkZVNlcnZpY2UgZGl2aWRlU2VydmljZTsKLQotICAgIEBSZWZlcmVuY2UKLSAgICBwdWJsaWMgdm9pZCBzZXRBZGRTZXJ2aWNlKEFkZFNlcnZpY2UgYWRkU2VydmljZSkgewotICAgICAgICB0aGlzLmFkZFNlcnZpY2UgPSBhZGRTZXJ2aWNlOwotICAgIH0KLQotICAgIEBSZWZlcmVuY2UKLSAgICBwdWJsaWMgdm9pZCBzZXRTdWJ0cmFjdFNlcnZpY2UoU3VidHJhY3RTZXJ2aWNlIHN1YnRyYWN0U2VydmljZSkgewotICAgICAgICB0aGlzLnN1YnRyYWN0U2VydmljZSA9IHN1YnRyYWN0U2VydmljZTsKLSAgICB9Ci0KLSAgICBAUmVmZXJlbmNlCi0gICAgcHVibGljIHZvaWQgc2V0RGl2aWRlU2VydmljZShEaXZpZGVTZXJ2aWNlIGRpdmlkZVNlcnZpY2UpIHsKLSAgICAgICAgdGhpcy5kaXZpZGVTZXJ2aWNlID0gZGl2aWRlU2VydmljZTsKLSAgICB9Ci0KLSAgICBAUmVmZXJlbmNlCi0gICAgcHVibGljIHZvaWQgc2V0TXVsdGlwbHlTZXJ2aWNlKE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2UpIHsKLSAgICAgICAgdGhpcy5tdWx0aXBseVNlcnZpY2UgPSBtdWx0aXBseVNlcnZpY2U7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBhZGQoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsKLSAgICAgICAgcmV0dXJuIGFkZFNlcnZpY2UuYWRkKG4xLCBuMik7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMikgewotICAgICAgICByZXR1cm4gc3VidHJhY3RTZXJ2aWNlLnN1YnRyYWN0KG4xLCBuMik7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMikgewotICAgICAgICByZXR1cm4gbXVsdGlwbHlTZXJ2aWNlLm11bHRpcGx5KG4xLCBuMik7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsKLSAgICAgICAgcmV0dXJuIGRpdmlkZVNlcnZpY2UuZGl2aWRlKG4xLCBuMik7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDk3ZGFmZC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgdGhlIGRpdmlkZSBzZXJ2aWNlCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRGl2aWRlU2VydmljZSB7Ci0KLSAgICBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOTA2MDUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UKLSAqLwotcHVibGljIGludGVyZmFjZSBNdWx0aXBseVNlcnZpY2UgewotCi0gICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3NmIzZTUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgdGhlIHN1YnRyYWN0IHNlcnZpY2UKLSAqLwotcHVibGljIGludGVyZmFjZSBTdWJ0cmFjdFNlcnZpY2UgewotCi0gICAgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9wb20ueG1sIGIvc2FtcGxlcy9iaW5kaW5nLXJtaS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTE3OTAwLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvYmluZGluZy1ybWkvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGUtYmluZGluZy1ybWk8L2FydGlmYWN0SWQ+DQotICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgYmluZGluZy5ybWk8L25hbWU+DQotDQotICAgIDxwcm9maWxlcz4NCi0gICAgICAgIDxwcm9maWxlPg0KLSAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4NCi0gICAgICAgICAgICA8YWN0aXZhdGlvbj4NCi0gICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+DQotICAgICAgICAgICAgPC9hY3RpdmF0aW9uPg0KLSAgICAgICAgICAgIDxtb2R1bGVzPg0KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZTwvbW9kdWxlPg0KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2U8L21vZHVsZT4NCi0gICAgICAgICAgICA8L21vZHVsZXM+DQotICAgICAgICA8L3Byb2ZpbGU+DQotICAgIDwvcHJvZmlsZXM+ICAgIA0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL2J1aWxkLnhtbCBiL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3IvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMTA5ZDg5Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3IvYnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotCi08cHJvamVjdCBuYW1lPSJjYWxjdWxhdG9yIiBkZWZhdWx0PSJjb21waWxlIj4KLSAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4iLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iamFyLm5hbWUiICAgdmFsdWU9InNhbXBsZS1jb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvci5qYXIiIC8+Ci0gICAgCi0gICAgPGVjaG8+JHt0dXNjYW55LmhvbWV9PC9lY2hvPgotCi0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4gCi0gICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIiBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4gCi0gICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPiAKLSAgICAgIDwvZGVsZXRlPiAKLSAgICAgIDxta2RpciBkaXI9InRhcmdldC9jbGFzc2VzIi8+IAotICAgIDwvdGFyZ2V0PgotICAgIAotICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCI+Ci0gICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIiAKLSAgICAgICAgICAgICBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIgCi0gICAgICAgICAgICAgZGVidWc9Im9uIgotICAgICAgICAgICAgIHNvdXJjZT0iMS41IgotICAgICAgICAgICAgIHRhcmdldD0iMS41IgotICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4gCi0gICAgICAgICA8Y2xhc3NwYXRoPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vbGliIj4KLSAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktc2NhLWFwaS0qLmphciIgLz4KLSAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgPC9qYXZhYz4gCi0gICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPiAKLSAgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL21haW4vcmVzb3VyY2VzIi8+IAotICAgICAgPC9jb3B5PiAKLSAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke2phci5uYW1lfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPiAKLSAgICAgICAgIDxtYW5pZmVzdD4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9IiR7bWFpbi5jbGFzc30iIC8+IAotICAgICAgICAgPC9tYW5pZmVzdD4KLSAgICAgIDwvamFyPiAgICAgICAgCi0gICAgPC90YXJnZXQ+Ci08L3Byb2plY3Q+Ci0KLQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9wb20ueG1sIGIvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTFkNjMyLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3IvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+c2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgQ29udHJpYnV0aW9uIGJpbmRpbmctc2NhIENhbGN1bGF0b3I8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+IAotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICAgIDxidWlsZD4KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KLSAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICA8L3BsdWdpbnM+Ci0gICA8L2J1aWxkPgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTI5MDYwNS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UKLSAqLwotcHVibGljIGludGVyZmFjZSBNdWx0aXBseVNlcnZpY2UgewotCi0gICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9wb20ueG1sIGIvc2FtcGxlcy9iaW5kaW5nLXNjYS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2NjYzg4Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvYmluZGluZy1zY2EvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGUtYmluZGluZy1zY2E8L2FydGlmYWN0SWQ+DQotICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgYmluZGluZy5zY2E8L25hbWU+DQotDQotICAgIDxwcm9maWxlcz4NCi0gICAgICAgIDxwcm9maWxlPg0KLSAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4NCi0gICAgICAgICAgICA8YWN0aXZhdGlvbj4NCi0gICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+DQotICAgICAgICAgICAgPC9hY3RpdmF0aW9uPg0KLSAgICAgICAgICAgIDxtb2R1bGVzPg0KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yPC9tb2R1bGU+DQotICAgICAgICAgICAgPC9tb2R1bGVzPg0KLSAgICAgICAgPC9wcm9maWxlPg0KLSAgICA8L3Byb2ZpbGVzPiAgICANCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvYnVpbGQueG1sIGIvc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjUyMjIxLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImNhbGN1bGF0b3Itb3NnaSIgZGVmYXVsdD0icnVuIj4KLSAgICA8cHJvcGVydHkgbmFtZT0ic2FtcGxlLm5hbWUiIHZhbHVlPSIke2FudC5wcm9qZWN0Lm5hbWV9Ii8+Ci0gICAgPHByb3BlcnR5IG5hbWU9InNhbXBsZS5qYXIiIHZhbHVlPSIuL3RhcmdldC9zYW1wbGUtJHtzYW1wbGUubmFtZX0uamFyIiAvPgotCi0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPG1rZGlyIGRpcj0idGFyZ2V0L2NsYXNzZXMiLz4KLSAgICA8L3RhcmdldD4KLQotICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCI+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9InNyYy9tYWluL2phdmEiCi0gICAgICAgICAgICAgICBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIKLSAgICAgICAgICAgICAgIGRlYnVnPSJvbiIKLSAgICAgICAgICAgICAgIHNvdXJjZT0iMS41IgotICAgICAgICAgICAgICAgdGFyZ2V0PSIxLjUiPgotICAgICAgICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9Ii4uLy4uL2ZlYXR1cmVzIj4KLSAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtbWFuaWZlc3QuamFyIiAvPgotICAgICAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgICA8L2phdmFjPgotICAgICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJzcmMvbWFpbi9yZXNvdXJjZXMiLz4KLSAgICAgICAgPC9jb3B5PgotICAgICAgICA8amFyIGRlc3RmaWxlPSIke3NhbXBsZS5qYXJ9IiBiYXNlZGlyPSJ0YXJnZXQvY2xhc3NlcyI+Ci0gICAgICAgIDwvamFyPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImNvbXBpbGUiPgotICAgICAgICA8amF2YSBqYXI9Ii4uLy4uL2ZlYXR1cmVzL3R1c2Nhbnktc2NhLW1hbmlmZXN0LmphciIgZm9yaz0idHJ1ZSI+Ci0gICAgICAgICAgICA8anZtYXJnIHZhbHVlPSItRGphdmEudXRpbC5sb2dnaW5nLmNvbmZpZy5maWxlPS4uL2xvZ2dpbmcucHJvcGVydGllcyIvPgotICAgICAgICAgICAgPCEtLSBvcHRpb25hbCB0byBzZXQgdGhlIGRlcGxveWFibGUgY29tcG9zaXRlIC0tPgotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLWNvbXBvc2l0ZSIvPgotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iQ2FsY3VsYXRvci5jb21wb3NpdGUiLz4KLSAgICAgICAgICAgIDwhLS0gc3RvcCB0aGUgbm9kZSBhZnRlciB0aGUgYXBwbGljYXRpb24gcnVucyAtLT4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii10dGwiLz4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IjAiLz4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7c2FtcGxlLmphcn0iLz4KLSAgICAgICAgPC9qYXZhPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPHRhcmdldCBuYW1lPSJydW4tZXF1aW5veCIgZGVwZW5kcz0iY29tcGlsZSI+Ci0gICAgICAgIDxqYXZhIGphcj0iLi4vLi4vZmVhdHVyZXMvdHVzY2FueS1zY2EtZXF1aW5veC1tYW5pZmVzdC5qYXIiIGZvcms9InRydWUiPgotICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZhLnV0aWwubG9nZ2luZy5jb25maWcuZmlsZT0uLi9sb2dnaW5nLnByb3BlcnRpZXMiLz4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1jb21wb3NpdGUiLz4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IkNhbGN1bGF0b3IuY29tcG9zaXRlIi8+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSItY29uZmlnIi8+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSIuLi8uLi9mZWF0dXJlcy9jb25maWd1cmF0aW9uIi8+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSItdHRsIi8+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSIwIi8+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSIke3NhbXBsZS5qYXJ9Ii8+Ci0gICAgICAgIDwvamF2YT4KLSAgICA8L3RhcmdldD4KLQotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4iPgotICAgICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIiBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0idGFyZ2V0Ii8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgotCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9wb20ueG1sIGIvc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTE0M2M3NC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+c2FtcGxlLWNhbGN1bGF0b3Itb3NnaTwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIENhbGN1bGF0b3IgT1NHaTwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtY29yZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgotICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZWNsaXBzZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+Mi41LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmRzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZD5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9idWlsZGNvbW1hbmQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9idWlsZGNvbW1hbmQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvYnVpbGRjb21tYW5kcz4KLSAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmVzPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvcHJvamVjdG5hdHVyZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L3Byb2plY3RuYXR1cmU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcHJvamVjdG5hdHVyZXM+Ci0gICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGhDb250YWluZXJzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aENvbnRhaW5lcj5vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xhc3NwYXRoQ29udGFpbmVyPgotICAgICAgICAgICAgICAgICAgICA8L2NsYXNzcGF0aENvbnRhaW5lcnM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamFyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGFyY2hpdmU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7YmFzZWRpcn0vTUVUQS1JTkYvTUFOSUZFU1QuTUY8L21hbmlmZXN0RmlsZT4KLSAgICAgICAgICAgICAgICAgICAgPC9hcmNoaXZlPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgCi0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLW9zZ2ktanVuaXQtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWxhdW5jaGVyLWVxdWlub3g8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgotICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm9zZ2ktdGVzdDwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dGVzdDwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+dGVzdDwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3lzdGVtUHJvcGVydGllcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+b3NnaS5jb25maWd1cmF0aW9uLmFyZWE8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vZXF1aW5veDwvdmFsdWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zeXN0ZW1Qcm9wZXJ0aWVzPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itc2NhY2xpZW50L3BvbS54bWwgYi9zYW1wbGVzL2NhbGN1bGF0b3Itc2NhY2xpZW50L3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjY2UwODEuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jYWxjdWxhdG9yLXNjYWNsaWVudC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtY2FsY3VsYXRvci1zY2FjbGllbnQ8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgQ2FsY3VhbHRvciBTQ0FDbGllbnQ8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2U8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPg0KLSAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICA8dmVyc2lvbj4xLjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgIDxleGVjdXRpb25zPg0KLSAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgIDxnb2FsPmphdmE8L2dvYWw+DQotICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgPC9leGVjdXRpb24+DQotICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQotICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgPG1haW5DbGFzcz5zYW1wbGUuQ2FsY3VsYXRvclNDQUNsaWVudDwvbWFpbkNsYXNzPg0KLSAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgIDwvcGx1Z2lucz4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL1JFQURNRSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0NjM2ZDAuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLUNhbGN1bGF0b3IgQ29udHJpYnV0aW9uIFNhbXBsZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGNvZGUgd2hpY2ggaW1wbGVtZW50cyBhIHNpbXBsZSBjYWxjdWxhdG9yIFNDQSBjb250cmlidXRpb24uCi0KLVRoZSBjb250cmlidXRpb24gY2FuIGJlIHJ1biBhcyBhIHR1c2NhbnkgYXBwbGljYXRpb24gdXNpbmcgb25lIG9mIHRoZSB0dXNjYW55IGxhdW5jaGVycwotYXMgZGVzY3JpYmVkIGluIHRoZSBSRUFETUUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBzYW1wbGVzLiAKLQotU2FtcGxlIE92ZXJ2aWV3Ci0tLS0tLS0tLS0tLS0tLS0KLVRoZSBzYW1wbGUgcHJvdmlkZXMgYSBzaW5nbGUgY2FsY3VsYXRvciBzZXJ2aWNlIHdpdGggYSBkZWZhdWx0IFNDQSAoamF2YSkgCi1iaW5kaW5nLiBUaGUgbGF1bmNoZXIgZXhlcmNpc2VzIHRoaXMgaW50ZXJmYWNlIGJ5IGNhbGxpbmcgYWRkLCAKLXN1YnRyYWN0LCBtdWx0aXBseSBhbmQgZGl2aWRlIG9wZXJhdGlvbnMuIFRoaXMgcmVzdWx0cyBpbiBtZXNzYWdlcyBwYXNzaW5nIHRvIAotdGhlIGFwcHJvcHJpYXRlIGNvbXBvbmVudHMgaW4gdGhlIGNvbXBvc2l0ZSBhY3Jvc3MgdGhlIGxvY2FsIHdpcmVzLgotCi1Zb3Ugc2hvdWxkIHNlZSB0aGUgZm9sbG93aW5nIG91dHB1dCAoZGVwZW5kaW5nIG9uIHRoZSBsYXVuY2hlciB5b3UgdXNlLCB0aGlzIG91dHB1dAotbWF5IGJlIHN1cnJvdW5kZWQgYnkgb3RoZXIgb3V0cHV0KS4KLQotcnVuOgotICAgICBbamF2YV0gMyArIDI9NS4wCi0gICAgIFtqYXZhXSAzIC0gMj0xLjAKLSAgICAgW2phdmFdIDMgKiAyPTYuMAotICAgICBbamF2YV0gMyAvIDI9MS41Ci0KLQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL2J1aWxkLnhtbCBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNDAxZDcuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0IG5hbWU9ImJpbmRpbmctd3MtY2FsY3VsYXRvciIgZGVmYXVsdD0iY29tcGlsZSI+IAotCTxwcm9wZXJ0eSBuYW1lPSJ0dXNjYW55LmhvbWUiIHZhbHVlPSIuLi8uLiIvPgotICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXIubmFtZSIgICB2YWx1ZT0iY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci5qYXIiIC8+Ci0JCi0JPGVjaG8+JHt0dXNjYW55LmhvbWV9PC9lY2hvPgotCi0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4gCi0gICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIiBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4gCi0gICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPiAKLSAgICAgIDwvZGVsZXRlPiAKLSAgICAgIDxta2RpciBkaXI9InRhcmdldC9jbGFzc2VzIi8+IAotICAgIDwvdGFyZ2V0PgotCQotICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCI+Ci0gICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIiAKLSAgICAgIAkgICAgIGRlc3RkaXI9InRhcmdldC9jbGFzc2VzIiAKLSAgICAgIAkgICAgIGRlYnVnPSJvbiIKLSAgICAgICAgICAgICBzb3VyY2U9IjEuNSIKLSAgICAgICAgICAgICB0YXJnZXQ9IjEuNSIKLSAgICAgIAkgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4gCi0gICAgICAgICA8Y2xhc3NwYXRoPgotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vbGliIj4KLSAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktc2NhLWFwaS0qLmphciIgLz4KLSAgICAgICAgICAgIDwvZmlsZXNldD4KLSAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgPC9qYXZhYz4gCi0gICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPiAKLSAgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL21haW4vcmVzb3VyY2VzIi8+IAotICAgICAgPC9jb3B5PiAKLSAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke2phci5uYW1lfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPiAKLSAgICAgICAgIDxtYW5pZmVzdD4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9IiR7bWFpbi5jbGFzc30iIC8+IAotICAgICAgICAgPC9tYW5pZmVzdD4KLSAgICAgIDwvamFyPiAgICAJCi0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9wb20ueG1sIGIvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmODIyYTMuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICAgICogCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAgICogCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgQ29udHJpYnV0aW9uIGJpbmRpbmctd3MgQ2FsY3VsYXRvcjwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4gICAgIAotICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgIDwvZGVwZW5kZW5jaWVzPgotCi0gICAgPGJ1aWxkPgotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgotCi0gICAgICAgPHBsdWdpbnM+Ci0gICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZDdlY2I4Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2UgY2FsY3VsYXRvcjsKLQotaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOwotCi0vKioKLSAqIFRoZSBBZGQgc2VydmljZSBpbnRlcmZhY2UKLSAqLwotQFJlbW90YWJsZQotcHVibGljIGludGVyZmFjZSBBZGRTZXJ2aWNlIHsKLQotICAgIGRvdWJsZSBhZGQoZG91YmxlIG4xLCBkb3VibGUgbjIpOwotCi19CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYThmYjAuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2UgY2FsY3VsYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQWRkIHNlcnZpY2UKLSAqLwotcHVibGljIGNsYXNzIEFkZFNlcnZpY2VJbXBsIGltcGxlbWVudHMgQWRkU2VydmljZSB7Ci0KLSAgICBwdWJsaWMgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMikgewotICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOwotICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkVTVCwgIkFkZGluZyAiICsgbjEgKyAiIGFuZCAiICsgbjIpOwotICAgICAgICByZXR1cm4gbjEgKyBuMjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDMxZmE4Yi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotcGFja2FnZSBjYWxjdWxhdG9yOwotCi0KLS8qKgotICogVGhlIENhbGN1bGF0b3Igc2VydmljZSBpbnRlcmZhY2UuCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQ2FsY3VsYXRvclNlcnZpY2UgewotCi0gICAgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMik7Ci0KLSAgICBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpOwotCi0gICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotICAgIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpOwotCi19CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdmYWQ3ZC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2UgY2FsY3VsYXRvcjsKLQotaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOwotCi0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIENhbGN1bGF0b3Igc2VydmljZS4KLSAqLwotcHVibGljIGNsYXNzIENhbGN1bGF0b3JTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIENhbGN1bGF0b3JTZXJ2aWNlIHsKLQotICAgIHByaXZhdGUgQWRkU2VydmljZSBhZGRTZXJ2aWNlOwotICAgIHByaXZhdGUgU3VidHJhY3RTZXJ2aWNlIHN1YnRyYWN0U2VydmljZTsKLSAgICBwcml2YXRlIE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2U7Ci0gICAgcHJpdmF0ZSBEaXZpZGVTZXJ2aWNlIGRpdmlkZVNlcnZpY2U7Ci0KLSAgICBAUmVmZXJlbmNlCi0gICAgcHVibGljIHZvaWQgc2V0QWRkU2VydmljZShBZGRTZXJ2aWNlIGFkZFNlcnZpY2UpIHsKLSAgICAgICAgdGhpcy5hZGRTZXJ2aWNlID0gYWRkU2VydmljZTsKLSAgICB9Ci0KLSAgICBAUmVmZXJlbmNlCi0gICAgcHVibGljIHZvaWQgc2V0U3VidHJhY3RTZXJ2aWNlKFN1YnRyYWN0U2VydmljZSBzdWJ0cmFjdFNlcnZpY2UpIHsKLSAgICAgICAgdGhpcy5zdWJ0cmFjdFNlcnZpY2UgPSBzdWJ0cmFjdFNlcnZpY2U7Ci0gICAgfQotCi0gICAgQFJlZmVyZW5jZQotICAgIHB1YmxpYyB2b2lkIHNldERpdmlkZVNlcnZpY2UoRGl2aWRlU2VydmljZSBkaXZpZGVTZXJ2aWNlKSB7Ci0gICAgICAgIHRoaXMuZGl2aWRlU2VydmljZSA9IGRpdmlkZVNlcnZpY2U7Ci0gICAgfQotCi0gICAgQFJlZmVyZW5jZQotICAgIHB1YmxpYyB2b2lkIHNldE11bHRpcGx5U2VydmljZShNdWx0aXBseVNlcnZpY2UgbXVsdGlwbHlTZXJ2aWNlKSB7Ci0gICAgICAgIHRoaXMubXVsdGlwbHlTZXJ2aWNlID0gbXVsdGlwbHlTZXJ2aWNlOwotICAgIH0KLQotICAgIHB1YmxpYyBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7Ci0gICAgICAgIHJldHVybiBhZGRTZXJ2aWNlLmFkZChuMSwgbjIpOwotICAgIH0KLQotICAgIHB1YmxpYyBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsKLSAgICAgICAgcmV0dXJuIHN1YnRyYWN0U2VydmljZS5zdWJ0cmFjdChuMSwgbjIpOwotICAgIH0KLQotICAgIHB1YmxpYyBkb3VibGUgbXVsdGlwbHkoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsKLSAgICAgICAgcmV0dXJuIG11bHRpcGx5U2VydmljZS5tdWx0aXBseShuMSwgbjIpOwotICAgIH0KLQotICAgIHB1YmxpYyBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7Ci0gICAgICAgIHJldHVybiBkaXZpZGVTZXJ2aWNlLmRpdmlkZShuMSwgbjIpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBkMjQ4Mi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLS8qKgotICogVGhlIGRpdmlkZSBzZXJ2aWNlIGludGVyZmFjZQotICovCi1wdWJsaWMgaW50ZXJmYWNlIERpdmlkZVNlcnZpY2UgewotCi0gICAgZG91YmxlIGRpdmlkZShkb3VibGUgbjEsIGRvdWJsZSBuMik7Ci0KLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTMyM2VkZi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotcGFja2FnZSBjYWxjdWxhdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7Ci1pbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEaXZpZGUgc2VydmljZS4KLSAqLwotcHVibGljIGNsYXNzIERpdmlkZVNlcnZpY2VJbXBsIGltcGxlbWVudHMgRGl2aWRlU2VydmljZSB7Ci0KLSAgICBwdWJsaWMgZG91YmxlIGRpdmlkZShkb3VibGUgbjEsIGRvdWJsZSBuMikgewotICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOwotICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkVTVCwgIkRpdmlkaW5nICIgKyBuMSArICIgd2l0aCAiICsgbjIpOwotICAgICAgICByZXR1cm4gbjEgLyBuMjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjkwNjA1Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotcGFja2FnZSBjYWxjdWxhdG9yOwotCi0vKioKLSAqIFRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtdWx0aXBseSBzZXJ2aWNlCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgTXVsdGlwbHlTZXJ2aWNlIHsKLQotICAgIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMik7Ci0KLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxYjgwM2IuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotcGFja2FnZSBjYWxjdWxhdG9yOwotCi1pbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7Ci1pbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOwotCi0vKioKLSAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNdWx0aXBseSBzZXJ2aWNlLgotICovCi1wdWJsaWMgY2xhc3MgTXVsdGlwbHlTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIE11bHRpcGx5U2VydmljZSB7Ci0KLSAgICBwdWJsaWMgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7Ci0gICAgICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJjYWxjdWxhdG9yIik7Ci0gICAgICAgIGxvZ2dlci5sb2coTGV2ZWwuRklORVNULCAiTXVsdGlwbHlpbmcgIiArIG4xICsgIiB3aXRoICIgKyBuMik7Ci0gICAgICAgIHJldHVybiBuMSAqIG4yOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMGQxODguLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UKLSAqLwotcHVibGljIGludGVyZmFjZSBTdWJ0cmFjdFNlcnZpY2UgewotCi0gICAgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThjYzRhMy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHN1YnRyYWN0IHNlcnZpY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBTdWJ0cmFjdFNlcnZpY2VJbXBsIGltcGxlbWVudHMgU3VidHJhY3RTZXJ2aWNlIHsKLQotICAgIHB1YmxpYyBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsKLSAgICAgICAgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoImNhbGN1bGF0b3IiKTsKLSAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJTdWJ0cmFjdGluZyAiICsgbjEgKyAiIGZyb20gIiArIG4yKTsKLSAgICAgICAgcmV0dXJuIG4xIC0gbjI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlIGIvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0ZDczMi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKLSAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2FtcGxlIgotICAgICAgICAgICB4bWxuczpzYW1wbGU9Imh0dHA6Ly9zYW1wbGUiCi0gICAgICAgICAgIG5hbWU9IkNhbGN1bGF0b3IiPgotCi0gICAgPGNvbXBvbmVudCBuYW1lPSJDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCI+Ci0JCTxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlSW1wbCIvPgotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImFkZFNlcnZpY2UiID4gICAKLSAgICAgICAgICAgIDxiaW5kaW5nLndzIHVyaT0iaHR0cDovL2xvY2FsaG9zdDo4MDg1L0FkZFNlcnZpY2VDb21wb25lbnQiLz4gICAgICAgIAotICAgICAgICA8L3JlZmVyZW5jZT4gIAotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InN1YnRyYWN0U2VydmljZSIgdGFyZ2V0PSJTdWJ0cmFjdFNlcnZpY2VDb21wb25lbnQiIC8+Ci0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ibXVsdGlwbHlTZXJ2aWNlIiB0YXJnZXQ9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCIgLz4KLSAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJkaXZpZGVTZXJ2aWNlIiB0YXJnZXQ9IkRpdmlkZVNlcnZpY2VDb21wb25lbnQiIC8+Ci0gICAgPC9jb21wb25lbnQ+Ci0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkFkZFNlcnZpY2VDb21wb25lbnQiPgotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5BZGRTZXJ2aWNlSW1wbCIvPgotICAgICAgICA8c2VydmljZSBuYW1lPSJBZGRTZXJ2aWNlIj4KLSAgICAgICAgICAgIDxiaW5kaW5nLndzIHVyaT0iaHR0cDovL2xvY2FsaG9zdDo4MDg1L0FkZFNlcnZpY2VDb21wb25lbnQiLz4KLSAgICAgICAgPC9zZXJ2aWNlPgotICAgIDwvY29tcG9uZW50PgotCi0gICAgPGNvbXBvbmVudCBuYW1lPSJTdWJ0cmFjdFNlcnZpY2VDb21wb25lbnQiPgotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5TdWJ0cmFjdFNlcnZpY2VJbXBsIi8+Ci0gICAgPC9jb21wb25lbnQ+Ci0KLSAgICA8Y29tcG9uZW50IG5hbWU9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCI+Ci0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLk11bHRpcGx5U2VydmljZUltcGwiLz4KLSAgICA8L2NvbXBvbmVudD4KLQotICAgIDxjb21wb25lbnQgbmFtZT0iRGl2aWRlU2VydmljZUNvbXBvbmVudCI+Ci0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLkRpdmlkZVNlcnZpY2VJbXBsIi8+Ci0gICAgPC9jb21wb25lbnQ+Ci0KLTwvY29tcG9zaXRlPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNjAxMmUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08Y29udHJpYnV0aW9uIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCi0gICAgICAgICAgICAgIHhtbG5zOnNhbXBsZT0iaHR0cDovL3NhbXBsZSI+Ci0gICA8ZGVwbG95YWJsZSBjb21wb3NpdGU9InNhbXBsZTpDYWxjdWxhdG9yIi8+Ci08L2NvbnRyaWJ1dGlvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQzMDI0Zi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3Ivc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2UgY2FsY3VsYXRvcjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi0vKioKLSAqIEEgdW5pdCB0ZXN0IG9mIHRoZSBiYXNpYyBKYXZhIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgaW4gdGhpcyBjb250cmlidXRpb24gCi0gKiB3aXRob3V0IHVzaW5nIFNDQQotICovCi1wdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclRlc3RDYXNlIHsKLQotICAgIEBUZXN0Ci0gICAgcHVibGljIHZvaWQgdGVzdENhbGN1bGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgQWRkU2VydmljZSBhZGQgPSBuZXcgQWRkU2VydmljZUltcGwoKTsKLSAgICAgICAgU3VidHJhY3RTZXJ2aWNlIHN1YnRyYWN0ID0gbmV3IFN1YnRyYWN0U2VydmljZUltcGwoKTsKLSAgICAgICAgTXVsdGlwbHlTZXJ2aWNlIG11bHRpcGx5ID0gbmV3IE11bHRpcGx5U2VydmljZUltcGwoKTsKLSAgICAgICAgRGl2aWRlU2VydmljZSBkaXZpZGUgPSBuZXcgRGl2aWRlU2VydmljZUltcGwoKTsKLSAgICAgICAgCi0gICAgICAgIENhbGN1bGF0b3JTZXJ2aWNlSW1wbCBjYWxjdWxhdG9yID0gbmV3IENhbGN1bGF0b3JTZXJ2aWNlSW1wbCgpOwotICAgICAgICAKLSAgICAgICAgY2FsY3VsYXRvci5zZXRBZGRTZXJ2aWNlKGFkZCk7Ci0gICAgICAgIGNhbGN1bGF0b3Iuc2V0U3VidHJhY3RTZXJ2aWNlKHN1YnRyYWN0KTsKLSAgICAgICAgY2FsY3VsYXRvci5zZXRNdWx0aXBseVNlcnZpY2UobXVsdGlwbHkpOwotICAgICAgICBjYWxjdWxhdG9yLnNldERpdmlkZVNlcnZpY2UoZGl2aWRlKTsKLSAgICAgICAgCi0gICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLmFkZCgzLCAyKSwgNS4wLCAwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNhbGN1bGF0b3Iuc3VidHJhY3QoMywgMiksIDEuMCwgMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLm11bHRpcGx5KDMsIDIpLCA2LjAsIDApOwotICAgICAgICBhc3NlcnRFcXVhbHMoY2FsY3VsYXRvci5kaXZpZGUoMywgMiksIDEuNSwgMCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL1JFQURNRSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjZjE4ZWMuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLUNhbGN1bGF0b3IgU2FtcGxlIENvbnRyaWJ1dGlvbgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVRoaXMgc2FtcGxlIGltcGxlbWVudHMgYSBzaW1wbGUgY2FsY3VsYXRvciB1c2luZyBTQ0EgY29tcG9uZW50cy4gCi0KLVRoZSBSRUFETUUgaW4gdGhlIDxkaXN0cmlidXRpb24tdW5wYWNrLWRpcj4vc2FtcGxlcyBkaXJlY3RvcnkgcHJvdmlkZXMgCi1nZW5lcmFsIGluc3RydWN0aW9ucyBhYm91dCBidWlsZGluZyBhbmQgcnVubmluZyBzYW1wbGVzLiAoIHdoZXJlCi1kaXN0cmlidXRpb24tdW5wYWNrLWRpciBpcyB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdSB1bnBhY2tlZCB0aGUgdHVzY2FueQotYmluYXJ5IGRpc3RyaWJ1dGlvbiBhcmNoaXZlKSBUYWtlIGEgbG9vayB0aGVyZSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBsYXVuY2gKLXRoaXMgc2FtcGxlIGNvbnRyaWJ1dGlvbi4gCi0KLVNhbXBsZSBPdmVydmlldwotLS0tLS0tLS0tLS0tLS0tCi1UaGUgc2FtcGxlIHByb3ZpZGVzIGEgc2luZ2xlIGNhbGN1bGF0b3Igc2VydmljZSB3aXRoIGEgZGVmYXVsdCBTQ0EgKGphdmEpIAotYmluZGluZy4gVGhlIENhbGN1bGF0b3JDbGllbnQgZXhlcmNpc2VzIHRoaXMgaW50ZXJmYWNlIGJ5IGNhbGxpbmcgYWRkLCAKLXN1YnRyYWN0LCBtdWx0aXBseSBhbmQgZGl2aWRlIG9wZXJhdGlvbnMuIFRoaXMgcmVzdWx0cyBpbiBtZXNzYWdlcyBwYXNzaW5nIHRvIAotdGhlIGFwcHJvcHJpYXRlIGNvbXBvbmVudHMgaW4gdGhlIGNvbXBvc2l0ZSBhY3Jvc3MgdGhlIGxvY2FsIHdpcmVzLgotCi1Zb3Ugc2hvdWxkIHNlZSB0aGUgZm9sbG93aW5nIG91dHB1dCBmcm9tIHRoZSBydW4gdGFyZ2V0LgotCi1ydW46Ci0gICAgIFtqYXZhXSAzICsgMj01LjAKLSAgICAgW2phdmFdIDMgLSAyPTEuMAotICAgICBbamF2YV0gMyAqIDI9Ni4wCi0gICAgIFtqYXZhXSAzIC8gMj0xLjUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9idWlsZC54bWwgYi9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGI1M2NjLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci0JCi08cHJvamVjdCBuYW1lPSJpbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IiIGRlZmF1bHQ9ImNvbXBpbGUiPiAKLSAgICAKLSAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4iLz4KLSAgICA8cHJvcGVydHkgbmFtZT0iamFyLm5hbWUiICAgdmFsdWU9ImNvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IuamFyIiAvPgotICAgIAotICAgIDxlY2hvPiR7dHVzY2FueS5ob21lfTwvZWNobz4KLQotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+IAotICAgICAgPGRlbGV0ZSBxdWlldD0idHJ1ZSIgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+IAotICAgICAgICAgPGZpbGVzZXQgZGlyPSJ0YXJnZXQiLz4gCi0gICAgICA8L2RlbGV0ZT4gCi0gICAgICA8bWtkaXIgZGlyPSJ0YXJnZXQvY2xhc3NlcyIvPiAKLSAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiPgotICAgICAgPGphdmFjIHNyY2Rpcj0ic3JjL21haW4vamF2YSIgCi0gICAgICAgICAgICAgZGVzdGRpcj0idGFyZ2V0L2NsYXNzZXMiIAotICAgICAgICAgICAgIGRlYnVnPSJvbiIKLSAgICAgICAgICAgICBzb3VyY2U9IjEuNSIKLSAgICAgICAgICAgICB0YXJnZXQ9IjEuNSIKLSAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+IAotICAgICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2xpYiI+Ci0gICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LXNjYS1hcGktKi5qYXIiIC8+Ci0gICAgICAgICAgICA8L2ZpbGVzZXQ+Ci0gICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgIDwvamF2YWM+IAotICAgICAgPGNvcHkgdG9kaXI9InRhcmdldC9jbGFzc2VzIj4gCi0gICAgICAgICA8ZmlsZXNldCBkaXI9InNyYy9tYWluL3Jlc291cmNlcyIvPiAKLSAgICAgIDwvY29weT4gCi0gICAgICA8amFyIGRlc3RmaWxlPSJ0YXJnZXQvJHtqYXIubmFtZX0iIGJhc2VkaXI9InRhcmdldC9jbGFzc2VzIj4gCi0gICAgICAgICA8bWFuaWZlc3Q+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik1haW4tQ2xhc3MiIHZhbHVlPSIke21haW4uY2xhc3N9IiAvPiAKLSAgICAgICAgIDwvbWFuaWZlc3Q+Ci0gICAgICA8L2phcj4gICAgICAgIAotICAgIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3BvbS54bWwgYi9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGIxMjc3Mi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+c2FtcGxlLWNvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3I8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBDb250cmlidXRpb24gSW1wbGVtZW50YXRpb24gSmF2YSBDYWxjdWxhdG9yPC9uYW1lPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgIAotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIAotICAgIDxidWlsZD4KLSAgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+Ci0gICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgIDwvcGx1Z2luPgotICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODg0NTFlLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2UgY2FsY3VsYXRvcjsKLQotLyoqCi0gKiBUaGUgQWRkIHNlcnZpY2UgaW50ZXJmYWNlCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgQWRkU2VydmljZSB7Ci0KLSAgICBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Y2E4ZmIwLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEFkZCBzZXJ2aWNlCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEFkZFNlcnZpY2UgewotCi0gICAgcHVibGljIGRvdWJsZSBhZGQoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsKLSAgICAgICAgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoImNhbGN1bGF0b3IiKTsKLSAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJBZGRpbmcgIiArIG4xICsgIiBhbmQgIiArIG4yKTsKLSAgICAgICAgcmV0dXJuIG4xICsgbjI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGM5OGQ3Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBjYWxjdWxhdG9yOwotCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5FYWdlckluaXQ7Ci1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Jbml0OwotaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOwotaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2NvcGU7Ci0KLS8qKgotICogVGhpcyBjbGllbnQgcHJvZ3JhbSBzaG93cyBob3cgdG8gY3JlYXRlIGFuIFNDQSBydW50aW1lLCBzdGFydCBpdCwKLSAqIGFuZCBsb2NhdGUgYW5kIGludm9rZSBhIFNDQSBjb21wb25lbnQKLSAqLwotQFNjb3BlKCJDT01QT1NJVEUiKSBARWFnZXJJbml0Ci1wdWJsaWMgY2xhc3MgQ2FsY3VsYXRvckNsaWVudCB7Ci0gICAgCi0gICAgcHJpdmF0ZSBDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yU2VydmljZTsKLQotICAgIEBSZWZlcmVuY2UKLSAgICBwdWJsaWMgdm9pZCBzZXRDYWxjdWxhdG9yU2VydmljZShDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yU2VydmljZSkgewotICAgICAgICB0aGlzLmNhbGN1bGF0b3JTZXJ2aWNlID0gY2FsY3VsYXRvclNlcnZpY2U7Ci0gICAgfQotICAgIAotICAgIEBJbml0Ci0gICAgcHVibGljIHZvaWQgY2FsY3VsYXRlKCkgewotCi0gICAgICAgIC8vIENhbGN1bGF0ZQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNDQSBBUEkgQ2xhc3NMb2FkZXI6ICIgKyBwcmludChSZWZlcmVuY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSkpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgKyAyPSIgKyBjYWxjdWxhdG9yU2VydmljZS5hZGQoMywgMikpOwotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgLSAyPSIgKyBjYWxjdWxhdG9yU2VydmljZS5zdWJ0cmFjdCgzLCAyKSk7Ci0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAqIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLm11bHRpcGx5KDMsIDIpKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzIC8gMj0iICsgY2FsY3VsYXRvclNlcnZpY2UuZGl2aWRlKDMsIDIpKTsKLSAgICB9Ci0gICAgCi0gICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHByaW50KENsYXNzTG9hZGVyIGNsKSB7Ci0gICAgICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgICAgIGZvciAoOyBjbCAhPSBudWxsOykgewotICAgICAgICAgICAgYnVmLmFwcGVuZChjbC50b1N0cmluZygpKTsKLSAgICAgICAgICAgIGJ1Zi5hcHBlbmQoJyAnKTsKLSAgICAgICAgICAgIGNsID0gY2wuZ2V0UGFyZW50KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhIGIvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTFjZGFhLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKLQotLyoqCi0gKiBUaGUgQ2FsY3VsYXRvciBzZXJ2aWNlIGludGVyZmFjZS4KLSAqLwotQFJlbW90YWJsZQotcHVibGljIGludGVyZmFjZSBDYWxjdWxhdG9yU2VydmljZSB7Ci0KLSAgICBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotICAgIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMik7Ci0KLSAgICBkb3VibGUgbXVsdGlwbHkoZG91YmxlIG4xLCBkb3VibGUgbjIpOwotCi0gICAgZG91YmxlIGRpdmlkZShkb3VibGUgbjEsIGRvdWJsZSBuMik7Ci0KLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxN2ZhZDdkLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLSAqLwotcGFja2FnZSBjYWxjdWxhdG9yOwotCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7Ci0KLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ2FsY3VsYXRvciBzZXJ2aWNlLgotICovCi1wdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclNlcnZpY2VJbXBsIGltcGxlbWVudHMgQ2FsY3VsYXRvclNlcnZpY2UgewotCi0gICAgcHJpdmF0ZSBBZGRTZXJ2aWNlIGFkZFNlcnZpY2U7Ci0gICAgcHJpdmF0ZSBTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3RTZXJ2aWNlOwotICAgIHByaXZhdGUgTXVsdGlwbHlTZXJ2aWNlIG11bHRpcGx5U2VydmljZTsKLSAgICBwcml2YXRlIERpdmlkZVNlcnZpY2UgZGl2aWRlU2VydmljZTsKLQotICAgIEBSZWZlcmVuY2UKLSAgICBwdWJsaWMgdm9pZCBzZXRBZGRTZXJ2aWNlKEFkZFNlcnZpY2UgYWRkU2VydmljZSkgewotICAgICAgICB0aGlzLmFkZFNlcnZpY2UgPSBhZGRTZXJ2aWNlOwotICAgIH0KLQotICAgIEBSZWZlcmVuY2UKLSAgICBwdWJsaWMgdm9pZCBzZXRTdWJ0cmFjdFNlcnZpY2UoU3VidHJhY3RTZXJ2aWNlIHN1YnRyYWN0U2VydmljZSkgewotICAgICAgICB0aGlzLnN1YnRyYWN0U2VydmljZSA9IHN1YnRyYWN0U2VydmljZTsKLSAgICB9Ci0KLSAgICBAUmVmZXJlbmNlCi0gICAgcHVibGljIHZvaWQgc2V0RGl2aWRlU2VydmljZShEaXZpZGVTZXJ2aWNlIGRpdmlkZVNlcnZpY2UpIHsKLSAgICAgICAgdGhpcy5kaXZpZGVTZXJ2aWNlID0gZGl2aWRlU2VydmljZTsKLSAgICB9Ci0KLSAgICBAUmVmZXJlbmNlCi0gICAgcHVibGljIHZvaWQgc2V0TXVsdGlwbHlTZXJ2aWNlKE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2UpIHsKLSAgICAgICAgdGhpcy5tdWx0aXBseVNlcnZpY2UgPSBtdWx0aXBseVNlcnZpY2U7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBhZGQoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsKLSAgICAgICAgcmV0dXJuIGFkZFNlcnZpY2UuYWRkKG4xLCBuMik7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMikgewotICAgICAgICByZXR1cm4gc3VidHJhY3RTZXJ2aWNlLnN1YnRyYWN0KG4xLCBuMik7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMikgewotICAgICAgICByZXR1cm4gbXVsdGlwbHlTZXJ2aWNlLm11bHRpcGx5KG4xLCBuMik7Ci0gICAgfQotCi0gICAgcHVibGljIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsKLSAgICAgICAgcmV0dXJuIGRpdmlkZVNlcnZpY2UuZGl2aWRlKG4xLCBuMik7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGQyNDgyLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2UgY2FsY3VsYXRvcjsKLQotLyoqCi0gKiBUaGUgZGl2aWRlIHNlcnZpY2UgaW50ZXJmYWNlCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgRGl2aWRlU2VydmljZSB7Ci0KLSAgICBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzIzZWRmLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERpdmlkZSBzZXJ2aWNlLgotICovCi1wdWJsaWMgY2xhc3MgRGl2aWRlU2VydmljZUltcGwgaW1wbGVtZW50cyBEaXZpZGVTZXJ2aWNlIHsKLQotICAgIHB1YmxpYyBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7Ci0gICAgICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJjYWxjdWxhdG9yIik7Ci0gICAgICAgIGxvZ2dlci5sb2coTGV2ZWwuRklORVNULCAiRGl2aWRpbmcgIiArIG4xICsgIiB3aXRoICIgKyBuMik7Ci0gICAgICAgIHJldHVybiBuMSAvIG4yOwotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyOTA2MDUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLS8qKgotICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UKLSAqLwotcHVibGljIGludGVyZmFjZSBNdWx0aXBseVNlcnZpY2UgewotCi0gICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsKLQotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFiODAzYi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotICovCi1wYWNrYWdlIGNhbGN1bGF0b3I7Ci0KLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsKLWltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7Ci0KLS8qKgotICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIE11bHRpcGx5IHNlcnZpY2UuCi0gKi8KLXB1YmxpYyBjbGFzcyBNdWx0aXBseVNlcnZpY2VJbXBsIGltcGxlbWVudHMgTXVsdGlwbHlTZXJ2aWNlIHsKLQotICAgIHB1YmxpYyBkb3VibGUgbXVsdGlwbHkoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsKLSAgICAgICAgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoImNhbGN1bGF0b3IiKTsKLSAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJNdWx0aXBseWluZyAiICsgbjEgKyAiIHdpdGggIiArIG4yKTsKLSAgICAgICAgcmV0dXJuIG4xICogbjI7Ci0gICAgfQotCi19CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhIGIvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYwZDE4OC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2UgY2FsY3VsYXRvcjsKLQotLyoqCi0gKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbXVsdGlwbHkgc2VydmljZQotICovCi1wdWJsaWMgaW50ZXJmYWNlIFN1YnRyYWN0U2VydmljZSB7Ci0KLSAgICBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpOwotCi19CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGNjNGEzLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2UgY2FsY3VsYXRvcjsKLQotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOwotaW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsKLQotLyoqCi0gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3VidHJhY3Qgc2VydmljZS4KLSAqLwotcHVibGljIGNsYXNzIFN1YnRyYWN0U2VydmljZUltcGwgaW1wbGVtZW50cyBTdWJ0cmFjdFNlcnZpY2UgewotCi0gICAgcHVibGljIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMikgewotICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOwotICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkVTVCwgIlN1YnRyYWN0aW5nICIgKyBuMSArICIgZnJvbSAiICsgbjIpOwotICAgICAgICByZXR1cm4gbjEgLSBuMjsKLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUgYi9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWJlYTU3Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUiCi0gICAgICAgICAgIHhtbG5zOnNhbXBsZT0iaHR0cDovL3NhbXBsZSIKLSAgICAgICAgICAgbmFtZT0iQ2FsY3VsYXRvciI+Ci0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50Ij4KLQkJPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuQ2FsY3VsYXRvclNlcnZpY2VJbXBsIi8+Ci0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iYWRkU2VydmljZSIgdGFyZ2V0PSJBZGRTZXJ2aWNlQ29tcG9uZW50IiAvPgotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InN1YnRyYWN0U2VydmljZSIgdGFyZ2V0PSJTdWJ0cmFjdFNlcnZpY2VDb21wb25lbnQiIC8+Ci0gICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ibXVsdGlwbHlTZXJ2aWNlIiB0YXJnZXQ9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCIgLz4KLSAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJkaXZpZGVTZXJ2aWNlIiB0YXJnZXQ9IkRpdmlkZVNlcnZpY2VDb21wb25lbnQiIC8+Ci0gICAgPC9jb21wb25lbnQ+Ci0KLSAgICA8Y29tcG9uZW50IG5hbWU9IkFkZFNlcnZpY2VDb21wb25lbnQiPgotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5BZGRTZXJ2aWNlSW1wbCIvPgotICAgIDwvY29tcG9uZW50PgotCi0gICAgPGNvbXBvbmVudCBuYW1lPSJTdWJ0cmFjdFNlcnZpY2VDb21wb25lbnQiPgotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5TdWJ0cmFjdFNlcnZpY2VJbXBsIi8+Ci0gICAgPC9jb21wb25lbnQ+Ci0KLSAgICA8Y29tcG9uZW50IG5hbWU9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCI+Ci0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLk11bHRpcGx5U2VydmljZUltcGwiLz4KLSAgICA8L2NvbXBvbmVudD4KLQotICAgIDxjb21wb25lbnQgbmFtZT0iRGl2aWRlU2VydmljZUNvbXBvbmVudCI+Ci0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLkRpdmlkZVNlcnZpY2VJbXBsIi8+Ci0gICAgPC9jb21wb25lbnQ+Ci0KLTwvY29tcG9zaXRlPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZSBiL3NhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvckNsaWVudC5jb21wb3NpdGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmZDMyNzYuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KLSAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2FtcGxlIg0KLSAgICAgICAgICAgeG1sbnM6c2FtcGxlPSJodHRwOi8vc2FtcGxlIg0KLSAgICAgICAgICAgbmFtZT0iQ2FsY3VsYXRvckNsaWVudCI+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iQ2FsY3VsYXRvckNsaWVudCI+DQotCQk8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5DYWxjdWxhdG9yQ2xpZW50Ii8+DQotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImNhbGN1bGF0b3JTZXJ2aWNlIiB0YXJnZXQ9IkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50IiAvPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi08L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU0YTcwMC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLXBhY2thZ2UgY2FsY3VsYXRvcjsKLQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKLQotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotCi0vKioKLSAqIFRoaXMgc2hvd3MgaG93IHRvIHRlc3QgdGhlIENhbGN1bGF0b3IgY29tcG9zaXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBDYWxjdWxhdG9yVGVzdENhc2UgewotCi0gICAgQFRlc3QKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICBBZGRTZXJ2aWNlIGFkZCA9IG5ldyBBZGRTZXJ2aWNlSW1wbCgpOwotICAgICAgICBTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3QgPSBuZXcgU3VidHJhY3RTZXJ2aWNlSW1wbCgpOwotICAgICAgICBNdWx0aXBseVNlcnZpY2UgbXVsdGlwbHkgPSBuZXcgTXVsdGlwbHlTZXJ2aWNlSW1wbCgpOwotICAgICAgICBEaXZpZGVTZXJ2aWNlIGRpdmlkZSA9IG5ldyBEaXZpZGVTZXJ2aWNlSW1wbCgpOwotICAgICAgICAKLSAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2VJbXBsIGNhbGN1bGF0b3IgPSBuZXcgQ2FsY3VsYXRvclNlcnZpY2VJbXBsKCk7Ci0gICAgICAgIAotICAgICAgICBjYWxjdWxhdG9yLnNldEFkZFNlcnZpY2UoYWRkKTsKLSAgICAgICAgY2FsY3VsYXRvci5zZXRTdWJ0cmFjdFNlcnZpY2Uoc3VidHJhY3QpOwotICAgICAgICBjYWxjdWxhdG9yLnNldE11bHRpcGx5U2VydmljZShtdWx0aXBseSk7Ci0gICAgICAgIGNhbGN1bGF0b3Iuc2V0RGl2aWRlU2VydmljZShkaXZpZGUpOwotICAgICAgICAKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNhbGN1bGF0b3IuYWRkKDMsIDIpLCA1LjAsIDApOwotICAgICAgICBhc3NlcnRFcXVhbHMoY2FsY3VsYXRvci5zdWJ0cmFjdCgzLCAyKSwgMS4wLCAwKTsKLSAgICAgICAgYXNzZXJ0RXF1YWxzKGNhbGN1bGF0b3IubXVsdGlwbHkoMywgMiksIDYuMCwgMCk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLmRpdmlkZSgzLCAyKSwgMS41LCAwKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9wb20ueG1sIGIvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmI5MzhkMy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBPU0dpIFJlbW90ZSBTZXJ2aWNlcyBDYWN1bGF0b3IgT3BlcmF0aW9ucyBTYW1wbGU8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1lamF2YTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWxhdW5jaGVyLWVxdWlub3g8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsLW9zZ2k8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLm9zZ2k8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi4wLXYyMDA5MDUyMC0xODAwPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPCEtLSBFcXVpbm94IERlY2xhcmF0aXZlIFNlcnZpY2VzIC0tPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmVxdWlub3g8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5kczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4wLXYyMDA5MDYwMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZXF1aW5veDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnV0aWw8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjAuMTAwLXYyMDA5MDUyMC0xODAwPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgIDwvZGVwZW5kZW5jaWVzPgotCi0gICAgPGJ1aWxkPgotICAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KLSAgICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWVjbGlwc2UtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNS4xPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmQ+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvYnVpbGRjb21tYW5kPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZD5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvYnVpbGRjb21tYW5kPgotICAgICAgICAgICAgICAgICAgICA8L2J1aWxkY29tbWFuZHM+Ci0gICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlcz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L3Byb2plY3RuYXR1cmU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvamVjdG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9wcm9qZWN0bmF0dXJlPgotICAgICAgICAgICAgICAgICAgICA8L3Byb2plY3RuYXR1cmVzPgotICAgICAgICAgICAgICAgICAgICA8Y2xhc3NwYXRoQ29udGFpbmVycz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGhDb250YWluZXI+b3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2NsYXNzcGF0aENvbnRhaW5lcj4KLSAgICAgICAgICAgICAgICAgICAgPC9jbGFzc3BhdGhDb250YWluZXJzPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotCi0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphci1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxhcmNoaXZlPgotICAgICAgICAgICAgICAgICAgICAgICAgPG1hbmlmZXN0RmlsZT4ke2Jhc2VkaXJ9L01FVEEtSU5GL01BTklGRVNULk1GPC9tYW5pZmVzdEZpbGU+Ci0gICAgICAgICAgICAgICAgICAgIDwvYXJjaGl2ZT4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLQotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1vc2dpLWp1bml0LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjA8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1sYXVuY2hlci1lcXVpbm94PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPgotICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5vc2dpLXRlc3Q8L2lkPgotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnRlc3Q8L3BoYXNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnRlc3Q8L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN5c3RlbVByb3BlcnRpZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm9zZ2kuY29uZmlndXJhdGlvbi5hcmVhPC9uYW1lPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L2VxdWlub3g8L3ZhbHVlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3lzdGVtUHJvcGVydGllcz4gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy90ZXN0L09wZXJhdGlvbnNPU0dpTm9kZVRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy90ZXN0L09wZXJhdGlvbnNPU0dpTm9kZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5YzVhYWIuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvdGVzdC9PcGVyYXRpb25zT1NHaU5vZGVUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLnRlc3Q7Ci0KLWltcG9ydCBzdGF0aWMgY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLnRlc3QuT1NHaVRlc3RVdGlscy5idW5kbGVTdGF0dXM7Ci0KLWltcG9ydCBqYXZhLnJtaS5yZWdpc3RyeS5Mb2NhdGVSZWdpc3RyeTsKLWltcG9ydCBqYXZhLnJtaS5yZWdpc3RyeS5SZWdpc3RyeTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5lcXVpbm94LmxhdW5jaGVyLkVxdWlub3hIb3N0OwotaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOwotaW1wb3J0IG9yZy5qdW5pdC5Bc3NlcnQ7Ci1pbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOwotaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkNvbnN0YW50czsKLQotaW1wb3J0IGNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5BZGRTZXJ2aWNlOwotCi0vKioKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBPcGVyYXRpb25zT1NHaU5vZGVUZXN0Q2FzZSB7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgRXF1aW5veEhvc3QgaG9zdDsKLSAgICBwcml2YXRlIHN0YXRpYyBCdW5kbGVDb250ZXh0IGNvbnRleHQ7Ci0gICAgcHJpdmF0ZSBzdGF0aWMgQnVuZGxlIG9wZXJhdGlvbnNCdW5kbGU7Ci0KLSAgICAvKioKLSAgICAgKiBAdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KLSAgICAgKi8KLSAgICBAQmVmb3JlQ2xhc3MKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VXBCZWZvcmVDbGFzcygpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICB0cnkgewotICAgICAgICAgICAgaG9zdCA9IG5ldyBFcXVpbm94SG9zdCgpOwotICAgICAgICAgICAgY29udGV4dCA9IGhvc3Quc3RhcnQoKTsKLQotICAgICAgICAgICAgZm9yIChCdW5kbGUgYiA6IGNvbnRleHQuZ2V0QnVuZGxlcygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGIuZ2V0U3ltYm9saWNOYW1lKCkuZXF1YWxzKCJvcmcuZWNsaXBzZS5lcXVpbm94LmRzIikgfHwgYi5nZXRTeW1ib2xpY05hbWUoKQotICAgICAgICAgICAgICAgICAgICAuc3RhcnRzV2l0aCgib3JnLmFwYWNoZS50dXNjYW55LnNjYS4iKSkgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGIuZ2V0SGVhZGVycygpLmdldChDb25zdGFudHMuRlJBR01FTlRfSE9TVCkgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBub24tZnJhZ21lbnQgYnVuZGxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYi5zdGFydCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYnVuZGxlU3RhdHVzKGIsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgiY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zIi5lcXVhbHMoYi5nZXRTeW1ib2xpY05hbWUoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uc0J1bmRsZSA9IGI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAob3BlcmF0aW9uc0J1bmRsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgb3BlcmF0aW9uc0J1bmRsZS5zdGFydCgpOwotICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihidW5kbGVTdGF0dXMob3BlcmF0aW9uc0J1bmRsZSwgZmFsc2UpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RPU0dpKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gTG9jYXRlUmVnaXN0cnkuZ2V0UmVnaXN0cnkoODA4NSk7Ci0gICAgICAgIE9iamVjdCBhZGQgPSByZWdpc3RyeS5sb29rdXAoIkFkZFNlcnZpY2UiKTsKLSAgICAgICAgQWRkU2VydmljZSBhZGRTZXJ2aWNlID0gT1NHaVRlc3RVdGlscy5jYXN0KGFkZCwgQWRkU2VydmljZS5jbGFzcyk7Ci0gICAgICAgIGRvdWJsZSBzdW0gPSBhZGRTZXJ2aWNlLmFkZCgxLjAsIDIuMCk7Ci0gICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMy4wLCBzdW0sIDAuMCk7Ci0gICAgfQotCi0gICAgLyoqCi0gICAgICogQHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCi0gICAgICovCi0gICAgQEFmdGVyQ2xhc3MKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVhckRvd25BZnRlckNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIGlmIChob3N0ICE9IG51bGwpIHsKLSAgICAgICAgICAgIGhvc3Quc3RvcCgpOwotICAgICAgICAgICAgY29udGV4dCA9IG51bGw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9wb20ueG1sIGIvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljNjZhYjUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLQotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1kb3NnaS1jYWxjdWxhdG9yPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBPU0dpIFJlbW90ZSBTZXJ2aWNlcyBDYWxjdWxhdG9yIFNhbXBsZTwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWVqYXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLXdlYnNlcnZpY2U8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+Ci0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGwtb3NnaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uub3NnaTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VzPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+My4yLjAtdjIwMDkwNTIwLTE4MDA8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDwhLS0gRXF1aW5veCBEZWNsYXJhdGl2ZSBTZXJ2aWNlcyAtLT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5lcXVpbm94PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZHM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjEuMC12MjAwOTA2MDE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmVxdWlub3g8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD51dGlsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS4wLjEwMC12MjAwOTA1MjAtMTgwMDwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgotICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZWNsaXBzZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+Mi41LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmRzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZD5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9idWlsZGNvbW1hbmQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9idWlsZGNvbW1hbmQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvYnVpbGRjb21tYW5kcz4KLSAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmVzPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvcHJvamVjdG5hdHVyZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L3Byb2plY3RuYXR1cmU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcHJvamVjdG5hdHVyZXM+Ci0gICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGhDb250YWluZXJzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aENvbnRhaW5lcj5vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xhc3NwYXRoQ29udGFpbmVyPgotICAgICAgICAgICAgICAgICAgICA8L2NsYXNzcGF0aENvbnRhaW5lcnM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamFyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGFyY2hpdmU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7YmFzZWRpcn0vTUVUQS1JTkYvTUFOSUZFU1QuTUY8L21hbmlmZXN0RmlsZT4KLSAgICAgICAgICAgICAgICAgICAgPC9hcmNoaXZlPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotCi0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLW9zZ2ktanVuaXQtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWxhdW5jaGVyLWVxdWlub3g8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgotICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm9zZ2ktdGVzdDwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dGVzdDwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+dGVzdDwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3lzdGVtUHJvcGVydGllcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+b3NnaS5jb25maWd1cmF0aW9uLmFyZWE8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vZXF1aW5veDwvdmFsdWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zeXN0ZW1Qcm9wZXJ0aWVzPiAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvUkVBRE1FIGIvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3YTRjYmEuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotRGlzdHJpYnV0ZWQgT1NHaSBDYWxjdWxhdG9yIFNhbXBsZQ0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi1UaGlzIHNhbXBsZSBpbXBsZW1lbnRzIGEgZGlzdHJpYnV0ZWQgY2FsY3VsYXRvciB1c2luZyBEaXN0cmlidXRlZCBPU0dpIChSRkMgMTE5KSBvdmVyIFNDQS4NCi0NCi1UaGUgUkVBRE1FIGluIHRoZSA8ZGlzdHJpYnV0aW9uLXVucGFjay1kaXI+L3NhbXBsZXMgZGlyZWN0b3J5IHByb3ZpZGVzIA0KLWdlbmVyYWwgaW5zdHJ1Y3Rpb25zIGFib3V0IGJ1aWxkaW5nIGFuZCBydW5uaW5nIHNhbXBsZXMuICh3aGVyZQ0KLWRpc3RyaWJ1dGlvbi11bnBhY2stZGlyIGlzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHVucGFja2VkIHRoZSB0dXNjYW55DQotYmluYXJ5IGRpc3RyaWJ1dGlvbiBhcmNoaXZlKS4gVGFrZSBhIGxvb2sgdGhlcmUgZmlyc3QgKG5vdGluZyBhdCB5b3UgcmVhZCBpdCB0aGF0IHRoaXMgc2FtcGxlDQotaXMgbm90IGEgbmV3IHN0eWxlIHNhbXBsZSkuIA0KLQ0KLU9uIFdpbmRvd3MsIHJ1bg0KLWphdmEgLWphciAuLlwuLlxtb2R1bGVzXG9zZ2ktMy41LjAtdjIwMDkwNTIwLmphciAtY29uZmlndXJhdGlvbiAuLlwuLlxmZWF0dXJlc1xjb25maWd1cmF0aW9uIC1jbGVhbiAtY29uc29sZQ0KLQ0KLU9uICpVbml4LCBydW4NCi1qYXZhIC1qYXIgLi4vLi4vbW9kdWxlcy9vc2dpLTMuNS4wLXYyMDA5MDUyMC5qYXIgLWNvbmZpZ3VyYXRpb24gLi4vLi4vZmVhdHVyZXMvY29uZmlndXJhdGlvbiAtY2xlYW4gLWNvbnNvbGUNCi0NCi1Zb3Ugc2hvdWxkIHNlZSB0aGUgb3NnaSBjb25zb2xlOg0KLQ0KLW9zZ2k+DQotDQotWW91IGNhbiBydW4gInNzIiBjb21tYW5kIHVuZGVyIHRoZSBvc2dpPiB0byBzZWUgdGhlIHN0YXR1cyBvZiB0aGUgYnVuZGxlcy4NCi1vc2dpPiBzcw0KLQ0KLVRoZW4geW91IGNhbiBpbnN0YWxsIGFuZCBzdGFydCB0aGUgY2FsY3VsYXRvci5kb3NnaSBidW5kbGU6DQotDQotb3NnaT4gaW5zdGFsbCBmaWxlOi4vdGFyZ2V0L3NhbXBsZS1kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy5qYXINCi1CdW5kbGUgaWQgaXMgMTk4DQotDQotb3NnaT4gc3RhcnQgMTk4DQotTm92IDQsIDIwMDkgNToxNjo1MSBQTSBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuaW1wbC5PcGVyYXRpb25zQWN0aXZhdG9yIHN0YXINCi10DQotSU5GTzogU3RhcnRpbmcgY2FsY3VsYXRvci5kb3NnaS5keW5hbWljLm9wZXJhdGlvbnNfMS4wLjAgWzE5OF0NCi1Ob3YgNCwgMjAwOSA1OjE2OjUxIFBNIGNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5pbXBsLk9wZXJhdGlvbnNBY3RpdmF0b3Igc3Rhcg0KLXQNCi1JTkZPOiBSZWdpc3RlcmluZyBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuQWRkU2VydmljZQ0KLU5vdiA0LCAyMDA5IDU6MTY6NTEgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmltcGwuTm9kZUltcGwgc3RhcnQNCi1JTkZPOiBTdGFydGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLmQzY2FkYjkzLWU5YjktNDQ4Ni04N2ViLTA3ZWNlMTE4ODhmNiBkb21haQ0KLW46IHR1c2NhbnkuYXBhY2hlLm9yZw0KLU5vdiA0LCAyMDA5IDU6MTY6NTEgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0LnJtaS5EZWZhdWx0Uk1JSG9zdCByZWdpc3RlclNlDQotcnZpY2UNCi1JTkZPOiBSTUkgc2VydmljZSByZWdpc3RlcmVkOiBybWk6Ly9sb2NhbGhvc3Q6ODA4NS9BZGRTZXJ2aWNlDQotTm92IDQsIDIwMDkgNToxNjo1MSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5FbmRwb2ludFJlZ2lzdHINCi15SW1wbCBhZGRFbmRwb2ludA0KLUlORk86IEFkZCBlbmRwb2ludCAtIChAODE0NDc0NClFbmRwb2ludDogIFVSSSA9IG9zZ2kuc2VydmljZS5kM2NhZGI5My1lOWI5LTQ0ODYtDQotODdlYi0wN2VjZTExODg4ZjYjc2VydmljZS1iaW5kaW5nKEFkZFNlcnZpY2UvQWRkKQ0KLU5vdiA0LCAyMDA5IDU6MTY6NTEgUE0gY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLmltcGwuT3BlcmF0aW9uc0FjdGl2YXRvciBzdGFyDQotdA0KLUlORk86IFJlZ2lzdGVyaW5nIGNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5TdWJ0cmFjdFNlcnZpY2UNCi1Ob3YgNCwgMjAwOSA1OjE2OjUxIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5pbXBsLk5vZGVJbXBsIHN0YXJ0DQotSU5GTzogU3RhcnRpbmcgbm9kZTogdXJuOm9zZ2kuc2VydmljZS5iNjI1OWNjYy02YWU0LTQxZjAtYjYxYi1jNWE4YzdmNDJiMzUgZG9tYWkNCi1uOiB0dXNjYW55LmFwYWNoZS5vcmcNCi1Ob3YgNCwgMjAwOSA1OjE2OjUxIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5ybWkuRGVmYXVsdFJNSUhvc3QgcmVnaXN0ZXJTZQ0KLXJ2aWNlDQotSU5GTzogUk1JIHNlcnZpY2UgcmVnaXN0ZXJlZDogcm1pOi8vbG9jYWxob3N0OjgwODUvU3VidHJhY3RTZXJ2aWNlDQotTm92IDQsIDIwMDkgNToxNjo1MSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5FbmRwb2ludFJlZ2lzdHINCi15SW1wbCBhZGRFbmRwb2ludA0KLUlORk86IEFkZCBlbmRwb2ludCAtIChAMzAyMjkxMTQpRW5kcG9pbnQ6ICBVUkkgPSBvc2dpLnNlcnZpY2UuYjYyNTljY2MtNmFlNC00MWYwDQotLWI2MWItYzVhOGM3ZjQyYjM1I3NlcnZpY2UtYmluZGluZyhTdWJ0cmFjdFNlcnZpY2UvU3VidHJhY3QpDQotTm92IDQsIDIwMDkgNToxNjo1MSBQTSBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuaW1wbC5PcGVyYXRpb25zQWN0aXZhdG9yIHN0YXINCi10DQotSU5GTzogUmVnaXN0ZXJpbmcgY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLk11bHRpcGx5U2VydmljZQ0KLU5vdiA0LCAyMDA5IDU6MTY6NTEgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmltcGwuTm9kZUltcGwgc3RhcnQNCi1JTkZPOiBTdGFydGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLjg0NjljNjRjLTlhMjgtNDdiMy1iYzRhLWM1ZmE4ZDQ3MTA1NyBkb21haQ0KLW46IHR1c2NhbnkuYXBhY2hlLm9yZw0KLU5vdiA0LCAyMDA5IDU6MTY6NTEgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0LnJtaS5EZWZhdWx0Uk1JSG9zdCByZWdpc3RlclNlDQotcnZpY2UNCi1JTkZPOiBSTUkgc2VydmljZSByZWdpc3RlcmVkOiBybWk6Ly9sb2NhbGhvc3Q6ODA4NS9NdWx0aXBseVNlcnZpY2UNCi1Ob3YgNCwgMjAwOSA1OjE2OjUxIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5hc3NlbWJseS5pbXBsLkVuZHBvaW50UmVnaXN0cg0KLXlJbXBsIGFkZEVuZHBvaW50DQotSU5GTzogQWRkIGVuZHBvaW50IC0gKEAzMzEyNzA0KUVuZHBvaW50OiAgVVJJID0gb3NnaS5zZXJ2aWNlLjg0NjljNjRjLTlhMjgtNDdiMy0NCi1iYzRhLWM1ZmE4ZDQ3MTA1NyNzZXJ2aWNlLWJpbmRpbmcoTXVsdGlwbHlTZXJ2aWNlL011bHRpcGx5KQ0KLU5vdiA0LCAyMDA5IDU6MTY6NTEgUE0gY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLmltcGwuT3BlcmF0aW9uc0FjdGl2YXRvciBzdGFyDQotdA0KLUlORk86IFJlZ2lzdGVyaW5nIGNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5EaXZpZGVTZXJ2aWNlDQotTm92IDQsIDIwMDkgNToxNjo1MSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuaW1wbC5Ob2RlSW1wbCBzdGFydA0KLUlORk86IFN0YXJ0aW5nIG5vZGU6IHVybjpvc2dpLnNlcnZpY2UuYjQzNTU1ZjAtOTUwOS00NDRlLWIyMmEtMDZkMzQ3YWI3ZTk4IGRvbWFpDQotbjogdHVzY2FueS5hcGFjaGUub3JnDQotTm92IDQsIDIwMDkgNToxNjo1MSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qucm1pLkRlZmF1bHRSTUlIb3N0IHJlZ2lzdGVyU2UNCi1ydmljZQ0KLUlORk86IFJNSSBzZXJ2aWNlIHJlZ2lzdGVyZWQ6IHJtaTovL2xvY2FsaG9zdDo4MDg1L0RpdmlkZVNlcnZpY2UNCi1Ob3YgNCwgMjAwOSA1OjE2OjUxIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5hc3NlbWJseS5pbXBsLkVuZHBvaW50UmVnaXN0cg0KLXlJbXBsIGFkZEVuZHBvaW50DQotSU5GTzogQWRkIGVuZHBvaW50IC0gKEA4MDEwMjg4KUVuZHBvaW50OiAgVVJJID0gb3NnaS5zZXJ2aWNlLmI0MzU1NWYwLTk1MDktNDQ0ZS0NCi1iMjJhLTA2ZDM0N2FiN2U5OCNzZXJ2aWNlLWJpbmRpbmcoRGl2aWRlU2VydmljZS9EaXZpZGUpDQotTm92IDQsIDIwMDkgNToxNjo1MSBQTSBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuaW1wbC5PcGVyYXRpb25zQWN0aXZhdG9yIGdldEINCi11bmRsZQ0KLUlORk86IGNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5BZGRTZXJ2aWNlIGlzIGxvYWRlZCBieSBidW5kbGU6IGNhbGN1bGF0b3IuZG9zDQotZ2kuZHluYW1pYy5vcGVyYXRpb25zDQotDQotb3NnaT4NCi0NCi1UbyBzdG9wIHRoZSBidW5kbGU6DQotDQotb3NnaT4gc3RvcCAxOTgNCi1Ob3YgNCwgMjAwOSA1OjE4OjQzIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5pbXBsLk5vZGVJbXBsIHN0b3ANCi1JTkZPOiBTdG9wcGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLmI0MzU1NWYwLTk1MDktNDQ0ZS1iMjJhLTA2ZDM0N2FiN2U5OA0KLU5vdiA0LCAyMDA5IDU6MTg6NDMgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5LmltcGwuRW5kcG9pbnRSZWdpc3RyDQoteUltcGwgZW5kcG9pbnRSZW1vdmVkDQotSU5GTzogUmVtb3ZlIGVuZHBvaW50IC0gKEA4MDEwMjg4KUVuZHBvaW50OiAgVVJJID0gb3NnaS5zZXJ2aWNlLmI0MzU1NWYwLTk1MDktNDQNCi00ZS1iMjJhLTA2ZDM0N2FiN2U5OCNzZXJ2aWNlLWJpbmRpbmcoRGl2aWRlU2VydmljZS9EaXZpZGUpDQotTm92IDQsIDIwMDkgNToxODo0MyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qucm1pLkRlZmF1bHRSTUlIb3N0IHVucmVnaXN0ZXINCi1TZXJ2aWNlDQotSU5GTzogUk1JIHNlcnZpY2UgdW5yZWdpc3RlcmVkOiBybWk6Ly9sb2NhbGhvc3Q6ODA4NS9EaXZpZGVTZXJ2aWNlDQotTm92IDQsIDIwMDkgNToxODo0MyBQTSBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuaW1wbC5PcGVyYXRpb25zQWN0aXZhdG9yIHN0b3ANCi0NCi1JTkZPOiBTdG9wcGluZyBjYWxjdWxhdG9yLmRvc2dpLmR5bmFtaWMub3BlcmF0aW9uc18xLjAuMCBbMTk4XQ0KLU5vdiA0LCAyMDA5IDU6MTg6NDMgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmltcGwuTm9kZUltcGwgc3RvcA0KLUlORk86IFN0b3BwaW5nIG5vZGU6IHVybjpvc2dpLnNlcnZpY2UuZDNjYWRiOTMtZTliOS00NDg2LTg3ZWItMDdlY2UxMTg4OGY2DQotTm92IDQsIDIwMDkgNToxODo0MyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5FbmRwb2ludFJlZ2lzdHINCi15SW1wbCBlbmRwb2ludFJlbW92ZWQNCi1JTkZPOiBSZW1vdmUgZW5kcG9pbnQgLSAoQDgxNDQ3NDQpRW5kcG9pbnQ6ICBVUkkgPSBvc2dpLnNlcnZpY2UuZDNjYWRiOTMtZTliOS00NA0KLTg2LTg3ZWItMDdlY2UxMTg4OGY2I3NlcnZpY2UtYmluZGluZyhBZGRTZXJ2aWNlL0FkZCkNCi1Ob3YgNCwgMjAwOSA1OjE4OjQzIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5ybWkuRGVmYXVsdFJNSUhvc3QgdW5yZWdpc3Rlcg0KLVNlcnZpY2UNCi1JTkZPOiBSTUkgc2VydmljZSB1bnJlZ2lzdGVyZWQ6IHJtaTovL2xvY2FsaG9zdDo4MDg1L0FkZFNlcnZpY2UNCi1Ob3YgNCwgMjAwOSA1OjE4OjQzIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5pbXBsLk5vZGVJbXBsIHN0b3ANCi1JTkZPOiBTdG9wcGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLmI2MjU5Y2NjLTZhZTQtNDFmMC1iNjFiLWM1YThjN2Y0MmIzNQ0KLU5vdiA0LCAyMDA5IDU6MTg6NDMgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5LmltcGwuRW5kcG9pbnRSZWdpc3RyDQoteUltcGwgZW5kcG9pbnRSZW1vdmVkDQotSU5GTzogUmVtb3ZlIGVuZHBvaW50IC0gKEAzMDIyOTExNClFbmRwb2ludDogIFVSSSA9IG9zZ2kuc2VydmljZS5iNjI1OWNjYy02YWU0LTQNCi0xZjAtYjYxYi1jNWE4YzdmNDJiMzUjc2VydmljZS1iaW5kaW5nKFN1YnRyYWN0U2VydmljZS9TdWJ0cmFjdCkNCi1Ob3YgNCwgMjAwOSA1OjE4OjQzIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5ybWkuRGVmYXVsdFJNSUhvc3QgdW5yZWdpc3Rlcg0KLVNlcnZpY2UNCi1JTkZPOiBSTUkgc2VydmljZSB1bnJlZ2lzdGVyZWQ6IHJtaTovL2xvY2FsaG9zdDo4MDg1L1N1YnRyYWN0U2VydmljZQ0KLU5vdiA0LCAyMDA5IDU6MTg6NDMgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmltcGwuTm9kZUltcGwgc3RvcA0KLUlORk86IFN0b3BwaW5nIG5vZGU6IHVybjpvc2dpLnNlcnZpY2UuODQ2OWM2NGMtOWEyOC00N2IzLWJjNGEtYzVmYThkNDcxMDU3DQotTm92IDQsIDIwMDkgNToxODo0MyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5FbmRwb2ludFJlZ2lzdHINCi15SW1wbCBlbmRwb2ludFJlbW92ZWQNCi1JTkZPOiBSZW1vdmUgZW5kcG9pbnQgLSAoQDMzMTI3MDQpRW5kcG9pbnQ6ICBVUkkgPSBvc2dpLnNlcnZpY2UuODQ2OWM2NGMtOWEyOC00Nw0KLWIzLWJjNGEtYzVmYThkNDcxMDU3I3NlcnZpY2UtYmluZGluZyhNdWx0aXBseVNlcnZpY2UvTXVsdGlwbHkpDQotTm92IDQsIDIwMDkgNToxODo0MyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qucm1pLkRlZmF1bHRSTUlIb3N0IHVucmVnaXN0ZXINCi1TZXJ2aWNlDQotSU5GTzogUk1JIHNlcnZpY2UgdW5yZWdpc3RlcmVkOiBybWk6Ly9sb2NhbGhvc3Q6ODA4NS9NdWx0aXBseVNlcnZpY2UNCi1Ob3YgNCwgMjAwOSA1OjE4OjQzIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5pbXBsLk5vZGVJbXBsIHN0b3ANCi1JTkZPOiBTdG9wcGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLmI0MzU1NWYwLTk1MDktNDQ0ZS1iMjJhLTA2ZDM0N2FiN2U5OA0KLQ0KLW9zZ2k+DQotDQotVG8gZXhpdCB0aGUgY29uc29sZSwgcnVuOg0KLW9zZ2k+IGV4aXQNCi0NCi1TYW1wbGUgT3ZlcnZpZXcNCi0tLS0tLS0tLS0tLS0tLS0NCi1UaGUgYXBwbGljYXRpb24gY29uc2lzdHMgb2YgdHdvIE9TR2kgYnVuZGxlczoNCi0gKiBUaGUgY2FsY3VsYXRvciBidW5kbGU6IEl0IHByb3ZpZGVzIHRoZSBjYWxjdWxhdG9yIHNlcnZpY2UuIFRoZSBzZXJ2aWNlIGlzIGltcGxlbWVudGVkIGJ5IGEgamF2YSBjbGFzcyB0aGF0DQotICAgY29uc3VtZXMgb3RoZXIgc2VydmljZXMgdG8gcGVyZm9ybSB0aGUgk2FkZJQsIJNzdWJ0cmFjdJQsIJNtdWx0aXBseZQgYW5kIJNkaXZpZGWUIG9wZXJhdGlvbnMuDQotICogVGhlIG9wZXJhdGlvbnMgYnVuZGxlOiBJdCBwcm92aWRlcyB0aGUgYWRkL3N1YnRyYWN0L211bHRpcGx5L2RpdmlkZSBzZXJ2aWNlcy4NCi0gICAoU2VlIC4uL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMpDQotDQotDQotZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvDQotICBzcmMvDQotICAgIG1haW4vDQotICAgICAgamF2YS8NCi0gICAgICAgIGNhbGN1bGF0b3IvDQotICAgICAgICAgICAgZG9zZ2kvDQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMvDQotICAgICAgICAgICAgICAgICAgICBBZGRTZXJ2aWNlLmphdmEgLSBJbnRlcmZhY2UgZm9yIEFkZA0KLSAgICAgICAgICAgICAgICAgICAgU3VidHJhY3RTZXJ2aWNlLmphdmEgLSBJbnRlcmZhY2UgZm9yIFN1YnRyYWN0DQotICAgICAgICAgICAgICAgICAgICBNdWx0aXBseVNlcnZpY2UuamF2YSAtIEludGVyZmFjZSBmb3IgTXVsdGlwbHkNCi0gICAgICAgICAgICAgICAgICAgIERpdmlkZVNlcnZpY2UuamF2YSAtIEludGVyZmFjZSBmb3IgRGl2aWRlDQotICAgICAgICAgICAgICAgICAgICBpbXBsLw0KLSAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbnNBY3RpdmF0b3IuamF2YSAtIE9TR2kgYnVuZGxlIGFjdGl2YXRvcg0KLSAgICAgICAgICAgICAgICAgICAgICAgIEFkZFNlcnZpY2VJbXBsLmphdmEgLSBJbXBsZW1lbnRhdGlvbiBmb3IgQWRkDQotICAgICAgICAgICAgICAgICAgICAgICAgU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhIC0gSW1wbGVtZW50YXRpb24gZm9yIFN1YnRyYWN0DQotICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhIC0gSW1wbGVtZW50YXRpb24gZm9yIE11bHRpcGx5DQotICAgICAgICAgICAgICAgICAgICAgICAgRGl2aWRlU2VydmljZUltcGwuamF2YSAtIEltcGxlbWVudGF0aW9uIGZvciBEaXZpZGUNCi0gICAgICByZXNvdXJjZXMvDQotICAgICAgICAgICAgTUVUQS1JTkYvDQotICAgICAgICAgICAgICAgIHNjYS1jb250cmlidXRpb24ueG1sDQotICAgICAgICAgICBPU0dJLUlORi8NCi0gICAgICAgICAgICAgICAgc2NhLWNvbmZpZy8NCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMtY29uZmlnLnhtbCAtIFRoZSBTQ0EgY29uZmlndXJhdGlvbiBmaWxlIGZvciBPU0dpIHJlbW90ZSBzZXJ2aWNlcw0KLSAgdGVzdC8NCi0gICAgamF2YS8NCi0gICAgICAgIHNyYy8NCi0gICAgICAgICAgICBjYWxjdWxhdG9yLw0KLSAgICAgICAgICAgICAgICBkb3NnaS8NCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMvDQotICAgICAgICAgICAgICAgICAgICAgICAgdGVzdC8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uc09TR2lOb2RlVGVzdENhc2UuamF2YSAtIFRoZSBKVU5JVCB0ZXN0IGNhc2UgdGhhdCB0ZXN0cyB0aGlzIGJ1bmRsZSB1c2luZyBhIFJNSSBjbGllbnQNCi0NCi0gIE1FVEEtSU5GLw0KLSAgICBNQU5JRkVTVC5NRiAtIFRoZSBPU0dpIG1hbmlmZXN0IGZvciB0aGlzIGJ1bmRsZQ0KLSAgcG9tLnhtbCAgICAgICAgICAgICAgICAgICAgICAgICAtIHRoZSBNYXZlbiBidWlsZCBmaWxlDQotDQotDQotDQotQnVpbGRpbmcgQW5kIFJ1bm5pbmcgVGhlIFRlc3QgQ2FzZSBVc2luZyBNYXZlbg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCi1XaXRoIGVpdGhlciB0aGUgYmluYXJ5IG9yIHNvdXJjZSBkaXN0cmlidXRpb25zIHRoZSBzYW1wbGUgY2FuIGJlIGJ1aWx0IGFuZCBydW4NCi11c2luZyBNYXZlbiBhcyBmb2xsb3dzLg0KLQ0KLWNkIGRvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zDQotbXZuDQotDQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9wb20ueG1sIGIvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTVhYTZlLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotCi0gICAgPGFydGlmYWN0SWQ+c2FtcGxlLWRvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBPU0dpIFJlbW90ZSBTZXJ2aWNlcyBEeW5hbWljIENhY3VsYXRvciBPcGVyYXRpb25zIFNhbXBsZTwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWVqYXZhPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGwtb3NnaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uub3NnaTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VzPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+My4yLjAtdjIwMDkwNTIwLTE4MDA8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8IS0tIEVxdWlub3ggRGVjbGFyYXRpdmUgU2VydmljZXMgLS0+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZXF1aW5veDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmRzPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS4xLjAtdjIwMDkwNjAxPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5lcXVpbm94PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dXRpbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC4xMDAtdjIwMDkwNTIwLTE4MDA8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgotICAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZWNsaXBzZS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+Mi41LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmRzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZD5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9idWlsZGNvbW1hbmQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9idWlsZGNvbW1hbmQ+Ci0gICAgICAgICAgICAgICAgICAgIDwvYnVpbGRjb21tYW5kcz4KLSAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmVzPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvcHJvamVjdG5hdHVyZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L3Byb2plY3RuYXR1cmU+Ci0gICAgICAgICAgICAgICAgICAgIDwvcHJvamVjdG5hdHVyZXM+Ci0gICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGhDb250YWluZXJzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aENvbnRhaW5lcj5vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIKLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xhc3NwYXRoQ29udGFpbmVyPgotICAgICAgICAgICAgICAgICAgICA8L2NsYXNzcGF0aENvbnRhaW5lcnM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamFyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGFyY2hpdmU+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7YmFzZWRpcn0vTUVUQS1JTkYvTUFOSUZFU1QuTUY8L21hbmlmZXN0RmlsZT4KLSAgICAgICAgICAgICAgICAgICAgPC9hcmNoaXZlPgotICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotCi0gICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLW9zZ2ktanVuaXQtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWxhdW5jaGVyLWVxdWlub3g8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgotICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm9zZ2ktdGVzdDwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dGVzdDwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+dGVzdDwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3lzdGVtUHJvcGVydGllcz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+b3NnaS5jb25maWd1cmF0aW9uLmFyZWE8L25hbWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vZXF1aW5veDwvdmFsdWU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zeXN0ZW1Qcm9wZXJ0aWVzPiAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL09TR0ktSU5GL3JlbW90ZS1zZXJ2aWNlL2NhbGN1bGF0b3Itc2VydmljZS1kZXNjcmlwdGlvbnMueG1sIGIvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvT1NHSS1JTkYvcmVtb3RlLXNlcnZpY2UvY2FsY3VsYXRvci1zZXJ2aWNlLWRlc2NyaXB0aW9ucy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlZDgyNzkuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvT1NHSS1JTkYvcmVtb3RlLXNlcnZpY2UvY2FsY3VsYXRvci1zZXJ2aWNlLWRlc2NyaXB0aW9ucy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0qIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0qIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0qCi0qICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0qCi0qIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0qIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0qIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08IS0tIEEgY29uc3VtZXItc2lkZSBzZXJ2aWNlIGRlc2NyaXB0aW9uIGZpbGUgZm9yIFJGQyAxMTkgLS0+Ci08ZW5kcG9pbnQtZGVzY3JpcHRpb25zIHhtbG5zPSJodHRwOi8vd3d3Lm9zZ2kub3JnL3htbG5zL3JzYS92MS4wLjAiIAotICAgIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgotICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSI+Ci0gICAgPCEtLSBEZXNjcmliZSBhIHJlbW90ZSBPU0dpIHNlcnZpY2UgIC0tPgotICAgIDxlbmRwb2ludC1kZXNjcmlwdGlvbj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Im9iamVjdENsYXNzIiB2YWx1ZT0iY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLkFkZFNlcnZpY2UiIC8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJyZW1vdGUuY29uZmlncy5zdXBwb3J0ZWQiIHZhbHVlPSJvcmcub3NnaS5zY2EiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlcnZpY2UuaW1wb3J0ZWQuY29uZmlncyIgdmFsdWU9Im9yZy5vc2dpLnNjYSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2NhLnJlZmVyZW5jZSIgdmFsdWU9ImFkZFNlcnZpY2UiLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Im9yZy5vc2dpLnNjYS5iaW5kaW5ncyI+Ci0gICAgICAgICAgICA8bGlzdD4KLSAgICAgICAgICAgICAgICA8dmFsdWU+e2h0dHA6Ly9zYW1wbGV9QWRkPC92YWx1ZT4KLSAgICAgICAgICAgIDwvbGlzdD4KLSAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICA8L2VuZHBvaW50LWRlc2NyaXB0aW9uPgotICAgIDxlbmRwb2ludC1kZXNjcmlwdGlvbj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Im9iamVjdENsYXNzIiB2YWx1ZT0iY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLlN1YnRyYWN0U2VydmljZSIgLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlcnZpY2UuaW1wb3J0ZWQuY29uZmlncyIgdmFsdWU9Im9yZy5vc2dpLnNjYSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVtb3RlLmNvbmZpZ3Muc3VwcG9ydGVkIiB2YWx1ZT0ib3JnLm9zZ2kuc2NhIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzY2EucmVmZXJlbmNlIiB2YWx1ZT0ic3VidHJhY3RTZXJ2aWNlIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmcub3NnaS5zY2EuYmluZGluZ3MiPgotICAgICAgICAgICAgPGxpc3Q+Ci0gICAgICAgICAgICAgICAgPHZhbHVlPntodHRwOi8vc2FtcGxlfVN1YnRyYWN0PC92YWx1ZT4KLSAgICAgICAgICAgIDwvbGlzdD4KLSAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICA8L2VuZHBvaW50LWRlc2NyaXB0aW9uPgotICAgIDxlbmRwb2ludC1kZXNjcmlwdGlvbj4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9Im9iamVjdENsYXNzIiB2YWx1ZT0iY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLk11bHRpcGx5U2VydmljZSIgLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlcnZpY2UuaW1wb3J0ZWQuY29uZmlncyIgdmFsdWU9Im9yZy5vc2dpLnNjYSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVtb3RlLmNvbmZpZ3Muc3VwcG9ydGVkIiB2YWx1ZT0ib3JnLm9zZ2kuc2NhIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzY2EucmVmZXJlbmNlIiB2YWx1ZT0ibXVsdGlwbHlTZXJ2aWNlIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmcub3NnaS5zY2EuYmluZGluZ3MiIHZhbHVlPSJ7aHR0cDovL3NhbXBsZX1NdWx0aXBseSIvPgotICAgIDwvZW5kcG9pbnQtZGVzY3JpcHRpb24+Ci0gICAgPGVuZHBvaW50LWRlc2NyaXB0aW9uPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0ib2JqZWN0Q2xhc3MiIHZhbHVlPSJjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuRGl2aWRlU2VydmljZSIgLz4KLSAgICAgICAgPHByb3BlcnR5IG5hbWU9InNlcnZpY2UuaW1wb3J0ZWQuY29uZmlncyIgdmFsdWU9Im9yZy5vc2dpLnNjYSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVtb3RlLmNvbmZpZ3Muc3VwcG9ydGVkIiB2YWx1ZT0ib3JnLm9zZ2kuc2NhIi8+Ci0gICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzY2EucmVmZXJlbmNlIiB2YWx1ZT0iZGl2aWRlU2VydmljZSIvPgotICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JnLm9zZ2kuc2NhLmJpbmRpbmdzIiB2YWx1ZT0ie2h0dHA6Ly9zYW1wbGV9RGl2aWRlIi8+Ci0gICAgPC9lbmRwb2ludC1kZXNjcmlwdGlvbj4KLTwvZW5kcG9pbnQtZGVzY3JpcHRpb25zPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL1JFQURNRSBiL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkMzExMi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotRGlzdHJpYnV0ZWQgT1NHaSBDYWxjdWxhdG9yIFNhbXBsZQ0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi1UaGlzIHNhbXBsZSBpbXBsZW1lbnRzIGEgZGlzdHJpYnV0ZWQgY2FsY3VsYXRvciB1c2luZyBEaXN0cmlidXRlZCBPU0dpIChSRkMgMTE5KSBvdmVyIFNDQS4NCi0NCi1UaGUgUkVBRE1FIGluIHRoZSA8ZGlzdHJpYnV0aW9uLXVucGFjay1kaXI+L3NhbXBsZXMgZGlyZWN0b3J5IHByb3ZpZGVzIA0KLWdlbmVyYWwgaW5zdHJ1Y3Rpb25zIGFib3V0IGJ1aWxkaW5nIGFuZCBydW5uaW5nIHNhbXBsZXMuICh3aGVyZQ0KLWRpc3RyaWJ1dGlvbi11bnBhY2stZGlyIGlzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHVucGFja2VkIHRoZSB0dXNjYW55DQotYmluYXJ5IGRpc3RyaWJ1dGlvbiBhcmNoaXZlKS4gVGFrZSBhIGxvb2sgdGhlcmUgZmlyc3QgKG5vdGluZyBhdCB5b3UgcmVhZCBpdCB0aGF0IHRoaXMgc2FtcGxlDQotaXMgbm90IGEgbmV3IHN0eWxlIHNhbXBsZSkuIA0KLQ0KLU9uIFdpbmRvd3MsIHJ1bg0KLWphdmEgLWphciAuLlwuLlxtb2R1bGVzXG9zZ2ktMy41LjAtdjIwMDkwNTIwLmphciAtY29uZmlndXJhdGlvbiAuLlwuLlxmZWF0dXJlc1xjb25maWd1cmF0aW9uIC1jbGVhbiAtY29uc29sZQ0KLQ0KLU9uICpVbml4LCBydW4NCi1qYXZhIC1qYXIgLi4vLi4vbW9kdWxlcy9vc2dpLTMuNS4wLXYyMDA5MDUyMC5qYXIgLWNvbmZpZ3VyYXRpb24gLi4vLi4vZmVhdHVyZXMvY29uZmlndXJhdGlvbiAtY2xlYW4gLWNvbnNvbGUNCi0NCi1Zb3Ugc2hvdWxkIHNlZSB0aGUgb3NnaSBjb25zb2xlOg0KLQ0KLW9zZ2k+DQotDQotb3NnaT4gSnVuIDIyLCAyMDA5IDE6MzI6MjcgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5leHRlbnNpYmlsaXR5LmVxdWlub3guRXF1aW5veFNlcnZpY2VEaXNjb3ZlcnlBY3RpdmF0b3Igc3RhcnQNCi1JTkZPOiBFcXVpbm94LWJhc2VkIHNlcnZpY2UgZGlzY292ZXJlciBpcyBub3cgY29uZmlndXJlZC4NCi0NCi1Zb3UgY2FuIHJ1biAic3MiIGNvbW1hbmQgdW5kZXIgdGhlIG9zZ2k+IHRvIHNlZSB0aGUgc3RhdHVzIG9mIHRoZSBidW5kbGVzLg0KLW9zZ2k+IHNzDQotDQotVGhlbiB5b3UgY2FuIGluc3RhbGwgYW5kIHN0YXJ0IHRoZSBjYWxjdWxhdG9yLmRvc2dpIGJ1bmRsZToNCi0NCi1vc2dpPiBpbnN0YWxsIGZpbGU6Li90YXJnZXQvc2FtcGxlLWRvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci5qYXINCi1CdW5kbGUgaWQgaXMgMTk4DQotDQotb3NnaT4gc3RhcnQgMTk4DQotTm92IDQsIDIwMDkgNToyMDoyMSBQTSBjYWxjdWxhdG9yLmRvc2dpLmltcGwuQ2FsY3VsYXRvckFjdGl2YXRvciBzdGFydA0KLUlORk86IFN0YXJ0aW5nIGNhbGN1bGF0b3IuZG9zZ2kuZHluYW1pY18xLjAuMCBbMTk4XQ0KLU5vdiA0LCAyMDA5IDU6MjA6MjEgUE0gY2FsY3VsYXRvci5kb3NnaS5pbXBsLkNhbGN1bGF0b3JBY3RpdmF0b3Igc3RhcnQNCi1JTkZPOiBSZWdpc3RlcmluZyBjYWxjdWxhdG9yLmRvc2dpLkNhbGN1bGF0b3JTZXJ2aWNlDQotTm92IDQsIDIwMDkgNToyMDoyMSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuaW1wbC5Ob2RlSW1wbCBzdGFydA0KLUlORk86IFN0YXJ0aW5nIG5vZGU6IHVybjpvc2dpLnNlcnZpY2UuZDVhMDY4MzQtYWUxNS00MmIzLTkyODctNzFmZTY1MzdjODY5IGRvbWFpDQotbjogdHVzY2FueS5hcGFjaGUub3JnDQotbG9nNGo6V0FSTiBObyBhcHBlbmRlcnMgY291bGQgYmUgZm91bmQgZm9yIGxvZ2dlciAob3JnLmFwYWNoZS5heGlvbS5vbS51dGlsLlN0QVgNCi1VdGlscykuDQotbG9nNGo6V0FSTiBQbGVhc2UgaW5pdGlhbGl6ZSB0aGUgbG9nNGogc3lzdGVtIHByb3Blcmx5Lg0KLU5vdiA0LCAyMDA5IDU6MjA6MjQgUE0gb3JnLm1vcnRiYXkubG9nLlNsZjRqTG9nIGluZm8NCi1JTkZPOiBMb2dnaW5nIHRvIG9yZy5zbGY0ai5pbXBsLkpESzE0TG9nZ2VyQWRhcHRlcihvcmcubW9ydGJheS5sb2cpIHZpYSBvcmcubW9ydA0KLWJheS5sb2cuU2xmNGpMb2cNCi1Ob3YgNCwgMjAwOSA1OjIwOjI1IFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaHR0cC5qZXR0eS5KZXR0eUxvZ2dlciBpbmZvDQotSU5GTzogamV0dHktNi4xLngNCi1Ob3YgNCwgMjAwOSA1OjIwOjI1IFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaHR0cC5qZXR0eS5KZXR0eUxvZ2dlciBpbmZvDQotSU5GTzogU3RhcnRlZCBTZWxlY3RDaGFubmVsQ29ubmVjdG9yQDAuMC4wLjA6ODA4Ng0KLU5vdiA0LCAyMDA5IDU6MjA6MjUgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5odHRwLmpldHR5LkpldHR5U2VydmVyIGFkZFNlcnZsZXRNDQotYXBwaW5nDQotSU5GTzogQWRkZWQgU2VydmxldCBtYXBwaW5nOiBodHRwOi8vcmZlbmd0NjFwOjgwODYvQ2FsY3VsYXRvclNlcnZpY2UNCi1Ob3YgNCwgMjAwOSA1OjIwOjI1IFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5hc3NlbWJseS5pbXBsLkVuZHBvaW50UmVnaXN0cg0KLXlJbXBsIGFkZEVuZHBvaW50DQotSU5GTzogQWRkIGVuZHBvaW50IC0gKEAyMzM5NDUxNilFbmRwb2ludDogIFVSSSA9IG9zZ2kuc2VydmljZS5kNWEwNjgzNC1hZTE1LTQyYjMNCi0tOTI4Ny03MWZlNjUzN2M4Njkjc2VydmljZS1iaW5kaW5nKENhbGN1bGF0b3JTZXJ2aWNlL0NhbGN1bGF0b3IpDQotTm92IDQsIDIwMDkgNToyMDoyNSBQTSBjYWxjdWxhdG9yLmRvc2dpLmltcGwuQ2FsY3VsYXRvckFjdGl2YXRvciBnZXRCdW5kbGUNCi1JTkZPOiBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuQWRkU2VydmljZSBpcyBsb2FkZWQgYnkgYnVuZGxlOiBjYWxjdWxhdG9yLmRvcw0KLWdpLmR5bmFtaWMNCi0NCi1Zb3UgY2FuIHBvaW50IHlvdXIgYnJvd3NlciB0byBodHRwOi8vbG9jYWxob3N0OjgwODYvQ2FsY3VsYXRvclNlcnZpY2U/d3NkbCB0byBzZWUNCi10aGUgV1NETC4NCi0NCi1Zb3UgY2FuIGFsc28gdXNlIHRoZSBXZWJTZXJ2aWNlIEV4cGxvcmVyIGZyb20gRWNsaXBzZSBXVFAgdG8gdGVzdCB0aGUgV2ViIFNlcnZpY2UuDQotDQotVG8gc3RvcCB0aGUgYnVuZGxlOg0KLQ0KLW9zZ2k+IHN0b3AgMTk4DQotTm92IDQsIDIwMDkgNToyMToxNiBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuaW1wbC5Ob2RlSW1wbCBzdG9wDQotSU5GTzogU3RvcHBpbmcgbm9kZTogdXJuOm9zZ2kuc2VydmljZS5kNWEwNjgzNC1hZTE1LTQyYjMtOTI4Ny03MWZlNjUzN2M4NjkNCi1Ob3YgNCwgMjAwOSA1OjIxOjE2IFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5hc3NlbWJseS5pbXBsLkVuZHBvaW50UmVnaXN0cg0KLXlJbXBsIGVuZHBvaW50UmVtb3ZlZA0KLUlORk86IFJlbW92ZSBlbmRwb2ludCAtIChAMjMzOTQ1MTYpRW5kcG9pbnQ6ICBVUkkgPSBvc2dpLnNlcnZpY2UuZDVhMDY4MzQtYWUxNS00DQotMmIzLTkyODctNzFmZTY1MzdjODY5I3NlcnZpY2UtYmluZGluZyhDYWxjdWxhdG9yU2VydmljZS9DYWxjdWxhdG9yKQ0KLU5vdiA0LCAyMDA5IDU6MjE6MTYgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5odHRwLmpldHR5LkpldHR5U2VydmVyIHJlbW92ZVNlcnZsDQotZXRNYXBwaW5nDQotSU5GTzogUmVtb3ZlZCBTZXJ2bGV0IG1hcHBpbmc6IC9DYWxjdWxhdG9yU2VydmljZQ0KLU5vdiA0LCAyMDA5IDU6MjE6MTYgUE0gY2FsY3VsYXRvci5kb3NnaS5pbXBsLkNhbGN1bGF0b3JBY3RpdmF0b3Igc3RvcA0KLUlORk86IFN0b3BwaW5nIGNhbGN1bGF0b3IuZG9zZ2kuZHluYW1pY18xLjAuMCBbMTk4XQ0KLU5vdiA0LCAyMDA5IDU6MjE6MTYgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmltcGwuTm9kZUltcGwgc3RvcA0KLUlORk86IFN0b3BwaW5nIG5vZGU6IHVybjpvc2dpLnNlcnZpY2UuZDVhMDY4MzQtYWUxNS00MmIzLTkyODctNzFmZTY1MzdjODY5DQotDQotVG8gZXhpdCB0aGUgY29uc29sZSwgcnVuOg0KLW9zZ2k+IGV4aXQNCi0NCi1TYW1wbGUgT3ZlcnZpZXcNCi0tLS0tLS0tLS0tLS0tLS0NCi1UaGUgYXBwbGljYXRpb24gY29uc2lzdHMgb2YgdHdvIE9TR2kgYnVuZGxlczoNCi0gKiBUaGUgY2FsY3VsYXRvciBidW5kbGU6IEl0IHByb3ZpZGVzIHRoZSBjYWxjdWxhdG9yIHNlcnZpY2UuIFRoZSBzZXJ2aWNlIGlzIGltcGxlbWVudGVkIGJ5IGEgamF2YSBjbGFzcyB0aGF0DQotICAgY29uc3VtZXMgb3RoZXIgc2VydmljZXMgdG8gcGVyZm9ybSB0aGUgk2FkZJQsIJNzdWJ0cmFjdJQsIJNtdWx0aXBseZQgYW5kIJNkaXZpZGWUIG9wZXJhdGlvbnMuDQotICogVGhlIG9wZXJhdGlvbnMgYnVuZGxlOiBJdCBwcm92aWRlcyB0aGUgYWRkL3N1YnRyYWN0L211bHRpcGx5L2RpdmlkZSBzZXJ2aWNlcy4NCi0gICAoU2VlIC4uL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMpDQotDQotDQotZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLw0KLSAgc3JjLw0KLSAgICBtYWluLw0KLSAgICAgIGphdmEvDQotICAgICAgICBjYWxjdWxhdG9yLw0KLSAgICAgICAgICAgIGRvc2dpLw0KLSAgICAgICAgICAgICAgICBDYWxjdWxhdG9yU2VydmljZS5qYXZhICAtIFRoZSBpbnRlcmZhY2UgZm9yIENhbGN1bGF0b3Igc2VydmljZQ0KLSAgICAgICAgICAgICAgICBpbXBsLw0KLSAgICAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhIC0gT1NHaSBidW5kbGUgYWN0aXZhdG9yIGZvciBDYWxjdWxhdG9yIGJ1bmRsZQ0KLSAgICAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2VEU0ltcGwuamF2YSAtIE9TR2kgZGVjbGFyYXRpdmUgc2VydmljZSBiYXNlZCBpbXBsZW1lbnRhdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEgLSBCYXNpYyBPU0dpIGltcGxlbWVudGF0aW9uDQotICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMvDQotICAgICAgICAgICAgICAgICAgICBBZGRTZXJ2aWNlLmphdmEgLSBJbnRlcmZhY2UgZm9yIEFkZA0KLSAgICAgICAgICAgICAgICAgICAgU3VidHJhY3RTZXJ2aWNlLmphdmEgLSBJbnRlcmZhY2UgZm9yIFN1YnRyYWN0DQotICAgICAgICAgICAgICAgICAgICBNdWx0aXBseVNlcnZpY2UuamF2YSAtIEludGVyZmFjZSBmb3IgTXVsdGlwbHkNCi0gICAgICAgICAgICAgICAgICAgIERpdmlkZVNlcnZpY2UuamF2YSAtIEludGVyZmFjZSBmb3IgRGl2aWRlDQotICAgICAgICAgICAgICAgIHJtaS8NCi0gICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbnNSZW1vdGUuamF2YSAtIFJNSSByZW1vdGUgaW50ZXJmYWNlIGZvciBvcGVyYXRpb25zDQotICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb25zUk1JU2VydmVyX1N0dWIuamF2YSAtIFJNSSBzdHViDQotICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb25zUk1JU2VydmVyLmphdmEgLSBSTUkgc2VydmVyIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvcGVyYXRpb25zDQotICAgICAgcmVzb3VyY2VzLw0KLSAgICAgICAgICAgIE1FVEEtSU5GLw0KLSAgICAgICAgICAgICAgICBzY2EtY29udHJpYnV0aW9uLnhtbA0KLSAgICAgICAgICAgIE9TR0ktSU5GLw0KLSAgICAgICAgICAgICAgICBzY2EtY29uZmlnLw0KLSAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRvci1jb25maWcueG1sIC0gVGhlIFNDQSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIE9TR2kgcmVtb3RlIHNlcnZpY2VzDQotICAgICAgICAgICAgICAgIHJlbW90ZS1zZXJ2aWNlLw0KLSAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRvci1zZXJ2aWNlLWRlc2NyaXB0aW9ucy54bWwgLSBUaGUgT1NHaSByZW1vdGUgc2VydmljZSBlbmRwb2ludCBkZXNjcmlwdGlvbnMgICAgDQotICB0ZXN0Lw0KLSAgICBqYXZhLw0KLSAgICAgICAgc3JjLw0KLSAgICAgICAgICAgIGNhbGN1bGF0b3IvDQotICAgICAgICAgICAgICAgIGRvc2dpLw0KLSAgICAgICAgICAgICAgICAgICAgdGVzdC8NCi0gICAgICAgICAgICAgICAgICAgICAgICBDYWxjdWxhdG9yT1NHaU5vZGVUZXN0Q2FzZS5qYXZhIC0gVGhlIEpVTklUIHRlc3QgY2FzZSB0aGF0IHRlc3RzIHRoaXMgYnVuZGxlIGFnYWluc3QgYSBSTUkgc2VydmljZQ0KLQ0KLSAgTUVUQS1JTkYvDQotICAgIE1BTklGRVNULk1GIC0gVGhlIE9TR2kgbWFuaWZlc3QgZm9yIHRoaXMgYnVuZGxlDQotICBkb3NpZy1jYWxjdWxhdG9yLnBuZyAtIGEgcGljdG9yaWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzYW1wbGUNCi0gIHBvbS54bWwgICAgICAgICAgICAgICAgICAgICAgICAgLSB0aGUgTWF2ZW4gYnVpbGQgZmlsZQ0KLQ0KLQ0KLQ0KLUJ1aWxkaW5nIEFuZCBSdW5uaW5nIFRoZSBUZXN0IENhc2UgVXNpbmcgTWF2ZW4NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotV2l0aCBlaXRoZXIgdGhlIGJpbmFyeSBvciBzb3VyY2UgZGlzdHJpYnV0aW9ucyB0aGUgc2FtcGxlIGNhbiBiZSBidWlsdCBhbmQgcnVuDQotdXNpbmcgTWF2ZW4gYXMgZm9sbG93cy4NCi0NCi1jZCBkb3NnaS1jYWxjdWxhdG9yDQotbXZuDQotDQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvcG9tLnhtbCBiL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhNmEyOWQuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1MyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotCi0gICAgPGFydGlmYWN0SWQ+c2FtcGxlLWRvc2dpLWR5bmFtaWMtY2FsY3VsYXRvcjwvYXJ0aWZhY3RJZD4KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgT1NHaSBSZW1vdGUgU2VydmljZXMgRHluYW1pYyBDYWN1bGF0b3IgU2FtcGxlPC9uYW1lPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtZWphdmE8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtd2Vic2VydmljZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1sYXVuY2hlci1lcXVpbm94PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbC1vc2dpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5vc2dpPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZXM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjIuMC12MjAwOTA1MjAtMTgwMDwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPCEtLSBFcXVpbm94IERlY2xhcmF0aXZlIFNlcnZpY2VzIC0tPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmVxdWlub3g8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5kczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4wLXYyMDA5MDYwMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZXF1aW5veDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnV0aWw8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjAuMTAwLXYyMDA5MDUyMC0xODAwPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICAgIDxidWlsZD4KLSAgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+Ci0gICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1lY2xpcHNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjUuMTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZHM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L2J1aWxkY29tbWFuZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmQ+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L2J1aWxkY29tbWFuZD4KLSAgICAgICAgICAgICAgICAgICAgPC9idWlsZGNvbW1hbmRzPgotICAgICAgICAgICAgICAgICAgICA8cHJvamVjdG5hdHVyZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cHJvamVjdG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9wcm9qZWN0bmF0dXJlPgotICAgICAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvcHJvamVjdG5hdHVyZT4KLSAgICAgICAgICAgICAgICAgICAgPC9wcm9qZWN0bmF0dXJlcz4KLSAgICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aENvbnRhaW5lcnM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3NwYXRoQ29udGFpbmVyPm9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUgotICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGFzc3BhdGhDb250YWluZXI+Ci0gICAgICAgICAgICAgICAgICAgIDwvY2xhc3NwYXRoQ29udGFpbmVycz4KLSAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLQotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICA8YXJjaGl2ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxtYW5pZmVzdEZpbGU+JHtiYXNlZGlyfS9NRVRBLUlORi9NQU5JRkVTVC5NRjwvbWFuaWZlc3RGaWxlPgotICAgICAgICAgICAgICAgICAgICA8L2FyY2hpdmU+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tb3NnaS1qdW5pdC1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aWQ+b3NnaS10ZXN0PC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0PC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD50ZXN0PC9nb2FsPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzeXN0ZW1Qcm9wZXJ0aWVzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vc2dpLmNvbmZpZ3VyYXRpb24uYXJlYTwvbmFtZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9lcXVpbm94PC92YWx1ZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N5c3RlbVByb3BlcnRpZXM+ICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICA8L3BsdWdpbnM+Ci0gICAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIzMjhhMAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTAsMCArMSwxNyBAQAorTWFuaWZlc3QtVmVyc2lvbjogMS4wDQorU0NBLVZlcnNpb246IDEuMQ0KK0J1bmRsZS1OYW1lOiBBcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIEJpbmRpbmcNCitCdW5kbGUtVmVuZG9yOiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24NCitCdW5kbGUtVmVyc2lvbjogMi4wLjANCitCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyDQorQnVuZGxlLUxpY2Vuc2U6IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMC50eHQNCitCdW5kbGUtRGVzY3JpcHRpb246IEFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgQmluZGluZw0KK0ltcG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5O3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWY7dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb247dmVyc2lvbj0iMi4wLjAiLA0KKyBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyO3ZlcnNpb249IjIuMC4wIiwNCisgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lO3ZlcnNpb249IjIuMC4wIg0KK0J1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5zYW1wbGUNCitCdW5kbGUtRG9jVVJMOiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvDQorQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEoyU0UtMS41LEphdmFTRS0xLjYNCmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL1JFQURNRSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MDY2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL1JFQURNRQpAQCAtMCwwICsxLDkgQEAKK1NhbXBsZSBCaW5kaW5nIEV4dGVuc2lvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBzYW1wbGUgZGVtb25zdHJhdGVzIGhvdyB0byBkZXZlbG9wIGEgbmV3IGJpbmRpbmcgdHlwZSBmb3IgQXBhY2hlIAorVHVzY2FueSBTQ0EuIAorCitUaGUgUkVBRE1FIGluIHRoZSBzYW1wbGVzIGRpcmVjdG9yeSAodGhlIGRpcmVjdG9yeSB0d28gZGlyZWN0b3JpZXMgYWJvdmUgCit0aGlzIG9uZSkgcHJvdmlkZXMgaW5zdHJ1Y3Rpb25zIGFib3V0IGJ1aWxkaW5nIGFuZCBydW5uaW5nIHRoZSBzYW1wbGVzLiBUYWtlCithIGxvb2sgdGhlcmUuCisKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvcG9tLnhtbCBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWM5Y2VlCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9wb20ueG1sCkBAIC0wLDAgKzEsOTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWJpbmRpbmctZXh0ZW5zaW9uPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgQmluZGluZyBFeHRlbnNpb248L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHkteG1sPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1odHRwPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgIAorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8L2RlcGVuZGVuY2llcz4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL1NhbXBsZUJpbmRpbmcuamF2YSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvYmluZGluZy9TYW1wbGVCaW5kaW5nLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc0YTMyZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvYmluZGluZy9TYW1wbGVCaW5kaW5nLmphdmEKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugc2FtcGxlLmJpbmRpbmc7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5CYXNlQmluZGluZ0ltcGw7CisKKy8qKgorICogUmVwcmVzZW50cyBhIGJpbmRpbmcgdG8gYSBTYW1wbGUgc2VydmljZS4KKyAqLworcHVibGljIGNsYXNzIFNhbXBsZUJpbmRpbmcgZXh0ZW5kcyBCYXNlQmluZGluZ0ltcGwgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBRTmFtZSBUWVBFID0gbmV3IFFOYW1lKFNDQTExX1RVU0NBTllfTlMsICJiaW5kaW5nLnNhbXBsZSIpOworCisgICAgcHJpdmF0ZSBTdHJpbmcgc29tZUF0dHI7CisKKyAgICBwdWJsaWMgU2FtcGxlQmluZGluZygpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgUU5hbWUgZ2V0VHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIFRZUEU7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBTdHJpbmcgZ2V0U29tZUF0dHIoKSB7CisgICAgICAgIHJldHVybiBzb21lQXR0cjsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRTb21lQXR0cihTdHJpbmcgc29tZUF0dHIpIHsKKyAgICAgICAgdGhpcy5zb21lQXR0ciA9IHNvbWVBdHRyOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL1NhbXBsZUJpbmRpbmdGYWN0b3J5LmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2JpbmRpbmcvU2FtcGxlQmluZGluZ0ZhY3RvcnkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjQ5MjA0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL1NhbXBsZUJpbmRpbmdGYWN0b3J5LmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuYmluZGluZzsKKworCisvKioKKyAqIEZhY3RvcnkgaW1wbGVtZW50YXRpb24gdG8gY3JlYXRlIFNhbXBsZSBNb2RlbHMKKyAqLworcHVibGljIGNsYXNzIFNhbXBsZUJpbmRpbmdGYWN0b3J5IHsKKworICAgIHB1YmxpYyBTYW1wbGVCaW5kaW5nIGNyZWF0ZVNhbXBsZUJpbmRpbmcoKSB7CisgICAgICAgIHJldHVybiBuZXcgU2FtcGxlQmluZGluZygpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL3J1bnRpbWUvU2FtcGxlQmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL3J1bnRpbWUvU2FtcGxlQmluZGluZ1Byb3ZpZGVyRmFjdG9yeS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYjk2NjEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2JpbmRpbmcvcnVudGltZS9TYW1wbGVCaW5kaW5nUHJvdmlkZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuYmluZGluZy5ydW50aW1lOworCitpbXBvcnQgc2FtcGxlLmJpbmRpbmcuU2FtcGxlQmluZGluZzsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuRXh0ZW5zaW9uUG9pbnRSZWdpc3RyeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5SZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5TZXJ2aWNlQmluZGluZ1Byb3ZpZGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lRW5kcG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZTsKKworcHVibGljIGNsYXNzIFNhbXBsZUJpbmRpbmdQcm92aWRlckZhY3RvcnkgaW1wbGVtZW50cyBCaW5kaW5nUHJvdmlkZXJGYWN0b3J5PFNhbXBsZUJpbmRpbmc+IHsKKworICAgIHB1YmxpYyBTYW1wbGVCaW5kaW5nUHJvdmlkZXJGYWN0b3J5KEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXh0ZW5zaW9uUG9pbnRzKSB7CisgICAgfQorCisgICAgcHVibGljIENsYXNzPFNhbXBsZUJpbmRpbmc+IGdldE1vZGVsVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIFNhbXBsZUJpbmRpbmcuY2xhc3M7CisgICAgfQorCisgICAgcHVibGljIFJlZmVyZW5jZUJpbmRpbmdQcm92aWRlciBjcmVhdGVSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIoUnVudGltZUVuZHBvaW50UmVmZXJlbmNlIGVuZHBvaW50KSB7CisgICAgICAgIHJldHVybiBuZXcgU2FtcGxlUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyKGVuZHBvaW50KTsKKyAgICB9CisKKyAgICBwdWJsaWMgU2VydmljZUJpbmRpbmdQcm92aWRlciBjcmVhdGVTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyKFJ1bnRpbWVFbmRwb2ludCBlbmRwb2ludCkgeworICAgICAgICByZXR1cm4gbmV3IFNhbXBsZVNlcnZpY2VCaW5kaW5nUHJvdmlkZXIoZW5kcG9pbnQpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL3J1bnRpbWUvU2FtcGxlUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2JpbmRpbmcvcnVudGltZS9TYW1wbGVSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWVkZjZjCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL3J1bnRpbWUvU2FtcGxlUmVmZXJlbmNlQmluZGluZ1Byb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuYmluZGluZy5ydW50aW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5FbmRwb2ludFJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2VDb250cmFjdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PcGVyYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5wcm92aWRlci5SZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXI7CisKK3B1YmxpYyBjbGFzcyBTYW1wbGVSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgaW1wbGVtZW50cyBSZWZlcmVuY2VCaW5kaW5nUHJvdmlkZXIgeworCisgICAgcHJpdmF0ZSBFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludDsKKyAgICBwcml2YXRlIEludGVyZmFjZUNvbnRyYWN0IGNvbnRyYWN0OworCisgICAgcHVibGljIFNhbXBsZVJlZmVyZW5jZUJpbmRpbmdQcm92aWRlcihFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludCkgeworICAgICAgICB0aGlzLmVuZHBvaW50ID0gZW5kcG9pbnQ7CisgICAgfQorICAgIAorICAgIHB1YmxpYyBJbnZva2VyIGNyZWF0ZUludm9rZXIoT3BlcmF0aW9uIG9wZXJhdGlvbikgeworICAgICAgICByZXR1cm4gbmV3IFNhbXBsZVJlZmVyZW5jZUludm9rZXIob3BlcmF0aW9uLCBlbmRwb2ludCk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RhcnQoKSB7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc3RvcCgpIHsKKyAgICB9CisKKyAgICBwdWJsaWMgSW50ZXJmYWNlQ29udHJhY3QgZ2V0QmluZGluZ0ludGVyZmFjZUNvbnRyYWN0KCkgeworICAgICAgICByZXR1cm4gY29udHJhY3Q7CisgICAgfQorCisgICAgcHVibGljIGJvb2xlYW4gc3VwcG9ydHNPbmVXYXlJbnZvY2F0aW9uKCkgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2JpbmRpbmcvcnVudGltZS9TYW1wbGVSZWZlcmVuY2VJbnZva2VyLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2JpbmRpbmcvcnVudGltZS9TYW1wbGVSZWZlcmVuY2VJbnZva2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjYjMzOQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvYmluZGluZy9ydW50aW1lL1NhbXBsZVJlZmVyZW5jZUludm9rZXIuamF2YQpAQCAtMCwwICsxLDUzIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHNhbXBsZS5iaW5kaW5nLnJ1bnRpbWU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkVuZHBvaW50UmVmZXJlbmNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsKKworcHVibGljIGNsYXNzIFNhbXBsZVJlZmVyZW5jZUludm9rZXIgaW1wbGVtZW50cyBJbnZva2VyIHsKKyAgICAKKyAgICBwcm90ZWN0ZWQgT3BlcmF0aW9uIG9wZXJhdGlvbjsKKyAgICBwcm90ZWN0ZWQgRW5kcG9pbnRSZWZlcmVuY2UgZW5kcG9pbnQ7CisKKyAgICBwdWJsaWMgU2FtcGxlUmVmZXJlbmNlSW52b2tlcihPcGVyYXRpb24gb3BlcmF0aW9uLCBFbmRwb2ludFJlZmVyZW5jZSBlbmRwb2ludCkgeworICAgICAgICB0aGlzLm9wZXJhdGlvbiA9IG9wZXJhdGlvbjsKKyAgICAgICAgdGhpcy5lbmRwb2ludCA9IGVuZHBvaW50OworICAgIH0KKworICAgIHB1YmxpYyBNZXNzYWdlIGludm9rZShNZXNzYWdlIG1zZykgeworICAgICAgICB0cnkgeworCisgICAgICAgICAgICByZXR1cm4gZG9JbnZva2UobXNnKTsKKyAgICAgICAgICAgIAorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgTWVzc2FnZSBkb0ludm9rZShNZXNzYWdlIG1zZykgeworICAgICAgICAvLyBBZGQgc29tZSBjb2RlIGhlcmUgdG8gbWFrZSBhbiBpbnZvY2F0aW9uIG92ZXIgdGhlIFNhbXBsZSBiaW5kaW5nIHByb3RvY29sCisgICAgICAgIC8vIEZvciB0aGlzIHNhbXBsZSB3ZSdsbCBqdXN0IGdldCBpdCBmcm9tIHRoZSBzdGF0aWMgc3Rhc2gKKyAgICAgICAgU2FtcGxlU2VydmljZUludm9rZXIgZmkgPSBTYW1wbGVTdGFzaC5nZXRTZXJ2aWNlKGVuZHBvaW50LmdldEJpbmRpbmcoKS5nZXRVUkkoKSk7CisgICAgICAgIHJldHVybiBmaS5pbnZva2VTZXJ2aWNlKG1zZyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL3J1bnRpbWUvU2FtcGxlU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL3J1bnRpbWUvU2FtcGxlU2VydmljZUJpbmRpbmdQcm92aWRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YWFiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2JpbmRpbmcvcnVudGltZS9TYW1wbGVTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyLmphdmEKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuYmluZGluZy5ydW50aW1lOworCitpbXBvcnQgc2FtcGxlLmJpbmRpbmcuU2FtcGxlQmluZGluZzsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2VDb250cmFjdDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlNlcnZpY2VCaW5kaW5nUHJvdmlkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsKKworcHVibGljIGNsYXNzIFNhbXBsZVNlcnZpY2VCaW5kaW5nUHJvdmlkZXIgaW1wbGVtZW50cyBTZXJ2aWNlQmluZGluZ1Byb3ZpZGVyIHsKKworICAgIHByaXZhdGUgUnVudGltZUVuZHBvaW50IGVuZHBvaW50OworICAgIHByaXZhdGUgSW50ZXJmYWNlQ29udHJhY3QgY29udHJhY3Q7CisKKyAgICBwdWJsaWMgU2FtcGxlU2VydmljZUJpbmRpbmdQcm92aWRlcihSdW50aW1lRW5kcG9pbnQgZW5kcG9pbnQpIHsKKyAgICAgICAgdGhpcy5lbmRwb2ludCA9IGVuZHBvaW50OworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgeworICAgICAgICAvLyBhZGQgc29tZSBjb2RlIGhlcmUgdG8gc3RhcnQgdGhlIHNlcnZpY2UKKworICAgICAgICAvLyBGb3IgdGhpcyBzYW1wbGUgd2UnbGwganVzdCBzaGFyZSBpdCBpbiBhIHN0YXRpYworICAgICAgICBTYW1wbGVTdGFzaC5hZGRTZXJ2aWNlKGVuZHBvaW50LmdldEJpbmRpbmcoKS5nZXRVUkkoKSwgbmV3IFNhbXBsZVNlcnZpY2VJbnZva2VyKGVuZHBvaW50KSk7CisgICAgICAgIAorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInNvbWVBdHRyPSIgKyAoKFNhbXBsZUJpbmRpbmcpZW5kcG9pbnQuZ2V0QmluZGluZygpKS5nZXRTb21lQXR0cigpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzdG9wKCkgeworICAgICAgICBTYW1wbGVTdGFzaC5yZW1vdmVTZXJ2aWNlKGVuZHBvaW50LmdldEJpbmRpbmcoKS5nZXRVUkkoKSk7CisgICAgfQorCisgICAgcHVibGljIEludGVyZmFjZUNvbnRyYWN0IGdldEJpbmRpbmdJbnRlcmZhY2VDb250cmFjdCgpIHsKKyAgICAgICAgcmV0dXJuIGNvbnRyYWN0OworICAgIH0KKworICAgIHB1YmxpYyBib29sZWFuIHN1cHBvcnRzT25lV2F5SW52b2NhdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9iaW5kaW5nL3J1bnRpbWUvU2FtcGxlU2VydmljZUludm9rZXIuamF2YSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvYmluZGluZy9ydW50aW1lL1NhbXBsZVNlcnZpY2VJbnZva2VyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZiZmU4MAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvYmluZGluZy9ydW50aW1lL1NhbXBsZVNlcnZpY2VJbnZva2VyLmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuYmluZGluZy5ydW50aW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVFbmRwb2ludDsKKworcHVibGljIGNsYXNzIFNhbXBsZVNlcnZpY2VJbnZva2VyIHsKKworICAgIHByaXZhdGUgUnVudGltZUVuZHBvaW50IHdpcmU7CisgICAgCisgICAgcHVibGljIFNhbXBsZVNlcnZpY2VJbnZva2VyKFJ1bnRpbWVFbmRwb2ludCB3aXJlKSB7CisgICAgICAgIHRoaXMud2lyZSA9IHdpcmU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU2VuZCB0aGUgcmVxdWVzdCBkb3duIHRoZSB3aXJlIHRvIGludm9rZSB0aGUgc2VydmljZSAKKyAgICAgKi8KKyAgICBwdWJsaWMgTWVzc2FnZSBpbnZva2VTZXJ2aWNlKE1lc3NhZ2UgbXNnKSB7CisgICAgICAgIHJldHVybiB3aXJlLmludm9rZShtc2cpOworICAgIH0KKyAgICAKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvYmluZGluZy9ydW50aW1lL1NhbXBsZVN0YXNoLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2JpbmRpbmcvcnVudGltZS9TYW1wbGVTdGFzaC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZWJlNzcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2JpbmRpbmcvcnVudGltZS9TYW1wbGVTdGFzaC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlLmJpbmRpbmcucnVudGltZTsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CisKKy8qKgorICogU2ltcGxpc3RpYyBzdGF0aWMgTWFwIHRvIHNoYXJlIHNlcnZpY2UgZW5kcG9pbnRzIHdpdGggcmVmZXJlbmNlcworICovCitwdWJsaWMgY2xhc3MgU2FtcGxlU3Rhc2ggeworICAgIAorICAgIHByaXZhdGUgc3RhdGljIE1hcDxTdHJpbmcsIFNhbXBsZVNlcnZpY2VJbnZva2VyPiBzZXJ2aWNlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU2FtcGxlU2VydmljZUludm9rZXI+KCk7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZFNlcnZpY2UoU3RyaW5nIHVyaSwgU2FtcGxlU2VydmljZUludm9rZXIgU2FtcGxlU2VydmljZUludm9rZXIpIHsKKyAgICAgICAgc2VydmljZXMucHV0KHVyaSwgU2FtcGxlU2VydmljZUludm9rZXIpOworICAgIH0KKworICAgIHB1YmxpYyBzdGF0aWMgU2FtcGxlU2VydmljZUludm9rZXIgZ2V0U2VydmljZShTdHJpbmcgdXJpKSB7CisgICAgICAgIHJldHVybiBzZXJ2aWNlcy5nZXQodXJpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgcmVtb3ZlU2VydmljZShTdHJpbmcgdXJpKSB7CisgICAgICAgIHNlcnZpY2VzLnJlbW92ZSh1cmkpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvciBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTFjNDlhNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5TdEFYQXJ0aWZhY3RQcm9jZXNzb3IKQEAgLTAsMCArMSwyMCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyANCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyANCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KKw0KKyMgSW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRoZSBhcnRpZmFjdCBwcm9jZXNzb3IgZXh0ZW5zaW9uDQorb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS54bWwuRGVmYXVsdEJlYW5Nb2RlbFByb2Nlc3NvcjtxbmFtZT1odHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEjYmluZGluZy5zYW1wbGUsbW9kZWw9c2FtcGxlLmJpbmRpbmcuU2FtcGxlQmluZGluZyxmYWN0b3J5PXNhbXBsZS5iaW5kaW5nLlNhbXBsZUJpbmRpbmdGYWN0b3J5DQorDQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlZhbGlkYXRpb25TY2hlbWEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuVmFsaWRhdGlvblNjaGVtYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGEzM2ViCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlZhbGlkYXRpb25TY2hlbWEKQEAgLTAsMCArMSwxOSBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyANCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyANCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KKyMNCitiaW5kaW5nLXNhbXBsZS54c2QNCisNCmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3RvcnkgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkJpbmRpbmdQcm92aWRlckZhY3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZiODZhYwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuQmluZGluZ1Byb3ZpZGVyRmFjdG9yeQpAQCAtMCwwICsxLDIwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorDQorIyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgdGhlIGJpbmRpbmcgZXh0ZW5zaW9uDQorc2FtcGxlLmJpbmRpbmcucnVudGltZS5TYW1wbGVCaW5kaW5nUHJvdmlkZXJGYWN0b3J5O21vZGVsPXNhbXBsZS5iaW5kaW5nLlNhbXBsZUJpbmRpbmcNCisNCmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9zYW1wbGUuYmluZGluZy5TYW1wbGVCaW5kaW5nRmFjdG9yeSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL3NhbXBsZS5iaW5kaW5nLlNhbXBsZUJpbmRpbmdGYWN0b3J5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOGM0YjkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9zYW1wbGUuYmluZGluZy5TYW1wbGVCaW5kaW5nRmFjdG9yeQpAQCAtMCwwICsxLDIwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorDQorIyBJbXBsZW1lbnRhdGlvbiBjbGFzcyBmb3IgbW9kZWwgZmFjdG9yeQ0KK3NhbXBsZS5iaW5kaW5nLlNhbXBsZUJpbmRpbmdGYWN0b3J5DQorDQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZy1zYW1wbGUueHNkIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZy1zYW1wbGUueHNkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2ZjRmODAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9iaW5kaW5nLXNhbXBsZS54c2QKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIgCisgICAgeG1sbnM6c2NhPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisgICAgeG1sbnM6dD0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIiAKKyAgICBlbGVtZW50Rm9ybURlZmF1bHQ9InF1YWxpZmllZCI+CisKKyAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIiAvPgorCisgICAgPGVsZW1lbnQgbmFtZT0iYmluZGluZy5zYW1wbGUiIHR5cGU9InQ6U2FtcGxlQmluZGluZyIgc3Vic3RpdHV0aW9uR3JvdXA9InNjYTpiaW5kaW5nIi8+CisgICAgCisgICAgPGNvbXBsZXhUeXBlIG5hbWU9IlNhbXBsZUJpbmRpbmciPgorICAgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpCaW5kaW5nIj4KKyAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InNvbWVBdHRyIiB0eXBlPSJzdHJpbmciIHVzZT0ib3B0aW9uYWwiLz4KKyAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgorICAgICAgICA8L2NvbXBsZXhDb250ZW50PgorICAgIDwvY29tcGxleFR5cGU+Cis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWZiNDUzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2UgaGVsbG93b3JsZDsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOworCitwdWJsaWMgY2xhc3MgSGVsbG9Xb3JsZENsaWVudCBpbXBsZW1lbnRzIEhlbGxvV29ybGRTZXJ2aWNlIHsKKworICAgIEBSZWZlcmVuY2UKKyAgICBwdWJsaWMgSGVsbG9Xb3JsZFNlcnZpY2UgIHJlZjsKKyAgICAKKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBuYW1lKSB7CisgICAgICAgIHJldHVybiByZWYuc2F5SGVsbG8obmFtZSk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODk4OWU2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSBoZWxsb3dvcmxkOworCisKK3B1YmxpYyBjbGFzcyBIZWxsb1dvcmxkSW1wbCBpbXBsZW1lbnRzIEhlbGxvV29ybGRTZXJ2aWNlIHsKKworICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpIHsKKyAgICAgICAgcmV0dXJuICJIZWxsbyAiICsgbmFtZTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5YjRiZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCitwYWNrYWdlIGhlbGxvd29ybGQ7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKKworQFJlbW90YWJsZQorcHVibGljIGludGVyZmFjZSBIZWxsb1dvcmxkU2VydmljZSB7CisKKyAgICBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpOworCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy90ZXN0L2phdmEvdGVzdC9TYW1wbGVCaW5kaW5nVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL3Rlc3QvamF2YS90ZXN0L1NhbXBsZUJpbmRpbmdUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzMjc0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2JpbmRpbmctc2FtcGxlL3NyYy90ZXN0L2phdmEvdGVzdC9TYW1wbGVCaW5kaW5nVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDUyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSB0ZXN0OworCitpbXBvcnQgaGVsbG93b3JsZC5IZWxsb1dvcmxkU2VydmljZTsKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OworaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIFNhbXBsZUJpbmRpbmdUZXN0Q2FzZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBOb2RlIG5vZGU7CisgICAgCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2F5SGVsbG8oKSB7CisgICAgICAgIEhlbGxvV29ybGRTZXJ2aWNlIHNlcnZpY2UgPSBub2RlLmdldFNlcnZpY2UoSGVsbG9Xb3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb1dvcmxkQ2xpZW50L0hlbGxvV29ybGRTZXJ2aWNlIik7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkhlbGxvIGJvbyIsIHNlcnZpY2Uuc2F5SGVsbG8oImJvbyIpKTsKKyAgICB9CisKKyAgICBAQmVmb3JlQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgaW5pdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJoZWxsb3dvcmxkLmNvbXBvc2l0ZSIpLnN0YXJ0KCk7CisgICAgfQorICAgIAorICAgIEBBZnRlckNsYXNzCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9iaW5kaW5nLXNhbXBsZS9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWJiNjliYQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvYmluZGluZy1zYW1wbGUvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCkBAIC0wLDAgKzEsMzkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorIC0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisJICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KKyAgICAgICAgICAgbmFtZT0iSGVsbG9Xb3JsZENvbXBvc2l0ZSI+DQorICAgICAgICAgICANCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJoZWxsb3dvcmxkLkhlbGxvV29ybGRJbXBsIi8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkU2VydmljZSIgPg0KKyAgICAgICAgICAgIDx0dXNjYW55OmJpbmRpbmcuc2FtcGxlIHNvbWVBdHRyPSJibGEiIC8+DQorICAgICAgICA8L3NlcnZpY2U+DQorICAgIDwvY29tcG9uZW50PiAgIA0KKyAgDQorICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG9Xb3JsZENsaWVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iaGVsbG93b3JsZC5IZWxsb1dvcmxkQ2xpZW50Ii8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InJlZiIgPg0KKyAgICAgICAgICAgIDx0dXNjYW55OmJpbmRpbmcuc2FtcGxlIHVyaT0iSGVsbG9Xb3JsZENvbXBvbmVudC9IZWxsb1dvcmxkU2VydmljZSIvPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50PiAgIA0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL1JFQURNRSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmEwNGViCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvUkVBRE1FCkBAIC0wLDAgKzEsOSBAQAorU2FtcGxlIEltcGxlbWVudGF0aW9uIEV4dGVuc2lvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorVGhpcyBzYW1wbGUgZGVtb25zdHJhdGVzIGhvdyB0byBkZXZlbG9wIGEgbmV3IGNvbXBvbmVudCBpbXBsZW1lbnRhdGlvbiB0eXBlCitmb3IgQXBhY2hlIFR1c2NhbnkgU0NBLiAKKworVGhlIFJFQURNRSBpbiB0aGUgc2FtcGxlcyBkaXJlY3RvcnkgKHRoZSBkaXJlY3RvcnkgdHdvIGRpcmVjdG9yaWVzIGFib3ZlIAordGhpcyBvbmUpIHByb3ZpZGVzIGluc3RydWN0aW9ucyBhYm91dCBidWlsZGluZyBhbmQgcnVubmluZyB0aGUgc2FtcGxlcy4gVGFrZQorYSBsb29rIHRoZXJlLgorCmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9wb20ueG1sIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODE3YTk0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvcG9tLnhtbApAQCAtMCwwICsxLDc5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaW1wbGVtZW50YXRpb24tZXh0ZW5zaW9uPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIEltcGxlbWVudGF0aW9uIEV4dGVuc2lvbjwvbmFtZT4NCisgICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgDQorICAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWNvcmU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorICAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLXdlYnNlcnZpY2U8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIA0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtd2ViMjA8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LXdlYmFwcDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9hcGkvSmF2YS5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvYXBpL0phdmEuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzkyNDAwCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvYXBpL0phdmEuamF2YQpAQCAtMCwwICsxLDM0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHNhbXBsZS5hcGk7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuRklFTEQ7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLkVsZW1lbnRUeXBlLlRZUEU7CitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5hbm5vdGF0aW9uLlJldGVudGlvblBvbGljeS5SVU5USU1FOworCitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uOworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLlRhcmdldDsKKworQFRhcmdldCgge1RZUEUsIEZJRUxEfSkKK0BSZXRlbnRpb24oUlVOVElNRSkKK3B1YmxpYyBAaW50ZXJmYWNlIEphdmEgeworCisgICAgQ2xhc3M8Pz4gdmFsdWUoKTsKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2FwaS9XU0RMLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9hcGkvV1NETC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NTc3MGUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9hcGkvV1NETC5qYXZhCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlLmFwaTsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuYW5ub3RhdGlvbi5FbGVtZW50VHlwZS5GSUVMRDsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uRWxlbWVudFR5cGUuVFlQRTsKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLmFubm90YXRpb24uUmV0ZW50aW9uUG9saWN5LlJVTlRJTUU7CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5SZXRlbnRpb247CitpbXBvcnQgamF2YS5sYW5nLmFubm90YXRpb24uVGFyZ2V0OworCitAVGFyZ2V0KCB7VFlQRSwgRklFTER9KQorQFJldGVudGlvbihSVU5USU1FKQorcHVibGljIEBpbnRlcmZhY2UgV1NETCB7CisKKyAgICBTdHJpbmcgdmFsdWUoKTsKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2FwaS9XU0RMUmVmZXJlbmNlLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9hcGkvV1NETFJlZmVyZW5jZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhZDg0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9hcGkvV1NETFJlZmVyZW5jZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlLmFwaTsKKworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKK3B1YmxpYyBpbnRlcmZhY2UgV1NETFJlZmVyZW5jZSB7CisKKyAgICBFbGVtZW50IGNhbGwoU3RyaW5nIG9wLCBFbGVtZW50IGUpOworCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9pbXBsL0VtYmVkVXRpbC5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9FbWJlZFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2NiY2M5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9FbWJlZFV0aWwuamF2YQpAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuaW1wbDsKKworaW1wb3J0IGphdmEubmV0LlVSSTsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKKworaW1wb3J0IGphdmF4LndzZGwuUG9ydFR5cGU7CitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQXNzZW1ibHlGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9uZW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9uZW50UmVmZXJlbmNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9uZW50U2VydmljZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbnRyYWN0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuSW1wbGVtZW50YXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5SZWZlcmVuY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5TZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkFydGlmYWN0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5Db250cmlidXRpb25GYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5FeHRlbnNpYmxlVVJMQXJ0aWZhY3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlByb2Nlc3NvckNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlVSTEFydGlmYWN0UHJvY2Vzc29yRXh0ZW5zaW9uUG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb2x2ZXIuRXh0ZW5zaWJsZU1vZGVsUmVzb2x2ZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucmVzb2x2ZXIuTW9kZWxSZXNvbHZlckV4dGVuc2lvblBvaW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5GYWN0b3J5RXh0ZW5zaW9uUG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy54bWwuRE9NRGF0YUJpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2VGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGwuV1NETERlZmluaXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYud3NkbC5XU0RMRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsLldTRExJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYud3NkbC5XU0RMT2JqZWN0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlByb3ZpZGVyRmFjdG9yeUV4dGVuc2lvblBvaW50OworCisvKioKKyAqIEEgZmV3IHV0aWxpdHkgZnVuY3Rpb25zIHRvIGhlbHAgZW1iZWQgYSBUdXNjYW55IHJ1bnRpbWUsIGFuZCBhIHNpbXBsZSBEU0wKKyAqIHRvIGhlbHAgYXNzZW1ibGUgYW5kIHJ1biBTQ0RMLgorICovCitwdWJsaWMgY2xhc3MgRW1iZWRVdGlsIHsKKworICAgIC8qKgorICAgICAqIEEgcnVudGltZSBlbWJlZGRlciBjb250ZXh0LCB3aGljaCBjb252ZW5pZW50bHkgaW5pdGlhbGl6ZXMgYSBOb2RlIGZhY3RvcnkKKyAgICAgKiBhbmQgZ2V0cyB0aGUgdmFyaW91cyByZWdpc3RyaWVzLCBmYWN0b3JpZXMgYW5kIGV4dGVuc2lvbiBwb2ludHMgd2UgbmVlZC4KKyAgICAgKi8KKyAgICBzdGF0aWMgY2xhc3MgQ29udGV4dCB7CisgICAgICAgIGZpbmFsIE5vZGVGYWN0b3J5IG5mOworICAgICAgICBmaW5hbCBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGVwcjsKKyAgICAgICAgZmluYWwgRmFjdG9yeUV4dGVuc2lvblBvaW50IGZlcDsKKyAgICAgICAgZmluYWwgQ29udHJpYnV0aW9uRmFjdG9yeSBjZjsKKyAgICAgICAgZmluYWwgQXNzZW1ibHlGYWN0b3J5IGFmOworICAgICAgICBmaW5hbCBKYXZhSW50ZXJmYWNlRmFjdG9yeSBqaWY7CisgICAgICAgIGZpbmFsIFdTRExGYWN0b3J5IHdpZjsKKyAgICAgICAgZmluYWwgVVJMQXJ0aWZhY3RQcm9jZXNzb3JFeHRlbnNpb25Qb2ludCBhcGVwOworICAgICAgICBmaW5hbCBFeHRlbnNpYmxlVVJMQXJ0aWZhY3RQcm9jZXNzb3IgYXByb2M7CisgICAgICAgIGZpbmFsIE1vZGVsUmVzb2x2ZXJFeHRlbnNpb25Qb2ludCBtcmVwOworICAgICAgICBmaW5hbCBQcm92aWRlckZhY3RvcnlFeHRlbnNpb25Qb2ludCBwZmVwOworICAgICAgICAKKyAgICAgICAgQ29udGV4dChmaW5hbCBOb2RlRmFjdG9yeSBuZikgeworICAgICAgICAgICAgdGhpcy5uZiA9IG5mOworICAgICAgICAgICAgZXByID0gbmYuZ2V0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSgpOworICAgICAgICAgICAgZmVwID0gZXByLmdldEV4dGVuc2lvblBvaW50KEZhY3RvcnlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CisgICAgICAgICAgICBjZiA9IGZlcC5nZXRGYWN0b3J5KENvbnRyaWJ1dGlvbkZhY3RvcnkuY2xhc3MpOworICAgICAgICAgICAgYWYgPSBmZXAuZ2V0RmFjdG9yeShBc3NlbWJseUZhY3RvcnkuY2xhc3MpOworICAgICAgICAgICAgamlmID0gZmVwLmdldEZhY3RvcnkoSmF2YUludGVyZmFjZUZhY3RvcnkuY2xhc3MpOworICAgICAgICAgICAgd2lmID0gZmVwLmdldEZhY3RvcnkoV1NETEZhY3RvcnkuY2xhc3MpOworICAgICAgICAgICAgYXBlcCA9IGVwci5nZXRFeHRlbnNpb25Qb2ludChVUkxBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50LmNsYXNzKTsKKyAgICAgICAgICAgIGFwcm9jID0gbmV3IEV4dGVuc2libGVVUkxBcnRpZmFjdFByb2Nlc3NvcihhcGVwKTsKKyAgICAgICAgICAgIG1yZXAgPSBlcHIuZ2V0RXh0ZW5zaW9uUG9pbnQoTW9kZWxSZXNvbHZlckV4dGVuc2lvblBvaW50LmNsYXNzKTsKKyAgICAgICAgICAgIHBmZXAgPSBlcHIuZ2V0RXh0ZW5zaW9uUG9pbnQoUHJvdmlkZXJGYWN0b3J5RXh0ZW5zaW9uUG9pbnQuY2xhc3MpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHN0YXRpYyBDb250ZXh0IGVtYmVkQ29udGV4dChOb2RlRmFjdG9yeSBuZikgeworICAgICAgICByZXR1cm4gbmV3IENvbnRleHQobmYpOworICAgIH0KKyAgICAKKyAgICAvKioKKyAgICAgKiBBIG1pbmkgRFNMIHRvIGhlbHAgYnVpbGQgYW5kIGFzc2VtYmxlIGNvbnRyaWJ1dGlvbnMgYW5kIFNDREwgY29tcG9zaXRlcy4KKyAgICAgKi8KKyAgICBpbnRlcmZhY2UgQnVpbGRlcjxUPiB7CisgICAgICAgIFQgYnVpbGQoQ29udGV4dCBlYyk7CisgICAgfQorCisgICAgc3RhdGljIDxUPiBUIGJ1aWxkKGZpbmFsIEJ1aWxkZXI8VD4gYnVpbGRlciwgZmluYWwgQ29udGV4dCBlYykgeworICAgICAgICByZXR1cm4gYnVpbGRlci5idWlsZChlYyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgY29udHJpYnV0aW9uIGJ1aWxkZXIuCisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Q29udHJpYnV0aW9uPiBjb250cmliKGZpbmFsIFN0cmluZyB1cmksIGZpbmFsIFN0cmluZyBsb2MsIGZpbmFsIEJ1aWxkZXI8QXJ0aWZhY3Q+Li4uIGFydGlmYWN0cykgeworICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXI8Q29udHJpYnV0aW9uPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBDb250cmlidXRpb24gYnVpbGQoZmluYWwgQ29udGV4dCBlYykgeworICAgICAgICAgICAgICAgIGZpbmFsIENvbnRyaWJ1dGlvbiBjID0gZWMuY2YuY3JlYXRlQ29udHJpYnV0aW9uKCk7CisgICAgICAgICAgICAgICAgYy5zZXRVUkkodXJpKTsKKyAgICAgICAgICAgICAgICBjLnNldExvY2F0aW9uKGxvYyk7CisgICAgICAgICAgICAgICAgYy5zZXRNb2RlbFJlc29sdmVyKG5ldyBFeHRlbnNpYmxlTW9kZWxSZXNvbHZlcihjLCBlYy5tcmVwLCBlYy5mZXApKTsKKyAgICAgICAgICAgICAgICBmb3IoQnVpbGRlcjxBcnRpZmFjdD4gYTogYXJ0aWZhY3RzKQorICAgICAgICAgICAgICAgICAgICBjLmdldEFydGlmYWN0cygpLmFkZChhLmJ1aWxkKGVjKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGM7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIFJldHVybiBhbiBhcnRpZmFjdCBidWlsZGVyLgorICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPEFydGlmYWN0PiBhcnRpZmFjdChmaW5hbCBTdHJpbmcgdXJpLCBmaW5hbCBPYmplY3QgbW9kZWwpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyPEFydGlmYWN0PigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBBcnRpZmFjdCBidWlsZChmaW5hbCBDb250ZXh0IGVjKSB7CisgICAgICAgICAgICAgICAgZmluYWwgQXJ0aWZhY3QgYSA9IGVjLmNmLmNyZWF0ZUFydGlmYWN0KCk7CisgICAgICAgICAgICAgICAgYS5zZXRVUkkodXJpKTsKKyAgICAgICAgICAgICAgICBhLnNldE1vZGVsKG1vZGVsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBjb21wb3NpdGUgYnVpbGRlci4KKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxDb21wb3NpdGU+IGNvbXBvc2l0ZShmaW5hbCBTdHJpbmcgbnMsIGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBCdWlsZGVyPENvbXBvbmVudD4uLi4gY29tcG9uZW50cykgeworICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXI8Q29tcG9zaXRlPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBDb21wb3NpdGUgYnVpbGQoZmluYWwgQ29udGV4dCBlYykgeworICAgICAgICAgICAgICAgIGZpbmFsIENvbXBvc2l0ZSBjb21wb3MgPSBlYy5hZi5jcmVhdGVDb21wb3NpdGUoKTsKKyAgICAgICAgICAgICAgICBjb21wb3Muc2V0TmFtZShuZXcgUU5hbWUobnMsIG5hbWUpKTsKKyAgICAgICAgICAgICAgICBmb3IoZmluYWwgQnVpbGRlcjxDb21wb25lbnQ+IGM6IGNvbXBvbmVudHMpCisgICAgICAgICAgICAgICAgICAgIGNvbXBvcy5nZXRDb21wb25lbnRzKCkuYWRkKGMuYnVpbGQoZWMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29tcG9zOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIGNvbXBvbmVudCBidWlsZGVyLgorICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPENvbXBvbmVudD4gY29tcG9uZW50KGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBCdWlsZGVyPEltcGxlbWVudGF0aW9uPiBpbXBsLCBmaW5hbCBCdWlsZGVyPENvbXBvbmVudFJlZmVyZW5jZT4uLi4gcmVmZXJlbmNlcykgeworICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXI8Q29tcG9uZW50PigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBDb21wb25lbnQgYnVpbGQoZmluYWwgQ29udGV4dCBlYykgeworICAgICAgICAgICAgICAgIGZpbmFsIENvbXBvbmVudCBjID0gZWMuYWYuY3JlYXRlQ29tcG9uZW50KCk7CisgICAgICAgICAgICAgICAgYy5zZXROYW1lKG5hbWUpOworICAgICAgICAgICAgICAgIGMuc2V0SW1wbGVtZW50YXRpb24oaW1wbC5idWlsZChlYykpOworICAgICAgICAgICAgICAgIGZvcihCdWlsZGVyPENvbXBvbmVudFJlZmVyZW5jZT4gcjogcmVmZXJlbmNlcykKKyAgICAgICAgICAgICAgICAgICAgYy5nZXRSZWZlcmVuY2VzKCkuYWRkKHIuYnVpbGQoZWMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYW4gaW1wbGVtZW50YXRpb24gYnVpbGRlci4KKyAgICAgKi8KKyAgICBzdGF0aWMgQnVpbGRlcjxJbXBsZW1lbnRhdGlvbj4gaW1wbGVtZW50YXRpb24oZmluYWwgQ2xhc3M8Pz4gY2xhenosIGZpbmFsIEJ1aWxkZXI8Q29udHJhY3Q+Li4uIGNvbnRyYWN0cykgeworICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXI8SW1wbGVtZW50YXRpb24+KCkgeworICAgICAgICAgICAgcHVibGljIFNhbXBsZUltcGxlbWVudGF0aW9uIGJ1aWxkKGZpbmFsIENvbnRleHQgZWMpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBTYW1wbGVJbXBsZW1lbnRhdGlvbiBpbXBsID0gSW1wbFV0aWwuaW1wbGVtZW50YXRpb24oY2xhenouZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBpbXBsLmNsYXp6ID0gY2xheno7CisgICAgICAgICAgICAgICAgaW1wbC5zZXRVbnJlc29sdmVkKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBmb3IoZmluYWwgQnVpbGRlcjxDb250cmFjdD4gYjogY29udHJhY3RzKSB7CisgICAgICAgICAgICAgICAgICAgIENvbnRyYWN0IGMgPSBiLmJ1aWxkKGVjKTsKKyAgICAgICAgICAgICAgICAgICAgaWYoYyBpbnN0YW5jZW9mIFNlcnZpY2UpCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsLmdldFNlcnZpY2VzKCkuYWRkKChTZXJ2aWNlKWMpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsLmdldFJlZmVyZW5jZXMoKS5hZGQoKFJlZmVyZW5jZSljKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGltcGw7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgcmVmZXJlbmNlIGJ1aWxkZXIuCisgICAgICovCisgICAgc3RhdGljIEJ1aWxkZXI8Q29udHJhY3Q+IHJlZmVyZW5jZShmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgQ2xhc3M8Pz4gYykgeworICAgICAgICByZXR1cm4gbmV3IEJ1aWxkZXI8Q29udHJhY3Q+KCkgeworICAgICAgICAgICAgcHVibGljIFJlZmVyZW5jZSBidWlsZChmaW5hbCBDb250ZXh0IGVjKSB7CisgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEltcGxVdGlsLnJlZmVyZW5jZShuYW1lLCBjLCBlYy5qaWYsIGVjLmFmKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgc3RhdGljIEJ1aWxkZXI8Q29udHJhY3Q+IHJlZmVyZW5jZShmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgV1NETEludGVyZmFjZSBjKSB7CisgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcjxDb250cmFjdD4oKSB7CisgICAgICAgICAgICBwdWJsaWMgUmVmZXJlbmNlIGJ1aWxkKGZpbmFsIENvbnRleHQgZWMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gSW1wbFV0aWwucmVmZXJlbmNlKG5hbWUsIGMsIGVjLndpZiwgZWMuYWYpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0KKworICAgIHN0YXRpYyBCdWlsZGVyPENvbXBvbmVudFJlZmVyZW5jZT4gcmVmZXJlbmNlKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgdGFyZ2V0KSB7CisgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcjxDb21wb25lbnRSZWZlcmVuY2U+KCkgeworICAgICAgICAgICAgcHVibGljIENvbXBvbmVudFJlZmVyZW5jZSBidWlsZChmaW5hbCBDb250ZXh0IGVjKSB7CisgICAgICAgICAgICAgICAgZmluYWwgQ29tcG9uZW50UmVmZXJlbmNlIHIgPSBlYy5hZi5jcmVhdGVDb21wb25lbnRSZWZlcmVuY2UoKTsKKyAgICAgICAgICAgICAgICByLnNldE5hbWUobmFtZSk7CisgICAgICAgICAgICAgICAgZmluYWwgQ29tcG9uZW50U2VydmljZSBzID0gZWMuYWYuY3JlYXRlQ29tcG9uZW50U2VydmljZSgpOworICAgICAgICAgICAgICAgIHMuc2V0VW5yZXNvbHZlZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBzLnNldE5hbWUodGFyZ2V0KTsKKyAgICAgICAgICAgICAgICByLmdldFRhcmdldHMoKS5hZGQocyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgc2VydmljZSBidWlsZGVyLgorICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPENvbnRyYWN0PiBzZXJ2aWNlKGZpbmFsIENsYXNzPD8+IGMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBCdWlsZGVyPENvbnRyYWN0PigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBTZXJ2aWNlIGJ1aWxkKGZpbmFsIENvbnRleHQgZWMpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW1wbFV0aWwuc2VydmljZShjLCBlYy5qaWYsIGVjLmFmKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgc3RhdGljIEJ1aWxkZXI8Q29udHJhY3Q+IHNlcnZpY2UoZmluYWwgV1NETEludGVyZmFjZSBjKSB7CisgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcjxDb250cmFjdD4oKSB7CisgICAgICAgICAgICBwdWJsaWMgU2VydmljZSBidWlsZChmaW5hbCBDb250ZXh0IGVjKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEltcGxVdGlsLnNlcnZpY2UoYywgZWMud2lmLCBlYy5hZik7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgV1NETEludGVyZmFjZSBidWlsZGVyIHdoaWNoIGxvYWRzIGEgV1NETCBpbnRvIGEgY29udHJpYnV0aW9uLgorICAgICAqLworICAgIHN0YXRpYyBCdWlsZGVyPFdTRExJbnRlcmZhY2U+IHdzZGxpKGZpbmFsIFN0cmluZyB1cmksIGZpbmFsIFN0cmluZyBucywgZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIENvbnRyaWJ1dGlvbiBjKSB7CisgICAgICAgIHJldHVybiBuZXcgQnVpbGRlcjxXU0RMSW50ZXJmYWNlPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBXU0RMSW50ZXJmYWNlIGJ1aWxkKGZpbmFsIENvbnRleHQgZWMpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBmaW5hbCBQcm9jZXNzb3JDb250ZXh0IGN0eCA9IG5ldyBQcm9jZXNzb3JDb250ZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFdTRExEZWZpbml0aW9uIHdkID0gZWMuYXByb2MucmVhZChudWxsLCBuZXcgVVJJKHVyaSksIG5ldyBVUkwobmV3IFVSTChjLmdldExvY2F0aW9uKCkpLCB1cmkpLCBjdHgsIFdTRExEZWZpbml0aW9uLmNsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgYy5nZXRNb2RlbFJlc29sdmVyKCkuYWRkTW9kZWwod2QsIGN0eCk7CisgICAgICAgICAgICAgICAgICAgIGMuZ2V0TW9kZWxSZXNvbHZlcigpLnJlc29sdmVNb2RlbChXU0RMRGVmaW5pdGlvbi5jbGFzcywgd2QsIGN0eCk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFdTRExPYmplY3Q8UG9ydFR5cGU+IHB0ID0gd2QuZ2V0V1NETE9iamVjdChQb3J0VHlwZS5jbGFzcywgbmV3IFFOYW1lKG5zLCBuYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIGlmKHB0ID09IG51bGwpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbigiQ291bGRuJ3QgZmluZCAiICsgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGZpbmFsIFdTRExJbnRlcmZhY2UgbndpID0gZWMud2lmLmNyZWF0ZVdTRExJbnRlcmZhY2UocHQuZ2V0RWxlbWVudCgpLCB3ZCwgYy5nZXRNb2RlbFJlc29sdmVyKCksIG51bGwpOworICAgICAgICAgICAgICAgICAgICBud2kuc2V0V3NkbERlZmluaXRpb24od2QpOworICAgICAgICAgICAgICAgICAgICBud2kucmVzZXREYXRhQmluZGluZyhET01EYXRhQmluZGluZy5OQU1FKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG53aTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBleHRlbnNpb24gcG9pbnQgcmVnaXN0cnkgdXNlZCBieSBvdXIgbm9kZXMuCisgICAgICovCisgICAgc3RhdGljIEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXh0ZW5zaW9uUG9pbnRzKGZpbmFsIENvbnRleHQgZWMpIHsKKyAgICAgICAgcmV0dXJuIGVjLmVwcjsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBwcm92aWRlciBmYWN0b3J5IGV4dGVuc2lvbiBwb2ludCB1c2VkIGJ5IG91ciBub2Rlcy4KKyAgICAgKi8KKyAgICBzdGF0aWMgUHJvdmlkZXJGYWN0b3J5RXh0ZW5zaW9uUG9pbnQgcHJvdmlkZXJGYWN0b3JpZXMoZmluYWwgQ29udGV4dCBlYykgeworICAgICAgICByZXR1cm4gZWMucGZlcDsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBBZGQgYSBkZXBsb3lhYmxlIGNvbXBvc2l0ZSB0byBhIGNvbnRyaWJ1dGlvbi4KKyAgICAgKi8KKyAgICBzdGF0aWMgQ29udHJpYnV0aW9uIGRlcGxveShmaW5hbCBDb250cmlidXRpb24gY29udHJpYiwgZmluYWwgQ29tcG9zaXRlLi4uIGNvbXBzKSB7CisgICAgICAgIGZvcihDb21wb3NpdGUgYzogY29tcHMpCisgICAgICAgICAgICBjb250cmliLmdldERlcGxveWFibGVzKCkuYWRkKGMpOworICAgICAgICByZXR1cm4gY29udHJpYjsKKyAgICB9CisgICAgCisgICAgLyoqCisgICAgICogQ29uZmlndXJlIGEgbm9kZSB3aXRoIGEgbGlzdCBvZiBjb250cmlidXRpb25zLgorICAgICAqLworICAgIHN0YXRpYyBOb2RlIG5vZGUoZmluYWwgTm9kZUZhY3RvcnkgbmYsIGZpbmFsIENvbnRyaWJ1dGlvbi4uLiBjb250cmlidXRpb25zKSB7CisgICAgICAgIHJldHVybiBuZi5jcmVhdGVOb2RlKEFycmF5cy5hc0xpc3QoY29udHJpYnV0aW9ucykpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9JbXBsVXRpbC5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9JbXBsVXRpbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZDRjZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9pbXBsL0ltcGxVdGlsLmphdmEKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlLmltcGw7CisKK2ltcG9ydCBqYXZhLmxhbmcuYW5ub3RhdGlvbi5Bbm5vdGF0aW9uOworCitpbXBvcnQgamF2YXgueG1sLm5hbWVzcGFjZS5RTmFtZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQXNzZW1ibHlGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUmVmZXJlbmNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuU2VydmljZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnZhbGlkSW50ZXJmYWNlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZUNvbnRyYWN0OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YUludGVyZmFjZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYud3NkbC5XU0RMRGVmaW5pdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsLldTRExGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGwuV1NETEludGVyZmFjZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsLldTRExJbnRlcmZhY2VDb250cmFjdDsKKworaW1wb3J0IHNhbXBsZS5hcGkuSmF2YTsKK2ltcG9ydCBzYW1wbGUuYXBpLldTREw7CisKKy8qKgorICogVXRpbGl0eSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wIGEgY29tcG9uZW50IGltcGxlbWVudGF0aW9uIGV4dGVuc2lvbi4KKyAqLworY2xhc3MgSW1wbFV0aWwgeworCisgICAgLyoqCisgICAgICogUmV0dXJuIGEgU2FtcGxlIGltcGxlbWVudGF0aW9uIHdpdGggdGhlIGdpdmVuIG5hbWUuCisgICAgICovCisgICAgc3RhdGljIFNhbXBsZUltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uKFN0cmluZyBuYW1lKSB7CisgICAgICAgIGZpbmFsIFNhbXBsZUltcGxlbWVudGF0aW9uIGltcGwgPSBuZXcgU2FtcGxlSW1wbGVtZW50YXRpb24obmFtZSk7CisgICAgICAgIGltcGwuc2V0VW5yZXNvbHZlZCh0cnVlKTsKKyAgICAgICAgcmV0dXJuIGltcGw7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBKYXZhIGNsYXNzIGNvbmZpZ3VyZWQgb24gYW4gYW5ub3RhdGlvbi4KKyAgICAgKi8KKyAgICBzdGF0aWMgQ2xhc3M8Pz4gY2xhenooZmluYWwgQW5ub3RhdGlvbiBhKSB7CisgICAgICAgIHJldHVybiAoKEphdmEpYSkudmFsdWUoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gdGhlIFdTREwgUU5hbWUgY29uZmlndXJlZCBvbiBhbiBhbm5vdGF0aW9uLgorICAgICAqLworICAgIHN0YXRpYyBRTmFtZSBxbmFtZShmaW5hbCBBbm5vdGF0aW9uIGEpIHsKKyAgICAgICAgZmluYWwgU3RyaW5nIHVyaSA9ICgoV1NETClhKS52YWx1ZSgpOworICAgICAgICBmaW5hbCBpbnQgaCA9IHVyaS5pbmRleE9mKCcjJyk7CisgICAgICAgIHJldHVybiBuZXcgUU5hbWUodXJpLnN1YnN0cmluZygwLCBoKSwgdXJpLnN1YnN0cmluZyhoICsgMSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYSBKYXZhIGNsYXNzIHRvIGFuIGludGVyZmFjZSBjb250cmFjdC4KKyAgICAgKi8KKyAgICBzdGF0aWMgSmF2YUludGVyZmFjZUNvbnRyYWN0IGNvbnRyYWN0KGZpbmFsIENsYXNzPD8+IGMsIGZpbmFsIEphdmFJbnRlcmZhY2VGYWN0b3J5IGppZikgdGhyb3dzIEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24geworICAgICAgICBmaW5hbCBKYXZhSW50ZXJmYWNlQ29udHJhY3QgaWMgPSBqaWYuY3JlYXRlSmF2YUludGVyZmFjZUNvbnRyYWN0KCk7CisgICAgICAgIGljLnNldEludGVyZmFjZShqaWYuY3JlYXRlSmF2YUludGVyZmFjZShjKSk7CisgICAgICAgIHJldHVybiBpYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgV1NETCBpbnRlcmZhY2UgdG8gYW4gaW50ZXJmYWNlIGNvbnRyYWN0LgorICAgICAqLworICAgIHN0YXRpYyBXU0RMSW50ZXJmYWNlQ29udHJhY3QgY29udHJhY3QoZmluYWwgV1NETEludGVyZmFjZSB3aSwgZmluYWwgV1NETEZhY3Rvcnkgd2YpIHsKKyAgICAgICAgZmluYWwgV1NETEludGVyZmFjZUNvbnRyYWN0IGljID0gd2YuY3JlYXRlV1NETEludGVyZmFjZUNvbnRyYWN0KCk7CisgICAgICAgIGljLnNldEludGVyZmFjZSh3aSk7CisgICAgICAgIHJldHVybiBpYzsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgSmF2YSBjbGFzcyB0byBhIHNlcnZpY2UuCisgICAgICovCisgICAgc3RhdGljIFNlcnZpY2Ugc2VydmljZShmaW5hbCBDbGFzczw/PiBjLCBmaW5hbCBKYXZhSW50ZXJmYWNlRmFjdG9yeSBqaWYsIGZpbmFsIEFzc2VtYmx5RmFjdG9yeSBhZikgdGhyb3dzIEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24geworICAgICAgICBTZXJ2aWNlIHMgPSBhZi5jcmVhdGVTZXJ2aWNlKCk7CisgICAgICAgIHMuc2V0TmFtZShjLmdldFNpbXBsZU5hbWUoKSk7CisgICAgICAgIHMuc2V0SW50ZXJmYWNlQ29udHJhY3QoY29udHJhY3QoYywgamlmKSk7CisgICAgICAgIHJldHVybiBzOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYSBXU0RMIGludGVyZmFjZSB0byBhIHNlcnZpY2UuCisgICAgICovCisgICAgc3RhdGljIFNlcnZpY2Ugc2VydmljZShmaW5hbCBXU0RMSW50ZXJmYWNlIHdpLCBmaW5hbCBXU0RMRmFjdG9yeSB3ZiwgZmluYWwgQXNzZW1ibHlGYWN0b3J5IGFmKSB7CisgICAgICAgIFNlcnZpY2UgcyA9IGFmLmNyZWF0ZVNlcnZpY2UoKTsKKyAgICAgICAgcy5zZXROYW1lKHdpLmdldE5hbWUoKS5nZXRMb2NhbFBhcnQoKSk7CisgICAgICAgIHMuc2V0SW50ZXJmYWNlQ29udHJhY3QoY29udHJhY3Qod2ksIHdmKSk7CisgICAgICAgIHJldHVybiBzOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYSBuYW1lIGFuZCBKYXZhIGNsYXNzIHRvIGEgcmVmZXJlbmNlLgorICAgICAqLworICAgIHN0YXRpYyBSZWZlcmVuY2UgcmVmZXJlbmNlKGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBDbGFzczw/PiBjLCBmaW5hbCBKYXZhSW50ZXJmYWNlRmFjdG9yeSBqaWYsIGZpbmFsIEFzc2VtYmx5RmFjdG9yeSBhZikgdGhyb3dzIEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24geworICAgICAgICBmaW5hbCBSZWZlcmVuY2UgciA9IGFmLmNyZWF0ZVJlZmVyZW5jZSgpOworICAgICAgICByLnNldE5hbWUobmFtZSk7CisgICAgICAgIHIuc2V0SW50ZXJmYWNlQ29udHJhY3QoY29udHJhY3QoYywgamlmKSk7CisgICAgICAgIHJldHVybiByOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYSBuYW1lIGFuZCBXU0RMIGludGVyZmFjZSB0byBhIHJlZmVyZW5jZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgUmVmZXJlbmNlIHJlZmVyZW5jZShmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgV1NETEludGVyZmFjZSB3aSwgZmluYWwgV1NETEZhY3Rvcnkgd2YsIGZpbmFsIEFzc2VtYmx5RmFjdG9yeSBhZikgeworICAgICAgICBmaW5hbCBSZWZlcmVuY2UgciA9IGFmLmNyZWF0ZVJlZmVyZW5jZSgpOworICAgICAgICByLnNldE5hbWUobmFtZSk7CisgICAgICAgIHIuc2V0SW50ZXJmYWNlQ29udHJhY3QoY29udHJhY3Qod2ksIHdmKSk7CisgICAgICAgIHJldHVybiByOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYSBXU0RMIHFuYW1lIHRvIGEgV1NETCBpbnRlcmZhY2UuCisgICAgICovCisgICAgc3RhdGljIFdTRExJbnRlcmZhY2UgaW50ZXJmYXplKGZpbmFsIFFOYW1lIG5hbWUsIGZpbmFsIFdTRExGYWN0b3J5IHdpZikgeworICAgICAgICBmaW5hbCBXU0RMSW50ZXJmYWNlIHdpciA9IHdpZi5jcmVhdGVXU0RMSW50ZXJmYWNlKCk7CisgICAgICAgIHdpci5zZXRVbnJlc29sdmVkKHRydWUpOworICAgICAgICB3aXIuc2V0TmFtZShuYW1lKTsKKyAgICAgICAgcmV0dXJuIHdpcjsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgV1NETCBxbmFtZSB0byBhIFdTREwgZGVmaW5pdGlvbi4KKyAgICAgKi8KKyAgICBzdGF0aWMgV1NETERlZmluaXRpb24gZGVmaW5pdGlvbihmaW5hbCBRTmFtZSBuYW1lLCBmaW5hbCBXU0RMRmFjdG9yeSB3aWYpIHsKKyAgICAgICAgZmluYWwgV1NETERlZmluaXRpb24gd2RyID0gd2lmLmNyZWF0ZVdTRExEZWZpbml0aW9uKCk7CisgICAgICAgIHdkci5zZXRVbnJlc29sdmVkKHRydWUpOworICAgICAgICB3ZHIuc2V0TmFtZXNwYWNlKG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOworICAgICAgICB3ZHIuc2V0TmFtZU9mUG9ydFR5cGVUb1Jlc29sdmUobmFtZSk7CisgICAgICAgIHJldHVybiB3ZHI7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9TYW1wbGVJbXBsZW1lbnRhdGlvbi5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9TYW1wbGVJbXBsZW1lbnRhdGlvbi5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxY2U3MWEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9pbXBsL1NhbXBsZUltcGxlbWVudGF0aW9uLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugc2FtcGxlLmltcGw7CisKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5pbXBsLkltcGxlbWVudGF0aW9uSW1wbDsKKworLyoqCisgKiBNb2RlbCByZXByZXNlbnRpbmcgYSBTYW1wbGUgaW1wbGVtZW50YXRpb24gaW4gYW4gU0NBIGFzc2VtYmx5LgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFNhbXBsZUltcGxlbWVudGF0aW9uIGV4dGVuZHMgSW1wbGVtZW50YXRpb25JbXBsIHsKKyAgICBzdGF0aWMgZmluYWwgUU5hbWUgUU4gPSBuZXcgUU5hbWUoU0NBMTFfVFVTQ0FOWV9OUywgImltcGxlbWVudGF0aW9uLnNhbXBsZSIpOworCisgICAgZmluYWwgU3RyaW5nIG5hbWU7CisgICAgQ2xhc3M8Pz4gY2xheno7CisKKyAgICBTYW1wbGVJbXBsZW1lbnRhdGlvbihmaW5hbCBTdHJpbmcgbmFtZSkgeworICAgICAgICBzdXBlcihRTik7CisgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9pbXBsL1NhbXBsZUltcGxlbWVudGF0aW9uUHJvY2Vzc29yLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9pbXBsL1NhbXBsZUltcGxlbWVudGF0aW9uUHJvY2Vzc29yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAxNzAzMAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2ltcGwvU2FtcGxlSW1wbGVtZW50YXRpb25Qcm9jZXNzb3IuamF2YQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugc2FtcGxlLmltcGw7CisKK2ltcG9ydCBzdGF0aWMgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Db25zdGFudHMuRU5EX0VMRU1FTlQ7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLlNhbXBsZUltcGxlbWVudGF0aW9uLlFOOworaW1wb3J0IHN0YXRpYyBzYW1wbGUuaW1wbC5JbXBsVXRpbC5jbGF6ejsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuSW1wbFV0aWwuZGVmaW5pdGlvbjsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuSW1wbFV0aWwuaW1wbGVtZW50YXRpb247CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLkltcGxVdGlsLmludGVyZmF6ZTsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuSW1wbFV0aWwucW5hbWU7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLkltcGxVdGlsLnJlZmVyZW5jZTsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuSW1wbFV0aWwuc2VydmljZTsKKworaW1wb3J0IGphdmEubGFuZy5hbm5vdGF0aW9uLkFubm90YXRpb247CitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CisKK2ltcG9ydCBqYXZheC53c2RsLlBvcnRUeXBlOworaW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1FeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxTdHJlYW1Xcml0ZXI7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkFzc2VtYmx5RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQmFzZVN0QVhBcnRpZmFjdFByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uV3JpdGVFeGNlcHRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlByb2Nlc3NvckNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvbHZlci5DbGFzc1JlZmVyZW5jZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5yZXNvbHZlci5Nb2RlbFJlc29sdmVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5GYWN0b3J5RXh0ZW5zaW9uUG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kYXRhYmluZGluZy54bWwuRE9NRGF0YUJpbmRpbmc7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW52YWxpZEludGVyZmFjZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2VGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGwuV1NETERlZmluaXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYud3NkbC5XU0RMRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsLldTRExJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYud3NkbC5XU0RMT2JqZWN0OworCitpbXBvcnQgc2FtcGxlLmFwaS5KYXZhOworaW1wb3J0IHNhbXBsZS5hcGkuV1NETDsKKworLyoqCisgKiBTdEFYIGFydGlmYWN0IHByb2Nlc3NvciBmb3IgU2FtcGxlIGltcGxlbWVudGF0aW9ucy4KKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBTYW1wbGVJbXBsZW1lbnRhdGlvblByb2Nlc3NvciBleHRlbmRzIEJhc2VTdEFYQXJ0aWZhY3RQcm9jZXNzb3IgaW1wbGVtZW50cyBTdEFYQXJ0aWZhY3RQcm9jZXNzb3I8U2FtcGxlSW1wbGVtZW50YXRpb24+IHsKKyAgICBmaW5hbCBBc3NlbWJseUZhY3RvcnkgYWY7CisgICAgZmluYWwgSmF2YUludGVyZmFjZUZhY3RvcnkgamlmOworICAgIGZpbmFsIFdTRExGYWN0b3J5IHdmOworCisgICAgcHVibGljIFNhbXBsZUltcGxlbWVudGF0aW9uUHJvY2Vzc29yKGZpbmFsIEV4dGVuc2lvblBvaW50UmVnaXN0cnkgZXApIHsKKyAgICAgICAgZmluYWwgRmFjdG9yeUV4dGVuc2lvblBvaW50IGZlcCA9IGVwLmdldEV4dGVuc2lvblBvaW50KEZhY3RvcnlFeHRlbnNpb25Qb2ludC5jbGFzcyk7CisgICAgICAgIHRoaXMuYWYgPSBmZXAuZ2V0RmFjdG9yeShBc3NlbWJseUZhY3RvcnkuY2xhc3MpOworICAgICAgICB0aGlzLmppZiA9IGZlcC5nZXRGYWN0b3J5KEphdmFJbnRlcmZhY2VGYWN0b3J5LmNsYXNzKTsKKyAgICAgICAgdGhpcy53ZiA9IGZlcC5nZXRGYWN0b3J5KFdTRExGYWN0b3J5LmNsYXNzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgUU5hbWUgZ2V0QXJ0aWZhY3RUeXBlKCkgeworICAgICAgICByZXR1cm4gUU47CisgICAgfQorCisgICAgcHVibGljIENsYXNzPFNhbXBsZUltcGxlbWVudGF0aW9uPiBnZXRNb2RlbFR5cGUoKSB7CisgICAgICAgIHJldHVybiBTYW1wbGVJbXBsZW1lbnRhdGlvbi5jbGFzczsKKyAgICB9CisKKyAgICBwdWJsaWMgU2FtcGxlSW1wbGVtZW50YXRpb24gcmVhZChmaW5hbCBYTUxTdHJlYW1SZWFkZXIgciwgZmluYWwgUHJvY2Vzc29yQ29udGV4dCBjdHgpIHRocm93cyBDb250cmlidXRpb25SZWFkRXhjZXB0aW9uLCBYTUxTdHJlYW1FeGNlcHRpb24geworICAgICAgICAvLyBSZWFkIHRoZSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24gZWxlbWVudAorICAgICAgICBmaW5hbCBTYW1wbGVJbXBsZW1lbnRhdGlvbiBpbXBsID0gaW1wbGVtZW50YXRpb24oci5nZXRBdHRyaWJ1dGVWYWx1ZShudWxsLCAiY2xhc3MiKSk7CisgICAgICAgIHdoaWxlKHIuaGFzTmV4dCgpICYmICEoci5uZXh0KCkgPT0gRU5EX0VMRU1FTlQgJiYgUU4uZXF1YWxzKHIuZ2V0TmFtZSgpKSkpCisgICAgICAgICAgICA7CisgICAgICAgIHJldHVybiBpbXBsOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHJlc29sdmUoZmluYWwgU2FtcGxlSW1wbGVtZW50YXRpb24gaW1wbCwgZmluYWwgTW9kZWxSZXNvbHZlciByZXMsIGZpbmFsIFByb2Nlc3NvckNvbnRleHQgY3R4KSB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBSZXNvbHZlIGFuZCBpbnRyb3NwZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiBjbGFzcworICAgICAgICAgICAgaW1wbC5jbGF6eiA9IHJlc29sdmUoaW1wbC5uYW1lLCByZXMsIGN0eCk7CisKKyAgICAgICAgICAgIGZvcihmaW5hbCBBbm5vdGF0aW9uIGE6IGltcGwuY2xhenouZ2V0QW5ub3RhdGlvbnMoKSkgeworICAgICAgICAgICAgICAgIGlmKGEgaW5zdGFuY2VvZiBKYXZhKQorICAgICAgICAgICAgICAgICAgICBpbXBsLmdldFNlcnZpY2VzKCkuYWRkKHNlcnZpY2UoY2xhenooYSksIGppZiwgYWYpKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmKGEgaW5zdGFuY2VvZiBXU0RMKQorICAgICAgICAgICAgICAgICAgICBpbXBsLmdldFNlcnZpY2VzKCkuYWRkKHNlcnZpY2UocmVzb2x2ZShxbmFtZShhKSwgcmVzLCBjdHgsIHdmKSwgd2YsIGFmKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcihGaWVsZCBmOiBpbXBsLmNsYXp6LmdldERlY2xhcmVkRmllbGRzKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IoZmluYWwgQW5ub3RhdGlvbiBhOiBmLmdldEFubm90YXRpb25zKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoYSBpbnN0YW5jZW9mIEphdmEpCisgICAgICAgICAgICAgICAgICAgICAgICBpbXBsLmdldFJlZmVyZW5jZXMoKS5hZGQocmVmZXJlbmNlKGYuZ2V0TmFtZSgpLCBjbGF6eihhKSwgamlmLCBhZikpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGEgaW5zdGFuY2VvZiBXU0RMKQorICAgICAgICAgICAgICAgICAgICAgICAgaW1wbC5nZXRSZWZlcmVuY2VzKCkuYWRkKHJlZmVyZW5jZShmLmdldE5hbWUoKSwgcmVzb2x2ZShxbmFtZShhKSwgcmVzLCBjdHgsIHdmKSwgd2YsIGFmKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbXBsLnNldFVucmVzb2x2ZWQoZmFsc2UpOworICAgICAgICB9IGNhdGNoKEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCB3cml0ZShmaW5hbCBTYW1wbGVJbXBsZW1lbnRhdGlvbiBpbXBsLCBmaW5hbCBYTUxTdHJlYW1Xcml0ZXIgdywgZmluYWwgUHJvY2Vzc29yQ29udGV4dCBjdHgpIHRocm93cyBDb250cmlidXRpb25Xcml0ZUV4Y2VwdGlvbiwgWE1MU3RyZWFtRXhjZXB0aW9uIHsKKyAgICAgICAgd3JpdGVTdGFydCh3LCBRTi5nZXROYW1lc3BhY2VVUkkoKSwgUU4uZ2V0TG9jYWxQYXJ0KCksIG5ldyBYQXR0cigiY2xhc3MiLCBpbXBsLm5hbWUpKTsKKyAgICAgICAgd3JpdGVFbmQodyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogUmVzb2x2ZSBhIEphdmEgY2xhc3MuCisgICAgICovCisgICAgc3RhdGljIENsYXNzPD8+IHJlc29sdmUoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIE1vZGVsUmVzb2x2ZXIgcmVzLCBmaW5hbCBQcm9jZXNzb3JDb250ZXh0IGN0eCkgdGhyb3dzIENvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24geworICAgICAgICBmaW5hbCBDbGFzc1JlZmVyZW5jZSBjciA9IHJlcy5yZXNvbHZlTW9kZWwoQ2xhc3NSZWZlcmVuY2UuY2xhc3MsIG5ldyBDbGFzc1JlZmVyZW5jZShuYW1lKSwgY3R4KTsKKyAgICAgICAgaWYoY3IuZ2V0SmF2YUNsYXNzKCkgIT0gbnVsbCkKKyAgICAgICAgICAgIHJldHVybiBjci5nZXRKYXZhQ2xhc3MoKTsKKyAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24obmV3IENsYXNzTm90Rm91bmRFeGNlcHRpb24obmFtZSkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJlc29sdmUgYSBXU0RMIGludGVyZmFjZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgV1NETEludGVyZmFjZSByZXNvbHZlKGZpbmFsIFFOYW1lIG5hbWUsIGZpbmFsIE1vZGVsUmVzb2x2ZXIgcmVzLCBmaW5hbCBQcm9jZXNzb3JDb250ZXh0IGN0eCwgZmluYWwgV1NETEZhY3Rvcnkgd2lmKSB0aHJvd3MgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFdTRExJbnRlcmZhY2Ugd2kgPSByZXMucmVzb2x2ZU1vZGVsKFdTRExJbnRlcmZhY2UuY2xhc3MsIGludGVyZmF6ZShuYW1lLCB3aWYpLCBjdHgpOworICAgICAgICBpZighd2kuaXNVbnJlc29sdmVkKCkpCisgICAgICAgICAgICByZXR1cm4gZG9tQm91bmQod2kpOworCisgICAgICAgIGZpbmFsIFdTRExEZWZpbml0aW9uIHdkID0gcmVzLnJlc29sdmVNb2RlbChXU0RMRGVmaW5pdGlvbi5jbGFzcywgZGVmaW5pdGlvbih3aS5nZXROYW1lKCksIHdpZiksIGN0eCk7CisgICAgICAgIGlmKHdkLmlzVW5yZXNvbHZlZCgpKQorICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24oIkNvdWxkbid0IGZpbmQgIiArIG5hbWUuZ2V0TmFtZXNwYWNlVVJJKCkpOworCisgICAgICAgIFdTRExPYmplY3Q8UG9ydFR5cGU+IHB0ID0gd2QuZ2V0V1NETE9iamVjdChQb3J0VHlwZS5jbGFzcywgbmFtZSk7CisgICAgICAgIGlmKHB0ID09IG51bGwpCisgICAgICAgICAgICB0aHJvdyBuZXcgQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbigiQ291bGRuJ3QgZmluZCAiICsgbmFtZSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmaW5hbCBXU0RMSW50ZXJmYWNlIG53aSA9IHdpZi5jcmVhdGVXU0RMSW50ZXJmYWNlKHB0LmdldEVsZW1lbnQoKSwgd2QsIHJlcywgY3R4LmdldE1vbml0b3IoKSk7CisgICAgICAgICAgICBud2kuc2V0V3NkbERlZmluaXRpb24od2QpOworICAgICAgICAgICAgcmVzLmFkZE1vZGVsKG53aSwgY3R4KTsKKyAgICAgICAgICAgIHJldHVybiBkb21Cb3VuZChud2kpOworICAgICAgICB9IGNhdGNoKEludmFsaWRJbnRlcmZhY2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IENvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm4gYSBXU0RMIGludGVyZmFjZSBjb25maWd1cmVkIHRvIHVzZSBhIERPTSBkYXRhYmluZGluZy4gCisgICAgICovCisgICAgc3RhdGljIFdTRExJbnRlcmZhY2UgZG9tQm91bmQoV1NETEludGVyZmFjZSB3aSkgdGhyb3dzIENvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgV1NETEludGVyZmFjZSBkb213aSA9IChXU0RMSW50ZXJmYWNlKXdpLmNsb25lKCk7CisgICAgICAgICAgICBkb213aS5yZXNldERhdGFCaW5kaW5nKERPTURhdGFCaW5kaW5nLk5BTUUpOworICAgICAgICAgICAgcmV0dXJuIGRvbXdpOworICAgICAgICB9IGNhdGNoKENsb25lTm90U3VwcG9ydGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBDb250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9TYW1wbGVKYXZhSW52b2tlci5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9TYW1wbGVKYXZhSW52b2tlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NDI1MWMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9pbXBsL1NhbXBsZUphdmFJbnZva2VyLmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuaW1wbDsKKworaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLmphdmEuSmF2YU9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uTWVzc2FnZTsKKworLyoqCisgKiBJbnZva2VyIGZvciBTYW1wbGUgY29tcG9uZW50cyB0aGF0IGltcGxlbWVudCBhIEphdmEgaW50ZXJmYWNlLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworY2xhc3MgU2FtcGxlSmF2YUludm9rZXIgaW1wbGVtZW50cyBJbnZva2VyIHsKKyAgICBmaW5hbCBPYmplY3QgaW5zdGFuY2U7CisgICAgZmluYWwgTWV0aG9kIG1ldGhvZDsKKworICAgIFNhbXBsZUphdmFJbnZva2VyKGZpbmFsIEphdmFPcGVyYXRpb24gb3AsIGZpbmFsIENsYXNzPD8+IGNsYXp6LCBmaW5hbCBPYmplY3QgaW5zdGFuY2UpIHRocm93cyBTZWN1cml0eUV4Y2VwdGlvbiwgTm9TdWNoTWV0aG9kRXhjZXB0aW9uIHsKKyAgICAgICAgdGhpcy5pbnN0YW5jZSA9IGluc3RhbmNlOworICAgICAgICB0aGlzLm1ldGhvZCA9IGNsYXp6LmdldE1ldGhvZChvcC5nZXRKYXZhTWV0aG9kKCkuZ2V0TmFtZSgpLCBvcC5nZXRKYXZhTWV0aG9kKCkuZ2V0UGFyYW1ldGVyVHlwZXMoKSk7CisgICAgfQorCisgICAgcHVibGljIE1lc3NhZ2UgaW52b2tlKGZpbmFsIE1lc3NhZ2UgbXNnKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBDYWxsIHRoZSBtZXRob2QgdGhhdCBpbXBsZW1lbnRzIHRoZSBvcGVyYXRpb24KKyAgICAgICAgICAgIG1zZy5zZXRCb2R5KG1ldGhvZC5pbnZva2UoaW5zdGFuY2UsIChPYmplY3RbXSltc2cuZ2V0Qm9keSgpKSk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBtc2cuc2V0RmF1bHRCb2R5KGUuZ2V0Q2F1c2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1zZzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9pbXBsL1NhbXBsZVByb3ZpZGVyLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9pbXBsL1NhbXBsZVByb3ZpZGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5NDZiMAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2ltcGwvU2FtcGxlUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDkxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHNhbXBsZS5pbXBsOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuRmllbGQ7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvbmVudFJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuaW52b2NhdGlvbi5Qcm94eUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW50ZXJmYWNlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLk9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5qYXZhLkphdmFJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuamF2YS5KYXZhT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLndzZGwuV1NETE9wZXJhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludm9jYXRpb24uSW52b2tlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLlJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlOworCisvKioKKyAqIEltcGxlbWVudGF0aW9uIHByb3ZpZGVyIGZvciBTYW1wbGUgY29tcG9uZW50IGltcGxlbWVudGF0aW9ucy4KKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK2NsYXNzIFNhbXBsZVByb3ZpZGVyIGltcGxlbWVudHMgSW1wbGVtZW50YXRpb25Qcm92aWRlciB7CisgICAgZmluYWwgUnVudGltZUNvbXBvbmVudCBjb21wOworICAgIGZpbmFsIFNhbXBsZUltcGxlbWVudGF0aW9uIGltcGw7CisgICAgZmluYWwgUHJveHlGYWN0b3J5IHB4ZjsKKyAgICBPYmplY3QgaW5zdGFuY2U7CisKKyAgICBTYW1wbGVQcm92aWRlcihmaW5hbCBSdW50aW1lQ29tcG9uZW50IGNvbXAsIGZpbmFsIFNhbXBsZUltcGxlbWVudGF0aW9uIGltcGwsIFByb3h5RmFjdG9yeSBwZikgeworICAgICAgICB0aGlzLmNvbXAgPSBjb21wOworICAgICAgICB0aGlzLmltcGwgPSBpbXBsOworICAgICAgICB0aGlzLnB4ZiA9IHBmOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN0YXJ0KCkgeworICAgICAgICAvLyBDb25zdHJ1Y3QgaW1wbGVtZW50YXRpb24gaW5zdGFuY2UgYW5kIGluamVjdCByZWZlcmVuY2UgcHJveGllcworICAgICAgICB0cnkgeworICAgICAgICAgICAgaW5zdGFuY2UgPSBpbXBsLmNsYXp6Lm5ld0luc3RhbmNlKCk7CisKKyAgICAgICAgICAgIGZvcihDb21wb25lbnRSZWZlcmVuY2UgcjogY29tcC5nZXRSZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAgICAgICBmaW5hbCBGaWVsZCBmID0gaW1wbC5jbGF6ei5nZXREZWNsYXJlZEZpZWxkKHIuZ2V0TmFtZSgpKTsKKyAgICAgICAgICAgICAgICBmLnNldEFjY2Vzc2libGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgLy8gSW5qZWN0IGEgSmF2YSBvciBXU0RMUmVmZXJlbmNlIHByb3h5CisgICAgICAgICAgICAgICAgZmluYWwgSW50ZXJmYWNlIGkgPSByLmdldEludGVyZmFjZUNvbnRyYWN0KCkuZ2V0SW50ZXJmYWNlKCk7CisgICAgICAgICAgICAgICAgaWYoaSBpbnN0YW5jZW9mIEphdmFJbnRlcmZhY2UpCisgICAgICAgICAgICAgICAgICAgIGYuc2V0KGluc3RhbmNlLCBweGYuY3JlYXRlUHJveHkoY29tcC5nZXRDb21wb25lbnRDb250ZXh0KCkuZ2V0U2VydmljZVJlZmVyZW5jZShmLmdldFR5cGUoKSwgci5nZXROYW1lKCkpKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBmLnNldChpbnN0YW5jZSwgbmV3IFNhbXBsZVdTRExQcm94eShyLmdldEVuZHBvaW50UmVmZXJlbmNlcygpLmdldCgwKSwgaSkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHN0b3AoKSB7CisgICAgICAgIGluc3RhbmNlID0gbnVsbDsKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzdXBwb3J0c09uZVdheUludm9jYXRpb24oKSB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBwdWJsaWMgSW52b2tlciBjcmVhdGVJbnZva2VyKGZpbmFsIFJ1bnRpbWVDb21wb25lbnRTZXJ2aWNlIHMsIGZpbmFsIE9wZXJhdGlvbiBvcCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gQ3JlYXRpbmcgYW4gaW52b2tlciBmb3IgYSBKYXZhIG9yIFdTREwtdHlwZWQgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgIGlmKG9wIGluc3RhbmNlb2YgSmF2YU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNhbXBsZUphdmFJbnZva2VyKChKYXZhT3BlcmF0aW9uKW9wLCBpbXBsLmNsYXp6LCBpbnN0YW5jZSk7CisgICAgICAgICAgICByZXR1cm4gbmV3IFNhbXBsZVdTRExJbnZva2VyKChXU0RMT3BlcmF0aW9uKW9wLCBpbXBsLmNsYXp6LCBpbnN0YW5jZSk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9TYW1wbGVQcm92aWRlckZhY3RvcnkuamF2YSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2ltcGwvU2FtcGxlUHJvdmlkZXJGYWN0b3J5LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkMjRkMwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2ltcGwvU2FtcGxlUHJvdmlkZXJGYWN0b3J5LmphdmEKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuaW1wbDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5FeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5pbnZvY2F0aW9uLkV4dGVuc2libGVQcm94eUZhY3Rvcnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmludm9jYXRpb24uUHJveHlGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lQ29tcG9uZW50OworCisvKioKKyAqIEZhY3RvcnkgZm9yIFNhbXBsZSBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcnMuCisgKiAKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgU2FtcGxlUHJvdmlkZXJGYWN0b3J5IGltcGxlbWVudHMgSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3Rvcnk8U2FtcGxlSW1wbGVtZW50YXRpb24+IHsKKyAgICBmaW5hbCBQcm94eUZhY3RvcnkgcHhmOworCisgICAgcHVibGljIFNhbXBsZVByb3ZpZGVyRmFjdG9yeShmaW5hbCBFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGVwKSB7CisgICAgICAgIHB4ZiA9IEV4dGVuc2libGVQcm94eUZhY3RvcnkuZ2V0SW5zdGFuY2UoZXApOworICAgIH0KKworICAgIHB1YmxpYyBJbXBsZW1lbnRhdGlvblByb3ZpZGVyIGNyZWF0ZUltcGxlbWVudGF0aW9uUHJvdmlkZXIoZmluYWwgUnVudGltZUNvbXBvbmVudCBjb21wLCBmaW5hbCBTYW1wbGVJbXBsZW1lbnRhdGlvbiBpbXBsKSB7CisgICAgICAgIHJldHVybiBuZXcgU2FtcGxlUHJvdmlkZXIoY29tcCwgaW1wbCwgcHhmKTsKKyAgICB9CisKKyAgICBwdWJsaWMgQ2xhc3M8U2FtcGxlSW1wbGVtZW50YXRpb24+IGdldE1vZGVsVHlwZSgpIHsKKyAgICAgICAgcmV0dXJuIFNhbXBsZUltcGxlbWVudGF0aW9uLmNsYXNzOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2ltcGwvU2FtcGxlV1NETEludm9rZXIuamF2YSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL2phdmEvc2FtcGxlL2ltcGwvU2FtcGxlV1NETEludm9rZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YzUzMTcyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9TYW1wbGVXU0RMSW52b2tlci5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlLmltcGw7CisKK2ltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5NZXRob2Q7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsLldTRExPcGVyYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLkludm9rZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnZvY2F0aW9uLk1lc3NhZ2U7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworLyoqCisgKiBJbnZva2VyIGZvciBTYW1wbGUgY29tcG9uZW50cyB0aGF0IGltcGxlbWVudCBhIFdTREwgaW50ZXJmYWNlIHVzaW5nIGEgZ2VuZXJpYworICogY2FsbCBtZXRob2QuCisgKiAKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitjbGFzcyBTYW1wbGVXU0RMSW52b2tlciBpbXBsZW1lbnRzIEludm9rZXIgeworICAgIGZpbmFsIFN0cmluZyBuYW1lOworICAgIGZpbmFsIE9iamVjdCBpbnN0YW5jZTsKKyAgICBmaW5hbCBNZXRob2QgbWV0aG9kOworCisgICAgU2FtcGxlV1NETEludm9rZXIoZmluYWwgV1NETE9wZXJhdGlvbiBvcCwgZmluYWwgQ2xhc3M8Pz4gY2xhenosIGZpbmFsIE9iamVjdCBpbnN0YW5jZSkgdGhyb3dzIFNlY3VyaXR5RXhjZXB0aW9uLCBOb1N1Y2hNZXRob2RFeGNlcHRpb24geworICAgICAgICB0aGlzLm5hbWUgPSBvcC5nZXROYW1lKCk7CisgICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTsKKyAgICAgICAgdGhpcy5tZXRob2QgPSBjbGF6ei5nZXRNZXRob2QoImNhbGwiLCBTdHJpbmcuY2xhc3MsIEVsZW1lbnQuY2xhc3MpOworICAgIH0KKworICAgIHB1YmxpYyBNZXNzYWdlIGludm9rZShmaW5hbCBNZXNzYWdlIG1zZykgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBnZW5lcmljIGNhbGwgbWV0aG9kCisgICAgICAgICAgICBtc2cuc2V0Qm9keShtZXRob2QuaW52b2tlKGluc3RhbmNlLCBuYW1lLCAoKE9iamVjdFtdKW1zZy5nZXRCb2R5KCkpWzBdKSk7CisgICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICBtc2cuc2V0RmF1bHRCb2R5KGUuZ2V0Q2F1c2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1zZzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9pbXBsL1NhbXBsZVdTRExQcm94eS5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9TYW1wbGVXU0RMUHJveHkuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjg4MmEwCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vamF2YS9zYW1wbGUvaW1wbC9TYW1wbGVXU0RMUHJveHkuamF2YQpAQCAtMCwwICsxLDU3IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHNhbXBsZS5pbXBsOworCitpbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5FbmRwb2ludFJlZmVyZW5jZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnRlcmZhY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuT3BlcmF0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5SdW50aW1lRW5kcG9pbnRSZWZlcmVuY2U7CitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworaW1wb3J0IHNhbXBsZS5hcGkuV1NETFJlZmVyZW5jZTsKKworLyoqCisgKiBQcm94eSB1c2VkIHRvIGNhbGwgb3BlcmF0aW9ucyBvbiBXU0RMIHJlZmVyZW5jZXMuCisgKi8KK2NsYXNzIFNhbXBsZVdTRExQcm94eSBpbXBsZW1lbnRzIFdTRExSZWZlcmVuY2UgeworICAgIGZpbmFsIFJ1bnRpbWVFbmRwb2ludFJlZmVyZW5jZSByZXByOworICAgIGZpbmFsIE1hcDxTdHJpbmcsIE9wZXJhdGlvbj4gb3BzOworCisgICAgU2FtcGxlV1NETFByb3h5KEVuZHBvaW50UmVmZXJlbmNlIGVwciwgSW50ZXJmYWNlIHdpKSB7CisgICAgICAgIHJlcHIgPSAoUnVudGltZUVuZHBvaW50UmVmZXJlbmNlKWVwcjsKKyAgICAgICAgb3BzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBPcGVyYXRpb24+KCk7CisgICAgICAgIGZvcihPcGVyYXRpb24gbzogd2kuZ2V0T3BlcmF0aW9ucygpKQorICAgICAgICAgICAgb3BzLnB1dChvLmdldE5hbWUoKSwgbyk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIEVsZW1lbnQgY2FsbChTdHJpbmcgb3AsIEVsZW1lbnQgZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgLy8gSW52b2tlIHRoZSBuYW1lZCBvcGVyYXRpb24gb24gdGhlIGVuZHBvaW50IHJlZmVyZW5jZQorICAgICAgICAgICAgcmV0dXJuIChFbGVtZW50KXJlcHIuaW52b2tlKG9wcy5nZXQob3ApLCBuZXcgT2JqZWN0W10ge2V9KTsKKyAgICAgICAgfSBjYXRjaChJbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihleCk7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvciBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwOGFjOTUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcgpAQCAtMCwwICsxLDIwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4gCisKKyMgSW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRoZSBhcnRpZmFjdCBwcm9jZXNzb3IgZXh0ZW5zaW9uCitzYW1wbGUuaW1wbC5TYW1wbGVJbXBsZW1lbnRhdGlvblByb2Nlc3NvcjtxbmFtZT1odHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEjaW1wbGVtZW50YXRpb24uc2FtcGxlLG1vZGVsPXNhbXBsZS5pbXBsLlNhbXBsZUltcGxlbWVudGF0aW9uCisKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuVmFsaWRhdGlvblNjaGVtYSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuVmFsaWRhdGlvblNjaGVtYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWFmZjQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5WYWxpZGF0aW9uU2NoZW1hCkBAIC0wLDAgKzEsMTggQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisjDQorc2FtcGxlL2ltcGwvc2FtcGxlLnhzZA0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5IGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlckZhY3RvcnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJhN2VmYwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLkltcGxlbWVudGF0aW9uUHJvdmlkZXJGYWN0b3J5CkBAIC0wLDAgKzEsMjAgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCisjIEltcGxlbWVudGF0aW9uIHByb3ZpZGVyIGZvciBTYW1wbGUgY29tcG9uZW50cw0KK3NhbXBsZS5pbXBsLlNhbXBsZVByb3ZpZGVyRmFjdG9yeTttb2RlbD1zYW1wbGUuaW1wbC5TYW1wbGVJbXBsZW1lbnRhdGlvbg0KKw0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9zYW1wbGUvaW1wbC9zYW1wbGUueHNkIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL21haW4vcmVzb3VyY2VzL3NhbXBsZS9pbXBsL3NhbXBsZS54c2QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA1N2FlZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy9tYWluL3Jlc291cmNlcy9zYW1wbGUvaW1wbC9zYW1wbGUueHNkCkBAIC0wLDAgKzEsMzggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKKyAgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICB4bWxuczp0PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCisgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgorCisgICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIvPgorCisgICAgPGVsZW1lbnQgbmFtZT0iaW1wbGVtZW50YXRpb24uc2FtcGxlIiB0eXBlPSJ0OlNhbXBsZUltcGxlbWVudGF0aW9uIiBzdWJzdGl0dXRpb25Hcm91cD0ic2NhOmltcGxlbWVudGF0aW9uIi8+CisKKyAgICA8Y29tcGxleFR5cGUgbmFtZT0iU2FtcGxlSW1wbGVtZW50YXRpb24iPgorICAgICAgICA8Y29tcGxleENvbnRlbnQ+CisgICAgICAgICAgICA8ZXh0ZW5zaW9uIGJhc2U9InNjYTpJbXBsZW1lbnRhdGlvbiI+CisgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjbGFzcyIgdHlwZT0ic3RyaW5nIiB1c2U9InJlcXVpcmVkIi8+CisgICAgICAgICAgICA8L2V4dGVuc2lvbj4KKyAgICAgICAgPC9jb21wbGV4Q29udGVudD4KKyAgICA8L2NvbXBsZXhUeXBlPgorCis8L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL0NsaWVudC5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI3ZTExYwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7CisKKy8qKgorICogU2FtcGxlIHNlcnZpY2UgaW50ZXJmYWNlLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworQFJlbW90YWJsZQorcHVibGljIGludGVyZmFjZSBDbGllbnQgeworCisgICAgU3RyaW5nIGplbGxvKFN0cmluZyBzKTsKKworICAgIFN0cmluZyB3ZWxsbyhTdHJpbmcgcyk7Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9DbGllbnRUZXN0LmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9DbGllbnRUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIyOTFjOQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL0NsaWVudFRlc3QuamF2YQpAQCAtMCwwICsxLDY1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHNhbXBsZTsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3lzdGVtLm91dDsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLlh1dGlsLmVsZW07CitpbXBvcnQgc3RhdGljIHNhbXBsZS5YdXRpbC5lbGVtczsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLlh1dGlsLnByaW50OworaW1wb3J0IHN0YXRpYyBzYW1wbGUuWHV0aWwuc2VsZWN0OworaW1wb3J0IHN0YXRpYyBzYW1wbGUuWHV0aWwudGV4dDsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLlh1dGlsLnhkb207CitpbXBvcnQgc3RhdGljIHNhbXBsZS5YdXRpbC54ZmlsdGVyOworaW1wb3J0IHN0YXRpYyBzYW1wbGUuWHV0aWwueHJlZHVjZTsKKworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CisKK2ltcG9ydCBzYW1wbGUuYXBpLkphdmE7CitpbXBvcnQgc2FtcGxlLmFwaS5XU0RMOworaW1wb3J0IHNhbXBsZS5hcGkuV1NETFJlZmVyZW5jZTsKKworLyoqCisgKiBTYW1wbGUgY29tcG9uZW50IGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyBhIG1peCBvZiBKYXZhIGFuZCBXU0RMIGludGVyZmFjZXMuCisgKiAKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitASmF2YShDbGllbnQuY2xhc3MpCitwdWJsaWMgY2xhc3MgQ2xpZW50VGVzdCB7CisKKyAgICBASmF2YShIZWxsby5jbGFzcykKKyAgICBIZWxsbyBqZWxsbzsKKworICAgIEBXU0RMKCJodHRwOi8vc2FtcGxlL2hlbGxvI0hlbGxvIikKKyAgICBXU0RMUmVmZXJlbmNlIHdlbGxvOworCisgICAgcHVibGljIFN0cmluZyBqZWxsbyhTdHJpbmcgcykgeworICAgICAgICBvdXQucHJpbnRsbigiQ2xpZW50VGVzdC5qZWxsbygiICsgcyArICIpIik7CisgICAgICAgIHJldHVybiBqZWxsby5oZWxsbyhzKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHdlbGxvKFN0cmluZyBzKSB7CisgICAgICAgIG91dC5wcmludGxuKCJDbGllbnRUZXN0LndlbGxvKCIgKyBzICsgIikiKTsKKyAgICAgICAgZmluYWwgRWxlbWVudCBocmVxID0geGRvbSgiaHR0cDovL3NhbXBsZS9oZWxsbyIsICJoZWxsbyIsIGVsZW0oIm5hbWUiLCB0ZXh0KHMpKSk7CisgICAgICAgIAorICAgICAgICBmaW5hbCBFbGVtZW50IGhyZXMgPSB3ZWxsby5jYWxsKCJoZWxsbyIsIGhyZXEpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHhyZWR1Y2UocHJpbnQsICIiLCB4ZmlsdGVyKHNlbGVjdCgicmVzdWx0IiksIGVsZW1zKGhyZXMpKSk7IAorICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL0hlbGxvLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9IZWxsby5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0N2ZjOGEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9IZWxsby5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7CisKKy8qKgorICogU2FtcGxlIHNlcnZpY2UgaW50ZXJmYWNlLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworQFJlbW90YWJsZQorcHVibGljIGludGVyZmFjZSBIZWxsbyB7CisKKyAgICBTdHJpbmcgaGVsbG8oU3RyaW5nIHMpOworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvSmVsbG9UZXN0LmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9KZWxsb1Rlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Yzk5OWE2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvSmVsbG9UZXN0LmphdmEKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGU7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN5c3RlbS5vdXQ7CitpbXBvcnQgc2FtcGxlLmFwaS5KYXZhOworCisvKioKKyAqIFNhbXBsZSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIEphdmEgaW50ZXJmYWNlcy4KKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK0BKYXZhKEhlbGxvLmNsYXNzKQorcHVibGljIGNsYXNzIEplbGxvVGVzdCB7CisKKyAgICBASmF2YShVcHBlci5jbGFzcykKKyAgICBVcHBlciB1cHBlcjsKKworICAgIHB1YmxpYyBTdHJpbmcgaGVsbG8oU3RyaW5nIHMpIHsKKyAgICAgICAgb3V0LnByaW50bG4oIkplbGxvVGVzdC5oZWxsbygiICsgcyArICIpIik7CisgICAgICAgIHJldHVybiB1cHBlci51cHBlcigiSGVsbG8gIiArIHMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL1VwcGVyLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9VcHBlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljNzcyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9VcHBlci5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7CisKKy8qKgorICogU2FtcGxlIHNlcnZpY2UgaW50ZXJmYWNlLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworQFJlbW90YWJsZQorcHVibGljIGludGVyZmFjZSBVcHBlciB7CisKKyAgICBTdHJpbmcgdXBwZXIoU3RyaW5nIHMpOworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvVXBwZXJUZXN0LmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9VcHBlclRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Mzk5ZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvVXBwZXJUZXN0LmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGU7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN5c3RlbS5vdXQ7CitpbXBvcnQgc2FtcGxlLmFwaS5KYXZhOworCisvKioKKyAqIFNhbXBsZSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIEphdmEgaW50ZXJmYWNlcy4KKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK0BKYXZhKFVwcGVyLmNsYXNzKQorcHVibGljIGNsYXNzIFVwcGVyVGVzdCB7CisKKyAgICBwdWJsaWMgU3RyaW5nIHVwcGVyKFN0cmluZyBzKSB7CisgICAgICAgIG91dC5wcmludGxuKCJVcHBlclRlc3QudXBwZXIoIiArIHMgKyAiKSIpOworICAgICAgICByZXR1cm4gcy50b1VwcGVyQ2FzZSgpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL1dlbGxvVGVzdC5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvV2VsbG9UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJiOWZjMQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL1dlbGxvVGVzdC5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TeXN0ZW0ub3V0OworaW1wb3J0IHN0YXRpYyBzYW1wbGUuWHV0aWwuZWxlbTsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLlh1dGlsLmVsZW1zOworaW1wb3J0IHN0YXRpYyBzYW1wbGUuWHV0aWwucHJpbnQ7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5YdXRpbC5zZWxlY3Q7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5YdXRpbC50ZXh0OworaW1wb3J0IHN0YXRpYyBzYW1wbGUuWHV0aWwueGRvbTsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLlh1dGlsLnhmaWx0ZXI7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5YdXRpbC54bWw7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5YdXRpbC54cmVkdWNlOworCitpbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKKworaW1wb3J0IHNhbXBsZS5hcGkuV1NETDsKK2ltcG9ydCBzYW1wbGUuYXBpLldTRExSZWZlcmVuY2U7CisKKy8qKgorICogU2FtcGxlIGNvbXBvbmVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgV1NETCBpbnRlcmZhY2VzLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworQFdTREwoImh0dHA6Ly9zYW1wbGUvaGVsbG8jSGVsbG8iKQorcHVibGljIGNsYXNzIFdlbGxvVGVzdCB7CisKKyAgICBAV1NETCgiaHR0cDovL3NhbXBsZS91cHBlciNVcHBlciIpCisgICAgV1NETFJlZmVyZW5jZSB1cHBlcjsKKworICAgIHB1YmxpYyBFbGVtZW50IGNhbGwoU3RyaW5nIG9wLCBFbGVtZW50IGUpIHsKKyAgICAgICAgb3V0LnByaW50bG4oIldlbGxvVGVzdC4iICsgb3AgKyAiKCIgKyB4bWwoZSkgKyAiKSIpOworICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZSA9IHhyZWR1Y2UocHJpbnQsICIiLCB4ZmlsdGVyKHNlbGVjdCgibmFtZSIpLCBlbGVtcyhlKSkpOworCisgICAgICAgIGZpbmFsIEVsZW1lbnQgdXJlcSA9IHhkb20oImh0dHA6Ly9zYW1wbGUvdXBwZXIiLCAidXBwZXIiLCBlbGVtKCJzIiwgdGV4dCgiSGVsbG8gIiArIG5hbWUpKSk7CisgICAgICAgIGZpbmFsIEVsZW1lbnQgdXJlcyA9IHVwcGVyLmNhbGwoInVwcGVyIiwgdXJlcSk7CisgICAgICAgIAorICAgICAgICBmaW5hbCBTdHJpbmcgcyA9IHhyZWR1Y2UocHJpbnQsICIiLCB4ZmlsdGVyKHNlbGVjdCgicmVzdWx0IiksIGVsZW1zKHVyZXMpKSk7CisgICAgICAgIHJldHVybiB4ZG9tKCJodHRwOi8vc2FtcGxlL2hlbGxvIiwgImhlbGxvUmVzcG9uc2UiLCBlbGVtKCJyZXN1bHQiLCB0ZXh0KHMpKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvWHV0aWwuamF2YSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL1h1dGlsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2U4OWY5ZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL1h1dGlsLmphdmEKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7CitpbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKK2ltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7CitpbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOworaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKK2ltcG9ydCBqYXZheC54bWwueHBhdGguWFBhdGg7CitpbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoQ29uc3RhbnRzOworaW1wb3J0IGphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb25FeGNlcHRpb247CitpbXBvcnQgamF2YXgueG1sLnhwYXRoLlhQYXRoRmFjdG9yeTsKKworaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OworaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7CitpbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKK2ltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKKworLyoqCisgKiBKdXN0IGZvciBmdW4sIGEgbGl0dGxlIGJpdCBvZiBtYWdpYyBjb2RlIGFuZCB1dGlsaXR5IGZ1bmN0aW9ucyB0byBoZWxwIHdvcmsgd2l0aCBYTUwgRE9NLgorICovCitjbGFzcyBYdXRpbCB7CisgICAgaW50ZXJmYWNlIE5vZGVCdWlsZGVyIHsKKyAgICAgICAgTm9kZSBidWlsZChEb2N1bWVudCBkb2MpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYSBuYW1lIGFuZCBhIGxpc3Qgb2YgY2hpbGRyZW4gdG8gYSBkb2N1bWVudCBlbGVtZW50LgorICAgICAqLworICAgIHN0YXRpYyBFbGVtZW50IHhkb20oU3RyaW5nIG5zLCBTdHJpbmcgbmFtZSwgZmluYWwgTm9kZUJ1aWxkZXIuLi4gbm9kZXMpIHsKKyAgICAgICAgcmV0dXJuIChFbGVtZW50KWVsZW0obnMsIG5hbWUsIG5vZGVzKS5idWlsZChkYi5uZXdEb2N1bWVudCgpKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDb252ZXJ0IGEgbmFtZSBhbmQgY2hpbGRyZW4gdG8gYW4gZWxlbWVudC4KKyAgICAgKi8KKyAgICBzdGF0aWMgTm9kZUJ1aWxkZXIgZWxlbShmaW5hbCBTdHJpbmcgdXJpLCBmaW5hbCBTdHJpbmcgbiwgZmluYWwgTm9kZUJ1aWxkZXIuLi4gbm9kZXMpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBOb2RlQnVpbGRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBOb2RlIGJ1aWxkKERvY3VtZW50IGRvYykgeworICAgICAgICAgICAgICAgIGZpbmFsIEVsZW1lbnQgZSA9IGRvYy5jcmVhdGVFbGVtZW50TlModXJpLCBuKTsKKyAgICAgICAgICAgICAgICBmb3IoZmluYWwgTm9kZUJ1aWxkZXIgbjogbm9kZXMpCisgICAgICAgICAgICAgICAgICAgIGUuYXBwZW5kQ2hpbGQobi5idWlsZChkb2MpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9CisKKyAgICBzdGF0aWMgTm9kZUJ1aWxkZXIgZWxlbShmaW5hbCBTdHJpbmcgbiwgZmluYWwgTm9kZUJ1aWxkZXIuLi4gbm9kZXMpIHsKKyAgICAgICAgcmV0dXJuIGVsZW0obnVsbCwgbiwgbm9kZXMpOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYSBzdHJpbmcgdG8gYSB0ZXh0IGVsZW1lbnQuCisgICAgICovCisgICAgc3RhdGljIE5vZGVCdWlsZGVyIHRleHQoZmluYWwgU3RyaW5nIHQpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBOb2RlQnVpbGRlcigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBOb2RlIGJ1aWxkKGZpbmFsIERvY3VtZW50IGRvYykgeworICAgICAgICAgICAgICAgIHJldHVybiBkb2MuY3JlYXRlVGV4dE5vZGUodCk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGRiID0gZGIoKTsKKworICAgIHByaXZhdGUgc3RhdGljIERvY3VtZW50QnVpbGRlciBkYigpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3RG9jdW1lbnRCdWlsZGVyKCk7CisgICAgICAgIH0gY2F0Y2goUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnZlcnQgYW4gZWxlbWVudCB0byBYTUwuCisgICAgICovCisgICAgc3RhdGljIFRyYW5zZm9ybWVyRmFjdG9yeSB0cmYgPSBUcmFuc2Zvcm1lckZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKworICAgIHN0YXRpYyBTdHJpbmcgeG1sKGZpbmFsIE5vZGUgbm9kZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgZmluYWwgU3RyZWFtUmVzdWx0IHIgPSBuZXcgU3RyZWFtUmVzdWx0KG5ldyBTdHJpbmdXcml0ZXIoKSk7CisgICAgICAgICAgICB0cmYubmV3VHJhbnNmb3JtZXIoKS50cmFuc2Zvcm0obmV3IERPTVNvdXJjZShub2RlKSwgcik7CisgICAgICAgICAgICByZXR1cm4gci5nZXRXcml0ZXIoKS50b1N0cmluZygpOworICAgICAgICB9IGNhdGNoKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8qKgorICAgICAqIEV2YWx1YXRlIGFuIHhwYXRoIGV4cHJlc3Npb24uCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgWFBhdGhGYWN0b3J5IHhwZiA9IFhQYXRoRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworCisgICAgc3RhdGljIFN0cmluZyB4cGF0aChmaW5hbCBTdHJpbmcgZXhwciwgZmluYWwgTm9kZSBub2RlKSB7CisgICAgICAgIGZpbmFsIFhQYXRoIHhwID0geHBmLm5ld1hQYXRoKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKFN0cmluZyl4cC5ldmFsdWF0ZShleHByLCBub2RlLCBYUGF0aENvbnN0YW50cy5TVFJJTkcpOworICAgICAgICB9IGNhdGNoKFhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbihlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEEgcHVyZSBKYXZhIEZQLXN0eWxlIGFsdGVybmF0aXZlIHRvIHhwYXRoIGZvciBET00uCisgICAgICovCisgICAgaW50ZXJmYWNlIE1hcHBlcjxUPiB7CisgICAgICAgIFQgbWFwKGZpbmFsIEVsZW1lbnQgZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBNYXBwZXI8RWxlbWVudD4gaWRlbnRpdHkgPSBuZXcgTWFwcGVyPEVsZW1lbnQ+KCkgeworICAgICAgICBwdWJsaWMgRWxlbWVudCBtYXAoRWxlbWVudCBlKSB7CisgICAgICAgICAgICByZXR1cm4gZTsKKyAgICAgICAgfTsKKyAgICB9OworICAgIAorICAgIGludGVyZmFjZSBSZWR1Y2VyPFQ+IHsKKyAgICAgICAgVCByZWR1Y2UoZmluYWwgVCBhY2N1bSwgZmluYWwgRWxlbWVudCBlKTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIFJlZHVjZXI8U3RyaW5nPiBwcmludCA9IG5ldyBSZWR1Y2VyPFN0cmluZz4oKSB7CisgICAgICAgIHB1YmxpYyBTdHJpbmcgcmVkdWNlKFN0cmluZyBhY2N1bSwgRWxlbWVudCBlKSB7CisgICAgICAgICAgICByZXR1cm4gYWNjdW0gKyBlLmdldFRleHRDb250ZW50KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgLyoqCisgICAgICogQXBwbHkgYSBtYXBwZXIgdG8gYSBsaXN0IG9mIGVsZW1lbnRzLgorICAgICAqLworICAgIHN0YXRpYyA8VD4gTGlzdDxUPiB4bWFwKGZpbmFsIE1hcHBlcjxUPiBmLCBmaW5hbCBJdGVyYWJsZTxFbGVtZW50PiBsKSB7CisgICAgICAgIGZpbmFsIExpc3Q8VD4gdiA9IG5ldyBBcnJheUxpc3Q8VD4oKTsKKyAgICAgICAgZm9yKEVsZW1lbnQgZTogbCkKKyAgICAgICAgICAgIHYuYWRkKGYubWFwKGUpKTsKKyAgICAgICAgcmV0dXJuIHY7CisgICAgfQorCisgICAgLyoqCisgICAgICogQXBwbHkgYSBmaWx0ZXIgdG8gYSBsaXN0IG9mIGVsZW1lbnRzLgorICAgICAqLworICAgIHN0YXRpYyBMaXN0PEVsZW1lbnQ+IHhmaWx0ZXIoZmluYWwgTWFwcGVyPEJvb2xlYW4+IGYsIGZpbmFsIEl0ZXJhYmxlPEVsZW1lbnQ+IGwpIHsKKyAgICAgICAgZmluYWwgTGlzdDxFbGVtZW50PiB2ID0gbmV3IEFycmF5TGlzdDxFbGVtZW50PigpOworICAgICAgICBmb3IoRWxlbWVudCBlOiBsKQorICAgICAgICAgICAgaWYoZi5tYXAoZSkpCisgICAgICAgICAgICAgICAgdi5hZGQoZSk7CisgICAgICAgIHJldHVybiB2OworICAgIH0KKworICAgIC8qKgorICAgICAqIFBlcmZvcm0gYSByZWR1Y3Rpb24gb3ZlciBhIGxpc3Qgb2YgZWxlbWVudHMuCisgICAgICovCisgICAgc3RhdGljIDxUPiBUIHhyZWR1Y2UoZmluYWwgUmVkdWNlcjxUPiBmLCBmaW5hbCBUIGluaXRpYWwsIGZpbmFsIEl0ZXJhYmxlPEVsZW1lbnQ+IGwpIHsKKyAgICAgICAgVCBhY2N1bSA9IGluaXRpYWw7CisgICAgICAgIGZvcihFbGVtZW50IGU6IGwpCisgICAgICAgICAgICBhY2N1bSA9IGYucmVkdWNlKGFjY3VtLCBlKTsKKyAgICAgICAgcmV0dXJuIGFjY3VtOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybiBhIGZpbHRlciB0aGF0IHNlbGVjdHMgZWxlbWVudHMgYnkgbmFtZS4KKyAgICAgKi8KKyAgICBzdGF0aWMgTWFwcGVyPEJvb2xlYW4+IHNlbGVjdChmaW5hbCBTdHJpbmcgbmFtZSkgeworICAgICAgICByZXR1cm4gbmV3IE1hcHBlcjxCb29sZWFuPigpIHsKKyAgICAgICAgICAgIHB1YmxpYyBCb29sZWFuIG1hcChFbGVtZW50IGUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZS5lcXVhbHMoZS5nZXRMb2NhbE5hbWUoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfQorCisgICAgLyoqCisgICAgICogUmV0dXJuIHRoZSBjaGlsZCBlbGVtZW50cyBvZiBhIG5vZGUuCisgICAgICovCisgICAgc3RhdGljIEl0ZXJhYmxlPEVsZW1lbnQ+IGVsZW1zKGZpbmFsIE5vZGUgcGFyZW50KSB7CisgICAgICAgIGZpbmFsIExpc3Q8RWxlbWVudD4gbCA9IG5ldyBBcnJheUxpc3Q8RWxlbWVudD4oKTsKKyAgICAgICAgZm9yIChOb2RlIG46IGNoaWxkcmVuKHBhcmVudCkpCisgICAgICAgICAgICBpZiAobiBpbnN0YW5jZW9mIEVsZW1lbnQpCisgICAgICAgICAgICAgICAgbC5hZGQoKEVsZW1lbnQpbik7CisgICAgICAgIHJldHVybiBsOworICAgIH0KKworICAgIC8qKgorICAgICAqIEFuIGl0ZXJhYmxlIG92ZXIgdGhlIGNoaWxkcmVuIG9mIGEgbm9kZS4KKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBJdGVyYWJsZTxOb2RlPiBjaGlsZHJlbihOb2RlIHBhcmVudCkgeworICAgICAgICBmaW5hbCBOb2RlTGlzdCBsID0gcGFyZW50LmdldENoaWxkTm9kZXMoKTsKKyAgICAgICAgZmluYWwgaW50IG4gPSBsLmdldExlbmd0aCgpOworICAgICAgICByZXR1cm4gbmV3IEl0ZXJhYmxlPE5vZGU+KCkgeworICAgICAgICAgICAgcHVibGljIEl0ZXJhdG9yPE5vZGU+IGl0ZXJhdG9yKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSXRlcmF0b3I8Tm9kZT4oKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzTmV4dCgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpIDwgbjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwdWJsaWMgTm9kZSBuZXh0KCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGwuaXRlbShpKyspOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHB1YmxpYyB2b2lkIHJlbW92ZSgpIHsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9ICAKKyAgICAgICAgfTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9pbXBsL0VtYmVkVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL2ltcGwvRW1iZWRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNmRiYWIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9pbXBsL0VtYmVkVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuaW1wbDsKKworaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3lzdGVtLm91dDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLkVtYmVkVXRpbC5idWlsZDsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuRW1iZWRVdGlsLmNvbXBvbmVudDsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuRW1iZWRVdGlsLmNvbXBvc2l0ZTsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuRW1iZWRVdGlsLmNvbnRyaWI7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLkVtYmVkVXRpbC5kZXBsb3k7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLkVtYmVkVXRpbC5lbWJlZENvbnRleHQ7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLkVtYmVkVXRpbC5leHRlbnNpb25Qb2ludHM7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLkVtYmVkVXRpbC5pbXBsZW1lbnRhdGlvbjsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuRW1iZWRVdGlsLm5vZGU7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLkVtYmVkVXRpbC5wcm92aWRlckZhY3RvcmllczsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuRW1iZWRVdGlsLnJlZmVyZW5jZTsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuRW1iZWRVdGlsLnNlcnZpY2U7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLkVtYmVkVXRpbC53c2RsaTsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuVGVzdFV0aWwuaGVyZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9zaXRlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi53c2RsLldTRExJbnRlcmZhY2U7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucHJvdmlkZXIuSW1wbGVtZW50YXRpb25Qcm92aWRlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnByb3ZpZGVyLlByb3ZpZGVyRmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuUnVudGltZUNvbXBvbmVudDsKK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBzYW1wbGUuQ2xpZW50OworaW1wb3J0IHNhbXBsZS5DbGllbnRUZXN0OworaW1wb3J0IHNhbXBsZS5IZWxsbzsKK2ltcG9ydCBzYW1wbGUuSmVsbG9UZXN0OworaW1wb3J0IHNhbXBsZS5VcHBlcjsKK2ltcG9ydCBzYW1wbGUuVXBwZXJUZXN0OworaW1wb3J0IHNhbXBsZS5XZWxsb1Rlc3Q7CisKKy8qKgorICogVGVzdCBob3cgdG8gYXNzZW1ibGUgYSBjb250cmlidXRpb24sIGEgU0NETCBjb21wb3NpdGUgYW5kIHJ1biBpdCBvbiBhbiBlbWJlZGRlZAorICogVHVzY2FueSBydW50aW1lIG5vZGUuIEFsc28gc2hvd3MgaG93IHBhc3MgaW4gYSBQcm92aWRlckZhY3RvcnkgaW5zdGVhZCBvZiBoYXZpbmcKKyAqIGl0IGxvYWRlZCBhbmQgY29uc3RydWN0ZWQgYnkgdGhlIHJ1bnRpbWUgbm9kZS4KKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK3B1YmxpYyBjbGFzcyBFbWJlZFRlc3RDYXNlIHsKKyAgICBzdGF0aWMgTm9kZUZhY3RvcnkgbmY7CisgICAgc3RhdGljIEVtYmVkVXRpbC5Db250ZXh0IGVjOworICAgIHN0YXRpYyBOb2RlIG5vZGU7CisKKyAgICBAU3VwcHJlc3NXYXJuaW5ncygidW5jaGVja2VkIikKKyAgICBAQmVmb3JlQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbmYgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICBlYyA9IGVtYmVkQ29udGV4dChuZik7CisgICAgICAgIAorICAgICAgICAvLyBMb2FkIHRoZSB0ZXN0IFdTREwgZGVmaW5pdGlvbnMgKGNvdWxkIGFsc28gY29uc3RydWN0IHRoZSBXU0RMCisgICAgICAgIC8vIGFuZCBYU0QgbW9kZWxzIGluIGNvZGUgYnV0IHRoYXQnZCBiZSBxdWl0ZSBwYWluZnVsLCBzbyBqdXN0CisgICAgICAgIC8vIGxvYWQgdGhlbSBmcm9tIFhNTCBmb3Igbm93KQorICAgICAgICBmaW5hbCBDb250cmlidXRpb24gY29udHJpYiA9IGJ1aWxkKGNvbnRyaWIoInRlc3QiLCBoZXJlKCkpLCBlYyk7CisgICAgICAgIFdTRExJbnRlcmZhY2UgSGVsbG9fd3NkbCA9IGJ1aWxkKHdzZGxpKCJIZWxsby53c2RsIiwgImh0dHA6Ly9zYW1wbGUvaGVsbG8iLCAiSGVsbG8iLCBjb250cmliKSwgZWMpOworICAgICAgICBXU0RMSW50ZXJmYWNlIFVwcGVyX3dzZGwgPSBidWlsZCh3c2RsaSgiVXBwZXIud3NkbCIsICJodHRwOi8vc2FtcGxlL3VwcGVyIiwgIlVwcGVyIiwgY29udHJpYiksIGVjKTsKKworICAgICAgICAvLyBBc3NlbWJsZSBhIHRlc3QgY29tcG9zaXRlIG1vZGVsIChzZWUgRW1iZWRVdGlsCisgICAgICAgIC8vIGZvciB0aGUgbGl0dGxlIERTTCB1c2VkIGhlcmUsIG11Y2ggbW9yZSBjb25jaXNlCisgICAgICAgIC8vIHRoYW4gdXNpbmcgdGhlIGFzc2VtYmx5IG1vZGVsIGludGVyZmFjZXMpCisgICAgICAgIGZpbmFsIENvbXBvc2l0ZSBjb21wID0KKyAgICAgICAgICAgYnVpbGQoY29tcG9zaXRlKCJodHRwOi8vc2FtcGxlIiwgInRlc3QiLAorICAgICAgICAgICBjb21wb25lbnQoImNsaWVudC10ZXN0IiwKKyAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uKENsaWVudFRlc3QuY2xhc3MsCisgICAgICAgICAgICAgICAgICAgc2VydmljZShDbGllbnQuY2xhc3MpLAorICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSgiamVsbG8iLCBIZWxsby5jbGFzcyksCisgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlKCJ3ZWxsbyIsIEhlbGxvX3dzZGwpKSwKKyAgICAgICAgICAgICAgIHJlZmVyZW5jZSgiamVsbG8iLCAiamVsbG8tdGVzdCIpLAorICAgICAgICAgICAgICAgcmVmZXJlbmNlKCJ3ZWxsbyIsICJ3ZWxsby10ZXN0IikpLAorICAgICAgICAgICBjb21wb25lbnQoIndlbGxvLXRlc3QiLAorICAgICAgICAgICAgICAgaW1wbGVtZW50YXRpb24oV2VsbG9UZXN0LmNsYXNzLAorICAgICAgICAgICAgICAgICAgIHNlcnZpY2UoSGVsbG9fd3NkbCksCisgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlKCJ1cHBlciIsIFVwcGVyX3dzZGwpKSwKKyAgICAgICAgICAgICAgIHJlZmVyZW5jZSgidXBwZXIiLCAidXBwZXItdGVzdCIpKSwKKyAgICAgICAgICAgY29tcG9uZW50KCJqZWxsby10ZXN0IiwKKyAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uKEplbGxvVGVzdC5jbGFzcywKKyAgICAgICAgICAgICAgICAgICBzZXJ2aWNlKEhlbGxvLmNsYXNzKSwKKyAgICAgICAgICAgICAgICAgICByZWZlcmVuY2UoInVwcGVyIiwgVXBwZXIuY2xhc3MpKSwKKyAgICAgICAgICAgICAgIHJlZmVyZW5jZSgidXBwZXIiLCAidXBwZXItdGVzdCIpKSwKKyAgICAgICAgICAgY29tcG9uZW50KCJ1cHBlci10ZXN0IiwKKyAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uKFVwcGVyVGVzdC5jbGFzcywKKyAgICAgICAgICAgICAgICAgICBzZXJ2aWNlKFVwcGVyLmNsYXNzKSkpKSwgZWMpOworICAgICAgICAKKyAgICAgICAgLy8gUmVnaXN0ZXIgYSB0ZXN0IGluc3RhbmNlIG9mIG91ciBzYW1wbGUgaW1wbGVtZW50YXRpb24gUHJvdmlkZXJGYWN0b3J5CisgICAgICAgIHByb3ZpZGVyRmFjdG9yaWVzKGVjKS5hZGRQcm92aWRlckZhY3RvcnkodGVzdFByb3ZpZGVyRmFjdG9yeSgpKTsKKworICAgICAgICAvLyBSdW4gd2l0aCBpdAorICAgICAgICBub2RlID0gbm9kZShuZiwgZGVwbG95KGNvbnRyaWIsIGNvbXApKTsKKyAgICAgICAgbm9kZS5zdGFydCgpOworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgUHJvdmlkZXJGYWN0b3J5PFNhbXBsZUltcGxlbWVudGF0aW9uPiB0ZXN0UHJvdmlkZXJGYWN0b3J5KCkgeworICAgICAgICAvLyBUaGlzIHNob3dzIGhvdyB0byBnZXQgY2FsbGVkIHdoZW4gYSBwcm92aWRlciBpcyBjcmVhdGVkCisgICAgICAgIHJldHVybiBuZXcgU2FtcGxlUHJvdmlkZXJGYWN0b3J5KGV4dGVuc2lvblBvaW50cyhlYykpIHsKKyAgICAgICAgICAgIHB1YmxpYyBJbXBsZW1lbnRhdGlvblByb3ZpZGVyIGNyZWF0ZUltcGxlbWVudGF0aW9uUHJvdmlkZXIoUnVudGltZUNvbXBvbmVudCBjb21wLCBTYW1wbGVJbXBsZW1lbnRhdGlvbiBpbXBsKSB7CisgICAgICAgICAgICAgICAgb3V0LnByaW50bG4oIkNyZWF0aW5nIGEgcHJvdmlkZXIgZm9yIGNvbXBvbmVudCAiICsgY29tcC5nZXROYW1lKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlci5jcmVhdGVJbXBsZW1lbnRhdGlvblByb3ZpZGVyKGNvbXAsIGltcGwpOworICAgICAgICAgICAgfX07CisgICAgfQorCisgICAgQEFmdGVyQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBqZWxsbygpIHsKKyAgICAgICAgb3V0LnByaW50bG4oIlJ1blRlc3RDYXNlLmplbGxvIik7CisgICAgICAgIGZpbmFsIFN0cmluZyByID0gY2xpZW50KCkuamVsbG8oIkphdmEiKTsgCisgICAgICAgIG91dC5wcmludGxuKHIpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkhFTExPIEpBVkEiLCByKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHdlbGxvKCkgeworICAgICAgICBvdXQucHJpbnRsbigiUnVuVGVzdENhc2Uud2VsbG8iKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHIgPSBjbGllbnQoKS53ZWxsbygiV1NETCIpOworICAgICAgICBvdXQucHJpbnRsbihyKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJIRUxMTyBXU0RMIiwgcik7CisgICAgfQorCisgICAgc3RhdGljIENsaWVudCBjbGllbnQoKSB7CisgICAgICAgIHJldHVybiBub2RlLmdldFNlcnZpY2UoQ2xpZW50LmNsYXNzLCAiY2xpZW50LXRlc3QvQ2xpZW50Iik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvaW1wbC9SZWFkV3JpdGVUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvaW1wbC9SZWFkV3JpdGVUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNDc2OGMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9pbXBsL1JlYWRXcml0ZVRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBzYW1wbGUuaW1wbDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CitpbXBvcnQgc3RhdGljIHNhbXBsZS5pbXBsLlRlc3RVdGlsLmhlcmU7CisKK2ltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworCitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxJbnB1dEZhY3Rvcnk7CitpbXBvcnQgamF2YXgueG1sLnN0cmVhbS5YTUxPdXRwdXRGYWN0b3J5OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb3NpdGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24uQ29udHJpYnV0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLkRlZmF1bHRDb250cmlidXRpb25GYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5EZWZhdWx0U3RBWEFydGlmYWN0UHJvY2Vzc29yRXh0ZW5zaW9uUG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkV4dGVuc2libGVTdEFYQXJ0aWZhY3RQcm9jZXNzb3I7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlByb2Nlc3NvckNvbnRleHQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLlN0QVhBcnRpZmFjdFByb2Nlc3NvcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuU3RBWEFydGlmYWN0UHJvY2Vzc29yRXh0ZW5zaW9uUG9pbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkRlZmF1bHRFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5OworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoqCisgKiBUZXN0IHJlYWQvd3JpdGUgU2FtcGxlIFNDREwgaW1wbGVtZW50YXRpb24gZWxlbWVudHMuCisgKiAKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgUmVhZFdyaXRlVGVzdENhc2UgeworICAgIHN0YXRpYyBYTUxJbnB1dEZhY3RvcnkgeGlmOworICAgIHN0YXRpYyBYTUxPdXRwdXRGYWN0b3J5IHhvZjsKKyAgICBzdGF0aWMgU3RBWEFydGlmYWN0UHJvY2Vzc29yPE9iamVjdD4geHByb2M7CisgICAgc3RhdGljIFByb2Nlc3NvckNvbnRleHQgY3R4OworCisgICAgQEJlZm9yZUNsYXNzCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIERlZmF1bHRFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5IGVwID0gbmV3IERlZmF1bHRFeHRlbnNpb25Qb2ludFJlZ2lzdHJ5KCk7CisgICAgICAgIGZpbmFsIENvbnRyaWJ1dGlvbiBjb250cmliID0gbmV3IERlZmF1bHRDb250cmlidXRpb25GYWN0b3J5KCkuY3JlYXRlQ29udHJpYnV0aW9uKCk7CisgICAgICAgIGNvbnRyaWIuc2V0TG9jYXRpb24oaGVyZSgpKTsKKyAgICAgICAgY3R4ID0gbmV3IFByb2Nlc3NvckNvbnRleHQoY29udHJpYiwgbnVsbCk7CisgICAgICAgIHhpZiA9IFhNTElucHV0RmFjdG9yeS5uZXdJbnN0YW5jZSgpOworICAgICAgICB4b2YgPSBYTUxPdXRwdXRGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgIGZpbmFsIFN0QVhBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50IHhwZXAgPSBuZXcgRGVmYXVsdFN0QVhBcnRpZmFjdFByb2Nlc3NvckV4dGVuc2lvblBvaW50KGVwKTsKKyAgICAgICAgeHByb2MgPSBuZXcgRXh0ZW5zaWJsZVN0QVhBcnRpZmFjdFByb2Nlc3Nvcih4cGVwLCB4aWYsIHhvZik7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UmVhZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBJbnB1dFN0cmVhbSBpcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJ0ZXN0LmNvbXBvc2l0ZSIpOworICAgICAgICBmaW5hbCBDb21wb3NpdGUgYyA9IChDb21wb3NpdGUpeHByb2MucmVhZCh4aWYuY3JlYXRlWE1MU3RyZWFtUmVhZGVyKGlzKSwgY3R4KTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChjKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJzYW1wbGUuQ2xpZW50VGVzdCIsICgoU2FtcGxlSW1wbGVtZW50YXRpb24pYy5nZXRDb21wb25lbnRzKCkuZ2V0KDApLmdldEltcGxlbWVudGF0aW9uKCkpLm5hbWUpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFJlYWRXcml0ZSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBmaW5hbCBJbnB1dFN0cmVhbSBpcyA9IGdldENsYXNzKCkuZ2V0Q2xhc3NMb2FkZXIoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJ0ZXN0LmNvbXBvc2l0ZSIpOworICAgICAgICBmaW5hbCBDb21wb3NpdGUgYyA9IChDb21wb3NpdGUpeHByb2MucmVhZCh4aWYuY3JlYXRlWE1MU3RyZWFtUmVhZGVyKGlzKSwgY3R4KTsKKyAgICAgICAgZmluYWwgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJvcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKKyAgICAgICAgeHByb2Mud3JpdGUoYywgeG9mLmNyZWF0ZVhNTFN0cmVhbVdyaXRlcihib3MpLCBjdHgpOworICAgICAgICBhc3NlcnRUcnVlKGJvcy50b1N0cmluZygpLmNvbnRhaW5zKCJjbGFzcz1cInNhbXBsZS5XZWxsb1Rlc3RcIiIpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9pbXBsL1J1blRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9pbXBsL1J1blRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjliZjAyZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL2ltcGwvUnVuVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDc1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHNhbXBsZS5pbXBsOworCitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TeXN0ZW0ub3V0OworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuVGVzdFV0aWwuaGVyZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OworaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IHNhbXBsZS5DbGllbnQ7CisKKy8qKgorICogVGVzdCBob3cgdG8gcnVuIGFuIFNDQSBjb250cmlidXRpb24gY29udGFpbmluZyBhIHRlc3QgY29tcG9zaXRlIG9uIGEKKyAqIFR1c2NhbnkgcnVudGltZSBub2RlLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFJ1blRlc3RDYXNlIHsKKyAgICBzdGF0aWMgTm9kZSBub2RlOworCisgICAgQEJlZm9yZUNsYXNzCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIE5vZGVGYWN0b3J5IG5mID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsKKyAgICAgICAgbm9kZSA9IG5mLmNyZWF0ZU5vZGUobmV3IENvbnRyaWJ1dGlvbigidGVzdCIsIGhlcmUoKSkpOworICAgICAgICBub2RlLnN0YXJ0KCk7CisgICAgfQorCisgICAgQEFmdGVyQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBqZWxsbygpIHsKKyAgICAgICAgb3V0LnByaW50bG4oIlJ1blRlc3RDYXNlLmplbGxvIik7CisgICAgICAgIGZpbmFsIFN0cmluZyByID0gY2xpZW50KCkuamVsbG8oIkphdmEiKTsgCisgICAgICAgIG91dC5wcmludGxuKHIpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkhFTExPIEpBVkEiLCByKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHdlbGxvKCkgeworICAgICAgICBvdXQucHJpbnRsbigiUnVuVGVzdENhc2Uud2VsbG8iKTsKKyAgICAgICAgZmluYWwgU3RyaW5nIHIgPSBjbGllbnQoKS53ZWxsbygiV1NETCIpOworICAgICAgICBvdXQucHJpbnRsbihyKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJIRUxMTyBXU0RMIiwgcik7CisgICAgfQorCisgICAgc3RhdGljIENsaWVudCBjbGllbnQoKSB7CisgICAgICAgIHJldHVybiBub2RlLmdldFNlcnZpY2UoQ2xpZW50LmNsYXNzLCAiY2xpZW50LXRlc3QvQ2xpZW50Iik7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvaW1wbC9SdW5XU1Rlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9qYXZhL3NhbXBsZS9pbXBsL1J1bldTVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTEzM2QwCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvaW1wbC9SdW5XU1Rlc3RDYXNlLmphdmEKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlLmltcGw7CisKK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN5c3RlbS5vdXQ7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgc2FtcGxlLmltcGwuVGVzdFV0aWwuaGVyZTsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7CitpbXBvcnQgamF2YS5uZXQuU29ja2V0OworCitpbXBvcnQgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uOworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLkV4dGVuc2lvblBvaW50UmVnaXN0cnk7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5odHRwLmpldHR5LkpldHR5U2VydmVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OworaW1wb3J0IG9yZy5qdW5pdC5BZnRlckNsYXNzOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoqCisgKiBUZXN0IGEgY29tcG9uZW50IHRoYXQgcHJvdmlkZXMgYW5kIGNvbnN1bWVzIFNPQVAgV2ViIHNlcnZpY2VzLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFJ1bldTVGVzdENhc2UgeworICAgIHN0YXRpYyBOb2RlIG5vZGU7CisgICAgc3RhdGljIEpldHR5U2VydmVyIGpldHR5OworICAgIAorICAgIEBCZWZvcmVDbGFzcworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICAvLyBTdGFydCB0ZXN0IGNvbXBvc2l0ZSBvbiBhIFR1c2Nhbnkgbm9kZQorICAgICAgICBmaW5hbCBOb2RlRmFjdG9yeSBuZiA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCk7CisgICAgICAgIG5vZGUgPSBuZi5jcmVhdGVOb2RlKG5ldyBDb250cmlidXRpb24oInRlc3QiLCBoZXJlKCkpKTsKKyAgICAgICAgbm9kZS5zdGFydCgpOworICAgICAgICAKKyAgICAgICAgLy8gTW9jayB1cCBhIHRlc3QgV2ViIHNlcnZpY2Ugb24gaHR0cDovL2xvY2FsaG9zdDo4MDg2L3dzdXBwZXIKKyAgICAgICAgamV0dHkgPSBuZXcgSmV0dHlTZXJ2ZXIoKEV4dGVuc2lvblBvaW50UmVnaXN0cnkpbmYuZ2V0RXh0ZW5zaW9uUG9pbnRSZWdpc3RyeSgpKTsKKyAgICAgICAgamV0dHkuc3RhcnQoKTsKKyAgICAgICAgamV0dHkuYWRkU2VydmxldE1hcHBpbmcoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4Ni93c3VwcGVyIiwgbmV3IEh0dHBTZXJ2bGV0KCkgeworICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7CisgICAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBkb1Bvc3QoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MgU2VydmxldEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworICAgICAgICAgICAgICAgIGFzc2VydFRydWUocmVhZChyZXEuZ2V0SW5wdXRTdHJlYW0oKSkuY29udGFpbnMoIkhlbGxvIFNPQVAiKSk7CisgICAgICAgICAgICAgICAgZmluYWwgU3RyaW5nIHNvYXByZXNwID0KKyAgICAgICAgICAgICAgICAgICAgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+PHNvYXBlbnY6RW52ZWxvcGUgeG1sbnM6c29hcGVudj1cImh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvXCI+IiArCisgICAgICAgICAgICAgICAgICAgICI8c29hcGVudjpCb2R5Pjx1cHBlclJlc3BvbnNlIHhtbG5zPVwiaHR0cDovL3NhbXBsZS91cHBlclwiPiIgKworICAgICAgICAgICAgICAgICAgICAiPHJlc3VsdCB4bWxucz1cIlwiPkhFTExPIFNPQVA8L3Jlc3VsdD4iICsKKyAgICAgICAgICAgICAgICAgICAgIjwvdXBwZXJSZXNwb25zZT48L3NvYXBlbnY6Qm9keT48L3NvYXBlbnY6RW52ZWxvcGU+IjsKKworICAgICAgICAgICAgICAgIHdyaXRlKHNvYXByZXNwLCByZXNwLmdldE91dHB1dFN0cmVhbSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgfQorCisgICAgQEFmdGVyQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgamV0dHkuc3RvcCgpOworICAgICAgICBub2RlLnN0b3AoKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHdzZWxsbygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBvdXQucHJpbnRsbigiUnVuV1NUZXN0Q2FzZS53c2VsbG8iKTsKKyAgICAgICAgLy8gU2VuZCBhIFNPQVAgcmVxdWVzdCB0byB0aGUgV2ViIHNlcnZpY2UgcHJvdmlkZWQgYnkgU0NBIGNvbXBvbmVudCB3c2VsbG8tdGVzdAorICAgICAgICAvLyBvbiBodHRwOi8vbG9jYWxob3N0OjgwODUvd3NlbGxvCisgICAgICAgIGZpbmFsIFNvY2tldCBzID0gbmV3IFNvY2tldCgibG9jYWxob3N0IiwgODA4NSk7CisgICAgICAgIGZpbmFsIFN0cmluZyBzb2FwcmVxID0KKyAgICAgICAgICAgICJQT1NUIC93c2VsbG8gSFRUUC8xLjBcclxuIiArCisgICAgICAgICAgICAiQ29udGVudC1UeXBlOiB0ZXh0L3htbDsgY2hhcnNldD1VVEYtOFxyXG4iICsKKyAgICAgICAgICAgICJDb250ZW50LWxlbmd0aDogMjMxXHJcblxyXG4iICsKKyAgICAgICAgICAgICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/Pjxzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9XCJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlL1wiPiIgKworICAgICAgICAgICAgIjxzb2FwZW52OkJvZHk+PGhlbGxvIHhtbG5zPVwiaHR0cDovL3NhbXBsZS9oZWxsb1wiPiIgKworICAgICAgICAgICAgIjxuYW1lIHhtbG5zPVwiXCI+U09BUDwvbmFtZT4iICsKKyAgICAgICAgICAgICI8L2hlbGxvPjwvc29hcGVudjpCb2R5Pjwvc29hcGVudjpFbnZlbG9wZT4iOworICAgICAgICB3cml0ZShzb2FwcmVxLCBzLmdldE91dHB1dFN0cmVhbSgpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShyZWFkKHMuZ2V0SW5wdXRTdHJlYW0oKSkuY29udGFpbnMoIkhFTExPIFNPQVAiKSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHdyaXRlKGZpbmFsIFN0cmluZyBzLCBmaW5hbCBPdXRwdXRTdHJlYW0gbykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgZmluYWwgT3V0cHV0U3RyZWFtV3JpdGVyIHcgPSBuZXcgT3V0cHV0U3RyZWFtV3JpdGVyKG8pOworICAgICAgICB3LndyaXRlKHMpOworICAgICAgICB3LmZsdXNoKCk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBTdHJpbmcgcmVhZChmaW5hbCBJbnB1dFN0cmVhbSBpKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZChuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGkpKSk7CisgICAgfQorCisgICAgc3RhdGljIFN0cmluZyByZWFkKGZpbmFsIEJ1ZmZlcmVkUmVhZGVyIHIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIGZpbmFsIFN0cmluZyBzID0gci5yZWFkTGluZSgpOworICAgICAgICByZXR1cm4gcyA9PSBudWxsPyAiIiA6IHMgKyByZWFkKHIpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL2ltcGwvVGVzdFV0aWwuamF2YSBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L2phdmEvc2FtcGxlL2ltcGwvVGVzdFV0aWwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGNmYjMzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvamF2YS9zYW1wbGUvaW1wbC9UZXN0VXRpbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlLmltcGw7CisKKy8qKgorICogQSBoYWNrIHRvIGRldGVybWluZSB0aGUgdGVzdCBjb250cmlidXRpb24gbG9jYXRpb24uCisgKi8KK3B1YmxpYyBjbGFzcyBUZXN0VXRpbCB7CisKKyAgICBzdGF0aWMgU3RyaW5nIGhlcmUoKSB7CisgICAgICAgIHJldHVybiBUZXN0VXRpbC5jbGFzcy5nZXRQcm90ZWN0aW9uRG9tYWluKCkuZ2V0Q29kZVNvdXJjZSgpLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L3Jlc291cmNlcy9IZWxsby53c2RsIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvcmVzb3VyY2VzL0hlbGxvLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYwY2VhNQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L3Jlc291cmNlcy9IZWxsby53c2RsCkBAIC0wLDAgKzEsNjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8d3NkbDpkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUvaGVsbG8iIHhtbG5zOnRucz0iaHR0cDovL3NhbXBsZS9oZWxsbyIKKyAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIKKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorCW5hbWU9IkhlbGxvIj4KKworICAgIDx3c2RsOnR5cGVzPgorICAgICAgICA8c2NoZW1hIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUvaGVsbG8iCisgICAgICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaGVsbG8iPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorCisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJoZWxsb1Jlc3BvbnNlIj4KKyAgICAgICAgICAgICAgICA8Y29tcGxleFR5cGU+CisgICAgICAgICAgICAgICAgICAgIDxzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlc3VsdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC9lbGVtZW50PgorCisgICAgICAgIDwvc2NoZW1hPgorICAgIDwvd3NkbDp0eXBlcz4KKworICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iaGVsbG9SZXF1ZXN0Ij4KKyAgICAgICAgPHdzZGw6cGFydCBlbGVtZW50PSJ0bnM6aGVsbG8iIG5hbWU9InBhcmFtZXRlcnMiIC8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisKKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9ImhlbGxvUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczpoZWxsb1Jlc3BvbnNlIiBuYW1lPSJwYXJhbWV0ZXJzIiAvPgorICAgIDwvd3NkbDptZXNzYWdlPgorCisgICAgPHdzZGw6cG9ydFR5cGUgbmFtZT0iSGVsbG8iPgorICAgICAgICA8d3NkbDpvcGVyYXRpb24gbmFtZT0iaGVsbG8iPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOmhlbGxvUmVxdWVzdCIgbmFtZT0iaGVsbG9SZXF1ZXN0IiAvPgorICAgICAgICAgICAgPHdzZGw6b3V0cHV0IG1lc3NhZ2U9InRuczpoZWxsb1Jlc3BvbnNlIiBuYW1lPSJoZWxsb1Jlc3BvbnNlIiAvPgorICAgICAgICA8L3dzZGw6b3BlcmF0aW9uPgorICAgIDwvd3NkbDpwb3J0VHlwZT4KKworPC93c2RsOmRlZmluaXRpb25zPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvcmVzb3VyY2VzL1VwcGVyLndzZGwgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9yZXNvdXJjZXMvVXBwZXIud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTE0OGJiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9pbXBsZW1lbnRhdGlvbi1zYW1wbGUvc3JjL3Rlc3QvcmVzb3VyY2VzL1VwcGVyLndzZGwKQEAgLTAsMCArMSw2MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzx3c2RsOmRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZS91cHBlciIgeG1sbnM6dG5zPSJodHRwOi8vc2FtcGxlL3VwcGVyIgorICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisJbmFtZT0iVXBwZXIiPgorCisgICAgPHdzZGw6dHlwZXM+CisgICAgICAgIDxzY2hlbWEgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZS91cHBlciIKKyAgICAgICAgICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+CisgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ1cHBlciI+CisgICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgorICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJzIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisKKyAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InVwcGVyUmVzcG9uc2UiPgorICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icmVzdWx0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgorICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+CisgICAgICAgICAgICA8L2VsZW1lbnQ+CisKKyAgICAgICAgPC9zY2hlbWE+CisgICAgPC93c2RsOnR5cGVzPgorCisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJ1cHBlclJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IGVsZW1lbnQ9InRuczp1cHBlciIgbmFtZT0icGFyYW1ldGVycyIgLz4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKworICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0idXBwZXJSZXNwb25zZSI+CisgICAgICAgIDx3c2RsOnBhcnQgZWxlbWVudD0idG5zOnVwcGVyUmVzcG9uc2UiIG5hbWU9InBhcmFtZXRlcnMiIC8+CisgICAgPC93c2RsOm1lc3NhZ2U+CisKKyAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJVcHBlciI+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJ1cHBlciI+CisgICAgICAgICAgICA8d3NkbDppbnB1dCBtZXNzYWdlPSJ0bnM6dXBwZXJSZXF1ZXN0IiBuYW1lPSJ1cHBlclJlcXVlc3QiIC8+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQgbWVzc2FnZT0idG5zOnVwcGVyUmVzcG9uc2UiIG5hbWU9InVwcGVyUmVzcG9uc2UiIC8+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgPC93c2RsOnBvcnRUeXBlPgorCis8L3dzZGw6ZGVmaW5pdGlvbnM+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdC5jb21wb3NpdGUgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L2ltcGxlbWVudGF0aW9uLXNhbXBsZS9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdC5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhNzVmNQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZXh0ZW5kaW5nLXR1c2NhbnkvaW1wbGVtZW50YXRpb24tc2FtcGxlL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0LmNvbXBvc2l0ZQpAQCAtMCwwICsxLDYwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICB4bWxuczp0PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCisgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3Rlc3QiCisgIG5hbWU9IndzdGVzdCI+CisgICAgCisgICAgPCEtLSBDbGllbnQgdGVzdCBjb21wb25lbnQgdXNlZCBieSB0aGUgSlVuaXQgdGVzdHMgLS0+ICAgIAorICAgIDxjb21wb25lbnQgbmFtZT0iY2xpZW50LXRlc3QiPgorICAgICAgICA8dDppbXBsZW1lbnRhdGlvbi5zYW1wbGUgY2xhc3M9InNhbXBsZS5DbGllbnRUZXN0Ii8+CisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0id2VsbG8iIHRhcmdldD0id2VsbG8tdGVzdCIvPgorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImplbGxvIiB0YXJnZXQ9ImplbGxvLXRlc3QiLz4KKyAgICA8L2NvbXBvbmVudD4KKworICAgIDwhLS0gSGVsbG9Xb3JsZCB0ZXN0IGNvbXBvbmVudCB0aGF0IHVzZXMgV1NETCBpbnRlcmZhY2VzIC0tPgorICAgIDxjb21wb25lbnQgbmFtZT0id2VsbG8tdGVzdCI+CisgICAgICAgIDx0OmltcGxlbWVudGF0aW9uLnNhbXBsZSBjbGFzcz0ic2FtcGxlLldlbGxvVGVzdCIvPgorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InVwcGVyIiB0YXJnZXQ9InVwcGVyLXRlc3QiLz4KKyAgICA8L2NvbXBvbmVudD4KKworICAgIDwhLS0gSGVsbG9Xb3JsZCB0ZXN0IGNvbXBvbmVudCB0aGF0IHVzZXMgSmF2YSBpbnRlcmZhY2VzIC0tPgorICAgIDxjb21wb25lbnQgbmFtZT0iamVsbG8tdGVzdCI+CisgICAgICAgIDx0OmltcGxlbWVudGF0aW9uLnNhbXBsZSBjbGFzcz0ic2FtcGxlLkplbGxvVGVzdCIvPgorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InVwcGVyIiB0YXJnZXQ9InVwcGVyLXRlc3QiLz4KKyAgICA8L2NvbXBvbmVudD4KKworICAgIDwhLS0gSGVsbG9Xb3JsZCB0ZXN0IGNvbXBvbmVudCB0aGF0IHVzZXMgV1NETCBpbnRlcmZhY2VzIGFuZCBTT0FQIFdlYiBTZXJ2aWNlcyAtLT4KKyAgICA8Y29tcG9uZW50IG5hbWU9IldzZWxsby10ZXN0Ij4KKyAgICAgICAgPHQ6aW1wbGVtZW50YXRpb24uc2FtcGxlIGNsYXNzPSJzYW1wbGUuV2VsbG9UZXN0Ii8+CisgICAgICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvIj4KKyAgICAgICAgICAgIDxiaW5kaW5nLndzIHVyaT0iaHR0cDovL2xvY2FsaG9zdDo4MDg1L3dzZWxsbyIvPgorICAgICAgICA8L3NlcnZpY2U+CisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0idXBwZXIiPgorICAgICAgICAgICAgPGJpbmRpbmcud3MgdXJpPSJodHRwOi8vbG9jYWxob3N0OjgwODYvd3N1cHBlciIvPgorICAgICAgICA8L3JlZmVyZW5jZT4KKyAgICA8L2NvbXBvbmVudD4KKworICAgIDwhLS0gVGVzdCBjb21wb25lbnQgY29udmVydHMgYSBzdHJpbmcgdG8gdXBwZXJjYXNlIC0tPgorICAgIDxjb21wb25lbnQgbmFtZT0idXBwZXItdGVzdCI+CisgICAgICAgIDx0OmltcGxlbWVudGF0aW9uLnNhbXBsZSBjbGFzcz0ic2FtcGxlLlVwcGVyVGVzdCIvPgorICAgIDwvY29tcG9uZW50PiAgICAgCisKKzwvY29tcG9zaXRlPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9wb20ueG1sIGIvc2FtcGxlcy9leHRlbmRpbmctdHVzY2FueS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjMwODgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2V4dGVuZGluZy10dXNjYW55L3BvbS54bWwKQEAgLTAsMCArMSw0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXMtZXh0ZW5kaW5nLXR1c2Nhbnk8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgRXh0ZW5kaW5nIFR1c2NhbnkgU2FtcGxlczwvbmFtZT4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxtb2R1bGVzPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmluZGluZy1zYW1wbGU8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXNhbXBsZTwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4gICAgCisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9wb20ueG1sIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZmNTEyZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9wb20ueG1sCkBAIC0wLDAgKzEsNTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIDxhcnRpZmFjdElkPnNhbXBsZS1jYWxsYmFjay1hcGktY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIENhbGxiYWNrIEFQSSBDb250cmlidXRpb248L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvc2FtcGxlL0NhbGxCYWNrLmphdmEgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9jYWxsYmFjay1hcGkvc3JjL21haW4vamF2YS9zYW1wbGUvQ2FsbEJhY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmU0Mjk3Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvc2FtcGxlL0NhbGxCYWNrLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7CisKKy8qKgorICogVGhlIGNhbGxiYWNrIGludGVyZmFjZS4KKyAqLworQFJlbW90YWJsZQorcHVibGljIGludGVyZmFjZSBDYWxsQmFjayB7CisKKyAgICB2b2lkIGNhbGxCYWNrTWVzc2FnZShTdHJpbmcgYVN0cmluZyk7CisKKyAgICB2b2lkIGNhbGxCYWNrSW5jcmVtZW50KCk7CisKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9DbGllbnQuamF2YSBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTA3MDllCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvc2FtcGxlL0NsaWVudC5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCitwYWNrYWdlIHNhbXBsZTsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOworCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIENsaWVudCB7CisKKyAgICB2b2lkIHJ1bigpOworCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9jYWxsYmFjay1hcGkvc3JjL21haW4vamF2YS9zYW1wbGUvQ2xpZW50SW1wbC5qYXZhIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvc2FtcGxlL0NsaWVudEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTIxOWFhCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvc2FtcGxlL0NsaWVudEltcGwuamF2YQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlOworCitAU2VydmljZShDbGllbnQuY2xhc3MpCitwdWJsaWMgY2xhc3MgQ2xpZW50SW1wbCBpbXBsZW1lbnRzIENsaWVudCwgQ2FsbEJhY2sgeworCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVMSU1JVEVSID0gIlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSI7CisgICAgCisgICAgQFJlZmVyZW5jZQorICAgIHByb3RlY3RlZCBzYW1wbGUuU2VydmljZSBzZXJ2aWNlOworCisgICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNhbGxCYWNrQ291bnQgPSAwOworCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBwcmludHMgdGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmljZQorICAgICAqIGltcGxlbWVudGF0aW9uLgorICAgICAqIAorICAgICAqIEBwYXJhbSBTdHJpbmcgdGhlIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmljZQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGNhbGxCYWNrTWVzc2FnZShTdHJpbmcgYVN0cmluZykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNsaWVudEltcGwgLSBSZWNlaXZlZCBjYWxsYmFjayBtZXNzYWdlOiAiICsgYVN0cmluZyk7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBpbmNyZW1lbnRzIHRoZSBjYWxsQmFja0NvdW50IHZhcmlhYmxlIHdoZW4gY2FsbGVkIGZyb20gdGhlCisgICAgICogc2VydmljZSBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBjYWxsQmFja0luY3JlbWVudCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnRJbXBsIC0gUmVjZWl2ZWQgaW5jcmVtZW50IGNhbGxiYWNrIik7CisgICAgICAgIGNhbGxCYWNrQ291bnQrKzsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJDbGllbnRJbXBsIC0gQ2FsbGJhY2sgY291bnRlciBpbmNyZW1lbnRlZCB0byA6ICIgKyBnZXRDYWxsQmFja0NvdW50KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoaXMgbWV0aG9kIHJ1bnMgZGlmZmVyZW50IGtpbmRzIG9mIHNlcnZpY2UgY2FsbHMgaW1wbHlpbmcgY2FsbGJhY2tzLgorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHJ1bigpIHsKKyAgICAgICAgc2ltcGxlQ2FsbEJhY2soKTsKKyAgICAgICAgc2ltcGxlQ2FsbEJhY2tCeVJlZigpOworICAgICAgICBub0NhbGxCYWNrKCk7CisgICAgICAgIG11bHRpcGxlQ2FsbEJhY2soKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgYmFzaWMgY2FsbGJhY2sgd2hlcmUgdGhlIHRhcmdldCBjYWxscyBiYWNrIHByaW9yIHRvIHJldHVybmluZyB0byB0aGUKKyAgICAgKiBjbGllbnQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNpbXBsZUNhbGxCYWNrKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oREVMSU1JVEVSICsgIlxuU2ltcGxlIGNhbGxiYWNrIiArIERFTElNSVRFUik7CisgICAgICAgIHNlcnZpY2Uua25vY2tLbm9jaygiS25vY2sgS25vY2siKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgYmFzaWMgY2FsbGJhY2sgd2hlcmUgdGhlIHRhcmdldCBjYWxscyBiYWNrIHByaW9yIHRvIHJldHVybmluZyB0byB0aGUKKyAgICAgKiBjbGllbnQuCisgICAgICovCisgICAgcHJpdmF0ZSB2b2lkIHNpbXBsZUNhbGxCYWNrQnlSZWYoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihERUxJTUlURVIgKyAiXG5TaW1wbGUgY2FsbGJhY2sgYnkgcmVmZXJlbmNlIiArIERFTElNSVRFUik7CisgICAgICAgIHNlcnZpY2Uua25vY2tLbm9ja0J5UmVmKCJLbm9jayBLbm9jayBieSByZWZlcmVuY2UiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGUgYmFzaWMgY2FsbGJhY2sgd2hlcmUgdGhlIHRhcmdldCBkb2VzIG5vdCBjYWxsIGJhY2sgdG8gdGhlIGNsaWVudC4KKyAgICAgKi8KKyAgICBwcml2YXRlIHZvaWQgbm9DYWxsQmFjaygpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKERFTElNSVRFUiArICJcbk5vIGNhbGxiYWNrIiArIERFTElNSVRFUik7CisgICAgICAgIHNlcnZpY2Uubm9DYWxsQmFjaygiTm8gUmVwbHkgRGVzaXJlZCIpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFRoZSBiYXNpYyBjYWxsYmFjayB3aGVyZSB0aGUgdGFyZ2V0IGNhbGxzIGJhY2sgbXVsdGlwbGUgdGltZXMgdG8gdGhlCisgICAgICogY2xpZW50LgorICAgICAqLworICAgIHByaXZhdGUgdm9pZCBtdWx0aXBsZUNhbGxCYWNrKCkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oREVMSU1JVEVSICsgIlxuTXVsdGlwbGUgY2FsbGJhY2tzIiArIERFTElNSVRFUik7CisgICAgICAgIHNlcnZpY2UubXVsdGlDYWxsQmFjaygiQ2FsbCBtZSBiYWNrIDMgdGltZXMiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGNhbGxCYWNrQ291bnQgdmFyaWFibGUuCisgICAgICogCisgICAgICogQHJldHVybiBJbnRlZ2VyIHRoZSBjYWxsQmFja0NvdW50IHZhcmlhYmxlCisgICAgICovCisgICAgcHVibGljIGludCBnZXRDYWxsQmFja0NvdW50KCkgeworICAgICAgICByZXR1cm4gY2FsbEJhY2tDb3VudDsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9MYXVuY2hlci5qYXZhIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvc2FtcGxlL0xhdW5jaGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExYTU5ZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9MYXVuY2hlci5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uTG9jYXRpb25IZWxwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OworCisvKioKKyAqIFRoaXMgY2xhc3Mgc3RhcnRzIHRoZSBUdXNjYW55IFJ1bnRpbWUgYW5kIHJ1bnMgdGhlIGNsaWVudCBjYWxscyB0byB0aGUKKyAqIHNlcnZpY2UuCisgKi8KK3B1YmxpYyBjbGFzcyBMYXVuY2hlciB7CisKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CisgICAgICAgIE5vZGUgbm9kZSA9IHN0YXJ0UnVudGltZSgpOworICAgICAgICBDbGllbnQgY2xpZW50ID0gbm9kZS5nZXRTZXJ2aWNlKENsaWVudC5jbGFzcywgIkNsaWVudCIpOworICAgICAgICBjbGllbnQucnVuKCk7CisgICAgICAgIHN0b3BSdW50aW1lKG5vZGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0cyBhIFR1c2Nhbnkgbm9kZSB3aXRoIHRoZSBwcmVkZWZpbmVkIGNvbnRyaWJ1dGlvbi4KKyAgICAgKiAKKyAgICAgKiBAcmV0dXJuIHRoZSBydW5uaW5nIG5vZGUKKyAgICAgKi8KKyAgICBwcml2YXRlIHN0YXRpYyBOb2RlIHN0YXJ0UnVudGltZSgpIHsKKyAgICAgICAgU3RyaW5nIGxvY2F0aW9uID0gQ29udHJpYnV0aW9uTG9jYXRpb25IZWxwZXIuZ2V0Q29udHJpYnV0aW9uTG9jYXRpb24oIkNhbGxCYWNrQXBpLmNvbXBvc2l0ZSIpOworICAgICAgICBOb2RlIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoIkNhbGxCYWNrQXBpLmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oImMxIiwgbG9jYXRpb24pKTsKKyAgICAgICAgbm9kZS5zdGFydCgpOworICAgICAgICByZXR1cm4gbm9kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBTdG9wcyBhIFR1c2Nhbnkgbm9kZS4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZSB0byBzdG9wCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzdG9wUnVudGltZShOb2RlIG5vZGUpIHsKKyAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvc2FtcGxlL1NlcnZpY2UuamF2YSBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9TZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjcyM2FmMgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL3NhbXBsZS9TZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5DYWxsYmFjazsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKKworQFJlbW90YWJsZQorQENhbGxiYWNrKENhbGxCYWNrLmNsYXNzKQorcHVibGljIGludGVyZmFjZSBTZXJ2aWNlIHsKKworCXZvaWQga25vY2tLbm9jayhTdHJpbmcgYVN0cmluZyk7CisKKwl2b2lkIGtub2NrS25vY2tCeVJlZihTdHJpbmcgYVN0cmluZyk7CisKKwl2b2lkIG5vQ2FsbEJhY2soU3RyaW5nIGFTdHJpbmcpOworCisJdm9pZCBtdWx0aUNhbGxCYWNrKFN0cmluZyBhU3RyaW5nKTsKKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvc2FtcGxlL1NlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9jYWxsYmFjay1hcGkvc3JjL21haW4vamF2YS9zYW1wbGUvU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODUwZjQzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvc2FtcGxlL1NlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuQ29tcG9uZW50Q29udGV4dDsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUmVmZXJlbmNlOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uQ2FsbGJhY2s7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Db250ZXh0OworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsKKworQFNlcnZpY2Uoc2FtcGxlLlNlcnZpY2UuY2xhc3MpCitwdWJsaWMgY2xhc3MgU2VydmljZUltcGwgaW1wbGVtZW50cyBzYW1wbGUuU2VydmljZSB7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBNRVNTQUdFX1JFQ0VJVkVEID0gIlNlcnZpY2VJbXBsIC0gUmVjZWl2ZWQgbWVzc2FnZTogIjsKKworICAgIEBDb250ZXh0CisgICAgcHJvdGVjdGVkIENvbXBvbmVudENvbnRleHQgY29tcG9uZW50Q29udGV4dDsKKworICAgIEBDYWxsYmFjaworICAgIHByb3RlY3RlZCBTZXJ2aWNlUmVmZXJlbmNlPENhbGxCYWNrPiBjYWxsYmFja1JlZjsKKworICAgIC8qKgorICAgICAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBhbiBvYmplY3Qgb2YgU2VydmljZUltcGwgYnkgY2FsbGluZworICAgICAqIGdldENhbGxCYWNrSW50ZXJmYWNlIGZ1bmN0aW9uIGFuZCBjYWxscyB0aGUgY2FsbEJhY2tNZXNzYWdlIGZ1bmN0aW9uLgorICAgICAqIAorICAgICAqIEBwYXJhbSBhU3RyaW5nIFN0cmluZyBwYXNzZWQgYnkgYSBmdW5jdGlvbiBjYWxsCisgICAgICovCisgICAgcHVibGljIHZvaWQga25vY2tLbm9jayhTdHJpbmcgYVN0cmluZykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oTUVTU0FHRV9SRUNFSVZFRCArIGFTdHJpbmcpOworICAgICAgICBDYWxsQmFjayBjYWxsYmFjayA9IHRoaXMuZ2V0Q2FsbEJhY2tGcm9tQ29tcG9uZW50Q29udGV4dCgpOworICAgICAgICBjYWxsYmFjay5jYWxsQmFja01lc3NhZ2UoIldobydzIFRoZXJlIik7CisgICAgfQorCisgICAgLyoqCisgICAgICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgY2FsbEJhY2tNZXNzYWdlIGZ1bmN0aW9uLiBUaGUgcmVmZXJlbmNlIHRvIHRoaXMKKyAgICAgKiBmdW5jdGlvbiBpcyByZWNlaXZlZCBmcm9tIHRoZSBjYWxsYmFjayByZWZlcmVuY2UgdG8gdGhlIFNlcnZpY2UgY2xhc3MuCisgICAgICogCisgICAgICogQHBhcmFtIGFTdHJpbmcgU3RyaW5nIHBhc3NlZCBieSBhIGZ1bmN0aW9uIGNhbGwKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBrbm9ja0tub2NrQnlSZWYoU3RyaW5nIGFTdHJpbmcpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE1FU1NBR0VfUkVDRUlWRUQgKyBhU3RyaW5nKTsKKyAgICAgICAgY2FsbGJhY2tSZWYuZ2V0U2VydmljZSgpLmNhbGxCYWNrTWVzc2FnZSgiV2hvJ3MgVGhlcmUiKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGdldHMgYW4gb2JqZWN0IG9mIFNlcnZpY2VJbXBsIGJ5IGNhbGxpbmcKKyAgICAgKiBnZXRDYWxsQmFja0ludGVyZmFjZSBmdW5jdGlvbi4gVGhpcyBmdW5jdGlvbiB0aGVuIHBsYWNlcyBtdWx0aXBsZQorICAgICAqIGNhbGxiYWNrcyB1c2luZyB0aGUgY2FsbGJhY2tJbmNyZW1lbnQgZnVuY3Rpb24gZGVmaW5lZCBpbiB0aGUgY2FsbGJhY2sKKyAgICAgKiBpbXBsZW1lbnRhdGlvbi4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gYVN0cmluZyBTdHJpbmcgcGFzc2VkIGJ5IGEgZnVuY3Rpb24gY2FsbAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG11bHRpQ2FsbEJhY2soU3RyaW5nIGFTdHJpbmcpIHsKKyAgICAgICAgQ2FsbEJhY2sgY2FsbGJhY2sgPSB0aGlzLmdldENhbGxCYWNrRnJvbUNvbXBvbmVudENvbnRleHQoKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE1FU1NBR0VfUkVDRUlWRUQgKyBhU3RyaW5nKTsKKyAgICAgICAgY2FsbGJhY2suY2FsbEJhY2tJbmNyZW1lbnQoKTsKKyAgICAgICAgY2FsbGJhY2suY2FsbEJhY2tJbmNyZW1lbnQoKTsKKyAgICAgICAgY2FsbGJhY2suY2FsbEJhY2tJbmNyZW1lbnQoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNhbGxCYWNrIGFueSBmdW5jdGlvbi4KKyAgICAgKiAKKyAgICAgKiBAcGFyYW0gYVN0cmluZyBTdHJpbmcgcGFzc2VkIGJ5IGEgZnVuY3Rpb24gY2FsbAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIG5vQ2FsbEJhY2soU3RyaW5nIGFTdHJpbmcpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKE1FU1NBR0VfUkVDRUlWRUQgKyBhU3RyaW5nKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUaGlzIGZ1bmN0aW9uIGdldHMgYW4gb2JqZWN0IG9mIFNlcnZpY2VJbXBsIGZyb20gdGhlIHByZXNlbnQKKyAgICAgKiBjb21wb25lbnRDb250ZXh0LgorICAgICAqIAorICAgICAqIEByZXR1cm4gdGhlIGNhbGxiYWNrCisgICAgICovCisgICAgcHJpdmF0ZSBDYWxsQmFjayBnZXRDYWxsQmFja0Zyb21Db21wb25lbnRDb250ZXh0KCkgeworICAgICAgICByZXR1cm4gY29tcG9uZW50Q29udGV4dC5nZXRSZXF1ZXN0Q29udGV4dCgpLmdldENhbGxiYWNrKCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9jYWxsYmFjay1hcGkvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrQXBpLmNvbXBvc2l0ZSBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tBcGkuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhM2E2ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9jYWxsYmFjay1hcGkvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrQXBpLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDMzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2NhbGxiYWNrIgorCW5hbWU9IkNhbGxCYWNrQXBpIj4KKyAJICAgICAgCisgICAgPGNvbXBvbmVudCBuYW1lPSJDbGllbnQiPgorCQk8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ic2FtcGxlLkNsaWVudEltcGwiLz4KKwkJPHJlZmVyZW5jZSBuYW1lPSJzZXJ2aWNlIiB0YXJnZXQ9IlNlcnZpY2UiLz4KKyAgICA8L2NvbXBvbmVudD4gCisgICAgCisgICAgPGNvbXBvbmVudCBuYW1lPSJTZXJ2aWNlIj4KKyAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJzYW1wbGUuU2VydmljZUltcGwiLz4KKyAgICA8L2NvbXBvbmVudD4gIAorICAKKzwvY29tcG9zaXRlPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvY2FsbGJhY2stYXBpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3NzkxMgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxjb250cmlidXRpb24geG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisgICAgICAgICAgICAgIHhtbG5zOnQ9Imh0dHA6Ly9jYWxsYmFjayI+CisgICAgPGRlcGxveWFibGUgY29tcG9zaXRlPSJ0OkNhbGxCYWNrQXBpIiAvPgorPC9jb250cmlidXRpb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvZmlsZXMvaGVsbG93b3JsZC5jbWRzIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvZmlsZXMvaGVsbG93b3JsZC5jbWRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NGEwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9maWxlcy9oZWxsb3dvcmxkLmNtZHMKQEAgLTAsMCArMSwxOSBAQAorIyAgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorIyAgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorIyAgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgIA0KKyMgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyAgDQorIyAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorIyAgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyAgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyMgIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCisjIGluc3RhbGwgdGhlIGhlbGxvd29ybGQgY29udHJpYnV0aW9uIGFuZCBzdGFydCBpdHMgZGVwbG95YWJsZXMNCitpbnN0YWxsIGhlbGxvd29ybGQtY29udHJpYnV0aW9uL3RhcmdldC9oZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbi5qYXIgLXN0YXJ0DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvZmlsZXMvaGVsbG93b3JsZC54bWwgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9maWxlcy9oZWxsb3dvcmxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDEwNzQ4Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvZmlsZXMvaGVsbG93b3JsZC54bWwKQEAgLTAsMCArMSwyNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICoKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxub2RlIHhtbG5zOnNjYT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICAgIHhtbG5zPSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCisgICAgeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIgorICAgIGRvbWFpbj0iaGVsbG93b3JsZCI+CisKKyAgICA8Y29udHJpYnV0aW9uIGxvY2F0aW9uPSJoZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbi90YXJnZXQvaGVsbG93b3JsZC1jb250cmlidXRpb24uamFyIiBzdGFydERlcGxveWFibGVzPSJ0cnVlIi8+CisKKzwvbm9kZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9maWxlcy9uZXctc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9maWxlcy9uZXctc2NhLWNvbnRyaWJ1dGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJlOGZlZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2ZpbGVzL25ldy1zY2EtY29udHJpYnV0aW9uLnhtbApAQCAtMCwwICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPGNvbnRyaWJ1dGlvbiB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICAgICAgICAgICAgICB4bWxuczpzYW1wbGU9Imh0dHA6Ly9zYW1wbGUiPgorCisgICA8IS0tIEFkZCBleHBvcnRzIGZyb20gdGhlIGhlbGxvd29ybGQgY29udHJpYnV0aW9uIHJlc291cmNlcyBzbyBvdGhlciBjb250cmlidXRpb25zIGNhbiByZXVzZSB0aGVtIC0tPgorICAgPGV4cG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUiLz4gCisgICA8ZXhwb3J0LmphdmEgcGFja2FnZT0ic2FtcGxlIi8+IAorCis8L2NvbnRyaWJ1dGlvbj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2ZpbGVzL3NjZGwtaW5jbHVkZS54bWwgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9maWxlcy9zY2RsLWluY2x1ZGUueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxNWIyMGIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9maWxlcy9zY2RsLWluY2x1ZGUueG1sCkBAIC0wLDAgKzEsMjggQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKgorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8bm9kZSB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICB4bWxucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIgorICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKKyAgICBkb21haW49ImhlbGxvd29ybGQiPgorCisgICAgPGNvbnRyaWJ1dGlvbiBsb2NhdGlvbj0iaGVsbG93b3JsZC1jb250cmlidXRpb24vdGFyZ2V0L2hlbGxvd29ybGQtY29udHJpYnV0aW9uLmphciIgbWV0YURhdGFVUkw9Im5ldy1zY2EtY29udHJpYnV0aW9uLnhtbCIvPgorICAgIDxjb250cmlidXRpb24gbG9jYXRpb249InNjZGwtaW5jbHVkZS1jb250cmlidXRpb24vdGFyZ2V0L3NjZGwtaW5jbHVkZS1jb250cmlidXRpb24uemlwIiBzdGFydERlcGxveWFibGVzPSJ0cnVlIiAvPgorCis8L25vZGU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvZmlsZXMvd3NDbGllbnQuaHRtbCBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2ZpbGVzL3dzQ2xpZW50Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyZjMwYwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2ZpbGVzL3dzQ2xpZW50Lmh0bWwKQEAgLTAsMCArMSwxNDMgQEAKKzwhLS0KKyAgICAKKyAgICBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKKyAgICBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgKKyAgICB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuCisgICAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKKyAgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAorICAgIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgCisgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgCisgICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCistLT4KKworPCEtLQorU2ltcGxlIGh0bWwgcGFnZSB0aGF0IHByZXNlbnRzIGEgZm9ybSB0byBwb3N0IHhtbCB0byBhIHdlYiBzZXJ2aWNlIGVuZHBvaW50IGFuZCBkaXNwbGF5IHRoZSByZXNwb25zZSB4bWwuCitDb3BpZWQgZnJvbSBTZXJ2aWNlTWl4IHdzZGwgZmlyc3QgZXhhbXBsZS4KKy0tPgorCis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPlR1c2NhbnkgV2ViIHNlcnZpY2UgU2FtcGxlIENsaWVudDwvdGl0bGU+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisKK3ZhciB1cmxUb09wZW4gPSAiaHR0cDovL2xvY2FsaG9zdDo4MDg1L0hlbGxvd29ybGRDb21wb25lbnQvSGVsbG93b3JsZCI7IC8vZGVmYXVsdCBVUkwgdG8gb3BlbgorCitmdW5jdGlvbiBnZXRIVFRQT2JqZWN0KCkgeworICB2YXIgeG1saHR0cCA9IGZhbHNlOworCisgIC8qIENvbXBpbGF0aW9uIGNvbmRpdGlvbm5lbGxlIGQnSUUgKi8KKyAgLypAY2Nfb24KKyAgQGlmIChAX2pzY3JpcHRfdmVyc2lvbiA+PSA1KQorICAgICB0cnkgeworICAgICAgICB4bWxodHRwID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1sMi5YTUxIVFRQIik7CisgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgeG1saHR0cCA9IG5ldyBBY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpOworICAgICAgICB9IGNhdGNoIChFKSB7CisgICAgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICB9CisgIEBlbHNlCisgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgQGVuZCBAKi8KKworICAvKiBvbiBlc3NhaWUgZGUgY3LpZXIgbCdvYmpldCBzaSBjZSBuJ2VzdCBwYXMgZOlq4CBmYWl0ICovCisgIGlmICgheG1saHR0cCAmJiB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgdHJ5IHsKKyAgICAgICAgeG1saHR0cCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHhtbGh0dHAgPSBmYWxzZTsKKyAgICAgfQorICB9CisKKyAgaWYgKHhtbGh0dHApIHsKKyAgICAgLyogb24gZOlmaW5pdCBjZSBxdWkgZG9pdCBzZSBwYXNzZXIgcXVhbmQgbGEgcGFnZSBy6XBvbmRyYSAqLworICAgICB4bWxodHRwLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHhtbGh0dHAucmVhZHlTdGF0ZSA9PSA0KSB7IC8qIDQgOiDpdGF0ICJjb21wbGV0ZSIgKi8KKyAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3BvbnNlIik7CisgICAgICAgICAgIHZhciByZXNwb25zZVN0YXR1cyA9ICIiOworICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzID0geG1saHR0cC5zdGF0dXMgKyAiIjsKKyAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgIHJlc3BvbnNlU3RhdHVzID0gIkVSUk9SIFdISUxFIFJFVFJJRVZJTkcgU1RBVFVTOyBNQVlCRSBVTkFCTEUgVE8gQ09OTkVDVC4iOworICAgICAgICAgICB9CisgICAgICAgICAgIHJlc3BvbnNlLnZhbHVlID0geG1saHR0cC5yZXNwb25zZVRleHQ7CisgICAgICAgIH0KKyAgICAgfQorICB9CisgIHJldHVybiB4bWxodHRwOworfQorCitmdW5jdGlvbiBzZW5kKCkgeworICBpZiAoKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSAhPSB1cmxUb09wZW4pICYmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidXJsVG9PcGVuIikudmFsdWUgIT0gIiIpKSB7CisgICAgLy91c2UgdXNlciBlbnRyeSBvbmx5IGlmIGl0IGF0IGxlYXN0IGNhbiBiZSBva2F5CisgICAgdXJsVG9PcGVuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInVybFRvT3BlbiIpLnZhbHVlOworICB9ICAKKyAgdmFyIHhtbGh0dHAgPSBnZXRIVFRQT2JqZWN0KCk7CisgIGlmICgheG1saHR0cCkgeworICAgIGFsZXJ0KCdjb3VuZCBub3QgY3JlYXRlIFhNTEh0dHBSZXF1ZXN0IG9iamVjdCcpOworICAgIHJldHVybjsKKyAgfQorICB2YXIgcmVxdWVzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXF1ZXN0Iik7CisgIHZhciByZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXNwb25zZSIpOworICB0cnkgeworICAgIG5ldHNjYXBlLnNlY3VyaXR5LlByaXZpbGVnZU1hbmFnZXIuZW5hYmxlUHJpdmlsZWdlKCJVbml2ZXJzYWxCcm93c2VyUmVhZCBVbml2ZXJzYWxCcm93c2VyV3JpdGUiKTsKKyAgfSBjYXRjaCAoZSkgeworICB9CisKKworICB0cnkgeworICAgIHhtbGh0dHAub3BlbigiUE9TVCIsIHVybFRvT3BlbiwgdHJ1ZSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBhbGVydCgnZXJyb3Igb3BlbmluZycpOworICB9CisgIHhtbGh0dHAuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQveG1sO2NoYXJzZXQ9VVRGLTgiKTsKKyAgeG1saHR0cC5zZW5kKHJlcXVlc3QudmFsdWUpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxoMT5UdXNjYW55IFdlYiBzZXJ2aWNlIFNhbXBsZSBDbGllbnQ8L2gxPgorCis8cD5UdXNjYW55IFdlYiBzZXJ2aWNlIFNhbXBsZSBDbGllbnQ8L3A+CisKKzxwPlNlbmRzIGEgcmVxdWVzdCB0byBhIFdlYiBTZXJ2aWNlIGVuZHBvaW50LiAoVGhpcyByZXF1aXJlcyBKYXZhU2NyaXB0KTwvcD4gCis8cD5UYXJnZXQ6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzaXplPSI1MCIgaWQ9InVybFRvT3BlbiIgdmFsdWU9IiI+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmxUb09wZW4iKS52YWx1ZSA9IHVybFRvT3Blbjs8L3NjcmlwdD4uPC9wPgorICAKKzx0YWJsZT4KKyAgPHRyPgorICAgIDx0ZD4KKyAgPHRleHRhcmVhIGlkPSJyZXF1ZXN0IiBzdHlsZT0id2lkdGg6NjAwcHg7aGVpZ2h0OjQwMHB4IiA+PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4KKzxzb2FwZW52OkVudmVsb3BlIHhtbG5zOnNvYXBlbnY9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3NvYXAvZW52ZWxvcGUvIj4KKzxzb2FwZW52OkJvZHk+Cis8bnM6c2F5SGVsbG8geG1sbnM6bnM9Imh0dHA6Ly9oZWxsb3dvcmxkIj4KKzxuczpuYW1lPnBldHJhPC9uczpuYW1lPgorPC9uczpzYXlIZWxsbz4KKzwvc29hcGVudjpCb2R5PgorPC9zb2FwZW52OkVudmVsb3BlPgorCisgIDwvdGV4dGFyZWE+CisgICAgPC90ZD4KKyAgICA8dGQ+CisgIDx0ZXh0YXJlYSBpZD0icmVzcG9uc2UiIHN0eWxlPSJ3aWR0aDo2MDBweDtoZWlnaHQ6NDAwcHgiPgorICA8L3RleHRhcmVhPgorICAgIDwvdGQ+CisgIDwvdHI+CisgIDx0cj4KKyAgICA8dGQgY29sc3Bhbj0yPgorICA8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iU2VuZCIgb25DbGljaz0ic2VuZCgpOyIvPgorICAgIDwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkL1JFQURNRSBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2hlbGxvd29ybGQtY29udHJpYnV0aW9uL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkL1JFQURNRQpyZW5hbWUgdG8gc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC1jb250cmlidXRpb24vUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbi9wb20ueG1sIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC1jb250cmlidXRpb24vcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzhlMTAzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC1jb250cmlidXRpb24vcG9tLnhtbApAQCAtMCwwICsxLDU4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPg0KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaGVsbG93b3JsZC1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGVzIC0gR2V0dGluZyBTdGFydGVkIC0gaGVsbG93b3JsZC1jb250cmlidXRpb248L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgICAgIDxwbHVnaW5zPg0KKyAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi10dXNjYW55LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgIDwvcGx1Z2luPg0KKyAgICAgICA8L3BsdWdpbnM+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC1zY2FjbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZC5qYXZhIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEKY29weSB0byBzYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2hlbGxvd29ybGQtY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRJbXBsLmphdmEgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNTYzY2IKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIHNhbXBsZTsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Jbml0Ow0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNjb3BlOw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkVhZ2VySW5pdDsNCisNCitAU2NvcGUoIkNPTVBPU0lURSIpIEBFYWdlckluaXQNCitwdWJsaWMgY2xhc3MgSGVsbG93b3JsZEltcGwgaW1wbGVtZW50cyBIZWxsb3dvcmxkIHsNCisNCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgbmFtZSkgew0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb3dvcmxkSW1wbC5zYXlIZWxsbyAiICsgbmFtZSk7DQorICAgICAgICByZXR1cm4gIkhlbGxvICIgKyBuYW1lOw0KKyAgICB9DQorDQorICAgIEBJbml0DQorICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc2F5SGVsbG8oIndvcmxkIikpOw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2hlbGxvd29ybGQtY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2hlbGxvd29ybGQtY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODliOWQyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCkBAIC0wLDAgKzEsMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPGNvbnRyaWJ1dGlvbiB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgICAgICAgICAgeG1sbnM6c2FtcGxlPSJodHRwOi8vc2FtcGxlIj4NCisNCisgICA8ZGVwbG95YWJsZSBjb21wb3NpdGU9InNhbXBsZTpoZWxsb3dvcmxkIi8+DQorDQorPC9jb250cmlidXRpb24+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2hlbGxvd29ybGQtY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHdzLmNvbXBvc2l0ZSBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2hlbGxvd29ybGQtY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkd3MuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyNDM2ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHdzLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZSINCisgICAgICAgICAgIG5hbWU9ImhlbGxvd29ybGR3cyI+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG93b3JsZENvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ic2FtcGxlLkhlbGxvd29ybGRJbXBsIi8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJIZWxsb3dvcmxkIj4NCisgICAgICAgICAgIDxiaW5kaW5nLndzIC8+DQorICAgICAgICA8L3NlcnZpY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zYW1wbGUvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbi9zcmMvdGVzdC9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXNwcmluZy9zcmMvdGVzdC9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC1jb250cmlidXRpb24vc3JjL3Rlc3QvamF2YS9zYW1wbGUvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWJwZWwvUkVBRE1FIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC13ZWJhcHAvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1icGVsL1JFQURNRQpyZW5hbWUgdG8gc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC13ZWJhcHAvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLXdlYmFwcC9wb20ueG1sIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC13ZWJhcHAvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjAzNDFmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC13ZWJhcHAvcG9tLnhtbApAQCAtMCwwICsxLDExOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaGVsbG93b3JsZC13ZWJhcHA8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBIZWxsb3dvcmxkPC9uYW1lPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgIDxmaW5hbE5hbWU+aGVsbG93b3JsZDwvZmluYWxOYW1lPgorICAgICAgIDxwbHVnaW5zPgorCisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgPGlkPmNvcHk8L2lkPgorICAgICAgICAgICAgICAgIDxwaGFzZT5jb21waWxlPC9waGFzZT4KKyAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICA8Z29hbD5jb3B5PC9nb2FsPgorICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbXM+CisgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaGVsbG93b3JsZC1jb250cmlidXRpb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHNob3VsZCByZWFsbHkgZ28gaW4gdGhlIHRhcmdldCBmb2xkZXIgYnV0IGkgY2FuJ3QgZ2V0IGpldHR5OnJ1biB0byB3b3JrIHVzaW5nIHRoYXQgLS0+CisgICAgICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+c3JjL21haW4vd2ViYXBwL1dFQi1JTkYvc2NhLWNvbnRyaWJ1dGlvbnM8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtcz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgPHZlcnNpb24+Ni4xLjE4PC92ZXJzaW9uPgorICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDxjb250ZXh0UGF0aD5oZWxsb3dvcmxkPC9jb250ZXh0UGF0aD4KKyAgICAgICAgICAgICAgICA8c3RvcEtleT5mb288L3N0b3BLZXk+CisgICAgICAgICAgICAgICAgPHN0b3BQb3J0Pjk5OTk8L3N0b3BQb3J0PgorICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgIDxpZD5zdGFydC1qZXR0eTwvaWQ+CisgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtdGVzdC1jbGFzc2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnJ1bjwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICA8b3ZlcnJpZGVXZWJYbWw+c3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3Qtd2ViLnhtbDwvb3ZlcnJpZGVXZWJYbWw+CisgICAgICAgICAgICAgICAgICAgICAgIDxzY2FuSW50ZXJ2YWxTZWNvbmRzPjA8L3NjYW5JbnRlcnZhbFNlY29uZHM+CisgICAgICAgICAgICAgICAgICAgICAgIDxkYWVtb24+dHJ1ZTwvZGFlbW9uPgorICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9ycz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbj0ib3JnLm1vcnRiYXkuamV0dHkubmlvLlNlbGVjdENoYW5uZWxDb25uZWN0b3IiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9ydD44MDg1PC9wb3J0PgorICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3Rvcj4KKyAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3JzPgorICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgIDxpZD5zdG9wLWpldHR5PC9pZD4KKyAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJlcGFyZS1wYWNrYWdlPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnN0b3A8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2hlbGxvd29ybGQtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTE2MmUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0wLDAgKzEsNDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8d2ViLWFwcCB2ZXJzaW9uPSIyLjQiCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIKKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCisgICAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiID4KKworICA8ZGlzcGxheS1uYW1lPkFwYWNoZSBUdXNjYW55IEhlbGxvd29ybGQgU2FtcGxlPC9kaXNwbGF5LW5hbWU+CisKKyAgPGNvbnRleHQtcGFyYW0+CisgICAgPHBhcmFtLW5hbWU+Y29udHJpYnV0aW9uczwvcGFyYW0tbmFtZT4KKyAgICA8cGFyYW0tdmFsdWU+L1dFQi1JTkYvc2NhLWNvbnRyaWJ1dGlvbnM8L3BhcmFtLXZhbHVlPgorICA8L2NvbnRleHQtcGFyYW0+CisKKzwhLS0gVE9ETzogbmVlZCB0byBzb3J0IG91dCB3aGF0IHRvIGRvIGFib3V0IGRpc3RyaWJ1dGVkIGRvbWFpbgorICA8Y29udGV4dC1wYXJhbT4KKyAgICA8cGFyYW0tbmFtZT5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbmZpZzwvcGFyYW0tbmFtZT4KKyAgICA8cGFyYW0tdmFsdWU+dXJpOmRlZmF1bHQ8L3BhcmFtLXZhbHVlPgorICA8L2NvbnRleHQtcGFyYW0+CistLT4KKworICA8ZmlsdGVyPgorICAgIDxmaWx0ZXItbmFtZT50dXNjYW55PC9maWx0ZXItbmFtZT4gCisgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qud2ViYXBwLlR1c2NhbnlTZXJ2bGV0RmlsdGVyPC9maWx0ZXItY2xhc3M+IAorICA8L2ZpbHRlcj4KKworICA8ZmlsdGVyLW1hcHBpbmc+CisgICAgPGZpbHRlci1uYW1lPnR1c2Nhbnk8L2ZpbHRlci1uYW1lPiAKKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPiAKKyAgPC9maWx0ZXItbWFwcGluZz4KKworPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkLmphdmEgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLXdlYmFwcC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0hlbGxvd29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvZ2V0dGluZy1zdGFydGVkL2hlbGxvd29ybGQtd2ViYXBwL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0hlbGxvd29ybGRUZXN0Q2FzZUZJWE1FLmphdmEgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9oZWxsb3dvcmxkLXdlYmFwcC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0hlbGxvd29ybGRUZXN0Q2FzZUZJWE1FLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlRklYTUUuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC13ZWJhcHAvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkVGVzdENhc2VGSVhNRS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdC13ZWIueG1sIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC13ZWJhcHAvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3Qtd2ViLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3Qtd2ViLnhtbApyZW5hbWUgdG8gc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvaGVsbG93b3JsZC13ZWJhcHAvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3Qtd2ViLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvcG9tLnhtbCBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YyMjlhNAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3BvbS54bWwKQEAgLTAsMCArMSw0OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzLWdldHRpbmctc3RhcnRlZC1jb250cmlidXRpb25zPC9hcnRpZmFjdElkPgorICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgR2V0dGluZyBTdGFydGVkIFNhbXBsZSBDb250cmlidXRpb25zPC9uYW1lPgorCisgICAgPHByb2ZpbGVzPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPgorICAgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgorICAgICAgICAgICAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5oZWxsb3dvcmxkLWNvbnRyaWJ1dGlvbjwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+c2NkbC1pbmNsdWRlLWNvbnRyaWJ1dGlvbjwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsbGJhY2stYXBpPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5zY2Etc2NvcGVzPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5oZWxsb3dvcmxkLXdlYmFwcDwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4gICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3BvbS54bWwgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM3OWQ1NwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3NjYS1zY29wZXMvcG9tLnhtbApAQCAtMCwwICsxLDUxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIFNDQSBTY29wZXMgQ29udHJpYnV0aW9uPC9uYW1lPg0KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtc2NhLXNjb3Blcy1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL0NsaWVudC5qYXZhIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9DbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2Y2ZTAwCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9DbGllbnQuamF2YQpAQCAtMCwwICsxLDI1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSBzYW1wbGU7CisKK3B1YmxpYyBpbnRlcmZhY2UgQ2xpZW50IHsKKworCXZvaWQgcnVuKCk7CisJCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL0NsaWVudEltcGwuamF2YSBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3NjYS1zY29wZXMvc3JjL21haW4vamF2YS9zYW1wbGUvQ2xpZW50SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYmVlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL0NsaWVudEltcGwuamF2YQpAQCAtMCwwICsxLDU0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSBzYW1wbGU7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsKKworcHVibGljIGNsYXNzIENsaWVudEltcGwgaW1wbGVtZW50cyBDbGllbnQgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFRJTUVTID0gNTsKKwkKKwlAUmVmZXJlbmNlCisJcHJpdmF0ZSBDb21wb3NpdGVTZXJ2aWNlIGNvbXBvc2l0ZVNlcnZpY2U7CisKKwlAUmVmZXJlbmNlCisJcHJpdmF0ZSBTdGF0ZWxlc3NTZXJ2aWNlIHN0YXRlbGVzc1NlcnZpY2U7CisKKwlwdWJsaWMgdm9pZCBzZXRDb21wb3NpdGVTZXJ2aWNlKENvbXBvc2l0ZVNlcnZpY2UgY29tcG9zaXRlU2VydmljZSkgeworCQl0aGlzLmNvbXBvc2l0ZVNlcnZpY2UgPSBjb21wb3NpdGVTZXJ2aWNlOworCX0KKworCXB1YmxpYyB2b2lkIHNldFN0YXRlbGVzc1NlcnZpY2UoU3RhdGVsZXNzU2VydmljZSBzdGF0ZWxlc3NTZXJ2aWNlKSB7CisJCXRoaXMuc3RhdGVsZXNzU2VydmljZSA9IHN0YXRlbGVzc1NlcnZpY2U7CisJfQorCQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHJ1bigpIHsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIENvbXBvc2l0ZVNlcnZpY2UgIiArIFRJTUVTICsgIiB0aW1lcy4uLiIpOworCQlmb3IgKGludCBpID0gMCA7IGkgPCBUSU1FUzsgaSsrKSB7CisJCQljb21wb3NpdGVTZXJ2aWNlLmhlbGxvKCk7CisJCX0KKwkJU3lzdGVtLm91dC5wcmludGxuKCJDYWxsaW5nIFN0YXRlbGVzc1NlcnZpY2UgIiArIFRJTUVTICsgIiB0aW1lcy4uLiIpOworCQlmb3IgKGludCBpID0gMCA7IGkgPCBUSU1FUzsgaSsrKSB7CisJCQlzdGF0ZWxlc3NTZXJ2aWNlLmhlbGxvKCk7CisJCX0KKwl9CisKKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9Db21wb3NpdGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL0NvbXBvc2l0ZVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDM4NGNiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9Db21wb3NpdGVTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyNyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi9wYWNrYWdlIHNhbXBsZTsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOworCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIENvbXBvc2l0ZVNlcnZpY2UgeworCisJdm9pZCBoZWxsbygpOworCQorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9Db21wb3NpdGVTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9Db21wb3NpdGVTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NTg3NjcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL0NvbXBvc2l0ZVNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TY29wZTsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNlcnZpY2U7CisKK0BTY29wZSgiQ09NUE9TSVRFIikKK0BTZXJ2aWNlKENvbXBvc2l0ZVNlcnZpY2UuY2xhc3MpCitwdWJsaWMgY2xhc3MgQ29tcG9zaXRlU2VydmljZUltcGwgaW1wbGVtZW50cyBDb21wb3NpdGVTZXJ2aWNlIHsKKworCXB1YmxpYyBDb21wb3NpdGVTZXJ2aWNlSW1wbCgpIHsKKwkJc3VwZXIoKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJDb25zdHJ1Y3RpbmcgQ29tcG9zaXRlU2VydmljZUltcGwgaW5zdGFuY2UuIik7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgaGVsbG8oKSB7CisJCVN5c3RlbS5vdXQucHJpbnRsbigiU2F5aW5nIGhlbGxvIHRvIENvbXBvc2l0ZVNlcnZpY2VJbXBsIGluc3RhbmNlLiIpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9MYXVuY2hlci5qYXZhIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9MYXVuY2hlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMDBiNmUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL0xhdW5jaGVyLmphdmEKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uTG9jYXRpb25IZWxwZXI7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OworCitwdWJsaWMgY2xhc3MgTGF1bmNoZXIgeworCQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKKyAgICAgICAgTm9kZSBub2RlID0gc3RhcnRSdW50aW1lKCk7ICAgICAgICAgCisgICAgICAgIENsaWVudCBjbGllbnQgPSBub2RlLmdldFNlcnZpY2UoQ2xpZW50LmNsYXNzLCAiQ2xpZW50Iik7CisgICAgICAgIGNsaWVudC5ydW4oKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHN0b3BSdW50aW1lKG5vZGUpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFN0YXJ0cyBhIFR1c2Nhbnkgbm9kZSB3aXRoIHRoZSBwcmVkZWZpbmVkIGNvbnRyaWJ1dGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gdGhlIHJ1bm5pbmcgbm9kZQorICAgICAqLworICAgIHByaXZhdGUgc3RhdGljIE5vZGUgc3RhcnRSdW50aW1lKCkgeworICAgICAgICBTdHJpbmcgbG9jYXRpb24gPSBDb250cmlidXRpb25Mb2NhdGlvbkhlbHBlci5nZXRDb250cmlidXRpb25Mb2NhdGlvbigic2NvcGVzLmNvbXBvc2l0ZSIpOworICAgICAgICBOb2RlIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoInNjb3Blcy5jb21wb3NpdGUiLCBuZXcgQ29udHJpYnV0aW9uKCJjMSIsIGxvY2F0aW9uKSk7CisgICAgICAgIG5vZGUuc3RhcnQoKTsKKyAgICAgICAgcmV0dXJuIG5vZGU7CisgICAgfQorCisgICAgLyoqCisgICAgICogU3RvcHMgYSBUdXNjYW55IG5vZGUuCisgICAgICoKKyAgICAgKiBAcGFyYW0gbm9kZSB0aGUgbm9kZSB0byBzdG9wCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBzdG9wUnVudGltZShOb2RlIG5vZGUpIHsKKyAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL1N0YXRlbGVzc1NlcnZpY2UuamF2YSBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3NjYS1zY29wZXMvc3JjL21haW4vamF2YS9zYW1wbGUvU3RhdGVsZXNzU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NzRiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL1N0YXRlbGVzc1NlcnZpY2UuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSBzYW1wbGU7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKKworQFJlbW90YWJsZQorcHVibGljIGludGVyZmFjZSBTdGF0ZWxlc3NTZXJ2aWNlIHsKKworCXZvaWQgaGVsbG8oKTsKKwkKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3NjYS1zY29wZXMvc3JjL21haW4vamF2YS9zYW1wbGUvU3RhdGVsZXNzU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3NjYS1zY29wZXMvc3JjL21haW4vamF2YS9zYW1wbGUvU3RhdGVsZXNzU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NGQ2MzM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9TdGF0ZWxlc3NTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCitwYWNrYWdlIHNhbXBsZTsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2NvcGU7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlOworCitAU2NvcGUoIlNUQVRFTEVTUyIpCitAU2VydmljZShTdGF0ZWxlc3NTZXJ2aWNlLmNsYXNzKQorcHVibGljIGNsYXNzIFN0YXRlbGVzc1NlcnZpY2VJbXBsIGltcGxlbWVudHMgU3RhdGVsZXNzU2VydmljZSB7CisKKwlwdWJsaWMgU3RhdGVsZXNzU2VydmljZUltcGwoKSB7CisJCXN1cGVyKCk7CisJCVN5c3RlbS5vdXQucHJpbnRsbigiQ29uc3RydWN0aW5nIFN0YXRlbGVzc1NlcnZpY2VJbXBsIGluc3RhbmNlLiIpOworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGhlbGxvKCkgeworCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNheWluZyBoZWxsbyB0byBTdGF0ZWxlc3NTZXJ2aWNlSW1wbC4iKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2Etc2NvcGVzL3NyYy9tYWluL3Jlc291cmNlcy9zY29wZXMuY29tcG9zaXRlIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NvcGVzLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDkzN2ExCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NhLXNjb3Blcy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NvcGVzLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDM4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9TY29wZXMiCisgICAgICAgICAgIG5hbWU9IlNjb3BlcyI+CisKKyAJPGNvbXBvbmVudCBuYW1lPSJTdGF0ZWxlc3MiPgorCQk8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ic2FtcGxlLlN0YXRlbGVzc1NlcnZpY2VJbXBsIi8+CisgICAgPC9jb21wb25lbnQ+CisKKwk8Y29tcG9uZW50IG5hbWU9IkNvbXBvc2l0ZSI+CisJCTxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJzYW1wbGUuQ29tcG9zaXRlU2VydmljZUltcGwiLz4KKyAgICA8L2NvbXBvbmVudD4KKyAgICAKKyAgICA8Y29tcG9uZW50IG5hbWU9IkNsaWVudCI+CisgICAgCTxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJzYW1wbGUuQ2xpZW50SW1wbCIvPgorICAgIAk8cmVmZXJlbmNlIG5hbWU9InN0YXRlbGVzc1NlcnZpY2UiIHRhcmdldD0iU3RhdGVsZXNzIi8+CisgICAgCTxyZWZlcmVuY2UgbmFtZT0iY29tcG9zaXRlU2VydmljZSIgdGFyZ2V0PSJDb21wb3NpdGUiLz4KKyAgICA8L2NvbXBvbmVudD4KKworPC9jb21wb3NpdGU+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQvUkVBRE1FIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NkbC1pbmNsdWRlLWNvbnRyaWJ1dGlvbi9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQvUkVBRE1FCmNvcHkgdG8gc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NkbC1pbmNsdWRlLWNvbnRyaWJ1dGlvbi9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3NjZGwtaW5jbHVkZS1jb250cmlidXRpb24vcG9tLnhtbCBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3NjZGwtaW5jbHVkZS1jb250cmlidXRpb24vcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2I0NTdmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NkbC1pbmNsdWRlLWNvbnRyaWJ1dGlvbi9wb20ueG1sCkBAIC0wLDAgKzEsNzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxwYWNrYWdpbmc+emlwPC9wYWNrYWdpbmc+DQorICAgIDxhcnRpZmFjdElkPnNhbXBsZS1zY2RsLWluY2x1ZGUtY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIGluY2x1ZGUgQ29tcG9zaXRlIENvbnRyaWJ1dGlvbjwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisNCisgICAgICAgPHBsdWdpbnM+DQorDQorICAgICAgICAgPCEtLSBwbHVnaW4gdG8gc3VwcG9ydCB6aXAgcGFja2FnaW5nIGZvciBTQ0EgY29udHJpYnV0aW9ucyAtLT4NCisgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXppcC1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+YWxwaGEyPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+DQorICAgICAgICAgPC9wbHVnaW4+DQorDQorICAgICAgICAgPCEtLSBwbHVnaW4gdG8gc3VwcG9ydCB1c2luZyBtdm4gdHVzY2FueTpydW4gdG8gcnVuIHRoaXMgY29udHJpYnV0aW9uIC0tPg0KKyAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi10dXNjYW55LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgPGNvbnRyaWJ1dGlvbnM+DQorICAgICAgICAgICAgICAgICAgIDwhLS0gYWRkIHRoZSBkZXBlbmRlZSBjb250cmlidXRpb24gdGhhdCB0aGlzIGNvbnRyaWJ1dGlvbiB1c2VzIC0tPg0KKyAgICAgICAgICAgICAgICAgICA8cGFyYW0+Li5caGVsbG93b3JsZC1jb250cmlidXRpb25cdGFyZ2V0XGhlbGxvd29ybGQtY29udHJpYnV0aW9uLmphcjwvcGFyYW0+DQorICAgICAgICAgICAgICAgIDwvY29udHJpYnV0aW9ucz4NCisgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgIDwvcGx1Z2luPg0KKw0KKyAgICAgICA8L3BsdWdpbnM+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3NjZGwtaW5jbHVkZS1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NkbC1pbmNsdWRlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc2NzdmMQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvZ2V0dGluZy1zdGFydGVkL3NjZGwtaW5jbHVkZS1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPGNvbnRyaWJ1dGlvbiB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgICAgICAgICAgeG1sbnM6c2FtcGxlPSJodHRwOi8vc2FtcGxlIj4NCisgICA8ZGVwbG95YWJsZSBjb21wb3NpdGU9InNhbXBsZTpzY2RsLWluY2x1ZGUiLz4NCisgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZSIvPiANCisgICA8ZXhwb3J0IG5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZSIvPiANCis8L2NvbnRyaWJ1dGlvbj4NCisNCmRpZmYgLS1naXQgYS9zYW1wbGVzL2dldHRpbmctc3RhcnRlZC9zY2RsLWluY2x1ZGUtY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9zY2RsLWluY2x1ZGUuY29tcG9zaXRlIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NkbC1pbmNsdWRlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvc2NkbC1pbmNsdWRlLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Zjc1YzY1Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9nZXR0aW5nLXN0YXJ0ZWQvc2NkbC1pbmNsdWRlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvc2NkbC1pbmNsdWRlLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZSINCisgICAgICAgICAgIHhtbG5zOnNhbXBsZT0iaHR0cDovL3NhbXBsZSINCisgICAgICAgICAgIG5hbWU9InNjZGwtaW5jbHVkZSI+DQorDQorICAgIDxpbmNsdWRlIG5hbWU9InNhbXBsZTpoZWxsb3dvcmxkIiAvPg0KKw0KKyAgICA8c2VydmljZSBuYW1lPSJNeUhlbGxvd29ybGQiIHByb21vdGU9IkhlbGxvd29ybGRDb21wb25lbnQvSGVsbG93b3JsZCIgLz4NCisNCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtYnBlbC9idWlsZC54bWwgYi9zYW1wbGVzL2hlbGxvd29ybGQtYnBlbC9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODk1M2UuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvYnVpbGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICoKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKgotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4KLS0tPgotPHByb2plY3QgbmFtZT0ic2FtcGxlLWhlbGxvd29ybGQtYnBlbCIgZGVmYXVsdD0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9InRlc3QuY2xhc3MiICAgdmFsdWU9ImhlbGxvd29ybGQuQlBFTENsaWVudCIgLz4KLSAgICA8cHJvcGVydHkgbmFtZT0idGVzdC5qYXIiICAgICB2YWx1ZT0ic2FtcGxlLWhlbGxvd29ybGQtYnBlbC5qYXIiIC8+Ci0gICAgPHByb3BlcnR5IG5hbWU9Im1hbmlmZXN0LmphciIgdmFsdWU9Ii4uLy4uL2xpYi90dXNjYW55LXNjYS1tYW5pZmVzdC5qYXIiIC8+Ci0KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8bWtkaXIgZGlyPSJ0YXJnZXQvY2xhc3NlcyIvPgotICAgICAgICA8bWtkaXIgZGlyPSJ0YXJnZXQvd3NkbDJqYXZhLXNvdXJjZSIvPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPHRhcmdldCBuYW1lPSJnZW5lcmF0ZS13c2RsIiBkZXBlbmRzPSJpbml0Ij4KLSAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2RvLmdlbmVyYXRlLlhTRDJKYXZhR2VuZXJhdG9yIiBmb3JrPSJ0cnVlIj4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii10YXJnZXREaXJlY3RvcnkiLz4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9InRhcmdldC93c2RsMmphdmEtc291cmNlIi8+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSItcHJlZml4Ii8+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSJIZWxsb1dvcmxkIi8+Ci0gICAgICAgICAgICA8YXJnIHZhbHVlPSItbm9Db250YWlubWVudCIvPgotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLW5vVW5zZXR0YWJsZSIvPgotICAgICAgICAgICAgPGFyZyB2YWx1ZT0ic3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQud3NkbCIvPgotCi0gICAgICAgICAgICA8Y2xhc3NwYXRoPgotICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttYW5pZmVzdC5qYXJ9Ii8+Ci0gICAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgPC9qYXZhPgotCi0gICAgICAgIDxqYXZhIGNsYXNzbmFtZT0ib3JnLmFwYWNoZS50dXNjYW55LnRvb2xzLndzZGwyamF2YS5nZW5lcmF0ZS5XU0RMMkphdmFHZW5lcmF0b3IiIGZvcms9InRydWUiPgotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLXRhcmdldERpcmVjdG9yeSIvPgotICAgICAgICAgICAgPGFyZyB2YWx1ZT0idGFyZ2V0L3dzZGwyamF2YS1zb3VyY2UiLz4KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9InNyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwiLz4KLQotICAgICAgICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249IiR7bWFuaWZlc3QuamFyfSIvPgotICAgICAgICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgICAgIDwvamF2YT4KLSAgICA8L3RhcmdldD4KLQotICAgIDx0YXJnZXQgbmFtZT0idW56aXAtb2RlLWRiIiBkZXBlbmRzPSJpbml0Ij4KLSAgICAgICAgPHVuemlwIHNyYz0iLi4vLi4vbGliL29kZS1kYW8tanBhLW9qcGEtZGVyYnktMS4zLjIuemlwIiBkZXN0PSJ0YXJnZXQvZGF0YWJhc2UiLz4KLSAgICA8L3RhcmdldD4KLQotICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCxnZW5lcmF0ZS13c2RsLHVuemlwLW9kZS1kYiI+Ci0gICAgICAgIDxqYXZhYyBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIgZGVidWc9Im9uIiBzb3VyY2U9IjEuNSIgdGFyZ2V0PSIxLjUiPgotICAgICAgICAgICAgPHNyYyBwYXRoPSJzcmMvbWFpbi9qYXZhIi8+Ci0gICAgICAgICAgICA8c3JjIHBhdGg9InRhcmdldC93c2RsMmphdmEtc291cmNlIi8+Ci0gICAgICAgICAgICA8Y2xhc3NwYXRoPgotICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttYW5pZmVzdC5qYXJ9Ii8+Ci0gICAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgPC9qYXZhYz4KLSAgICAgICAgPGNvcHkgdG9kaXI9InRhcmdldC9jbGFzc2VzIj4KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL21haW4vcmVzb3VyY2VzIi8+Ci0gICAgICAgIDwvY29weT4KLSAgICAgICAgPGphciBkZXN0ZmlsZT0idGFyZ2V0LyR7dGVzdC5qYXJ9IiBiYXNlZGlyPSJ0YXJnZXQvY2xhc3NlcyI+Ci0gICAgICAgICAgICA8bWFuaWZlc3Q+Ci0gICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0iJHt0ZXN0LmNsYXNzfSIgLz4KLSAgICAgICAgICAgIDwvbWFuaWZlc3Q+Ci0gICAgICAgIDwvamFyPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPHRhcmdldCBuYW1lPSJydW4iPgotICAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7dGVzdC5jbGFzc30iIGZvcms9InRydWUiPgotICAgICAgICAgICAgPCEtLSBqdm1hcmcgdmFsdWU9Ii1YZGVidWciLyAtLT4KLSAgICAgICAgICAgIDwhLS0ganZtYXJnIHZhbHVlPSItWHJ1bmpkd3A6dHJhbnNwb3J0PWR0X3NvY2tldCxhZGRyZXNzPTgwMDAsc2VydmVyPXksc3VzcGVuZD15Ii8gLS0+Ci0gICAgICAgICAgICA8Y2xhc3NwYXRoPgotICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0idGFyZ2V0L2NsYXNzZXMiLz4KLSAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249InRhcmdldC9kYXRhYmFzZSIvPgotICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttYW5pZmVzdC5qYXJ9Ii8+Ci0gICAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgPC9qYXZhPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPHRhcmdldCBuYW1lPSJjbGVhbiI+Ci0gICAgICAgIDxkZWxldGUgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvcG9tLnhtbCBiL3NhbXBsZXMvaGVsbG93b3JsZC1icGVsL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyOGJlNTYuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKgotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLgotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8cGFja2FnaW5nPnppcDwvcGFja2FnaW5nPgotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1oZWxsb3dvcmxkLWJwZWw8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBIZWxsb1dvcmxkIEJQRUw8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+Ci0gICAgICAgPHBsdWdpbnM+Ci0KLSAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICA8IS0tIHBsdWdpbiB0byBzdXBwb3J0IHppcCBwYWNrYWdpbmcgZm9yIFNDQSBjb250cmlidXRpb25zIC0tPgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi16aXAtcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+YWxwaGEyPC92ZXJzaW9uPgotICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4KLSAgICAgICAgIDwvcGx1Z2luPgotCi0gICAgICAgICA8IS0tIHBsdWdpbiB0byBzdXBwb3J0IHVzaW5nIG12biB0dXNjYW55OnJ1biB0byBydW4gdGhpcyBjb250cmlidXRpb24gLS0+Ci0gICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgotICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPgotICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYnBlbDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgotICAgICAgICAgPC9wbHVnaW4+Ci0KLSAgICAgICA8L3BsdWdpbnM+Ci0gICAgPC9idWlsZD4KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC1zY2FjbGllbnQvcG9tLnhtbCBiL3NhbXBsZXMvaGVsbG93b3JsZC1zY2FjbGllbnQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjgyMjUyOC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2hlbGxvd29ybGQtc2NhY2xpZW50L3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1oZWxsb3dvcmxkLXNjYWNsaWVudDwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBIZWxsb3dvcmxkIFNDQUNsaWVudDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KLSAgICAgICA8cGx1Z2lucz4NCi0gICAgICAgICA8cGx1Z2luPg0KLSAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQotICAgICAgICAgICA8YXJ0aWZhY3RJZD5leGVjLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgIDx2ZXJzaW9uPjEuMS4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgICAgPGdvYWw+amF2YTwvZ29hbD4NCi0gICAgICAgICAgICAgICA8L2dvYWxzPg0KLSAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCi0gICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICA8bWFpbkNsYXNzPnNhbXBsZS5IZWxsb3dvcmxkU0NBQ2xpZW50PC9tYWluQ2xhc3M+DQotICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgPC9wbHVnaW4+DQotICAgICAgPC9wbHVnaW5zPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtc3ByaW5nL3BvbS54bWwgYi9zYW1wbGVzL2hlbGxvd29ybGQtc3ByaW5nL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZTFmYTcuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9oZWxsb3dvcmxkLXNwcmluZy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKg0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4NCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaGVsbG93b3JsZC1zcHJpbmc8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgSGVsbG9Xb3JsZCB1c2luZyBTcHJpbmc8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotICAgICAgIDxwbHVnaW5zPg0KLQ0KLSAgICAgICAgIDwhLS0gcGx1Z2luIHRvIHN1cHBvcnQgdXNpbmcgbXZuIHR1c2Nhbnk6cnVuIHRvIHJ1biB0aGlzIGNvbnRyaWJ1dGlvbiAtLT4NCi0gICAgICAgICA8cGx1Z2luPg0KLSAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tdHVzY2FueS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNwcmluZzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgIDwvcGx1Z2luPg0KLQ0KLSAgICAgICA8L3BsdWdpbnM+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC1zcHJpbmcvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZC5qYXZhIGIvc2FtcGxlcy9oZWxsb3dvcmxkLXNwcmluZy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ZThjNTAuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9oZWxsb3dvcmxkLXNwcmluZy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBzYW1wbGU7DQotDQotaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOw0KLQ0KLUBSZW1vdGFibGUNCi1wdWJsaWMgaW50ZXJmYWNlIEhlbGxvd29ybGQgew0KLQ0KLSAgICBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpOw0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtc3ByaW5nL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRJbXBsLmphdmEgYi9zYW1wbGVzL2hlbGxvd29ybGQtc3ByaW5nL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjMDNlYTMuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9oZWxsb3dvcmxkLXNwcmluZy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkSW1wbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLSAqLw0KLXBhY2thZ2Ugc2FtcGxlOw0KLQ0KLQ0KLXB1YmxpYyBjbGFzcyBIZWxsb3dvcmxkSW1wbCBpbXBsZW1lbnRzIEhlbGxvd29ybGQgew0KLQ0KLSAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBuYW1lKSB7DQotICAgICAgICByZXR1cm4gIkhlbGxvICIgKyBuYW1lOw0KLSAgICB9DQotDQotfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtY29udGV4dC54bWwgYi9zYW1wbGVzL2hlbGxvd29ybGQtc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWNvbnRleHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWIyY2ZiLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvaGVsbG93b3JsZC1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtY29udGV4dC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyINCi0gICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCi0gICAgICAgeG1sbnM6c2NhPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3NjYSINCi0gICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSINCi0gICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QNCi0gICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9zY2EgaHR0cDovL3d3dy5vc29hLm9yZy94bWxucy9zY2EvMS4wL3NwcmluZy1zY2EueHNkIj4NCi0NCi0gICAgPGJlYW4gaWQ9InRlc3RCZWFuIiBjbGFzcz0ic2FtcGxlLkhlbGxvd29ybGRJbXBsIiBsYXp5LWluaXQ9InRydWUiPg0KLSAgICA8L2JlYW4+DQotDQotPC9iZWFucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3NhbXBsZXMvaGVsbG93b3JsZC1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzg5NWRkLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvaGVsbG93b3JsZC1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQotICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2FtcGxlIg0KLSAgICAgIHhtbG5zOmhucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9pbXBsZW1lbnRhdGlvbi9icGVsL2V4YW1wbGUvaGVsbG93b3JsZCINCi0gICAgICBuYW1lPSJoZWxsb3dvcmxkIj4NCi0gICAgDQotICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG93b3JsZENvbXBvbmVudCI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uc3ByaW5nIGxvY2F0aW9uPSJoZWxsb3dvcmxkLWNvbnRleHQueG1sIi8+DQotICAgIDwvY29tcG9uZW50Pg0KLQ0KLTwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vcG9tLnhtbCBiL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU0YTAzZS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxODAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAgICoKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaGVsbG93b3JsZC13cy1zZG88L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBIZWxsb1dvcmxkIFdlYiBTZXJ2aWNlIFNETzwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zZG88L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNkby1saWI8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjEuMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zZG88L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNkby1pbXBsPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+MS4xLjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5iYWNrcG9ydC11dGlsLWNvbmN1cnJlbnQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmJhY2twb3J0LXV0aWwtY29uY3VycmVudDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmJhY2twb3J0LXV0aWwtY29uY3VycmVudDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmJhY2twb3J0LXV0aWwtY29uY3VycmVudDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nLXNkbzwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1qZXR0eTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuNTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgotCi0KLSAgICAgICAgPHBsdWdpbnM+Ci0KLSAgICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YWJpbmRpbmctc2RvPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+Ci0gICAgICAgICAgICA8L3BsdWdpbj4KLQotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5idWlsZC1oZWxwZXItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5hZGQtc291cmNlPC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5hZGQtdGVzdC1zb3VyY2U8L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2U+dGFyZ2V0L3Nkby1zb3VyY2U8L3NvdXJjZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZXM+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2RvPC9ncm91cElkPgotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2RvLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjEuMTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5nZW5lcmF0ZS1oZWxsb3dvcmxkLXNkbzwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NoZW1hRmlsZT4ke2Jhc2VkaXJ9L3NyYy9tYWluL3Jlc291cmNlcy93c2RsL2hlbGxvd29ybGQud3NkbDwvc2NoZW1hRmlsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8amF2YVBhY2thZ2U+aGVsbG93b3JsZDwvamF2YVBhY2thZ2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByZWZpeD5IZWxsb3dvcmxkPC9wcmVmaXg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vTm90aWZpY2F0aW9uPnRydWU8L25vTm90aWZpY2F0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub0NvbnRhaW5lcj50cnVlPC9ub0NvbnRhaW5lcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9VbnNldHRhYmxlPnRydWU8L25vVW5zZXR0YWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5nZW5lcmF0ZTwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aWQ+Z2VuZXJhdGUtaGVsbG93b3JsZC1zZG8xPC9pZD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1zb3VyY2VzPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzY2hlbWFGaWxlPiR7YmFzZWRpcn0vc3JjL21haW4vcmVzb3VyY2VzL3Rlc3QueHNkPC9zY2hlbWFGaWxlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxqYXZhUGFja2FnZT5tb2RlbC5zZG88L2phdmFQYWNrYWdlPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcmVmaXg+RW50aXR5PC9wcmVmaXg+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vTm90aWZpY2F0aW9uPnRydWU8L25vTm90aWZpY2F0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub0NvbnRhaW5lcj50cnVlPC9ub0NvbnRhaW5lcj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9VbnNldHRhYmxlPnRydWU8L25vVW5zZXR0YWJsZT4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5nZW5lcmF0ZTwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgICA8L3BsdWdpbnM+Ci0gICAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkL3BvbS54bWwgYi9zYW1wbGVzL2hlbGxvd29ybGQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MxOTQ0Zi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2hlbGxvd29ybGQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPHBhY2thZ2luZz5qYXI8L3BhY2thZ2luZz4NCi0gICAgPGFydGlmYWN0SWQ+c2FtcGxlLWhlbGxvd29ybGQ8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgSGVsbG93b3JsZDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0gICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQotICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICAgPC9wbHVnaW4+DQotICAgICAgIDwvcGx1Z2lucz4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGQuamF2YSBiL3NhbXBsZXMvaGVsbG93b3JsZC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ZThjNTAuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi1wYWNrYWdlIHNhbXBsZTsNCi0NCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7DQotDQotQFJlbW90YWJsZQ0KLXB1YmxpYyBpbnRlcmZhY2UgSGVsbG93b3JsZCB7DQotDQotICAgIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgbmFtZSk7DQotDQotfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkSW1wbC5qYXZhIGIvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRJbXBsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZjZhOTQuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRJbXBsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBzYW1wbGU7DQotDQotcHVibGljIGNsYXNzIEhlbGxvd29ybGRJbXBsIGltcGxlbWVudHMgSGVsbG93b3JsZCB7DQotDQotICAgIHB1YmxpYyBTdHJpbmcgc2F5SGVsbG8oU3RyaW5nIG5hbWUpIHsNCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSGVsbG93b3JsZEltcGwuc2F5SGVsbG8gIiArIG5hbWUpOw0KLSAgICAgICAgcmV0dXJuICJIZWxsbyAiICsgbmFtZTsNCi0gICAgfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFiMGM4Zi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2hlbGxvd29ybGQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08Y29udHJpYnV0aW9uIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQotICAgICAgICAgICAgICB4bWxuczpzYW1wbGU9Imh0dHA6Ly9zYW1wbGUiPg0KLSAgIDxkZXBsb3lhYmxlIGNvbXBvc2l0ZT0ic2FtcGxlOmhlbGxvd29ybGQiLz4NCi08L2NvbnRyaWJ1dGlvbj4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC9zcmMvdGVzdC9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvaGVsbG93b3JsZC9zcmMvdGVzdC9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U2NzllYy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9zYW1wbGUvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBzYW1wbGU7DQotDQotaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCi0NCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQotDQotcHVibGljIGNsYXNzIEhlbGxvd29ybGRUZXN0Q2FzZSB7DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RTYXlIZWxsbygpIHsNCi0gICAgICAgIEhlbGxvd29ybGRJbXBsIGhlbGxvd29ybGQgPSBuZXcgSGVsbG93b3JsZEltcGwoKTsNCi0gICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gUGV0cmEiLCBoZWxsb3dvcmxkLnNheUhlbGxvKCJQZXRyYSIpKTsNCi0gICAgfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLWpzZS9SRUFETUUgYi9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLWpzZS9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMDgzMzMuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2UvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotSlNFIFNhbXBsZSBMYXVuY2hlcg0KLT09PT09PT09PT09PT09PT09PT0NCi0NCi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIHNhbXBsZSBqYXZhIGxhdW5jaGVyIGZvciB0aGUNCi10dXNjYW55IHNhbXBsZSBjb250cmlidXRpb25zLiAgIA0KLQ0KLVRoZSBSRUFETUUgZmlsZSBpbiB0aGUgPGRpc3RyaWJ1dGlvbi11bnBhY2stZGlyPi9zYW1wbGVzIGRpcmVjdG9yeSBwcm92aWRlcyANCi1nZW5lcmFsIGluc3RydWN0aW9ucyBhYm91dCBidWlsZGluZyBhbmQgcnVubmluZyBzYW1wbGUgY29udHJpYnV0aW9ucyB1c2luZyB0aGUNCi10dXNjYW55IHNhbXBsZSBsYXVuY2hlcnMgKCB3aGVyZSBkaXN0cmlidXRpb24tdW5wYWNrLWRpciBpcyB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdQ0KLXVucGFja2VkIHRoZSB0dXNjYW55IGJpbmFyeSBkaXN0cmlidXRpb24gYXJjaGl2ZSkNCi0NCi1UbyB1c2UgdGhpcyBzYW1wbGUgSlNFIGxhdW5jaGVyIHdpdGggYW50IGV4Y3V0ZSB0aGUgY29tbWFuZA0KLQ0KLWFudCBydW4tPGNvbnRyaWJ1dGlvbm5hbWU+DQotDQotd2hlcmUgcnVuLTxjb250cmlidXRpb25uYW1lPiBpcyBvbmUgb2YgdGhlIHRhcmdldHMgaW4gdGhlIGJ1aWxkLnhtbCBmaWxlDQotDQotVG8gdXNlIHRoaXMgc2FtcGxlIGxhdW5jaGVyIHRvIHJ1biBhbGwgb2YgdGhlIGNvbnRyaWJ1dGlvbnMgYXMganVuaXQgdGVzdCBjYXNlcywNCi1leGVjdXRlIHRoZSBjb21tYW5kICJtdm4iIGluIHRoZSBsYXVuY2hlciBkaXJlY3RvcnkuDQotDQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2UvYnVpbGQueG1sIGIvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2UvYnVpbGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NGJhZDAwLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtanNlL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdCBuYW1lPSJsYXVuY2hlci1lbWJlZGRlZC1qc2UiIGRlZmF1bHQ9InJ1biI+IA0KLQk8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4iLz4NCi0gICAgPHByb3BlcnR5IG5hbWU9Imphci5uYW1lIiAgIHZhbHVlPSJzYW1wbGUtbGF1bmNoZXItZW1iZWRkZWQtanNlLmphciIgLz4NCi0gICAgPHByb3BlcnR5IG5hbWU9Im1haW4uY2xhc3MiIHZhbHVlPSJsYXVuY2hlci5TYW1wbGVKU0VMYXVuY2hlciIgLz4NCi0JPHByb3BlcnR5IG5hbWU9IndhaXQuYmVmb3JlLnN0b3BwaW5nIiB2YWx1ZT0iZG9udFdhaXRCZWZvcmVTdG9wcGluZyIgLz4NCi0JDQotCTxlY2hvPiR7dHVzY2FueS5ob21lfTwvZWNobz4NCi0NCi0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4gDQotICAgICAgPGRlbGV0ZSBxdWlldD0idHJ1ZSIgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+IA0KLSAgICAgICAgIDxmaWxlc2V0IGRpcj0idGFyZ2V0Ii8+IA0KLSAgICAgIDwvZGVsZXRlPiANCi0gICAgICA8bWtkaXIgZGlyPSJ0YXJnZXQvY2xhc3NlcyIvPiANCi0gICAgPC90YXJnZXQ+DQotCQ0KLSAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiPg0KLSAgICAgIDxqYXZhYyBzcmNkaXI9InNyYy9tYWluL2phdmEiIA0KLSAgICAgIAkgICAgIGRlc3RkaXI9InRhcmdldC9jbGFzc2VzIiANCi0gICAgICAJICAgICBkZWJ1Zz0ib24iDQotICAgICAgICAgICAgIHNvdXJjZT0iMS41Ig0KLSAgICAgICAgICAgICB0YXJnZXQ9IjEuNSINCi0gICAgICAJICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+IA0KLSAgICAgICAgIDxjbGFzc3BhdGg+DQotICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vbGliIj4NCi0gICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LWJhc2UtKi5qYXIiIC8+DQotICAgICAgICAgICAgPC9maWxlc2V0Pg0KLSAgICAgICAgIDwvY2xhc3NwYXRoPg0KLSAgICAgIDwvamF2YWM+IA0KLSAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke2phci5uYW1lfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPiANCi0gICAgICAgICA8bWFuaWZlc3Q+DQotICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0iJHttYWluLmNsYXNzfSIgLz4gDQotICAgICAgICAgPC9tYW5pZmVzdD4NCi0gICAgICA8L2phcj4gICAgCQ0KLSAgICA8L3RhcmdldD4NCi0JDQotCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJjb21waWxlIj4NCi0JCTxlY2hvPlBsZWFzZSB1c2UgJ2FudCBydW4tbmFtZS1vZi1zYW1wbGUtY29udHJpYnV0aW9uLXRvLXJ1bicgZm9yIGV4YW1wbGUsIHRyeSBvbmUgb2Y8L2VjaG8+DQotCSAgICA8ZWNobz4gICdhbnQgcnVuLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yJyA8L2VjaG8+DQotCSAgICA8ZWNobz4gICdhbnQgcnVuLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3InICA8L2VjaG8+DQotCQk8ZWNobz4gICdhbnQgcnVuLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXJtaS1jYWxjdWxhdG9yJyAgPC9lY2hvPg0KLQkgICAgPGVjaG8+ICAnYW50IHJ1bi1jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yJyAgPC9lY2hvPg0KLSAgICA8L3RhcmdldD4NCi0NCi0gICAgPHRhcmdldCBuYW1lPSJydW4tY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IiIGRlcGVuZHM9ImNvbXBpbGUiPg0KLSAgICAgICAgPGphdmEgY2xhc3NuYW1lPSIke21haW4uY2xhc3N9Ig0KLSAgICAgICAgICAgICAgZm9yaz0idHJ1ZSINCi0gICAgICAgIAkgIGZhaWxvbmVycm9yPSJ0cnVlIj4NCi0gICAgICAgICAgICA8Y2xhc3NwYXRoPiAgDQotICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0idGFyZ2V0LyR7amFyLm5hbWV9Ii8+DQotICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2ZlYXR1cmVzIj4NCi0gICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtbWFuaWZlc3QuamFyIiAvPg0KLSAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+DQotICAgICAgICAgICAgPC9jbGFzc3BhdGg+IA0KLSAgICAgICAgCTxhcmcgdmFsdWU9ImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yIi8+IA0KLSAgICAgICAgICAgIDxhcmcgdmFsdWU9IiR7d2FpdC5iZWZvcmUuc3RvcHBpbmd9Ii8+IA0KLSAgICAgICAgPC9qYXZhPiAgICAJDQotICAgIDwvdGFyZ2V0Pg0KLQkNCi0gICAgPHRhcmdldCBuYW1lPSJydW4tY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvciIgZGVwZW5kcz0iY29tcGlsZSI+DQotICAgICAgICA8amF2YSBjbGFzc25hbWU9ImxhdW5jaGVyLkpTRUxhdW5jaGVyQmluZGluZ1dTQ2FsY3VsYXRvciINCi0gICAgICAgICAgICAgIGZvcms9InRydWUiDQotICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+DQotICAgICAgICAgICAgPGNsYXNzcGF0aD4gIA0KLSAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249InRhcmdldC8ke2phci5uYW1lfSIvPg0KLSAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dHVzY2FueS5ob21lfS9mZWF0dXJlcyI+DQotICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktc2NhLW1hbmlmZXN0LmphciIgLz4NCi0gICAgICAgICAgICAgICAgPC9maWxlc2V0Pg0KLSAgICAgICAgICAgIDwvY2xhc3NwYXRoPiANCi0gICAgICAgIDwvamF2YT4gICAgIA0KLSAgICA8L3RhcmdldD4JDQotCQ0KLSAgICA8dGFyZ2V0IG5hbWU9InJ1bi1jb250cmlidXRpb24tYmluZGluZy1ybWktY2FsY3VsYXRvciIgZGVwZW5kcz0iY29tcGlsZSI+DQotICAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7bWFpbi5jbGFzc30iDQotICAgICAgICAgICAgICBmb3JrPSJ0cnVlIg0KLSAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPg0KLSAgICAgICAgICAgIDxjbGFzc3BhdGg+ICANCi0gICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJ0YXJnZXQvJHtqYXIubmFtZX0iLz4NCi0gICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vZmVhdHVyZXMiPg0KLSAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LXNjYS1tYW5pZmVzdC5qYXIiIC8+DQotICAgICAgICAgICAgICAgIDwvZmlsZXNldD4NCi0gICAgICAgICAgICA8L2NsYXNzcGF0aD4gDQotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iY29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3IiLz4gDQotICAgICAgICA8L2phdmE+ICAgICANCi0gICAgPC90YXJnZXQ+CQ0KLQkNCi0gICAgPHRhcmdldCBuYW1lPSJydW4tY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvciIgZGVwZW5kcz0iY29tcGlsZSI+DQotICAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7bWFpbi5jbGFzc30iDQotICAgICAgICAgICAgICBmb3JrPSJ0cnVlIg0KLSAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPg0KLSAgICAgICAgICAgIDxjbGFzc3BhdGg+ICANCi0gICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJ0YXJnZXQvJHtqYXIubmFtZX0iLz4NCi0gICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vZmVhdHVyZXMiPg0KLSAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LXNjYS1tYW5pZmVzdC5qYXIiIC8+DQotICAgICAgICAgICAgICAgIDwvZmlsZXNldD4NCi0gICAgICAgICAgICA8L2NsYXNzcGF0aD4gDQotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iY29udHJpYnV0aW9uLWltcGxlbWVudGF0b24tamF2YS1jYWxjdWxhdG9yIi8+IA0KLSAgICAgICAgPC9qYXZhPiAgICAgDQotICAgIDwvdGFyZ2V0PgkNCi0NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2UvcG9tLnhtbCBiL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtanNlL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmYmE0NDEuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2UvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gICAgKiANCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAgICAqIA0KLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0gICAgPGFydGlmYWN0SWQ+c2FtcGxlLWxhdW5jaGVyLWVtYmVkZGVkLWpzZTwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBMYXVuY2hlciBFbWJlZGRlZCBKU0U8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gIA0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+IA0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS13ZWJzZXJ2aWNlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWVqYXZhPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICAgICAgICAgIA0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCi0NCi0gICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgDQotICAgICAgIDwvcGx1Z2lucz4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckJpbmRpbmdXU0NhbGN1bGF0b3IuamF2YSBiL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtanNlL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvSlNFTGF1bmNoZXJCaW5kaW5nV1NDYWxjdWxhdG9yLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzNDJlNGEuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckJpbmRpbmdXU0NhbGN1bGF0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi0NCi1wYWNrYWdlIGxhdW5jaGVyOw0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5Ow0KLQ0KLWltcG9ydCBjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlOw0KLQ0KLS8qKg0KLSAqIFRoaXMgY2xpZW50IHByb2dyYW0gc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBlbWJlZGRlZCBTQ0EgcnVudGltZSwgbG9hZCBhIGNvbnRyaWJ1dGlvbiwNCi0gKiBzdGFydCBpdCBhbmQgbG9jYXRlIGFuZCBpbnZva2UgYW4gU0NBIGNvbXBvbmVudCANCi0gKi8NCi1wdWJsaWMgY2xhc3MgSlNFTGF1bmNoZXJCaW5kaW5nV1NDYWxjdWxhdG9yIHsNCi0gICAgDQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgSlNFTGF1bmNoZXJCaW5kaW5nV1NDYWxjdWxhdG9yIGxhdW5jaGVyID0gbmV3IEpTRUxhdW5jaGVyQmluZGluZ1dTQ2FsY3VsYXRvcigpOw0KLSAgICAgICAgbGF1bmNoZXIubGF1bmNoQmluZGluZ1dTQ2FsY3VsYXRvcigpOyAgICAgICAgIA0KLSAgICB9DQotICAgIA0KLSAgICAvKg0KLSAgICAgKiBVc2luZyB0aGUgVHVzY2FueSBOb2RlIEFQSSB0byBsb2FkIGEgY29udHJpYnV0aW9uLg0KLSAgICAgKiBVc2luZyB0aGUgVHVzY2FueSBOb2RlIEFQSSB0byBnZXQgYSBsb2NhbCBzZXJ2aWNlIHByb3h5DQotICAgICAqLw0KLSAgICBwdWJsaWMgdm9pZCBsYXVuY2hCaW5kaW5nV1NDYWxjdWxhdG9yKCl7DQotICAgICAgICBOb2RlIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUobmV3IENvbnRyaWJ1dGlvbigiYzEiLCAiLi4vY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci90YXJnZXQvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IuamFyIikpOw0KLSAgICAgICAgbm9kZS5zdGFydCgpOw0KLSAgICAgICAgDQotICAgICAgICBDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yID0gbm9kZS5nZXRTZXJ2aWNlKENhbGN1bGF0b3JTZXJ2aWNlLmNsYXNzLCAiQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQiKTsNCi0gICAgICAgIA0KLSAgICAgICAgLy8gVE9ETyAtIGNvdWxkIHVzZSBKVW5pdCBhc3NlcnRpb25zIGJ1dCBkb24ndCB3YW50IHRvIGhhdmUgdG8gaGFuZGxlIEpVbml0IGRlcGVuZGVuY3kgZnJvbSBBbnQgc2NyaXB0DQotICAgICAgICBkb3VibGUgcmVzdWx0ID0gY2FsY3VsYXRvci5hZGQoMywgMik7DQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgKyAyID0gIiArIHJlc3VsdCk7DQotICAgICAgICBpZiAocmVzdWx0ICE9IDUuMCl7DQotICAgICAgICAgICAgdGhyb3cgbmV3IFNhbXBsZUxhdW5jaGVyRXhjZXB0aW9uKCk7DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIG5vZGUuc3RvcCgpOw0KLSAgICB9DQotICAgIA0KLX0NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLWpzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1J1bnRpbWVJbnRlZ3JhdGlvbi5qYXZhIGIvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9SdW50aW1lSW50ZWdyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRmZjE2Yy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLWpzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1J1bnRpbWVJbnRlZ3JhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoNCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLSAqLw0KLQ0KLXBhY2thZ2UgbGF1bmNoZXI7DQotDQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7DQotDQotDQotLyoqDQotICogQmFzZSBKU0UgbGF1bmNoZXIgZnVuY3Rpb24NCi0gKi8NCi1wdWJsaWMgY2xhc3MgUnVudGltZUludGVncmF0aW9uIHsNCi0gICAgDQotICAgIA0KLSAgICBwdWJsaWMgTm9kZSBzdGFydE5vZGUoQ29udHJpYnV0aW9uLi4uIGNvbnRyaWJ1dGlvbnMpew0KLSAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKGNvbnRyaWJ1dGlvbnMpOw0KLSAgICAgICAgbm9kZS5zdGFydCgpOw0KLSAgICAgICAgcmV0dXJuIG5vZGU7DQotICAgIH0NCi0gICAgDQotICAgIHB1YmxpYyB2b2lkIHN0b3BOb2RlKE5vZGUgbm9kZSl7DQotICAgICAgICBub2RlLnN0b3AoKTsNCi0gICAgfQ0KLSAgICANCi19DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVKU0VMYXVuY2hlci5qYXZhIGIvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVKU0VMYXVuY2hlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YTRhNzNjLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtanNlL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvU2FtcGxlSlNFTGF1bmNoZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MCArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotDQotcGFja2FnZSBsYXVuY2hlcjsNCi0NCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsNCi1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQotDQotaW1wb3J0IGNhbGN1bGF0b3IuQ2FsY3VsYXRvclNlcnZpY2U7DQotDQotDQotLyoqDQotICogVGhpcyBjbGllbnQgcHJvZ3JhbSBzaG93cyBob3cgdG8gY3JlYXRlIGFuIGVtYmVkZGVkIFNDQSBydW50aW1lLCBsb2FkIGEgY29udHJpYnV0aW9uLA0KLSAqIHN0YXJ0IGl0IGFuZCwgaW4gc29tZSBjYXNlcywgbG9jYXRlIGFuZCBpbnZva2UgYW4gU0NBIGNvbXBvbmVudCANCi0gKi8NCi1wdWJsaWMgY2xhc3MgU2FtcGxlSlNFTGF1bmNoZXIgZXh0ZW5kcyBSdW50aW1lSW50ZWdyYXRpb24gew0KLSAgICANCi0gICAgcHJvdGVjdGVkIGJvb2xlYW4gd2FpdEJlZm9yZVN0b3BwaW5nID0gZmFsc2U7DQotICAgIA0KLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgICAgIA0KLSAgICAgICAgLy8gZ2V0IHRoZSBjb250cmlidXRpb24gbmFtZSBmcm9tIHRoZSAxc3QgYXJndW1lbnQgaXQgdGhlcmUgaXMgb25lDQotICAgICAgICBTdHJpbmcgY29udHJpYnV0aW9uID0gbnVsbDsNCi0gICAgICAgIA0KLSAgICAgICAgaWYgKGFyZ3MgPT0gbnVsbCB8fCBhcmdzLmxlbmd0aCAhPSAxKXsNCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBwcm92aWRlIHRoZSBuYW1lIG9mIHRoZSBzYW1wbGUgY29udHJpYnV0aW9uIHRvIHJ1biBhcyBhIHBhcmFtZXRlciIpOw0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBiaW5kaW5nLXNjYS1jYWxjdWxhdG9yIGJ5IGRlZmF1bHQiKTsNCi0gICAgICAgICAgICBjb250cmlidXRpb24gPSAiY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IiOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBjb250cmlidXRpb24gPSBhcmdzWzBdOw0KLSAgICAgICAgfSAgIA0KLSAgICAgICAgDQotICAgICAgICAvLyBhc3N1bWUgdGhhdCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IG1lYW5zIHRoYXQgdGhlIGNhbGxlciB3YW50cyB0bw0KLSAgICAgICAgLy8ga2VlcCB0aGUgU0NBIGFwcGxpY2F0aW9uIHJ1bm5pbmcgd2hpbGUgb3RoZXIgY2xpZW50cyB1c2UgdGhlIHNlcnZpY2VzDQotICAgICAgICBib29sZWFuIHdhaXRCZWZvcmVTdG9wcGluZyA9IGZhbHNlOw0KLSAgICAgICAgDQotICAgICAgICBpZiAoYXJncyAhPSBudWxsICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBhcmdzWzFdLmVxdWFscygid2FpdEJlZm9yZVN0b3BwaW5nIikpew0KLSAgICAgICAgICAgIHdhaXRCZWZvcmVTdG9wcGluZyA9IHRydWU7DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIFNhbXBsZUpTRUxhdW5jaGVyIGxhdW5jaGVyID0gbmV3IFNhbXBsZUpTRUxhdW5jaGVyKHdhaXRCZWZvcmVTdG9wcGluZyk7DQotICAgICAgICANCi0gICAgICAgIGlmIChjb250cmlidXRpb24uZXF1YWxzKCJjb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvciIpKXsNCi0gICAgICAgICAgICBsYXVuY2hlci5sYXVuY2hCaW5kaW5nU0NBQ2FsY3VsYXRvcigpOw0KLSAgICAgICAgfSBlbHNlIGlmIChjb250cmlidXRpb24uZXF1YWxzKCJjb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yIikpew0KLSAgICAgICAgICAgIGxhdW5jaGVyLmxhdW5jaEJpbmRpbmdXU0NhbGN1bGF0b3IoKTsNCi0gICAgICAgIH0gZWxzZSBpZiAoY29udHJpYnV0aW9uLmVxdWFscygiY29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3IiKSl7DQotICAgICAgICAgICAgbGF1bmNoZXIubGF1bmNoQmluZGluZ1JNSUNhbGN1bGF0b3IoKTsgICAgDQotICAgICAgICB9IGVsc2UgaWYgKGNvbnRyaWJ1dGlvbi5lcXVhbHMoImNvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IiKSl7DQotICAgICAgICAgICAgbGF1bmNoZXIubGF1bmNoSW1wbGVtZW50YXRpb25KYXZhQ2FsY3VsYXRvcigpOyAgICAgICAgICAgICAgDQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2FtcGxlIGNvbnRyaWJ1dGlvbiAiICsgY29udHJpYnV0aW9uICsgIm5vdCBmb3VuZCIpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgICAgICAgIA0KLSAgICB9DQotICAgIA0KLSAgICBwdWJsaWMgU2FtcGxlSlNFTGF1bmNoZXIoYm9vbGVhbiB3YWl0QmVmb3JlU3RvcHBpbmcpew0KLSAgICAgICAgdGhpcy53YWl0QmVmb3JlU3RvcHBpbmcgPSB3YWl0QmVmb3JlU3RvcHBpbmc7DQotICAgIH0NCi0gICAgDQotICAgIC8qKg0KLSAgICAgKiBXYWl0IGZvciB1c2VyIGlucHV0LiBBbGxvd3MgdXMgdG8ga2VlcCB0aGUgVHVzY2FueSBydW50aW1lIGFuZCB0aGUgU0NBIGFwcGxpY2F0aW9uDQotICAgICAqIHJ1bm5pbmcgd2hpbGUgb3RoZXIgY2xpZW50cyBhY2Nlc3MgdGhlIHNlcnZpY2VzIHByb3ZpZGVkIA0KLSAgICAgKi8NCi0gICAgcHVibGljIHZvaWQgd2FpdEJlZm9yZVN0b3BwaW5nKCl7DQotICAgICAgICBpZiAod2FpdEJlZm9yZVN0b3BwaW5nKXsNCi0gICAgICAgICAgICB0cnkgew0KLSAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlByZXNzIGtleSB0byBjb250aW51ZSIpOw0KLSAgICAgICAgICAgICAgICBpbnQgaW5wdXQgPSBTeXN0ZW0uaW4ucmVhZCgpOw0KLSAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgew0KLSAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nDQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgICAgIA0KLSAgICAvKioNCi0gICAgICogVGhlIGNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yIGNvbnRyaWJ1dGlvbiBpbmNsdWRlcyBhIGNsaWVudCBjb21wb25lbnQgDQotICAgICAqIHRoYXQgY2FsbHMgdGhlIENhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50IGZyb20gYW4gb3BlcmF0aW9uIG1hcmtlZCBieSBASW5pdC4gDQotICAgICAqLw0KLSAgICBwdWJsaWMgdm9pZCBsYXVuY2hCaW5kaW5nU0NBQ2FsY3VsYXRvcigpew0KLSAgICAgICAgTm9kZSBub2RlID0gc3RhcnROb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3RhcmdldC9zYW1wbGUtY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IuamFyIikpOw0KLSAgICAgICAgd2FpdEJlZm9yZVN0b3BwaW5nKCk7DQotICAgICAgICBzdG9wTm9kZShub2RlKTsNCi0gICAgfSAgICANCi0gICAgDQotICAgIC8qDQotICAgICAqIFVzaW5nIGEgVHVzY2FueSBzcGVjaWZpYyBtZWNoYW5pc20gZm9yIGdldHRpbmcgYXQgbG9jYWwgc2VydmljZSBwcm94aWVzDQotICAgICAqLw0KLSAgICBwdWJsaWMgdm9pZCBsYXVuY2hCaW5kaW5nV1NDYWxjdWxhdG9yKCl7DQotICAgICAgICBOb2RlIG5vZGUgPSBzdGFydE5vZGUobmV3IENvbnRyaWJ1dGlvbigiYzEiLCAiLi4vY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci90YXJnZXQvY2xhc3NlcyIpKTsNCi0gICAgICAgIA0KLSAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvciA9IG5vZGUuZ2V0U2VydmljZShDYWxjdWxhdG9yU2VydmljZS5jbGFzcywgIkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50Iik7DQotICAgICAgICAvLyBUT0RPIC0gY291bGQgdXNlIEpVbml0IGFzc2VydGlvbnMgYnV0IGRvbid0IHdhbnQgdG8gaGF2ZSB0byBoYW5kbGUgSlVuaXQgZGVwZW5kZW5jeSBmcm9tIEFudCBzY3JpcHQNCi0gICAgICAgIGRvdWJsZSByZXN1bHQgPSBjYWxjdWxhdG9yLmFkZCgzLCAyKTsNCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyArIDIgPSAiICsgcmVzdWx0KTsNCi0gICAgICAgIGlmIChyZXN1bHQgIT0gNS4wKXsNCi0gICAgICAgICAgICB0aHJvdyBuZXcgU2FtcGxlTGF1bmNoZXJFeGNlcHRpb24oKTsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgd2FpdEJlZm9yZVN0b3BwaW5nKCk7DQotICAgICAgICBzdG9wTm9kZShub2RlKTsNCi0gICAgfQ0KLSAgICANCi0gICAgLyoNCi0gICAgICogVXNpbmcgYSBUdXNjYW55IHNwZWNpZmljIG1lY2hhbmlzbSBmb3IgZ2V0dGluZyBhdCBsb2NhbCBzZXJ2aWNlIHByb3hpZXMNCi0gICAgICovDQotICAgIHB1YmxpYyB2b2lkIGxhdW5jaEJpbmRpbmdSTUlDYWxjdWxhdG9yKCl7DQotICAgICAgICBOb2RlIG5vZGUxID0gc3RhcnROb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2UvdGFyZ2V0L2NsYXNzZXMiKSk7DQotICAgICAgICBOb2RlIG5vZGUyID0gc3RhcnROb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS90YXJnZXQvY2xhc3NlcyIpKTsNCi0gICAgICAgIA0KLSAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvciA9IG5vZGUyLmdldFNlcnZpY2UoQ2FsY3VsYXRvclNlcnZpY2UuY2xhc3MsICJDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCIpOw0KLSAgICAgICAgLy8gVE9ETyAtIGNvdWxkIHVzZSBKVW5pdCBhc3NlcnRpb25zIGJ1dCBkb24ndCB3YW50IHRvIGhhdmUgdG8gaGFuZGxlIEpVbml0IGRlcGVuZGVuY3kgZnJvbSBBbnQgc2NyaXB0DQotICAgICAgICBkb3VibGUgcmVzdWx0ID0gY2FsY3VsYXRvci5hZGQoMywgMik7DQotICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgKyAyID0gIiArIHJlc3VsdCk7DQotICAgICAgICBpZiAocmVzdWx0ICE9IDUuMCl7DQotICAgICAgICAgICAgdGhyb3cgbmV3IFNhbXBsZUxhdW5jaGVyRXhjZXB0aW9uKCk7DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIHdhaXRCZWZvcmVTdG9wcGluZygpOw0KLSAgICAgICAgc3RvcE5vZGUobm9kZTIpOw0KLSAgICAgICAgc3RvcE5vZGUobm9kZTEpOw0KLSAgICB9ICAgDQotICAgIA0KLSAgICAvKioNCi0gICAgICogVGhlIGNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yIGNvbnRyaWJ1dGlvbiBpbmNsdWRlcyBhIGNsaWVudCBjb21wb25lbnQgDQotICAgICAqIHRoYXQgY2FsbHMgdGhlIENhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50IGZyb20gYW4gb3BlcmF0aW9uIG1hcmtlZCBieSBASW5pdC4gDQotICAgICAqLw0KLSAgICBwdWJsaWMgdm9pZCBsYXVuY2hJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yKCl7DQotICAgICAgICBOb2RlIG5vZGUgPSBzdGFydE5vZGUobmV3IENvbnRyaWJ1dGlvbigiYzEiLCAiLi4vY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci90YXJnZXQvY2xhc3NlcyIpKTsNCi0gICAgICAgIHdhaXRCZWZvcmVTdG9wcGluZygpOw0KLSAgICAgICAgc3RvcE5vZGUobm9kZSk7DQotICAgIH0gICAgICANCi0gICAgDQotfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtanNlL3NyYy90ZXN0L2phdmEvbGF1bmNoZXIvTGF1bmNoZXJUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL3Rlc3QvamF2YS9sYXVuY2hlci9MYXVuY2hlclRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzMTU5ZGMuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL3Rlc3QvamF2YS9sYXVuY2hlci9MYXVuY2hlclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBsYXVuY2hlcjsNCi0NCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQotDQotLyoqDQotICogVGVzdCBzYW1wbGUgY29udHJpYnV0aW9ucy4NCi0gKi8NCi1wdWJsaWMgY2xhc3MgTGF1bmNoZXJUZXN0Q2FzZSB7DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RDb250cmlidXRpb25CaW5kaW5nU0NBQ2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgU2FtcGxlSlNFTGF1bmNoZXIubWFpbihuZXcgU3RyaW5nW10geyJjb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvciJ9KTsNCi0gICAgfQ0KLSAgICANCi0vKiByZXBsYWNlZCBieSBjYWxsIHRvIHNwZWNpZmljIGxhdW5jaGVyDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RDb250cmlidXRpb25CaW5kaW5nV1NDYWxjdWxhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICBTYW1wbGVKU0VMYXVuY2hlci5tYWluKG5ldyBTdHJpbmdbXSB7ImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IifSk7DQotICAgIH0gDQotKi8gICAgDQotICAgIA0KLSAgICBAVGVzdA0KLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q29udHJpYnV0aW9uQmluZGluZ1dTQ2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgSlNFTGF1bmNoZXJCaW5kaW5nV1NDYWxjdWxhdG9yLm1haW4obnVsbCk7DQotICAgIH0gICAgIA0KLSAgICANCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdENvbnRyaWJ1dGlvbkJpbmRpbmdSTUlDYWxjdWxhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQotICAgICAgICBTYW1wbGVKU0VMYXVuY2hlci5tYWluKG5ldyBTdHJpbmdbXSB7ImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXJtaS1jYWxjdWxhdG9yIn0pOw0KLSAgICB9IA0KLSAgICANCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdENvbnRyaWJ1dGlvbkltcGxlbWVudGF0aW9uSmF2YUNhbGN1bGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgICAgIFNhbXBsZUpTRUxhdW5jaGVyLm1haW4obmV3IFN0cmluZ1tdIHsiY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvciJ9KTsNCi0gICAgfSAgICAgDQotfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS1iYXNlL3BvbS54bWwgYi9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2ktYmFzZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTUxMjZmLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS1iYXNlL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICAgICogCi0gICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICAgICogCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1sYXVuY2hlci1lbWJlZGRlZC1vc2dpLWJhc2U8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBMYXVuY2hlciBFbWJlZGRlZCBPU0dpIHVzaW5nIGJhc2UgamFyPC9uYW1lPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ub2RlcDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtY2xpPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1jbGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4xLjI8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPm9zZ2k8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjUuMC12MjAwOTA1MjA8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5vc2dpPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZXM8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4zLjIuMC12MjAwOTA1MjAtMTgwMDwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICAgIDxidWlsZD4KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KLQotICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgCi0gICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2ktYmFzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZUpTRUxhdW5jaGVyLmphdmEgYi9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2ktYmFzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZUpTRUxhdW5jaGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzNTQ4OGEuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpLWJhc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVKU0VMYXVuY2hlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0gKi8KLQotcGFja2FnZSBsYXVuY2hlcjsKLQotaW1wb3J0IGphdmEubmV0LlVSSTsKLQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247Ci1pbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7Ci1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuTm9TdWNoRG9tYWluRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLk5vU3VjaFNlcnZpY2VFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuY2xpZW50LlNDQUNsaWVudEZhY3Rvcnk7Ci0KLWltcG9ydCBjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlOwotCi0KLS8qKgotICogVGhpcyBjbGllbnQgcHJvZ3JhbSBzaG93cyBob3cgdG8gY3JlYXRlIGFuIGVtYmVkZGVkIFNDQSBydW50aW1lLCBzdGFydCBpdCwKLSAqIGFuZCBsb2NhdGUgYW5kIGludm9rZSBhIFNDQSBjb21wb25lbnQgCi0gKi8KLXB1YmxpYyBjbGFzcyBTYW1wbGVKU0VMYXVuY2hlciBleHRlbmRzIFJ1bnRpbWVJbnRlZ3JhdGlvbiB7Ci0gICAgCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIFNhbXBsZUpTRUxhdW5jaGVyIGxhdW5jaGVyID0gbmV3IFNhbXBsZUpTRUxhdW5jaGVyKCk7Ci0gICAgICAgIAotICAgICAgICBTdHJpbmcgY29udHJpYnV0aW9uID0gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIGlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggIT0gMSl7Ci0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlBsZWFzZSBwcm92aWRlIHRoZSBuYW1lIG9mIHRoZSBzYW1wbGUgY29udHJpYnV0aW9uIHRvIHJ1biBhcyBhIHBhcmFtZXRlciIpOwotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSdW5uaW5nIGJpbmRpbmctc2NhLWNhbGN1bGF0b3IgYnkgZGVmYXVsdCIpOwotICAgICAgICAgICAgY29udHJpYnV0aW9uID0gImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yIjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9IGFyZ3NbMF07Ci0gICAgICAgIH0gICAKLSAgICAgICAgCi0gICAgICAgIGlmIChjb250cmlidXRpb24uZXF1YWxzKCJjb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvciIpKXsKLSAgICAgICAgICAgIGxhdW5jaGVyLmxhdW5jaEJpbmRpbmdTQ0FDYWxjdWxhdG9yKCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY29udHJpYnV0aW9uLmVxdWFscygiY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvciIpKXsKLSAgICAgICAgICAgIGxhdW5jaGVyLmxhdW5jaEJpbmRpbmdXU0NhbGN1bGF0b3IoKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU2FtcGxlIGNvbnRyaWJ1dGlvbiAiICsgY29udHJpYnV0aW9uICsgIm5vdCBmb3VuZCIpOwotICAgICAgICB9Ci0KLSAgICB9Ci0gICAgICAgCi0gICAgLyoqCi0gICAgICogVGhlIGNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yIGNvbnRyaWJ1dGlvbiBpbmNsdWRlcyBhIGNsaWVudCBjb21wb25lbnQgCi0gICAgICogdGhhdCBjYWxscyB0aGUgQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQgZnJvbSBhbiBvcGVyYXRpb24gbWFya2VkIGJ5IEBJbml0LiAKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBsYXVuY2hCaW5kaW5nU0NBQ2FsY3VsYXRvcigpewotICAgICAgICBOb2RlIG5vZGUgPSBzdGFydE5vZGUobmV3IENvbnRyaWJ1dGlvbigiYzEiLCAiLi4vYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3IvdGFyZ2V0L3NhbXBsZS1jb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvci5qYXIiKSk7Ci0gICAgICAgIAotICAgICAgICBzdG9wTm9kZShub2RlKTsKLSAgICB9ICAgIAotICAgIAotICAgIC8qCi0gICAgICogVXNpbmcgYSBUdXNjYW55IHNwZWNpZmljIG1lY2hhbmlzbSBmb3IgZ2V0dGluZyBhdCBsb2NhbCBzZXJ2aWNlIHByb3hpZXMKLSAgICAgKi8KLSAgICBwdWJsaWMgdm9pZCBsYXVuY2hCaW5kaW5nV1NDYWxjdWxhdG9yKCkgdGhyb3dzIE5vU3VjaERvbWFpbkV4Y2VwdGlvbiwgTm9TdWNoU2VydmljZUV4Y2VwdGlvbnsKLSAgICAgICAgTm9kZSBub2RlID0gc3RhcnROb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IvdGFyZ2V0L3NhbXBsZS1jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yLmphciIpKTsKLSAgICAgICAgCi0gICAgICAgIENhbGN1bGF0b3JTZXJ2aWNlIGNhbGN1bGF0b3IgPSBub2RlLmdldFNlcnZpY2UoQ2FsY3VsYXRvclNlcnZpY2UuY2xhc3MsICJDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCIpOwotICAgICAgICAgICAgICAgCi0gICAgICAgIGRvdWJsZSByZXN1bHQgPSBjYWxjdWxhdG9yLmFkZCgzLCAyKTsKLSAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzICsgMiA9ICIgKyByZXN1bHQpOwotICAgICAgICBpZiAocmVzdWx0ICE9IDUuMCl7Ci0gICAgICAgICAgICB0aHJvdyBuZXcgU2FtcGxlTGF1bmNoZXJFeGNlcHRpb24oKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc3RvcE5vZGUobm9kZSk7Ci0gICAgfQotICAgIAotfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL1JFQURNRSBiL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZDI3N2EuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLU9TR0kgU2FtcGxlIExhdW5jaGVyDQotPT09PT09PT09PT09PT09PT09PQ0KLQ0KLVRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGEgc2FtcGxlIGxhdW5jaGVyIGZvciB0aGUgcnVubmluZyB0aGUNCi10dXNjYW55IHNhbXBsZSBjb250cmlidXRpb25zIGluIGFuIE9TR0kgZW52aXJvbm1lbnQuDQotDQotVGhlIFJFQURNRSBmaWxlIGluIHRoZSA8ZGlzdHJpYnV0aW9uLXVucGFjay1kaXI+L3NhbXBsZXMgZGlyZWN0b3J5IHByb3ZpZGVzIA0KLWdlbmVyYWwgaW5zdHJ1Y3Rpb25zIGFib3V0IGJ1aWxkaW5nIGFuZCBydW5uaW5nIHNhbXBsZSBjb250cmlidXRpb25zIHVzaW5nIHRoZQ0KLXR1c2Nhbnkgc2FtcGxlIGxhdW5jaGVycy4gKCB3aGVyZQ0KLWRpc3RyaWJ1dGlvbi11bnBhY2stZGlyIGlzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHVucGFja2VkIHRoZSB0dXNjYW55DQotYmluYXJ5IGRpc3RyaWJ1dGlvbiBhcmNoaXZlKQ0KLQ0KLVRvIHVzZSB0aGlzIHNhbXBsZSBPU0dJIGxhdW5jaGVyIHdpdGggYW50IGV4Y3V0ZSB0aGUgY29tbWFuZA0KLQ0KLWFudCBydW4tPGNvbnRyaWJ1dGlvbm5hbWU+DQotDQotd2hlcmUgcnVuLTxjb250cmlidXRpb25uYW1lPiBpcyBvbmUgb2YgdGhlIHRhcmdldHMgaW4gdGhlIGJ1aWxkLnhtbCBmaWxlDQotDQotVG8gdXNlIHRoaXMgc2FtcGxlIGxhdW5jaGVyIHRvIHJ1biBhbGwgb2YgdGhlIGNvbnRyaWJ1dGlvbnMgYXMganVuaXQgdGVzdCBjYXNlcywNCi1leGVjdXRlIHRoZSBjb21tYW5kICJtdm4iIGluIHRoZSBsYXVuY2hlciBkaXJlY3RvcnkuDQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL2J1aWxkLnhtbCBiL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwOGQxOWUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL2J1aWxkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0IG5hbWU9ImxhdW5jaGVyLWVtYmVkZGVkLW9zZ2kiIGRlZmF1bHQ9InJ1biI+IA0KLQk8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4iLz4NCi0gICAgPHByb3BlcnR5IG5hbWU9Imphci5uYW1lIiAgIHZhbHVlPSJzYW1wbGUtbGF1bmNoZXItZW1iZWRkZWQtb3NnaS5qYXIiIC8+DQotICAgIDxwcm9wZXJ0eSBuYW1lPSJtYWluLmNsYXNzIiB2YWx1ZT0ibGF1bmNoZXIuU2FtcGxlSlNFTGF1bmNoZXIiIC8+DQotCQ0KLQk8ZWNobz4ke3R1c2NhbnkuaG9tZX08L2VjaG8+DQotDQotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+IA0KLSAgICAgIDxkZWxldGUgcXVpZXQ9InRydWUiIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPiANCi0gICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPiANCi0gICAgICA8L2RlbGV0ZT4gDQotICAgICAgPG1rZGlyIGRpcj0idGFyZ2V0L2NsYXNzZXMiLz4gDQotICAgIDwvdGFyZ2V0Pg0KLQkNCi0gICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0Ij4NCi0gICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIiANCi0gICAgICAJICAgICBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIgDQotICAgICAgCSAgICAgZGVidWc9Im9uIg0KLSAgICAgICAgICAgICBzb3VyY2U9IjEuNSINCi0gICAgICAgICAgICAgdGFyZ2V0PSIxLjUiDQotICAgICAgCSAgICAgZmFpbG9uZXJyb3I9InRydWUiPiANCi0gICAgICAgICA8Y2xhc3NwYXRoPg0KLSAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2xpYiI+DQotICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1iYXNlLSouamFyIiAvPg0KLSAgICAgICAgICAgIDwvZmlsZXNldD4NCi0gICAgICAgICA8L2NsYXNzcGF0aD4NCi0gICAgICA8L2phdmFjPiANCi0gICAgICA8amFyIGRlc3RmaWxlPSJ0YXJnZXQvJHtqYXIubmFtZX0iIGJhc2VkaXI9InRhcmdldC9jbGFzc2VzIj4gDQotICAgICAgICAgPG1hbmlmZXN0Pg0KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9IiR7bWFpbi5jbGFzc30iIC8+IA0KLSAgICAgICAgIDwvbWFuaWZlc3Q+DQotICAgICAgPC9qYXI+ICAgIAkNCi0gICAgPC90YXJnZXQ+DQotCQ0KLQk8dGFyZ2V0IG5hbWU9InJ1biIgZGVwZW5kcz0iY29tcGlsZSI+DQotCQk8ZWNobz5QbGVhc2UgdXNlICdhbnQgcnVuLW5hbWUtb2Ytc2FtcGxlLWNvbnRyaWJ1dGlvbi10by1ydW4nIGZvciBleGFtcGxlLCB0cnkgb25lIG9mPC9lY2hvPg0KLQkJPGVjaG8+ICAnYW50IHJ1bi1jb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvcicgPC9lY2hvPg0KLSAgICA8L3RhcmdldD4NCi0JDQotICAgIDx0YXJnZXQgbmFtZT0icnVuLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yIiBkZXBlbmRzPSJjb21waWxlIj4NCi0gICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iJHttYWluLmNsYXNzfSINCi0gICAgICAgICAgICAgIGZvcms9InRydWUiDQotICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+DQotICAgICAgICAgICAgPGNsYXNzcGF0aD4gIA0KLSAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249InRhcmdldC8ke2phci5uYW1lfSIvPg0KLSAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dHVzY2FueS5ob21lfS9tb2R1bGVzIj4NCi0gICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1ub2RlLWFwaS0qLmphciIgLz4NCi0gICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtYXBpLSouamFyIiAvPg0KLSAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veC0qLmphciIgLz4NCi0gICAgICAgICAgICAgICAgPC9maWxlc2V0PiANCi0gICAgICAgICAgICA8L2NsYXNzcGF0aD4gDQotICAgICAgICAgICAgPGFyZyB2YWx1ZT0iY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IiLz4gDQotICAgICAgICA8L2phdmE+ICAgICANCi0gICAgCTxlY2hvPiAgYW5kIGFudCBydW4gPC9lY2hvPg0KLSAgICA8L3RhcmdldD4JDQotDQotCTwhLS0gVE9ETyAtIHRoaXMgcnVucyBmcm9tIG12biBidXQgbm90IGZyb20gYW50IHNvIHRoZXJlIGlzIHNvbWUgaXNzdWUgd2l0aCB0aGUgDQotCSAgICAgICAgICAgIHdheSB0aGUgZW52aXJvbm1lbnQgZ2V0cyBzZXQgdXANCi0gICAgPHRhcmdldCBuYW1lPSJydW4tY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvciIgZGVwZW5kcz0iY29tcGlsZSI+DQotICAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7bWFpbi5jbGFzc30iDQotICAgICAgICAgICAgICBmb3JrPSJ0cnVlIg0KLSAgICAgICAgCSAgZmFpbG9uZXJyb3I9InRydWUiPg0KLSAgICAgICAgICAgIDxjbGFzc3BhdGg+ICANCi0gICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJ0YXJnZXQvJHtqYXIubmFtZX0iLz4NCi0gICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vbW9kdWxlcyI+DQotICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktbm9kZS1hcGktKi5qYXIiIC8+DQotICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktc2NhLWFwaS0qLmphciIgLz4NCi0gICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1ub2RlLWxhdW5jaGVyLWVxdWlub3gtKi5qYXIiIC8+DQotICAgICAgICAgICAgICAgIDwvZmlsZXNldD4gDQotICAgICAgICAgICAgPC9jbGFzc3BhdGg+IA0KLSAgICAgICAgCTxhcmcgdmFsdWU9ImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IiLz4gDQotICAgICAgICA8L2phdmE+ICAgIAkNCi0gICAgPC90YXJnZXQ+DQotCS0tPg0KLQ0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2kvcG9tLnhtbCBiL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmQ2ZGY2Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtbGF1bmNoZXItZW1iZWRkZWQtb3NnaTwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBMYXVuY2hlciBFbWJlZGRlZCBPU0dpPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS13ZWJzZXJ2aWNlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWVqYXZhPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+ICAgDQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotDQotICAgICAgIDxwbHVnaW5zPg0KLSAgICAgICAgIA0KLSAgICAgICA8L3BsdWdpbnM+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZUpTRUxhdW5jaGVyLmphdmEgYi9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2kvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVKU0VMYXVuY2hlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTA2Zjk4Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZUpTRUxhdW5jaGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotDQotcGFja2FnZSBsYXVuY2hlcjsNCi0NCi1pbXBvcnQgamF2YS5uZXQuVVJJOw0KLQ0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsNCi1pbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuTm9TdWNoRG9tYWluRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5Ob1N1Y2hTZXJ2aWNlRXhjZXB0aW9uOw0KLWltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5jbGllbnQuU0NBQ2xpZW50RmFjdG9yeTsNCi0NCi1pbXBvcnQgY2FsY3VsYXRvci5DYWxjdWxhdG9yU2VydmljZTsNCi0NCi0NCi0vKioNCi0gKiBUaGlzIGNsaWVudCBwcm9ncmFtIHNob3dzIGhvdyB0byBjcmVhdGUgYW4gZW1iZWRkZWQgU0NBIHJ1bnRpbWUsIHN0YXJ0IGl0LA0KLSAqIGFuZCBsb2NhdGUgYW5kIGludm9rZSBhIFNDQSBjb21wb25lbnQgDQotICovDQotcHVibGljIGNsYXNzIFNhbXBsZUpTRUxhdW5jaGVyIGV4dGVuZHMgUnVudGltZUludGVncmF0aW9uIHsNCi0gICAgDQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgU2FtcGxlSlNFTGF1bmNoZXIgbGF1bmNoZXIgPSBuZXcgU2FtcGxlSlNFTGF1bmNoZXIoKTsNCi0gICAgICAgIA0KLSAgICAgICAgU3RyaW5nIGNvbnRyaWJ1dGlvbiA9IG51bGw7DQotICAgICAgICANCi0gICAgICAgIGlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggIT0gMSl7DQotICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgcHJvdmlkZSB0aGUgbmFtZSBvZiB0aGUgc2FtcGxlIGNvbnRyaWJ1dGlvbiB0byBydW4gYXMgYSBwYXJhbWV0ZXIiKTsNCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlJ1bm5pbmcgYmluZGluZy1zY2EtY2FsY3VsYXRvciBieSBkZWZhdWx0Iik7DQotICAgICAgICAgICAgY29udHJpYnV0aW9uID0gImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yIjsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgY29udHJpYnV0aW9uID0gYXJnc1swXTsNCi0gICAgICAgIH0gICANCi0gICAgICAgIA0KLSAgICAgICAgaWYgKGNvbnRyaWJ1dGlvbi5lcXVhbHMoImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yIikpew0KLSAgICAgICAgICAgIGxhdW5jaGVyLmxhdW5jaEJpbmRpbmdTQ0FDYWxjdWxhdG9yKCk7DQotICAgICAgICB9IGVsc2UgaWYgKGNvbnRyaWJ1dGlvbi5lcXVhbHMoImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IiKSl7DQotICAgICAgICAgICAgbGF1bmNoZXIubGF1bmNoQmluZGluZ1dTQ2FsY3VsYXRvcigpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNhbXBsZSBjb250cmlidXRpb24gIiArIGNvbnRyaWJ1dGlvbiArICJub3QgZm91bmQiKTsNCi0gICAgICAgIH0NCi0NCi0gICAgfQ0KLSAgICAgICANCi0gICAgLyoqDQotICAgICAqIFRoZSBjb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvciBjb250cmlidXRpb24gaW5jbHVkZXMgYSBjbGllbnQgY29tcG9uZW50IA0KLSAgICAgKiB0aGF0IGNhbGxzIHRoZSBDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCBmcm9tIGFuIG9wZXJhdGlvbiBtYXJrZWQgYnkgQEluaXQuIA0KLSAgICAgKi8NCi0gICAgcHVibGljIHZvaWQgbGF1bmNoQmluZGluZ1NDQUNhbGN1bGF0b3IoKXsNCi0gICAgICAgIE5vZGUgbm9kZSA9IHN0YXJ0Tm9kZShuZXcgQ29udHJpYnV0aW9uKCJjMSIsICIuLi9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci90YXJnZXQvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yLmphciIpKTsNCi0gICAgICAgIA0KLSAgICAgICAgc3RvcE5vZGUobm9kZSk7DQotICAgIH0gICAgDQotICAgIA0KLSAgICAvKg0KLSAgICAgKiBVc2luZyBhIFR1c2Nhbnkgc3BlY2lmaWMgbWVjaGFuaXNtIGZvciBnZXR0aW5nIGF0IGxvY2FsIHNlcnZpY2UgcHJveGllcw0KLSAgICAgKi8NCi0gICAgcHVibGljIHZvaWQgbGF1bmNoQmluZGluZ1dTQ2FsY3VsYXRvcigpIHRocm93cyBOb1N1Y2hEb21haW5FeGNlcHRpb24sIE5vU3VjaFNlcnZpY2VFeGNlcHRpb257DQotICAgICAgICBOb2RlIG5vZGUgPSBzdGFydE5vZGUobmV3IENvbnRyaWJ1dGlvbigiYzEiLCAiLi4vY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci90YXJnZXQvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IuamFyIikpOw0KLSAgICAgICAgDQotICAgICAgICBDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yID0gbm9kZS5nZXRTZXJ2aWNlKENhbGN1bGF0b3JTZXJ2aWNlLmNsYXNzLCAiQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQiKTsNCi0gICAgICAgICAgICAgICANCi0gICAgICAgIGRvdWJsZSByZXN1bHQgPSBjYWxjdWxhdG9yLmFkZCgzLCAyKTsNCi0gICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyArIDIgPSAiICsgcmVzdWx0KTsNCi0gICAgICAgIGlmIChyZXN1bHQgIT0gNS4wKXsNCi0gICAgICAgICAgICB0aHJvdyBuZXcgU2FtcGxlTGF1bmNoZXJFeGNlcHRpb24oKTsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgc3RvcE5vZGUobm9kZSk7DQotICAgIH0NCi0gICAgDQotfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9zcmMvdGVzdC9qYXZhL2xhdW5jaGVyL0xhdW5jaGVyVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9zcmMvdGVzdC9qYXZhL2xhdW5jaGVyL0xhdW5jaGVyVGVzdENhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I3MmVjNy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2kvc3JjL3Rlc3QvamF2YS9sYXVuY2hlci9MYXVuY2hlclRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotcGFja2FnZSBsYXVuY2hlcjsNCi0NCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQotDQotDQotDQotLyoqDQotICogVGVzdCB0aGUgQ2FsY3VsYXRvciBjb21wb3NpdGlvbi4NCi0gKi8NCi1wdWJsaWMgY2xhc3MgTGF1bmNoZXJUZXN0Q2FzZSB7DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RDb250cmlidXRpb25CaW5kaW5nU0NBQ2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgU2FtcGxlSlNFTGF1bmNoZXIubWFpbihuZXcgU3RyaW5nW10geyJjb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvciJ9KTsNCi0gICAgfQ0KLSAgICANCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdENvbnRyaWJ1dGlvbkJpbmRpbmdXU0NhbGN1bGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCi0gICAgICAgIFNhbXBsZUpTRUxhdW5jaGVyLm1haW4obmV3IFN0cmluZ1tdIHsiY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvciJ9KTsNCi0gICAgfSAgICANCi19DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9SRUFETUUgYi9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkZjgyNC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLVNhbXBsZSBUdXNjYW55IFNoZWxsCi09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIHNhbXBsZSBzaGVsbCBwcm9ncmFtIHN1cHBvcnRpbmcgc2ltcGxlIGNvbW1hbmRzIHRvCi1zdGFydCBhbmQgc3RvcCBTQ0EgY29tcG9zaXRlcy4KLQotVG8gYnVpbGQgdGhlIHNhbXBsZSBzaGVsbCBkbyB0aGlzOgotbXZuIGluc3RhbGwKLQotVG8gcnVuIGl0OgotLi9zY2EKLQotYXQgdGhlIHByb21wdDoKLXN0YXJ0IG15Tm9kZSBteVNhbXBsZUNvbnRyaWIgLi4vY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci90YXJnZXQvY2xhc3NlcwotCi1vcjoKLXN0YXJ0IG15Tm9kZSBteVNhbXBsZUNvbnRyaWIgaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35qc2RlbGZpbm8vdHVzY2FueS9qYXZhL3Rlc3Qvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IuamFyCi0KLWFsc28gdHJ5Ogotc3RhdHVzCi1zdG9wIG15Tm9kZQotYnllCi0KLVN0YXJ0aW5nIGFuZCBzdG9wcGluZyBjb21wb3NpdGVzIGlzIHByZXR0eSBmYXN0LiBUbyBzZWUgdGhhdCwgdHJ5IHRoZSBmb2xsb3dpbmcKLXR3byBzY3JpcHRzLCB3aGljaCBzdGFydC9zdG9wIGEgc2FtcGxlIGNvbXBvc2l0ZSAxMCB0aW1lcy4KLQotLi9zY2EgPHNjcmlwdHMvdGVzdC50eHQKLW9yCi0uL3NjYSA8c2NyaXB0cy90ZXN0LXJlbW90ZS50eHQKLQotVGhlIHNoZWxsIGNhbiBhbHNvIHJ1biBhcyBhIFdlYmFwcC4gVG8gdHJ5IGl0IGluc3RhbGwgdGFyZ2V0L3NjYXNoZWxsLndhciBpbgotYSBXZWIgY29udGFpbmVyLCBwb2ludCB5b3VyIFdlYiBicm93c2VyIHRvIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zY2FzaGVsbAotYW5kIHRyeSB0aGUgbGlua3Mgb24gdGhhdCBwYWdlLgotCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3BvbS54bWwgYi9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3YmFmYjUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAgICAqIA0KLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICAgICogDQotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtbGF1bmNoZXItc2hlbGw8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgTGF1bmNoZXIgU2hlbGw8L25hbWU+DQotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4gIA0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+IA0KLSAgICAgICAgDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS13ZWJzZXJ2aWNlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICANCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLXdlYjIwPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC13ZWJhcHA8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPnNjYXNoZWxsPC9maW5hbE5hbWU+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGF1bmNoZXItc2hlbGwvc2NyaXB0cy90ZXN0LXJlbW90ZS50eHQgYi9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NjcmlwdHMvdGVzdC1yZW1vdGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDdiZDU3Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvbGF1bmNoZXItc2hlbGwvc2NyaXB0cy90ZXN0LXJlbW90ZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0jIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0jIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMgCi0jICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jIAotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0jIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0jICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotCi1zdGFydCBmb28gYzEgaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35qc2RlbGZpbm8vdHVzY2FueS9qYXZhL3Rlc3Qvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IuamFyCi1zdG9wIGZvbwotc3RhcnQgZm9vIGMxIGh0dHA6Ly9wZW9wbGUuYXBhY2hlLm9yZy9+anNkZWxmaW5vL3R1c2NhbnkvamF2YS90ZXN0L3NhbXBsZS1jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yLmphcgotc3RvcCBmb28KLXN0YXJ0IGZvbyBjMSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci5qYXIKLXN0b3AgZm9vCi1zdGFydCBmb28gYzEgaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35qc2RlbGZpbm8vdHVzY2FueS9qYXZhL3Rlc3Qvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IuamFyCi1zdG9wIGZvbwotc3RhcnQgZm9vIGMxIGh0dHA6Ly9wZW9wbGUuYXBhY2hlLm9yZy9+anNkZWxmaW5vL3R1c2NhbnkvamF2YS90ZXN0L3NhbXBsZS1jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yLmphcgotc3RvcCBmb28KLXN0YXJ0IGZvbyBjMSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci5qYXIKLXN0b3AgZm9vCi1zdGFydCBmb28gYzEgaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35qc2RlbGZpbm8vdHVzY2FueS9qYXZhL3Rlc3Qvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IuamFyCi1zdG9wIGZvbwotc3RhcnQgZm9vIGMxIGh0dHA6Ly9wZW9wbGUuYXBhY2hlLm9yZy9+anNkZWxmaW5vL3R1c2NhbnkvamF2YS90ZXN0L3NhbXBsZS1jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yLmphcgotc3RvcCBmb28KLXN0YXJ0IGZvbyBjMSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci5qYXIKLXN0b3AgZm9vCi1zdGFydCBmb28gYzEgaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35qc2RlbGZpbm8vdHVzY2FueS9qYXZhL3Rlc3Qvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IuamFyCi1zdG9wIGZvbwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RhcnQudHh0IGIvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RhcnQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWY3ZjNmLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvbGF1bmNoZXItc2hlbGwvc2NyaXB0cy90ZXN0LXN0YXJ0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIyAKLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMgCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0KLXN0YXJ0IGZvbyBjMSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci5qYXIKLXN0YXR1cwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RvcC50eHQgYi9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NjcmlwdHMvdGVzdC1zdG9wLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzk0MmEzMC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NjcmlwdHMvdGVzdC1zdG9wLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLSMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0jICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIyAKLSMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMgCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0jIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0KLXN0b3AgZm9vCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NjcmlwdHMvdGVzdC50eHQgYi9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NjcmlwdHMvdGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY2Yzc2MGIuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zY3JpcHRzL3Rlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0jIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0jIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jIAotIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIyAKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0jIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLQotc3RhcnQgZm9vIGMxIC4uL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvdGFyZ2V0L2NsYXNzZXMKLXN0b3AgZm9vCi1zdGFydCBmb28gYzEgLi4vY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci90YXJnZXQvY2xhc3Nlcwotc3RvcCBmb28KLXN0YXJ0IGZvbyBjMSAuLi9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3RhcmdldC9jbGFzc2VzCi1zdG9wIGZvbwotc3RhcnQgZm9vIGMxIC4uL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvdGFyZ2V0L2NsYXNzZXMKLXN0b3AgZm9vCi1zdGFydCBmb28gYzEgLi4vY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci90YXJnZXQvY2xhc3Nlcwotc3RvcCBmb28KLXN0YXJ0IGZvbyBjMSAuLi9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3RhcmdldC9jbGFzc2VzCi1zdG9wIGZvbwotc3RhcnQgZm9vIGMxIC4uL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvdGFyZ2V0L2NsYXNzZXMKLXN0b3AgZm9vCi1zdGFydCBmb28gYzEgLi4vY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci90YXJnZXQvY2xhc3Nlcwotc3RvcCBmb28KLXN0YXJ0IGZvbyBjMSAuLi9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3RhcmdldC9jbGFzc2VzCi1zdG9wIGZvbwotc3RhcnQgZm9vIGMxIC4uL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvdGFyZ2V0L2NsYXNzZXMKLXN0b3AgZm9vCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NyYy9tYWluL2phdmEvc2FtcGxlL1NoZWxsLmphdmEgYi9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NyYy9tYWluL2phdmEvc2FtcGxlL1NoZWxsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdhZWNjOGEuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9TaGVsbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc1ICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi0NCi1wYWNrYWdlIHNhbXBsZTsNCi0NCi1pbXBvcnQgc3RhdGljIGphdmEubGFuZy5TeXN0ZW0uaW47DQotaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuU3lzdGVtLm91dDsNCi1pbXBvcnQgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9ucy5lbXB0eUxpc3Q7DQotaW1wb3J0IHN0YXRpYyBqYXZhLnV0aWwuQ29sbGVjdGlvbnMuc2luZ2xldG9uTGlzdDsNCi0NCi1pbXBvcnQgamF2YS51dGlsLkFycmF5czsNCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7DQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7DQotaW1wb3J0IGphdmEudXRpbC5NYXA7DQotaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOw0KLWltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTsNCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsNCi1pbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsNCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsNCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7DQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247DQotaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOw0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7DQotDQotDQotLyoqDQotICogQSBsaXR0bGUgU0NBIGNvbW1hbmQgc2hlbGwuDQotICovDQotcHVibGljIGNsYXNzIFNoZWxsIHsNCi0gICAgZmluYWwgTm9kZUZhY3Rvcnkgbm9kZUZhY3Rvcnk7DQotDQotICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgTm9kZUluZm8gew0KLSAgICAgICAgZmluYWwgU3RyaW5nIG5hbWU7DQotICAgICAgICBmaW5hbCBTdHJpbmcgY3VyaTsNCi0gICAgICAgIGZpbmFsIFN0cmluZyBjbG9jOw0KLSAgICAgICAgZmluYWwgTm9kZSBub2RlOw0KLQ0KLSAgICAgICAgTm9kZUluZm8oZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0cmluZyBjdXJpLCBmaW5hbCBTdHJpbmcgY2xvYywgZmluYWwgTm9kZSBub2RlKSB7DQotICAgICAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsNCi0gICAgICAgICAgICB0aGlzLmN1cmkgPSBjdXJpOw0KLSAgICAgICAgICAgIHRoaXMuY2xvYyA9IGNsb2M7DQotICAgICAgICAgICAgdGhpcy5ub2RlID0gbm9kZTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQotICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyAiICIgKyBjdXJpICsgIiAiICsgY2xvYzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBmaW5hbCBNYXA8U3RyaW5nLCBOb2RlSW5mbz4gbm9kZXMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIE5vZGVJbmZvPigpOw0KLSAgICBmaW5hbCBMaXN0PFN0cmluZz4gaGlzdG9yeSA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOw0KLQ0KLSAgICBwdWJsaWMgU2hlbGwoTm9kZUZhY3RvcnkgbmYpIHsNCi0gICAgICAgIHRoaXMubm9kZUZhY3RvcnkgPSBuZjsNCi0gICAgfQ0KLSAgICANCi0gICAgTGlzdDw/PiBzdGFydChmaW5hbCBTdHJpbmcgbmFtZSwgZmluYWwgU3RyaW5nIGN1cmksIGZpbmFsIFN0cmluZyBjbG9jKSB7DQotICAgICAgICBpZiAobm9kZXMuY29udGFpbnNLZXkobmFtZSkpDQotICAgICAgICAgICAgcmV0dXJuIGVtcHR5TGlzdCgpOw0KLSAgICAgICAgZmluYWwgTm9kZSBub2RlID0gbm9kZUZhY3RvcnkuY3JlYXRlTm9kZShuZXcgQ29udHJpYnV0aW9uKGN1cmksIGNsb2MpKTsNCi0gICAgICAgIG5vZGVzLnB1dChuYW1lLCBuZXcgTm9kZUluZm8obmFtZSwgY3VyaSwgY2xvYywgbm9kZSkpOw0KLSAgICAgICAgbm9kZS5zdGFydCgpOw0KLSAgICAgICAgcmV0dXJuIGVtcHR5TGlzdCgpOw0KLSAgICB9DQotDQotICAgIExpc3Q8Pz4gc3RvcChmaW5hbCBTdHJpbmcgbmFtZSkgew0KLSAgICAgICAgZmluYWwgTm9kZUluZm8gbmluZm8gPSBub2Rlcy5nZXQobmFtZSk7DQotICAgICAgICBpZiAobmluZm8gPT0gbnVsbCkNCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlMaXN0KCk7DQotICAgICAgICBuaW5mby5ub2RlLnN0b3AoKTsNCi0gICAgICAgIG5vZGVzLnJlbW92ZShuYW1lKTsNCi0gICAgICAgIHJldHVybiBlbXB0eUxpc3QoKTsNCi0gICAgfQ0KLQ0KLSAgICBMaXN0PD8+IHN0b3AoKSB7DQotICAgICAgICBmb3IgKE5vZGVJbmZvIG5pbmZvOiBub2Rlcy52YWx1ZXMoKSkNCi0gICAgICAgICAgICBuaW5mby5ub2RlLnN0b3AoKTsNCi0gICAgICAgIG5vZGVzLmNsZWFyKCk7DQotICAgICAgICByZXR1cm4gZW1wdHlMaXN0KCk7DQotICAgIH0NCi0NCi0gICAgTGlzdDw/PiByZXN0YXJ0KGZpbmFsIFN0cmluZyBuYW1lLCBmaW5hbCBTdHJpbmcgY3VyaSwgZmluYWwgU3RyaW5nIGNsb2MpIHsNCi0gICAgICAgIHN0b3AobmFtZSk7DQotICAgICAgICByZXR1cm4gc3RhcnQobmFtZSwgY3VyaSwgY2xvYyk7DQotICAgIH0NCi0NCi0gICAgTGlzdDw/PiBzdGF0dXMoKSB7DQotICAgICAgICByZXR1cm4gbmV3IEFycmF5TGlzdChub2Rlcy52YWx1ZXMoKSk7DQotICAgIH0NCi0NCi0gICAgTGlzdDw/PiBoaXN0b3J5KCkgew0KLSAgICAgICAgcmV0dXJuIGhpc3Rvcnk7DQotICAgIH0NCi0NCi0gICAgTGlzdDw/PiBieWUoKSB7DQotICAgICAgICByZXR1cm4gbnVsbDsNCi0gICAgfQ0KLQ0KLSAgICBMaXN0PFN0cmluZz4gcmVhZChmaW5hbCBCdWZmZXJlZFJlYWRlciByKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KLSAgICAgICAgZmluYWwgU3RyaW5nIGwgPSByLnJlYWRMaW5lKCk7DQotICAgICAgICBoaXN0b3J5LmFkZChsKTsNCi0gICAgICAgIHJldHVybiBsICE9IG51bGw/IEFycmF5cy5hc0xpc3QobC5zcGxpdCgiICIpKSA6IHNpbmdsZXRvbkxpc3QoImJ5ZSIpOw0KLSAgICB9DQotICAgICAgIA0KLSAgICBDYWxsYWJsZTxMaXN0PD8+PiBldmFsKGZpbmFsIExpc3Q8U3RyaW5nPiB0b2tzKSB7DQotICAgICAgICBmaW5hbCBTdHJpbmcgb3AgPSB0b2tzLmdldCgwKTsNCi0gICAgICAgIGlmKG9wLmVxdWFscygic3RhcnQiKSkgcmV0dXJuIG5ldyBDYWxsYWJsZTxMaXN0PD8+PigpIHsgcHVibGljIExpc3Q8Pz4gY2FsbCgpIHsNCi0gICAgICAgICAgICByZXR1cm4gc3RhcnQodG9rcy5nZXQoMSksIHRva3MuZ2V0KDIpLCB0b2tzLmdldCgzKSk7DQotICAgICAgICB9fTsNCi0gICAgICAgIGlmKG9wLmVxdWFscygic3RvcCIpKSByZXR1cm4gbmV3IENhbGxhYmxlPExpc3Q8Pz4+KCkgeyBwdWJsaWMgTGlzdDw/PiBjYWxsKCkgew0KLSAgICAgICAgICAgIGlmICh0b2tzLnNpemUoKSA9PSAxKQ0KLSAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpOw0KLSAgICAgICAgICAgIHJldHVybiBzdG9wKHRva3MuZ2V0KDEpKTsNCi0gICAgICAgIH19Ow0KLSAgICAgICAgaWYob3AuZXF1YWxzKCJyZXN0YXJ0IikpIHJldHVybiBuZXcgQ2FsbGFibGU8TGlzdDw/Pj4oKSB7IHB1YmxpYyBMaXN0PD8+IGNhbGwoKSB7DQotICAgICAgICAgICAgcmV0dXJuIHJlc3RhcnQodG9rcy5nZXQoMSksIHRva3MuZ2V0KDIpLCB0b2tzLmdldCgzKSk7DQotICAgICAgICB9fTsNCi0gICAgICAgIGlmKG9wLmVxdWFscygic3RhdHVzIikpIHJldHVybiBuZXcgQ2FsbGFibGU8TGlzdDw/Pj4oKSB7IHB1YmxpYyBMaXN0PD8+IGNhbGwoKSB7DQotICAgICAgICAgICAgcmV0dXJuIHN0YXR1cygpOw0KLSAgICAgICAgfX07DQotICAgICAgICBpZihvcC5lcXVhbHMoImhpc3RvcnkiKSkgcmV0dXJuIG5ldyBDYWxsYWJsZTxMaXN0PD8+PigpIHsgcHVibGljIExpc3Q8Pz4gY2FsbCgpIHsNCi0gICAgICAgICAgICByZXR1cm4gaGlzdG9yeSgpOw0KLSAgICAgICAgfX07DQotICAgICAgICBpZihvcC5lcXVhbHMoImJ5ZSIpKSByZXR1cm4gbmV3IENhbGxhYmxlPExpc3Q8Pz4+KCkgeyBwdWJsaWMgTGlzdDw/PiBjYWxsKCkgew0KLSAgICAgICAgICAgIHJldHVybiBieWUoKTsNCi0gICAgICAgIH19Ow0KLSAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxMaXN0PD8+PigpIHsgcHVibGljIExpc3Q8Pz4gY2FsbCgpIHsNCi0gICAgICAgICAgICByZXR1cm4gZW1wdHlMaXN0KCk7DQotICAgICAgICB9fTsNCi0gICAgfQ0KLQ0KLSAgICBMaXN0PD8+IGFwcGx5KGZpbmFsIENhbGxhYmxlPExpc3Q8Pz4+IGZ1bmMpIHsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCgpOw0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCi0gICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOw0KLSAgICAgICAgICAgIHJldHVybiBzaW5nbGV0b25MaXN0KGUpOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIGJvb2xlYW4gcHJpbnQoZmluYWwgTGlzdDw/PiBsLCBQcmludFdyaXRlciB3KSB7DQotICAgICAgICBpZihsID09IG51bGwpDQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KLSAgICAgICAgZm9yKE9iamVjdCBvOiBsKQ0KLSAgICAgICAgICAgIHcucHJpbnRsbihvKTsNCi0gICAgICAgIHJldHVybiB0cnVlOw0KLSAgICB9DQotDQotICAgIHB1YmxpYyBNYXA8U3RyaW5nLCBOb2RlSW5mbz4gcnVuKGZpbmFsIEJ1ZmZlcmVkUmVhZGVyIHIsIGZpbmFsIFByaW50V3JpdGVyIHcpIHRocm93cyBJT0V4Y2VwdGlvbiB7DQotICAgICAgICB3aGlsZShwcmludChhcHBseShldmFsKHJlYWQocikpKSwgdykpOw0KLSAgICAgICAgci5jbG9zZSgpOw0KLSAgICAgICAgcmV0dXJuIG5vZGVzOw0KLSAgICB9DQotDQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGZpbmFsIFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gew0KLSAgICAgICAgbmV3IFNoZWxsKE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkpLnJ1bihuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGluKSksIG5ldyBQcmludFdyaXRlcihvdXQsIHRydWUpKTsNCi0gICAgfQ0KLX0NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NyYy9tYWluL2phdmEvc2FtcGxlL1NoZWxsU2VydmxldC5qYXZhIGIvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9TaGVsbFNlcnZsZXQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZjNTc1OC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NyYy9tYWluL2phdmEvc2FtcGxlL1NoZWxsU2VydmxldC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0gKi8KLXBhY2thZ2Ugc2FtcGxlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0OwotaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7Ci1pbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qud2ViYXBwLldlYkFwcEhlbHBlcjsKLQotcHVibGljIGNsYXNzIFNoZWxsU2VydmxldCBleHRlbmRzIEh0dHBTZXJ2bGV0IHsKLSAgICBzdGF0aWMgZmluYWwgbG9uZyBzZXJpYWxWZXJzaW9uVUlEID0gMUw7Ci0KLSAgICBTaGVsbCBzaGVsbDsKLQotICAgIC8vQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgaW5pdCgpIHsKLSAgICAgICAgc2hlbGwgPSBuZXcgU2hlbGwoV2ViQXBwSGVscGVyLmdldE5vZGVGYWN0b3J5KCkpOwotICAgIH0KLQotICAgIC8vQE92ZXJyaWRlCi0gICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKLSAgICAgICAgc2hlbGwuc3RvcCgpOwotICAgIH0KLQotICAgIC8vQE92ZXJyaWRlCi0gICAgcHJvdGVjdGVkIHZvaWQgZG9HZXQoZmluYWwgSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgZmluYWwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwKSB0aHJvd3MgSU9FeGNlcHRpb24gewotICAgICAgICBzaGVsbC5ydW4obmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihuZXcgVVJMKHJlcS5nZXRQYXJhbWV0ZXIoImNvbmYiKSkub3BlblN0cmVhbSgpKSksIHJlc3AuZ2V0V3JpdGVyKCkpOwotICAgIH0KLX0KLQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zcmMvbWFpbi93ZWJhcHAvaW5kZXguaHRtbCBiL3NhbXBsZXMvbGF1bmNoZXItc2hlbGwvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYWU5MWUuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zcmMvbWFpbi93ZWJhcHAvaW5kZXguaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxodG1sPgotPGhlYWQ+Ci08dGl0bGU+U2FtcGxlIFJ1bnRpbWUgU2hlbGw8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDE+SXQgd29ya3M8L2gxPgotCi08cD5UaGlzIFdlYiBhcHAgcnVucyBhIHNhbXBsZSBUdXNjYW55IHJ1bnRpbWUgc2hlbGwgc2ltaWxhciB0byBzYW1wbGVzL2xhdW5jaGVyLXNoZWxsLjxici8+Ci1UbyBzZWUgaG93IGl0IHdvcmtzIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgYXJlIHN1cHBvcnRlZCwganVzdCByZWFkIHRoZSBTaGVsbCBwcm9ncmFtJ3MgPGEgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi90dXNjYW55L3NjYS1qYXZhLTIueC90cnVuay9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NyYy9tYWluL2phdmEvc2FtcGxlL1NoZWxsLmphdmEiPnNvdXJjZSBjb2RlPC9hPi48L3A+Ci0KLTxwPkNvbmZpZ3VyYXRpb24gY29tbWFuZHMgY2FuIGJlIHByb3ZpZGVkIHRocm91Z2ggYSB0ZXh0IGRvY3VtZW50IHNlcnZlZCBmcm9tIGEgV2ViIGxvY2F0aW9uLCBmb3IgZXhhbXBsZTo8YnIvPgotPGEgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi90dXNjYW55L3NjYS1qYXZhLTIueC90cnVuay9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NjcmlwdHMvdGVzdC1zdGFydC50eHQiPmh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvdHVzY2FueS9zY2EtamF2YS0yLngvdHJ1bmsvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RhcnQudHh0PC9hPjwvcD4KLQotPHA+VG8gcnVuIHRoYXQgcGFydGljdWxhciBjb25maWd1cmF0aW9uIHNjcmlwdCBqdXN0IHBvaW50IHlvdXIgV2ViIGJyb3dzZXIgdG86PGJyLz4KLTxhIGhyZWY9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zY2FzaGVsbC9ydW4/Y29uZj1odHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3R1c2Nhbnkvc2NhLWphdmEtMi54L3RydW5rL3NhbXBsZXMvbGF1bmNoZXItc2hlbGwvc2NyaXB0cy90ZXN0LXN0YXJ0LnR4dCI+aHR0cDovL2xvY2FsaG9zdDo4MDgwL3NjYXNoZWxsL3J1bj9jb25mPWh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvdHVzY2FueS9zY2EtamF2YS0yLngvdHJ1bmsvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RhcnQudHh0PC9hPjxici8+Ci1UbyBydW4gdGhlIHNjcmlwdCBhZ2FpbiBhbmQgcmVmcmVzaCB0aGUgcnVudGltZSBzaGVsbCwganVzdCByZWZyZXNoIHRoYXQgcGFnZSBpbiB5b3VyIFdlYiBicm93c2VyLgotPC9wPgotCi08cD5TYW1wbGUgY29uZmlndXJhdGlvbiBzY3JpcHQgc2FtcGxlcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBUdXNjYW55IFN1YnZlcnNpb24gcmVwb3NpdG9yeSA8YSBocmVmPSJodHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3R1c2Nhbnkvc2NhLWphdmEtMi54L3RydW5rL3NhbXBsZXMvbGF1bmNoZXItc2hlbGwvc2NyaXB0cy8iPnRoZXJlPC9hPi4KLQotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTM1YzMzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKQEAgLTAsMCArMSw1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yLWFzeW5jLWNvbnRyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIGltcGxlbWVudGF0aW9uLmphdmEgQ2FsY3VsYXRvciBBc3luYyBDb250cmlidXRpb248L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgCisgICAgPGJ1aWxkPgorICAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKyAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tdHVzY2FueS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRlUmVmZXJlbmNlQXN5bmMuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRlUmVmZXJlbmNlQXN5bmMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDdlNWQyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdGVSZWZlcmVuY2VBc3luYy5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2UgY2FsY3VsYXRvcjsKKworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKKworaW1wb3J0IGphdmF4LnhtbC53cy5Bc3luY0hhbmRsZXI7CitpbXBvcnQgamF2YXgueG1sLndzLlJlc3BvbnNlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7CisKKy8qKgorICogQXN5bmMgY2xpZW50IHZlcnNpb24gb2YgdGhlIENhbGN1bGF0b3JTZXJ2aWNlIGludGVyZmFjZQorICoKKyAqLworCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIENhbGN1bGF0ZVJlZmVyZW5jZUFzeW5jIHsKKworCS8vcHVibGljIFJlc3BvbnNlPFN0cmluZz4gY2FsY3VsYXRlKCBJbnRlZ2VyIGkxKTsKKwkKKwkvLyBTeW5jCisJcHVibGljIFN0cmluZyBjYWxjdWxhdGUoSW50ZWdlciBpMSk7CisJCisJLy8gQXlzbmMgUG9sbAorCXB1YmxpYyBSZXNwb25zZTxTdHJpbmc+IGNhbGN1bGF0ZUFzeW5jKEludGVnZXIgaTEpOworCQorCS8vIEFzeW5jIENhbGxiYWNrCisJcHVibGljIEZ1dHVyZTxTdHJpbmc+IGNhbGN1bGF0ZUFzeW5jKEludGVnZXIgaTEsIEFzeW5jSGFuZGxlcjxTdHJpbmc+IGhhbmRsZXIpOworCQorfQorCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JBc3luY0hhbmRsZXIuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckFzeW5jSGFuZGxlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiYWVlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JBc3luY0hhbmRsZXIuamF2YQpAQCAtMCwwICsxLDM2IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK2ltcG9ydCBqYXZheC54bWwud3MuQXN5bmNIYW5kbGVyOw0KK2ltcG9ydCBqYXZheC54bWwud3MuUmVzcG9uc2U7DQorDQorLyoqDQorICogSGFuZGxlcyBjYWxsYmFja3MgdG8gdGhlIGFzeW5jIGNsaWVudA0KKyAqLw0KKw0KK3B1YmxpYyBjbGFzcyBDYWxjdWxhdG9yQXN5bmNIYW5kbGVyIGltcGxlbWVudHMgQXN5bmNIYW5kbGVyPFN0cmluZz4gew0KKyAgICBwdWJsaWMgdm9pZCBoYW5kbGVSZXNwb25zZShSZXNwb25zZTxTdHJpbmc+IHJlcykgew0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkFzeW5jIGNsaWVudCBjYWxsYmFjayBwYXRlcm46IHJlc3VsdCBpbiBoYW5kbGVyID0gIiArIHJlcy5nZXQoKSk7DQorICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiBleCl7DQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJBc3luYyBjbGllbnQgY2FsbGJhY2sgcGF0ZXJuOiBleGNlcHRpb24gaW4gaGFuZGxlciA9ICIgKyBleC5nZXRNZXNzYWdlKCkpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ3Y2ZjZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2UgY2FsY3VsYXRvcjsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uRWFnZXJJbml0OworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uSW5pdDsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNjb3BlOworCisvKioKKyAqIFRoaXMgY2xpZW50IHByb2dyYW0gc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBTQ0EgcnVudGltZSwgc3RhcnQgaXQsCisgKiBhbmQgbG9jYXRlIGFuZCBpbnZva2UgYSBTQ0EgY29tcG9uZW50CisgKi8KK0BTY29wZSgiQ09NUE9TSVRFIikgQEVhZ2VySW5pdAorcHVibGljIGNsYXNzIENhbGN1bGF0b3JDbGllbnQgeworICAgIAorICAgIHByaXZhdGUgQ2FsY3VsYXRvclNlcnZpY2VTeW5jIGNhbGN1bGF0b3JTZXJ2aWNlOworCisKKyAgICBAUmVmZXJlbmNlCisgICAgcHVibGljIHZvaWQgc2V0Q2FsY3VsYXRvclNlcnZpY2UoQ2FsY3VsYXRvclNlcnZpY2VTeW5jIGNhbGN1bGF0b3JTZXJ2aWNlKSB7CisgICAgICAgIHRoaXMuY2FsY3VsYXRvclNlcnZpY2UgPSBjYWxjdWxhdG9yU2VydmljZTsKKyAgICB9CisgICAgCisgICAgQEluaXQKKyAgICBwdWJsaWMgdm9pZCBjYWxjdWxhdGUoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiY2FsY3VsYXRpb249IiArIGNhbGN1bGF0b3JTZXJ2aWNlLmNhbGN1bGF0ZSgyMCkpOworICAgIH0KKyAgICAKKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUFzeW5jLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlQXN5bmMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTc5NTI5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUFzeW5jLmphdmEKQEAgLTAsMCArMSwzMyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuUmVzcG9uc2VEaXNwYXRjaDsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Bc3luY0ludm9jYXRpb247DQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOw0KKw0KKy8qKg0KKyAqIFRoZSBhc3luYyBDYWxjdWxhdG9yIHNlcnZpY2UgaW50ZXJmYWNlLg0KKyAqLw0KKw0KK0BSZW1vdGFibGUNCitAQXN5bmNJbnZvY2F0aW9uDQorcHVibGljIGludGVyZmFjZSBDYWxjdWxhdG9yU2VydmljZUFzeW5jIHsNCisgICAgdm9pZCBjYWxjdWxhdGVBc3luYyhJbnRlZ2VyIG4xLCBSZXNwb25zZURpc3BhdGNoPFN0cmluZz4gcmVzcG9uc2UpOw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlQXN5bmNJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlQXN5bmNJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkwNmY0NgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VBc3luY0ltcGwuamF2YQpAQCAtMCwwICsxLDM0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIGNhbGN1bGF0b3I7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5SZXNwb25zZURpc3BhdGNoOworCitwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclNlcnZpY2VBc3luY0ltcGwgaW1wbGVtZW50cyBDYWxjdWxhdG9yU2VydmljZUFzeW5jIHsKKworCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGNhbGN1bGF0ZUFzeW5jKEludGVnZXIgbjEsIFJlc3BvbnNlRGlzcGF0Y2g8U3RyaW5nPiByZXNwb25zZSkgeworCSAgICBpbnQgcmVzdWx0ID0gbjEgKyBuMTsKKwkgICAgU3RyaW5nIHJldHZhbCA9ICJhc3luYyBzZXJ2aWNlIGludm9rZWQ6ICIgKyBuMSArICIgKyAiICsgbjEgKyAiID0gIiArIHJlc3VsdDsKKwkJCisJICAgIHJlc3BvbnNlLnNlbmRSZXNwb25zZShyZXR2YWwpOworCX0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZVByb3h5SW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZVByb3h5SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1MWJhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlUHJveHlJbXBsLmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCitwYWNrYWdlIGNhbGN1bGF0b3I7CisKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRnV0dXJlOworCitpbXBvcnQgamF2YXgueG1sLndzLlJlc3BvbnNlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7CisKKy8qKgorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIENhbGN1bGF0b3Igc2VydmljZSB3aGljaCBqdXN0IHByb3hpZXMKKyAqIHRvIHN5bmMgYW5kIGFzeW4gdmVyc2lvbnMgb2YgdGhlIGNhbGN1bGF0b3Igc2VydmljZS4gVGhpcyBwcm94eQorICogZXhlcmNpc2VzIHRoZSB2YXJpb3VzIGFzeW5jIGludGVyZmFjZSBhbHRlcm5hdGl2ZXMKKyAqLworcHVibGljIGNsYXNzIENhbGN1bGF0b3JTZXJ2aWNlUHJveHlJbXBsIGltcGxlbWVudHMgQ2FsY3VsYXRvclNlcnZpY2VTeW5jIHsKKwkKKwlAUmVmZXJlbmNlCisJcHJvdGVjdGVkIENhbGN1bGF0ZVJlZmVyZW5jZUFzeW5jIGNhbGN1bGF0b3JTZXJ2aWNlUmVmU3luYzsKKwkKKwlAUmVmZXJlbmNlCisJcHJvdGVjdGVkIENhbGN1bGF0ZVJlZmVyZW5jZUFzeW5jIGNhbGN1bGF0b3JTZXJ2aWNlUmVmQXN5bmM7CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGNhbGN1bGF0ZShJbnRlZ2VyIG4xKSB7CisJICAgIFN0cmluZyByZXN1bHQgPSBudWxsOworCSAgICAKKwkgICAgLy8gY2FsY3VsYXRlIHVzaW5nIGEgc3luYyBzZXJ2aWNlCisJICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2FsbGluZyBzeW5jIHNlcnZpY2UiKTsKKwkgICAgcmVzdWx0ID0gY2FsY3VsYXRlKGNhbGN1bGF0b3JTZXJ2aWNlUmVmU3luYywgbjEpOworCSAgICAKKwkgICAgLy8gY2FsY3VsYXRlIHVzaW5nIGFuIGF5Y24gc2VydmljZQorCSAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNhbGxpbmcgYXN5bmMgc2VydmljZSIpOworCSAgICByZXN1bHQgKz0gY2FsY3VsYXRlKGNhbGN1bGF0b3JTZXJ2aWNlUmVmQXN5bmMsIG4xKTsKKwkgICAgCisJICAgIHJldHVybiByZXN1bHQ7CisJfSAgICAKKwkgICAgCisJLy8gZXhlcmNpc2Ugc3luYyBhbmQgYXN5bmMgdmVyc2lvbnMgb2YgYSBzZXJ2aWNlIGludGVyZmFjZSBtZXRob2QKKwlwcml2YXRlIFN0cmluZyBjYWxjdWxhdGUoQ2FsY3VsYXRlUmVmZXJlbmNlQXN5bmMgY2FsY3VsYXRvclJlZiwgSW50ZWdlciBuMSkgewkgICAgCisJCQorCQkvLyBzeW5jCisJCVN0cmluZyByZXN1bHQgPSBjYWxjdWxhdG9yUmVmLmNhbGN1bGF0ZSgxKTsKKwkJU3lzdGVtLm91dC5wcmludGxuKCJTeW5jIGNsaWVudCBwYXRlcm46IHJlc3VsdCA9ICIgKyByZXN1bHQpOworCQkKKwkJLy8gYXN5bmMgcG9sbAorCQlSZXNwb25zZTxTdHJpbmc+IHJlc3BvbnNlID0gY2FsY3VsYXRvclJlZi5jYWxjdWxhdGVBc3luYygyMCk7CisJCQorCQl3aGlsZSAoIXJlc3BvbnNlLmlzRG9uZSgpKXsKKwkJCVN5c3RlbS5vdXQucHJpbnRsbigiV2FpdGluZyBmb3IgcG9sbCIpOworCQkJdHJ5IHsKKwkJCSAgICBUaHJlYWQuc2xlZXAoNTAwKTsKKwkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgeworCQkJICAgIC8vIGRvIG5vdGhpbmcKKwkJCX0KKwkJfQorCQkKKwkJdHJ5IHsKKwkJCXJlc3VsdCA9IHJlc3BvbnNlLmdldCgpOworCQkJU3lzdGVtLm91dC5wcmludGxuKCJBc3luYyBjbGllbnQgcG9sbCBwYXRlcm46IHJlc3VsdCA9ICIgKyByZXN1bHQpOworCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCisJCQllLnByaW50U3RhY2tUcmFjZSgpOworCQl9IGNhdGNoIChFeGVjdXRpb25FeGNlcHRpb24gZSkgeworCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBjYXRjaCBibG9jaworCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKKwkJfQorCQkKKwkJLy8gYXN5bmMgY2FsbGJhY2sgCisJCUNhbGN1bGF0b3JBc3luY0hhbmRsZXIgaGFuZGxlciA9IG5ldyBDYWxjdWxhdG9yQXN5bmNIYW5kbGVyKCk7CisJCUZ1dHVyZTxTdHJpbmc+IGZ1dHVyZSA9IGNhbGN1bGF0b3JSZWYuY2FsY3VsYXRlQXN5bmMoMywgaGFuZGxlcik7CisJCQorCQl3aGlsZSAoIWZ1dHVyZS5pc0RvbmUoKSl7CisJCQlTeXN0ZW0ub3V0LnByaW50bG4oIldhaXRpbmcgZm9yIGNhbGxiYWNrIik7CisJICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIFRocmVhZC5zbGVlcCg1MDApOworICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7CisgICAgICAgICAgICAgICAgLy8gZG8gbm90aGluZworICAgICAgICAgICAgfQorCQl9CisKKwkJcmV0dXJuIHJlc3VsdDsKKwl9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlU3luYy5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZVN5bmMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGVkMWZhCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZVN5bmMuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSBjYWxjdWxhdG9yOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7CisKKy8qKgorICogVGhlIHN5bmMgQ2FsY3VsYXRvciBzZXJ2aWNlIGludGVyZmFjZS4KKyAqLworCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIENhbGN1bGF0b3JTZXJ2aWNlU3luYyB7CisgICAgU3RyaW5nIGNhbGN1bGF0ZShJbnRlZ2VyIG4xKTsKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VTeW5jSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZVN5bmNJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTVhYjY3YwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VTeW5jSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2UgY2FsY3VsYXRvcjsKKworcHVibGljIGNsYXNzIENhbGN1bGF0b3JTZXJ2aWNlU3luY0ltcGwgaW1wbGVtZW50cyBDYWxjdWxhdG9yU2VydmljZVN5bmMgeworCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBjYWxjdWxhdGUoSW50ZWdlciBuMSkgeworCSAgICBpbnQgcmVzdWx0ID0gbjEgKyBuMTsKKwkJU3RyaW5nIHJldHZhbCA9ICJzeW5jIHNlcnZpY2UgaW52b2tlZDogIiArIG4xICsgIiArICIgKyBuMSArICIgPSAiICsgcmVzdWx0OworCQlyZXR1cm4gcmV0dmFsOworCX0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjExN2Q0MwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUiDQorICAgICAgICAgICB4bWxuczpzYW1wbGU9Imh0dHA6Ly9zYW1wbGUiDQorICAgICAgICAgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIG5hbWU9IkNhbGN1bGF0b3IiPg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50Ij4NCisJCTxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlUHJveHlJbXBsIi8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImNhbGN1bGF0b3JTZXJ2aWNlUmVmU3luYyIgdGFyZ2V0PSJDYWxjdWxhdG9yU3luYyIvPg0KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJjYWxjdWxhdG9yU2VydmljZVJlZkFzeW5jIiB0YXJnZXQ9IkNhbGN1bGF0b3JBc3luYyIvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJDYWxjdWxhdG9yU3luYyI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5DYWxjdWxhdG9yU2VydmljZVN5bmNJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKyAgICANCisgICAgPGNvbXBvbmVudCBuYW1lPSJDYWxjdWxhdG9yQXN5bmMiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuQ2FsY3VsYXRvclNlcnZpY2VBc3luY0ltcGwiLz4NCisgICAgICAgIDxzZXJ2aWNlIG5hbWU9IkNhbGN1bGF0b3JTZXJ2aWNlQXN5bmMiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLndzIHVyaT0iaHR0cDovL2xvY2FsaG9zdDo4MDg1L0NhbGN1bGF0b3JBc3luYyIvPg0KKyAgICAgICAgPC9zZXJ2aWNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JDbGllbnQuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzRlZjI3Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZSINCisgICAgICAgICAgIHhtbG5zOnNhbXBsZT0iaHR0cDovL3NhbXBsZSINCisgICAgICAgICAgIG5hbWU9IkNhbGN1bGF0b3JDbGllbnQiPg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkNhbGN1bGF0b3JDbGllbnQiPg0KKwkJPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuQ2FsY3VsYXRvckNsaWVudCIvPg0KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJjYWxjdWxhdG9yU2VydmljZSIgdGFyZ2V0PSJDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgIDwvY29tcG9uZW50Pg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2FzeW5jL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY3MmQwOQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9hc3luYy9wb20ueG1sCkBAIC0wLDAgKzEsNDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPnNhbXBsZS10dXNjYW55LWFzeW5jPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZXMgZm9yIFN5bmNocm9ub3VzL0FzeW5jaHJvbm91cyBpbnZvY2F0aW9uPC9uYW1lPgorCisgICAgPHByb2ZpbGVzPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPgorICAgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgorICAgICAgICAgICAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbjwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4gICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTlmNWNhCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvcG9tLnhtbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZS1iaW5kaW5nLWNvbWV0PC9hcnRpZmFjdElkPg0KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIGJpbmRpbmcuY29tZXQ8L25hbWU+DQorDQorICAgIDxwcm9maWxlcz4NCisgICAgICAgIDxwcm9maWxlPg0KKyAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4NCisgICAgICAgICAgICA8YWN0aXZhdGlvbj4NCisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+DQorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPg0KKyAgICAgICAgICAgIDxtb2R1bGVzPg0KKyAgICAgICAgICAgICAgICA8bW9kdWxlPndlYXRoZXItd2ViYXBwPC9tb2R1bGU+DQorICAgICAgICAgICAgPC9tb2R1bGVzPg0KKyAgICAgICAgPC9wcm9maWxlPg0KKyAgICA8L3Byb2ZpbGVzPiAgICANCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvZGVwbG95LnNoIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvZGVwbG95LnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmViNTNiZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9kZXBsb3kuc2gKQEAgLTAsMCArMSwyMCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKworIyEvYmluL2Jhc2gKKworbXZuIGNsZWFuIGluc3RhbGwKK2FwcGNmZy5zaCB1cGRhdGUgdGFyZ2V0L2NvbWV0LXdlYmFwcApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMWNlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9wb20ueG1sCkBAIC0wLDAgKzEsNTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorLS0+DQorPHByb2plY3QgeG1sbnM9Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAgaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvbWF2ZW4tdjRfMF8wLnhzZCI+DQorCTxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisJPHBhcmVudD4NCisJCTxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorCQk8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorCQk8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorCQk8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisJPC9wYXJlbnQ+DQorDQorCTxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorCTxhcnRpZmFjdElkPnNhbXBsZS1iaW5kaW5nLWNvbWV0LXdlYXRoZXItd2ViYXBwPC9hcnRpZmFjdElkPg0KKwk8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPg0KKwk8dmVyc2lvbj4xLjA8L3ZlcnNpb24+DQorCTxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgYmluZGluZy5jb21ldCBXZWF0aGVyIFdlYmFwcDwvbmFtZT4NCisNCisJPGRlcGVuZGVuY2llcz4NCisJCTxkZXBlbmRlbmN5Pg0KKwkJCTxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorCQkJPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorCQkJPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKwkJPC9kZXBlbmRlbmN5Pg0KKwkJPGRlcGVuZGVuY3k+DQorCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisJCQk8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctY29tZXQtcnVudGltZTwvYXJ0aWZhY3RJZD4NCisJCQk8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorCQk8L2RlcGVuZGVuY3k+DQorCQk8ZGVwZW5kZW5jeT4NCisJCQk8Z3JvdXBJZD5qYXZheDwvZ3JvdXBJZD4NCisJCQk8YXJ0aWZhY3RJZD5qYXZhZWUtd2ViLWFwaTwvYXJ0aWZhY3RJZD4NCisJCQk8dmVyc2lvbj42LjA8L3ZlcnNpb24+DQorCQkJPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCisJCTwvZGVwZW5kZW5jeT4NCisJPC9kZXBlbmRlbmNpZXM+DQorCQ0KKzwvcHJvamVjdD4NCisNCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2FtcGxlL2NvbWV0L0hlbHBlci5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9IZWxwZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZWNjNjA0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9IZWxwZXIuamF2YQpAQCAtMCwwICsxLDM0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2FtcGxlLmNvbWV0OworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CitpbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKKworcHVibGljIGZpbmFsIGNsYXNzIEhlbHBlciB7CisKKyAgICBwdWJsaWMgc3RhdGljIGludCByYW5kb21JbnQoZmluYWwgaW50IG1heCkgeworICAgICAgICByZXR1cm4gKG5ldyBSYW5kb20obmV3IERhdGUoKS5nZXRUaW1lKCkpLm5leHRJbnQoMTAwKSk7CisgICAgfQorCisgICAgcHJpdmF0ZSBIZWxwZXIoKSB7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2FtcGxlL2NvbWV0L0h1bWlkaXR5U2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9IdW1pZGl0eVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMGNiZTczCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9IdW1pZGl0eVNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDMxIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2FtcGxlLmNvbWV0OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQubW9kZWwuTG9jYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQubW9kZWwuUmVzcG9uc2U7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7CisKK0BSZW1vdGFibGUKK3B1YmxpYyBpbnRlcmZhY2UgSHVtaWRpdHlTZXJ2aWNlIHsKKworICAgIFJlc3BvbnNlIGdldEh1bWlkaXR5KExvY2F0aW9uIGxvY2F0aW9uKTsKKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9QcmVjaXBpdGF0aW9uU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9QcmVjaXBpdGF0aW9uU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYmRjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2FtcGxlL2NvbWV0L1ByZWNpcGl0YXRpb25TZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNhbXBsZS5jb21ldDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2FtcGxlLmNvbWV0Lm1vZGVsLkxvY2F0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2FtcGxlLmNvbWV0Lm1vZGVsLlJlc3BvbnNlOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOworCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIFByZWNpcGl0YXRpb25TZXJ2aWNlIHsKKworICAgIFJlc3BvbnNlIGdldFByZWNpcGl0YXRpb24oTG9jYXRpb24gbG9jYXRpb24pOworCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2FtcGxlL2NvbWV0L1ByZWNpcGl0YXRpb25TZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9QcmVjaXBpdGF0aW9uU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjc4ZWY5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9QcmVjaXBpdGF0aW9uU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2FtcGxlLmNvbWV0OworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNhbXBsZS5jb21ldC5tb2RlbC5Mb2NhdGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNhbXBsZS5jb21ldC5tb2RlbC5SZXNwb25zZTsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNlcnZpY2U7CisKK0BTZXJ2aWNlKFByZWNpcGl0YXRpb25TZXJ2aWNlLmNsYXNzKQorcHVibGljIGNsYXNzIFByZWNpcGl0YXRpb25TZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFByZWNpcGl0YXRpb25TZXJ2aWNlIHsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZXNwb25zZSBnZXRQcmVjaXBpdGF0aW9uKGZpbmFsIExvY2F0aW9uIGxvY2F0aW9uKSB7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKCk7CisgICAgICAgIHJlc3BvbnNlLnNldERhdGUobmV3IERhdGUoKSk7CisgICAgICAgIHJlc3BvbnNlLnNldERhdGEoSGVscGVyLnJhbmRvbUludCgxMDApICsgIiUiKTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9UZW1wZXJhdHVyZUh1bWlkaXR5U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zYW1wbGUvY29tZXQvVGVtcGVyYXR1cmVIdW1pZGl0eVNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmOTM1ZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zYW1wbGUvY29tZXQvVGVtcGVyYXR1cmVIdW1pZGl0eVNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNhbXBsZS5jb21ldDsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQubW9kZWwuTG9jYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQubW9kZWwuUmVzcG9uc2U7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlOworCitAU2VydmljZSh7VGVtcGVyYXR1cmVTZXJ2aWNlLmNsYXNzLCBIdW1pZGl0eVNlcnZpY2UuY2xhc3N9KQorcHVibGljIGNsYXNzIFRlbXBlcmF0dXJlSHVtaWRpdHlTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFRlbXBlcmF0dXJlU2VydmljZSwgSHVtaWRpdHlTZXJ2aWNlIHsKKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZXNwb25zZSBnZXRIdW1pZGl0eShmaW5hbCBMb2NhdGlvbiBsb2NhdGlvbikgeworICAgICAgICBmaW5hbCBSZXNwb25zZSByZXNwb25zZSA9IG5ldyBSZXNwb25zZSgpOworICAgICAgICByZXNwb25zZS5zZXREYXRlKG5ldyBEYXRlKCkpOworICAgICAgICByZXNwb25zZS5zZXREYXRhKEhlbHBlci5yYW5kb21JbnQoOTApICsgIiUiKTsKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBSZXNwb25zZSBnZXRUZW1wZXJhdHVyZShmaW5hbCBMb2NhdGlvbiBsb2NhdGlvbiwgZmluYWwgaW50IHNjYWxlKSB7CisgICAgICAgIGZpbmFsIFJlc3BvbnNlIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKCk7CisgICAgICAgIHJlc3BvbnNlLnNldERhdGUobmV3IERhdGUoKSk7CisgICAgICAgIGZpbmFsIFN0cmluZyBkYXRhID0gIiIgKyBIZWxwZXIucmFuZG9tSW50KHNjYWxlID09IFRlbXBlcmF0dXJlU2VydmljZS5DRUxTSVVTID8gNDAgOiAxNTApOworICAgICAgICByZXNwb25zZS5zZXREYXRhKGRhdGEpOworICAgICAgICByZXR1cm4gcmVzcG9uc2U7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2FtcGxlL2NvbWV0L1RlbXBlcmF0dXJlU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9UZW1wZXJhdHVyZVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTI5ODgyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9UZW1wZXJhdHVyZVNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDM0IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2FtcGxlLmNvbWV0OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQubW9kZWwuTG9jYXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQubW9kZWwuUmVzcG9uc2U7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7CisKK0BSZW1vdGFibGUKK3B1YmxpYyBpbnRlcmZhY2UgVGVtcGVyYXR1cmVTZXJ2aWNlIHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IENFTFNJVVMgPSAxOworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZBSFJFTkhFSVQgPSAyOworCisgICAgUmVzcG9uc2UgZ2V0VGVtcGVyYXR1cmUoTG9jYXRpb24gbG9jYXRpb24sIGludCBzY2FsZSk7CisKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zYW1wbGUvY29tZXQvbW9kZWwvTG9jYXRpb24uamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zYW1wbGUvY29tZXQvbW9kZWwvTG9jYXRpb24uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjJkYTNhCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3NhbXBsZS9jb21ldC9tb2RlbC9Mb2NhdGlvbi5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQubW9kZWw7CisKK3B1YmxpYyBjbGFzcyBMb2NhdGlvbiB7CisKKyAgICBwcml2YXRlIFN0cmluZyBjaXR5OworICAgIHByaXZhdGUgU3RyaW5nIGNvdW50cnk7CisKKyAgICBwdWJsaWMgU3RyaW5nIGdldENpdHkoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmNpdHk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgc2V0Q2l0eShmaW5hbCBTdHJpbmcgY2l0eSkgeworICAgICAgICB0aGlzLmNpdHkgPSBjaXR5OworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q291bnRyeSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuY291bnRyeTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXRDb3VudHJ5KGZpbmFsIFN0cmluZyBjb3VudHJ5KSB7CisgICAgICAgIHRoaXMuY291bnRyeSA9IGNvdW50cnk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2FtcGxlL2NvbWV0L21vZGVsL1Jlc3BvbnNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evc2FtcGxlL2NvbWV0L21vZGVsL1Jlc3BvbnNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFhMjNmMAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9zYW1wbGUvY29tZXQvbW9kZWwvUmVzcG9uc2UuamF2YQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2FtcGxlLmNvbWV0Lm1vZGVsOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK3B1YmxpYyBjbGFzcyBSZXNwb25zZSB7CisKKyAgICBwcml2YXRlIERhdGUgZGF0ZTsKKyAgICBwcml2YXRlIFN0cmluZyBkYXRhOworCisgICAgcHVibGljIERhdGUgZ2V0RGF0ZSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXREYXRlKGZpbmFsIERhdGUgZGF0ZSkgeworICAgICAgICB0aGlzLmRhdGUgPSBkYXRlOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGF0YSgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuZGF0YTsKKyAgICB9CisKKyAgICBwdWJsaWMgdm9pZCBzZXREYXRhKGZpbmFsIFN0cmluZyBkYXRhKSB7CisgICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg2MzBjMAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMCwwICsxLDIgQEAKK01hbmlmZXN0LVZlcnNpb246IDEuMA0KKw0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2FwcGVuZ2luZS13ZWIueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvYXBwZW5naW5lLXdlYi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY5NmY3NgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2FwcGVuZ2luZS13ZWIueG1sCkBAIC0wLDAgKzEsMjQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorLS0+DQorPGFwcGVuZ2luZS13ZWItYXBwIHhtbG5zPSJodHRwOi8vYXBwZW5naW5lLmdvb2dsZS5jb20vbnMvMS4wIj4NCisgICAgPGFwcGxpY2F0aW9uPnR1c2NhbnktY29tZXQ8L2FwcGxpY2F0aW9uPg0KKyAgICA8dmVyc2lvbj4xPC92ZXJzaW9uPg0KKyAgICA8c2Vzc2lvbnMtZW5hYmxlZD50cnVlPC9zZXNzaW9ucy1lbmFibGVkPg0KKzwvYXBwZW5naW5lLXdlYi1hcHA+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDViMmRkZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICAgICAgICAgeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIgorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGVzIgorICAgICAgICAgICBuYW1lPSJTdG9jayI+CisKKwk8Y29tcG9uZW50IG5hbWU9ImMxIj4KKwkJPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2FtcGxlLmNvbWV0LlRlbXBlcmF0dXJlSHVtaWRpdHlTZXJ2aWNlSW1wbCIvPgorCQk8c2VydmljZSBuYW1lPSJUZW1wZXJhdHVyZVNlcnZpY2UiPgorCQkJPGludGVyZmFjZS5qYXZhIGludGVyZmFjZT0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQuVGVtcGVyYXR1cmVTZXJ2aWNlIi8+CisJCQk8dHVzY2FueTpiaW5kaW5nLmNvbWV0Lz4KKwkJPC9zZXJ2aWNlPgorCQk8c2VydmljZSBuYW1lPSJIdW1pZGl0eVNlcnZpY2UiPgorCQkJPGludGVyZmFjZS5qYXZhIGludGVyZmFjZT0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQuSHVtaWRpdHlTZXJ2aWNlIi8+CisJCQk8dHVzY2FueTpiaW5kaW5nLmNvbWV0Lz4KKwkJPC9zZXJ2aWNlPgorCTwvY29tcG9uZW50PgorCQorCTxjb21wb25lbnQgbmFtZT0iYzIiPgorCQk8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5zYW1wbGUuY29tZXQuUHJlY2lwaXRhdGlvblNlcnZpY2VJbXBsIi8+CisJCTxzZXJ2aWNlIG5hbWU9IlByZWNpcGl0YXRpb25TZXJ2aWNlIj4KKwkJCTxpbnRlcmZhY2UuamF2YSBpbnRlcmZhY2U9Im9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2FtcGxlLmNvbWV0LlByZWNpcGl0YXRpb25TZXJ2aWNlIi8+CisJCQk8dHVzY2FueTpiaW5kaW5nLmNvbWV0Lz4KKwkJPC9zZXJ2aWNlPgorCTwvY29tcG9uZW50PgorCQorPC9jb21wb3NpdGU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjViMDZjNAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWNvbWV0L3dlYXRoZXItd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKQEAgLTAsMCArMSwzNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzx3ZWItYXBwIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUiIHhtbG5zOmoyZWU9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2phdmFlZSIgeG1sbnM6d2ViPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXZhZWUvd2ViLWFwcF8yXzUueHNkIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzMuMC54c2QiIHZlcnNpb249IjMuMCI+CisgIDxkaXNwbGF5LW5hbWU+QXBhY2hlIFR1c2NhbnkgU3RvY2sgQ29tZXQgU2FtcGxlPC9kaXNwbGF5LW5hbWU+CisgIDxmaWx0ZXI+CisgICAgPGZpbHRlci1uYW1lPnR1c2Nhbnk8L2ZpbHRlci1uYW1lPgorICAgIDxmaWx0ZXItY2xhc3M+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0LndlYmFwcC5UdXNjYW55U2VydmxldEZpbHRlcjwvZmlsdGVyLWNsYXNzPgorICAgIDxhc3luYy1zdXBwb3J0ZWQ+dHJ1ZTwvYXN5bmMtc3VwcG9ydGVkPgorICA8L2ZpbHRlcj4KKyAgPGZpbHRlci1tYXBwaW5nPgorICAgIDxmaWx0ZXItbmFtZT50dXNjYW55PC9maWx0ZXItbmFtZT4KKyAgICA8dXJsLXBhdHRlcm4+Lyo8L3VybC1wYXR0ZXJuPgorICA8L2ZpbHRlci1tYXBwaW5nPgorICA8d2VsY29tZS1maWxlLWxpc3Q+CisgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+CisgIDwvd2VsY29tZS1maWxlLWxpc3Q+Cis8L3dlYi1hcHA+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1jb21ldC93ZWF0aGVyLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzg3ZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctY29tZXQvd2VhdGhlci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwKQEAgLTAsMCArMSwxNTcgQEAKKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxodG1sPgorCTxoZWFkPgorCQk8dGl0bGU+QXBhY2hlIFR1c2NhbnkgQ29tZXQgU2FtcGxlPC90aXRsZT4KKwkJPCEtLSBUdXNjYW55IENvbWV0IEphdmFzY3JpcHQgVG9vbGtpdCBpcyBkZXBlbmRlbnQgb24galF1ZXJ5IC0tPgorCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNC4yL2pxdWVyeS5taW4uanMiPjwvc2NyaXB0PgorCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbWV0Q29tcG9uZW50Q29udGV4dC5qcyI+PC9zY3JpcHQ+CisJCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKwkJJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKQorCQl7CisJCQkvLyBJbml0aWFsaXphdGlvbgorCQkJdmFyIGxvY2F0aW9uID0gbmV3IE9iamVjdCgpOworCQkJbG9jYXRpb24uY2l0eSA9IG51bGw7CisJCQlsb2NhdGlvbi5jb3VudHJ5ID0gbnVsbDsKKworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xvY2F0aW9uQnV0dG9uJykuZGlzYWJsZWQgPSB0cnVlOworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBDQnV0dG9uJykuZGlzYWJsZWQgPSB0cnVlOworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBGQnV0dG9uJykuZGlzYWJsZWQgPSB0cnVlOworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2h1bUJ1dHRvbicpLmRpc2FibGVkID0gdHJ1ZTsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmVjaXBCdXR0b24nKS5kaXNhYmxlZCA9IHRydWU7CisKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2NhdGlvbkJ1dHRvbicpLm9uY2xpY2sgPSBmdW5jdGlvbihldmVudCkgeworCQkJCWxvY2F0aW9uLmNpdHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY2l0eScpLnZhbHVlOworCQkJCWxvY2F0aW9uLmNvdW50cnkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY291bnRyeScpLnZhbHVlOworCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2NhdGlvbkJ1dHRvbicpLnZhbHVlID0gJ1N3aXRjaCBsb2NhdGlvbic7CisJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBDQnV0dG9uJykuZGlzYWJsZWQgPSBmYWxzZTsKKwkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGVtcEZCdXR0b24nKS5kaXNhYmxlZCA9IGZhbHNlOworCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdodW1CdXR0b24nKS5kaXNhYmxlZCA9IGZhbHNlOworCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmVjaXBCdXR0b24nKS5kaXNhYmxlZCA9IGZhbHNlOworCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wQ1RleHQnKS50ZXh0Q29udGVudCA9ICdOL0EnOworCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wQ0RhdGUnKS50ZXh0Q29udGVudCA9ICcnOworCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wRlRleHQnKS50ZXh0Q29udGVudCA9ICdOL0EnOworCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wRkRhdGUnKS50ZXh0Q29udGVudCA9ICcnOworCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdodW1UZXh0JykudGV4dENvbnRlbnQgPSAnTi9BJzsKKwkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaHVtRGF0ZScpLnRleHRDb250ZW50ID0gJyc7CisJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWNpcFRleHQnKS50ZXh0Q29udGVudCA9ICdOL0EnOworCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmVjaXBEYXRlJykudGV4dENvbnRlbnQgPSAnJzsKKwkJCX0KKworCQkJLy8gVHVzY2FueSBDb21ldCBzcGVjaWZpYyBBUEkKKwkJCQorCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Nvbm5lY3QnKS5vbmNsaWNrID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICAgICAgICAgICAgICAvKiB0cmFuc3BvcnQgY2FuIGJlIDogbG9uZy1wb2xsaW5nIG9yIHN0cmVhbWluZyAqLworCQkJIAlTQ0EuVHVzY2FueUNvbWV0LmNvbm5lY3QoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RyYW5zcG9ydCcpLnZhbHVlKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29ubmVjdCcpLmRpc2FibGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndHJhbnNwb3J0JykuZGlzYWJsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2NhdGlvbkJ1dHRvbicpLmRpc2FibGVkID0gZmFsc2U7CisJCQl9CisJCQkKKworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBDQnV0dG9uJykub25jbGljayA9IGZ1bmN0aW9uKGV2ZW50KSB7CisJCQkJU0NBLkNvbWV0Q29tcG9uZW50Q29udGV4dC5UZW1wZXJhdHVyZVNlcnZpY2UuZ2V0VGVtcGVyYXR1cmUobG9jYXRpb24sIDEsIHVwZGF0ZVRlbXBDKTsKKwkJCX0KKworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBGQnV0dG9uJykub25jbGljayA9IGZ1bmN0aW9uKGV2ZW50KSB7CisJCQkJU0NBLkNvbWV0Q29tcG9uZW50Q29udGV4dC5UZW1wZXJhdHVyZVNlcnZpY2UuZ2V0VGVtcGVyYXR1cmUobG9jYXRpb24sIDIsIHVwZGF0ZVRlbXBGKTsKKwkJCX0KKworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2h1bUJ1dHRvbicpLm9uY2xpY2sgPSBmdW5jdGlvbihldmVudCkgeworCQkJCVNDQS5Db21ldENvbXBvbmVudENvbnRleHQuSHVtaWRpdHlTZXJ2aWNlLmdldEh1bWlkaXR5KGxvY2F0aW9uLCB1cGRhdGVIdW0pOworCQkJfQorCisJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJlY2lwQnV0dG9uJykub25jbGljayA9IGZ1bmN0aW9uKGV2ZW50KSB7CisJCQkJU0NBLkNvbWV0Q29tcG9uZW50Q29udGV4dC5QcmVjaXBpdGF0aW9uU2VydmljZS5nZXRQcmVjaXBpdGF0aW9uKGxvY2F0aW9uLCB1cGRhdGVQcmVjaXApOworCQkJfQorCQl9KTsKKworCQlmdW5jdGlvbiB1cGRhdGVUZW1wQyhyZXNwb25zZSkgeworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBDVGV4dCcpLnRleHRDb250ZW50ID0gcmVzcG9uc2UuZGF0YTsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wQ0RhdGUnKS50ZXh0Q29udGVudCA9IHJlc3BvbnNlLmRhdGU7CisJCX0KKworCQlmdW5jdGlvbiB1cGRhdGVUZW1wRihyZXNwb25zZSkgeworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RlbXBGVGV4dCcpLnRleHRDb250ZW50ID0gcmVzcG9uc2UuZGF0YTsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZW1wRkRhdGUnKS50ZXh0Q29udGVudCA9IHJlc3BvbnNlLmRhdGU7CisJCX0KKworCQlmdW5jdGlvbiB1cGRhdGVIdW0ocmVzcG9uc2UpIHsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdodW1UZXh0JykudGV4dENvbnRlbnQgPSByZXNwb25zZS5kYXRhOworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2h1bURhdGUnKS50ZXh0Q29udGVudCA9IHJlc3BvbnNlLmRhdGU7CisJCX0KKworCQlmdW5jdGlvbiB1cGRhdGVQcmVjaXAocmVzcG9uc2UpIHsKKwkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwcmVjaXBUZXh0JykudGV4dENvbnRlbnQgPSByZXNwb25zZS5kYXRhOworCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3ByZWNpcERhdGUnKS50ZXh0Q29udGVudCA9IHJlc3BvbnNlLmRhdGU7CisJCX0KKwkJPC9zY3JpcHQ+CisJPC9oZWFkPgorCTxib2R5PgorCQk8ZGl2IGlkPSdzaWRlYmFyJz4KKwkJPGgyPkFwYWNoZSBUdXNjYW55IENvbWV0IFNhbXBsZTwvaDI+CisJCTxsYWJlbD5TZWxlY3QgdHJhbnNwb3J0PC9sYWJlbD4KKyAgICAJPHNlbGVjdCBpZD0idHJhbnNwb3J0Ij4KKyAgICAJCTxvcHRpb24gaWQ9InN0cmVhbWluZyIgdmFsdWU9InN0cmVhbWluZyI+aHR0cCBzdHJlYW1pbmc8L29wdGlvbj4KKwkJCTxvcHRpb24gaWQ9ImxvbmctcG9sbGluZyIgdmFsdWU9ImxvbmctcG9sbGluZyI+bG9uZy1wb2xsaW5nPC9vcHRpb24+CisgICAgCTwvc2VsZWN0PgorICAgIAk8aW5wdXQgaWQ9J2Nvbm5lY3QnIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0Nvbm5lY3QnLz4KKwkJPGgzPldlYXRoZXIgTW9uaXRvcjwvaDM+CisJCTxwLz4KKwkJPHRhYmxlPgorCQkJPHRyPgorCQkJCTx0ZD5DaXR5PC90ZD4KKwkJCQk8dGQ+PGlucHV0IHR5cGU9InRleHQiIGlkPSdjaXR5JyB2YWx1ZT0nQnJhc292Jy8+PC90ZD4KKwkJCTwvdHI+CisJCQk8dHI+CisJCQkJPHRkPkNvdW50cnk8L3RkPgorCQkJCTx0ZD48aW5wdXQgdHlwZT0idGV4dCIgaWQgPSdjb3VudHJ5JyB2YWx1ZT0nUm9tYW5pYScvPjwvdGQ+CisJCQk8L3RyPgorCQk8L3RhYmxlPgorCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0nbG9jYXRpb25CdXR0b24nIHZhbHVlPSdTZXQgbG9jYXRpb24nLz4KKwkJPHAvPgorCQk8dGFibGU+CisJCQk8dHI+CisJCQkJPHRoIGFsaWduPSJsZWZ0Ij5UZW1wZXJhdHVyZSAoQ2Vsc2l1cyk6PC90aD4KKwkJCQk8dGQ+PHNwYW4gaWQ9J3RlbXBDVGV4dCc+Ti9BPC9zcGFuPjwvdGQ+CisJCQkJPHRkPjxpbnB1dCB0eXBlPSdidXR0b24nIGlkPSd0ZW1wQ0J1dHRvbicgdmFsdWU9IlVwZGF0ZSIvPjwvdGQ+CisJCQkJPHRkPjxzcGFuIGlkPSd0ZW1wQ0RhdGUnPjwvc3Bhbj4KKwkJCTwvdHI+CisJCQk8dHI+CisJCQkJPHRoIGFsaWduPSJsZWZ0Ij5UZW1wZXJhdHVyZSAoRmFocmVuaGVpdCk6PC90aD4KKwkJCQk8dGQ+PHNwYW4gaWQ9J3RlbXBGVGV4dCc+Ti9BPC9zcGFuPjwvdGQ+CisJCQkJPHRkPjxpbnB1dCB0eXBlPSdidXR0b24nIGlkPSd0ZW1wRkJ1dHRvbicgdmFsdWU9IlVwZGF0ZSIvPjwvdGQ+CisJCQkJPHRkPjxzcGFuIGlkPSd0ZW1wRkRhdGUnPjwvc3Bhbj4KKwkJCTwvdHI+CisJCQk8dHI+CisJCQkJPHRoIGFsaWduPSJsZWZ0Ij5IdW1pZGl0eTo8L3RoPgorCQkJCTx0ZD48c3BhbiBpZD0naHVtVGV4dCc+Ti9BPC9zcGFuPjwvdGQ+CisJCQkJPHRkPjxpbnB1dCB0eXBlPSdidXR0b24nIGlkPSdodW1CdXR0b24nIHZhbHVlPSJVcGRhdGUiLz48L3RkPgorCQkJCTx0ZD48c3BhbiBpZD0naHVtRGF0ZSc+PC9zcGFuPgorCQkJPC90cj4KKwkJCTx0cj4KKwkJCQk8dGggYWxpZ249ImxlZnQiPlByZWNpcGl0YXRpb24gcHJvYmFiaWxpdHk6PC90aD4KKwkJCQk8dGQ+PHNwYW4gaWQ9J3ByZWNpcFRleHQnPk4vQTwvc3Bhbj48L3RkPgorCQkJCTx0ZD48aW5wdXQgdHlwZT0nYnV0dG9uJyBpZD0ncHJlY2lwQnV0dG9uJyB2YWx1ZT0iVXBkYXRlIi8+PC90ZD4KKwkJCQk8dGQ+PHNwYW4gaWQ9J3ByZWNpcERhdGUnPjwvc3Bhbj4KKwkJCTwvdHI+CisJCTwvdGFibGU+CisJCTwvZGl2PgorCTwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWptcy9oZWxsb3dvcmxkLXdlYmFwcC9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MGQ1ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvUkVBRE1FCkBAIC0wLDAgKzEsMTMxIEBACitKTVMgSGVsbG9Xb3JsZCBTYW1wbGUKKz09PT09PT09PT09PT09PT09PT09PQorVGhpcyBzYW1wbGUgZGVtb25zdHJhdGVzIGEgc2ltcGxlIHdlYmFwcCBjb250YWluaW5nIGEgaGVsbG8gd29ybGQgIHN0eWxlIGNsaWVudAorYW5kIHNlcnZpY2UgdXNpbmcgdGhlIEpNUyBiaW5kaW5nIGZvciByZXF1ZXN0LXJlc3BvbnNlIHN0eWxlIG1lc3NhZ2luZy4gCisKK1RoZSBSRUFETUUgaW4gdGhlIHNhbXBsZXMgZGlyZWN0b3J5ICh0aGUgZGlyZWN0b3J5IHRocmVlIGRpcmVjdG9yaWVzIGFib3ZlIHRoaXMpIHByb3ZpZGVzIAorZ2VuZXJhbCBpbnN0cnVjdGlvbnMgYWJvdXQgYnVpbGRpbmcgYW5kIHJ1bm5pbmcgc2FtcGxlcy4gVGFrZSBhIGxvb2sgdGhlcmUgCitmaXJzdC4gCisKK0FzIHRoaXMgc2FtcGxlIHByb3ZpZGVzIGEgd2ViIGFwcCB0aGVyZSBpcyBhIG1hbnVhbCBzdGVwIHdoZXJlIHRoZSBXQVIgZmlsZQordGhhdCBjb250YWlucyB0aGUgc2FtcGxlIGlzIGNvcGllZCB0byB5b3VyIHdlYiBhcHAgY29udGFpbmVyLiBJZiB5b3UganVzdCB3YW50IAordG8gZ2l2ZSB0aGlzIHNhbXBsZSBhIGdvIGRlcGxveSB0aGUgV0FSIGZpbGUgKHRhcmdldC9oZWxsb3dvcmxkLWptcy53YXIgKQordG8geW91IHdlYiBhcHBsaWNhdGlvbiBzZXJ2ZXIuIEFsdGVybmF0ZXZseSwgdGhlIHNhbXBsZSBwb20ueG1sIGlzIGNvbmZpZ3VyZWQKK3dpdGggdGhlIEpldHR5IHBsdWdpbiBzbyB5b3UgY2FuIHJ1biB0aGUgaXQgd2l0aCBKZXR0eSBieSBzaW1wbHkgZG9pbmcgIm12biBqZXR0eTpydW4iLgorCitPbmNlIHRoZSB3ZWIgYXBwIGlzIGRlcGxveWVkIHVzZSB5b3VyIGJyb3dzZXIgdG8gdmlzaXQgdGhlIGZvbGxvd2luZyBVUkw7CisKK2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9oZWxsb3dvcmxkLWptcworCitUaGUgcG9ydCBhbmQgaG9zdG5hbWUgd2lsbCBvZiBjb3Vyc2UgdmFyeSBkZXBlbmRpbmcgb24geW91ciBsb2NhbCBpbnN0YWxsYXRpb24uIAorCitDb25maWd1cmluZyB0aGUgSk1TIHJlc291cmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIHNhbXBsZSByZXF1aXJlcyBKTVMgcmVzb3VyY2VzIGJlIG1hbnVhbGx5IGNvbmZpZ3VyZWQgaW4gdGhlIHNlcnZlciBlbnZpcm9ubWVudCwgdGhlc2UgYXJlOiAKKworLSBhIEpNUyBjb25uZWN0aW9uIGZhY3RvcnkgbmFtZWQgIkNvbm5lY3Rpb25GYWN0b3J5IgorLSBhIEpNUyBxdWV1ZSBuYW1lZCAiSGVsbG9Xb3JsZFNlcnZpY2UiCisKK1NlZSB0aGUgZm9sbG93aW5nIGZvciBob3cgdG8gZGVmaW5lIHRoZXNlIHJlc291cmNlcyBkZXBlbmRpbmcgb24gdGhlIGFwcGxpY2F0aW9uIHNlcnZlciBiZWluZyB1c2VkOgorCitUdXNjYW55IHdpdGggZW1iZWRkZWQgQWN0aXZlTVEgYnJva2VyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworQXBhY2hlIFRvbWNhdAorLS0tLS0tLS0tLS0tLQorCitObyBjb25maWd1cmF0aW9uIGlzIG5lY2Vzc2FyeSBmb3IgVG9tY2F0IGFzIHRoZSBzYW1wbGUgV0FSIGluY2x1ZGVzIGV2ZXJ5dGhpbmcgcHJlLWNvbmZpZ3VyZWQgdG8gcnVuIAorYW4gQWN0aXZlTVEgZW1iZWRkZWQgSk1TIGJyb2tlciBhbmQgdG8gY29uZmlndXJlIHRoZSBKTVMgcmVzb3VyY2VzIGluIEpOREkuCisKK1RoZSBKTkRJIHJlc291cmNlcyBhcmUgY29uZmlndXJlZCBpbiB0aGUgTUVUQS1JTkYvY29tdGV4dC54bWwgZmlsZSwgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gcnVubmluZworQWN0aXZlTVEgaW4gVG9tY2F0IHNlZTogaHR0cDovL2FjdGl2ZW1xLmFwYWNoZS5vcmcvdG9tY2F0Lmh0bWwKKworCitBcGFjaGUgR2Vyb25pbW8KKy0tLS0tLS0tLS0tLS0tLQorCitGb3IgQXBhY2hlIEdlcm9uaW1vIDIuMC4xICgyLjAuMiBmYWlscyB0byBkZWZpbmUgSk1TIHJlc291cmNlcyBmb3IgbWUpCisKK0xvZ29uIHRvIHRoZSBHZXJvbmltbyBTZXJ2ZXIgQ29uc29sZSAoaHR0cDovL2xvY2FsaG9zdDo4MDgwL2NvbnNvbGUsIHVpZCBzeXN0ZW0sIHBzd2QgbWFuYWdlcikKKworSW4gdGhlIENvbnNvbGUgTmF2aWdhdGlvbiBvbiB0aGUgbGVmdCB1bmRlciBTZXJ2aWNlcyBjbGljayBKTVMgUmVzb3VyY2VzCisKK0F0IHRoZSBib3R0b20gb2YgdGhlIEpNUyBSZXNvdXJjZXMgcGFuZWwgY2xpY2sgdW5kZXIgQ3JlYXRlIGEgbmV3IEpNUyBSZXNvdXJjZSBHcm91cCBjbGljayBGb3IgQWN0aXZlTVEKKworSW4gUmVzb3VyY2UgR3JvdXAgTmFtZSBlbnRlciAiTXlSR04iIGFuZCBjbGljayBuZXh0CisKK0F0IEpNUyBSZXNvdXJjZSBHcm91cCBjbGljayBBZGQgQ29ubmVjdGlvbiBGYWN0b3J5CisKK0ZvciBKTVMgRmFjdG9yeSBUeXBlIGNob29zZSBqYXZheC5qbXMuQ29ubmVjdGlvbkZhY3RvcnkgYW5kIGNsaWNrIE5leHQKKworSW4gQ29ubmVjdGlvbiBGYWN0b3J5IE5hbWUgZW50ZXIgIkNvbm5lY3Rpb25GYWN0b3J5IiBhbmQgY2xpY2sgTmV4dAorCitDbGljayBBZGQgZGVzdGluYXRpb24KKworRm9yIEpNUyBEZXN0aW5hdGlvbiBUeXBlIGNob29zZSBqYXZheC5qbXMuUXVldWUgYW5kIGNsaWNrIE5leHQJCisJCitFbnRlciAiSGVsbG9Xb3JsZFNlcnZpY2UiIGZvciBib3RoIE1lc3NhZ2UgRGVzdGluYXRpb24gTmFtZSBhbmQgUGh5c2ljYWxOYW1lIGFuZCBjbGljayBOZXh0IAkKKworQ2xpY2sgRGVwbG95IE5vdworCitUaGF0cyBpdCwgeW91J3JlIGRvbmUuCisKKworV2ViU3BoZXJlIAorLS0tLS0tLS0tCisKK1RvIGRlZmluZSB0aGUgSk1TIHJlc291cmNlcyBpbiBhIG5ldyBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyIDYuMSBpbnN0YWxsYXRpb246CisKKzEpIEZpcnN0IGRlZmluZSBhIFNlcnZpY2UgaW50ZWdyYXRpb24gYnVzOgorCitMb2dvbiB0byB0aGUgV2ViU3BoZXJlIEludGVncmF0ZWQgU29sdXRpb25zIENvbnNvbGUgKGh0dHA6Ly9sb2NhbGhvc3Q6OTA2MC9pYm0vY29uc29sZSkKKworT24gdGhlIExlZnQgaGFuZCBtZW51IGV4cGFuZCBTZXJ2aWNlIGludGVncmF0aW9uLCBhbmQgY2xpY2sgb24gQnVzZXMuCisKK0luIHRoZSBCdXNlcyBwYW5lbCBjbGljayBvbiBOZXcKKworRW50ZXIgYSBuYW1lIGZvciB0aGUgYnVzLCBlZyBNeUJ1cywgYW5kIGNsaWNrIE5leHQsIGFuZCB0aGVuIGNsaWNrIEZpbmlzaCBhbmQgU2F2ZSB0aGUgY2hhbmdlcy4KKworSW4gdGhlIEJ1c2VzIHBhbmVsIGNsaWNrIG9uIE15QnVzCisKK0ZpbmQgdGhlIFRvcG9sb2d5IHNlY2lvbiBhbmQgY2xpY2sgb24gQnVzIG1lbWJlcnMKKworQ2xpY2sgb24gQWRkLCBsZWF2ZSB0aGUgZGVmYXVsdHMgYW5kIGNsaWNrIE5leHQsIE5leHQsIE5leHQsIEZpbmlzaCwgYW5kIFNhdmUgdGhlIGNoYW5nZXMuCisKK1Jlc3RhcnQgV2ViU3BoZXJlIGFuZCB3aGVuIGJhY2sgdXAgbG9nb24gYmFjayBvbiB0byB0aGUgSW50ZWdyYXRlZCBTb2x1dGlvbnMgQ29uc29sZQorIAorMikgTm93IGRlZmluZSB0aGUgSk1TIHJlc2NvdXJjZXMKKworT24gdGhlIExlZnQgaGFuZCBtZW51IGV4cGFuZCBSZXNvdXJjZXMsIGFuZCBKTVMgYW5kIGNsaWNrIG9uIENvbm5lY3Rpb24gRmFjb3Rvcmllcy4gCisKK0luIHRoZSBDb25uZWN0aW9uIGZhY3RvcmllcyBwYW5lbCBjbGljayBOZXcuCisKK0xlYXZlIHRoZSBEZWZhdWx0IG1lc3NhZ2luZyBwcm92aWRlciBhbmQgY2xpY2sgT0sKKworRW50ZXIgIkNvbm5lY3Rpb25GYWN0b3J5IiBpbiB0aGUgTmFtZSBhbmQgSk5ESSBuYW1lIGFuZCBpbiB0aGUgQnVzIG5hbWUgaW4gdGhlIENvbm5lY3Rpb24gcGFuZSBjaG9vc2UgTXlCdXMgYW5kIGNsaWNrIE9LCisKK09uIHRoZSBMZWZ0IGhhbmQgbWVudSBpbiBKTVMgY2xpY2sgb24gUXVldWVzIAorCitJbiB0aGUgUXVldWVzIHBhbmVsIGNsaWNrIE5ldywgYWNjZXB0IHRoZSBkZWZhdWx0cyBhbmQgY2xpY2sgT0sKKworRW50ZXIgIkhlbGxvV29ybGRTZXJ2aWNlIiBmb3IgdGhlIE5hbWUgYW5kIEpOREkgbmFtZSBhbmQgaW4gdGhlIEJ1cyBuYW1lIGluIHRoZSBDb25uZWN0aW9uIHBhbmUgY2hvb3NlIE15QnVzLAorYW5kIHRoZW4gaW4gdGhlIFF1ZXVlIG5hbWUgZHJvcCBkb3duIGxpc3QgY2hvb3NlICJDcmVhdGUgU0lCIGRlc3RpbmF0aW9uIgorCitJbiB0aGUgU2V0IHF1ZXVlIGF0dHJpYnV0ZXMgcGFuZWwgZW50ZXIgIkhlbGxvV29ybGRTZXJ2aWNlIiBmb3IgdGhlIElkZW50aWZpZXIgYW5kIGNsaWNrIE5leHQsIE5leHQsIGFuZCBGaW5pc2gKKworVGhhdCBzaG91bGQgdGFrZSB5b3UgYmFjayB0byB0aGUgUXVldWVzIHBhbmVsIHdoZXJlIHlvdSBjYW4gY2xpY2sgT0sgdG8gY3JlYXRlIHRoZSBuZXcgSk1TIHF1ZXVlLgorCitTYXZlIHRoZSBjaGFuZ2VzCisKK1Jlc3RhcnQgV2ViU3BoZXJlIGFuZCB5b3UncmUgZG9uZS4KKworCisKK090aGVycy4uLgorLS0tLS0tLS0tCisKKworCisgCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWptcy9oZWxsb3dvcmxkLXdlYmFwcC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNjYwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvcG9tLnhtbApAQCAtMCwwICsxLDk2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnNhbXBsZS1iaW5kaW5nLWptcy1oZWxsb3dvcmxkLXdlYmFwcDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgYmluZGluZy5qbXMgSGVsbG9Xb3JsZCBXZWJBcHA8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXMtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5hY3RpdmVtcTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWFsbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjUuMy4wPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgIDxmaW5hbE5hbWU+aGVsbG93b3JsZC1qbXM8L2ZpbmFsTmFtZT4KKyAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPgorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWpldHR5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICA8dmVyc2lvbj42LjEuMTg8L3ZlcnNpb24+CisgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPGNvbnRleHRQYXRoPmhlbGxvd29ybGQtam1zPC9jb250ZXh0UGF0aD4KKyAgICAgICAgICAgICAgICA8c3RvcEtleT5mb288L3N0b3BLZXk+CisgICAgICAgICAgICAgICAgPHN0b3BQb3J0Pjk5OTk8L3N0b3BQb3J0PgorICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgIDxpZD5zdGFydC1qZXR0eTwvaWQ+CisgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtdGVzdC1jbGFzc2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnJ1bjwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICA8c2NhbkludGVydmFsU2Vjb25kcz4wPC9zY2FuSW50ZXJ2YWxTZWNvbmRzPgorICAgICAgICAgICAgICAgICAgICAgICA8ZGFlbW9uPnRydWU8L2RhZW1vbj4KKyAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3IgaW1wbGVtZW50YXRpb249Im9yZy5tb3J0YmF5LmpldHR5Lm5pby5TZWxlY3RDaGFubmVsQ29ubmVjdG9yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvcnQ+ODA4NTwvcG9ydD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3I+CisgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9ycz4KKyAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICA8aWQ+c3RvcC1qZXR0eTwvaWQ+CisgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByZXBhcmUtcGFja2FnZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zdG9wPC9nb2FsPgorICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qbXMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZENsaWVudC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctam1zL2hlbGxvd29ybGQtd2ViYXBwL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGRDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtam1zL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGRDbGllbnQuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctam1zL2hlbGxvd29ybGQtd2ViYXBwL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGRDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtam1zL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtam1zL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWptcy9oZWxsb3dvcmxkLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qbXMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWptcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctam1zL2hlbGxvd29ybGQtd2ViYXBwL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qbXMvc3JjL21haW4vd2ViYXBwL01FVEEtSU5GL2NvbnRleHQueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctam1zL2hlbGxvd29ybGQtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9jb250ZXh0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtam1zL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9jb250ZXh0LnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctam1zL2hlbGxvd29ybGQtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9NRVRBLUlORi9jb250ZXh0LnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtam1zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pldHR5LWVudi54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvamV0dHktZW52LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtam1zL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pldHR5LWVudi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWptcy9oZWxsb3dvcmxkLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qZXR0eS1lbnYueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWptcy9oZWxsb3dvcmxkLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZDhjNzAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKy0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZXMiDQorICAgICAgICAgICBuYW1lPSJIZWxsb3dvcmxkIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJmb28iPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLndlYiB3ZWItdXJpPSIiLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZSIgdGFyZ2V0PSJIZWxsb1dvcmxkQ2xpZW50Q29tcG9uZW50Ii8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRDbGllbnRDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9InNhbXBsZS5IZWxsb1dvcmxkQ2xpZW50Ii8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImhlbGxvV29ybGRSZWYiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpxdWV1ZTpIZWxsb1dvcmxkU2VydmljZSIvPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJzYW1wbGUuSGVsbG9Xb3JsZFNlcnZpY2VJbXBsIiAvPg0KKwkgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcyAvPg0KKyAgICAgICAgPC9zZXJ2aWNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qbXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWptcy9oZWxsb3dvcmxkLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qbXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctam1zL2hlbGxvd29ybGQtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWptcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctam1zL2hlbGxvd29ybGQtd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9oZWxsby5qc3AKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWptcy9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvaGVsbG93b3JsZC13ZWJhcHAvc3JjL21haW4vd2ViYXBwL2hlbGxvLmpzcApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctam1zL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qbXMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzNmZDk2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctam1zL3BvbS54bWwKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGUtYmluZGluZy1qbXM8L2FydGlmYWN0SWQ+DQorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgYmluZGluZy5qbXM8L25hbWU+DQorDQorICAgIDxwcm9maWxlcz4NCisgICAgICAgIDxwcm9maWxlPg0KKyAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4NCisgICAgICAgICAgICA8YWN0aXZhdGlvbj4NCisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+DQorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPg0KKyAgICAgICAgICAgIDxtb2R1bGVzPg0KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmhlbGxvd29ybGQtd2ViYXBwPC9tb2R1bGU+DQorICAgICAgICAgICAgPC9tb2R1bGVzPg0KKyAgICAgICAgPC9wcm9maWxlPg0KKyAgICA8L3Byb2ZpbGVzPiAgICANCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvUkVBRE1FCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1YmM5YwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vUkVBRE1FCkBAIC0wLDAgKzEsMjYgQEAKK0NhbGN1bGF0b3IgU2FtcGxlIENvbnRyaWJ1dGlvbg0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KK1RoaXMgc2FtcGxlIGNvbnRyaWJ1dGlvbiBpbXBsZW1lbnRzIGEgc2ltcGxlIGNhbGN1bGF0b3IgdXNpbmcgU0NBIGNvbXBvbmVudHMuDQorDQorVGhlIFJFQURNRSBpbiB0aGUgPGRpc3RyaWJ1dGlvbi11bnBhY2stZGlyPi9zYW1wbGVzIGRpcmVjdG9yeSBwcm92aWRlcyANCitnZW5lcmFsIGluc3RydWN0aW9ucyBhYm91dCBidWlsZGluZyBhbmQgcnVubmluZyBzYW1wbGVzLiAoIHdoZXJlDQorZGlzdHJpYnV0aW9uLXVucGFjay1kaXIgaXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB5b3UgdW5wYWNrZWQgdGhlIHR1c2NhbnkNCitiaW5hcnkgZGlzdHJpYnV0aW9uIGFyY2hpdmUpIFRha2UgYSBsb29rIHRoZXJlIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGxhdW5jaA0KK3RoaXMgc2FtcGxlIGNvbnRyaWJ1dGlvbi4gDQorDQorU2FtcGxlIE92ZXJ2aWV3DQorLS0tLS0tLS0tLS0tLS0tDQorVGhlIHNhbXBsZSBwcm92aWRlcyBhIHNpbmdsZSBjYWxjdWxhdG9yIHNlcnZpY2Ugd2l0aCBhIGRlZmF1bHQgU0NBIChqYXZhKSANCitiaW5kaW5nLiBUaGUgQ2FsY3VsYXRvckNsaWVudCBleGVyY2lzZXMgdGhpcyBpbnRlcmZhY2UgYnkgY2FsbGluZyBhZGQsIA0KK3N1YnRyYWN0LCBtdWx0aXBseSBhbmQgZGl2aWRlIG9wZXJhdGlvbnMuIFRoaXMgcmVzdWx0cyBpbiBtZXNzYWdlcyBwYXNzaW5nIHRvIA0KK3RoZSBhcHByb3ByaWF0ZSBjb21wb25lbnRzIGluIHRoZSBjb21wb3NpdGUgYWNyb3NzIHRoZSBsb2NhbCB3aXJlcy4NCisNCitBbW9uZ3N0IHRoZSBvdGhlciBvdXRwdXQgY3JlYXRlZCBieSB0aGUgbGF1bmNoZXIvY29udHJpYnV0aW9uIGNvbWJpbmF0aW9uLCAgeW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQgLi4uDQorDQorcnVuOg0KKyAgICAgW2phdmFdIDMgKyAyPTUuMA0KKyAgICAgW2phdmFdIDMgLSAyPTEuMA0KKyAgICAgW2phdmFdIDMgKiAyPTYuMA0KKyAgICAgW2phdmFdIDMgLyAyPTEuNQ0KKw0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vYnVpbGQueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBhYmI2NQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vYnVpbGQueG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKw0KKzxwcm9qZWN0IG5hbWU9InNhbXBsZS1iaW5kaW5nLWpzb25ycGMtY2FsY3VsYXRvci1jb250cmlidXRpb24iIGRlZmF1bHQ9ImNvbXBpbGUiPg0KKyAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4vLi4iLz4NCisgICAgPHByb3BlcnR5IG5hbWU9Imphci5uYW1lIiAgIHZhbHVlPSJzYW1wbGUtYmluZGluZy1qc29ucnBjLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uLmphciIgLz4NCisgICAgDQorICAgIDxlY2hvPiR7dHVzY2FueS5ob21lfTwvZWNobz4NCisNCisgICAgPHRhcmdldCBuYW1lPSJpbml0Ij4gDQorICAgICAgPGRlbGV0ZSBxdWlldD0idHJ1ZSIgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+IA0KKyAgICAgICAgIDxmaWxlc2V0IGRpcj0idGFyZ2V0Ii8+IA0KKyAgICAgIDwvZGVsZXRlPiANCisgICAgICA8bWtkaXIgZGlyPSJ0YXJnZXQvY2xhc3NlcyIvPiANCisgICAgPC90YXJnZXQ+DQorICAgIA0KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiPg0KKyAgICAgIDxqYXZhYyBzcmNkaXI9InNyYy9tYWluL2phdmEiIA0KKyAgICAgICAgICAgICBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIgDQorICAgICAgICAgICAgIGRlYnVnPSJvbiINCisgICAgICAgICAgICAgc291cmNlPSIxLjUiDQorICAgICAgICAgICAgIHRhcmdldD0iMS41Ig0KKyAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+IA0KKyAgICAgICAgIDxjbGFzc3BhdGg+DQorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vbGliIj4NCisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LXNjYS1hcGktKi5qYXIiIC8+DQorICAgICAgICAgICAgPC9maWxlc2V0Pg0KKyAgICAgICAgIDwvY2xhc3NwYXRoPg0KKyAgICAgIDwvamF2YWM+IA0KKyAgICAgIDxjb3B5IHRvZGlyPSJ0YXJnZXQvY2xhc3NlcyI+IA0KKyAgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL21haW4vcmVzb3VyY2VzIi8+IA0KKyAgICAgIDwvY29weT4gDQorICAgICAgPGphciBkZXN0ZmlsZT0idGFyZ2V0LyR7amFyLm5hbWV9IiBiYXNlZGlyPSJ0YXJnZXQvY2xhc3NlcyI+IA0KKyAgICAgICAgIDxtYW5pZmVzdD4NCisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik1haW4tQ2xhc3MiIHZhbHVlPSIke21haW4uY2xhc3N9IiAvPiANCisgICAgICAgICA8L21hbmlmZXN0Pg0KKyAgICAgIDwvamFyPiAgICAgICAgDQorICAgIDwvdGFyZ2V0Pg0KKzwvcHJvamVjdD4NCisNCisNCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlNDIyMQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vcG9tLnhtbApAQCAtMCwwICsxLDU4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtYmluZGluZy1qc29ucnBjLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIGJpbmRpbmcuanNvbnJwYyBDYWxjdWxhdG9yIENvbnRyaWJ1dGlvbjwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgICAgIDxwbHVnaW5zPg0KKyAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tdHVzY2FueS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgPC9wbHVnaW4+DQorICAgICAgIDwvcGx1Z2lucz4NCisgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRCZWFuLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRCZWFuLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIzOWU5NgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZEJlYW4uamF2YQpAQCAtMCwwICsxLDg4IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK3B1YmxpYyBjbGFzcyBBZGRCZWFuIHsNCisNCisgICAgcHJvdGVjdGVkIGRvdWJsZSBuMTsNCisgICAgcHJvdGVjdGVkIGRvdWJsZSBuMjsNCisgICAgcHJvdGVjdGVkIGRvdWJsZSBuMzsNCisgICAgDQorICAgIHByb3RlY3RlZCBCb29sZWFuIGI7DQorICAgIHByb3RlY3RlZCBTdHJpbmcgczsNCisgICAgcHJvdGVjdGVkIGludCB4Ow0KKyAgICBwcm90ZWN0ZWQgSW50ZWdlciB5Ow0KKyAgICANCisgICAgcHVibGljIGRvdWJsZSBnZXROMSgpIHsNCisgICAgICAgIHJldHVybiBuMTsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIHZvaWQgc2V0TjEoZG91YmxlIG4xKSB7DQorICAgICAgICB0aGlzLm4xID0gbjE7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBkb3VibGUgZ2V0TjIoKSB7DQorICAgICAgICByZXR1cm4gbjI7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIHNldE4yKGRvdWJsZSBuMikgew0KKyAgICAgICAgdGhpcy5uMiA9IG4yOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgZG91YmxlIGdldE4zKCkgew0KKyAgICAgICAgcmV0dXJuIG4zOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBzZXROMyhkb3VibGUgbjMpIHsNCisgICAgICAgIHRoaXMubjMgPSBuMzsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIEJvb2xlYW4gZ2V0QigpIHsNCisgICAgICAgIHJldHVybiBiOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBzZXRCKEJvb2xlYW4gYikgew0KKyAgICAgICAgdGhpcy5iID0gYjsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIFN0cmluZyBnZXRTKCkgew0KKyAgICAgICAgcmV0dXJuIHM7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIHNldFMoU3RyaW5nIHMpIHsNCisgICAgICAgIHRoaXMucyA9IHM7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBpbnQgZ2V0WCgpIHsNCisgICAgICAgIHJldHVybiB4Ow0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBzZXRYKGludCB4KSB7DQorICAgICAgICB0aGlzLnggPSB4Ow0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgSW50ZWdlciBnZXRZKCkgew0KKyAgICAgICAgcmV0dXJuIHk7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgc2V0WShJbnRlZ2VyIHkpIHsNCisgICAgICAgIHRoaXMueSA9IHk7DQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTg0NGQKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7DQorDQorLyoqDQorICogVGhlIEFkZCBzZXJ2aWNlIGludGVyZmFjZQ0KKyAqLw0KK0BSZW1vdGFibGUNCitwdWJsaWMgaW50ZXJmYWNlIEFkZFNlcnZpY2Ugew0KKw0KKyAgICBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisgICAgQWRkQmVhbiBhZGRDb21wbGV4UGFyYW0oQWRkQmVhbiBhQmVhbik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYWJmYTYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDMgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQWRkIHNlcnZpY2UNCisgKi8NCitAU2VydmljZShBZGRTZXJ2aWNlLmNsYXNzKQ0KK3B1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEFkZFNlcnZpY2Ugew0KKw0KKyAgICBwdWJsaWMgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMikgew0KKyAgICAgICAgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoImNhbGN1bGF0b3IiKTsNCisgICAgICAgIGxvZ2dlci5sb2coTGV2ZWwuRklORVNULCAiQWRkaW5nICIgKyBuMSArICIgYW5kICIgKyBuMik7DQorICAgICAgICByZXR1cm4gbjEgKyBuMjsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIEFkZEJlYW4gYWRkQ29tcGxleFBhcmFtKEFkZEJlYW4gYUJlYW4pIHsNCisgICAgICAgIGFCZWFuLnNldE4zKGFCZWFuLmdldE4xKCkgKyBhQmVhbi5nZXROMigpKTsNCisgICAgICAgIHJldHVybiBhQmVhbjsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yQ2xpZW50LmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yQ2xpZW50LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRmMWYzMQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpAQCAtMCwwICsxLDUyIEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkVhZ2VySW5pdDsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Jbml0Ow0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TY29wZTsNCisNCisvKioNCisgKiBUaGlzIGNsaWVudCBwcm9ncmFtIHNob3dzIGhvdyB0byBjcmVhdGUgYW4gU0NBIHJ1bnRpbWUsIHN0YXJ0IGl0LA0KKyAqIGFuZCBsb2NhdGUgYW5kIGludm9rZSBhIFNDQSBjb21wb25lbnQNCisgKi8NCitAU2NvcGUoIkNPTVBPU0lURSIpDQorQEVhZ2VySW5pdA0KK3B1YmxpYyBjbGFzcyBDYWxjdWxhdG9yQ2xpZW50IHsNCisNCisgICAgcHJpdmF0ZSBDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yU2VydmljZTsNCisNCisgICAgQFJlZmVyZW5jZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRDYWxjdWxhdG9yU2VydmljZShDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yU2VydmljZSkgew0KKyAgICAgICAgdGhpcy5jYWxjdWxhdG9yU2VydmljZSA9IGNhbGN1bGF0b3JTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBJbml0DQorICAgIHB1YmxpYyB2b2lkIGNhbGN1bGF0ZSgpIHsNCisgICAgICAgIC8vIENhbGN1bGF0ZQ0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTQ0EgQVBJIENsYXNzTG9hZGVyOiAiICsgUmVmZXJlbmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOw0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzICsgMj0iICsgY2FsY3VsYXRvclNlcnZpY2UuYWRkKDMsIDIpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAtIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLnN1YnRyYWN0KDMsIDIpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAqIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLm11bHRpcGx5KDMsIDIpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAvIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLmRpdmlkZSgzLCAyKSk7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhlZWEzOQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7DQorDQorLyoqDQorICogVGhlIENhbGN1bGF0b3Igc2VydmljZSBpbnRlcmZhY2UuDQorICovDQorQFJlbW90YWJsZQ0KK3B1YmxpYyBpbnRlcmZhY2UgQ2FsY3VsYXRvclNlcnZpY2Ugew0KKw0KKyAgICBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCisgICAgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCisgICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCisgICAgZG91YmxlIGRpdmlkZShkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMyY2M3MwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsODYgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNlcnZpY2U7DQorDQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIENhbGN1bGF0b3Igc2VydmljZS4NCisgKi8NCitAU2VydmljZShDYWxjdWxhdG9yU2VydmljZS5jbGFzcykNCitwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclNlcnZpY2VJbXBsIGltcGxlbWVudHMgQ2FsY3VsYXRvclNlcnZpY2Ugew0KKw0KKyAgICBwcml2YXRlIEFkZFNlcnZpY2UgYWRkU2VydmljZTsNCisgICAgcHJpdmF0ZSBTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3RTZXJ2aWNlOw0KKyAgICBwcml2YXRlIE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2U7DQorICAgIHByaXZhdGUgRGl2aWRlU2VydmljZSBkaXZpZGVTZXJ2aWNlOw0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyB2b2lkIHNldEFkZFNlcnZpY2UoQWRkU2VydmljZSBhZGRTZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLmFkZFNlcnZpY2UgPSBhZGRTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0U3VidHJhY3RTZXJ2aWNlKFN1YnRyYWN0U2VydmljZSBzdWJ0cmFjdFNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMuc3VidHJhY3RTZXJ2aWNlID0gc3VidHJhY3RTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0RGl2aWRlU2VydmljZShEaXZpZGVTZXJ2aWNlIGRpdmlkZVNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMuZGl2aWRlU2VydmljZSA9IGRpdmlkZVNlcnZpY2U7DQorICAgIH0NCisNCisgICAgQFJlZmVyZW5jZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRNdWx0aXBseVNlcnZpY2UoTXVsdGlwbHlTZXJ2aWNlIG11bHRpcGx5U2VydmljZSkgew0KKyAgICAgICAgdGhpcy5tdWx0aXBseVNlcnZpY2UgPSBtdWx0aXBseVNlcnZpY2U7DQorICAgIH0NCisNCisgICAgcHVibGljIGRvdWJsZSBhZGQoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIEFkZEJlYW4gYUJlYW4gPSBuZXcgQWRkQmVhbigpOw0KKyAgICAgICAgLy8gU28gZGF0YSB0byB0ZXN0IGRpZmZlcmVudCB0eXBlcw0KKyAgICAgICAgYUJlYW4uc2V0Qih0cnVlKTsNCisgICAgICAgIGFCZWFuLnNldFMoIkZyZWQiKTsNCisgICAgICAgIGFCZWFuLnNldFgoMjcpOw0KKyAgICAgICAgYUJlYW4uc2V0WSg1OCk7DQorICAgICAgICANCisgICAgICAgIC8vIHRoZSBudW1iZXJzIHRvIGJlIGFkZGVkDQorICAgICAgICBhQmVhbi5zZXROMShuMSk7DQorICAgICAgICBhQmVhbi5zZXROMihuMik7DQorICAgICAgICANCisgICAgICAgIGFCZWFuID0gYWRkU2VydmljZS5hZGRDb21wbGV4UGFyYW0oYUJlYW4pOw0KKyAgICAgICAgDQorICAgICAgICByZXR1cm4gYUJlYW4uZ2V0TjMoKTsNCisgICAgICAgIC8vcmV0dXJuIGFkZFNlcnZpY2UuYWRkKG4xLCBuMik7DQorICAgIH0NCisNCisgICAgcHVibGljIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMikgew0KKyAgICAgICAgcmV0dXJuIHN1YnRyYWN0U2VydmljZS5zdWJ0cmFjdChuMSwgbjIpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBkb3VibGUgbXVsdGlwbHkoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIHJldHVybiBtdWx0aXBseVNlcnZpY2UubXVsdGlwbHkobjEsIG4yKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgZG91YmxlIGRpdmlkZShkb3VibGUgbjEsIGRvdWJsZSBuMikgew0KKyAgICAgICAgcmV0dXJuIGRpdmlkZVNlcnZpY2UuZGl2aWRlKG4xLCBuMik7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmE4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCisvKioNCisgKiBUaGUgZGl2aWRlIHNlcnZpY2UgaW50ZXJmYWNlDQorICovDQorcHVibGljIGludGVyZmFjZSBEaXZpZGVTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIGRpdmlkZShkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDdiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRGl2aWRlIHNlcnZpY2UuDQorICovDQorQFNlcnZpY2UoRGl2aWRlU2VydmljZS5jbGFzcykNCitwdWJsaWMgY2xhc3MgRGl2aWRlU2VydmljZUltcGwgaW1wbGVtZW50cyBEaXZpZGVTZXJ2aWNlIHsNCisNCisgICAgcHVibGljIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJjYWxjdWxhdG9yIik7DQorICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkVTVCwgIkRpdmlkaW5nICIgKyBuMSArICIgd2l0aCAiICsgbjIpOw0KKyAgICAgICAgcmV0dXJuIG4xIC8gbjI7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU2OGNjCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCisvKioNCisgKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbXVsdGlwbHkgc2VydmljZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgTXVsdGlwbHlTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMGRlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlOw0KKw0KKy8qKg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNdWx0aXBseSBzZXJ2aWNlLg0KKyAqLw0KK0BTZXJ2aWNlKE11bHRpcGx5U2VydmljZS5jbGFzcykNCitwdWJsaWMgY2xhc3MgTXVsdGlwbHlTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIE11bHRpcGx5U2VydmljZSB7DQorDQorICAgIHB1YmxpYyBkb3VibGUgbXVsdGlwbHkoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJjYWxjdWxhdG9yIik7DQorICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkVTVCwgIk11bHRpcGx5aW5nICIgKyBuMSArICIgd2l0aCAiICsgbjIpOw0KKyAgICAgICAgcmV0dXJuIG4xICogbjI7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVlMzcyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCisvKioNCisgKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbXVsdGlwbHkgc2VydmljZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU3VidHJhY3RTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTk1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSwzOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlOw0KKw0KKy8qKg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdWJ0cmFjdCBzZXJ2aWNlLg0KKyAqLw0KK0BTZXJ2aWNlKFN1YnRyYWN0U2VydmljZS5jbGFzcykNCitwdWJsaWMgY2xhc3MgU3VidHJhY3RTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFN1YnRyYWN0U2VydmljZSB7DQorDQorICAgIHB1YmxpYyBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJjYWxjdWxhdG9yIik7DQorICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkVTVCwgIlN1YnRyYWN0aW5nICIgKyBuMSArICIgZnJvbSAiICsgbjIpOw0KKyAgICAgICAgcmV0dXJuIG4xIC0gbjI7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjFhZGQyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKQEAgLTAsMCArMSw1MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUiDQorICAgICAgICAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiDQorICAgICAgICAgICB4bWxuczpzYW1wbGU9Imh0dHA6Ly9zYW1wbGUiDQorICAgICAgICAgICBuYW1lPSJDYWxjdWxhdG9yIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCI+DQorCQk8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5DYWxjdWxhdG9yU2VydmljZUltcGwiLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iYWRkU2VydmljZSIgdGFyZ2V0PSJBZGRTZXJ2aWNlQ29tcG9uZW50Ii8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InN1YnRyYWN0U2VydmljZSIgdGFyZ2V0PSJTdWJ0cmFjdFNlcnZpY2VDb21wb25lbnQiIC8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9Im11bHRpcGx5U2VydmljZSIgdGFyZ2V0PSJNdWx0aXBseVNlcnZpY2VDb21wb25lbnQiIC8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImRpdmlkZVNlcnZpY2UiIHRhcmdldD0iRGl2aWRlU2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgPC9jb21wb25lbnQ+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQWRkU2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5BZGRTZXJ2aWNlSW1wbCIvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iQWRkU2VydmljZSI+DQorICAgICAgICAgICAgPHR1c2Nhbnk6YmluZGluZy5qc29ucnBjIHVyaT0iaHR0cDovL2xvY2FsaG9zdDo4MDg1L0FkZFNlcnZpY2VDb21wb25lbnQvQWRkU2VydmljZSIvPg0KKyAgICAgICAgPC9zZXJ2aWNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJTdWJ0cmFjdFNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuU3VidHJhY3RTZXJ2aWNlSW1wbCIvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJNdWx0aXBseVNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuTXVsdGlwbHlTZXJ2aWNlSW1wbCIvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJEaXZpZGVTZXJ2aWNlQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLkRpdmlkZVNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JDbGllbnQuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvckNsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JDbGllbnQuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTUyZWI0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw1MCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOw0KKw0KK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsNCisNCisvKioNCisgKiBBIHVuaXQgdGVzdCBvZiB0aGUgYmFzaWMgSmF2YSBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzIGluIHRoaXMgY29udHJpYnV0aW9uIA0KKyAqIHdpdGhvdXQgdXNpbmcgU0NBDQorICovDQorcHVibGljIGNsYXNzIENhbGN1bGF0b3JUZXN0Q2FzZSB7DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RDYWxjdWxhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBBZGRTZXJ2aWNlIGFkZCA9IG5ldyBBZGRTZXJ2aWNlSW1wbCgpOw0KKyAgICAgICAgU3VidHJhY3RTZXJ2aWNlIHN1YnRyYWN0ID0gbmV3IFN1YnRyYWN0U2VydmljZUltcGwoKTsNCisgICAgICAgIE11bHRpcGx5U2VydmljZSBtdWx0aXBseSA9IG5ldyBNdWx0aXBseVNlcnZpY2VJbXBsKCk7DQorICAgICAgICBEaXZpZGVTZXJ2aWNlIGRpdmlkZSA9IG5ldyBEaXZpZGVTZXJ2aWNlSW1wbCgpOw0KKyAgICAgICAgDQorICAgICAgICBDYWxjdWxhdG9yU2VydmljZUltcGwgY2FsY3VsYXRvciA9IG5ldyBDYWxjdWxhdG9yU2VydmljZUltcGwoKTsNCisgICAgICAgIA0KKyAgICAgICAgY2FsY3VsYXRvci5zZXRBZGRTZXJ2aWNlKGFkZCk7DQorICAgICAgICBjYWxjdWxhdG9yLnNldFN1YnRyYWN0U2VydmljZShzdWJ0cmFjdCk7DQorICAgICAgICBjYWxjdWxhdG9yLnNldE11bHRpcGx5U2VydmljZShtdWx0aXBseSk7DQorICAgICAgICBjYWxjdWxhdG9yLnNldERpdmlkZVNlcnZpY2UoZGl2aWRlKTsNCisgICAgICAgIA0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNhbGN1bGF0b3IuYWRkKDMsIDIpLCA1LjAsIDApOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNhbGN1bGF0b3Iuc3VidHJhY3QoMywgMiksIDEuMCwgMCk7DQorICAgICAgICBhc3NlcnRFcXVhbHMoY2FsY3VsYXRvci5tdWx0aXBseSgzLCAyKSwgNi4wLCAwKTsNCisgICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLmRpdmlkZSgzLCAyKSwgMS41LCAwKTsNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL2J1aWxkLWRvam8ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9idWlsZC1kb2pvLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjcxNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9idWlsZC1kb2pvLnhtbApAQCAtMCwwICsxLDY0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKy0tPg0KKzxwcm9qZWN0IG5hbWU9IkRvam9aaXBJbnN0YWxsZXIiPg0KKwkNCisNCisgICAgPHByb3BlcnR5IG5hbWU9ImRvam8udmVyc2lvbiIgdmFsdWU9IjEuMy4wIi8+DQorCTxwcm9wZXJ0eSBuYW1lPSJkb2pvLnppcCIgdmFsdWU9IiR7bG9jYWxSZXBvc2l0b3J5fS9vcmcvZG9qb3Rvb2xraXQvZG9qby8ke2Rvam8udmVyc2lvbn0vZG9qby0ke2Rvam8udmVyc2lvbn0uemlwIi8+DQorICAgIDxwcm9wZXJ0eSBuYW1lPSJ1bnBhY2subG9jYXRpb24iIHZhbHVlPSIke2Jhc2VkaXJ9L3NyYy9tYWluL3dlYmFwcC9kb2pvIi8+DQorCQ0KKw0KKyAgICA8dGFyZ2V0IG5hbWU9ImNoZWNrLWRvam8taW5zdGFsbGVkIj4NCisgICAgICAgIDxjb25kaXRpb24gcHJvcGVydHk9ImFscmVhZHkuaW5zdGFsbGVkIiA+DQorICAgICAgICAgICAgPGF2YWlsYWJsZSBmaWxlPSIke2xvY2FsUmVwb3NpdG9yeX0vb3JnL2Rvam90b29sa2l0L2Rvam8vJHtkb2pvLnZlcnNpb259L2Rvam8tJHtkb2pvLnZlcnNpb259LnppcCIvPg0KKyAgICAgICAgPC9jb25kaXRpb24+DQorICAgIDwvdGFyZ2V0Pg0KKw0KKyAgICA8dGFyZ2V0IG5hbWU9ImNoZWNrLWRvam8tdW5wYWNrZWQiPg0KKyAgICAgICAgPGNvbmRpdGlvbiBwcm9wZXJ0eT0iYWxyZWFkeS51bnBhY2tlZCIgPg0KKyAgICAgICAgICAgIDxhdmFpbGFibGUgZmlsZT0iJHt1bnBhY2subG9jYXRpb259Ii8+DQorICAgICAgICA8L2NvbmRpdGlvbj4NCisgICAgPC90YXJnZXQ+DQorDQorICAgIDx0YXJnZXQgbmFtZT0idW5wYWNrLWRvam8tZmlsZXMiIGRlcGVuZHM9ImNoZWNrLWRvam8taW5zdGFsbGVkLCBjaGVjay1kb2pvLXVucGFja2VkIiB1bmxlc3M9ImFscmVhZHkudW5wYWNrZWQiPg0KKyAgICAgICAgPGZhaWwgbWVzc2FnZT0iZG9qbyB6aXAgZmlsZSBub3QgaW5zdGFsbGVkIGluIGxvY2FsIHJlcG9zaXRvcnk6ICR7bG9jYWxSZXBvc2l0b3J5fSIgdW5sZXNzPSJhbHJlYWR5Lmluc3RhbGxlZCIvPg0KKyAgICAgICAgPG1rZGlyIGRpcj0iJHtiYXNlZGlyfS90YXJnZXQvZG9qby11bnBhY2stdGVtcC8iLz4NCisgICAgICAgIDx1bnppcCBzcmM9IiR7bG9jYWxSZXBvc2l0b3J5fS9vcmcvZG9qb3Rvb2xraXQvZG9qby8ke2Rvam8udmVyc2lvbn0vZG9qby0ke2Rvam8udmVyc2lvbn0uemlwIg0KKyAgICAgICAgICAgICAgIGRlc3Q9IiR7YmFzZWRpcn0vdGFyZ2V0L2Rvam8tdW5wYWNrLXRlbXAvIg0KKyAgICAgICAgICAgICAgIG92ZXJ3cml0ZT0iZmFsc2UiDQorICAgICAgICAJICAgZW5jb2Rpbmc9Im5hdGl2ZS1lbmNvZGluZyI+DQorICAgICAgICAgICAgPHBhdHRlcm5zZXQ+DQorICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9ImRvam8tJHtkb2pvLnZlcnNpb259L2Rvam8vKioiLz4NCisgICAgICAgICAgICAgICAgPGV4Y2x1ZGUgbmFtZT0iZG9qby0ke2Rvam8udmVyc2lvbn0vZG9qby90ZXN0cy8qKiIvPg0KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSJkb2pvLSR7ZG9qby52ZXJzaW9ufS9kaWppdC8qKiIvPg0KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSJkb2pvLSR7ZG9qby52ZXJzaW9ufS9kb2pveC8qKiIvPg0KKyAgICAgICAgICAgICAgICA8ZXhjbHVkZSBuYW1lPSJkb2pvLSR7ZG9qby52ZXJzaW9ufS91dGlsLyoqIi8+DQorICAgICAgICAgICAgPC9wYXR0ZXJuc2V0Pg0KKyAgICAgICAgPC91bnppcD4NCisgICAgICAgIDxtb3ZlIGZpbGU9IiR7YmFzZWRpcn0vdGFyZ2V0L2Rvam8tdW5wYWNrLXRlbXAvZG9qby0ke2Rvam8udmVyc2lvbn0iDQorICAgICAgICAgICAgICB0b2ZpbGU9IiR7dW5wYWNrLmxvY2F0aW9ufSINCisgICAgICAgICAgICAgIHZlcmJvc2U9InRydWUiLz4NCisgICAgICAgIDxkZWxldGUgZGlyPSIke2Jhc2VkaXJ9L3RhcmdldC9kb2pvLXVucGFjay10ZW1wLyIvPg0KKyAgICA8L3RhcmdldD4NCisJDQorICAgIDx0YXJnZXQgbmFtZT0iY2xlYW4tZG9qby1maWxlcyI+DQorICAgICAgICA8ZGVsZXRlIGRpcj0iJHt1bnBhY2subG9jYXRpb259Ii8+DQorICAgIDwvdGFyZ2V0Pg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRhN2I0OQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvcG9tLnhtbApAQCAtMCwwICsxLDEyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWJpbmRpbmctanNvbnJwYy1jYWxjdWxhdG9yLXdlYmFwcDwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBiaW5kaW5nLmpzb25ycGMgQ2FsY3VsYXRvciBXZWJBcHA8L25hbWU+DQorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS13ZWJhcHA8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qc29ucnBjLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YWJpbmRpbmctanNvbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+ICANCisgICAgICAgIA0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZG9qb3Rvb2xraXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICA8YXJ0aWZhY3RJZD5kb2pvPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgPHZlcnNpb24+MS4zLjA8L3ZlcnNpb24+DQorICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAgICAgICAgICAgDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICAgICA8cGx1Z2lucz4NCisgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgIDwvcGx1Z2luPg0KKyAgICAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYW50cnVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5jb3B5LWRvam8tZmlsZXM8L2lkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5nZW5lcmF0ZS1yZXNvdXJjZXM8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YXNrcz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbnQgYW50ZmlsZT0iLi9idWlsZC1kb2pvLnhtbCIgdGFyZ2V0PSJ1bnBhY2stZG9qby1maWxlcyI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImxvY2FsUmVwb3NpdG9yeSIgdmFsdWU9IiR7c2V0dGluZ3MubG9jYWxSZXBvc2l0b3J5fSIvPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJhcnRpZmFjdElkIiB2YWx1ZT0iJHthcnRpZmFjdElkfSIvPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hbnQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFza3M+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5jbGVhbi1kb2pvLWZpbGVzPC9pZD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Y2xlYW48L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YXNrcz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbnQgYW50ZmlsZT0iLi9idWlsZC1kb2pvLnhtbCIgdGFyZ2V0PSJjbGVhbi1kb2pvLWZpbGVzIj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibG9jYWxSZXBvc2l0b3J5IiB2YWx1ZT0iJHtzZXR0aW5ncy5sb2NhbFJlcG9zaXRvcnl9Ii8+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImFydGlmYWN0SWQiIHZhbHVlPSIke2FydGlmYWN0SWR9Ii8+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FudD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YXNrcz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KKyAgICAgICAgICAgIDwvcGx1Z2luPiAgICAgICAgICANCisgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+DQorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWpldHR5LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgPHZlcnNpb24+Ni4xLjE4PC92ZXJzaW9uPg0KKyAgICAgICAgICA8L3BsdWdpbj4NCisgICAgICAgPC9wbHVnaW5zPg0KKyAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZEJlYW4uamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZEJlYW4uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTcyNGVlCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkQmVhbi5qYXZhCkBAIC0wLDAgKzEsOTAgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorcHVibGljIGNsYXNzIEFkZEJlYW4gew0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9TID0gImRlZmF1bHQgc3RyaW5nIjsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgQm9vbGVhbiBERUZBVUxUX0IgPSBmYWxzZTsNCisNCisgICAgcHJvdGVjdGVkIGRvdWJsZSBuMTsNCisgICAgcHJvdGVjdGVkIGRvdWJsZSBuMjsNCisgICAgcHJvdGVjdGVkIGRvdWJsZSBuMzsNCisgICAgDQorICAgIHByb3RlY3RlZCBCb29sZWFuIGI7DQorICAgIHByb3RlY3RlZCBTdHJpbmcgczsNCisgICAgcHJvdGVjdGVkIGludCB4Ow0KKyAgICBwcm90ZWN0ZWQgSW50ZWdlciB5Ow0KKyAgICANCisgICAgcHVibGljIGRvdWJsZSBnZXROMSgpIHsNCisgICAgICAgIHJldHVybiBuMTsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIHZvaWQgc2V0TjEoZG91YmxlIG4xKSB7DQorICAgICAgICB0aGlzLm4xID0gbjE7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBkb3VibGUgZ2V0TjIoKSB7DQorICAgICAgICByZXR1cm4gbjI7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIHNldE4yKGRvdWJsZSBuMikgew0KKyAgICAgICAgdGhpcy5uMiA9IG4yOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgZG91YmxlIGdldE4zKCkgew0KKyAgICAgICAgcmV0dXJuIG4zOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBzZXROMyhkb3VibGUgbjMpIHsNCisgICAgICAgIHRoaXMubjMgPSBuMzsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIEJvb2xlYW4gZ2V0QigpIHsNCisgICAgICAgIHJldHVybiBiOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBzZXRCKEJvb2xlYW4gYikgew0KKyAgICAgICAgdGhpcy5iID0gYjsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIFN0cmluZyBnZXRTKCkgew0KKyAgICAgICAgcmV0dXJuIHM7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIHNldFMoU3RyaW5nIHMpIHsNCisgICAgICAgIHRoaXMucyA9IHM7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBpbnQgZ2V0WCgpIHsNCisgICAgICAgIHJldHVybiB4Ow0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBzZXRYKGludCB4KSB7DQorICAgICAgICB0aGlzLnggPSB4Ow0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgSW50ZWdlciBnZXRZKCkgew0KKyAgICAgICAgcmV0dXJuIHk7DQorICAgIH0NCisNCisgICAgcHVibGljIHZvaWQgc2V0WShJbnRlZ2VyIHkpIHsNCisgICAgICAgIHRoaXMueSA9IHk7DQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTg0NGQKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7DQorDQorLyoqDQorICogVGhlIEFkZCBzZXJ2aWNlIGludGVyZmFjZQ0KKyAqLw0KK0BSZW1vdGFibGUNCitwdWJsaWMgaW50ZXJmYWNlIEFkZFNlcnZpY2Ugew0KKw0KKyAgICBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisgICAgQWRkQmVhbiBhZGRDb21wbGV4UGFyYW0oQWRkQmVhbiBhQmVhbik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNmIzNTIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNDQgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQWRkIHNlcnZpY2UNCisgKi8NCitAU2VydmljZShBZGRTZXJ2aWNlLmNsYXNzKQ0KK3B1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEFkZFNlcnZpY2Ugew0KKw0KKyAgICBwdWJsaWMgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMikgew0KKyAgICAgICAgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoImNhbGN1bGF0b3IiKTsNCisgICAgICAgIGxvZ2dlci5sb2coTGV2ZWwuRklORVNULCAiQWRkaW5nICIgKyBuMSArICIgYW5kICIgKyBuMik7DQorICAgICAgICByZXR1cm4gbjEgKyBuMjsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIEFkZEJlYW4gYWRkQ29tcGxleFBhcmFtKEFkZEJlYW4gYUJlYW4pIHsNCisgICAgICAgIGFCZWFuLnNldE4zKGFCZWFuLmdldE4xKCkgKyBhQmVhbi5nZXROMigpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQWRkaW5nICIgKyBhQmVhbi5nZXROMSgpICsgIiB0byAiICsgYUJlYW4uZ2V0TjEoKSArICIgZ2l2ZXMgIiArIGFCZWFuLmdldE4zKCkpOw0KKyAgICAgICAgcmV0dXJuIGFCZWFuOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZWVhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOw0KKw0KKy8qKg0KKyAqIFRoZSBDYWxjdWxhdG9yIHNlcnZpY2UgaW50ZXJmYWNlLg0KKyAqLw0KK0BSZW1vdGFibGUNCitwdWJsaWMgaW50ZXJmYWNlIENhbGN1bGF0b3JTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorICAgIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorICAgIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorICAgIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpOw0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMmNjNzMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDg2IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlOw0KKw0KKw0KKy8qKg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDYWxjdWxhdG9yIHNlcnZpY2UuDQorICovDQorQFNlcnZpY2UoQ2FsY3VsYXRvclNlcnZpY2UuY2xhc3MpDQorcHVibGljIGNsYXNzIENhbGN1bGF0b3JTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIENhbGN1bGF0b3JTZXJ2aWNlIHsNCisNCisgICAgcHJpdmF0ZSBBZGRTZXJ2aWNlIGFkZFNlcnZpY2U7DQorICAgIHByaXZhdGUgU3VidHJhY3RTZXJ2aWNlIHN1YnRyYWN0U2VydmljZTsNCisgICAgcHJpdmF0ZSBNdWx0aXBseVNlcnZpY2UgbXVsdGlwbHlTZXJ2aWNlOw0KKyAgICBwcml2YXRlIERpdmlkZVNlcnZpY2UgZGl2aWRlU2VydmljZTsNCisNCisgICAgQFJlZmVyZW5jZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRBZGRTZXJ2aWNlKEFkZFNlcnZpY2UgYWRkU2VydmljZSkgew0KKyAgICAgICAgdGhpcy5hZGRTZXJ2aWNlID0gYWRkU2VydmljZTsNCisgICAgfQ0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyB2b2lkIHNldFN1YnRyYWN0U2VydmljZShTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3RTZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLnN1YnRyYWN0U2VydmljZSA9IHN1YnRyYWN0U2VydmljZTsNCisgICAgfQ0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyB2b2lkIHNldERpdmlkZVNlcnZpY2UoRGl2aWRlU2VydmljZSBkaXZpZGVTZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLmRpdmlkZVNlcnZpY2UgPSBkaXZpZGVTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0TXVsdGlwbHlTZXJ2aWNlKE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMubXVsdGlwbHlTZXJ2aWNlID0gbXVsdGlwbHlTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBBZGRCZWFuIGFCZWFuID0gbmV3IEFkZEJlYW4oKTsNCisgICAgICAgIC8vIFNvIGRhdGEgdG8gdGVzdCBkaWZmZXJlbnQgdHlwZXMNCisgICAgICAgIGFCZWFuLnNldEIodHJ1ZSk7DQorICAgICAgICBhQmVhbi5zZXRTKCJGcmVkIik7DQorICAgICAgICBhQmVhbi5zZXRYKDI3KTsNCisgICAgICAgIGFCZWFuLnNldFkoNTgpOw0KKyAgICAgICAgDQorICAgICAgICAvLyB0aGUgbnVtYmVycyB0byBiZSBhZGRlZA0KKyAgICAgICAgYUJlYW4uc2V0TjEobjEpOw0KKyAgICAgICAgYUJlYW4uc2V0TjIobjIpOw0KKyAgICAgICAgDQorICAgICAgICBhQmVhbiA9IGFkZFNlcnZpY2UuYWRkQ29tcGxleFBhcmFtKGFCZWFuKTsNCisgICAgICAgIA0KKyAgICAgICAgcmV0dXJuIGFCZWFuLmdldE4zKCk7DQorICAgICAgICAvL3JldHVybiBhZGRTZXJ2aWNlLmFkZChuMSwgbjIpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIHJldHVybiBzdWJ0cmFjdFNlcnZpY2Uuc3VidHJhY3QobjEsIG4yKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICByZXR1cm4gbXVsdGlwbHlTZXJ2aWNlLm11bHRpcGx5KG4xLCBuMik7DQorICAgIH0NCisNCisgICAgcHVibGljIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIHJldHVybiBkaXZpZGVTZXJ2aWNlLmRpdmlkZShuMSwgbjIpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjZhOGIzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorLyoqDQorICogVGhlIGRpdmlkZSBzZXJ2aWNlIGludGVyZmFjZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgRGl2aWRlU2VydmljZSB7DQorDQorICAgIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpOw0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGQ3YjljCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KKw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNlcnZpY2U7DQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERpdmlkZSBzZXJ2aWNlLg0KKyAqLw0KK0BTZXJ2aWNlKERpdmlkZVNlcnZpY2UuY2xhc3MpDQorcHVibGljIGNsYXNzIERpdmlkZVNlcnZpY2VJbXBsIGltcGxlbWVudHMgRGl2aWRlU2VydmljZSB7DQorDQorICAgIHB1YmxpYyBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJEaXZpZGluZyAiICsgbjEgKyAiIHdpdGggIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSAvIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI1NjhjYwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorLyoqDQorICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIE11bHRpcGx5U2VydmljZSB7DQorDQorICAgIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzBkZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTXVsdGlwbHkgc2VydmljZS4NCisgKi8NCitAU2VydmljZShNdWx0aXBseVNlcnZpY2UuY2xhc3MpDQorcHVibGljIGNsYXNzIE11bHRpcGx5U2VydmljZUltcGwgaW1wbGVtZW50cyBNdWx0aXBseVNlcnZpY2Ugew0KKw0KKyAgICBwdWJsaWMgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJNdWx0aXBseWluZyAiICsgbjEgKyAiIHdpdGggIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSAqIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZlZTM3MgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorLyoqDQorICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFN1YnRyYWN0U2VydmljZSB7DQorDQorICAgIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU5NWY3Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3VidHJhY3Qgc2VydmljZS4NCisgKi8NCitAU2VydmljZShTdWJ0cmFjdFNlcnZpY2UuY2xhc3MpDQorcHVibGljIGNsYXNzIFN1YnRyYWN0U2VydmljZUltcGwgaW1wbGVtZW50cyBTdWJ0cmFjdFNlcnZpY2Ugew0KKw0KKyAgICBwdWJsaWMgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJTdWJ0cmFjdGluZyAiICsgbjEgKyAiIGZyb20gIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSAtIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzBkZjg3Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorLS0+DQorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2FtcGxlIg0KKyAgICAgICAgICAgeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIg0KKyAgICAgICAgICAgeG1sbnM6c2FtcGxlPSJodHRwOi8vc2FtcGxlIg0KKyAgICAgICAgICAgbmFtZT0iQ2FsY3VsYXRvciI+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuQ2FsY3VsYXRvclNlcnZpY2VJbXBsIi8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImFkZFNlcnZpY2UiIHRhcmdldD0iQWRkU2VydmljZUNvbXBvbmVudCIvPg0KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJzdWJ0cmFjdFNlcnZpY2UiIHRhcmdldD0iU3VidHJhY3RTZXJ2aWNlQ29tcG9uZW50IiAvPg0KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJtdWx0aXBseVNlcnZpY2UiIHRhcmdldD0iTXVsdGlwbHlTZXJ2aWNlQ29tcG9uZW50IiAvPg0KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJkaXZpZGVTZXJ2aWNlIiB0YXJnZXQ9IkRpdmlkZVNlcnZpY2VDb21wb25lbnQiIC8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkFkZFNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuQWRkU2VydmljZUltcGwiLz4NCisgICAgICAgIDxzZXJ2aWNlIG5hbWU9IkFkZFNlcnZpY2UiPg0KKyAgICAgICAgICAgIDx0dXNjYW55OmJpbmRpbmcuanNvbnJwYyAvPg0KKyAgICAgICAgPC9zZXJ2aWNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJTdWJ0cmFjdFNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuU3VidHJhY3RTZXJ2aWNlSW1wbCIvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJNdWx0aXBseVNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuTXVsdGlwbHlTZXJ2aWNlSW1wbCIvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJEaXZpZGVTZXJ2aWNlQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLkRpdmlkZVNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2UyMTZiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorLS0+DQorPHdlYi1hcHAgdmVyc2lvbj0iMi40Ig0KKyAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIg0KKyAgICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorICAgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIiA+DQorDQorICA8ZGlzcGxheS1uYW1lPkFwYWNoZSBUdXNjYW55IENvbnRyaWJ1dGlvbiBiaW5kaW5nLWpzb25ycGMgQ2FsY3VsYXRvciBXZWJBcHAgU2FtcGxlPC9kaXNwbGF5LW5hbWU+DQorDQorICA8ZmlsdGVyPg0KKyAgICA8ZmlsdGVyLW5hbWU+dHVzY2FueTwvZmlsdGVyLW5hbWU+IA0KKyAgICA8ZmlsdGVyLWNsYXNzPm9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC53ZWJhcHAuVHVzY2FueVNlcnZsZXRGaWx0ZXI8L2ZpbHRlci1jbGFzcz4gDQorICA8L2ZpbHRlcj4NCisNCisgIDxmaWx0ZXItbWFwcGluZz4NCisgICAgPGZpbHRlci1uYW1lPnR1c2Nhbnk8L2ZpbHRlci1uYW1lPiANCisgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4gDQorICA8L2ZpbHRlci1tYXBwaW5nPg0KKw0KKyAgPHdlbGNvbWUtZmlsZS1saXN0IGlkPSJXZWxjb21lRmlsZUxpc3QiPg0KKyAgICA8d2VsY29tZS1maWxlPmNhbGN1bGF0ZS5odG1sPC93ZWxjb21lLWZpbGU+DQorICA8L3dlbGNvbWUtZmlsZS1saXN0Pg0KKw0KKzwvd2ViLWFwcD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9jYWxjdWxhdGUuaHRtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL21haW4vd2ViYXBwL2NhbGN1bGF0ZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMjI4MDYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3Itd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9jYWxjdWxhdGUuaHRtbApAQCAtMCwwICsxLDYyIEBACis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCistLT4NCis8aHRtbD4NCisNCis8aGVhZD4NCisgICA8dGl0bGU+QXBhY2hlIFR1c2NhbnkgYmluZGluZy1qc29ucnBjIENhbGN1bGF0b3IgV2ViQXBwIHdpdGggRE9KTyBTYW1wbGU8L3RpdGxlPg0KKw0KKyAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImRvam8vZG9qby9kb2pvLmpzIj48L3NjcmlwdD4NCisNCisgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4NCisgICAgICBkb2pvLnJlcXVpcmUoImRvam8ucnBjLkpzb25TZXJ2aWNlIik7IA0KKyAgIA0KKyAgICAgIHZhciBhZGRTZXJ2aWNlID0gbmV3IGRvam8ucnBjLkpzb25TZXJ2aWNlKCJBZGRTZXJ2aWNlQ29tcG9uZW50L0FkZFNlcnZpY2U/c21kIik7DQorICAgDQorICAgICAgZnVuY3Rpb24gY2FsY3VsYXRlKCkgew0KKyAgICAgICAgIHZhciBhZGRSZXF1ZXN0ID0gbmV3IE9iamVjdCgpOw0KKyAgICAgICAgIGFkZFJlcXVlc3QubjEgPSAxOw0KKyAgICAgICAgIGFkZFJlcXVlc3QubjIgPSAxOw0KKyAgICAgICAgIGFkZFJlcXVlc3QubjMgPSAwOyANCisgICAgICAgICBhZGRSZXF1ZXN0LmIgPSB0cnVlOw0KKyAgICAgICAgIGFkZFJlcXVlc3QucyA9ICJmcmVkIjsNCisgICAgICAgICBhZGRSZXF1ZXN0LnggPSAyOw0KKyAgICAgICAgIGFkZFJlcXVlc3QueSA9IDM7DQorDQorICAgICAgICAgYWRkU2VydmljZS5hZGRDb21wbGV4UGFyYW0oYWRkUmVxdWVzdCkuYWRkQ2FsbGJhY2soY2FsY3VsYXRlUmVzcG9uc2UpOw0KKyAgICAgIH0NCisNCisgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVSZXNwb25zZShyZXBseSkgew0KKyAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5pbm5lckhUTUw9cmVwbHkubjM7DQorICAgICAgfQ0KKw0KKyAgIDwvc2NyaXB0Pg0KKw0KKzwvaGVhZD4NCisNCis8Ym9keT4NCisNCis8aDI+QXBhY2hlIFR1c2NhbnkgYmluZGluZy1qc29ucnBjIENhbGN1bGF0b3IgV2ViQXBwIHdpdGggRE9KTyBTYW1wbGU8L2gyPg0KKw0KKyAgICAxICsgMSA9IA0KKyAgICA8YnV0dG9uIG5hbWU9InN1Ym1pdCIgb25jbGljaz0iY2FsY3VsYXRlKCkiPkNhbGN1bGF0ZTwvYnV0dG9uPg0KKw0KKyAgICA8ZGl2IGlkPSdyZXN1bHQnLz4NCisNCis8L2JvZHk+DQorPC9odG1sPg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9jYWxjdWxhdG9yLXdlYmFwcC9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1MmViNAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci13ZWJhcHAvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsNTAgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCisNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQorDQorLyoqDQorICogQSB1bml0IHRlc3Qgb2YgdGhlIGJhc2ljIEphdmEgaW1wbGVtZW50YXRpb24gY2xhc3NlcyBpbiB0aGlzIGNvbnRyaWJ1dGlvbiANCisgKiB3aXRob3V0IHVzaW5nIFNDQQ0KKyAqLw0KK3B1YmxpYyBjbGFzcyBDYWxjdWxhdG9yVGVzdENhc2Ugew0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgQWRkU2VydmljZSBhZGQgPSBuZXcgQWRkU2VydmljZUltcGwoKTsNCisgICAgICAgIFN1YnRyYWN0U2VydmljZSBzdWJ0cmFjdCA9IG5ldyBTdWJ0cmFjdFNlcnZpY2VJbXBsKCk7DQorICAgICAgICBNdWx0aXBseVNlcnZpY2UgbXVsdGlwbHkgPSBuZXcgTXVsdGlwbHlTZXJ2aWNlSW1wbCgpOw0KKyAgICAgICAgRGl2aWRlU2VydmljZSBkaXZpZGUgPSBuZXcgRGl2aWRlU2VydmljZUltcGwoKTsNCisgICAgICAgIA0KKyAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2VJbXBsIGNhbGN1bGF0b3IgPSBuZXcgQ2FsY3VsYXRvclNlcnZpY2VJbXBsKCk7DQorICAgICAgICANCisgICAgICAgIGNhbGN1bGF0b3Iuc2V0QWRkU2VydmljZShhZGQpOw0KKyAgICAgICAgY2FsY3VsYXRvci5zZXRTdWJ0cmFjdFNlcnZpY2Uoc3VidHJhY3QpOw0KKyAgICAgICAgY2FsY3VsYXRvci5zZXRNdWx0aXBseVNlcnZpY2UobXVsdGlwbHkpOw0KKyAgICAgICAgY2FsY3VsYXRvci5zZXREaXZpZGVTZXJ2aWNlKGRpdmlkZSk7DQorICAgICAgICANCisgICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLmFkZCgzLCAyKSwgNS4wLCAwKTsNCisgICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLnN1YnRyYWN0KDMsIDIpLCAxLjAsIDApOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNhbGN1bGF0b3IubXVsdGlwbHkoMywgMiksIDYuMCwgMCk7DQorICAgICAgICBhc3NlcnRFcXVhbHMoY2FsY3VsYXRvci5kaXZpZGUoMywgMiksIDEuNSwgMCk7DQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctanNvbnJwYy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNDVlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL3BvbS54bWwKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGUtYmluZGluZy1qc29ucnBjPC9hcnRpZmFjdElkPg0KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIGJpbmRpbmcuanNvbnJwYzwvbmFtZT4NCisNCisgICAgPHByb2ZpbGVzPg0KKyAgICAgICAgPHByb2ZpbGU+DQorICAgICAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPg0KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4NCisgICAgICAgICAgICA8L2FjdGl2YXRpb24+DQorICAgICAgICAgICAgPG1vZHVsZXM+DQorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsY3VsYXRvci1jb250cmlidXRpb248L21vZHVsZT4NCisgICAgICAgICAgICAgICAgPG1vZHVsZT5jYWxjdWxhdG9yLXdlYmFwcDwvbW9kdWxlPg0KKyAgICAgICAgICAgIDwvbW9kdWxlcz4NCisgICAgICAgIDwvcHJvZmlsZT4NCisgICAgPC9wcm9maWxlcz4gICAgDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL1JFQURNRSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24vUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24vUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uL2J1aWxkLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24vYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZjZiYTgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uL2J1aWxkLnhtbApAQCAtMCwwICsxLDU5IEBACis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+CisKKzxwcm9qZWN0IG5hbWU9InNhbXBsZS1iaW5kaW5nLXJtaS1jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24iIGRlZmF1bHQ9ImNvbXBpbGUiPgorCisgICAgPHByb3BlcnR5IG5hbWU9InR1c2NhbnkuaG9tZSIgdmFsdWU9Ii4uLy4uLy4uLy4uIi8+CisgICAgPHByb3BlcnR5IG5hbWU9Imphci5uYW1lIiAgIHZhbHVlPSJzYW1wbGUtYmluZGluZy1ybWktY2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uLmphciIgLz4KKyAgICAKKyAgICA8ZWNobz4ke3R1c2NhbnkuaG9tZX08L2VjaG8+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPiAKKyAgICAgIDxkZWxldGUgcXVpZXQ9InRydWUiIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPiAKKyAgICAgICAgIDxmaWxlc2V0IGRpcj0idGFyZ2V0Ii8+IAorICAgICAgPC9kZWxldGU+IAorICAgICAgPG1rZGlyIGRpcj0idGFyZ2V0L2NsYXNzZXMiLz4gCisgICAgPC90YXJnZXQ+CisgICAgCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0Ij4KKyAgICAgIDxqYXZhYyBzcmNkaXI9InNyYy9tYWluL2phdmEiIAorICAgICAgICAgICAgIGRlc3RkaXI9InRhcmdldC9jbGFzc2VzIiAKKyAgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICAgc291cmNlPSIxLjUiCisgICAgICAgICAgICAgdGFyZ2V0PSIxLjUiCisgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPiAKKyAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dHVzY2FueS5ob21lfS9saWIiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtYXBpLSouamFyIiAvPgorICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICA8L2phdmFjPiAKKyAgICAgIDxjb3B5IHRvZGlyPSJ0YXJnZXQvY2xhc3NlcyI+IAorICAgICAgICAgPGZpbGVzZXQgZGlyPSJzcmMvbWFpbi9yZXNvdXJjZXMiLz4gCisgICAgICA8L2NvcHk+IAorICAgICAgPGphciBkZXN0ZmlsZT0idGFyZ2V0LyR7amFyLm5hbWV9IiBiYXNlZGlyPSJ0YXJnZXQvY2xhc3NlcyI+IAorICAgICAgICAgPG1hbmlmZXN0PgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0iJHttYWluLmNsYXNzfSIgLz4gCisgICAgICAgICA8L21hbmlmZXN0PgorICAgICAgPC9qYXI+ICAgICAgICAKKyAgICA8L3RhcmdldD4KKwkKKzwvcHJvamVjdD4gCisKKwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNDBlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uL3BvbS54bWwKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWJpbmRpbmctcm1pLWNhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIGJpbmRpbmcucm1pIENhbGN1bGF0b3IgUmVmZXJlbmNlIENvbnRyaWJ1dGlvbjwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXJtaS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+CisgICAgICAgPHBsdWdpbnM+CisgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgIDwvcGx1Z2luPgorICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQpjb3B5IHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKY29weSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEKY29weSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yUk1JUmVmZXJlbmNlLmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JSTUlSZWZlcmVuY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvclJNSVJlZmVyZW5jZS5jb21wb3NpdGUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXJlZmVyZW5jZS1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JSTUlSZWZlcmVuY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclJNSVJlZmVyZW5jZVRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yUk1JUmVmZXJlbmNlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JSTUlSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yUk1JUmVmZXJlbmNlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JSTUlTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclJNSVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yUk1JU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclJNSVNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uL1JFQURNRQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vYnVpbGQueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZWMxNjgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwKQEAgLTAsMCArMSw1OSBAQAorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorCis8cHJvamVjdCBuYW1lPSJzYW1wbGUtYmluZGluZy1ybWktY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbiIgZGVmYXVsdD0iY29tcGlsZSI+CisKKyAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4vLi4iLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iamFyLm5hbWUiICAgdmFsdWU9InNhbXBsZS1iaW5kaW5nLXJtaS1jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uLmphciIgLz4KKyAgICAKKyAgICA8ZWNobz4ke3R1c2NhbnkuaG9tZX08L2VjaG8+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPiAKKyAgICAgIDxkZWxldGUgcXVpZXQ9InRydWUiIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPiAKKyAgICAgICAgIDxmaWxlc2V0IGRpcj0idGFyZ2V0Ii8+IAorICAgICAgPC9kZWxldGU+IAorICAgICAgPG1rZGlyIGRpcj0idGFyZ2V0L2NsYXNzZXMiLz4gCisgICAgPC90YXJnZXQ+CisgICAgCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0Ij4KKyAgICAgIDxqYXZhYyBzcmNkaXI9InNyYy9tYWluL2phdmEiIAorICAgICAgICAgICAgIGRlc3RkaXI9InRhcmdldC9jbGFzc2VzIiAKKyAgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICAgc291cmNlPSIxLjUiCisgICAgICAgICAgICAgdGFyZ2V0PSIxLjUiCisgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPiAKKyAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dHVzY2FueS5ob21lfS9saWIiPgorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtYXBpLSouamFyIiAvPgorICAgICAgICAgICAgPC9maWxlc2V0PgorICAgICAgICAgPC9jbGFzc3BhdGg+CisgICAgICA8L2phdmFjPiAKKyAgICAgIDxjb3B5IHRvZGlyPSJ0YXJnZXQvY2xhc3NlcyI+IAorICAgICAgICAgPGZpbGVzZXQgZGlyPSJzcmMvbWFpbi9yZXNvdXJjZXMiLz4gCisgICAgICA8L2NvcHk+IAorICAgICAgPGphciBkZXN0ZmlsZT0idGFyZ2V0LyR7amFyLm5hbWV9IiBiYXNlZGlyPSJ0YXJnZXQvY2xhc3NlcyI+IAorICAgICAgICAgPG1hbmlmZXN0PgorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0iJHttYWluLmNsYXNzfSIgLz4gCisgICAgICAgICA8L21hbmlmZXN0PgorICAgICAgPC9qYXI+ICAgICAgICAKKyAgICA8L3RhcmdldD4KKwkKKzwvcHJvamVjdD4gCisKKwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRlZDJkNwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uL3BvbS54bWwKQEAgLTAsMCArMSw3NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWJpbmRpbmctcm1pLWNhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb248L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBiaW5kaW5nLnJtaSBDYWxjdWxhdG9yIFNlcnZpY2UgQ29udHJpYnV0aW9uPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcm1pLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKyAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tdHVzY2FueS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yQ2xpZW50LmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3ItcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JSTUlTZXJ2ZXIuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JSTUlTZXJ2ZXIuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2JpbmRpbmctcm1pL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXNlcnZpY2Uvc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JSTUlTZXJ2ZXIuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvclJNSVNlcnZlci5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Itc2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yUk1JU2VydmVyVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yUk1JU2VydmVyVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1zZXJ2aWNlL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yUk1JU2VydmVyVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24vc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JSTUlTZXJ2ZXJUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MjMxMGMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvcG9tLnhtbApAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZS1iaW5kaW5nLXJtaTwvYXJ0aWZhY3RJZD4NCisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBiaW5kaW5nLnJtaTwvbmFtZT4NCisNCisgICAgPHByb2ZpbGVzPg0KKyAgICAgICAgPHByb2ZpbGU+DQorICAgICAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPg0KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4NCisgICAgICAgICAgICA8L2FjdGl2YXRpb24+DQorICAgICAgICAgICAgPG1vZHVsZXM+DQorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsY3VsYXRvci1yZWZlcmVuY2UtY29udHJpYnV0aW9uPC9tb2R1bGU+DQorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbjwvbW9kdWxlPg0KKyAgICAgICAgICAgIDwvbW9kdWxlcz4NCisgICAgICAgIDwvcHJvZmlsZT4NCisgICAgPC9wcm9maWxlcz4gICAgDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1zY2EvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXNjYS9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3IvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmZWY3NTUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vYnVpbGQueG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKworPHByb2plY3QgbmFtZT0ic2FtcGxlLWJpbmRpbmctc2NhLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uIiBkZWZhdWx0PSJjb21waWxlIj4KKyAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4vLi4iLz4KKyAgICA8cHJvcGVydHkgbmFtZT0iamFyLm5hbWUiICAgdmFsdWU9InNhbXBsZS1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi5qYXIiIC8+CisgICAgCisgICAgPGVjaG8+JHt0dXNjYW55LmhvbWV9PC9lY2hvPgorCisgICAgPHRhcmdldCBuYW1lPSJpbml0Ij4gCisgICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIiBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4gCisgICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPiAKKyAgICAgIDwvZGVsZXRlPiAKKyAgICAgIDxta2RpciBkaXI9InRhcmdldC9jbGFzc2VzIi8+IAorICAgIDwvdGFyZ2V0PgorICAgIAorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCI+CisgICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIiAKKyAgICAgICAgICAgICBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIgCisgICAgICAgICAgICAgZGVidWc9Im9uIgorICAgICAgICAgICAgIHNvdXJjZT0iMS41IgorICAgICAgICAgICAgIHRhcmdldD0iMS41IgorICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4gCisgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vbGliIj4KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktc2NhLWFwaS0qLmphciIgLz4KKyAgICAgICAgICAgIDwvZmlsZXNldD4KKyAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgPC9qYXZhYz4gCisgICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPiAKKyAgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL21haW4vcmVzb3VyY2VzIi8+IAorICAgICAgPC9jb3B5PiAKKyAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke2phci5uYW1lfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPiAKKyAgICAgICAgIDxtYW5pZmVzdD4KKyAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9IiR7bWFpbi5jbGFzc30iIC8+IAorICAgICAgICAgPC9tYW5pZmVzdD4KKyAgICAgIDwvamFyPiAgICAgICAgCisgICAgPC90YXJnZXQ+Cis8L3Byb2plY3Q+CisKKwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTk1YjBiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKQEAgLTAsMCArMSw1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWJpbmRpbmctc2NhLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgYmluZGluZy5zY2EgQ2FsY3VsYXRvciBDb250cmlidXRpb248L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+IAorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKyAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICA8L3BsdWdpbnM+CisgICA8L2J1aWxkPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXJtaS9jb250cmlidXRpb24tY2FsY3VsYXRvci1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JDbGllbnQuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JDbGllbnQuY29tcG9zaXRlCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKY29weSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvYmluZGluZy1zY2EvY29udHJpYnV0aW9uLWNhbGN1bGF0b3Ivc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmOTYyNDkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvcG9tLnhtbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZS1iaW5kaW5nLXNjYTwvYXJ0aWZhY3RJZD4NCisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBiaW5kaW5nLnNjYTwvbmFtZT4NCisNCisgICAgPHByb2ZpbGVzPg0KKyAgICAgICAgPHByb2ZpbGU+DQorICAgICAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPg0KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4NCisgICAgICAgICAgICA8L2FjdGl2YXRpb24+DQorICAgICAgICAgICAgPG1vZHVsZXM+DQorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsY3VsYXRvci1jb250cmlidXRpb248L21vZHVsZT4NCisgICAgICAgICAgICA8L21vZHVsZXM+DQorICAgICAgICA8L3Byb2ZpbGU+DQorICAgIDwvcHJvZmlsZXM+ICAgIA0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL1JFQURNRSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvUkVBRE1FCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMzRlMAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL1JFQURNRQpAQCAtMCwwICsxLDI1IEBACitDYWxjdWxhdG9yIENvbnRyaWJ1dGlvbiBTYW1wbGUNCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBjb2RlIHdoaWNoIGltcGxlbWVudHMgYSBzaW1wbGUgY2FsY3VsYXRvciBTQ0EgY29udHJpYnV0aW9uLg0KKw0KK1RoZSBjb250cmlidXRpb24gY2FuIGJlIHJ1biBhcyBhIHR1c2NhbnkgYXBwbGljYXRpb24gdXNpbmcgb25lIG9mIHRoZSB0dXNjYW55IGxhdW5jaGVycw0KK2FzIGRlc2NyaWJlZCBpbiB0aGUgUkVBRE1FIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgc2FtcGxlcy4gDQorDQorU2FtcGxlIE92ZXJ2aWV3DQorLS0tLS0tLS0tLS0tLS0tDQorVGhlIHNhbXBsZSBwcm92aWRlcyBhIHNpbmdsZSBjYWxjdWxhdG9yIHNlcnZpY2Ugd2l0aCBhIGRlZmF1bHQgU0NBIChqYXZhKSANCitiaW5kaW5nLiBUaGUgbGF1bmNoZXIgZXhlcmNpc2VzIHRoaXMgaW50ZXJmYWNlIGJ5IGNhbGxpbmcgYWRkLCANCitzdWJ0cmFjdCwgbXVsdGlwbHkgYW5kIGRpdmlkZSBvcGVyYXRpb25zLiBUaGlzIHJlc3VsdHMgaW4gbWVzc2FnZXMgcGFzc2luZyB0byANCit0aGUgYXBwcm9wcmlhdGUgY29tcG9uZW50cyBpbiB0aGUgY29tcG9zaXRlIGFjcm9zcyB0aGUgbG9jYWwgd2lyZXMuDQorDQorWW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQgKGRlcGVuZGluZyBvbiB0aGUgbGF1bmNoZXIgeW91IHVzZSwgdGhpcyBvdXRwdXQNCittYXkgYmUgc3Vycm91bmRlZCBieSBvdGhlciBvdXRwdXQpLg0KKw0KK3J1bjoNCisgICAgIFtqYXZhXSAzICsgMj01LjANCisgICAgIFtqYXZhXSAzIC0gMj0xLjANCisgICAgIFtqYXZhXSAzICogMj02LjANCisgICAgIFtqYXZhXSAzIC8gMj0xLjUNCisNCisNCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyNzQ2MAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL2J1aWxkLnhtbApAQCAtMCwwICsxLDU1IEBACis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdCBuYW1lPSJzYW1wbGUtYmluZGluZy13cy1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbiIgZGVmYXVsdD0iY29tcGlsZSI+IA0KKwk8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4vLi4iLz4NCisgICAgPHByb3BlcnR5IG5hbWU9Imphci5uYW1lIiAgIHZhbHVlPSJzYW1wbGUtYmluZGluZy13cy1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi5qYXIiIC8+DQorCQ0KKwk8ZWNobz4ke3R1c2NhbnkuaG9tZX08L2VjaG8+DQorDQorICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+IA0KKyAgICAgIDxkZWxldGUgcXVpZXQ9InRydWUiIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPiANCisgICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPiANCisgICAgICA8L2RlbGV0ZT4gDQorICAgICAgPG1rZGlyIGRpcj0idGFyZ2V0L2NsYXNzZXMiLz4gDQorICAgIDwvdGFyZ2V0Pg0KKwkNCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0Ij4NCisgICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIiANCisgICAgICAJICAgICBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIgDQorICAgICAgCSAgICAgZGVidWc9Im9uIg0KKyAgICAgICAgICAgICBzb3VyY2U9IjEuNSINCisgICAgICAgICAgICAgdGFyZ2V0PSIxLjUiDQorICAgICAgCSAgICAgZmFpbG9uZXJyb3I9InRydWUiPiANCisgICAgICAgICA8Y2xhc3NwYXRoPg0KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2xpYiI+DQorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtYXBpLSouamFyIiAvPg0KKyAgICAgICAgICAgIDwvZmlsZXNldD4NCisgICAgICAgICA8L2NsYXNzcGF0aD4NCisgICAgICA8L2phdmFjPiANCisgICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPiANCisgICAgICAgICA8ZmlsZXNldCBkaXI9InNyYy9tYWluL3Jlc291cmNlcyIvPiANCisgICAgICA8L2NvcHk+IA0KKyAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke2phci5uYW1lfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPiANCisgICAgICAgICA8bWFuaWZlc3Q+DQorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0iJHttYWluLmNsYXNzfSIgLz4gDQorICAgICAgICAgPC9tYW5pZmVzdD4NCisgICAgICA8L2phcj4gICAgCQ0KKyAgICA8L3RhcmdldD4NCisNCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL2NhbGN1bGF0b3Iub2RnIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vY2FsY3VsYXRvci5vZGcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9jYWxjdWxhdG9yLm9kZwpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vY2FsY3VsYXRvci5vZGcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL2NhbGN1bGF0b3IucG5nIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vY2FsY3VsYXRvci5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9jYWxjdWxhdG9yLnBuZwpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vY2FsY3VsYXRvci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxYTg5ZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWJpbmRpbmctd3MtY2FsY3VsYXRvci1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgYmluZGluZy53cyBDYWxjdWxhdG9yIENvbnRyaWJ1dGlvbjwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgDQorICAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorDQorICAgICAgIDxwbHVnaW5zPg0KKyAgICAgICA8L3BsdWdpbnM+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzODIxM2IKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMzEgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOw0KKw0KKy8qKg0KKyAqIFRoZSBBZGQgc2VydmljZSBpbnRlcmZhY2UNCisgKi8NCitAUmVtb3RhYmxlDQorcHVibGljIGludGVyZmFjZSBBZGRTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmNGQzNQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEFkZCBzZXJ2aWNlDQorICovDQorcHVibGljIGNsYXNzIEFkZFNlcnZpY2VJbXBsIGltcGxlbWVudHMgQWRkU2VydmljZSB7DQorDQorICAgIHB1YmxpYyBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJBZGRpbmcgIiArIG4xICsgIiBhbmQgIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSArIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ4NzM3NQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorDQorLyoqDQorICogVGhlIENhbGN1bGF0b3Igc2VydmljZSBpbnRlcmZhY2UuDQorICovDQorcHVibGljIGludGVyZmFjZSBDYWxjdWxhdG9yU2VydmljZSB7DQorDQorICAgIGRvdWJsZSBhZGQoZG91YmxlIG4xLCBkb3VibGUgbjIpOw0KKw0KKyAgICBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpOw0KKw0KKyAgICBkb3VibGUgbXVsdGlwbHkoZG91YmxlIG4xLCBkb3VibGUgbjIpOw0KKw0KKyAgICBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzZmE3YTgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSw3MCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7DQorDQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIENhbGN1bGF0b3Igc2VydmljZS4NCisgKi8NCitwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclNlcnZpY2VJbXBsIGltcGxlbWVudHMgQ2FsY3VsYXRvclNlcnZpY2Ugew0KKw0KKyAgICBwcml2YXRlIEFkZFNlcnZpY2UgYWRkU2VydmljZTsNCisgICAgcHJpdmF0ZSBTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3RTZXJ2aWNlOw0KKyAgICBwcml2YXRlIE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2U7DQorICAgIHByaXZhdGUgRGl2aWRlU2VydmljZSBkaXZpZGVTZXJ2aWNlOw0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyB2b2lkIHNldEFkZFNlcnZpY2UoQWRkU2VydmljZSBhZGRTZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLmFkZFNlcnZpY2UgPSBhZGRTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0U3VidHJhY3RTZXJ2aWNlKFN1YnRyYWN0U2VydmljZSBzdWJ0cmFjdFNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMuc3VidHJhY3RTZXJ2aWNlID0gc3VidHJhY3RTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0RGl2aWRlU2VydmljZShEaXZpZGVTZXJ2aWNlIGRpdmlkZVNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMuZGl2aWRlU2VydmljZSA9IGRpdmlkZVNlcnZpY2U7DQorICAgIH0NCisNCisgICAgQFJlZmVyZW5jZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRNdWx0aXBseVNlcnZpY2UoTXVsdGlwbHlTZXJ2aWNlIG11bHRpcGx5U2VydmljZSkgew0KKyAgICAgICAgdGhpcy5tdWx0aXBseVNlcnZpY2UgPSBtdWx0aXBseVNlcnZpY2U7DQorICAgIH0NCisNCisgICAgcHVibGljIGRvdWJsZSBhZGQoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIHJldHVybiBhZGRTZXJ2aWNlLmFkZChuMSwgbjIpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIHJldHVybiBzdWJ0cmFjdFNlcnZpY2Uuc3VidHJhY3QobjEsIG4yKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICByZXR1cm4gbXVsdGlwbHlTZXJ2aWNlLm11bHRpcGx5KG4xLCBuMik7DQorICAgIH0NCisNCisgICAgcHVibGljIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIHJldHVybiBkaXZpZGVTZXJ2aWNlLmRpdmlkZShuMSwgbjIpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmE4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorLyoqDQorICogVGhlIGRpdmlkZSBzZXJ2aWNlIGludGVyZmFjZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgRGl2aWRlU2VydmljZSB7DQorDQorICAgIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpOw0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkOTE5MzUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDM1IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KKw0KKy8qKg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEaXZpZGUgc2VydmljZS4NCisgKi8NCitwdWJsaWMgY2xhc3MgRGl2aWRlU2VydmljZUltcGwgaW1wbGVtZW50cyBEaXZpZGVTZXJ2aWNlIHsNCisNCisgICAgcHVibGljIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJjYWxjdWxhdG9yIik7DQorICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkVTVCwgIkRpdmlkaW5nICIgKyBuMSArICIgd2l0aCAiICsgbjIpOw0KKyAgICAgICAgcmV0dXJuIG4xIC8gbjI7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTY4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCisvKioNCisgKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbXVsdGlwbHkgc2VydmljZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgTXVsdGlwbHlTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg1MzU3ZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTXVsdGlwbHkgc2VydmljZS4NCisgKi8NCitwdWJsaWMgY2xhc3MgTXVsdGlwbHlTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIE11bHRpcGx5U2VydmljZSB7DQorDQorICAgIHB1YmxpYyBkb3VibGUgbXVsdGlwbHkoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJjYWxjdWxhdG9yIik7DQorICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkVTVCwgIk11bHRpcGx5aW5nICIgKyBuMSArICIgd2l0aCAiICsgbjIpOw0KKyAgICAgICAgcmV0dXJuIG4xICogbjI7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ZWUzNzIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCisvKioNCisgKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbXVsdGlwbHkgc2VydmljZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU3VidHJhY3RTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI2NjkwOAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3VidHJhY3Qgc2VydmljZS4NCisgKi8NCitwdWJsaWMgY2xhc3MgU3VidHJhY3RTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIFN1YnRyYWN0U2VydmljZSB7DQorDQorICAgIHB1YmxpYyBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJjYWxjdWxhdG9yIik7DQorICAgICAgICBsb2dnZXIubG9nKExldmVsLkZJTkVTVCwgIlN1YnRyYWN0aW5nICIgKyBuMSArICIgZnJvbSAiICsgbjIpOw0KKyAgICAgICAgcmV0dXJuIG4xIC0gbjI7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ODhlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKQEAgLTAsMCArMSw1NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUiDQorICAgICAgICAgICB4bWxuczpzYW1wbGU9Imh0dHA6Ly9zYW1wbGUiDQorICAgICAgICAgICBuYW1lPSJDYWxjdWxhdG9yIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCI+DQorCQk8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5DYWxjdWxhdG9yU2VydmljZUltcGwiLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iYWRkU2VydmljZSIgPiAgIA0KKyAgICAgICAgICAgIDxiaW5kaW5nLndzIHVyaT0iaHR0cDovL2xvY2FsaG9zdDo4MDg1L0FkZFNlcnZpY2VDb21wb25lbnQiLz4gICAgICAgIA0KKyAgICAgICAgPC9yZWZlcmVuY2U+ICANCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic3VidHJhY3RTZXJ2aWNlIiB0YXJnZXQ9IlN1YnRyYWN0U2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ibXVsdGlwbHlTZXJ2aWNlIiB0YXJnZXQ9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iZGl2aWRlU2VydmljZSIgdGFyZ2V0PSJEaXZpZGVTZXJ2aWNlQ29tcG9uZW50IiAvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJBZGRTZXJ2aWNlQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLkFkZFNlcnZpY2VJbXBsIi8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJBZGRTZXJ2aWNlIj4NCisgICAgICAgICAgICA8YmluZGluZy53cyB1cmk9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9BZGRTZXJ2aWNlQ29tcG9uZW50Ii8+DQorICAgICAgICA8L3NlcnZpY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlN1YnRyYWN0U2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5TdWJ0cmFjdFNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5NdWx0aXBseVNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkRpdmlkZVNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuRGl2aWRlU2VydmljZUltcGwiLz4NCisgICAgPC9jb21wb25lbnQ+DQorDQorPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhNzU0OGMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8Y29udHJpYnV0aW9uIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICAgICB4bWxuczpzYW1wbGU9Imh0dHA6Ly9zYW1wbGUiPg0KKyAgIDxkZXBsb3lhYmxlIGNvbXBvc2l0ZT0ic2FtcGxlOkNhbGN1bGF0b3IiLz4NCis8L2NvbnRyaWJ1dGlvbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk1MmViNAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDUwIEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7DQorDQoraW1wb3J0IG9yZy5qdW5pdC5UZXN0Ow0KKw0KKy8qKg0KKyAqIEEgdW5pdCB0ZXN0IG9mIHRoZSBiYXNpYyBKYXZhIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgaW4gdGhpcyBjb250cmlidXRpb24gDQorICogd2l0aG91dCB1c2luZyBTQ0ENCisgKi8NCitwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclRlc3RDYXNlIHsNCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdENhbGN1bGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIEFkZFNlcnZpY2UgYWRkID0gbmV3IEFkZFNlcnZpY2VJbXBsKCk7DQorICAgICAgICBTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3QgPSBuZXcgU3VidHJhY3RTZXJ2aWNlSW1wbCgpOw0KKyAgICAgICAgTXVsdGlwbHlTZXJ2aWNlIG11bHRpcGx5ID0gbmV3IE11bHRpcGx5U2VydmljZUltcGwoKTsNCisgICAgICAgIERpdmlkZVNlcnZpY2UgZGl2aWRlID0gbmV3IERpdmlkZVNlcnZpY2VJbXBsKCk7DQorICAgICAgICANCisgICAgICAgIENhbGN1bGF0b3JTZXJ2aWNlSW1wbCBjYWxjdWxhdG9yID0gbmV3IENhbGN1bGF0b3JTZXJ2aWNlSW1wbCgpOw0KKyAgICAgICAgDQorICAgICAgICBjYWxjdWxhdG9yLnNldEFkZFNlcnZpY2UoYWRkKTsNCisgICAgICAgIGNhbGN1bGF0b3Iuc2V0U3VidHJhY3RTZXJ2aWNlKHN1YnRyYWN0KTsNCisgICAgICAgIGNhbGN1bGF0b3Iuc2V0TXVsdGlwbHlTZXJ2aWNlKG11bHRpcGx5KTsNCisgICAgICAgIGNhbGN1bGF0b3Iuc2V0RGl2aWRlU2VydmljZShkaXZpZGUpOw0KKyAgICAgICAgDQorICAgICAgICBhc3NlcnRFcXVhbHMoY2FsY3VsYXRvci5hZGQoMywgMiksIDUuMCwgMCk7DQorICAgICAgICBhc3NlcnRFcXVhbHMoY2FsY3VsYXRvci5zdWJ0cmFjdCgzLCAyKSwgMS4wLCAwKTsNCisgICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLm11bHRpcGx5KDMsIDIpLCA2LjAsIDApOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNhbGN1bGF0b3IuZGl2aWRlKDMsIDIpLCAxLjUsIDApOw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vYnVpbGQueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL2J1aWxkLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9idWlsZC54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vaGVsbG93b3JsZC13cy1zZG8ucG5nIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL2hlbGxvd29ybGQtd3Mtc2RvLnBuZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9oZWxsb3dvcmxkLXdzLXNkby5wbmcKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9oZWxsb3dvcmxkLXdzLXNkby5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9tYXZlbi1lY2xpcHNlLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9tYXZlbi1lY2xpcHNlLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9tYXZlbi1lY2xpcHNlLnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL21hdmVuLWVjbGlwc2UueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYzc4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vcG9tLnhtbApAQCAtMCwwICsxLDE4MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICoKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWJpbmRpbmctd3MtaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgYmluZGluZy53cyBIZWxsb1dvcmxkIFdlYiBTZXJ2aWNlIFNETyBDb250cmlidXRpb248L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2RvPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zZG8tbGliPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4xLjE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2RvPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zZG8taW1wbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+YmFja3BvcnQtdXRpbC1jb25jdXJyZW50PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5iYWNrcG9ydC11dGlsLWNvbmN1cnJlbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5iYWNrcG9ydC11dGlsLWNvbmN1cnJlbnQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5iYWNrcG9ydC11dGlsLWNvbmN1cnJlbnQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZy1zZG88L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj40LjU8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKworCisgICAgICAgIDxwbHVnaW5zPgorCisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi10dXNjYW55LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nLXNkbzwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgPC9wbHVnaW4+CisKKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YnVpbGQtaGVscGVyLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjA8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+YWRkLXNvdXJjZTwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+YWRkLXRlc3Qtc291cmNlPC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2VzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlPnRhcmdldC9zZG8tc291cmNlPC9zb3VyY2U+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2VzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNkbzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNkby1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4xLjE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+Z2VuZXJhdGUtaGVsbG93b3JsZC1zZG88L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjaGVtYUZpbGU+JHtiYXNlZGlyfS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9oZWxsb3dvcmxkLndzZGw8L3NjaGVtYUZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGphdmFQYWNrYWdlPmhlbGxvd29ybGQ8L2phdmFQYWNrYWdlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcmVmaXg+SGVsbG93b3JsZDwvcHJlZml4PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub05vdGlmaWNhdGlvbj50cnVlPC9ub05vdGlmaWNhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9Db250YWluZXI+dHJ1ZTwvbm9Db250YWluZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vVW5zZXR0YWJsZT50cnVlPC9ub1Vuc2V0dGFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Z2VuZXJhdGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPmdlbmVyYXRlLWhlbGxvd29ybGQtc2RvMTwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2NoZW1hRmlsZT4ke2Jhc2VkaXJ9L3NyYy9tYWluL3Jlc291cmNlcy90ZXN0LnhzZDwvc2NoZW1hRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8amF2YVBhY2thZ2U+bW9kZWwuc2RvPC9qYXZhUGFja2FnZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJlZml4PkVudGl0eTwvcHJlZml4PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxub05vdGlmaWNhdGlvbj50cnVlPC9ub05vdGlmaWNhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bm9Db250YWluZXI+dHJ1ZTwvbm9Db250YWluZXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5vVW5zZXR0YWJsZT50cnVlPC9ub1Vuc2V0dGFibGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Z2VuZXJhdGU8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2ZXIuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmVyLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZlci5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ29tcG9uZW50LmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ29tcG9uZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDb21wb25lbnQuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL2JjaXJjbGUvQmlvVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL2JjaXJjbGUvQmlvVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL2JjaXJjbGUvQmlvVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvc2VydmljZXMvYmNpcmNsZS9CaW9UZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL2phdmEvc2VydmljZXMvYmNpcmNsZS9CaW9jaGVtaWNhbENpcmNsZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvc2VydmljZXMvYmNpcmNsZS9CaW9jaGVtaWNhbENpcmNsZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL2phdmEvc2VydmljZXMvYmNpcmNsZS9CaW9jaGVtaWNhbENpcmNsZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9zZXJ2aWNlcy9iY2lyY2xlL0Jpb2NoZW1pY2FsQ2lyY2xlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vc3JjL21haW4vamF2YS9zZXJ2aWNlcy9iY2lyY2xlL0Jpb2NoZW1pY2FsQ2lyY2xlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvc2VydmljZXMvYmNpcmNsZS9CaW9jaGVtaWNhbENpcmNsZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL2JjaXJjbGUvQmlvY2hlbWljYWxDaXJjbGVJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NlcnZpY2VzL2JjaXJjbGUvQmlvY2hlbWljYWxDaXJjbGVJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGR3cy5jb21wb3NpdGUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGR3cy5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvaGVsbG93b3JsZC13cy1zZG8vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGR3cy5jb21wb3NpdGUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHdzLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHdzY2xpZW50LmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHdzY2xpZW50LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHdzY2xpZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkd3NjbGllbnQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL3Jlc291cmNlcy9sb2dnaW5nLnByb3BlcnRpZXMgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZ2dpbmcucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nZ2luZy5wcm9wZXJ0aWVzCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2xvZ2dpbmcucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzb3VyY2VzL2NsaW5pY2FsTGFib3JhdG9yeS5jb21wb3NpdGUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL3Jlc291cmNlcy9jbGluaWNhbExhYm9yYXRvcnkuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL3Jlc291cmNlcy9yZXNvdXJjZXMvY2xpbmljYWxMYWJvcmF0b3J5LmNvbXBvc2l0ZQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9yZXNvdXJjZXMvY2xpbmljYWxMYWJvcmF0b3J5LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9yZXNvdXJjZXMvdGVzdC54c2QgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL3Rlc3QueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL3Jlc291cmNlcy90ZXN0LnhzZApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy90ZXN0LnhzZApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9oZWxsb3dvcmxkLndzZGwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvaGVsbG93b3JsZC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL2hlbGxvd29ybGQud3NkbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL2hlbGxvd29ybGQud3NkbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudFRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50VGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFRlc3RTZXJ2ZXIuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2hlbGxvd29ybGQtd3Mtc2RvLWNvbnRyaWJ1dGlvbi9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFRlc3RTZXJ2ZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXdzLXNkby9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFRlc3RTZXJ2ZXIuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkVGVzdFNlcnZlci5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9UZXN0Q2FzZVJ1bm5lci5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvaGVsbG93b3JsZC13cy1zZG8tY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9UZXN0Q2FzZVJ1bm5lci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtd3Mtc2RvL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9UZXN0Q2FzZVJ1bm5lci5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb24vc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL1Rlc3RDYXNlUnVubmVyLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMTYzNzMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9wb20ueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlLWJpbmRpbmctd3M8L2FydGlmYWN0SWQ+DQorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgYmluZGluZy53czwvbmFtZT4NCisNCisgICAgPHByb2ZpbGVzPg0KKyAgICAgICAgPHByb2ZpbGU+DQorICAgICAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPg0KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4NCisgICAgICAgICAgICA8L2FjdGl2YXRpb24+DQorICAgICAgICAgICAgPG1vZHVsZXM+DQorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsY3VsYXRvci1jb250cmlidXRpb248L21vZHVsZT4NCisgICAgICAgICAgICAgICAgPCEtLW1vZHVsZT5oZWxsb3dvcmxkLXdzLXNkby1jb250cmlidXRpb248L21vZHVsZS0tPg0KKyAgICAgICAgICAgIDwvbW9kdWxlcz4NCisgICAgICAgIDwvcHJvZmlsZT4NCisgICAgPC9wcm9maWxlcz4gICAgDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvTElDRU5TRSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL0xJQ0VOU0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvTElDRU5TRQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvTElDRU5TRQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL01FVEEtSU5GL01BTklGRVNULk1GCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9OT1RJQ0UgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9OT1RJQ0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvTk9USUNFCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9OT1RJQ0UKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvYWRkLWNvbXBvbmVudC54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9hZGQtY29tcG9uZW50LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9hZGQtY29tcG9uZW50LnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvYWRkLWNvbXBvbmVudC54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvYmx1ZXByaW50L29wZXJhdGlvbnMtbW9kdWxlLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL2JsdWVwcmludC9vcGVyYXRpb25zLW1vZHVsZS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvYmx1ZXByaW50L29wZXJhdGlvbnMtbW9kdWxlLnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvYmx1ZXByaW50L29wZXJhdGlvbnMtbW9kdWxlLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9kaXZpZGUtY29tcG9uZW50LnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL2RpdmlkZS1jb21wb25lbnQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL2RpdmlkZS1jb21wb25lbnQueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9kaXZpZGUtY29tcG9uZW50LnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9tdWx0aXBseS1jb21wb25lbnQueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvbXVsdGlwbHktY29tcG9uZW50LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9tdWx0aXBseS1jb21wb25lbnQueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9tdWx0aXBseS1jb21wb25lbnQueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3NjYS1jb25maWcvb3BlcmF0aW9ucy1jb25maWcueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvc2NhLWNvbmZpZy9vcGVyYXRpb25zLWNvbmZpZy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvc2NhLWNvbmZpZy9vcGVyYXRpb25zLWNvbmZpZy54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3NjYS1jb25maWcvb3BlcmF0aW9ucy1jb25maWcueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3N1YnRyYWN0LWNvbXBvbmVudC54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9zdWJ0cmFjdC1jb21wb25lbnQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3N1YnRyYWN0LWNvbXBvbmVudC54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3N1YnRyYWN0LWNvbXBvbmVudC54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL1JFQURNRSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2Q0MWIwCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvUkVBRE1FCkBAIC0wLDAgKzEsMTk2IEBACitEaXN0cmlidXRlZCBPU0dpIENhbGN1bGF0b3IgU2FtcGxlDQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK1RoaXMgc2FtcGxlIGltcGxlbWVudHMgYSBkaXN0cmlidXRlZCBjYWxjdWxhdG9yIHVzaW5nIERpc3RyaWJ1dGVkIE9TR2kgKFJGQyAxMTkpIG92ZXIgU0NBLg0KKw0KK1RoZSBSRUFETUUgaW4gdGhlIDxkaXN0cmlidXRpb24tdW5wYWNrLWRpcj4vc2FtcGxlcyBkaXJlY3RvcnkgcHJvdmlkZXMgDQorZ2VuZXJhbCBpbnN0cnVjdGlvbnMgYWJvdXQgYnVpbGRpbmcgYW5kIHJ1bm5pbmcgc2FtcGxlcy4gKHdoZXJlDQorZGlzdHJpYnV0aW9uLXVucGFjay1kaXIgaXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB5b3UgdW5wYWNrZWQgdGhlIHR1c2NhbnkNCitiaW5hcnkgZGlzdHJpYnV0aW9uIGFyY2hpdmUpLiBUYWtlIGEgbG9vayB0aGVyZSBmaXJzdCAobm90aW5nIGF0IHlvdSByZWFkIGl0IHRoYXQgdGhpcyBzYW1wbGUNCitpcyBub3QgYSBuZXcgc3R5bGUgc2FtcGxlKS4gDQorDQorT24gV2luZG93cywgcnVuDQoramF2YSAtamFyIC4uXC4uXG1vZHVsZXNcb3NnaS0zLjUuMC12MjAwOTA1MjAuamFyIC1jb25maWd1cmF0aW9uIC4uXC4uXGZlYXR1cmVzXGNvbmZpZ3VyYXRpb24gLWNsZWFuIC1jb25zb2xlIC1Eb3JnLm9zZ2kuc2NhLmRvbWFpbi5yZWdpc3RyeT10cmliZXM6ZGVmYXVsdA0KKw0KK09uICpVbml4LCBydW4NCitqYXZhIC1qYXIgLi4vLi4vbW9kdWxlcy9vc2dpLTMuNS4wLXYyMDA5MDUyMC5qYXIgLWNvbmZpZ3VyYXRpb24gLi4vLi4vZmVhdHVyZXMvY29uZmlndXJhdGlvbiAtY2xlYW4gLWNvbnNvbGUgLURvcmcub3NnaS5zY2EuZG9tYWluLnJlZ2lzdHJ5PXRyaWJlczpkZWZhdWx0DQorDQorWW91IHNob3VsZCBzZWUgdGhlIG9zZ2kgY29uc29sZToNCisNCitvc2dpPg0KKw0KK1lvdSBjYW4gcnVuICJzcyIgY29tbWFuZCB1bmRlciB0aGUgb3NnaT4gdG8gc2VlIHRoZSBzdGF0dXMgb2YgdGhlIGJ1bmRsZXMuDQorb3NnaT4gc3MNCisNCitUaGVuIHlvdSBjYW4gaW5zdGFsbCBhbmQgc3RhcnQgdGhlIGNhbGN1bGF0b3IuZG9zZ2kgYnVuZGxlOg0KKw0KK29zZ2k+IGluc3RhbGwgZmlsZTouL3RhcmdldC9zYW1wbGUtZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMuamFyDQorQnVuZGxlIGlkIGlzIDE5OA0KKw0KK29zZ2k+IHN0YXJ0IDE5OA0KK05vdiA0LCAyMDA5IDU6MTY6NTEgUE0gY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLmltcGwuT3BlcmF0aW9uc0FjdGl2YXRvciBzdGFyDQordA0KK0lORk86IFN0YXJ0aW5nIGNhbGN1bGF0b3IuZG9zZ2kuZHluYW1pYy5vcGVyYXRpb25zXzEuMC4wIFsxOThdDQorTm92IDQsIDIwMDkgNToxNjo1MSBQTSBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuaW1wbC5PcGVyYXRpb25zQWN0aXZhdG9yIHN0YXINCit0DQorSU5GTzogUmVnaXN0ZXJpbmcgY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLkFkZFNlcnZpY2UNCitOb3YgNCwgMjAwOSA1OjE2OjUxIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5pbXBsLk5vZGVJbXBsIHN0YXJ0DQorSU5GTzogU3RhcnRpbmcgbm9kZTogdXJuOm9zZ2kuc2VydmljZS5kM2NhZGI5My1lOWI5LTQ0ODYtODdlYi0wN2VjZTExODg4ZjYgZG9tYWkNCituOiB0dXNjYW55LmFwYWNoZS5vcmcNCitOb3YgNCwgMjAwOSA1OjE2OjUxIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5ybWkuRGVmYXVsdFJNSUhvc3QgcmVnaXN0ZXJTZQ0KK3J2aWNlDQorSU5GTzogUk1JIHNlcnZpY2UgcmVnaXN0ZXJlZDogcm1pOi8vbG9jYWxob3N0OjgwODUvQWRkU2VydmljZQ0KK05vdiA0LCAyMDA5IDU6MTY6NTEgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5LmltcGwuRW5kcG9pbnRSZWdpc3RyDQoreUltcGwgYWRkRW5kcG9pbnQNCitJTkZPOiBBZGQgZW5kcG9pbnQgLSAoQDgxNDQ3NDQpRW5kcG9pbnQ6ICBVUkkgPSBvc2dpLnNlcnZpY2UuZDNjYWRiOTMtZTliOS00NDg2LQ0KKzg3ZWItMDdlY2UxMTg4OGY2I3NlcnZpY2UtYmluZGluZyhBZGRTZXJ2aWNlL0FkZCkNCitOb3YgNCwgMjAwOSA1OjE2OjUxIFBNIGNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5pbXBsLk9wZXJhdGlvbnNBY3RpdmF0b3Igc3Rhcg0KK3QNCitJTkZPOiBSZWdpc3RlcmluZyBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuU3VidHJhY3RTZXJ2aWNlDQorTm92IDQsIDIwMDkgNToxNjo1MSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuaW1wbC5Ob2RlSW1wbCBzdGFydA0KK0lORk86IFN0YXJ0aW5nIG5vZGU6IHVybjpvc2dpLnNlcnZpY2UuYjYyNTljY2MtNmFlNC00MWYwLWI2MWItYzVhOGM3ZjQyYjM1IGRvbWFpDQorbjogdHVzY2FueS5hcGFjaGUub3JnDQorTm92IDQsIDIwMDkgNToxNjo1MSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qucm1pLkRlZmF1bHRSTUlIb3N0IHJlZ2lzdGVyU2UNCitydmljZQ0KK0lORk86IFJNSSBzZXJ2aWNlIHJlZ2lzdGVyZWQ6IHJtaTovL2xvY2FsaG9zdDo4MDg1L1N1YnRyYWN0U2VydmljZQ0KK05vdiA0LCAyMDA5IDU6MTY6NTEgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5LmltcGwuRW5kcG9pbnRSZWdpc3RyDQoreUltcGwgYWRkRW5kcG9pbnQNCitJTkZPOiBBZGQgZW5kcG9pbnQgLSAoQDMwMjI5MTE0KUVuZHBvaW50OiAgVVJJID0gb3NnaS5zZXJ2aWNlLmI2MjU5Y2NjLTZhZTQtNDFmMA0KKy1iNjFiLWM1YThjN2Y0MmIzNSNzZXJ2aWNlLWJpbmRpbmcoU3VidHJhY3RTZXJ2aWNlL1N1YnRyYWN0KQ0KK05vdiA0LCAyMDA5IDU6MTY6NTEgUE0gY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLmltcGwuT3BlcmF0aW9uc0FjdGl2YXRvciBzdGFyDQordA0KK0lORk86IFJlZ2lzdGVyaW5nIGNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5NdWx0aXBseVNlcnZpY2UNCitOb3YgNCwgMjAwOSA1OjE2OjUxIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5pbXBsLk5vZGVJbXBsIHN0YXJ0DQorSU5GTzogU3RhcnRpbmcgbm9kZTogdXJuOm9zZ2kuc2VydmljZS44NDY5YzY0Yy05YTI4LTQ3YjMtYmM0YS1jNWZhOGQ0NzEwNTcgZG9tYWkNCituOiB0dXNjYW55LmFwYWNoZS5vcmcNCitOb3YgNCwgMjAwOSA1OjE2OjUxIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC5ybWkuRGVmYXVsdFJNSUhvc3QgcmVnaXN0ZXJTZQ0KK3J2aWNlDQorSU5GTzogUk1JIHNlcnZpY2UgcmVnaXN0ZXJlZDogcm1pOi8vbG9jYWxob3N0OjgwODUvTXVsdGlwbHlTZXJ2aWNlDQorTm92IDQsIDIwMDkgNToxNjo1MSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5FbmRwb2ludFJlZ2lzdHINCit5SW1wbCBhZGRFbmRwb2ludA0KK0lORk86IEFkZCBlbmRwb2ludCAtIChAMzMxMjcwNClFbmRwb2ludDogIFVSSSA9IG9zZ2kuc2VydmljZS44NDY5YzY0Yy05YTI4LTQ3YjMtDQorYmM0YS1jNWZhOGQ0NzEwNTcjc2VydmljZS1iaW5kaW5nKE11bHRpcGx5U2VydmljZS9NdWx0aXBseSkNCitOb3YgNCwgMjAwOSA1OjE2OjUxIFBNIGNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5pbXBsLk9wZXJhdGlvbnNBY3RpdmF0b3Igc3Rhcg0KK3QNCitJTkZPOiBSZWdpc3RlcmluZyBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuRGl2aWRlU2VydmljZQ0KK05vdiA0LCAyMDA5IDU6MTY6NTEgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmltcGwuTm9kZUltcGwgc3RhcnQNCitJTkZPOiBTdGFydGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLmI0MzU1NWYwLTk1MDktNDQ0ZS1iMjJhLTA2ZDM0N2FiN2U5OCBkb21haQ0KK246IHR1c2NhbnkuYXBhY2hlLm9yZw0KK05vdiA0LCAyMDA5IDU6MTY6NTEgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0LnJtaS5EZWZhdWx0Uk1JSG9zdCByZWdpc3RlclNlDQorcnZpY2UNCitJTkZPOiBSTUkgc2VydmljZSByZWdpc3RlcmVkOiBybWk6Ly9sb2NhbGhvc3Q6ODA4NS9EaXZpZGVTZXJ2aWNlDQorTm92IDQsIDIwMDkgNToxNjo1MSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5FbmRwb2ludFJlZ2lzdHINCit5SW1wbCBhZGRFbmRwb2ludA0KK0lORk86IEFkZCBlbmRwb2ludCAtIChAODAxMDI4OClFbmRwb2ludDogIFVSSSA9IG9zZ2kuc2VydmljZS5iNDM1NTVmMC05NTA5LTQ0NGUtDQorYjIyYS0wNmQzNDdhYjdlOTgjc2VydmljZS1iaW5kaW5nKERpdmlkZVNlcnZpY2UvRGl2aWRlKQ0KK05vdiA0LCAyMDA5IDU6MTY6NTEgUE0gY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLmltcGwuT3BlcmF0aW9uc0FjdGl2YXRvciBnZXRCDQordW5kbGUNCitJTkZPOiBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMuQWRkU2VydmljZSBpcyBsb2FkZWQgYnkgYnVuZGxlOiBjYWxjdWxhdG9yLmRvcw0KK2dpLmR5bmFtaWMub3BlcmF0aW9ucw0KKw0KK29zZ2k+DQorDQorVG8gc3RvcCB0aGUgYnVuZGxlOg0KKw0KK29zZ2k+IHN0b3AgMTk4DQorTm92IDQsIDIwMDkgNToxODo0MyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuaW1wbC5Ob2RlSW1wbCBzdG9wDQorSU5GTzogU3RvcHBpbmcgbm9kZTogdXJuOm9zZ2kuc2VydmljZS5iNDM1NTVmMC05NTA5LTQ0NGUtYjIyYS0wNmQzNDdhYjdlOTgNCitOb3YgNCwgMjAwOSA1OjE4OjQzIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5hc3NlbWJseS5pbXBsLkVuZHBvaW50UmVnaXN0cg0KK3lJbXBsIGVuZHBvaW50UmVtb3ZlZA0KK0lORk86IFJlbW92ZSBlbmRwb2ludCAtIChAODAxMDI4OClFbmRwb2ludDogIFVSSSA9IG9zZ2kuc2VydmljZS5iNDM1NTVmMC05NTA5LTQ0DQorNGUtYjIyYS0wNmQzNDdhYjdlOTgjc2VydmljZS1iaW5kaW5nKERpdmlkZVNlcnZpY2UvRGl2aWRlKQ0KK05vdiA0LCAyMDA5IDU6MTg6NDMgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0LnJtaS5EZWZhdWx0Uk1JSG9zdCB1bnJlZ2lzdGVyDQorU2VydmljZQ0KK0lORk86IFJNSSBzZXJ2aWNlIHVucmVnaXN0ZXJlZDogcm1pOi8vbG9jYWxob3N0OjgwODUvRGl2aWRlU2VydmljZQ0KK05vdiA0LCAyMDA5IDU6MTg6NDMgUE0gY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLmltcGwuT3BlcmF0aW9uc0FjdGl2YXRvciBzdG9wDQorDQorSU5GTzogU3RvcHBpbmcgY2FsY3VsYXRvci5kb3NnaS5keW5hbWljLm9wZXJhdGlvbnNfMS4wLjAgWzE5OF0NCitOb3YgNCwgMjAwOSA1OjE4OjQzIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5pbXBsLk5vZGVJbXBsIHN0b3ANCitJTkZPOiBTdG9wcGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLmQzY2FkYjkzLWU5YjktNDQ4Ni04N2ViLTA3ZWNlMTE4ODhmNg0KK05vdiA0LCAyMDA5IDU6MTg6NDMgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5LmltcGwuRW5kcG9pbnRSZWdpc3RyDQoreUltcGwgZW5kcG9pbnRSZW1vdmVkDQorSU5GTzogUmVtb3ZlIGVuZHBvaW50IC0gKEA4MTQ0NzQ0KUVuZHBvaW50OiAgVVJJID0gb3NnaS5zZXJ2aWNlLmQzY2FkYjkzLWU5YjktNDQNCis4Ni04N2ViLTA3ZWNlMTE4ODhmNiNzZXJ2aWNlLWJpbmRpbmcoQWRkU2VydmljZS9BZGQpDQorTm92IDQsIDIwMDkgNToxODo0MyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qucm1pLkRlZmF1bHRSTUlIb3N0IHVucmVnaXN0ZXINCitTZXJ2aWNlDQorSU5GTzogUk1JIHNlcnZpY2UgdW5yZWdpc3RlcmVkOiBybWk6Ly9sb2NhbGhvc3Q6ODA4NS9BZGRTZXJ2aWNlDQorTm92IDQsIDIwMDkgNToxODo0MyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuaW1wbC5Ob2RlSW1wbCBzdG9wDQorSU5GTzogU3RvcHBpbmcgbm9kZTogdXJuOm9zZ2kuc2VydmljZS5iNjI1OWNjYy02YWU0LTQxZjAtYjYxYi1jNWE4YzdmNDJiMzUNCitOb3YgNCwgMjAwOSA1OjE4OjQzIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5hc3NlbWJseS5pbXBsLkVuZHBvaW50UmVnaXN0cg0KK3lJbXBsIGVuZHBvaW50UmVtb3ZlZA0KK0lORk86IFJlbW92ZSBlbmRwb2ludCAtIChAMzAyMjkxMTQpRW5kcG9pbnQ6ICBVUkkgPSBvc2dpLnNlcnZpY2UuYjYyNTljY2MtNmFlNC00DQorMWYwLWI2MWItYzVhOGM3ZjQyYjM1I3NlcnZpY2UtYmluZGluZyhTdWJ0cmFjdFNlcnZpY2UvU3VidHJhY3QpDQorTm92IDQsIDIwMDkgNToxODo0MyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qucm1pLkRlZmF1bHRSTUlIb3N0IHVucmVnaXN0ZXINCitTZXJ2aWNlDQorSU5GTzogUk1JIHNlcnZpY2UgdW5yZWdpc3RlcmVkOiBybWk6Ly9sb2NhbGhvc3Q6ODA4NS9TdWJ0cmFjdFNlcnZpY2UNCitOb3YgNCwgMjAwOSA1OjE4OjQzIFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5pbXBsLk5vZGVJbXBsIHN0b3ANCitJTkZPOiBTdG9wcGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLjg0NjljNjRjLTlhMjgtNDdiMy1iYzRhLWM1ZmE4ZDQ3MTA1Nw0KK05vdiA0LCAyMDA5IDU6MTg6NDMgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLmFzc2VtYmx5LmltcGwuRW5kcG9pbnRSZWdpc3RyDQoreUltcGwgZW5kcG9pbnRSZW1vdmVkDQorSU5GTzogUmVtb3ZlIGVuZHBvaW50IC0gKEAzMzEyNzA0KUVuZHBvaW50OiAgVVJJID0gb3NnaS5zZXJ2aWNlLjg0NjljNjRjLTlhMjgtNDcNCitiMy1iYzRhLWM1ZmE4ZDQ3MTA1NyNzZXJ2aWNlLWJpbmRpbmcoTXVsdGlwbHlTZXJ2aWNlL011bHRpcGx5KQ0KK05vdiA0LCAyMDA5IDU6MTg6NDMgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0LnJtaS5EZWZhdWx0Uk1JSG9zdCB1bnJlZ2lzdGVyDQorU2VydmljZQ0KK0lORk86IFJNSSBzZXJ2aWNlIHVucmVnaXN0ZXJlZDogcm1pOi8vbG9jYWxob3N0OjgwODUvTXVsdGlwbHlTZXJ2aWNlDQorTm92IDQsIDIwMDkgNToxODo0MyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuaW1wbC5Ob2RlSW1wbCBzdG9wDQorSU5GTzogU3RvcHBpbmcgbm9kZTogdXJuOm9zZ2kuc2VydmljZS5iNDM1NTVmMC05NTA5LTQ0NGUtYjIyYS0wNmQzNDdhYjdlOTgNCisNCitvc2dpPg0KKw0KK1RvIGV4aXQgdGhlIGNvbnNvbGUsIHJ1bjoNCitvc2dpPiBleGl0DQorDQorU2FtcGxlIE92ZXJ2aWV3DQorLS0tLS0tLS0tLS0tLS0tDQorVGhlIGFwcGxpY2F0aW9uIGNvbnNpc3RzIG9mIHR3byBPU0dpIGJ1bmRsZXM6DQorICogVGhlIGNhbGN1bGF0b3IgYnVuZGxlOiBJdCBwcm92aWRlcyB0aGUgY2FsY3VsYXRvciBzZXJ2aWNlLiBUaGUgc2VydmljZSBpcyBpbXBsZW1lbnRlZCBieSBhIGphdmEgY2xhc3MgdGhhdA0KKyAgIGNvbnN1bWVzIG90aGVyIHNlcnZpY2VzIHRvIHBlcmZvcm0gdGhlIJNhZGSULCCTc3VidHJhY3SULCCTbXVsdGlwbHmUIGFuZCCTZGl2aWRllCBvcGVyYXRpb25zLg0KKyAqIFRoZSBvcGVyYXRpb25zIGJ1bmRsZTogSXQgcHJvdmlkZXMgdGhlIGFkZC9zdWJ0cmFjdC9tdWx0aXBseS9kaXZpZGUgc2VydmljZXMuDQorICAgKFNlZSAuLi9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zKQ0KKw0KKw0KK2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zLw0KKyAgc3JjLw0KKyAgICBtYWluLw0KKyAgICAgIGphdmEvDQorICAgICAgICBjYWxjdWxhdG9yLw0KKyAgICAgICAgICAgIGRvc2dpLw0KKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLw0KKyAgICAgICAgICAgICAgICAgICAgQWRkU2VydmljZS5qYXZhIC0gSW50ZXJmYWNlIGZvciBBZGQNCisgICAgICAgICAgICAgICAgICAgIFN1YnRyYWN0U2VydmljZS5qYXZhIC0gSW50ZXJmYWNlIGZvciBTdWJ0cmFjdA0KKyAgICAgICAgICAgICAgICAgICAgTXVsdGlwbHlTZXJ2aWNlLmphdmEgLSBJbnRlcmZhY2UgZm9yIE11bHRpcGx5DQorICAgICAgICAgICAgICAgICAgICBEaXZpZGVTZXJ2aWNlLmphdmEgLSBJbnRlcmZhY2UgZm9yIERpdmlkZQ0KKyAgICAgICAgICAgICAgICAgICAgaW1wbC8NCisgICAgICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb25zQWN0aXZhdG9yLmphdmEgLSBPU0dpIGJ1bmRsZSBhY3RpdmF0b3INCisgICAgICAgICAgICAgICAgICAgICAgICBBZGRTZXJ2aWNlSW1wbC5qYXZhIC0gSW1wbGVtZW50YXRpb24gZm9yIEFkZA0KKyAgICAgICAgICAgICAgICAgICAgICAgIFN1YnRyYWN0U2VydmljZUltcGwuamF2YSAtIEltcGxlbWVudGF0aW9uIGZvciBTdWJ0cmFjdA0KKyAgICAgICAgICAgICAgICAgICAgICAgIE11bHRpcGx5U2VydmljZUltcGwuamF2YSAtIEltcGxlbWVudGF0aW9uIGZvciBNdWx0aXBseQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIERpdmlkZVNlcnZpY2VJbXBsLmphdmEgLSBJbXBsZW1lbnRhdGlvbiBmb3IgRGl2aWRlDQorICAgICAgcmVzb3VyY2VzLw0KKyAgICAgICAgICAgIE1FVEEtSU5GLw0KKyAgICAgICAgICAgICAgICBzY2EtY29udHJpYnV0aW9uLnhtbA0KKyAgICAgICAgICAgT1NHSS1JTkYvDQorICAgICAgICAgICAgICAgIHNjYS1jb25maWcvDQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLWNvbmZpZy54bWwgLSBUaGUgU0NBIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgT1NHaSByZW1vdGUgc2VydmljZXMNCisgIHRlc3QvDQorICAgIGphdmEvDQorICAgICAgICBzcmMvDQorICAgICAgICAgICAgY2FsY3VsYXRvci8NCisgICAgICAgICAgICAgICAgZG9zZ2kvDQorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLw0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRlc3QvDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZXJhdGlvbnNPU0dpTm9kZVRlc3RDYXNlLmphdmEgLSBUaGUgSlVOSVQgdGVzdCBjYXNlIHRoYXQgdGVzdHMgdGhpcyBidW5kbGUgdXNpbmcgYSBSTUkgY2xpZW50DQorDQorICBNRVRBLUlORi8NCisgICAgTUFOSUZFU1QuTUYgLSBUaGUgT1NHaSBtYW5pZmVzdCBmb3IgdGhpcyBidW5kbGUNCisgIHBvbS54bWwgICAgICAgICAgICAgICAgICAgICAgICAgLSB0aGUgTWF2ZW4gYnVpbGQgZmlsZQ0KKw0KKw0KKw0KK0J1aWxkaW5nIEFuZCBSdW5uaW5nIFRoZSBUZXN0IENhc2UgVXNpbmcgTWF2ZW4NCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorV2l0aCBlaXRoZXIgdGhlIGJpbmFyeSBvciBzb3VyY2UgZGlzdHJpYnV0aW9ucyB0aGUgc2FtcGxlIGNhbiBiZSBidWlsdCBhbmQgcnVuDQordXNpbmcgTWF2ZW4gYXMgZm9sbG93cy4NCisNCitjZCBkb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucw0KK212bg0KKw0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNTAxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9wb20ueG1sCkBAIC0wLDAgKzEsMTQ4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnNhbXBsZS1kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9uczwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIE9TR2kgUmVtb3RlIFNlcnZpY2VzIER5bmFtaWMgQ2FsY3VsYXRvciBPcGVyYXRpb25zPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtYWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGwtb3NnaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uub3NnaTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+My4yLjAtdjIwMDkwNTIwLTE4MDA8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8IS0tIEVxdWlub3ggRGVjbGFyYXRpdmUgU2VydmljZXMgLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZXF1aW5veDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmRzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4xLjAtdjIwMDkwNjAxPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5lcXVpbm94PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dXRpbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC4xMDAtdjIwMDkwNTIwLTE4MDA8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgorICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZWNsaXBzZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi41LjE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmRzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZD5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9idWlsZGNvbW1hbmQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9idWlsZGNvbW1hbmQ+CisgICAgICAgICAgICAgICAgICAgIDwvYnVpbGRjb21tYW5kcz4KKyAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvcHJvamVjdG5hdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L3Byb2plY3RuYXR1cmU+CisgICAgICAgICAgICAgICAgICAgIDwvcHJvamVjdG5hdHVyZXM+CisgICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGhDb250YWluZXJzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aENvbnRhaW5lcj5vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xhc3NwYXRoQ29udGFpbmVyPgorICAgICAgICAgICAgICAgICAgICA8L2NsYXNzcGF0aENvbnRhaW5lcnM+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisKKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamFyLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGFyY2hpdmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPiR7YmFzZWRpcn0vTUVUQS1JTkYvTUFOSUZFU1QuTUY8L21hbmlmZXN0RmlsZT4KKyAgICAgICAgICAgICAgICAgICAgPC9hcmNoaXZlPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLW9zZ2ktanVuaXQtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWxhdW5jaGVyLWVxdWlub3g8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPm9zZ2ktdGVzdDwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+dGVzdDwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+dGVzdDwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3lzdGVtUHJvcGVydGllcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5hbWU+b3NnaS5jb25maWd1cmF0aW9uLmFyZWE8L25hbWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmFsdWU+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vZXF1aW5veDwvdmFsdWU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zeXN0ZW1Qcm9wZXJ0aWVzPiAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvQWRkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvQWRkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL0FkZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvQWRkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL0RpdmlkZVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL0RpdmlkZVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9EaXZpZGVTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL0RpdmlkZVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9NdWx0aXBseVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL011bHRpcGx5U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL011bHRpcGx5U2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9NdWx0aXBseVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9TdWJ0cmFjdFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL1N1YnRyYWN0U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL1N1YnRyYWN0U2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9TdWJ0cmFjdFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL0FkZFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL0FkZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9BZGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL0FkZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvRGl2aWRlU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvT3BlcmF0aW9uc0FjdGl2YXRvci5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9PcGVyYXRpb25zQWN0aXZhdG9yLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9PcGVyYXRpb25zQWN0aXZhdG9yLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvT3BlcmF0aW9uc0FjdGl2YXRvci5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL3Rlc3QvT1NHaVRlc3RVdGlscy5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvdGVzdC9PU0dpVGVzdFV0aWxzLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvdGVzdC9PU0dpVGVzdFV0aWxzLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL3Rlc3QvT1NHaVRlc3RVdGlscy5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL3Rlc3QvT3BlcmF0aW9uc05vZGUuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL3Rlc3QvT3BlcmF0aW9uc05vZGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy90ZXN0L09wZXJhdGlvbnNOb2RlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL3Rlc3QvT3BlcmF0aW9uc05vZGUuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy90ZXN0L09wZXJhdGlvbnNPU0dpTm9kZVRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy90ZXN0L09wZXJhdGlvbnNPU0dpTm9kZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvdGVzdC9PcGVyYXRpb25zT1NHaU5vZGVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy90ZXN0L09wZXJhdGlvbnNPU0dpTm9kZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL0xJQ0VOU0UgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvTElDRU5TRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvTElDRU5TRQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL0xJQ0VOU0UKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL01FVEEtSU5GL01BTklGRVNULk1GIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL01FVEEtSU5GL01BTklGRVNULk1GCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL01FVEEtSU5GL01BTklGRVNULk1GCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9OT1RJQ0UgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvTk9USUNFCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9OT1RJQ0UKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9OT1RJQ0UKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL09TR0ktSU5GL2JsdWVwcmludC9jYWxjdWxhdG9yLW1vZHVsZS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvT1NHSS1JTkYvYmx1ZXByaW50L2NhbGN1bGF0b3ItbW9kdWxlLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvT1NHSS1JTkYvYmx1ZXByaW50L2NhbGN1bGF0b3ItbW9kdWxlLnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL09TR0ktSU5GL2JsdWVwcmludC9jYWxjdWxhdG9yLW1vZHVsZS54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL09TR0ktSU5GL2NhbGN1bGF0b3ItY29tcG9uZW50LnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9PU0dJLUlORi9jYWxjdWxhdG9yLWNvbXBvbmVudC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL09TR0ktSU5GL2NhbGN1bGF0b3ItY29tcG9uZW50LnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL09TR0ktSU5GL2NhbGN1bGF0b3ItY29tcG9uZW50LnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL09TR0ktSU5GL3JlbW90ZS1zZXJ2aWNlL2NhbGN1bGF0b3Itc2VydmljZS1kZXNjcmlwdGlvbnMueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL09TR0ktSU5GL3JlbW90ZS1zZXJ2aWNlL2NhbGN1bGF0b3Itc2VydmljZS1kZXNjcmlwdGlvbnMueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NWZhOWUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvT1NHSS1JTkYvcmVtb3RlLXNlcnZpY2UvY2FsY3VsYXRvci1zZXJ2aWNlLWRlc2NyaXB0aW9ucy54bWwKQEAgLTAsMCArMSw3MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorKgorKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorKgorKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPCEtLSBBIGNvbnN1bWVyLXNpZGUgc2VydmljZSBkZXNjcmlwdGlvbiBmaWxlIGZvciBSRkMgMTE5IC0tPgorPGVuZHBvaW50LWRlc2NyaXB0aW9ucyB4bWxucz0iaHR0cDovL3d3dy5vc2dpLm9yZy94bWxucy9yc2EvdjEuMC4wIiAKKyAgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiPgorICAgIDwhLS0gRGVzY3JpYmUgYSByZW1vdGUgT1NHaSBzZXJ2aWNlICAtLT4KKyAgICA8ZW5kcG9pbnQtZGVzY3JpcHRpb24+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvYmplY3RDbGFzcyIgdmFsdWU9ImNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5BZGRTZXJ2aWNlIiAvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0icmVtb3RlLmNvbmZpZ3Muc3VwcG9ydGVkIiB2YWx1ZT0ib3JnLm9zZ2kuc2NhIi8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZXJ2aWNlLmltcG9ydGVkLmNvbmZpZ3MiIHZhbHVlPSJvcmcub3NnaS5zY2EiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InNjYS5yZWZlcmVuY2UiIHZhbHVlPSJhZGRTZXJ2aWNlIi8+Cis8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0+Cis8IS0tIFByb3BlcnR5IG9yZy5vc2dpLnNjYS5iaW5kaW5ncyBjYW4gYmUgcmVtb3ZlZCB3aGVuIHJ1bm5pbmcgd2l0aCAtRG9yZy5vc2dpLnNjYS5kb21haW4ucmVnaXN0cnk9dHJpYmVzOmRlZmF1bHQgLS0+ICAgICAgICAgCisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcmcub3NnaS5zY2EuYmluZGluZ3MiPgorICAgICAgICAgICAgPGxpc3Q+CisgICAgICAgICAgICAgICAgPHZhbHVlPntodHRwOi8vc2FtcGxlfUFkZDwvdmFsdWU+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+Cis8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0+CisgICAgPC9lbmRwb2ludC1kZXNjcmlwdGlvbj4KKyAgICA8ZW5kcG9pbnQtZGVzY3JpcHRpb24+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvYmplY3RDbGFzcyIgdmFsdWU9ImNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5TdWJ0cmFjdFNlcnZpY2UiIC8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZXJ2aWNlLmltcG9ydGVkLmNvbmZpZ3MiIHZhbHVlPSJvcmcub3NnaS5zY2EiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlbW90ZS5jb25maWdzLnN1cHBvcnRlZCIgdmFsdWU9Im9yZy5vc2dpLnNjYSIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2NhLnJlZmVyZW5jZSIgdmFsdWU9InN1YnRyYWN0U2VydmljZSIvPgorPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tPgorPCEtLSBQcm9wZXJ0eSBvcmcub3NnaS5zY2EuYmluZGluZ3MgY2FuIGJlIHJlbW92ZWQgd2hlbiBydW5uaW5nIHdpdGggLURvcmcub3NnaS5zY2EuZG9tYWluLnJlZ2lzdHJ5PXRyaWJlczpkZWZhdWx0IC0tPiAgICAgICAgIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JnLm9zZ2kuc2NhLmJpbmRpbmdzIj4KKyAgICAgICAgICAgIDxsaXN0PgorICAgICAgICAgICAgICAgIDx2YWx1ZT57aHR0cDovL3NhbXBsZX1TdWJ0cmFjdDwvdmFsdWU+CisgICAgICAgICAgICA8L2xpc3Q+CisgICAgICAgIDwvcHJvcGVydHk+Cis8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLS0+CisgICAgPC9lbmRwb2ludC1kZXNjcmlwdGlvbj4KKyAgICA8ZW5kcG9pbnQtZGVzY3JpcHRpb24+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvYmplY3RDbGFzcyIgdmFsdWU9ImNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucy5NdWx0aXBseVNlcnZpY2UiIC8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZXJ2aWNlLmltcG9ydGVkLmNvbmZpZ3MiIHZhbHVlPSJvcmcub3NnaS5zY2EiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlbW90ZS5jb25maWdzLnN1cHBvcnRlZCIgdmFsdWU9Im9yZy5vc2dpLnNjYSIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2NhLnJlZmVyZW5jZSIgdmFsdWU9Im11bHRpcGx5U2VydmljZSIvPgorPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tPgorPCEtLSBQcm9wZXJ0eSBvcmcub3NnaS5zY2EuYmluZGluZ3MgY2FuIGJlIHJlbW92ZWQgd2hlbiBydW5uaW5nIHdpdGggLURvcmcub3NnaS5zY2EuZG9tYWluLnJlZ2lzdHJ5PXRyaWJlczpkZWZhdWx0IC0tPiAgICAgICAgIAorICAgICAgICA8cHJvcGVydHkgbmFtZT0ib3JnLm9zZ2kuc2NhLmJpbmRpbmdzIiB2YWx1ZT0ie2h0dHA6Ly9zYW1wbGV9TXVsdGlwbHkiLz4KKzwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLT4KKyAgICA8L2VuZHBvaW50LWRlc2NyaXB0aW9uPgorICAgIDxlbmRwb2ludC1kZXNjcmlwdGlvbj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Im9iamVjdENsYXNzIiB2YWx1ZT0iY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLkRpdmlkZVNlcnZpY2UiIC8+CisgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzZXJ2aWNlLmltcG9ydGVkLmNvbmZpZ3MiIHZhbHVlPSJvcmcub3NnaS5zY2EiLz4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9InJlbW90ZS5jb25maWdzLnN1cHBvcnRlZCIgdmFsdWU9Im9yZy5vc2dpLnNjYSIvPgorICAgICAgICA8cHJvcGVydHkgbmFtZT0ic2NhLnJlZmVyZW5jZSIgdmFsdWU9ImRpdmlkZVNlcnZpY2UiLz4KKzwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMtLT4KKzwhLS0gUHJvcGVydHkgb3JnLm9zZ2kuc2NhLmJpbmRpbmdzIGNhbiBiZSByZW1vdmVkIHdoZW4gcnVubmluZyB3aXRoIC1Eb3JnLm9zZ2kuc2NhLmRvbWFpbi5yZWdpc3RyeT10cmliZXM6ZGVmYXVsdCAtLT4gICAgICAgICAKKyAgICAgICAgPHByb3BlcnR5IG5hbWU9Im9yZy5vc2dpLnNjYS5iaW5kaW5ncyIgdmFsdWU9IntodHRwOi8vc2FtcGxlfURpdmlkZSIvPgorPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy0tPgorICAgIDwvZW5kcG9pbnQtZGVzY3JpcHRpb24+Cis8L2VuZHBvaW50LWRlc2NyaXB0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9PU0dJLUlORi9zY2EtY29uZmlnL2NhbGN1bGF0b3ItY29uZmlnLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9PU0dJLUlORi9zY2EtY29uZmlnL2NhbGN1bGF0b3ItY29uZmlnLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IvT1NHSS1JTkYvc2NhLWNvbmZpZy9jYWxjdWxhdG9yLWNvbmZpZy54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9PU0dJLUlORi9zY2EtY29uZmlnL2NhbGN1bGF0b3ItY29uZmlnLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL1JFQURNRSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwZWFkNwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9SRUFETUUKQEAgLTAsMCArMSwxNDggQEAKK0Rpc3RyaWJ1dGVkIE9TR2kgQ2FsY3VsYXRvciBTYW1wbGUNCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorVGhpcyBzYW1wbGUgaW1wbGVtZW50cyBhIGRpc3RyaWJ1dGVkIGNhbGN1bGF0b3IgdXNpbmcgRGlzdHJpYnV0ZWQgT1NHaSAoUkZDIDExOSkgb3ZlciBTQ0EuDQorDQorVGhlIFJFQURNRSBpbiB0aGUgPGRpc3RyaWJ1dGlvbi11bnBhY2stZGlyPi9zYW1wbGVzIGRpcmVjdG9yeSBwcm92aWRlcyANCitnZW5lcmFsIGluc3RydWN0aW9ucyBhYm91dCBidWlsZGluZyBhbmQgcnVubmluZyBzYW1wbGVzLiAod2hlcmUNCitkaXN0cmlidXRpb24tdW5wYWNrLWRpciBpcyB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdSB1bnBhY2tlZCB0aGUgdHVzY2FueQ0KK2JpbmFyeSBkaXN0cmlidXRpb24gYXJjaGl2ZSkuIFRha2UgYSBsb29rIHRoZXJlIGZpcnN0IChub3RpbmcgYXQgeW91IHJlYWQgaXQgdGhhdCB0aGlzIHNhbXBsZQ0KK2lzIG5vdCBhIG5ldyBzdHlsZSBzYW1wbGUpLiANCisNCitOT1RFOiBpZiB5b3Ugd2FudCB0aGlzIHNhbXBsZSB0byBleHBsb2l0IHRoZSBkeW5hbWljIGRpc3RyaWJ1dGlvbiBiZWhhdmlvdXIgdGhlcmUgaXMgc29tZSB1bml0IHRlc3QNCisgICAgICBjb25maWd1cmF0aW9uIHRoYXQgc2hvdWxkIGJlIGRpc2FibGVkLiBTZWUgdGhlIGNvbW1lbnRzIGluIE9TR0ktSU5GL3JlbW90ZS1zZXJ2aWNlL2NhbGN1bGF0b3Itc2VydmljZS1kZXNjcmlwdGlvbnMueG1sDQorDQorT24gV2luZG93cywgcnVuDQoramF2YSAtamFyIC4uXC4uXG1vZHVsZXNcb3NnaS0zLjUuMC12MjAwOTA1MjAuamFyIC1jb25maWd1cmF0aW9uIC4uXC4uXGZlYXR1cmVzXGNvbmZpZ3VyYXRpb24gLWNsZWFuIC1jb25zb2xlIC1Eb3JnLm9zZ2kuc2NhLmRvbWFpbi5yZWdpc3RyeT10cmliZXM6ZGVmYXVsdA0KKw0KK09uICpVbml4LCBydW4NCitqYXZhIC1qYXIgLi4vLi4vbW9kdWxlcy9vc2dpLTMuNS4wLXYyMDA5MDUyMC5qYXIgLWNvbmZpZ3VyYXRpb24gLi4vLi4vZmVhdHVyZXMvY29uZmlndXJhdGlvbiAtY2xlYW4gLWNvbnNvbGUgLURvcmcub3NnaS5zY2EuZG9tYWluLnJlZ2lzdHJ5PXRyaWJlczpkZWZhdWx0DQorDQorWW91IHNob3VsZCBzZWUgdGhlIG9zZ2kgY29uc29sZToNCisNCitvc2dpPg0KKw0KK29zZ2k+IEp1biAyMiwgMjAwOSAxOjMyOjI3IFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZXh0ZW5zaWJpbGl0eS5lcXVpbm94LkVxdWlub3hTZXJ2aWNlRGlzY292ZXJ5QWN0aXZhdG9yIHN0YXJ0DQorSU5GTzogRXF1aW5veC1iYXNlZCBzZXJ2aWNlIGRpc2NvdmVyZXIgaXMgbm93IGNvbmZpZ3VyZWQuDQorDQorWW91IGNhbiBydW4gInNzIiBjb21tYW5kIHVuZGVyIHRoZSBvc2dpPiB0byBzZWUgdGhlIHN0YXR1cyBvZiB0aGUgYnVuZGxlcy4NCitvc2dpPiBzcw0KKw0KK1RoZW4geW91IGNhbiBpbnN0YWxsIGFuZCBzdGFydCB0aGUgY2FsY3VsYXRvci5kb3NnaSBidW5kbGU6DQorDQorb3NnaT4gaW5zdGFsbCBmaWxlOi4vdGFyZ2V0L3NhbXBsZS1kb3NnaS1keW5hbWljLWNhbGN1bGF0b3IuamFyDQorQnVuZGxlIGlkIGlzIDE5OA0KKw0KK29zZ2k+IHN0YXJ0IDE5OA0KK05vdiA0LCAyMDA5IDU6MjA6MjEgUE0gY2FsY3VsYXRvci5kb3NnaS5pbXBsLkNhbGN1bGF0b3JBY3RpdmF0b3Igc3RhcnQNCitJTkZPOiBTdGFydGluZyBjYWxjdWxhdG9yLmRvc2dpLmR5bmFtaWNfMS4wLjAgWzE5OF0NCitOb3YgNCwgMjAwOSA1OjIwOjIxIFBNIGNhbGN1bGF0b3IuZG9zZ2kuaW1wbC5DYWxjdWxhdG9yQWN0aXZhdG9yIHN0YXJ0DQorSU5GTzogUmVnaXN0ZXJpbmcgY2FsY3VsYXRvci5kb3NnaS5DYWxjdWxhdG9yU2VydmljZQ0KK05vdiA0LCAyMDA5IDU6MjA6MjEgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmltcGwuTm9kZUltcGwgc3RhcnQNCitJTkZPOiBTdGFydGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLmQ1YTA2ODM0LWFlMTUtNDJiMy05Mjg3LTcxZmU2NTM3Yzg2OSBkb21haQ0KK246IHR1c2NhbnkuYXBhY2hlLm9yZw0KK2xvZzRqOldBUk4gTm8gYXBwZW5kZXJzIGNvdWxkIGJlIGZvdW5kIGZvciBsb2dnZXIgKG9yZy5hcGFjaGUuYXhpb20ub20udXRpbC5TdEFYDQorVXRpbHMpLg0KK2xvZzRqOldBUk4gUGxlYXNlIGluaXRpYWxpemUgdGhlIGxvZzRqIHN5c3RlbSBwcm9wZXJseS4NCitOb3YgNCwgMjAwOSA1OjIwOjI0IFBNIG9yZy5tb3J0YmF5LmxvZy5TbGY0akxvZyBpbmZvDQorSU5GTzogTG9nZ2luZyB0byBvcmcuc2xmNGouaW1wbC5KREsxNExvZ2dlckFkYXB0ZXIob3JnLm1vcnRiYXkubG9nKSB2aWEgb3JnLm1vcnQNCitiYXkubG9nLlNsZjRqTG9nDQorTm92IDQsIDIwMDkgNToyMDoyNSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmh0dHAuamV0dHkuSmV0dHlMb2dnZXIgaW5mbw0KK0lORk86IGpldHR5LTYuMS54DQorTm92IDQsIDIwMDkgNToyMDoyNSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmh0dHAuamV0dHkuSmV0dHlMb2dnZXIgaW5mbw0KK0lORk86IFN0YXJ0ZWQgU2VsZWN0Q2hhbm5lbENvbm5lY3RvckAwLjAuMC4wOjgwODYNCitOb3YgNCwgMjAwOSA1OjIwOjI1IFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaHR0cC5qZXR0eS5KZXR0eVNlcnZlciBhZGRTZXJ2bGV0TQ0KK2FwcGluZw0KK0lORk86IEFkZGVkIFNlcnZsZXQgbWFwcGluZzogaHR0cDovL3JmZW5ndDYxcDo4MDg2L0NhbGN1bGF0b3JTZXJ2aWNlDQorTm92IDQsIDIwMDkgNToyMDoyNSBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5FbmRwb2ludFJlZ2lzdHINCit5SW1wbCBhZGRFbmRwb2ludA0KK0lORk86IEFkZCBlbmRwb2ludCAtIChAMjMzOTQ1MTYpRW5kcG9pbnQ6ICBVUkkgPSBvc2dpLnNlcnZpY2UuZDVhMDY4MzQtYWUxNS00MmIzDQorLTkyODctNzFmZTY1MzdjODY5I3NlcnZpY2UtYmluZGluZyhDYWxjdWxhdG9yU2VydmljZS9DYWxjdWxhdG9yKQ0KK05vdiA0LCAyMDA5IDU6MjA6MjUgUE0gY2FsY3VsYXRvci5kb3NnaS5pbXBsLkNhbGN1bGF0b3JBY3RpdmF0b3IgZ2V0QnVuZGxlDQorSU5GTzogY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLkFkZFNlcnZpY2UgaXMgbG9hZGVkIGJ5IGJ1bmRsZTogY2FsY3VsYXRvci5kb3MNCitnaS5keW5hbWljDQorDQorWW91IGNhbiBwb2ludCB5b3VyIGJyb3dzZXIgdG8gaHR0cDovL2xvY2FsaG9zdDo4MDg2L0NhbGN1bGF0b3JTZXJ2aWNlP3dzZGwgdG8gc2VlDQordGhlIFdTREwuDQorDQorWW91IGNhbiBhbHNvIHVzZSB0aGUgV2ViU2VydmljZSBFeHBsb3JlciBmcm9tIEVjbGlwc2UgV1RQIHRvIHRlc3QgdGhlIFdlYiBTZXJ2aWNlLg0KKw0KK1RvIHN0b3AgdGhlIGJ1bmRsZToNCisNCitvc2dpPiBzdG9wIDE5OA0KK05vdiA0LCAyMDA5IDU6MjE6MTYgUE0gb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmltcGwuTm9kZUltcGwgc3RvcA0KK0lORk86IFN0b3BwaW5nIG5vZGU6IHVybjpvc2dpLnNlcnZpY2UuZDVhMDY4MzQtYWUxNS00MmIzLTkyODctNzFmZTY1MzdjODY5DQorTm92IDQsIDIwMDkgNToyMToxNiBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuYXNzZW1ibHkuaW1wbC5FbmRwb2ludFJlZ2lzdHINCit5SW1wbCBlbmRwb2ludFJlbW92ZWQNCitJTkZPOiBSZW1vdmUgZW5kcG9pbnQgLSAoQDIzMzk0NTE2KUVuZHBvaW50OiAgVVJJID0gb3NnaS5zZXJ2aWNlLmQ1YTA2ODM0LWFlMTUtNA0KKzJiMy05Mjg3LTcxZmU2NTM3Yzg2OSNzZXJ2aWNlLWJpbmRpbmcoQ2FsY3VsYXRvclNlcnZpY2UvQ2FsY3VsYXRvcikNCitOb3YgNCwgMjAwOSA1OjIxOjE2IFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaHR0cC5qZXR0eS5KZXR0eVNlcnZlciByZW1vdmVTZXJ2bA0KK2V0TWFwcGluZw0KK0lORk86IFJlbW92ZWQgU2VydmxldCBtYXBwaW5nOiAvQ2FsY3VsYXRvclNlcnZpY2UNCitOb3YgNCwgMjAwOSA1OjIxOjE2IFBNIGNhbGN1bGF0b3IuZG9zZ2kuaW1wbC5DYWxjdWxhdG9yQWN0aXZhdG9yIHN0b3ANCitJTkZPOiBTdG9wcGluZyBjYWxjdWxhdG9yLmRvc2dpLmR5bmFtaWNfMS4wLjAgWzE5OF0NCitOb3YgNCwgMjAwOSA1OjIxOjE2IFBNIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5pbXBsLk5vZGVJbXBsIHN0b3ANCitJTkZPOiBTdG9wcGluZyBub2RlOiB1cm46b3NnaS5zZXJ2aWNlLmQ1YTA2ODM0LWFlMTUtNDJiMy05Mjg3LTcxZmU2NTM3Yzg2OQ0KKw0KK1RvIGV4aXQgdGhlIGNvbnNvbGUsIHJ1bjoNCitvc2dpPiBleGl0DQorDQorU2FtcGxlIE92ZXJ2aWV3DQorLS0tLS0tLS0tLS0tLS0tDQorVGhlIGFwcGxpY2F0aW9uIGNvbnNpc3RzIG9mIHR3byBPU0dpIGJ1bmRsZXM6DQorICogVGhlIGNhbGN1bGF0b3IgYnVuZGxlOiBJdCBwcm92aWRlcyB0aGUgY2FsY3VsYXRvciBzZXJ2aWNlLiBUaGUgc2VydmljZSBpcyBpbXBsZW1lbnRlZCBieSBhIGphdmEgY2xhc3MgdGhhdA0KKyAgIGNvbnN1bWVzIG90aGVyIHNlcnZpY2VzIHRvIHBlcmZvcm0gdGhlIJNhZGSULCCTc3VidHJhY3SULCCTbXVsdGlwbHmUIGFuZCCTZGl2aWRllCBvcGVyYXRpb25zLg0KKyAqIFRoZSBvcGVyYXRpb25zIGJ1bmRsZTogSXQgcHJvdmlkZXMgdGhlIGFkZC9zdWJ0cmFjdC9tdWx0aXBseS9kaXZpZGUgc2VydmljZXMuDQorICAgKFNlZSAuLi9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zKQ0KKw0KKw0KK2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci8NCisgIHNyYy8NCisgICAgbWFpbi8NCisgICAgICBqYXZhLw0KKyAgICAgICAgY2FsY3VsYXRvci8NCisgICAgICAgICAgICBkb3NnaS8NCisgICAgICAgICAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2UuamF2YSAgLSBUaGUgaW50ZXJmYWNlIGZvciBDYWxjdWxhdG9yIHNlcnZpY2UNCisgICAgICAgICAgICAgICAgaW1wbC8NCisgICAgICAgICAgICAgICAgICAgIENhbGN1bGF0b3JBY3RpdmF0b3IuamF2YSAtIE9TR2kgYnVuZGxlIGFjdGl2YXRvciBmb3IgQ2FsY3VsYXRvciBidW5kbGUNCisgICAgICAgICAgICAgICAgICAgIENhbGN1bGF0b3JTZXJ2aWNlRFNJbXBsLmphdmEgLSBPU0dpIGRlY2xhcmF0aXZlIHNlcnZpY2UgYmFzZWQgaW1wbGVtZW50YXRpb24NCisgICAgICAgICAgICAgICAgICAgIENhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhIC0gQmFzaWMgT1NHaSBpbXBsZW1lbnRhdGlvbg0KKyAgICAgICAgICAgICAgICBvcGVyYXRpb25zLw0KKyAgICAgICAgICAgICAgICAgICAgQWRkU2VydmljZS5qYXZhIC0gSW50ZXJmYWNlIGZvciBBZGQNCisgICAgICAgICAgICAgICAgICAgIFN1YnRyYWN0U2VydmljZS5qYXZhIC0gSW50ZXJmYWNlIGZvciBTdWJ0cmFjdA0KKyAgICAgICAgICAgICAgICAgICAgTXVsdGlwbHlTZXJ2aWNlLmphdmEgLSBJbnRlcmZhY2UgZm9yIE11bHRpcGx5DQorICAgICAgICAgICAgICAgICAgICBEaXZpZGVTZXJ2aWNlLmphdmEgLSBJbnRlcmZhY2UgZm9yIERpdmlkZQ0KKyAgICAgICAgICAgICAgICBybWkvDQorICAgICAgICAgICAgICAgICAgICBPcGVyYXRpb25zUmVtb3RlLmphdmEgLSBSTUkgcmVtb3RlIGludGVyZmFjZSBmb3Igb3BlcmF0aW9ucw0KKyAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uc1JNSVNlcnZlcl9TdHViLmphdmEgLSBSTUkgc3R1Yg0KKyAgICAgICAgICAgICAgICAgICAgT3BlcmF0aW9uc1JNSVNlcnZlci5qYXZhIC0gUk1JIHNlcnZlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlcmF0aW9ucw0KKyAgICAgIHJlc291cmNlcy8NCisgICAgICAgICAgICBNRVRBLUlORi8NCisgICAgICAgICAgICAgICAgc2NhLWNvbnRyaWJ1dGlvbi54bWwNCisgICAgICAgICAgICBPU0dJLUlORi8NCisgICAgICAgICAgICAgICAgc2NhLWNvbmZpZy8NCisgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3ItY29uZmlnLnhtbCAtIFRoZSBTQ0EgY29uZmlndXJhdGlvbiBmaWxlIGZvciBPU0dpIHJlbW90ZSBzZXJ2aWNlcw0KKyAgICAgICAgICAgICAgICByZW1vdGUtc2VydmljZS8NCisgICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0b3Itc2VydmljZS1kZXNjcmlwdGlvbnMueG1sIC0gVGhlIE9TR2kgcmVtb3RlIHNlcnZpY2UgZW5kcG9pbnQgZGVzY3JpcHRpb25zICAgIA0KKyAgdGVzdC8NCisgICAgamF2YS8NCisgICAgICAgIHNyYy8NCisgICAgICAgICAgICBjYWxjdWxhdG9yLw0KKyAgICAgICAgICAgICAgICBkb3NnaS8NCisgICAgICAgICAgICAgICAgICAgIHRlc3QvDQorICAgICAgICAgICAgICAgICAgICAgICAgQ2FsY3VsYXRvck9TR2lOb2RlVGVzdENhc2UuamF2YSAtIFRoZSBKVU5JVCB0ZXN0IGNhc2UgdGhhdCB0ZXN0cyB0aGlzIGJ1bmRsZSBhZ2FpbnN0IGEgUk1JIHNlcnZpY2UNCisNCisgIE1FVEEtSU5GLw0KKyAgICBNQU5JRkVTVC5NRiAtIFRoZSBPU0dpIG1hbmlmZXN0IGZvciB0aGlzIGJ1bmRsZQ0KKyAgZG9zaWctY2FsY3VsYXRvci5wbmcgLSBhIHBpY3RvcmlhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc2FtcGxlDQorICBwb20ueG1sICAgICAgICAgICAgICAgICAgICAgICAgIC0gdGhlIE1hdmVuIGJ1aWxkIGZpbGUNCisNCisNCisNCitCdWlsZGluZyBBbmQgUnVubmluZyBUaGUgVGVzdCBDYXNlIFVzaW5nIE1hdmVuDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KK1dpdGggZWl0aGVyIHRoZSBiaW5hcnkgb3Igc291cmNlIGRpc3RyaWJ1dGlvbnMgdGhlIHNhbXBsZSBjYW4gYmUgYnVpbHQgYW5kIHJ1bg0KK3VzaW5nIE1hdmVuIGFzIGZvbGxvd3MuDQorDQorY2QgZG9zZ2ktY2FsY3VsYXRvcg0KK212bg0KKw0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL2Rvc2dpLWNhbGN1bGF0b3IucG5nIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL2Rvc2dpLWNhbGN1bGF0b3IucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9kb3NnaS1jYWxjdWxhdG9yLnBuZwpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL2Rvc2dpLWNhbGN1bGF0b3IucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVkNTNkMQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9wb20ueG1sCkBAIC0wLDAgKzEsMTUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnNhbXBsZS1kb3NnaS1keW5hbWljLWNhbGN1bGF0b3I8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBPU0dpIFJlbW90ZSBTZXJ2aWNlcyBEeW5hbWljIENhbGN1bGF0b3I8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1lamF2YTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS13ZWJzZXJ2aWNlPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWxhdW5jaGVyLWVxdWlub3g8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsLW9zZ2k8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLm9zZ2k8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi4wLXYyMDA5MDUyMC0xODAwPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8IS0tIEVxdWlub3ggRGVjbGFyYXRpdmUgU2VydmljZXMgLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZXF1aW5veDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmRzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4xLjAtdjIwMDkwNjAxPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5lcXVpbm94PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dXRpbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC4xMDAtdjIwMDkwNTIwLTE4MDA8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWVjbGlwc2UtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNS4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmQ+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvYnVpbGRjb21tYW5kPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZD5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvYnVpbGRjb21tYW5kPgorICAgICAgICAgICAgICAgICAgICA8L2J1aWxkY29tbWFuZHM+CisgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L3Byb2plY3RuYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvamVjdG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9wcm9qZWN0bmF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L3Byb2plY3RuYXR1cmVzPgorICAgICAgICAgICAgICAgICAgICA8Y2xhc3NwYXRoQ29udGFpbmVycz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGhDb250YWluZXI+b3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NsYXNzcGF0aENvbnRhaW5lcj4KKyAgICAgICAgICAgICAgICAgICAgPC9jbGFzc3BhdGhDb250YWluZXJzPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxhcmNoaXZlPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1hbmlmZXN0RmlsZT4ke2Jhc2VkaXJ9L01FVEEtSU5GL01BTklGRVNULk1GPC9tYW5pZmVzdEZpbGU+CisgICAgICAgICAgICAgICAgICAgIDwvYXJjaGl2ZT4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1vc2dpLWp1bml0LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjA8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1sYXVuY2hlci1lcXVpbm94PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5vc2dpLXRlc3Q8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnRlc3Q8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnRlc3Q8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN5c3RlbVByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuYW1lPm9zZ2kuY29uZmlndXJhdGlvbi5hcmVhPC9uYW1lPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZhbHVlPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L2VxdWlub3g8L3ZhbHVlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3lzdGVtUHJvcGVydGllcz4gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvQ2FsY3VsYXRvclNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL2ltcGwvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9pbXBsL0NhbGN1bGF0b3JBY3RpdmF0b3IuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL2ltcGwvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL2ltcGwvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvaW1wbC9DYWxjdWxhdG9yU2VydmljZURTSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9pbXBsL0NhbGN1bGF0b3JTZXJ2aWNlRFNJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9pbXBsL0NhbGN1bGF0b3JTZXJ2aWNlRFNJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvaW1wbC9DYWxjdWxhdG9yU2VydmljZURTSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvaW1wbC9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvaW1wbC9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL2ltcGwvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvaW1wbC9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvQWRkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL0FkZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvQWRkU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvQWRkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9EaXZpZGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvRGl2aWRlU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9EaXZpZGVTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9EaXZpZGVTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL011bHRpcGx5U2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL011bHRpcGx5U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9NdWx0aXBseVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL011bHRpcGx5U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9TdWJ0cmFjdFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9TdWJ0cmFjdFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvU3VidHJhY3RTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9TdWJ0cmFjdFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3JtaS9PcGVyYXRpb25zUk1JU2VydmVyLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3JtaS9PcGVyYXRpb25zUk1JU2VydmVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JNSVNlcnZlci5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3JtaS9PcGVyYXRpb25zUk1JU2VydmVyLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JNSVNlcnZlcl9TdHViLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3JtaS9PcGVyYXRpb25zUk1JU2VydmVyX1N0dWIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3JtaS9PcGVyYXRpb25zUk1JU2VydmVyX1N0dWIuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JNSVNlcnZlcl9TdHViLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JlbW90ZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JlbW90ZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3Ivcm1pL09wZXJhdGlvbnNSZW1vdGUuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9DYWxjdWxhdG9yTm9kZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L0NhbGN1bGF0b3JOb2RlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L0NhbGN1bGF0b3JOb2RlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9DYWxjdWxhdG9yTm9kZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9DYWxjdWxhdG9yT1NHaU5vZGVUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2Rpc3RyaWJ1dGVkLW9zZ2kvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L0NhbGN1bGF0b3JPU0dpTm9kZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L0NhbGN1bGF0b3JPU0dpTm9kZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9DYWxjdWxhdG9yT1NHaU5vZGVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9PU0dpVGVzdFV0aWxzLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Ivc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL3Rlc3QvT1NHaVRlc3RVdGlscy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9PU0dpVGVzdFV0aWxzLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL2Rvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9PU0dpVGVzdFV0aWxzLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9kaXN0cmlidXRlZC1vc2dpL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZTBmZDAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvZGlzdHJpYnV0ZWQtb3NnaS9wb20ueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlcy1kaXN0cmlidXRlZC1vc2dpPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIERpc3RyaWJ1dGVkIE9TR0kgU2FtcGxlczwvbmFtZT4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxtb2R1bGVzPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+ZG9zZ2ktZHluYW1pYy1jYWxjdWxhdG9yPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5kb3NnaS1keW5hbWljLWNhbGN1bGF0b3Itb3BlcmF0aW9uczwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4gICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtYnBlbC9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvUkVBRE1FCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL1JFQURNRQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTQzODhmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwKQEAgLTAsMCArMSw5NSBAQAorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHByb2plY3QgbmFtZT0ic2FtcGxlLWltcGxlbWVudGF0aW9uLWJwZWwtaGVsbG93b3JsZC1jb250cmlidXRpb24iIGRlZmF1bHQ9ImNvbXBpbGUiPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmNsYXNzIiAgIHZhbHVlPSJoZWxsb3dvcmxkLkJQRUxDbGllbnQiIC8+CisgICAgPHByb3BlcnR5IG5hbWU9InRlc3QuamFyIiAgICAgdmFsdWU9InNhbXBsZS1pbXBsZW1lbnRhdGlvbi1icGVsLWhlbGxvd29ybGQtY29udHJpYnV0aW9uLmphciIgLz4KKyAgICA8cHJvcGVydHkgbmFtZT0ibWFuaWZlc3QuamFyIiB2YWx1ZT0iLi4vLi4vbGliL3R1c2Nhbnktc2NhLW1hbmlmZXN0LmphciIgLz4KKworICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgICAgIDxta2RpciBkaXI9InRhcmdldC9jbGFzc2VzIi8+CisgICAgICAgIDxta2RpciBkaXI9InRhcmdldC93c2RsMmphdmEtc291cmNlIi8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImdlbmVyYXRlLXdzZGwiIGRlcGVuZHM9ImluaXQiPgorICAgICAgICA8amF2YSBjbGFzc25hbWU9Im9yZy5hcGFjaGUudHVzY2FueS5zZG8uZ2VuZXJhdGUuWFNEMkphdmFHZW5lcmF0b3IiIGZvcms9InRydWUiPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLXRhcmdldERpcmVjdG9yeSIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0idGFyZ2V0L3dzZGwyamF2YS1zb3VyY2UiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1wcmVmaXgiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IkhlbGxvV29ybGQiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1ub0NvbnRhaW5tZW50Ii8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSItbm9VbnNldHRhYmxlIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSJzcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsIi8+CisKKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke21hbmlmZXN0Lmphcn0iLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisKKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJvcmcuYXBhY2hlLnR1c2NhbnkudG9vbHMud3NkbDJqYXZhLmdlbmVyYXRlLldTREwySmF2YUdlbmVyYXRvciIgZm9yaz0idHJ1ZSI+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSItdGFyZ2V0RGlyZWN0b3J5Ii8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSJ0YXJnZXQvd3NkbDJqYXZhLXNvdXJjZSIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0ic3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQud3NkbCIvPgorCisgICAgICAgICAgICA8Y2xhc3NwYXRoPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0iJHttYW5pZmVzdC5qYXJ9Ii8+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJ1bnppcC1vZGUtZGIiIGRlcGVuZHM9ImluaXQiPgorICAgICAgICA8dW56aXAgc3JjPSIuLi8uLi9saWIvb2RlLWRhby1qcGEtb2pwYS1kZXJieS0xLjMuMi56aXAiIGRlc3Q9InRhcmdldC9kYXRhYmFzZSIvPgorICAgIDwvdGFyZ2V0PgorCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0LGdlbmVyYXRlLXdzZGwsdW56aXAtb2RlLWRiIj4KKyAgICAgICAgPGphdmFjIGRlc3RkaXI9InRhcmdldC9jbGFzc2VzIiBkZWJ1Zz0ib24iIHNvdXJjZT0iMS41IiB0YXJnZXQ9IjEuNSI+CisgICAgICAgICAgICA8c3JjIHBhdGg9InNyYy9tYWluL2phdmEiLz4KKyAgICAgICAgICAgIDxzcmMgcGF0aD0idGFyZ2V0L3dzZGwyamF2YS1zb3VyY2UiLz4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke21hbmlmZXN0Lmphcn0iLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmFjPgorICAgICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPgorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSJzcmMvbWFpbi9yZXNvdXJjZXMiLz4KKyAgICAgICAgPC9jb3B5PgorICAgICAgICA8amFyIGRlc3RmaWxlPSJ0YXJnZXQvJHt0ZXN0Lmphcn0iIGJhc2VkaXI9InRhcmdldC9jbGFzc2VzIj4KKyAgICAgICAgICAgIDxtYW5pZmVzdD4KKyAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik1haW4tQ2xhc3MiIHZhbHVlPSIke3Rlc3QuY2xhc3N9IiAvPgorICAgICAgICAgICAgPC9tYW5pZmVzdD4KKyAgICAgICAgPC9qYXI+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9InJ1biI+CisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iJHt0ZXN0LmNsYXNzfSIgZm9yaz0idHJ1ZSI+CisgICAgICAgICAgICA8IS0tIGp2bWFyZyB2YWx1ZT0iLVhkZWJ1ZyIvIC0tPgorICAgICAgICAgICAgPCEtLSBqdm1hcmcgdmFsdWU9Ii1YcnVuamR3cDp0cmFuc3BvcnQ9ZHRfc29ja2V0LGFkZHJlc3M9ODAwMCxzZXJ2ZXI9eSxzdXNwZW5kPXkiLyAtLT4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJ0YXJnZXQvY2xhc3NlcyIvPgorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0idGFyZ2V0L2RhdGFiYXNlIi8+CisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIke21hbmlmZXN0Lmphcn0iLz4KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KKyAgICAgICAgPGRlbGV0ZSBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0idGFyZ2V0Ii8+CisgICAgICAgIDwvZGVsZXRlPgorICAgIDwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtYnBlbC9oZWxsb3dvcmxkLWJwZWwucG5nIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9oZWxsb3dvcmxkLWJwZWwucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtYnBlbC9oZWxsb3dvcmxkLWJwZWwucG5nCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL2hlbGxvd29ybGQtYnBlbC5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvaGVsbG93b3JsZC1icGVsLnN2ZyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC1jb250cmlidXRpb24vaGVsbG93b3JsZC1icGVsLnN2ZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvaGVsbG93b3JsZC1icGVsLnN2ZwpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9oZWxsb3dvcmxkLWJwZWwuc3ZnCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQyM2NjYQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC1jb250cmlidXRpb24vcG9tLnhtbApAQCAtMCwwICsxLDc2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICoKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKgorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxwYWNrYWdpbmc+emlwPC9wYWNrYWdpbmc+CisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWltcGxlbWVudGF0aW9uLWJwZWwtaGVsbG93b3JsZC1jb250cmlidXRpb248L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBpbXBsZW1lbnRhdGlvbi5icGVsIEhlbGxvV29ybGQgQ29udHJpYnV0aW9uPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgorICAgICAgIDxwbHVnaW5zPgorCisgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgPCEtLSBwbHVnaW4gdG8gc3VwcG9ydCB6aXAgcGFja2FnaW5nIGZvciBTQ0EgY29udHJpYnV0aW9ucyAtLT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4temlwLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPmFscGhhMjwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxleHRlbnNpb25zPnRydWU8L2V4dGVuc2lvbnM+CisgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgICAgPCEtLSBwbHVnaW4gdG8gc3VwcG9ydCB1c2luZyBtdm4gdHVzY2FueTpydW4gdG8gcnVuIHRoaXMgY29udHJpYnV0aW9uIC0tPgorICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi10dXNjYW55LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tYnBlbC1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsby5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtYnBlbC9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG8uamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG8uamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmJwZWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmJwZWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmJwZWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuYnBlbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQud3NkbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLWJwZWwvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtYnBlbC9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tYnBlbC9oZWxsb3dvcmxkLWJwZWwtd2ViYXBwL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWJwZWwvUkVBRE1FCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLXdlYmFwcC9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC13ZWJhcHAvcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC13ZWJhcHAvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YThhMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLXdlYmFwcC9wb20ueG1sCkBAIC0wLDAgKzEsMTYwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0IHhtbG5zPSJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjAiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiDQorCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL21hdmVuLXY0XzBfMC54c2QiPg0KKw0KKyAgICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICAgIDwvcGFyZW50Pg0KKw0KKyAgICAgIDxhcnRpZmFjdElkPnNhbXBsZS1pbXBsZW1lbnRhdGlvbi1icGVsLWhlbGxvd29ybGQtd2ViYXBwPC9hcnRpZmFjdElkPg0KKyAgICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+DQorICAgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBpbXBsZW1lbnRhdGlvbi5icGVsIEhlbGxvd29ybGQgV2ViQXBwPC9uYW1lPg0KKw0KKwk8cHJvcGVydGllcz4NCisJCTx0dXNjYW55LnZlcnNpb24+Mi4wLUJldGExPC90dXNjYW55LnZlcnNpb24+DQorCQk8amV0dHkudmVyc2lvbj42LjEuMTg8L2pldHR5LnZlcnNpb24+DQorCTwvcHJvcGVydGllcz4NCisNCisJPGRlcGVuZGVuY2llcz4NCisJCTwhLS0gIFRVU0NBTlkgREVQRU5ERU5DSUVTIC0tPg0KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7dHVzY2FueS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXdlYi1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7dHVzY2FueS52ZXJzaW9ufTwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQorICAgICAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1icGVsLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgPHZlcnNpb24+JHt0dXNjYW55LnZlcnNpb259PC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCisgICAgICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorCQk8IS0tICBKVU5JVCBERVBFTkRFTkNZIEZPUiBURVNUSU5HIC0tPg0KKwkJPGRlcGVuZGVuY3k+DQorCQkJPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorCQkJPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorCQkJPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQorCQkJPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKwkJPC9kZXBlbmRlbmN5Pg0KKw0KKwkJPCEtLSAgSkVUVFkgREVQRU5ERU5DSUVTIEZPUiBURVNUSU5HICAtLT4NCisJCTxkZXBlbmRlbmN5Pg0KKwkJCTxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KKwkJCTxhcnRpZmFjdElkPmpldHR5PC9hcnRpZmFjdElkPg0KKwkJCTx2ZXJzaW9uPiR7amV0dHkudmVyc2lvbn08L3ZlcnNpb24+DQorCQkJPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCisJCTwvZGVwZW5kZW5jeT4NCisJCTxkZXBlbmRlbmN5Pg0KKwkJCTxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KKwkJCTxhcnRpZmFjdElkPmpldHR5LXV0aWw8L2FydGlmYWN0SWQ+DQorCQkJPHZlcnNpb24+JHtqZXR0eS52ZXJzaW9ufTwvdmVyc2lvbj4NCisJCQk8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKwkJPC9kZXBlbmRlbmN5Pg0KKwkJPGRlcGVuZGVuY3k+DQorCQkJPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+DQorCQkJPGFydGlmYWN0SWQ+amV0dHktbWFuYWdlbWVudDwvYXJ0aWZhY3RJZD4NCisJCQk8dmVyc2lvbj4ke2pldHR5LnZlcnNpb259PC92ZXJzaW9uPg0KKwkJCTxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorCQk8L2RlcGVuZGVuY3k+DQorCTwvZGVwZW5kZW5jaWVzPg0KKw0KKwk8YnVpbGQ+DQorICAgICAgICAgPGZpbmFsTmFtZT5oZWxsb3dvcmxkLWJwZWw8L2ZpbmFsTmFtZT4NCisNCisgICAgICAgICA8cGx1Z2lucz4NCisgICAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICA8aWQ+dW5wYWNrPC9pZD4NCisgICAgICAgICAgICAgICAgICA8cGhhc2U+Y29tcGlsZTwvcGhhc2U+DQorICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgPGdvYWw+dW5wYWNrPC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4NCisgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm9kZTwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vZGUtZGFvLWpwYS1vanBhLWRlcmJ5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlPnppcDwvdHlwZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8b3ZlcldyaXRlPmZhbHNlPC9vdmVyV3JpdGU+DQorICAgICAgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9jbGFzc2VzPC9vdXRwdXREaXJlY3Rvcnk+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPioqLyo8L2luY2x1ZGVzPg0KKyAgICAgICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4NCisgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtcz4NCisgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICAgICAgICA8L3BsdWdpbj4NCisNCisgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+DQorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWpldHR5LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgPHZlcnNpb24+Ni4xLjE4PC92ZXJzaW9uPg0KKyAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgPGNvbnRleHRQYXRoPmhlbGxvd29ybGQtYnBlbDwvY29udGV4dFBhdGg+DQorICAgICAgICAgICAgICAgIDxzdG9wS2V5PmZvbzwvc3RvcEtleT4NCisgICAgICAgICAgICAgICAgPHN0b3BQb3J0Pjk5OTk8L3N0b3BQb3J0Pg0KKyAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICAgICA8aWQ+c3RhcnQtamV0dHk8L2lkPg0KKyAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJvY2Vzcy10ZXN0LWNsYXNzZXM8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+DQorICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgPHNjYW5JbnRlcnZhbFNlY29uZHM+MDwvc2NhbkludGVydmFsU2Vjb25kcz4NCisgICAgICAgICAgICAgICAgICAgICAgIDxkYWVtb24+dHJ1ZTwvZGFlbW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvcnM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9yIGltcGxlbWVudGF0aW9uPSJvcmcubW9ydGJheS5qZXR0eS5uaW8uU2VsZWN0Q2hhbm5lbENvbm5lY3RvciI+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9ydD44MDg1PC9wb3J0Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3I+DQorICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3RvcnM+DQorICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQorICAgICAgICAgICAgICAgICAgIDxpZD5zdG9wLWpldHR5PC9pZD4NCisgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByZXBhcmUtcGFja2FnZTwvcGhhc2U+DQorICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnN0b3A8L2dvYWw+DQorICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQorICAgICAgICAgIDwvcGx1Z2luPg0KKw0KKyAgICAgICAgIDwvcGx1Z2lucz4NCisJPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtYnBlbC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLXdlYmFwcC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC13ZWJhcHAvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5icGVsIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLXdlYmFwcC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5icGVsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmJwZWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC13ZWJhcHAvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuYnBlbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtYnBlbC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLXdlYmFwcC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC13ZWJhcHAvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQud3NkbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtYnBlbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtYnBlbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC13ZWJhcHAvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtYnBlbC9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvaGVsbG93b3JsZC1icGVsLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uanNwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1icGVsL3NyYy9tYWluL3dlYmFwcC9oZWxsby5qc3AKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL2hlbGxvd29ybGQtYnBlbC13ZWJhcHAvc3JjL21haW4vd2ViYXBwL2hlbGxvLmpzcApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWJwZWwvcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk4MzUzMQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1icGVsL3BvbS54bWwKQEAgLTAsMCArMSw0NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzLWltcGxlbWVtdGF0aW9uLWJwZWw8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgSW1wbGVtZW50YXRpb24gQlBFTCBTYW1wbGVzPC9uYW1lPgorCisgICAgPHByb2ZpbGVzPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPgorICAgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgorICAgICAgICAgICAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5oZWxsb3dvcmxkLWJwZWwtY29udHJpYnV0aW9uPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5oZWxsb3dvcmxkLWJwZWwtd2ViYXBwPC9tb2R1bGU+CisgICAgICAgICAgICA8L21vZHVsZXM+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPiAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvaGVsbG93b3JsZC1yZWN1cnNpdmUtd3MvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS13cy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxMDc3YgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvaGVsbG93b3JsZC1yZWN1cnNpdmUtd3MvUkVBRE1FCkBAIC0wLDAgKzEsMTUzIEBACitIZWxsbyBXb3JsZCBCUEVMIFNhbXBsZQ0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorVGhpcyBzYW1wbGUgZGVtb25zdHJhdGVzIGFuIFNDQSBzZXJ2aWNlIGltcGxlbWVudGVkIGJ5IGEgQlBFTCBwcm9jZXNzLiANCisNCitUaGUgUkVBRE1FIGluIHRoZSA8ZGlzdHJpYnV0aW9uLXVucGFjay1kaXI+L3NhbXBsZXMgZGlyZWN0b3J5IHByb3ZpZGVzIA0KK2dlbmVyYWwgaW5zdHJ1Y3Rpb25zIGFib3V0IGJ1aWxkaW5nIGFuZCBydW5uaW5nIHNhbXBsZXMuICh3aGVyZQ0KK2Rpc3RyaWJ1dGlvbi11bnBhY2stZGlyIGlzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHVucGFja2VkIHRoZSB0dXNjYW55DQorYmluYXJ5IGRpc3RyaWJ1dGlvbiBhcmNoaXZlKS4gVGFrZSBhIGxvb2sgdGhlcmUgZmlyc3QgKG5vdGluZyBhdCB5b3UgcmVhZCBpdCB0aGF0IHRoaXMgc2FtcGxlDQoraXMgbm90IGEgbmV3IHN0eWxlIHNhbXBsZSkuIA0KKw0KK0lmIHlvdSBqdXN0IHdhbnQgdG8gcnVuIGl0IHRvIHNlZSB3aGF0IGhhcHBlbnMgb3BlbiBhIGNvbW1hbmQgcHJvbXB0LCBuYXZpZ2F0ZQ0KK3RvIHRoaXMgc2FtcGxlIGRpcmVjdG9yeSwgYW5kIGRvIA0KKw0KK2FudCBjb21waWxlIHJ1bg0KKw0KK09SIGlmIHlvdSBkb24ndCBoYXZlIGFudCwgb24gV2luZG93cyBkbw0KKw0KK21rZGlyIHRhcmdldFxjbGFzc2VzDQorbWtkaXIgdGFyZ2V0XHdzZGwyamF2YS1zb3VyY2UNCitqYXZhIC1jcCAuLlwuLlxsaWJcdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyIG9yZy5hcGFjaGUudHVzY2FueS5zZG8uZ2VuZXJhdGUuWFNEMkphdmFHZW5lcmF0b3IgLXRhcmdldERpcmVjdG9yeSB0YXJnZXQvd3NkbDJqYXZhLXNvdXJjZSAtcHJlZml4IEhlbGxvV29ybGQgLW5vQ29udGFpbm1lbnQgLW5vVW5zZXR0YWJsZSBzcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsDQoramF2YSAtY3AgLi5cLi5cbGliXHR1c2Nhbnktc2NhLW1hbmlmZXN0LmphciBvcmcuYXBhY2hlLnR1c2NhbnkudG9vbHMud3NkbDJqYXZhLmdlbmVyYXRlLldTREwySmF2YUdlbmVyYXRvciAtdGFyZ2V0RGlyZWN0b3J5IHRhcmdldC93c2RsMmphdmEtc291cmNlIHNyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwNCit1bnppcCAuLlwuLlxsaWJcb2RlLWRhby1qcGEtb2pwYS1kZXJieS0xLjEuemlwIC1kIHRhcmdldFxkYXRhYmFzZQ0KK2phdmFjIC1kIHRhcmdldFxjbGFzc2VzIC1jcCB0YXJnZXRcY2xhc3NlczsuLlwuLlxsaWJcdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyIC1zb3VyY2VwYXRoIHNyY1xtYWluXGphdmE7dGFyZ2V0XHdzZGwyamF2YS1zb3VyY2UgLXRhcmdldCAxLjUgLWcgLXNvdXJjZSAxLjUgc3JjXG1haW5camF2YVxoZWxsb3dvcmxkXEJQRUxDbGllbnQuamF2YQ0KK2NvcHkgc3JjXG1haW5ccmVzb3VyY2VzXCogdGFyZ2V0XGNsYXNzZXMNCitqYXZhIC1jcCAuLlwuLlxsaWJcdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyO3RhcmdldFxjbGFzc2VzO3RhcmdldFxkYXRhYmFzZSBoZWxsb3dvcmxkLkJQRUxDbGllbnQNCisNCithbmQgb24gKm5peCBkbw0KKw0KK21rZGlyIHRhcmdldC9jbGFzc2VzDQorbWtkaXIgdGFyZ2V0L3dzZGwyamF2YS1zb3VyY2UNCitqYXZhIC1jcCAuLi8uLi9saWIvdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyIG9yZy5hcGFjaGUudHVzY2FueS5zZG8uZ2VuZXJhdGUuWFNEMkphdmFHZW5lcmF0b3IgLXRhcmdldERpcmVjdG9yeSB0YXJnZXQvd3NkbDJqYXZhLXNvdXJjZSAtcHJlZml4IEhlbGxvV29ybGQgLW5vQ29udGFpbm1lbnQgLW5vVW5zZXR0YWJsZSBzcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsDQoramF2YSAtY3AgLi4vLi4vbGliL3R1c2Nhbnktc2NhLW1hbmlmZXN0LmphciBvcmcuYXBhY2hlLnR1c2NhbnkudG9vbHMud3NkbDJqYXZhLmdlbmVyYXRlLldTREwySmF2YUdlbmVyYXRvciAtdGFyZ2V0RGlyZWN0b3J5IHRhcmdldC93c2RsMmphdmEtc291cmNlIHNyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwNCit1bnppcCAuLi8uLi9saWIvb2RlLWRhby1qcGEtb2pwYS1kZXJieS0xLjEuemlwIC1kIHRhcmdldC9kYXRhYmFzZQ0KK2phdmFjIC1kIHRhcmdldC9jbGFzc2VzIC1jcCB0YXJnZXQvY2xhc3NlczsuLi8uLi9saWIvdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyIC1zb3VyY2VwYXRoIHNyYy9tYWluL2phdmE7dGFyZ2V0L3dzZGwyamF2YS1zb3VyY2UgLXRhcmdldCAxLjUgLWcgLXNvdXJjZSAxLjUgc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0JQRUxDbGllbnQuamF2YQ0KK2NwIHNyYy9tYWluL3Jlc291cmNlcy8qIHRhcmdldC9jbGFzc2VzDQoramF2YSAtY3AgLi4vLi4vbGliL3R1c2Nhbnktc2NhLW1hbmlmZXN0Lmphcjp0YXJnZXQvY2xhc3Nlczp0YXJnZXQvZGF0YWJhc2UgaGVsbG93b3JsZC5CUEVMQ2xpZW50DQorDQorVGhlIHNhbXBsZSB3aWxsIHN0YXJ0IGFuIGVtYmVkZGVkIEJQRUwgZW5naW5lLCBkZXBsb3kgYSBwcm9jZXNzIGFuZCBpbnZva2UgaXQuDQorDQorU2FtcGxlIE92ZXJ2aWV3DQorLS0tLS0tLS0tLS0tLS0tDQorVGhlIHNhbXBsZSBwcm92aWRlcyBhIHNpbmdsZSBjb21wb25lbnQgdGhhdCBpcyB3aXJlZCB0byBhIHNlcnZpY2Ugd2l0aCBhIA0KK3dlYiBzZXJ2aWNlIGJpbmRpbmcuDQorDQoraGVsbG93b3JsZC1icGVsLw0KKyAgc3JjLw0KKyAgICBtYWluLw0KKyAgICAgIGphdmEvDQorICAgICAgICBoZWxsb3dvcmxkLw0KKyAgICAgICAgICBCUEVMQ2xpZW50LmphdmEgICAgICAgICAgCSAgLSBjbGllbnQgYXBwbGljYXRpb24gZm9yICANCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJFUEVMSGVsbG9Xb3JsZENvbXBvbmVudA0KKw0KKyAgICAgIHJlc291cmNlcy8NCisgICAgICAgICAgZGVwbG95LnhtbAkJCSAgLSBPREUgZGVwbG95bWVudCBkZXNjcmlwdG9yDQorICAgICAgICAgIGhlbGxvd29ybGQuYnBlbAkJICAtIGhlbGxvd29ybGQgYnBlbCBwcm9jZXNzDQorICAgICAgICAgIGhlbGxvd29ybGQuY29tcG9uZW50VHlwZQkgIC0gaGVsbG93b3JsZCBicGVsIHNlcnZpY2UgZGVzY3JpcHRpb24NCisgICAgICAgICAgaGVsbG93b3JsZC5jb21wb3NpdGUgICAgICAgICAgICAtIHRoZSBTQ0EgYXNzZW1ibHkgZm9yIHRoaXMgc2FtcGxlDQorICAgICAgICAgIGhlbGxvd29ybGQud3NkbCAgICAgICAgICAgICAgICAgLSB0aGUgc2VydmljZSBkZXNjcmlwdGlvbiB0aGF0IGRlc2NyaWJlcw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGJwZWwgcHJvY2Vzcw0KKyAgICAgICAgICBsb2c0ai5wcm9wZXJ0aWVzICAgICAgICAgICAgICAgIC0gbG9nZ2luZyBjb25maWd1cmF0aW9uDQorICAgICAgICAgIA0KKyAgICB0ZXN0Lw0KKyAgICAgIGphdmEvDQorICAgICAgICBoZWxsb3dvcmxkLw0KKyAgICAgICAgICBCUEVMSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEgICAgIC0gSlVuaXQgdGVzdCBjYXNlIA0KKyAgaGVsbG93b3JsZC1icGVsLnBuZyAgICAgICAgICAgICAgICAgICAgIC0gYSBwaWN0b3JpYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlIC5jb21wb3NpdGUgZmlsZQ0KKyAgYnVpbGQueG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gdGhlIEFudCBidWlsZCBmaWxlDQorICBwb20ueG1sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSB0aGUgTWF2ZW4gYnVpbGQgZmlsZSAgICAgICAgDQorDQorQnVpbGRpbmcgQW5kIFJ1bm5pbmcgVGhlIFNhbXBsZSBVc2luZyBBbnQNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1dpdGggdGhlIGJpbmFyeSBkaXN0cmlidXRpb24gdGhlIHNhbXBsZSBjYW4gYmUgYnVpbHQgYW5kIHJ1biB1c2luZyBBbnQgYXMgDQorZm9sbG93cw0KKw0KK2NkIGhlbGxvd29ybGQtYnBlbA0KK2FudCBjb21waWxlDQorYW50IHJ1bg0KKw0KKyAgICAgDQorWW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQgZnJvbSB0aGUgcnVuIHRhcmdldC4gICAgIA0KKw0KK3J1bjoNCisgICAgIFtqYXZhXSBTdGFydGluZyBCUEVMSGVsbG9Xb3JsZENvbXBvbmVudA0KKyAgICAgW2phdmFdID4+PiBEZXBsb3lpbmcgOiBEOlx0ZW1wXFNDQTEuMS1SQzFcdHVzY2FueS1zY2EtMS4xLWluY3ViYXRpbmdcc2FtcGxlc1xoZWxsb3dvcmxkLWJwZWxcdGFyZ2V0XGNsYXNzZXMNCisgICAgIFtqYXZhXSA6OmFyZzo6Ojo6OiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKyAgICAgW2phdmFdIDxoZWxsbyB4bWxucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9pbXBsZW1lbnRhdGlvbi9icGVsL2V4YW1wbGUvaGVsbG93b3JsZC53c2RsIj48bWVzc2FnZSB4bWxucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9pbXBsZW1lbnRhdGlvbi9icGVsL2V4YW1wbA0KK2UvaGVsbG93b3JsZC53c2RsIj5IZWxsbzwvbWVzc2FnZT48L2hlbGxvPg0KKyAgICAgW2phdmFdIDo6bWVzc2FnZTo6IDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorICAgICBbamF2YV0gPG1lc3NhZ2U+PFRlc3RQYXJ0PjxoZWxsbyB4bWxucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9pbXBsZW1lbnRhdGlvbi9icGVsL2V4YW1wbGUvaGVsbG93b3JsZC53c2RsIj48bWVzc2FnZSB4bWxucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9pbXBsZW1lDQorbnRhdGlvbi9icGVsL2V4YW1wbGUvaGVsbG93b3JsZC53c2RsIj5IZWxsbzwvbWVzc2FnZT48L2hlbGxvPjwvVGVzdFBhcnQ+PC9tZXNzYWdlPg0KKyAgICAgW2phdmFdIFN0YXR1czogUkVTUE9OU0UNCisgICAgIFtqYXZhXSBSZXNwb25zZTogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCisgICAgIFtqYXZhXSA8bWVzc2FnZT48VGVzdFBhcnQ+PGhlbGxvIHhtbG5zPSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL2ltcGxlbWVudGF0aW9uL2JwZWwvZXhhbXBsZS9oZWxsb3dvcmxkLndzZGwiPkhlbGxvIFdvcmxkPC9oZWxsbz48L1Rlc3RQYXJ0PjwvbWVzc2FnZT4NCisgICAgIFtqYXZhXSBIZWxsbyBXb3JsZA0KKyAgICAgW2phdmFdIFN0b3BwaW5nIEJQRUxIZWxsb1dvcmxkQ29tcG9uZW50DQorICAgICBbamF2YV0gU3RvcHBlZCAhISENCisNCitCVUlMRCBTVUNDRVNTRlVMDQorVG90YWwgdGltZTogMzYgc2Vjb25kcyAgICAgDQorDQorQnVpbGRpbmcgQW5kIFJ1bm5pbmcgVGhlIFNhbXBsZSBVc2luZyBNYXZlbiANCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorV2l0aCBlaXRoZXIgdGhlIGJpbmFyeSBvciBzb3VyY2UgZGlzdHJpYnV0aW9ucyB0aGUgc2FtcGxlIGNhbiBiZSBidWlsdCBhbmQgcnVuIA0KK3VzaW5nIE1hdmVuIGFzIGZvbGxvd3MuIFdoZW4gdXNpbmcgTWF2ZW4sIGEgc2ltcGxlIHRlc3QgaXMgcHJlc2VudCB0aGF0IGV4ZXJjaXNlDQordGhlIHNhbWUgbG9naWMgYXMgdGhlIGNsaWVudCB0byBpbnZva2UgdGhlIEJQRWwgcHJvY2Vzcy4NCisNCitjZCBoZWxsb3dvcmxkLWJwZWwNCittdm4NCisNCitZb3Ugc2hvdWxkIHNlZSB0aGUgZm9sbG93aW5nIG91dHB1dCBmcm9tIHRoZSB0ZXN0IHBoYXNlLg0KKw0KKy0NCisNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIFQgRSBTIFQgUw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitSdW5uaW5nIGhlbGxvd29ybGQuQlBFTEhlbGxvV29ybGRUZXN0Q2FzZQ0KK1N0YXJ0aW5nIEJQRUxIZWxsb1dvcmxkQ29tcG9uZW50DQorPj4+IERlcGxveWluZyA6IEQ6XGRldlxPcGVuc291cmNlXEFwYWNoZVxUdXNjYW55XHNvdXJjZVxqYXZhLXNjYS0xLjFcc2FtcGxlc1xoZWxsb3dvcmxkLWJwZWxcdGFyZ2V0XGNsYXNzZXMNCis6OmFyZzo6Ojo6OiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzxoZWxsbyB4bWxucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9pbXBsZW1lbnRhdGlvbi9icGVsL2V4YW1wbGUvaGVsbG93b3JsZC53c2RsIj48bWVzc2FnZSB4bWxucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9pbXBsZW1lbnRhdGlvbi9icGVsL2V4YW1wbGUvaGVsbG93b3JsZA0KKy53c2RsIj5IZWxsbzwvbWVzc2FnZT48L2hlbGxvPg0KKzo6bWVzc2FnZTo6IDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPG1lc3NhZ2U+PFRlc3RQYXJ0PjxoZWxsbyB4bWxucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9pbXBsZW1lbnRhdGlvbi9icGVsL2V4YW1wbGUvaGVsbG93b3JsZC53c2RsIj48bWVzc2FnZSB4bWxucz0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9pbXBsZW1lbnRhdGlvbi9icGVsDQorL2V4YW1wbGUvaGVsbG93b3JsZC53c2RsIj5IZWxsbzwvbWVzc2FnZT48L2hlbGxvPjwvVGVzdFBhcnQ+PC9tZXNzYWdlPg0KK1N0YXR1czogUkVTUE9OU0UNCitSZXNwb25zZTogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8bWVzc2FnZT48VGVzdFBhcnQ+PGhlbGxvIHhtbG5zPSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL2ltcGxlbWVudGF0aW9uL2JwZWwvZXhhbXBsZS9oZWxsb3dvcmxkLndzZGwiPkhlbGxvIFdvcmxkPC9oZWxsbz48L1Rlc3RQYXJ0PjwvbWVzc2FnZT4NCitTdG9wcGluZyBCUEVMSGVsbG9Xb3JsZENvbXBvbmVudA0KK1N0b3BwZWQgISEhDQorVGVzdHMgcnVuOiAxLCBGYWlsdXJlczogMCwgRXJyb3JzOiAwLCBTa2lwcGVkOiAwLCBUaW1lIGVsYXBzZWQ6IDE4LjY1NiBzZWMNCisNCitSZXN1bHRzIDoNCisNCitUZXN0cyBydW46IDEsIEZhaWx1cmVzOiAwLCBFcnJvcnM6IDAsIFNraXBwZWQ6IDANCisNCitbSU5GT10gW2phcjpqYXJdDQorW0lORk9dIEJ1aWxkaW5nIGphcjogRDpcZGV2XE9wZW5zb3VyY2VcQXBhY2hlXFR1c2Nhbnlcc291cmNlXGphdmEtc2NhLTEuMVxzYW1wbGVzXGhlbGxvd29ybGQtYnBlbFx0YXJnZXRcc2FtcGxlLWhlbGxvd29ybGQtYnBlbC5qYXINCitbSU5GT10gW2luc3RhbGw6aW5zdGFsbF0NCitbSU5GT10gSW5zdGFsbGluZyBEOlxkZXZcT3BlbnNvdXJjZVxBcGFjaGVcVHVzY2FueVxzb3VyY2VcamF2YS1zY2EtMS4xXHNhbXBsZXNcaGVsbG93b3JsZC1icGVsXHRhcmdldFxzYW1wbGUtaGVsbG93b3JsZC1icGVsLmphciB0byBDOlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXGxyZXNlbmQNCitlXC5tMlxyZXBvc2l0b3J5XG9yZ1xhcGFjaGVcdHVzY2FueVxzY2Fcc2FtcGxlLWhlbGxvd29ybGQtYnBlbFwxLjEtaW5jdWJhdGluZy1TTkFQU0hPVFxzYW1wbGUtaGVsbG93b3JsZC1icGVsLTEuMS1pbmN1YmF0aW5nLVNOQVBTSE9ULmphcg0KK1tJTkZPXSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitbSU5GT10gQlVJTEQgU1VDQ0VTU0ZVTA0KK1tJTkZPXSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCitbSU5GT10gVG90YWwgdGltZTogNTMgc2Vjb25kcw0KK1tJTkZPXSBGaW5pc2hlZCBhdDogU3VuIEphbiAxMyAwOTo1NDozOSBQU1QgMjAwOA0KK1tJTkZPXSBGaW5hbCBNZW1vcnk6IDI0TS80M00NCitbSU5GT10gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorDQorVGhpcyBzaG93cyB0aGF0IHRoZSBKdW5pdCB0ZXN0IGNhc2VzIGhhdmUgcnVuIHN1Y2Nlc3NmdWxseS4gDQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS13cy9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS13cy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MzcxMjYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tY29tcG9zaXRlL2hlbGxvd29ybGQtcmVjdXJzaXZlLXdzL3BvbS54bWwKQEAgLTAsMCArMSw4MiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKg0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4NCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPHBhY2thZ2luZz56aXA8L3BhY2thZ2luZz4NCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS1oZWxsb3dvcmxkLXdzLWNvbnRyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBpbXBsZW1lbmF0aW9uLmNvbXBvc2l0ZSBIZWxsb3dvcmxkIFdTIENvbnRyaWJ1dGlvbjwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaGVsbG93b3JsZC1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICAgICA8cGx1Z2lucz4NCisNCisgICAgICAgICA8IS0tIHBsdWdpbiB0byBzdXBwb3J0IHppcCBwYWNrYWdpbmcgZm9yIFNDQSBjb250cmlidXRpb25zIC0tPg0KKyAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4temlwLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj5hbHBoYTI8L3ZlcnNpb24+DQorICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4NCisgICAgICAgICA8L3BsdWdpbj4NCisNCisgICAgICAgICA8IS0tIHBsdWdpbiB0byBzdXBwb3J0IHVzaW5nIG12biB0dXNjYW55OnJ1biB0byBydW4gdGhpcyBjb250cmlidXRpb24gLS0+DQorICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8Y29udHJpYnV0aW9ucz4NCisgICAgICAgICAgICAgICAgICAgPCEtLSBhZGQgdGhlIGRlcGVuZGVlIGNvbnRyaWJ1dGlvbiB0aGF0IHRoaXMgY29udHJpYnV0aW9uIHVzZXMgLS0+DQorICAgICAgICAgICAgICAgICAgIDxwYXJhbT4uLlxoZWxsb3dvcmxkLXJlY3Vyc2l2ZVx0YXJnZXRcc2FtcGxlLWhlbGxvd29ybGQtcmVjdXJzaXZlLmphcjwvcGFyYW0+DQorICAgICAgICAgICAgICAgICAgIDxwYXJhbT4uLlwuLlwuLlxnZXR0aW5nLXN0YXJ0ZWRcaGVsbG93b3JsZFx0YXJnZXRcaGVsbG93b3JsZC1jb250cmlidXRpb24uamFyPC9wYXJhbT4NCisgICAgICAgICAgICAgICAgPC9jb250cmlidXRpb25zPg0KKyAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgPC9wbHVnaW4+DQorDQorICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tY29tcG9zaXRlL2hlbGxvd29ybGQtcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmMzNWJiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKQEAgLTAsMCArMSwyOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8Y29udHJpYnV0aW9uIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICAgICB4bWxuczpzYW1wbGU9Imh0dHA6Ly9zYW1wbGUiPg0KKw0KKyAgIDxkZXBsb3lhYmxlIGNvbXBvc2l0ZT0ic2FtcGxlOmhlbGxvd29ybGQtd3MiLz4NCisNCisgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZSIvPiANCisgICA8aW1wb3J0LmphdmEgcGFja2FnZT0ic2FtcGxlIi8+IA0KKw0KKzwvY29udHJpYnV0aW9uPg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvaGVsbG93b3JsZC1yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtd3MuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC13cy5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE5NzU0MgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvaGVsbG93b3JsZC1yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtd3MuY29tcG9zaXRlCkBAIC0wLDAgKzEsMzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCisgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUiDQorICAgICAgeG1sbnM6aG5zPSJodHRwOi8vc2FtcGxlIg0KKyAgICAgIG5hbWU9ImhlbGxvd29ybGQtd3MiPg0KKyAgICANCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb3dvcmxkV1NDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmNvbXBvc2l0ZSBuYW1lPSJobnM6aGVsbG93b3JsZC1yZWN1cnNpdmUiLz4NCisgICAgICAgIDxzZXJ2aWNlIG5hbWU9Ik15SGVsbG93b3JsZCI+DQorICAgICAgICAgICA8YmluZGluZy53cyAvPg0KKyAgICAgICAgPC9zZXJ2aWNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQvUkVBRE1FCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvaGVsbG93b3JsZC1yZWN1cnNpdmUvcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvaGVsbG93b3JsZC1yZWN1cnNpdmUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWRiOGYzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS9wb20ueG1sCkBAIC0wLDAgKzEsNzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxwYWNrYWdpbmc+emlwPC9wYWNrYWdpbmc+DQorICAgIDxhcnRpZmFjdElkPnNhbXBsZS1pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUtaGVsbG93b3JsZC1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgaW1wbGVtZW50YXRpb24uY29tcG9zaXRlIEhlbGxvd29ybGQgQ29udHJpYnV0aW9uPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKw0KKyAgICAgICA8cGx1Z2lucz4NCisNCisgICAgICAgICA8IS0tIHBsdWdpbiB0byBzdXBwb3J0IHppcCBwYWNrYWdpbmcgZm9yIFNDQSBjb250cmlidXRpb25zIC0tPg0KKyAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4temlwLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj5hbHBoYTI8L3ZlcnNpb24+DQorICAgICAgICAgICAgPGV4dGVuc2lvbnM+dHJ1ZTwvZXh0ZW5zaW9ucz4NCisgICAgICAgICA8L3BsdWdpbj4NCisNCisgICAgICAgICA8IS0tIHBsdWdpbiB0byBzdXBwb3J0IHVzaW5nIG12biB0dXNjYW55OnJ1biB0byBydW4gdGhpcyBjb250cmlidXRpb24gLS0+DQorICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8Y29udHJpYnV0aW9ucz4NCisgICAgICAgICAgICAgICAgICAgPCEtLSBhZGQgdGhlIGRlcGVuZGVlIGNvbnRyaWJ1dGlvbiB0aGF0IHRoaXMgY29udHJpYnV0aW9uIHVzZXMgLS0+DQorICAgICAgICAgICAgICAgICAgIDxwYXJhbT4uLlxoZWxsb3dvcmxkXHRhcmdldFxzYW1wbGUtaGVsbG93b3JsZC5qYXI8L3BhcmFtPg0KKyAgICAgICAgICAgICAgICA8L2NvbnRyaWJ1dGlvbnM+DQorICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICAgICA8L3BsdWdpbj4NCisNCisgICAgICAgPC9wbHVnaW5zPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tY29tcG9zaXRlL2hlbGxvd29ybGQtcmVjdXJzaXZlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvaGVsbG93b3JsZC1yZWN1cnNpdmUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZDkzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tY29tcG9zaXRlL2hlbGxvd29ybGQtcmVjdXJzaXZlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxjb250cmlidXRpb24geG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgICAgIHhtbG5zOnNhbXBsZT0iaHR0cDovL3NhbXBsZSI+DQorICAgPGRlcGxveWFibGUgY29tcG9zaXRlPSJzYW1wbGU6aGVsbG93b3JsZC1yZWN1cnNpdmUiLz4NCisgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZSIvPiANCisgICA8ZXhwb3J0IG5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZSIvPiANCis8L2NvbnRyaWJ1dGlvbj4NCisNCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tY29tcG9zaXRlL2hlbGxvd29ybGQtcmVjdXJzaXZlL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS5jb21wb3NpdGUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tY29tcG9zaXRlL2hlbGxvd29ybGQtcmVjdXJzaXZlL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLXJlY3Vyc2l2ZS5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA5NGZlYQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvaGVsbG93b3JsZC1yZWN1cnNpdmUvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtcmVjdXJzaXZlLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCisgICAgICAgICAgIHhtbG5zOmluYz0iaHR0cDovL3NhbXBsZSINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3NhbXBsZSINCisgICAgICAgICAgIG5hbWU9ImhlbGxvd29ybGQtcmVjdXJzaXZlIj4NCisNCisgICAgPGluY2x1ZGUgbmFtZT0iaW5jOmhlbGxvd29ybGQiIC8+DQorDQorICAgIDxzZXJ2aWNlIG5hbWU9Ik15SGVsbG93b3JsZCIgcHJvbW90ZT0iSGVsbG93b3JsZENvbXBvbmVudC9IZWxsb3dvcmxkIiAvPg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGUvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWFiM2ViCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWNvbXBvc2l0ZS9wb20ueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlcy1pbXBsZW1lbXRhdGlvbi1jb21wb3NpdGU8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgSW1wbGVtZW50YXRpb24gQ29tcG9zaXRlIFNhbXBsZXM8L25hbWU+CisKKyAgICA8cHJvZmlsZXM+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPgorICAgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+CisgICAgICAgICAgICA8L2FjdGl2YXRpb24+CisgICAgICAgICAgICA8bW9kdWxlcz4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmhlbGxvd29ybGQtcmVjdXJzaXZlPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5oZWxsb3dvcmxkLXJlY3Vyc2l2ZS13czwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4gICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctcm1pL1JFQURNRSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvUkVBRE1FCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUxZmY4MgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL1JFQURNRQpAQCAtMCwwICsxLDI1IEBACitDYWxjdWxhdG9yIFNhbXBsZSBDb250cmlidXRpb24NCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCitUaGlzIHNhbXBsZSBpbXBsZW1lbnRzIGEgc2ltcGxlIGNhbGN1bGF0b3IgdXNpbmcgU0NBIGNvbXBvbmVudHMuIA0KKw0KK1RoZSBSRUFETUUgaW4gdGhlIDxkaXN0cmlidXRpb24tdW5wYWNrLWRpcj4vc2FtcGxlcyBkaXJlY3RvcnkgcHJvdmlkZXMgDQorZ2VuZXJhbCBpbnN0cnVjdGlvbnMgYWJvdXQgYnVpbGRpbmcgYW5kIHJ1bm5pbmcgc2FtcGxlcy4gKCB3aGVyZQ0KK2Rpc3RyaWJ1dGlvbi11bnBhY2stZGlyIGlzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHVucGFja2VkIHRoZSB0dXNjYW55DQorYmluYXJ5IGRpc3RyaWJ1dGlvbiBhcmNoaXZlKSBUYWtlIGEgbG9vayB0aGVyZSBmb3IgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byBsYXVuY2gNCit0aGlzIHNhbXBsZSBjb250cmlidXRpb24uIA0KKw0KK1NhbXBsZSBPdmVydmlldw0KKy0tLS0tLS0tLS0tLS0tLQ0KK1RoZSBzYW1wbGUgcHJvdmlkZXMgYSBzaW5nbGUgY2FsY3VsYXRvciBzZXJ2aWNlIHdpdGggYSBkZWZhdWx0IFNDQSAoamF2YSkgDQorYmluZGluZy4gVGhlIENhbGN1bGF0b3JDbGllbnQgZXhlcmNpc2VzIHRoaXMgaW50ZXJmYWNlIGJ5IGNhbGxpbmcgYWRkLCANCitzdWJ0cmFjdCwgbXVsdGlwbHkgYW5kIGRpdmlkZSBvcGVyYXRpb25zLiBUaGlzIHJlc3VsdHMgaW4gbWVzc2FnZXMgcGFzc2luZyB0byANCit0aGUgYXBwcm9wcmlhdGUgY29tcG9uZW50cyBpbiB0aGUgY29tcG9zaXRlIGFjcm9zcyB0aGUgbG9jYWwgd2lyZXMuDQorDQorWW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQgZnJvbSB0aGUgcnVuIHRhcmdldC4NCisNCitydW46DQorICAgICBbamF2YV0gMyArIDI9NS4wDQorICAgICBbamF2YV0gMyAtIDI9MS4wDQorICAgICBbamF2YV0gMyAqIDI9Ni4wDQorICAgICBbamF2YV0gMyAvIDI9MS41DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vYnVpbGQueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZGQ0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwKQEAgLTAsMCArMSw1NiBAQAorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorCQ0KKzxwcm9qZWN0IG5hbWU9InNhbXBsZS1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uIiBkZWZhdWx0PSJjb21waWxlIj4gDQorICAgIA0KKyAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4vLi4iLz4NCisgICAgPHByb3BlcnR5IG5hbWU9Imphci5uYW1lIiAgIHZhbHVlPSJzYW1wbGUtaW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi5qYXIiIC8+DQorICAgIA0KKyAgICA8ZWNobz4ke3R1c2NhbnkuaG9tZX08L2VjaG8+DQorDQorICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+IA0KKyAgICAgIDxkZWxldGUgcXVpZXQ9InRydWUiIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPiANCisgICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPiANCisgICAgICA8L2RlbGV0ZT4gDQorICAgICAgPG1rZGlyIGRpcj0idGFyZ2V0L2NsYXNzZXMiLz4gDQorICAgIDwvdGFyZ2V0Pg0KKyAgICANCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0Ij4NCisgICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIiANCisgICAgICAgICAgICAgZGVzdGRpcj0idGFyZ2V0L2NsYXNzZXMiIA0KKyAgICAgICAgICAgICBkZWJ1Zz0ib24iDQorICAgICAgICAgICAgIHNvdXJjZT0iMS41Ig0KKyAgICAgICAgICAgICB0YXJnZXQ9IjEuNSINCisgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPiANCisgICAgICAgICA8Y2xhc3NwYXRoPg0KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2xpYiI+DQorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtYXBpLSouamFyIiAvPg0KKyAgICAgICAgICAgIDwvZmlsZXNldD4NCisgICAgICAgICA8L2NsYXNzcGF0aD4NCisgICAgICA8L2phdmFjPiANCisgICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPiANCisgICAgICAgICA8ZmlsZXNldCBkaXI9InNyYy9tYWluL3Jlc291cmNlcyIvPiANCisgICAgICA8L2NvcHk+IA0KKyAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke2phci5uYW1lfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPiANCisgICAgICAgICA8bWFuaWZlc3Q+DQorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0iJHttYWluLmNsYXNzfSIgLz4gDQorICAgICAgICAgPC9tYW5pZmVzdD4NCisgICAgICA8L2phcj4gICAgICAgIA0KKyAgICA8L3RhcmdldD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzOTkwMgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKQEAgLTAsMCArMSw1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgaW1wbGVtZW50YXRpb24uamF2YSBDYWxjdWxhdG9yIENvbnRyaWJ1dGlvbjwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgPC9kZXBlbmRlbmNpZXM+DQorICAgIA0KKyAgICA8YnVpbGQ+DQorICAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgICAgPHBsdWdpbnM+DQorICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgPC9wbHVnaW4+DQorICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCisNCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExZTdhNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCisvKioNCisgKiBUaGUgQWRkIHNlcnZpY2UgaW50ZXJmYWNlDQorICovDQorcHVibGljIGludGVyZmFjZSBBZGRTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmNGQzNQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEFkZCBzZXJ2aWNlDQorICovDQorcHVibGljIGNsYXNzIEFkZFNlcnZpY2VJbXBsIGltcGxlbWVudHMgQWRkU2VydmljZSB7DQorDQorICAgIHB1YmxpYyBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJBZGRpbmcgIiArIG4xICsgIiBhbmQgIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSArIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yQ2xpZW50LmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNzkxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhCkBAIC0wLDAgKzEsNjIgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uRWFnZXJJbml0Ow0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkluaXQ7DQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNjb3BlOw0KKw0KKy8qKg0KKyAqIFRoaXMgY2xpZW50IHByb2dyYW0gc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBTQ0EgcnVudGltZSwgc3RhcnQgaXQsDQorICogYW5kIGxvY2F0ZSBhbmQgaW52b2tlIGEgU0NBIGNvbXBvbmVudA0KKyAqLw0KK0BTY29wZSgiQ09NUE9TSVRFIikgQEVhZ2VySW5pdA0KK3B1YmxpYyBjbGFzcyBDYWxjdWxhdG9yQ2xpZW50IHsNCisgICAgDQorICAgIHByaXZhdGUgQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvclNlcnZpY2U7DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0Q2FsY3VsYXRvclNlcnZpY2UoQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvclNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMuY2FsY3VsYXRvclNlcnZpY2UgPSBjYWxjdWxhdG9yU2VydmljZTsNCisgICAgfQ0KKyAgICANCisgICAgQEluaXQNCisgICAgcHVibGljIHZvaWQgY2FsY3VsYXRlKCkgew0KKw0KKyAgICAgICAgLy8gQ2FsY3VsYXRlDQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNDQSBBUEkgQ2xhc3NMb2FkZXI6ICIgKyBwcmludChSZWZlcmVuY2UuY2xhc3MuZ2V0Q2xhc3NMb2FkZXIoKSkpOw0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzICsgMj0iICsgY2FsY3VsYXRvclNlcnZpY2UuYWRkKDMsIDIpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAtIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLnN1YnRyYWN0KDMsIDIpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAqIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLm11bHRpcGx5KDMsIDIpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAvIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLmRpdmlkZSgzLCAyKSk7DQorICAgIH0NCisgICAgDQorICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBwcmludChDbGFzc0xvYWRlciBjbCkgew0KKyAgICAgICAgU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsNCisgICAgICAgIGZvciAoOyBjbCAhPSBudWxsOykgew0KKyAgICAgICAgICAgIGJ1Zi5hcHBlbmQoY2wudG9TdHJpbmcoKSk7DQorICAgICAgICAgICAgYnVmLmFwcGVuZCgnICcpOw0KKyAgICAgICAgICAgIGNsID0gY2wuZ2V0UGFyZW50KCk7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gYnVmLnRvU3RyaW5nKCk7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGVlYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7DQorDQorLyoqDQorICogVGhlIENhbGN1bGF0b3Igc2VydmljZSBpbnRlcmZhY2UuDQorICovDQorQFJlbW90YWJsZQ0KK3B1YmxpYyBpbnRlcmZhY2UgQ2FsY3VsYXRvclNlcnZpY2Ugew0KKw0KKyAgICBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCisgICAgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCisgICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCisgICAgZG91YmxlIGRpdmlkZShkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2ZhN2E4Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzAgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOw0KKw0KKw0KKy8qKg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDYWxjdWxhdG9yIHNlcnZpY2UuDQorICovDQorcHVibGljIGNsYXNzIENhbGN1bGF0b3JTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIENhbGN1bGF0b3JTZXJ2aWNlIHsNCisNCisgICAgcHJpdmF0ZSBBZGRTZXJ2aWNlIGFkZFNlcnZpY2U7DQorICAgIHByaXZhdGUgU3VidHJhY3RTZXJ2aWNlIHN1YnRyYWN0U2VydmljZTsNCisgICAgcHJpdmF0ZSBNdWx0aXBseVNlcnZpY2UgbXVsdGlwbHlTZXJ2aWNlOw0KKyAgICBwcml2YXRlIERpdmlkZVNlcnZpY2UgZGl2aWRlU2VydmljZTsNCisNCisgICAgQFJlZmVyZW5jZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRBZGRTZXJ2aWNlKEFkZFNlcnZpY2UgYWRkU2VydmljZSkgew0KKyAgICAgICAgdGhpcy5hZGRTZXJ2aWNlID0gYWRkU2VydmljZTsNCisgICAgfQ0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyB2b2lkIHNldFN1YnRyYWN0U2VydmljZShTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3RTZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLnN1YnRyYWN0U2VydmljZSA9IHN1YnRyYWN0U2VydmljZTsNCisgICAgfQ0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyB2b2lkIHNldERpdmlkZVNlcnZpY2UoRGl2aWRlU2VydmljZSBkaXZpZGVTZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLmRpdmlkZVNlcnZpY2UgPSBkaXZpZGVTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0TXVsdGlwbHlTZXJ2aWNlKE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMubXVsdGlwbHlTZXJ2aWNlID0gbXVsdGlwbHlTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICByZXR1cm4gYWRkU2VydmljZS5hZGQobjEsIG4yKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICByZXR1cm4gc3VidHJhY3RTZXJ2aWNlLnN1YnRyYWN0KG4xLCBuMik7DQorICAgIH0NCisNCisgICAgcHVibGljIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMikgew0KKyAgICAgICAgcmV0dXJuIG11bHRpcGx5U2VydmljZS5tdWx0aXBseShuMSwgbjIpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICByZXR1cm4gZGl2aWRlU2VydmljZS5kaXZpZGUobjEsIG4yKTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjZhOGIzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KKy8qKg0KKyAqIFRoZSBkaXZpZGUgc2VydmljZSBpbnRlcmZhY2UNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERpdmlkZVNlcnZpY2Ugew0KKw0KKyAgICBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDkxOTM1Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEKQEAgLTAsMCArMSwzNSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7DQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxvZ2dlcjsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRGl2aWRlIHNlcnZpY2UuDQorICovDQorcHVibGljIGNsYXNzIERpdmlkZVNlcnZpY2VJbXBsIGltcGxlbWVudHMgRGl2aWRlU2VydmljZSB7DQorDQorICAgIHB1YmxpYyBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJEaXZpZGluZyAiICsgbjEgKyAiIHdpdGggIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSAvIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU2OGNjCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorLyoqDQorICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIE11bHRpcGx5U2VydmljZSB7DQorDQorICAgIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTM1N2YKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIE11bHRpcGx5IHNlcnZpY2UuDQorICovDQorcHVibGljIGNsYXNzIE11bHRpcGx5U2VydmljZUltcGwgaW1wbGVtZW50cyBNdWx0aXBseVNlcnZpY2Ugew0KKw0KKyAgICBwdWJsaWMgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJNdWx0aXBseWluZyAiICsgbjEgKyAiIHdpdGggIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSAqIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVlMzcyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorLyoqDQorICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFN1YnRyYWN0U2VydmljZSB7DQorDQorICAgIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNjY5MDgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIHN1YnRyYWN0IHNlcnZpY2UuDQorICovDQorcHVibGljIGNsYXNzIFN1YnRyYWN0U2VydmljZUltcGwgaW1wbGVtZW50cyBTdWJ0cmFjdFNlcnZpY2Ugew0KKw0KKyAgICBwdWJsaWMgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJTdWJ0cmFjdGluZyAiICsgbjEgKyAiIGZyb20gIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSAtIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzBlMWNmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlCkBAIC0wLDAgKzEsNDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2FtcGxlIg0KKyAgICAgICAgICAgeG1sbnM6c2FtcGxlPSJodHRwOi8vc2FtcGxlIg0KKyAgICAgICAgICAgbmFtZT0iQ2FsY3VsYXRvciI+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQiPg0KKwkJPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuQ2FsY3VsYXRvclNlcnZpY2VJbXBsIi8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImFkZFNlcnZpY2UiIHRhcmdldD0iQWRkU2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic3VidHJhY3RTZXJ2aWNlIiB0YXJnZXQ9IlN1YnRyYWN0U2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ibXVsdGlwbHlTZXJ2aWNlIiB0YXJnZXQ9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iZGl2aWRlU2VydmljZSIgdGFyZ2V0PSJEaXZpZGVTZXJ2aWNlQ29tcG9uZW50IiAvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJBZGRTZXJ2aWNlQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLkFkZFNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlN1YnRyYWN0U2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5TdWJ0cmFjdFNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5NdWx0aXBseVNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkRpdmlkZVNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuRGl2aWRlU2VydmljZUltcGwiLz4NCisgICAgPC9jb21wb25lbnQ+DQorDQorPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvckNsaWVudC5jb21wb3NpdGUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvckNsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpjb3B5IHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKY29weSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWNkMTMxCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLWphdmEvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCisNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQorDQorLyoqDQorICogVGhpcyBzaG93cyBob3cgdG8gdGVzdCB0aGUgQ2FsY3VsYXRvciBjb21wb3NpdGlvbi4NCisgKi8NCitwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclRlc3RDYXNlIHsNCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdENhbGN1bGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIEFkZFNlcnZpY2UgYWRkID0gbmV3IEFkZFNlcnZpY2VJbXBsKCk7DQorICAgICAgICBTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3QgPSBuZXcgU3VidHJhY3RTZXJ2aWNlSW1wbCgpOw0KKyAgICAgICAgTXVsdGlwbHlTZXJ2aWNlIG11bHRpcGx5ID0gbmV3IE11bHRpcGx5U2VydmljZUltcGwoKTsNCisgICAgICAgIERpdmlkZVNlcnZpY2UgZGl2aWRlID0gbmV3IERpdmlkZVNlcnZpY2VJbXBsKCk7DQorICAgICAgICANCisgICAgICAgIENhbGN1bGF0b3JTZXJ2aWNlSW1wbCBjYWxjdWxhdG9yID0gbmV3IENhbGN1bGF0b3JTZXJ2aWNlSW1wbCgpOw0KKyAgICAgICAgDQorICAgICAgICBjYWxjdWxhdG9yLnNldEFkZFNlcnZpY2UoYWRkKTsNCisgICAgICAgIGNhbGN1bGF0b3Iuc2V0U3VidHJhY3RTZXJ2aWNlKHN1YnRyYWN0KTsNCisgICAgICAgIGNhbGN1bGF0b3Iuc2V0TXVsdGlwbHlTZXJ2aWNlKG11bHRpcGx5KTsNCisgICAgICAgIGNhbGN1bGF0b3Iuc2V0RGl2aWRlU2VydmljZShkaXZpZGUpOw0KKyAgICAgICAgDQorICAgICAgICBhc3NlcnRFcXVhbHMoY2FsY3VsYXRvci5hZGQoMywgMiksIDUuMCwgMCk7DQorICAgICAgICBhc3NlcnRFcXVhbHMoY2FsY3VsYXRvci5zdWJ0cmFjdCgzLCAyKSwgMS4wLCAwKTsNCisgICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLm11bHRpcGx5KDMsIDIpLCA2LjAsIDApOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNhbGN1bGF0b3IuZGl2aWRlKDMsIDIpLCAxLjUsIDApOw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmYyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9wb20ueG1sCkBAIC0wLDAgKzEsNDMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlLWltcGxlbWVudGF0aW9uLWphdmE8L2FydGlmYWN0SWQ+DQorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgaW1wbGVtZW50YXRpb24uamF2YTwvbmFtZT4NCisNCisgICAgPHByb2ZpbGVzPg0KKyAgICAgICAgPHByb2ZpbGU+DQorICAgICAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPg0KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4NCisgICAgICAgICAgICA8L2FjdGl2YXRpb24+DQorICAgICAgICAgICAgPG1vZHVsZXM+DQorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsY3VsYXRvci1jb250cmlidXRpb248L21vZHVsZT4NCisgICAgICAgICAgICA8L21vZHVsZXM+DQorICAgICAgICA8L3Byb2ZpbGU+DQorICAgIDwvcHJvZmlsZXM+ICAgIA0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9MSUNFTlNFIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL0xJQ0VOU0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL0xJQ0VOU0UKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9MSUNFTlNFCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvTk9USUNFIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL05PVElDRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvTk9USUNFCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvTk9USUNFCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9hZGQtY29tcG9uZW50LnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9hZGQtY29tcG9uZW50LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvYWRkLWNvbXBvbmVudC54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9hZGQtY29tcG9uZW50LnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvYmx1ZXByaW50L29wZXJhdGlvbnMtbW9kdWxlLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9ibHVlcHJpbnQvb3BlcmF0aW9ucy1tb2R1bGUueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9ibHVlcHJpbnQvb3BlcmF0aW9ucy1tb2R1bGUueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvYmx1ZXByaW50L29wZXJhdGlvbnMtbW9kdWxlLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvZGl2aWRlLWNvbXBvbmVudC54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvZGl2aWRlLWNvbXBvbmVudC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL2RpdmlkZS1jb21wb25lbnQueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvZGl2aWRlLWNvbXBvbmVudC54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL211bHRpcGx5LWNvbXBvbmVudC54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvbXVsdGlwbHktY29tcG9uZW50LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvbXVsdGlwbHktY29tcG9uZW50LnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL211bHRpcGx5LWNvbXBvbmVudC54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3NjYS9idW5kbGUuY29tcG9uZW50VHlwZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9PU0dJLUlORi9zY2EvYnVuZGxlLmNvbXBvbmVudFR5cGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3NjYS9idW5kbGUuY29tcG9uZW50VHlwZQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3NjYS9idW5kbGUuY29tcG9uZW50VHlwZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvc2NhL2J1bmRsZS5jb21wb3NpdGUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvc2NhL2J1bmRsZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3NjYS9idW5kbGUuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvc2NhL2J1bmRsZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3N1YnRyYWN0LWNvbXBvbmVudC54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvc3VidHJhY3QtY29tcG9uZW50LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvT1NHSS1JTkYvc3VidHJhY3QtY29tcG9uZW50LnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL09TR0ktSU5GL3N1YnRyYWN0LWNvbXBvbmVudC54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL1JFQURNRSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL1JFQURNRQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL1JFQURNRQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDRmNGM2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3BvbS54bWwKQEAgLTAsMCArMSwxNTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWRvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9uczwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIE9TR2kgUmVtb3RlIFNlcnZpY2VzIENhbGN1bGF0b3IgT3BlcmF0aW9uczwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWFsbDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWxhdW5jaGVyLWVxdWlub3g8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsLW9zZ2k8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLm9zZ2k8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi4wLXYyMDA5MDUyMC0xODAwPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPCEtLSBFcXVpbm94IERlY2xhcmF0aXZlIFNlcnZpY2VzIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmVxdWlub3g8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5kczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4wLXYyMDA5MDYwMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZXF1aW5veDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnV0aWw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjAuMTAwLXYyMDA5MDUyMC0xODAwPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKyAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWVjbGlwc2UtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNS4xPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmQ+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvYnVpbGRjb21tYW5kPgorICAgICAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZD5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvYnVpbGRjb21tYW5kPgorICAgICAgICAgICAgICAgICAgICA8L2J1aWxkY29tbWFuZHM+CisgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9qZWN0bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L3Byb2plY3RuYXR1cmU+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvamVjdG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9wcm9qZWN0bmF0dXJlPgorICAgICAgICAgICAgICAgICAgICA8L3Byb2plY3RuYXR1cmVzPgorICAgICAgICAgICAgICAgICAgICA8Y2xhc3NwYXRoQ29udGFpbmVycz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzc3BhdGhDb250YWluZXI+b3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NsYXNzcGF0aENvbnRhaW5lcj4KKyAgICAgICAgICAgICAgICAgICAgPC9jbGFzc3BhdGhDb250YWluZXJzPgorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWphci1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDxhcmNoaXZlPgorICAgICAgICAgICAgICAgICAgICAgICAgPG1hbmlmZXN0RmlsZT4ke2Jhc2VkaXJ9L01FVEEtSU5GL01BTklGRVNULk1GPC9tYW5pZmVzdEZpbGU+CisgICAgICAgICAgICAgICAgICAgIDwvYXJjaGl2ZT4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKworPCEtLSBEb24ndCB0aGluayB3ZSBuZWVkIHRoaXMgYXMgdGhlIEpVbml0IHRlc3Qgc3RhcnRzIGVxdWlub3gKKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tb3NnaS1qdW5pdC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+b3NnaS10ZXN0PC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0PC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD50ZXN0PC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzeXN0ZW1Qcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vc2dpLmNvbmZpZ3VyYXRpb24uYXJlYTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9lcXVpbm94PC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N5c3RlbVByb3BlcnRpZXM+ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorLS0+ICAgICAgICAgICAgCisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9BZGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvQWRkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9BZGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9BZGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL0RpdmlkZVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9EaXZpZGVTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL0RpdmlkZVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL0RpdmlkZVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvTXVsdGlwbHlTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvTXVsdGlwbHlTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL011bHRpcGx5U2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvTXVsdGlwbHlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL1N1YnRyYWN0U2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL1N1YnRyYWN0U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9TdWJ0cmFjdFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL1N1YnRyYWN0U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL0FkZFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9BZGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL0FkZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL0FkZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvRGl2aWRlU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvRGl2aWRlU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvRGl2aWRlU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvT3BlcmF0aW9uc0FjdGl2YXRvci5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvT3BlcmF0aW9uc0FjdGl2YXRvci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL09wZXJhdGlvbnNBY3RpdmF0b3IuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL2ltcGwvT3BlcmF0aW9uc0FjdGl2YXRvci5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL1N1YnRyYWN0U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvaW1wbC9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9pbXBsL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy90ZXN0L09TR2lUZXN0VXRpbHMuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy90ZXN0L09TR2lUZXN0VXRpbHMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvdGVzdC9PU0dpVGVzdFV0aWxzLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Itb3BlcmF0aW9ucy9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy90ZXN0L09TR2lUZXN0VXRpbHMuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvdGVzdC9PcGVyYXRpb25zTm9kZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL3Rlc3QvT3BlcmF0aW9uc05vZGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvdGVzdC9PcGVyYXRpb25zTm9kZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvdGVzdC9PcGVyYXRpb25zTm9kZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnMvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvdGVzdC9PcGVyYXRpb25zT1NHaU5vZGVUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL3Rlc3QvT3BlcmF0aW9uc09TR2lOb2RlVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wN2Y2YWFkCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL3Rlc3QvT3BlcmF0aW9uc09TR2lOb2RlVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMudGVzdDsKKworaW1wb3J0IHN0YXRpYyBjYWxjdWxhdG9yLmRvc2dpLm9wZXJhdGlvbnMudGVzdC5PU0dpVGVzdFV0aWxzLmJ1bmRsZVN0YXR1czsKKworaW1wb3J0IGphdmEucm1pLnJlZ2lzdHJ5LkxvY2F0ZVJlZ2lzdHJ5OworaW1wb3J0IGphdmEucm1pLnJlZ2lzdHJ5LlJlZ2lzdHJ5OworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLmVxdWlub3gubGF1bmNoZXIuRXF1aW5veEhvc3Q7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKK2ltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQ29uc3RhbnRzOworCitpbXBvcnQgY2FsY3VsYXRvci5kb3NnaS5vcGVyYXRpb25zLkFkZFNlcnZpY2U7CisKKy8qKgorICoKKyAqLworcHVibGljIGNsYXNzIE9wZXJhdGlvbnNPU0dpTm9kZVRlc3RDYXNlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBFcXVpbm94SG9zdCBob3N0OworICAgIHByaXZhdGUgc3RhdGljIEJ1bmRsZUNvbnRleHQgY29udGV4dDsKKyAgICBwcml2YXRlIHN0YXRpYyBCdW5kbGUgb3BlcmF0aW9uc0J1bmRsZTsKKworICAgIC8qKgorICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgorICAgICAqLworICAgIEBCZWZvcmVDbGFzcworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcEJlZm9yZUNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBob3N0ID0gbmV3IEVxdWlub3hIb3N0KCk7CisgICAgICAgICAgICBjb250ZXh0ID0gaG9zdC5zdGFydCgpOworCisgICAgICAgICAgICBmb3IgKEJ1bmRsZSBiIDogY29udGV4dC5nZXRCdW5kbGVzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYi5nZXRTeW1ib2xpY05hbWUoKS5lcXVhbHMoIm9yZy5lY2xpcHNlLmVxdWlub3guZHMiKSB8fCBiLmdldFN5bWJvbGljTmFtZSgpCisgICAgICAgICAgICAgICAgICAgIC5zdGFydHNXaXRoKCJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLiIpKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYi5nZXRIZWFkZXJzKCkuZ2V0KENvbnN0YW50cy5GUkFHTUVOVF9IT1NUKSA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIG5vbi1mcmFnbWVudCBidW5kbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiLnN0YXJ0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIGZvciBidW5kbGU6ICIgKyBiLmdldFN5bWJvbGljTmFtZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGJ1bmRsZVN0YXR1cyhiLCBmYWxzZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoImNhbGN1bGF0b3IuZG9zZ2kub3BlcmF0aW9ucyIuZXF1YWxzKGIuZ2V0U3ltYm9saWNOYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnNCdW5kbGUgPSBiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG9wZXJhdGlvbnNCdW5kbGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIG9wZXJhdGlvbnNCdW5kbGUuc3RhcnQoKTsKKyAgICAgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYnVuZGxlU3RhdHVzKG9wZXJhdGlvbnNCdW5kbGUsIGZhbHNlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0T1NHaSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBSZWdpc3RyeSByZWdpc3RyeSA9IExvY2F0ZVJlZ2lzdHJ5LmdldFJlZ2lzdHJ5KDgwODUpOworICAgICAgICBPYmplY3QgYWRkID0gcmVnaXN0cnkubG9va3VwKCJBZGRTZXJ2aWNlIik7CisgICAgICAgIEFkZFNlcnZpY2UgYWRkU2VydmljZSA9IE9TR2lUZXN0VXRpbHMuY2FzdChhZGQsIEFkZFNlcnZpY2UuY2xhc3MpOworICAgICAgICBkb3VibGUgc3VtID0gYWRkU2VydmljZS5hZGQoMS4wLCAyLjApOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDMuMCwgc3VtLCAwLjApOworICAgIH0KKworICAgIC8qKgorICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgorICAgICAqLworICAgIEBBZnRlckNsYXNzCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlYXJEb3duQWZ0ZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpZiAoaG9zdCAhPSBudWxsKSB7CisgICAgICAgICAgICBob3N0LnN0b3AoKTsKKyAgICAgICAgICAgIGNvbnRleHQgPSBudWxsOworICAgICAgICB9CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3IvTElDRU5TRSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3IvTElDRU5TRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL0xJQ0VOU0UKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3IvTElDRU5TRQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL01FVEEtSU5GL01BTklGRVNULk1GIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9NRVRBLUlORi9NQU5JRkVTVC5NRgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL01FVEEtSU5GL01BTklGRVNULk1GCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL01FVEEtSU5GL01BTklGRVNULk1GCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3IvTk9USUNFIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9OT1RJQ0UKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9OT1RJQ0UKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3IvTk9USUNFCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3IvT1NHSS1JTkYvYmx1ZXByaW50L2NhbGN1bGF0b3ItbW9kdWxlLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3IvT1NHSS1JTkYvYmx1ZXByaW50L2NhbGN1bGF0b3ItbW9kdWxlLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL09TR0ktSU5GL2JsdWVwcmludC9jYWxjdWxhdG9yLW1vZHVsZS54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3IvT1NHSS1JTkYvYmx1ZXByaW50L2NhbGN1bGF0b3ItbW9kdWxlLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL09TR0ktSU5GL2NhbGN1bGF0b3ItY29tcG9uZW50LnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3IvT1NHSS1JTkYvY2FsY3VsYXRvci1jb21wb25lbnQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3IvT1NHSS1JTkYvY2FsY3VsYXRvci1jb21wb25lbnQueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL09TR0ktSU5GL2NhbGN1bGF0b3ItY29tcG9uZW50LnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL09TR0ktSU5GL3NjYS9idW5kbGUuY29tcG9uZW50VHlwZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3IvT1NHSS1JTkYvc2NhL2J1bmRsZS5jb21wb25lbnRUeXBlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3IvT1NHSS1JTkYvc2NhL2J1bmRsZS5jb21wb25lbnRUeXBlCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL09TR0ktSU5GL3NjYS9idW5kbGUuY29tcG9uZW50VHlwZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL09TR0ktSU5GL3NjYS9idW5kbGUuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9PU0dJLUlORi9zY2EvYnVuZGxlLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL09TR0ktSU5GL3NjYS9idW5kbGUuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL09TR0ktSU5GL3NjYS9idW5kbGUuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3IvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3IvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3IvZG9zZ2ktY2FsY3VsYXRvci5wbmcgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL2Rvc2dpLWNhbGN1bGF0b3IucG5nCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3IvZG9zZ2ktY2FsY3VsYXRvci5wbmcKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3IvZG9zZ2ktY2FsY3VsYXRvci5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YzBlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL3BvbS54bWwKQEAgLTAsMCArMSwxNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWRvc2dpLWNhbGN1bGF0b3I8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBPU0dpIFJlbW90ZSBTZXJ2aWNlcyBDYWxjdWxhdG9yPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtZWphdmE8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtd2Vic2VydmljZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1sYXVuY2hlci1lcXVpbm94PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbC1vc2dpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5vc2dpPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmljZXM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjIuMC12MjAwOTA1MjAtMTgwMDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPCEtLSBFcXVpbm94IERlY2xhcmF0aXZlIFNlcnZpY2VzIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmVxdWlub3g8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5kczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4wLXYyMDA5MDYwMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuZXF1aW5veDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnV0aWw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjAuMTAwLXYyMDA5MDUyMC0xODAwPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1lY2xpcHNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjUuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L2J1aWxkY29tbWFuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmQ+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L2J1aWxkY29tbWFuZD4KKyAgICAgICAgICAgICAgICAgICAgPC9idWlsZGNvbW1hbmRzPgorICAgICAgICAgICAgICAgICAgICA8cHJvamVjdG5hdHVyZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvamVjdG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9wcm9qZWN0bmF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvcHJvamVjdG5hdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9qZWN0bmF0dXJlcz4KKyAgICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aENvbnRhaW5lcnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3NwYXRoQ29udGFpbmVyPm9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGFzc3BhdGhDb250YWluZXI+CisgICAgICAgICAgICAgICAgICAgIDwvY2xhc3NwYXRoQ29udGFpbmVycz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8YXJjaGl2ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtYW5pZmVzdEZpbGU+JHtiYXNlZGlyfS9NRVRBLUlORi9NQU5JRkVTVC5NRjwvbWFuaWZlc3RGaWxlPgorICAgICAgICAgICAgICAgICAgICA8L2FyY2hpdmU+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisKKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tb3NnaS1qdW5pdC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+b3NnaS10ZXN0PC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0PC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD50ZXN0PC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzeXN0ZW1Qcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vc2dpLmNvbmZpZ3VyYXRpb24uYXJlYTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9lcXVpbm94PC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N5c3RlbVByb3BlcnRpZXM+ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9DYWxjdWxhdG9yU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9DYWxjdWxhdG9yU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL2ltcGwvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvaW1wbC9DYWxjdWxhdG9yQWN0aXZhdG9yLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvaW1wbC9DYWxjdWxhdG9yQWN0aXZhdG9yLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL2ltcGwvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL2ltcGwvQ2FsY3VsYXRvclNlcnZpY2VEU0ltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL2ltcGwvQ2FsY3VsYXRvclNlcnZpY2VEU0ltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9pbXBsL0NhbGN1bGF0b3JTZXJ2aWNlRFNJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL2ltcGwvQ2FsY3VsYXRvclNlcnZpY2VEU0ltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9pbXBsL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvaW1wbC9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9pbXBsL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9pbXBsL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvQWRkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9BZGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9BZGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvQWRkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvRGl2aWRlU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9EaXZpZGVTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9EaXZpZGVTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvRGl2aWRlU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvTXVsdGlwbHlTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9kb3NnaS9vcGVyYXRpb25zL011bHRpcGx5U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvTXVsdGlwbHlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvTXVsdGlwbHlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9TdWJ0cmFjdFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL2Rvc2dpL29wZXJhdGlvbnMvU3VidHJhY3RTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9TdWJ0cmFjdFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvb3BlcmF0aW9ucy9TdWJ0cmFjdFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JNSVNlcnZlci5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3Ivcm1pL09wZXJhdGlvbnNSTUlTZXJ2ZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JNSVNlcnZlci5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JNSVNlcnZlci5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3JtaS9PcGVyYXRpb25zUk1JU2VydmVyX1N0dWIuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3JtaS9PcGVyYXRpb25zUk1JU2VydmVyX1N0dWIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JNSVNlcnZlcl9TdHViLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3JtaS9PcGVyYXRpb25zUk1JU2VydmVyX1N0dWIuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JlbW90ZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3Ivcm1pL09wZXJhdGlvbnNSZW1vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JlbW90ZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9ybWkvT3BlcmF0aW9uc1JlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL3Rlc3QvQ2FsY3VsYXRvck5vZGUuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL3Rlc3QvQ2FsY3VsYXRvck5vZGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L0NhbGN1bGF0b3JOb2RlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL2Rvc2dpLWNhbGN1bGF0b3Ivc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL2Rvc2dpL3Rlc3QvQ2FsY3VsYXRvck5vZGUuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L0NhbGN1bGF0b3JPU0dpTm9kZVRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L0NhbGN1bGF0b3JPU0dpTm9kZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9DYWxjdWxhdG9yT1NHaU5vZGVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L0NhbGN1bGF0b3JPU0dpTm9kZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvZG9zZ2ktY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9PU0dpVGVzdFV0aWxzLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9kb3NnaS1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L09TR2lUZXN0VXRpbHMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9kb3NnaS1jYWxjdWxhdG9yL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9kb3NnaS90ZXN0L09TR2lUZXN0VXRpbHMuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLW9zZ2kvZG9zZ2ktY2FsY3VsYXRvci9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvZG9zZ2kvdGVzdC9PU0dpVGVzdFV0aWxzLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1vc2dpL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxOTQ0OTQKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tb3NnaS9wb20ueG1sCkBAIC0wLDAgKzEsNDQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlcy1kaXN0cmlidXRlZC1vc2dpLXN0YXRpYzwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBEaXN0cmlidXRlZCBPU0dJIFN0YXRpY2FsbHkgQ29uZmlndXJlZCBTYW1wbGVzPC9uYW1lPgorCisgICAgPHByb2ZpbGVzPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPgorICAgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgorICAgICAgICAgICAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5kb3NnaS1jYWxjdWxhdG9yPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5kb3NnaS1jYWxjdWxhdG9yLW9wZXJhdGlvbnM8L21vZHVsZT4KKyAgICAgICAgICAgIDwvbW9kdWxlcz4KKyAgICAgICAgPC9wcm9maWxlPgorICAgIDwvcHJvZmlsZXM+ICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXJtaS9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvYmluZGluZy1ybWkvUkVBRE1FCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU1YmM5YwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vUkVBRE1FCkBAIC0wLDAgKzEsMjYgQEAKK0NhbGN1bGF0b3IgU2FtcGxlIENvbnRyaWJ1dGlvbg0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KK1RoaXMgc2FtcGxlIGNvbnRyaWJ1dGlvbiBpbXBsZW1lbnRzIGEgc2ltcGxlIGNhbGN1bGF0b3IgdXNpbmcgU0NBIGNvbXBvbmVudHMuDQorDQorVGhlIFJFQURNRSBpbiB0aGUgPGRpc3RyaWJ1dGlvbi11bnBhY2stZGlyPi9zYW1wbGVzIGRpcmVjdG9yeSBwcm92aWRlcyANCitnZW5lcmFsIGluc3RydWN0aW9ucyBhYm91dCBidWlsZGluZyBhbmQgcnVubmluZyBzYW1wbGVzLiAoIHdoZXJlDQorZGlzdHJpYnV0aW9uLXVucGFjay1kaXIgaXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB5b3UgdW5wYWNrZWQgdGhlIHR1c2NhbnkNCitiaW5hcnkgZGlzdHJpYnV0aW9uIGFyY2hpdmUpIFRha2UgYSBsb29rIHRoZXJlIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGxhdW5jaA0KK3RoaXMgc2FtcGxlIGNvbnRyaWJ1dGlvbi4gDQorDQorU2FtcGxlIE92ZXJ2aWV3DQorLS0tLS0tLS0tLS0tLS0tDQorVGhlIHNhbXBsZSBwcm92aWRlcyBhIHNpbmdsZSBjYWxjdWxhdG9yIHNlcnZpY2Ugd2l0aCBhIGRlZmF1bHQgU0NBIChqYXZhKSANCitiaW5kaW5nLiBUaGUgQ2FsY3VsYXRvckNsaWVudCBleGVyY2lzZXMgdGhpcyBpbnRlcmZhY2UgYnkgY2FsbGluZyBhZGQsIA0KK3N1YnRyYWN0LCBtdWx0aXBseSBhbmQgZGl2aWRlIG9wZXJhdGlvbnMuIFRoaXMgcmVzdWx0cyBpbiBtZXNzYWdlcyBwYXNzaW5nIHRvIA0KK3RoZSBhcHByb3ByaWF0ZSBjb21wb25lbnRzIGluIHRoZSBjb21wb3NpdGUgYWNyb3NzIHRoZSBsb2NhbCB3aXJlcy4NCisNCitBbW9uZ3N0IHRoZSBvdGhlciBvdXRwdXQgY3JlYXRlZCBieSB0aGUgbGF1bmNoZXIvY29udHJpYnV0aW9uIGNvbWJpbmF0aW9uLCAgeW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQgLi4uDQorDQorcnVuOg0KKyAgICAgW2phdmFdIDMgKyAyPTUuMA0KKyAgICAgW2phdmFdIDMgLSAyPTEuMA0KKyAgICAgW2phdmFdIDMgKiAyPTYuMA0KKyAgICAgW2phdmFdIDMgLyAyPTEuNQ0KKw0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vYnVpbGQueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9idWlsZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM3ZTNiNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vYnVpbGQueG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKw0KKzxwcm9qZWN0IG5hbWU9InNhbXBsZS1pbXBsZW1lbnRhdGlvbi1zY3JpcHQtY2FsY3VsYXRvci1jb250cmlidXRpb24iIGRlZmF1bHQ9ImNvbXBpbGUiPg0KKyAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS5ob21lIiB2YWx1ZT0iLi4vLi4vLi4iLz4NCisgICAgPHByb3BlcnR5IG5hbWU9Imphci5uYW1lIiAgIHZhbHVlPSJzYW1wbGUtaW1wbGVtZW50YXRpb24tc2NyaXB0LWNhbGN1bGF0b3ItY29udHJpYnV0aW9uLmphciIgLz4NCisgICAgDQorICAgIDxlY2hvPiR7dHVzY2FueS5ob21lfTwvZWNobz4NCisNCisgICAgPHRhcmdldCBuYW1lPSJpbml0Ij4gDQorICAgICAgPGRlbGV0ZSBxdWlldD0idHJ1ZSIgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+IA0KKyAgICAgICAgIDxmaWxlc2V0IGRpcj0idGFyZ2V0Ii8+IA0KKyAgICAgIDwvZGVsZXRlPiANCisgICAgICA8bWtkaXIgZGlyPSJ0YXJnZXQvY2xhc3NlcyIvPiANCisgICAgPC90YXJnZXQ+DQorICAgIA0KKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiPg0KKyAgICAgIDxqYXZhYyBzcmNkaXI9InNyYy9tYWluL2phdmEiIA0KKyAgICAgICAgICAgICBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIgDQorICAgICAgICAgICAgIGRlYnVnPSJvbiINCisgICAgICAgICAgICAgc291cmNlPSIxLjUiDQorICAgICAgICAgICAgIHRhcmdldD0iMS41Ig0KKyAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+IA0KKyAgICAgICAgIDxjbGFzc3BhdGg+DQorICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vbGliIj4NCisgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LXNjYS1hcGktKi5qYXIiIC8+DQorICAgICAgICAgICAgPC9maWxlc2V0Pg0KKyAgICAgICAgIDwvY2xhc3NwYXRoPg0KKyAgICAgIDwvamF2YWM+IA0KKyAgICAgIDxjb3B5IHRvZGlyPSJ0YXJnZXQvY2xhc3NlcyI+IA0KKyAgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL21haW4vcmVzb3VyY2VzIi8+IA0KKyAgICAgIDwvY29weT4gDQorICAgICAgPGphciBkZXN0ZmlsZT0idGFyZ2V0LyR7amFyLm5hbWV9IiBiYXNlZGlyPSJ0YXJnZXQvY2xhc3NlcyI+IA0KKyAgICAgICAgIDxtYW5pZmVzdD4NCisgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Ik1haW4tQ2xhc3MiIHZhbHVlPSIke21haW4uY2xhc3N9IiAvPiANCisgICAgICAgICA8L21hbmlmZXN0Pg0KKyAgICAgIDwvamFyPiAgICAgICAgDQorICAgIDwvdGFyZ2V0Pg0KKzwvcHJvamVjdD4NCisNCisNCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4ZjYyOQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vcG9tLnhtbApAQCAtMCwwICsxLDU4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaW1wbGVtZW50YXRpb24tc2NyaXB0LWNhbGN1bGF0b3ItY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIGltcGxlbWVudGF0aW9uLnNjcmlwdCBDYWxjdWxhdG9yIENvbnRyaWJ1dGlvbjwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgICAgIDxwbHVnaW5zPg0KKyAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tdHVzY2FueS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgPC9wbHVnaW4+DQorICAgICAgIDwvcGx1Z2lucz4NCisgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExZTdhNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KKy8qKg0KKyAqIFRoZSBBZGQgc2VydmljZSBpbnRlcmZhY2UNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIEFkZFNlcnZpY2Ugew0KKw0KKyAgICBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjFmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yQ2xpZW50LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5FYWdlckluaXQ7DQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uSW5pdDsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7DQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2NvcGU7DQorDQorLyoqDQorICogVGhpcyBjbGllbnQgcHJvZ3JhbSBzaG93cyBob3cgdG8gY3JlYXRlIGFuIFNDQSBydW50aW1lLCBzdGFydCBpdCwNCisgKiBhbmQgbG9jYXRlIGFuZCBpbnZva2UgYSBTQ0EgY29tcG9uZW50DQorICovDQorQFNjb3BlKCJDT01QT1NJVEUiKQ0KK0BFYWdlckluaXQNCitwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvckNsaWVudCB7DQorDQorICAgIHByaXZhdGUgQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvclNlcnZpY2U7DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0Q2FsY3VsYXRvclNlcnZpY2UoQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvclNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMuY2FsY3VsYXRvclNlcnZpY2UgPSBjYWxjdWxhdG9yU2VydmljZTsNCisgICAgfQ0KKw0KKyAgICBASW5pdA0KKyAgICBwdWJsaWMgdm9pZCBjYWxjdWxhdGUoKSB7DQorICAgICAgICAvLyBDYWxjdWxhdGUNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0NBIEFQSSBDbGFzc0xvYWRlcjogIiArIFJlZmVyZW5jZS5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyArIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLmFkZCgzLCAyKSk7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgLSAyPSIgKyBjYWxjdWxhdG9yU2VydmljZS5zdWJ0cmFjdCgzLCAyKSk7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgKiAyPSIgKyBjYWxjdWxhdG9yU2VydmljZS5tdWx0aXBseSgzLCAyKSk7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgLyAyPSIgKyBjYWxjdWxhdG9yU2VydmljZS5kaXZpZGUoMywgMikpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZWVhMzkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOw0KKw0KKy8qKg0KKyAqIFRoZSBDYWxjdWxhdG9yIHNlcnZpY2UgaW50ZXJmYWNlLg0KKyAqLw0KK0BSZW1vdGFibGUNCitwdWJsaWMgaW50ZXJmYWNlIENhbGN1bGF0b3JTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorICAgIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorICAgIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorICAgIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpOw0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNGIwODIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDcyIEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlOw0KKw0KKw0KKy8qKg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDYWxjdWxhdG9yIHNlcnZpY2UuDQorICovDQorQFNlcnZpY2UoQ2FsY3VsYXRvclNlcnZpY2UuY2xhc3MpDQorcHVibGljIGNsYXNzIENhbGN1bGF0b3JTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIENhbGN1bGF0b3JTZXJ2aWNlIHsNCisNCisgICAgcHJpdmF0ZSBBZGRTZXJ2aWNlIGFkZFNlcnZpY2U7DQorICAgIHByaXZhdGUgU3VidHJhY3RTZXJ2aWNlIHN1YnRyYWN0U2VydmljZTsNCisgICAgcHJpdmF0ZSBNdWx0aXBseVNlcnZpY2UgbXVsdGlwbHlTZXJ2aWNlOw0KKyAgICBwcml2YXRlIERpdmlkZVNlcnZpY2UgZGl2aWRlU2VydmljZTsNCisNCisgICAgQFJlZmVyZW5jZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRBZGRTZXJ2aWNlKEFkZFNlcnZpY2UgYWRkU2VydmljZSkgew0KKyAgICAgICAgdGhpcy5hZGRTZXJ2aWNlID0gYWRkU2VydmljZTsNCisgICAgfQ0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyB2b2lkIHNldFN1YnRyYWN0U2VydmljZShTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3RTZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLnN1YnRyYWN0U2VydmljZSA9IHN1YnRyYWN0U2VydmljZTsNCisgICAgfQ0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyB2b2lkIHNldERpdmlkZVNlcnZpY2UoRGl2aWRlU2VydmljZSBkaXZpZGVTZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLmRpdmlkZVNlcnZpY2UgPSBkaXZpZGVTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0TXVsdGlwbHlTZXJ2aWNlKE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMubXVsdGlwbHlTZXJ2aWNlID0gbXVsdGlwbHlTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICByZXR1cm4gYWRkU2VydmljZS5hZGQobjEsIG4yKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICByZXR1cm4gc3VidHJhY3RTZXJ2aWNlLnN1YnRyYWN0KG4xLCBuMik7DQorICAgIH0NCisNCisgICAgcHVibGljIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMikgew0KKyAgICAgICAgcmV0dXJuIG11bHRpcGx5U2VydmljZS5tdWx0aXBseShuMSwgbjIpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICByZXR1cm4gZGl2aWRlU2VydmljZS5kaXZpZGUobjEsIG4yKTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2YThiMwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KKy8qKg0KKyAqIFRoZSBkaXZpZGUgc2VydmljZSBpbnRlcmZhY2UNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIERpdmlkZVNlcnZpY2Ugew0KKw0KKyAgICBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU2OGNjCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCisvKioNCisgKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbXVsdGlwbHkgc2VydmljZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgTXVsdGlwbHlTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVlMzcyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCisvKioNCisgKiBUaGUgaW50ZXJmYWNlIGZvciB0aGUgbXVsdGlwbHkgc2VydmljZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgU3VidHJhY3RTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDQxYWEwCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKQEAgLTAsMCArMSw1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiDQorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUiDQorICAgICAgICAgICB4bWxuczpzYW1wbGU9Imh0dHA6Ly9zYW1wbGUiDQorICAgICAgICAgICBuYW1lPSJDYWxjdWxhdG9yIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCI+DQorCQk8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5DYWxjdWxhdG9yU2VydmljZUltcGwiLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iYWRkU2VydmljZSIgdGFyZ2V0PSJBZGRTZXJ2aWNlQ29tcG9uZW50IiAvPg0KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJzdWJ0cmFjdFNlcnZpY2UiIHRhcmdldD0iU3VidHJhY3RTZXJ2aWNlQ29tcG9uZW50IiAvPg0KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJtdWx0aXBseVNlcnZpY2UiIHRhcmdldD0iTXVsdGlwbHlTZXJ2aWNlQ29tcG9uZW50IiAvPg0KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJkaXZpZGVTZXJ2aWNlIiB0YXJnZXQ9IkRpdmlkZVNlcnZpY2VDb21wb25lbnQiIC8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkFkZFNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPHR1c2Nhbnk6aW1wbGVtZW50YXRpb24uc2NyaXB0IHNjcmlwdD0iY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qcyIvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJTdWJ0cmFjdFNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPHR1c2Nhbnk6aW1wbGVtZW50YXRpb24uc2NyaXB0IHNjcmlwdD0iY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLnJiIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8dHVzY2FueTppbXBsZW1lbnRhdGlvbi5zY3JpcHQgc2NyaXB0PSJjYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwucHkiLz4NCisgICAgPC9jb21wb25lbnQ+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iRGl2aWRlU2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8dHVzY2FueTppbXBsZW1lbnRhdGlvbi5zY3JpcHQgc2NyaXB0PSJjYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmdyb292eSIvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3JDbGllbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvckNsaWVudC5jb21wb3NpdGUKY29weSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApjb3B5IHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmNvbXBvbmVudFR5cGUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmNvbXBvbmVudFR5cGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2ZDg4NAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuY29tcG9uZW50VHlwZQpAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGNvbXBvbmVudFR5cGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisJeG1sbnM6d3NkbGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDYvMDEvd3NkbC1pbnN0YW5jZSIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorCisgIDxzZXJ2aWNlIG5hbWU9IkFkZFNlcnZpY2UiPgorICAgICAgICA8aW50ZXJmYWNlLmphdmEgaW50ZXJmYWNlPSJjYWxjdWxhdG9yLkFkZFNlcnZpY2UiIC8+CisgIDwvc2VydmljZT4KKworPC9jb21wb25lbnRUeXBlPiAgICAgICAgICAgICAgCisgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qcyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxMTEwNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuanMKQEAgLTAsMCArMSwyMiBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK2Z1bmN0aW9uIGFkZChuMSwgbjIpIHsNCisgICByZXR1cm4gbjEgKyBuMjsNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YmI0ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmNvbXBvbmVudFR5cGUKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQVNDSUkiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxjb21wb25lbnRUeXBlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiIAorCXhtbG5zOndzZGxpPSJodHRwOi8vd3d3LnczLm9yZy8yMDA2LzAxL3dzZGwtaW5zdGFuY2UiCisJeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKwl4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KKworICA8c2VydmljZSBuYW1lPSJEaXZpZGVTZXJ2aWNlIj4KKyAgICAgICAgPGludGVyZmFjZS5qYXZhIGludGVyZmFjZT0iY2FsY3VsYXRvci5EaXZpZGVTZXJ2aWNlIiAvPgorICA8L3NlcnZpY2U+CisKKzwvY29tcG9uZW50VHlwZT4gICAgICAgICAgICAgIAorICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuZ3Jvb3Z5IGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5ncm9vdnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxYzFlOAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuZ3Jvb3Z5CkBAIC0wLDAgKzEsMjIgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisgDQorZGVmIGRpdmlkZShuMSwgbjIpIHsNCisgICByZXR1cm4gbjEgLyBuMg0KK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuY29tcG9uZW50VHlwZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZGM1NzIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuY29tcG9uZW50VHlwZQpAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGNvbXBvbmVudFR5cGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisJeG1sbnM6d3NkbGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDYvMDEvd3NkbC1pbnN0YW5jZSIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorCisgIDxzZXJ2aWNlIG5hbWU9Ik11bHRpcGx5U2VydmljZSI+CisgICAgICAgIDxpbnRlcmZhY2UuamF2YSBpbnRlcmZhY2U9ImNhbGN1bGF0b3IuTXVsdGlwbHlTZXJ2aWNlIiAvPgorICA8L3NlcnZpY2U+CisKKzwvY29tcG9uZW50VHlwZT4gICAgICAgICAgICAgIAorICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5weSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2UwYjViCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLnB5CkBAIC0wLDAgKzEsMjAgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMNCisgDQorZGVmIG11bHRpcGx5KG4xLCBuMik6DQorICAgcmV0dXJuIG4xICogbjIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuY29tcG9uZW50VHlwZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzY4ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuY29tcG9uZW50VHlwZQpAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPGNvbXBvbmVudFR5cGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgCisJeG1sbnM6d3NkbGk9Imh0dHA6Ly93d3cudzMub3JnLzIwMDYvMDEvd3NkbC1pbnN0YW5jZSIKKwl4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorCXhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgorCisgIDxzZXJ2aWNlIG5hbWU9IlN1YnRyYWN0U2VydmljZSI+CisgICAgICAgIDxpbnRlcmZhY2UuamF2YSBpbnRlcmZhY2U9ImNhbGN1bGF0b3IuU3VidHJhY3RTZXJ2aWNlIiAvPgorICA8L3NlcnZpY2U+CisKKzwvY29tcG9uZW50VHlwZT4gICAgICAgICAgICAgIAorICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5yYiBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5yYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzJhMWQxCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNjcmlwdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLnJiCkBAIC0wLDAgKzEsMjEgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMNCisgDQorZGVmIHN1YnRyYWN0KG4xLCBuMikNCisgICAgcmV0dXJuIG4xIC0gbjINCitlbmQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQwZWUyYQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zY3JpcHQvcG9tLnhtbApAQCAtMCwwICsxLDQzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZS1pbXBsZW1lbnRhdGlvbi1zY3JpcHQ8L2FydGlmYWN0SWQ+DQorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgaW1wbGVtZW50YXRpb24uc2NyaXB0PC9uYW1lPg0KKw0KKyAgICA8cHJvZmlsZXM+DQorICAgICAgICA8cHJvZmlsZT4NCisgICAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+DQorICAgICAgICAgICAgPGFjdGl2YXRpb24+DQorICAgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0Pg0KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4NCisgICAgICAgICAgICA8bW9kdWxlcz4NCisgICAgICAgICAgICAgICAgPG1vZHVsZT5jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbjwvbW9kdWxlPg0KKyAgICAgICAgICAgIDwvbW9kdWxlcz4NCisgICAgICAgIDwvcHJvZmlsZT4NCisgICAgPC9wcm9maWxlcz4gICAgDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctY29udHJpYnV0aW9uL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YzM0YjYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9wb20ueG1sCkBAIC0wLDAgKzEsNjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKg0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICoNCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPnNhbXBsZS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctaGVsbG93b3JsZC1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgaW1wbGVtZW5hdGlvbi5zcHJpbmcgSGVsbG9Xb3JsZCBDb250cmlidXRpb248L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgICAgIDxwbHVnaW5zPg0KKw0KKyAgICAgICAgIDwhLS0gcGx1Z2luIHRvIHN1cHBvcnQgdXNpbmcgbXZuIHR1c2Nhbnk6cnVuIHRvIHJ1biB0aGlzIGNvbnRyaWJ1dGlvbiAtLT4NCisgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tdHVzY2FueS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tc3ByaW5nLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4NCisgICAgICAgICA8L3BsdWdpbj4NCisNCisgICAgICAgPC9wbHVnaW5zPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9EYXRlU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9zYW1wbGUvRGF0ZVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzUwZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9zYW1wbGUvRGF0ZVNlcnZpY2UuamF2YQpAQCAtMCwwICsxLDI5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHNhbXBsZTsKKworaW1wb3J0IGphdmEudXRpbC5EYXRlOworCisvKioKKyAqIAorICovCitwdWJsaWMgaW50ZXJmYWNlIERhdGVTZXJ2aWNlIHsKKyAgICBEYXRlIGdldERhdGUoKTsKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvc2FtcGxlL0RhdGVTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9zYW1wbGUvRGF0ZVNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRiZGQ4NgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvc2FtcGxlL0RhdGVTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugc2FtcGxlOworCitpbXBvcnQgamF2YS51dGlsLkRhdGU7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNlcnZpY2U7CisKKy8qKgorICogCisgKi8KK0BTZXJ2aWNlKERhdGVTZXJ2aWNlLmNsYXNzKQorcHVibGljIGNsYXNzIERhdGVTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIERhdGVTZXJ2aWNlIHsKKworICAgIHB1YmxpYyBEYXRlIGdldERhdGUoKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRGF0ZVNlcnZpY2VJbXBsLmdldERhdGUoKSIpOworICAgICAgICByZXR1cm4gbmV3IERhdGUoKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC1zY2FjbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9oZWxsb3dvcmxkLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEKY29weSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRDbGllbnRJbXBsLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkQ2xpZW50SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkY2IxZDkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkQ2xpZW50SW1wbC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCitwYWNrYWdlIHNhbXBsZTsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOworCitwdWJsaWMgY2xhc3MgSGVsbG93b3JsZENsaWVudEltcGwgaW1wbGVtZW50cyBIZWxsb3dvcmxkIHsKKyAgICBwcml2YXRlIEhlbGxvd29ybGQgaGVsbG93b3JsZDsKKworICAgIC8vIFNDQSByZWZlcmVuY2UKKyAgICBAUmVmZXJlbmNlKHJlcXVpcmVkID0gZmFsc2UpCisgICAgcHJpdmF0ZSBEYXRlU2VydmljZSBkYXRlU2VydmljZTsKKworICAgIHB1YmxpYyBIZWxsb3dvcmxkQ2xpZW50SW1wbCgpIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJIZWxsb3dvcmxkQ2xpZW50SW1wbCgpIik7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBzYXlIZWxsbyhTdHJpbmcgbmFtZSkgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvd29ybGRDbGllbnRJbXBsLnNheUhlbGxvKCIgKyBuYW1lICsgIikiKTsKKyAgICAgICAgaWYgKGRhdGVTZXJ2aWNlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiAiSGVsbG8gIiArIG5hbWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICJbIiArIGRhdGVTZXJ2aWNlLmdldERhdGUoKSArICJdICIgKyBoZWxsb3dvcmxkLnNheUhlbGxvKG5hbWUpOworICAgIH0KKworICAgIC8vIFNldHRlciBmb3Igc3ByaW5nIGluamVjdGlvbgorICAgIHB1YmxpYyB2b2lkIHNldEhlbGxvd29ybGQoSGVsbG93b3JsZCBoZWxsb3dvcmxkKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiSW5qZWN0ZWQgd2l0aCAiICsgaGVsbG93b3JsZCk7CisgICAgICAgIHRoaXMuaGVsbG93b3JsZCA9IGhlbGxvd29ybGQ7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjVjMzMzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZEltcGwuamF2YQpAQCAtMCwwICsxLDM0IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBzYW1wbGU7DQorDQorDQorcHVibGljIGNsYXNzIEhlbGxvd29ybGRJbXBsIGltcGxlbWVudHMgSGVsbG93b3JsZCB7DQorDQorICAgIHB1YmxpYyBIZWxsb3dvcmxkSW1wbCgpIHsNCisgICAgICAgIHN1cGVyKCk7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvd29ybGRJbXBsKCkiKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgU3RyaW5nIHNheUhlbGxvKFN0cmluZyBuYW1lKSB7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkhlbGxvd29ybGRJbXBsLnNheUhlbGxvKCIgKyBuYW1lICsgIikiKTsNCisgICAgICAgIHJldHVybiAiSGVsbG8gIiArIG5hbWU7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvaGVsbG93b3JsZC1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWNsaWVudC1jb250ZXh0LnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWNsaWVudC1jb250ZXh0LnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWU5NjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtY2xpZW50LWNvbnRleHQueG1sCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpzY2E9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvc2NhIgorICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iCisgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QKKyAgICAgICBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3NjYSBodHRwOi8vd3d3Lm9zb2Eub3JnL3htbG5zL3NjYS8xLjAvc3ByaW5nLXNjYS54c2QiPgorCisgICAgPGJlYW4gaWQ9IkhlbGxvd29ybGRDbGllbnRCZWFuIiBjbGFzcz0ic2FtcGxlLkhlbGxvd29ybGRDbGllbnRJbXBsIj4KKyAgICAgICAgPHByb3BlcnR5IG5hbWU9ImhlbGxvd29ybGQiPgorICAgICAgICAgICAgPHJlZiBiZWFuPSJIZWxsb3dvcmxkQmVhbiIvPgorICAgICAgICA8L3Byb3BlcnR5PgorICAgIDwvYmVhbj4KKyAgICAKKyAgICA8IS0tIAorICAgIDxzY2E6cmVmZXJlbmNlIG5hbWU9ImRhdGVTZXJ2aWNlIiB0eXBlPSJzYW1wbGUuRGF0ZVNlcnZpY2UiLz4KKyAgICAtLT4KKworPC9iZWFucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1jb250ZXh0LnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWNvbnRleHQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllY2QwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1jb250ZXh0LnhtbApAQCAtMCwwICsxLDMwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxiZWFucyB4bWxucz0iaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyINCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSINCisgICAgICAgeG1sbnM6c2NhPSJodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL3NjYSINCisgICAgICAgeHNpOnNjaGVtYUxvY2F0aW9uPSINCisgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QNCisgICAgICAgaHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9zY2EgaHR0cDovL3d3dy5vc29hLm9yZy94bWxucy9zY2EvMS4wL3NwcmluZy1zY2EueHNkIj4NCisNCisgICAgPGJlYW4gaWQ9IkhlbGxvd29ybGRCZWFuIiBjbGFzcz0ic2FtcGxlLkhlbGxvd29ybGRJbXBsIj4NCisgICAgPC9iZWFuPg0KKw0KKzwvYmVhbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMzU2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKQEAgLTAsMCArMSwzNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2FtcGxlIg0KKyAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCisgICAgICBuYW1lPSJoZWxsb3dvcmxkIj4NCisgICAgDQorICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG93b3JsZENsaWVudENvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uc3ByaW5nIGxvY2F0aW9uPSJoZWxsb3dvcmxkLWNsaWVudC1jb250ZXh0LnhtbCIvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG93b3JsZENsaWVudEJlYW4iPg0KKyAgICAgICAgICAgIDx0dXNjYW55OmJpbmRpbmcuanNvbnJwYy8+DQorICAgICAgICA8L3NlcnZpY2U+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImRhdGVTZXJ2aWNlIiB0YXJnZXQ9IkRhdGVTZXJ2aWNlQ29tcG9uZW50Ii8+DQorICAgIDwvY29tcG9uZW50Pg0KKyAgICANCisgICAgPGNvbXBvbmVudCBuYW1lPSJEYXRlU2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ic2FtcGxlLkRhdGVTZXJ2aWNlSW1wbCIvPg0KKyAgICA8L2NvbXBvbmVudD4NCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtc3ByaW5nL3NyYy90ZXN0L2phdmEvc2FtcGxlL0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL3Rlc3QvamF2YS9zYW1wbGUvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtc3ByaW5nL3NyYy90ZXN0L2phdmEvc2FtcGxlL0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhCmNvcHkgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb24vc3JjL3Rlc3QvamF2YS9zYW1wbGUvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctd2ViYXBwL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLXdlYmFwcC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlYzQ5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLXdlYmFwcC9wb20ueG1sCkBAIC0wLDAgKzEsMTg1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnNhbXBsZS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctaGVsbG93b3JsZC13ZWJhcHA8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBpbXBsZW1lbnRhdGlvbi5zcHJpbmcgSGVsbG93b3JsZCBXZWJBcHA8L25hbWU+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctd2ViYXBwPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qc29ucnBjLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNhbXBsZS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctaGVsbG93b3JsZC1jb250cmlidXRpb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5odHRwdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0dHB1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS42LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPGZpbmFsTmFtZT5oZWxsb3dvcmxkLXNwcmluZzwvZmluYWxOYW1lPgorICAgICAgICA8cGx1Z2lucz4KKworICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8IS0tIFNraXAgdGhlIG5vcm1hbCB0ZXN0cywgd2UnbGwgcnVuIHRoZW0gaW4gdGhlIGludGVncmF0aW9uLXRlc3QgcGhhc2UgLS0+CisgICAgICAgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorCisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+aW50ZWdyYXRpb24tdGVzdDwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+dGVzdDwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEluZ29yZSB0aGUgdGVzdCBmYWlsdXJlcyBzbyB0aGF0IHRoZSBidWlsZCB3aWxsIHByb2NlZWQgdG8gc3RvcCB0aGUgdG9tY2F0IHNlcnZlciAtLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGVzdEZhaWx1cmVJZ25vcmU+dHJ1ZTwvdGVzdEZhaWx1cmVJZ25vcmU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+ZmFsc2U8L3NraXA+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorCisgICAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi13YXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8b3ZlcmxheXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8b3ZlcmxheT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNhbXBsZS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctaGVsbG93b3JsZC1jb250cmlidXRpb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR5cGU+amFyPC90eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YXJnZXRQYXRoPldFQi1JTkYvY2xhc3NlczwvdGFyZ2V0UGF0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPk1FVEEtSU5GLyoqLyo8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3ZlcmxheT4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgPG92ZXJsYXk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaW1wbGVtZW50YXRpb24tc3ByaW5nLWhlbGxvd29ybGQtY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0eXBlPmphcjwvdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPk1FVEEtSU5GLyoqLyo8L2luY2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvb3ZlcmxheT4KKworICAgICAgICAgICAgICAgICAgICAgICAgPG92ZXJsYXk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXNwcmluZy13ZWJhcHA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHR5cGU+amFyPC90eXBlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YXJnZXRQYXRoPldFQi1JTkYvY2xhc3NlczwvdGFyZ2V0UGF0aD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy9hcGFjaGUvdHVzY2FueS9zY2EvaW1wbGVtZW50YXRpb24vc3ByaW5nL3dlYmFwcC9zcHJpbmctd2ViYXBwLWNvbnRleHQueG1sPC9pbmNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L292ZXJsYXk+CisgICAgICAgICAgICAgICAgICAgIDwvb3ZlcmxheXM+ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisKKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamV0dHktcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xODwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGNvbnRleHRQYXRoPmhlbGxvd29ybGQ8L2NvbnRleHRQYXRoPgorICAgICAgICAgICAgICAgICAgICA8c3RvcEtleT5mb288L3N0b3BLZXk+CisgICAgICAgICAgICAgICAgICAgIDxzdG9wUG9ydD45OTk5PC9zdG9wUG9ydD4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+c3RhcnQtamV0dHk8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByZS1pbnRlZ3JhdGlvbi10ZXN0PC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG92ZXJyaWRlV2ViWG1sPnNyYy90ZXN0L3Jlc291cmNlcy90ZXN0LXdlYi54bWw8L292ZXJyaWRlV2ViWG1sPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3ZWJBcHBTb3VyY2VEaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vJHtwcm9qZWN0LmJ1aWxkLmZpbmFsTmFtZX08L3dlYkFwcFNvdXJjZURpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d2ViWG1sPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9LyR7cHJvamVjdC5idWlsZC5maW5hbE5hbWV9L1dFQi1JTkYvd2ViLnhtbDwvd2ViWG1sPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGFzc2VzRGlyZWN0b3J5PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9LyR7cHJvamVjdC5idWlsZC5maW5hbE5hbWV9L1dFQi1JTkYvY2xhc3NlczwvY2xhc3Nlc0RpcmVjdG9yeT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNjYW5JbnRlcnZhbFNlY29uZHM+MDwvc2NhbkludGVydmFsU2Vjb25kcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGFlbW9uPnRydWU8L2RhZW1vbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9ycz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbj0ib3JnLm1vcnRiYXkuamV0dHkubmlvLlNlbGVjdENoYW5uZWxDb25uZWN0b3IiPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvcnQ+ODA4NTwvcG9ydD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3I+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5zdG9wLWpldHR5PC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wb3N0LWludGVncmF0aW9uLXRlc3Q8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnN0b3A8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPC9wbHVnaW5zPgorICAgIDwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctd2ViYXBwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NTkwZTAKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLXdlYmFwcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCkBAIC0wLDAgKzEsNTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8d2ViLWFwcCB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIgorICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+CisKKyAgICA8ZGlzcGxheS1uYW1lPkFwYWNoZSBUdXNjYW55IEhlbGxvd29ybGQgU3ByaW5nIFNhbXBsZTwvZGlzcGxheS1uYW1lPgorCisgICAgPGNvbnRleHQtcGFyYW0+CisgICAgICAgIDxwYXJhbS1uYW1lPmNvbnRleHRDb25maWdMb2NhdGlvbjwvcGFyYW0tbmFtZT4KKyAgICAgICAgPHBhcmFtLXZhbHVlPgorICAgICAgICAvV0VCLUlORi9jbGFzc2VzL2hlbGxvd29ybGQtY29udGV4dC54bWwKKyAgICAgICAgL1dFQi1JTkYvY2xhc3Nlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2ltcGxlbWVudGF0aW9uL3NwcmluZy93ZWJhcHAvc3ByaW5nLXdlYmFwcC1jb250ZXh0LnhtbAorICAgICAgICA8L3BhcmFtLXZhbHVlPgorICAgIDwvY29udGV4dC1wYXJhbT4KKworICAgIDxsaXN0ZW5lcj4KKyAgICAgICAgPGxpc3RlbmVyLWNsYXNzPm9yZy5zcHJpbmdmcmFtZXdvcmsud2ViLmNvbnRleHQuQ29udGV4dExvYWRlckxpc3RlbmVyPC9saXN0ZW5lci1jbGFzcz4KKyAgICA8L2xpc3RlbmVyPgorICAgIAorICAgIDxsaXN0ZW5lcj4KKyAgICAgICAgPGxpc3RlbmVyLWNsYXNzPm9yZy5hcGFjaGUudHVzY2FueS5zY2EuaG9zdC53ZWJhcHAuVHVzY2FueUNvbnRleHRMaXN0ZW5lcjwvbGlzdGVuZXItY2xhc3M+CisgICAgPC9saXN0ZW5lcj4KKworICAgIDxmaWx0ZXI+CisgICAgICAgIDxmaWx0ZXItbmFtZT50dXNjYW55PC9maWx0ZXItbmFtZT4KKyAgICAgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qud2ViYXBwLlR1c2NhbnlTZXJ2bGV0RmlsdGVyPC9maWx0ZXItY2xhc3M+CisgICAgPC9maWx0ZXI+CisKKyAgICA8ZmlsdGVyLW1hcHBpbmc+CisgICAgICAgIDxmaWx0ZXItbmFtZT50dXNjYW55PC9maWx0ZXItbmFtZT4KKyAgICAgICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4KKyAgICA8L2ZpbHRlci1tYXBwaW5nPgorCis8L3dlYi1hcHA+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLXdlYmFwcC9zcmMvdGVzdC9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkQ2xpZW50VGVzdENhc2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvaGVsbG93b3JsZC1zcHJpbmctd2ViYXBwL3NyYy90ZXN0L2phdmEvc2FtcGxlL0hlbGxvd29ybGRDbGllbnRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNzdmMDgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLXdlYmFwcC9zcmMvdGVzdC9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkQ2xpZW50VGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDU4IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHNhbXBsZTsKKworaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0OworCitpbXBvcnQgb3JnLmpzb24uSlNPTk9iamVjdDsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGNvbS5tZXRlcndhcmUuaHR0cHVuaXQuUG9zdE1ldGhvZFdlYlJlcXVlc3Q7CitpbXBvcnQgY29tLm1ldGVyd2FyZS5odHRwdW5pdC5XZWJDb252ZXJzYXRpb247CitpbXBvcnQgY29tLm1ldGVyd2FyZS5odHRwdW5pdC5XZWJSZXF1ZXN0OworaW1wb3J0IGNvbS5tZXRlcndhcmUuaHR0cHVuaXQuV2ViUmVzcG9uc2U7CisKKworLyoqCisgKiAKKyAqLworcHVibGljIGNsYXNzIEhlbGxvd29ybGRDbGllbnRUZXN0Q2FzZSB7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNFUlZJQ0VfVVJMID0KKyAgICAgICAgImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9oZWxsb3dvcmxkL0hlbGxvd29ybGRDbGllbnRDb21wb25lbnQvSGVsbG93b3JsZENsaWVudEJlYW4iOworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0SlNPTlJQQ0JpbmRpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgSlNPTk9iamVjdCBqc29uUmVxdWVzdCA9IG5ldyBKU09OT2JqZWN0KCJ7IFwibWV0aG9kXCI6IFwic2F5SGVsbG9cIiwgXCJwYXJhbXNcIjogW1wiUmF5XCJdLCBcImlkXCI6IDF9Iik7CisKKyAgICAgICAgV2ViQ29udmVyc2F0aW9uIHdjID0gbmV3IFdlYkNvbnZlcnNhdGlvbigpOworICAgICAgICBXZWJSZXF1ZXN0IHJlcXVlc3QgPQorICAgICAgICAgICAgbmV3IFBvc3RNZXRob2RXZWJSZXF1ZXN0KFNFUlZJQ0VfVVJMLCBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oanNvblJlcXVlc3QudG9TdHJpbmcoKS5nZXRCeXRlcygiVVRGLTgiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uL2pzb24iKTsKKyAgICAgICAgV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSB3Yy5nZXRSZXNvdXJjZShyZXF1ZXN0KTsKKworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0UmVzcG9uc2VDb2RlKCkpOworCisgICAgICAgIEpTT05PYmplY3QganNvblJlc3AgPSBuZXcgSlNPTk9iamVjdChyZXNwb25zZS5nZXRUZXh0KCkpOworICAgICAgICBTdHJpbmcgdGV4dCA9IGpzb25SZXNwLmdldFN0cmluZygicmVzdWx0Iik7CisgICAgICAgIEFzc2VydC5hc3NlcnRUcnVlKHRleHQuZW5kc1dpdGgoIkhlbGxvIFJheSIpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL2hlbGxvd29ybGQtc3ByaW5nLXdlYmFwcC9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdC13ZWIueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy13ZWJhcHAvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3Qtd2ViLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWQyZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXNwcmluZy9oZWxsb3dvcmxkLXNwcmluZy13ZWJhcHAvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3Qtd2ViLnhtbApAQCAtMCwwICsxLDI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKy0tPg0KKzx3ZWItYXBwIHZlcnNpb249IjIuNCINCisgICAgICAgICB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSINCisgICAgICAgICB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KKyAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIgPg0KKw0KKzwvd2ViLWFwcD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc3ByaW5nL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwOTgwNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvcG9tLnhtbApAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXMtaW1wbGVtZW10YXRpb24tc3ByaW5nPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIEltcGxlbWVudGF0aW9uIFNwcmluZyBTYW1wbGVzPC9uYW1lPgorCisgICAgPHByb2ZpbGVzPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPgorICAgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgorICAgICAgICAgICAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5oZWxsb3dvcmxkLXNwcmluZy1jb250cmlidXRpb248L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmhlbGxvd29ybGQtc3ByaW5nLXdlYmFwcDwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4gICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qYXhycy9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtamF4cnMvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qYXhycy9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qYXhycy9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qYXhycy9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpheHJzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjllNjY5NAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qYXhycy9wb20ueG1sCkBAIC0wLDAgKzEsMTE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaW1wbGVtZW50YXRpb24td2ViLWhlbGxvd29ybGQtamF4cnMtd2ViYXBwPC9hcnRpZmFjdElkPg0KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIGltcGxlbWVuYXRpb24ud2ViIEhlbGxvd29ybGQgSkFYLVJTIFdlYkFwcDwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisNCisgICAgICAgIDwhLS0gVHVzY2FueSBkZXBlbmRlbmN5IC0tPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1ub2RlcDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8IS0tIFdpbmsgZGVwZW5kZW5jeSBmb3IgSkFYLVJTIHN1cHBvcnQgLS0+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndpbms8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+d2luay1jb21tb248L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+MS4xLjEtaW5jdWJhdGluZzwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUud2luazwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD53aW5rLXNlcnZlcjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4xLjEuMS1pbmN1YmF0aW5nPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4xLjYuMDwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5odG1sdW5pdDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjY8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPmhlbGxvd29ybGQtamF4cnM8L2ZpbmFsTmFtZT4NCisgICAgICAgPHBsdWdpbnM+DQorICAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KKyAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xODwvdmVyc2lvbj4NCisgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgIDxjb250ZXh0UGF0aD5oZWxsb3dvcmxkLWpheHJzPC9jb250ZXh0UGF0aD4NCisgICAgICAgICAgICAgICAgPHN0b3BLZXk+Zm9vPC9zdG9wS2V5Pg0KKyAgICAgICAgICAgICAgICA8c3RvcFBvcnQ+OTk5OTwvc3RvcFBvcnQ+DQorICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQorICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQorICAgICAgICAgICAgICAgICAgIDxpZD5zdGFydC1qZXR0eTwvaWQ+DQorICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLXRlc3QtY2xhc3NlczwvcGhhc2U+DQorICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnJ1bjwvZ29hbD4NCisgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICA8c2NhbkludGVydmFsU2Vjb25kcz4wPC9zY2FuSW50ZXJ2YWxTZWNvbmRzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgPGRhZW1vbj50cnVlPC9kYWVtb24+DQorICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9ycz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3IgaW1wbGVtZW50YXRpb249Im9yZy5tb3J0YmF5LmpldHR5Lm5pby5TZWxlY3RDaGFubmVsQ29ubmVjdG9yIj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb3J0PjgwODU8L3BvcnQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3Rvcj4NCisgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9ycz4NCisgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgPGlkPnN0b3AtamV0dHk8L2lkPg0KKyAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJlcGFyZS1wYWNrYWdlPC9waGFzZT4NCisgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c3RvcDwvZ29hbD4NCisgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICAgICAgPC9wbHVnaW4+DQorICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCisNCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZFJlc291cmNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZFJlc291cmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpheHJzL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGRSZXNvdXJjZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZFJlc291cmNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpheHJzL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpheHJzL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpheHJzL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpheHJzL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qYXhycy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpheHJzL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qYXhycy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9hcHBsaWNhdGlvbiBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qYXhycy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9hcHBsaWNhdGlvbgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvYXBwbGljYXRpb24KcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qYXhycy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9hcHBsaWNhdGlvbgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qYXhycy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qYXhycy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qYXhycy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qYXhycy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtamF4cnMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpheHJzL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtamF4cnMvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDE5N2NkCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpheHJzL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw0MyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgaXRlc3Q7DQorDQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCisNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5uZXQuTWFsZm9ybWVkVVJMRXhjZXB0aW9uOw0KKw0KK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsNCisNCitpbXBvcnQgY29tLmdhcmdveWxlc29mdHdhcmUuaHRtbHVuaXQuRmFpbGluZ0h0dHBTdGF0dXNDb2RlRXhjZXB0aW9uOw0KK2ltcG9ydCBjb20uZ2FyZ295bGVzb2Z0d2FyZS5odG1sdW5pdC5UZXh0UGFnZTsNCitpbXBvcnQgY29tLmdhcmdveWxlc29mdHdhcmUuaHRtbHVuaXQuV2ViQ2xpZW50Ow0KKw0KKy8qKg0KKyAqLw0KK3B1YmxpYyBjbGFzcyBIZWxsb3dvcmxkVGVzdENhc2Ugew0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QSgpIHRocm93cyBGYWlsaW5nSHR0cFN0YXR1c0NvZGVFeGNlcHRpb24sIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gew0KKyAgICAgICAgVGV4dFBhZ2UgcGFnZSA9IChUZXh0UGFnZSluZXcgV2ViQ2xpZW50KCkuZ2V0UGFnZSgiaHR0cDovL2xvY2FsaG9zdDo4MDg1L2hlbGxvd29ybGQtamF4cnMvcmVzdC93b3JsZCIpOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJIZWxsbyBXb3JsZCIsIHBhZ2UuZ2V0Q29udGVudCgpKTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qcy1jbGllbnQvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzLWNsaWVudC9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzLWNsaWVudC9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qcy1jbGllbnQvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanMtY2xpZW50L3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanMtY2xpZW50L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWEyNDExNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qcy1jbGllbnQvcG9tLnhtbApAQCAtMCwwICsxLDEwNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWltcGxlbWVudGF0aW9uLXdlYi1oZWxsb3dvcmxkLWpzLWNsaWVudC13ZWJhcHA8L2FydGlmYWN0SWQ+DQorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgaW1wbGVtZW5hdGlvbi53ZWIgSGVsbG93b3JsZCBKYXZhc2NyaXB0IENsaWVudCBXZWJBcHA8L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZy1qc29uPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5odG1sdW5pdDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjY8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPmhlbGxvd29ybGQtanMtY2xpZW50PC9maW5hbE5hbWU+DQorICAgICAgIDxwbHVnaW5zPg0KKyAgICAgICAgICA8cGx1Z2luPg0KKyAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamV0dHktcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICA8dmVyc2lvbj42LjEuMTg8L3ZlcnNpb24+DQorICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8Y29udGV4dFBhdGg+aGVsbG93b3JsZC1qcy1jbGllbnQ8L2NvbnRleHRQYXRoPg0KKyAgICAgICAgICAgICAgICA8c3RvcEtleT5mb288L3N0b3BLZXk+DQorICAgICAgICAgICAgICAgIDxzdG9wUG9ydD45OTk5PC9zdG9wUG9ydD4NCisgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgPGlkPnN0YXJ0LWpldHR5PC9pZD4NCisgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtdGVzdC1jbGFzc2VzPC9waGFzZT4NCisgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KKyAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgIDxzY2FuSW50ZXJ2YWxTZWNvbmRzPjA8L3NjYW5JbnRlcnZhbFNlY29uZHM+DQorICAgICAgICAgICAgICAgICAgICAgICA8ZGFlbW9uPnRydWU8L2RhZW1vbj4NCisgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3JzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbj0ib3JnLm1vcnRiYXkuamV0dHkubmlvLlNlbGVjdENoYW5uZWxDb25uZWN0b3IiPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvcnQ+ODA4NTwvcG9ydD4NCisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9yPg0KKyAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3JzPg0KKyAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICAgICA8aWQ+c3RvcC1qZXR0eTwvaWQ+DQorICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcmVwYXJlLXBhY2thZ2U8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zdG9wPC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KKyAgICAgICAgICA8L3BsdWdpbj4NCisgICAgICAgPC9wbHVnaW5zPg0KKyAgICA8L2J1aWxkPg0KKw0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qcy1jbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qcy1jbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qcy1jbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzLWNsaWVudC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qcy1jbGllbnQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qcy1jbGllbnQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qcy1jbGllbnQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzLWNsaWVudC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzLWNsaWVudC9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uaHRtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qcy1jbGllbnQvc3JjL21haW4vd2ViYXBwL2hlbGxvLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzLWNsaWVudC9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uaHRtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzLWNsaWVudC9zcmMvbWFpbi93ZWJhcHAvaGVsbG8uaHRtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzLWNsaWVudC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzLWNsaWVudC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNDE5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw3NyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgaXRlc3Q7DQorDQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7DQorDQoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7DQoraW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtV3JpdGVyOw0KK2ltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247DQoraW1wb3J0IGphdmEubmV0LlVSTDsNCitpbXBvcnQgamF2YS5uZXQuVVJMQ29ubmVjdGlvbjsNCitpbXBvcnQgamF2YS5uZXQuVVJMRW5jb2RlcjsNCisNCitpbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQorDQorLyoqDQorICogVmVyZml5IHRoZSBzZXJ2ZXJzaWRlIGNvZGUgaXMgd29ya2luZywgbm90IHN1cmUgaG93IHRvIGVhc2lseSBpdGVzdCB0aGUgYnJvd3NlciBqYXZhc2NyaXB0IGNvZGUgDQorICovDQorQElnbm9yZSgiVFVTQ0FOWS0zNjg4IikNCitwdWJsaWMgY2xhc3MgSGVsbG93b3JsZFRlc3RDYXNlIHsNCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdEEoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQorICAgICAgICANCisgICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvaGVsbG93b3JsZC1qcy1jbGllbnQvb3JnLm9hc2lzb3Blbi5zY2EuY29tcG9uZW50Q29udGV4dC5qcy9mb28vY2FsbC9wbGFpbmNhbGwvc2VydmljZS5zYXlIZWxsby5kd3IiKTsNCisgICAgICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOw0KKyAgICAgICAgY29ubi5zZXREb091dHB1dCh0cnVlKTsNCisgICAgICAgIE91dHB1dFN0cmVhbVdyaXRlciB3ciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoY29ubi5nZXRPdXRwdXRTdHJlYW0oKSk7DQorDQorICAgICAgICAvLyB0byBmaW5kIHRoaXMgcnVuIHRoZSBzYW1wbGUgdGhyb3VnaCBUQ1BNT04gdG8gY2FwdHVyZSB0aGUgbWVzc2FnZXMgICAgICAgIA0KKyAgICAgICAgDQorICAgICAgICBTdHJpbmcgZGF0YSA9IFVSTEVuY29kZXIuZW5jb2RlKCJjYWxsQ291bnQiLCAiVVRGLTgiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKCIxIiwgIlVURi04Iik7DQorICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJwYWdlIiwgIlVURi04IikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZSgiL2hlbGxvd29ybGQtanMtY2xpZW50LyIsICJVVEYtOCIpOyAgICAgICANCisgICAgICAgIGRhdGEgKz0gIiYiICsgVVJMRW5jb2Rlci5lbmNvZGUoImh0dHBTZXNzaW9uSWQiLCAiVVRGLTgiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKCIiLCAiVVRGLTgiKTsgICAgICAgDQorICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJzY3JpcHRTZXNzaW9uSWQiLCAiVVRGLTgiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKCJBMDIzREE2NjRFNTZGMDc1NDkxQkUxQjg3QjM3QjAyNjcxIiwgIlVURi04Iik7ICAgICAgIA0KKyAgICAgICAgZGF0YSArPSAiJiIgKyBVUkxFbmNvZGVyLmVuY29kZSgiYzAtc2NyaXB0TmFtZSIsICJVVEYtOCIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUoInNlcnZpY2UiLCAiVVRGLTgiKTsgICAgICAgDQorICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJjMC1tZXRob2ROYW1lIiwgIlVURi04IikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZSgic2F5SGVsbG8iLCAiVVRGLTgiKTsgICAgICAgDQorICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJjMC1pZCIsICJVVEYtOCIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUoIjAiLCAiVVRGLTgiKTsgICAgICAgDQorICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJjMC1wYXJhbTAiLCAiVVRGLTgiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKCJzdHJpbmc6cGV0cmEiLCAiVVRGLTgiKTsgICAgICAgDQorICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJiYXRjaElkIiwgIlVURi04IikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZSgiMCIsICJVVEYtOCIpOyAgICAgICANCisgICAgICAgIA0KKyAgICAgICAgd3Iud3JpdGUoZGF0YSk7DQorICAgICAgICB3ci5mbHVzaCgpOw0KKyAgICAgICAgDQorICAgICAgICBCdWZmZXJlZFJlYWRlciByZCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubi5nZXRJbnB1dFN0cmVhbSgpKSk7DQorICAgICAgICByZC5yZWFkTGluZSgpOyAvLyB0aHJvdyAnYWxsb3dTY3JpcHRUYWdSZW1vdGluZyBpcyBmYWxzZS4nOw0KKyAgICAgICAgcmQucmVhZExpbmUoKTsgLy8jRFdSLUlOU0VSVA0KKyAgICAgICAgcmQucmVhZExpbmUoKTsgLy8jRFdSLVJFUExZDQorICAgICAgICBTdHJpbmcgbGluZSA9IHJkLnJlYWRMaW5lKCk7IC8vIGR3ci5lbmdpbmUuX3JlbW90ZUhhbmRsZUNhbGxiYWNrKCcwJywnMCcsIkhlbGxvIHBldHJhIik7DQorICAgICAgICB3ci5jbG9zZSgpOw0KKyAgICAgICAgcmQuY2xvc2UoKTsNCisgICAgICAgIA0KKyAgICAgICAgYXNzZXJ0VHJ1ZShsaW5lLmVuZHNXaXRoKCJcIkhlbGxvIHBldHJhXCIpOyIpKTsNCisNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNmL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNmL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE0MWY4MgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc2YvcG9tLnhtbApAQCAtMCwwICsxLDk5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnNhbXBsZS1pbXBsZW1lbnRhdGlvbi13ZWItaGVsbG93b3JsZC1qc2Ytd2ViYXBwPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgaW1wbGVtZW5hdGlvbi53ZWIgSGVsbG93b3JsZCBKU0YgV2ViQXBwPC9uYW1lPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT5jb21waWxlPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24td2ViLXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW15ZmFjZXM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgIDwvZGVwZW5kZW5jaWVzPgorCisgICAgPGJ1aWxkPgorICAgICAgIDxmaW5hbE5hbWU+aGVsbG93b3JsZC1qc2Y8L2ZpbmFsTmFtZT4KKyAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPgorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWpldHR5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICA8dmVyc2lvbj42LjEuMTg8L3ZlcnNpb24+CisgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPGNvbnRleHRQYXRoPmhlbGxvd29ybGQtanNmPC9jb250ZXh0UGF0aD4KKyAgICAgICAgICAgICAgICA8c3RvcEtleT5mb288L3N0b3BLZXk+CisgICAgICAgICAgICAgICAgPHN0b3BQb3J0Pjk5OTk8L3N0b3BQb3J0PgorICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgIDxpZD5zdGFydC1qZXR0eTwvaWQ+CisgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtdGVzdC1jbGFzc2VzPC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnJ1bjwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICA8c2NhbkludGVydmFsU2Vjb25kcz4wPC9zY2FuSW50ZXJ2YWxTZWNvbmRzPgorICAgICAgICAgICAgICAgICAgICAgICA8ZGFlbW9uPnRydWU8L2RhZW1vbj4KKyAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvcnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3IgaW1wbGVtZW50YXRpb249Im9yZy5tb3J0YmF5LmpldHR5Lm5pby5TZWxlY3RDaGFubmVsQ29ubmVjdG9yIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvcnQ+ODA4NTwvcG9ydD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3I+CisgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9ycz4KKyAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICA8aWQ+c3RvcC1qZXR0eTwvaWQ+CisgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByZXBhcmUtcGFja2FnZTwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zdG9wPC9nb2FsPgorICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZENvbnRyb2xsZXIuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZENvbnRyb2xsZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvV29ybGRDb250cm9sbGVyLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG9Xb3JsZENvbnRyb2xsZXIuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2ZhY2VzLWNvbmZpZy54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2ZhY2VzLWNvbmZpZy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9mYWNlcy1jb25maWcueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2ZhY2VzLWNvbmZpZy54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL3dlYmFwcC9oZWxsb1dvcmxkLmpzcCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vd2ViYXBwL2hlbGxvV29ybGQuanNwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vd2ViYXBwL2hlbGxvV29ybGQuanNwCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL3dlYmFwcC9oZWxsb1dvcmxkLmpzcApkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi93ZWJhcHAvaW5kZXguanNwCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNmL3NyYy9tYWluL3dlYmFwcC9pbmRleC5qc3AKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi93ZWJhcHAvcGFnZTIuanNwIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi93ZWJhcHAvcGFnZTIuanNwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc2Yvc3JjL21haW4vd2ViYXBwL3BhZ2UyLmpzcApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzZi9zcmMvbWFpbi93ZWJhcHAvcGFnZTIuanNwCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc3AvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzcC9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzcC9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc3AvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNwL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNwL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIzMjc4MgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc3AvcG9tLnhtbApAQCAtMCwwICsxLDk4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnNhbXBsZS1pbXBsZW1lbnRhdGlvbi13ZWItaGVsbG93b3JsZC1qc3Atd2ViYXBwPC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBpbXBsZW1lbmF0aW9uLXdlYiBIZWxsb3dvcmxkIEpTUCBXZWJBcHA8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5odG1sdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0bWx1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi42PC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICA8ZmluYWxOYW1lPmhlbGxvd29ybGQtanNwPC9maW5hbE5hbWU+CisgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgPHZlcnNpb24+Ni4xLjE4PC92ZXJzaW9uPgorICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDxjb250ZXh0UGF0aD5oZWxsb3dvcmxkLWpzcDwvY29udGV4dFBhdGg+CisgICAgICAgICAgICAgICAgPHN0b3BLZXk+Zm9vPC9zdG9wS2V5PgorICAgICAgICAgICAgICAgIDxzdG9wUG9ydD45OTk5PC9zdG9wUG9ydD4KKyAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICA8aWQ+c3RhcnQtamV0dHk8L2lkPgorICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLXRlc3QtY2xhc3NlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+CisgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgPHNjYW5JbnRlcnZhbFNlY29uZHM+MDwvc2NhbkludGVydmFsU2Vjb25kcz4KKyAgICAgICAgICAgICAgICAgICAgICAgPGRhZW1vbj50cnVlPC9kYWVtb24+CisgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9yIGltcGxlbWVudGF0aW9uPSJvcmcubW9ydGJheS5qZXR0eS5uaW8uU2VsZWN0Q2hhbm5lbENvbm5lY3RvciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb3J0PjgwODU8L3BvcnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9yPgorICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3RvcnM+CisgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgPGlkPnN0b3AtamV0dHk8L2lkPgorICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcmVwYXJlLXBhY2thZ2U8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c3RvcDwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNwL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNwL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzcC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNwL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzcC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc3Avc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzcC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzcC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNwL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc3Avc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLWpzcC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc3Avc3JjL21haW4vd2ViYXBwL2hlbGxvLmpzcCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc3Avc3JjL21haW4vd2ViYXBwL2hlbGxvLmpzcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNwL3NyYy9tYWluL3dlYmFwcC9oZWxsby5qc3AKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1qc3Avc3JjL21haW4vd2ViYXBwL2hlbGxvLmpzcApkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNwL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNwL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzcC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtanNwL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXNlcnZsZXQvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXNlcnZsZXQvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zZXJ2bGV0L1JFQURNRQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXNlcnZsZXQvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc2VydmxldC9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXNlcnZsZXQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDFmZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXNlcnZsZXQvcG9tLnhtbApAQCAtMCwwICsxLDEwNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaW1wbGVtZW50YXRpb24td2ViLWhlbGxvd29ybGQtc2VydmxldC13ZWJhcHA8L2FydGlmYWN0SWQ+CisgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIGltcGxlbWVudGF0aW9uLndlYiBIZWxsb3dvcmxkIFNlcnZsZXQgV2ViQXBwPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1ub2RlcDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguc2VydmxldDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZsZXQtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi41PC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5uZXQuc291cmNlZm9yZ2UuaHRtbHVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuNjwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgPGZpbmFsTmFtZT5oZWxsb3dvcmxkLXNlcnZsZXQ8L2ZpbmFsTmFtZT4KKyAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPgorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWpldHR5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICA8dmVyc2lvbj42LjEuMTg8L3ZlcnNpb24+CisgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPGNvbnRleHRQYXRoPmhlbGxvd29ybGQtc2VydmxldDwvY29udGV4dFBhdGg+CisgICAgICAgICAgICAgICAgPHN0b3BLZXk+Zm9vPC9zdG9wS2V5PgorICAgICAgICAgICAgICAgIDxzdG9wUG9ydD45OTk5PC9zdG9wUG9ydD4KKyAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICA8aWQ+c3RhcnQtamV0dHk8L2lkPgorICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLXRlc3QtY2xhc3NlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+CisgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgPHNjYW5JbnRlcnZhbFNlY29uZHM+MDwvc2NhbkludGVydmFsU2Vjb25kcz4KKyAgICAgICAgICAgICAgICAgICAgICAgPGRhZW1vbj50cnVlPC9kYWVtb24+CisgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9yIGltcGxlbWVudGF0aW9uPSJvcmcubW9ydGJheS5qZXR0eS5uaW8uU2VsZWN0Q2hhbm5lbENvbm5lY3RvciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb3J0PjgwODU8L3BvcnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9yPgorICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3RvcnM+CisgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgPGlkPnN0b3AtamV0dHk8L2lkPgorICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcmVwYXJlLXBhY2thZ2U8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c3RvcDwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXNlcnZsZXQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2bGV0LmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc2VydmxldC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmxldC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2bGV0LmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2bGV0LmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXNlcnZsZXQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXNlcnZsZXQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXNlcnZsZXQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc2VydmxldC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXNlcnZsZXQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc2VydmxldC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc2VydmxldC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy9tYWluL3dlYmFwcC9oZWxsby5odG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXNlcnZsZXQvc3JjL21haW4vd2ViYXBwL2hlbGxvLmh0bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXNlcnZsZXQvc3JjL21haW4vd2ViYXBwL2hlbGxvLmh0bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy9tYWluL3dlYmFwcC9oZWxsby5odG1sCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc2VydmxldC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zZXJ2bGV0L3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MGEwYmMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9wb20ueG1sCkBAIC0wLDAgKzEsMTE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPnNhbXBsZS1pbXBsZW1lbnRhdGlvbi13ZWItaGVsbG93b3JsZC1zdHJpcGVzLXdlYmFwcDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgaW1wbGVtZW50YXRpb24ud2ViIEhlbGxvd29ybGQgU3RyaXBlcyBXZWJBcHA8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorCisgICAgICAgIDwhLS0gIFR1c2NhbnkgZGVwZW5kZW5jaWVzIC0tPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc3RyaXBlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDwhLS0gIFN0cmlwZXMgRnJhbWV3b3JrIGRlcGVuZGVuY2llcyAtLT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5uZXQuc291cmNlZm9yZ2Uuc3RyaXBlczwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0cmlwZXM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjUuMjwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCQkKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD50YWdsaWJzPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RhbmRhcmQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4xLjEuMjwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5uZXQuc291cmNlZm9yZ2UuaHRtbHVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuNjwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgPGZpbmFsTmFtZT5oZWxsb3dvcmxkLXN0cmlwZXM8L2ZpbmFsTmFtZT4KKyAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICA8cGx1Z2luPgorICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPgorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWpldHR5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICA8dmVyc2lvbj42LjEuMTg8L3ZlcnNpb24+CisgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPGNvbnRleHRQYXRoPmhlbGxvd29ybGQtc3RyaXBlczwvY29udGV4dFBhdGg+CisgICAgICAgICAgICAgICAgPHN0b3BLZXk+Zm9vPC9zdG9wS2V5PgorICAgICAgICAgICAgICAgIDxzdG9wUG9ydD45OTk5PC9zdG9wUG9ydD4KKyAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICA8aWQ+c3RhcnQtamV0dHk8L2lkPgorICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLXRlc3QtY2xhc3NlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+CisgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgPHNjYW5JbnRlcnZhbFNlY29uZHM+MDwvc2NhbkludGVydmFsU2Vjb25kcz4KKyAgICAgICAgICAgICAgICAgICAgICAgPGRhZW1vbj50cnVlPC9kYWVtb24+CisgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3JzPgorICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9yIGltcGxlbWVudGF0aW9uPSJvcmcubW9ydGJheS5qZXR0eS5uaW8uU2VsZWN0Q2hhbm5lbENvbm5lY3RvciI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb3J0PjgwODU8L3BvcnQ+CisgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9yPgorICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3RvcnM+CisgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgPGlkPnN0b3AtamV0dHk8L2lkPgorICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcmVwYXJlLXBhY2thZ2U8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c3RvcDwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9qYXZhL215c3RyaXBlcy9hY3Rpb24vQmFzZUFjdGlvbkJlYW4uamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL2phdmEvbXlzdHJpcGVzL2FjdGlvbi9CYXNlQWN0aW9uQmVhbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL2phdmEvbXlzdHJpcGVzL2FjdGlvbi9CYXNlQWN0aW9uQmVhbi5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9qYXZhL215c3RyaXBlcy9hY3Rpb24vQmFzZUFjdGlvbkJlYW4uamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9qYXZhL215c3RyaXBlcy9hY3Rpb24vSG9tZUFjdGlvbkJlYW4uamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL2phdmEvbXlzdHJpcGVzL2FjdGlvbi9Ib21lQWN0aW9uQmVhbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL2phdmEvbXlzdHJpcGVzL2FjdGlvbi9Ib21lQWN0aW9uQmVhbi5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9qYXZhL215c3RyaXBlcy9hY3Rpb24vSG9tZUFjdGlvbkJlYW4uamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9TdHJpcGVzUmVzb3VyY2VzLnByb3BlcnRpZXMgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvU3RyaXBlc1Jlc291cmNlcy5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9TdHJpcGVzUmVzb3VyY2VzLnByb3BlcnRpZXMKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3Jlc291cmNlcy9TdHJpcGVzUmVzb3VyY2VzLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwL2hvbWUuanNwIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwL2hvbWUuanNwCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC9ob21lLmpzcApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwL2hvbWUuanNwCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC9sYXlvdXQuanNwIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwL2xheW91dC5qc3AKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvanNwL2xheW91dC5qc3AKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC9sYXlvdXQuanNwCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC90YWdsaWJzLmpzcCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC90YWdsaWJzLmpzcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi9qc3AvdGFnbGlicy5qc3AKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL2pzcC90YWdsaWJzLmpzcApkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvbWFpbi93ZWJhcHAvaW5kZXguaHRtbApyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL3Rlc3QvamF2YS9SRUFETUUgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvdGVzdC9qYXZhL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtc3RyaXBlcy9zcmMvdGVzdC9qYXZhL1JFQURNRQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL3Rlc3QvamF2YS9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi13ZWIvaGVsbG93b3JsZC1zdHJpcGVzL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9oZWxsb3dvcmxkLXN0cmlwZXMvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL2ltcGxlbWVudGF0aW9uLXdlYi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliODVkOGQKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24td2ViL3BvbS54bWwKQEAgLTAsMCArMSw1MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzLWltcGxlbWVudGF0aW9uLXdlYmFwcDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgV2ViIEFwcGxpY2F0aW9uczwvbmFtZT4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxtb2R1bGVzPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+aGVsbG93b3JsZC1qYXhyczwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+aGVsbG93b3JsZC1qcy1jbGllbnQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmhlbGxvd29ybGQtanNmPC9tb2R1bGU+Cis8IS0tIGZhaWx1cmUgZHVlIHRvIGxhY2sgb2YgdGFnIHN1cHBvcnQ/CisgICAgICAgICAgICAgICAgPG1vZHVsZT5oZWxsb3dvcmxkLWpzcDwvbW9kdWxlPgorLS0+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5oZWxsb3dvcmxkLXNlcnZsZXQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmhlbGxvd29ybGQtc3RyaXBlczwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4gICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvcG9tLnhtbCBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNDljZWIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvcG9tLnhtbApAQCAtMCwwICsxLDYwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlcy1sZWFybmluZy1tb3JlPC9hcnRpZmFjdElkPgorICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBMZWFybmluZyBNb3JlIFNhbXBsZSBDb250cmlidXRpb25zPC9uYW1lPgorCisgICAgPHByb2ZpbGVzPgorICAgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4KKyAgICAgICAgICAgIDxhY3RpdmF0aW9uPgorICAgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPgorICAgICAgICAgICAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iaW5kaW5nLWptczwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmluZGluZy1ybWk8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmJpbmRpbmctc2NhPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iaW5kaW5nLXdzPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPCEtLSBtb2R1bGU+YmluZGluZy1jb21ldDwvbW9kdWxlIC0tPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+YmluZGluZy1qc29ucnBjPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi1icGVsPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi1jb21wb3NpdGU8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLWphdmE8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmltcGxlbWVudGF0aW9uLXNjcmlwdDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+aW1wbGVtZW50YXRpb24tc3ByaW5nPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi1vc2dpPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi13ZWI8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmRpc3RyaWJ1dGVkLW9zZ2k8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnNjYS1jbGllbnQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmFzeW5jPC9tb2R1bGU+CisgICAgICAgICAgICA8L21vZHVsZXM+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPiAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1zY2FjbGllbnQvUkVBRE1FIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL3NjYS1jbGllbnQvY2FsY3VsYXRvci1zY2FjbGllbnQvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itc2NhY2xpZW50L1JFQURNRQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL3NjYS1jbGllbnQvY2FsY3VsYXRvci1zY2FjbGllbnQvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvc2NhLWNsaWVudC9jYWxjdWxhdG9yLXNjYWNsaWVudC9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL3NjYS1jbGllbnQvY2FsY3VsYXRvci1zY2FjbGllbnQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTgyMDY0Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL3NjYS1jbGllbnQvY2FsY3VsYXRvci1zY2FjbGllbnQvcG9tLnhtbApAQCAtMCwwICsxLDY5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtc2NhLWNsaWVudC1jYWxjdWxhdG9yPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIFNDQSBDbGllbnQgQ2FsY3VsYXRvcjwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgICAgPHBsdWdpbnM+DQorICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPg0KKyAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICA8dmVyc2lvbj4xLjEuMTwvdmVyc2lvbj4NCisgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgIDxnb2FsPmphdmE8L2dvYWw+DQorICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQorICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgPG1haW5DbGFzcz5zYW1wbGUuQ2FsY3VsYXRvclNDQUNsaWVudDwvbWFpbkNsYXNzPg0KKyAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgIDwvcGx1Z2luPg0KKyAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jYWxjdWxhdG9yLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YSBiL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9zY2EtY2xpZW50L2NhbGN1bGF0b3Itc2NhY2xpZW50L3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itc2NhY2xpZW50L3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvc2NhLWNsaWVudC9jYWxjdWxhdG9yLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jYWxjdWxhdG9yLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9DYWxjdWxhdG9yU0NBQ2xpZW50LmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvc2NhLWNsaWVudC9jYWxjdWxhdG9yLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9DYWxjdWxhdG9yU0NBQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvY2FsY3VsYXRvci1zY2FjbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvQ2FsY3VsYXRvclNDQUNsaWVudC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvc2NhLWNsaWVudC9jYWxjdWxhdG9yLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9DYWxjdWxhdG9yU0NBQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGVhcm5pbmctbW9yZS9zY2EtY2xpZW50L2hlbGxvd29ybGQtc2NhY2xpZW50L3BvbS54bWwgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvc2NhLWNsaWVudC9oZWxsb3dvcmxkLXNjYWNsaWVudC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYzk1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvc2NhLWNsaWVudC9oZWxsb3dvcmxkLXNjYWNsaWVudC9wb20ueG1sCkBAIC0wLDAgKzEsNjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPnNhbXBsZS1zY2EtY2xpZW50LWhlbGxvd29ybGQ8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgU0NBIENsaWVudCBIZWxsb3dvcmxkIDwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgICAgPHBsdWdpbnM+DQorICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy5tb2pvPC9ncm91cElkPg0KKyAgICAgICAgICAgPGFydGlmYWN0SWQ+ZXhlYy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICA8dmVyc2lvbj4xLjEuMTwvdmVyc2lvbj4NCisgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgIDxnb2FsPmphdmE8L2dvYWw+DQorICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQorICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgPG1haW5DbGFzcz5zYW1wbGUuSGVsbG93b3JsZFNDQUNsaWVudDwvbWFpbkNsYXNzPg0KKyAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgIDwvcGx1Z2luPg0KKyAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9oZWxsb3dvcmxkLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEgYi9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvc2NhLWNsaWVudC9oZWxsb3dvcmxkLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvaGVsbG93b3JsZC1zY2FjbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZC5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL2xlYXJuaW5nLW1vcmUvc2NhLWNsaWVudC9oZWxsb3dvcmxkLXNjYWNsaWVudC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9IZWxsb3dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvaGVsbG93b3JsZC1zY2FjbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNDQUNsaWVudC5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL3NjYS1jbGllbnQvaGVsbG93b3JsZC1zY2FjbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNDQUNsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2hlbGxvd29ybGQtc2NhY2xpZW50L3NyYy9tYWluL2phdmEvc2FtcGxlL0hlbGxvd29ybGRTQ0FDbGllbnQuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9sZWFybmluZy1tb3JlL3NjYS1jbGllbnQvaGVsbG93b3JsZC1zY2FjbGllbnQvc3JjL21haW4vamF2YS9zYW1wbGUvSGVsbG93b3JsZFNDQUNsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2hlbGxvd29ybGQtc2NhY2xpZW50L3NyYy90ZXN0L2phdmEvc2FtcGxlL0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL3NjYS1jbGllbnQvaGVsbG93b3JsZC1zY2FjbGllbnQvc3JjL3Rlc3QvamF2YS9zYW1wbGUvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvaGVsbG93b3JsZC1zY2FjbGllbnQvc3JjL3Rlc3QvamF2YS9zYW1wbGUvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvbGVhcm5pbmctbW9yZS9zY2EtY2xpZW50L2hlbGxvd29ybGQtc2NhY2xpZW50L3NyYy90ZXN0L2phdmEvc2FtcGxlL0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvc2NhLWNsaWVudC9wb20ueG1sIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL3NjYS1jbGllbnQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTkzODFmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9sZWFybmluZy1tb3JlL3NjYS1jbGllbnQvcG9tLnhtbApAQCAtMCwwICsxLDQ2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXMtc2NhLWNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTQ0FDbGllbnQgU2FtcGxlczwvbmFtZT4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxtb2R1bGVzPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+aGVsbG93b3JsZC1zY2FjbGllbnQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmNhbGN1bGF0b3Itc2NhY2xpZW50PC9tb2R1bGU+CisgICAgICAgICAgICA8L21vZHVsZXM+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPiAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvbG9nZ2luZy1zY3JpYmUvcG9tLnhtbCBiL3NhbXBsZXMvbG9nZ2luZy1zY3JpYmUvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTllN2Q2NS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL2xvZ2dpbmctc2NyaWJlL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICAgICogDQotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gICAgKiANCi0gICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxwYWNrYWdpbmc+amFyPC9wYWNrYWdpbmc+DQotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1sb2dnaW5nLXNjcmliZTwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNjcmliZSBMb2dnaW5nIFNhbXBsZTwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnRocmlmdDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5saWJ0aHJpZnQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+MS4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4xLjUuODwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5zbGY0ai1zaW1wbGU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+MS41Ljg8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWxhbmc8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sYW5nPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNDwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQotICAgICAgIDxwbHVnaW5zPg0KLSAgICAgICAgIDxwbHVnaW4+DQotICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi10dXNjYW55LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICA8L3BsdWdpbnM+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcG9tLnhtbCBiL3NhbXBsZXMvcG9tLnhtbAppbmRleCBjM2NjYTg2Li4yZjE5ODYxIDEwMDY0NAotLS0gYS9zYW1wbGVzL3BvbS54bWwKKysrIGIvc2FtcGxlcy9wb20ueG1sCkBAIC0yNiw3NCArMjYsMzkgQEAKICAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CiAgICAgPC9wYXJlbnQ+CiAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgogICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZXM8L25hbWU+CiAKLSAgICA8cHJvZmlsZXM+Ci0gICAgICAgIDxwcm9maWxlPgotICAgICAgICAgICAgPGlkPmRlZmF1bHQ8L2lkPgotICAgICAgICAgICAgPGFjdGl2YXRpb24+Ci0gICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+Ci0gICAgICAgICAgICA8L2FjdGl2YXRpb24+CiAgICAgICAgICAgICA8bW9kdWxlcz4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmNhbGN1bGF0b3Itb3NnaTwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+ZG9zZ2ktY2FsY3VsYXRvcjwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+ZG9zZ2ktY2FsY3VsYXRvci1vcGVyYXRpb25zPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5kb3NnaS1keW5hbWljLWNhbGN1bGF0b3I8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmRvc2dpLWR5bmFtaWMtY2FsY3VsYXRvci1vcGVyYXRpb25zPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5jYWxjdWxhdG9yLXNjYWNsaWVudDwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+aGVsbG93b3JsZDwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+aGVsbG93b3JsZC1zY2FjbGllbnQ8L21vZHVsZT4KLTwhLS0gKioqKioqKioqCi0gICAgSUYgWU9VIEFERCBBTlkgU0FNUExFUyBUSEVOIEFMU08gQUREIFRIRU0gVE8gCi0gICAgICAgIGRpc3RyaWJ1dGlvblxhbGxcc3JjXG1haW5cY29tcG9uZW50c1xiaW4tc2FtcGxlcy54bWwKLSAgICBPUiBUSEVZIFdPTlQgR0VUIElOIFJFTEVBU0VTCi0gICAgICoqKioqKioqKiAtLT4KLTwhLS0gKioqKioqKioqCi0gICAgQUxTTyBTQU1QTEVTIFNIT1VMRCBIQVZFIEEgVEVTVCBJTiBpdGVzdC9kaXN0cmlidXRpb24gVE8gCi0gICAgRU5TVVJFIFRIQVQgVEhFWSBXT1JLIFBST1BFUkxZIE9VVCBPRiBBIERJU1RSSUJVVElPTgotICAgICAqKioqKioqKiogLS0+Ci0gICAgIAotICAgICAgICAgICAgICAgIDxtb2R1bGU+aGVsbG93b3JsZC1icGVsPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5oZWxsb3dvcmxkLXNwcmluZzwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+c3RvcmU8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPnN0b3JlLXdlYmFwcDwvbW9kdWxlPiAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8bW9kdWxlPndlYmFwcHMvaGVsbG93b3JsZDwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+d2ViYXBwcy9oZWxsb3dvcmxkLWJwZWw8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPndlYmFwcHMvaGVsbG93b3JsZC1qYXhyczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+d2ViYXBwcy9oZWxsb3dvcmxkLWptczwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+d2ViYXBwcy9oZWxsb3dvcmxkLWpzLWNsaWVudDwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+d2ViYXBwcy9oZWxsb3dvcmxkLWpzcDwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+d2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXM8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPndlYmFwcHMvaGVsbG93b3JsZC1zZXJ2bGV0PC9tb2R1bGU+Ci0KLSAgICAgICAgICAgICAgICA8IS0tIGNvbnRyaWJ1dGlvbnMgLSBTQ0Egc2FtcGxlcyAtLT4KLQotICAgICAgICAgICAgICAgIDxtb2R1bGU+YmluZGluZy1ybWk8L21vZHVsZT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmJpbmRpbmctc2NhPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yPC9tb2R1bGU+Ci0gICAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yPC9tb2R1bGU+Ci0KLSAgICAgICAgICAgICAgICA8IS0tIGNvbnRyaWJ1dGlvbnMgLSBUdXNjYW55IHNhbXBsZXMgLS0+Ci0KLSAgICAgICAgICAgICAgICA8IS0tIFRPRE8gLS0+Ci0KLSAgICAgICAgICAgICAgICA8IS0tIGNvbnRyaWJ1dGlvbiBsYXVuY2hlcnMgLS0+Ci0KLSAgICAgICAgICAgICAgICA8IS0tIGRvbid0IG5lZWQgdG8gcHJvY2VzcyB0aGVzZSBhcyB0aGV5IGp1c3QgY29udGFpbiBSRUFETUUgZmlsZXMKLSAgICAgICAgICAgICAgICA8bW9kdWxlPmxhdW5jaGVyLWNvbW1hbmQtbGluZTwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+bGF1bmNoZXItbWF2ZW48L21vZHVsZT4KLSAgICAgICAgICAgICAgICAtLT4KLSAgICAgICAgICAgICAgICA8bW9kdWxlPmxhdW5jaGVyLWVtYmVkZGVkLWpzZTwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+bGF1bmNoZXItZW1iZWRkZWQtb3NnaTwvbW9kdWxlPgotICAgICAgICAgICAgICAgIDxtb2R1bGU+bGF1bmNoZXItZW1iZWRkZWQtb3NnaS1iYXNlPC9tb2R1bGU+Ci0KLSAgICAgICAgICAgICAgICA8IS0tIEFwcGxpY2F0aW9uIHNhbXBsZXMgLS0+Ci0KLSAgICAgICAgICAgICAgICA8IS0tIFRPRE8gLS0+Ci0KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmdldHRpbmctc3RhcnRlZDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+bGVhcm5pbmctbW9yZTwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+cnVubmluZy10dXNjYW55PC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5hcHBsaWNhdGlvbnM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmV4dGVuZGluZy10dXNjYW55PC9tb2R1bGU+CiAgICAgICAgICAgICA8L21vZHVsZXM+Ci0gICAgICAgIDwvcHJvZmlsZT4KLSAgICA8L3Byb2ZpbGVzPiAgICAKKworICAgICAgICAgIDxidWlsZD4KKyAgICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgICAgIDwhLS0gdGhpcyBwcmV2ZW50cyB0aGUgc2FtcGxlIGFydGlmYWN0cyBiZWluZyBkZXBsb3llZCBhcyB0aGV5J3JlIG9ubHkgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbiAtLT4KKyAgICAgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbmhlcml0ZWQ+dHJ1ZTwvaW5oZXJpdGVkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwbG95LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgICAgICAgICA8IS0tIHRoaXMgcHJldmVudHMgYWRkaW5nIExJQ0VOU0UvTk9USUNFL0RFUEVOREVOQ0lFUyBmaWxlcyB0byB0aGUgc2FtcGxlIGFydGlmYWN0cyB3aGljaCBhcmVuJ3QgbmVlZGVkIGFzIHRoZXkncmUgbm90IHNlcGFyYXRlbHkgZGlzdHJpYnV0ZWQgLS0+CisgICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8aW5oZXJpdGVkPnRydWU8L2luaGVyaXRlZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXJlbW90ZS1yZXNvdXJjZXMtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNraXA+dHJ1ZTwvc2tpcD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAgIDwvcGx1Z2lucz4KKyAgICAgICAgICA8L2J1aWxkPgogCiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLWNvbW1hbmQtbGluZS9SRUFETUUgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9jb21tYW5kLWxpbmUvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xhdW5jaGVyLWNvbW1hbmQtbGluZS9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L2NvbW1hbmQtbGluZS9SRUFETUUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VjbGlwc2UvUkVBRE1FIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZWNsaXBzZS9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI0NjBlYwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VjbGlwc2UvUkVBRE1FCkBAIC0wLDAgKzEsMTUgQEAKK1RvIGltcG9ydCBzYW1wbGUgY29udHJpYnV0aW9ucyBpbnRvIEVjbGlwc2UgeW91IGZpcnN0IG5lZWQgdG8gaW1wb3J0IHRoZSANCitUdXNjYW55IHJ1bnRpbWUuIFlvdSB0aGVuIG5lZWQgdG8gaW1wb3J0IHRoZSBzYW1wbGUgY29udHJpYnV0aW9uIGludG8gRWNsaXBzZQ0KK2FzIGEgcHJvamVjdC4gSW5zdHJ1Y3Rpb25zIGZvciBkb2luZyBib3RoIG9mIHRoZXNlIHRoaW5ncyBjYW4gYmUgZm91bmQgaGVyZSANCisNCitodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL2ltcG9ydC1leGlzdGluZy10dXNjYW55LXNjYS1wcm9qZWN0cy1pbnRvLWVjbGlwc2UuaHRtbA0KKw0KK05vdGUuIHRoZXNlIGluc3RydWN0aW9ucyByZWZlciB0byBvdXIgMS54IGNvZGUgYmFzZSBidXQgaXQgaG9sZHMgdHJ1ZSBmb3IgDQorb3VyIDIueCBjb2RlIGJhc2UuIA0KKw0KK09uY2UgeW91IGhhdmUgYSBjb250cmlidXRpb24gaW1wb3J0ZWQgaW50byBFY2xpcHNlIGFuZCBjbGVhbmx5IGNvbXBpbGluZw0KK2FnYWluc3QgdGhlIFR1c2NhbnkgcnVudGltZSBqYXJzIHlvdSBwcm9iYWJseSB3YW50IHRvIGJlIGFibGUgdG8gcnVuIGFuZCANCitkZWJ1ZyBpdC4gVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgd2l0aCBhIHNpbXBsZSBKYXZhIGxhdW5jaGVyLiBJZiB5b3UgDQoraW1wb3J0IHRoZSBydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlIHByb2plY3QgaW50byBFY2xpcHNlIHlvdSdsbCBzZWUgYSANCitudW1iZXIgb2Ygc3VjaCBsYXVuY2hlciBwcm9ncmFtcyB3aGljaCB5b3UgY2FuIGNvcHkgdG8gbGF1bmNoIHRoZSANCitjb250cmlidXRpb24ocykgb2YgeW91ciBjaG9pY2UuIA0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZS9SRUFETUUgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2UvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMGY1ODgKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2UvUkVBRE1FCkBAIC0wLDAgKzEsMTUgQEAKK0pTRSBTYW1wbGUgTGF1bmNoZXJzDQorPT09PT09PT09PT09PT09PT09PT0NCisNCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBzYW1wbGUgamF2YSBsYXVuY2hlcnMgZm9yIHRoZQ0KK3R1c2Nhbnkgc2FtcGxlIGNvbnRyaWJ1dGlvbnMuICAgDQorDQorVG8gdXNlIHRoaXMgc2FtcGxlIEpTRSBsYXVuY2hlciB3aXRoIGFudCBleGVjdXRlIHRoZSBjb21tYW5kDQorDQorYW50IHJ1bi08Y29udHJpYnV0aW9ubmFtZT4NCisNCit3aGVyZSBydW4tPGNvbnRyaWJ1dGlvbm5hbWU+IGlzIG9uZSBvZiB0aGUgdGFyZ2V0cyBpbiB0aGUgYnVpbGQueG1sIGZpbGUNCisNCitUbyB1c2UgdGhpcyBzYW1wbGUgbGF1bmNoZXIgdG8gcnVuIGFsbCBvZiB0aGUgY29udHJpYnV0aW9ucyBhcyBqdW5pdCB0ZXN0IGNhc2VzLA0KK2V4ZWN1dGUgdGhlIGNvbW1hbmQgIm12biIgaW4gdGhlIGxhdW5jaGVyIGRpcmVjdG9yeS4NCisNCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2UvYnVpbGQueG1sIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzY5NjIyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlL2J1aWxkLnhtbApAQCAtMCwwICsxLDE0MSBAQAorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3QgbmFtZT0ibGF1bmNoZXItZW1iZWRkZWQtanNlIiBkZWZhdWx0PSJydW4iPiANCisgICAgPHByb3BlcnR5IG5hbWU9InR1c2NhbnkuaG9tZSIgdmFsdWU9Ii4uLy4uLy4uIi8+DQorICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXIubmFtZSIgICB2YWx1ZT0ic2FtcGxlLWxhdW5jaGVyLWVtYmVkZGVkLWpzZS5qYXIiIC8+DQorDQorICAgIDxlY2hvPlJvb3Qgb2YgVHVzY2FueSBiaW5hcnkgZGlzdHJpYnV0aW9uIGlzIC0gJHt0dXNjYW55LmhvbWV9PC9lY2hvPg0KKw0KKyAgICA8aW1wb3J0IGZpbGU9IiR7dHVzY2FueS5ob21lfS9mZWF0dXJlcy90dXNjYW55LWJhc2UtcnVudGltZS1wb20vYnVpbGQtcGF0aC54bWwiLz4NCisgICAgPGltcG9ydCBmaWxlPSIke3R1c2NhbnkuaG9tZX0vZmVhdHVyZXMvdHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczIvYnVpbGQtcGF0aC54bWwiLz4NCisgICAgPGltcG9ydCBmaWxlPSIke3R1c2NhbnkuaG9tZX0vZmVhdHVyZXMvdHVzY2FueS1iaW5kaW5nLXJtaS1ydW50aW1lL2J1aWxkLXBhdGgueG1sIi8+DQorICAgIDxpbXBvcnQgZmlsZT0iJHt0dXNjYW55LmhvbWV9L2ZlYXR1cmVzL3R1c2NhbnktaG9zdC1qZXR0eS9idWlsZC1wYXRoLnhtbCIvPg0KKw0KKyAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPiANCisgICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIiBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4gDQorICAgICAgICAgPGZpbGVzZXQgZGlyPSJ0YXJnZXQiLz4gDQorICAgICAgPC9kZWxldGU+IA0KKyAgICAgIDxta2RpciBkaXI9InRhcmdldC9jbGFzc2VzIi8+IA0KKyAgICA8L3RhcmdldD4NCisJDQorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCI+DQorICAgICAgPGphdmFjIHNyY2Rpcj0ic3JjL21haW4vamF2YSIgDQorICAgICAgCSAgICAgZGVzdGRpcj0idGFyZ2V0L2NsYXNzZXMiIA0KKyAgICAgIAkgICAgIGRlYnVnPSJvbiINCisgICAgICAgICAgICAgc291cmNlPSIxLjUiDQorICAgICAgICAgICAgIHRhcmdldD0iMS41Ig0KKyAgICAgIAkgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4gDQorICAgICAgICAgPGNsYXNzcGF0aD4NCisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dHVzY2FueS5ob21lfS9saWIiPg0KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2NhbnktYmFzZS0qLmphciIgLz4NCisgICAgICAgICAgICA8L2ZpbGVzZXQ+DQorICAgICAgICAgPC9jbGFzc3BhdGg+DQorICAgICAgPC9qYXZhYz4gDQorICAgICAgPGphciBkZXN0ZmlsZT0idGFyZ2V0LyR7amFyLm5hbWV9IiBiYXNlZGlyPSJ0YXJnZXQvY2xhc3NlcyI+IA0KKyAgICAgIDwvamFyPiAgICAJDQorICAgIDwvdGFyZ2V0Pg0KKwkNCisgICAgPHRhcmdldCBuYW1lPSJydW4iIGRlcGVuZHM9ImNvbXBpbGUiPg0KKyAgICAgICAgPGVjaG8+UGxlYXNlIHVzZSAnYW50IHJ1bi1uYW1lLW9mLXNhbXBsZS1jb250cmlidXRpb24tdG8tcnVuJyBmb3IgZXhhbXBsZSwgdHJ5IG9uZSBvZjwvZWNobz4NCisJPGVjaG8+ICAnYW50IHNhbXBsZS1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbicgPC9lY2hvPg0KKwk8ZWNobz4gICdhbnQgc2FtcGxlLWJpbmRpbmctd3MtY2FsY3VsYXRvci1jb250cmlidXRpb24nICA8L2VjaG8+DQorCTxlY2hvPiAgJ2FudCBzYW1wbGUtYmluZGluZy1ybWktY2FsY3VsYXRvci1jb250cmlidXRpb24nICA8L2VjaG8+DQorCTxlY2hvPiAgJ2FudCBzYW1wbGUtaW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbicgIDwvZWNobz4NCisgICAgPGVjaG8+ICAnYW50IHNhbXBsZS1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3ItYXN5bmMtY29udHJpYnV0aW9uJyAgPC9lY2hvPg0KKyAgICA8L3RhcmdldD4NCisNCisgICAgPCEtLSBSdW4gdXNpbmcgdGhlICJhbGwiIG1hbmlmZXN0IGphciAtLT4NCisgICAgPHRhcmdldCBuYW1lPSJzYW1wbGUtYmluZGluZy1zY2EtY2FsY3VsYXRvci1jb250cmlidXRpb24iIGRlcGVuZHM9ImNvbXBpbGUiPg0KKyAgCSAgICAgPGphdmEgY2xhc3NuYW1lPSJsYXVuY2hlci5KU0VMYXVuY2hlckJpbmRpbmdTQ0FDYWxjdWxhdG9yIg0KKyAgICAgICAgICAgICAgZm9yaz0idHJ1ZSINCisgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4NCisgICAgICAgICAgICA8Y2xhc3NwYXRoPiAgDQorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0idGFyZ2V0LyR7amFyLm5hbWV9Ii8+DQorICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2ZlYXR1cmVzIj4NCisgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtbWFuaWZlc3QuamFyIiAvPg0KKyAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+DQorICAgICAgICAgICAgPC9jbGFzc3BhdGg+IA0KKyAgICAgICAgPC9qYXZhPiAgDQorICAgIDwvdGFyZ2V0Pg0KKwkNCisgICAgPCEtLSBSdW4gdXNpbmcgdGhlIGJhc2UgKyBleHRlbnNpb24gYW50IHBhdGhzIC0tPg0KKyAgICA8dGFyZ2V0IG5hbWU9InNhbXBsZS1iaW5kaW5nLXdzLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uIiBkZXBlbmRzPSJjb21waWxlIj4NCisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0ibGF1bmNoZXIuSlNFTGF1bmNoZXJCaW5kaW5nV1NDYWxjdWxhdG9yIg0KKyAgICAgICAgICAgICAgZm9yaz0idHJ1ZSINCisgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4NCisgICAgICAgICAgICA8Y2xhc3NwYXRoPiAgDQorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0idGFyZ2V0LyR7amFyLm5hbWV9Ii8+DQorICAgICAgICAgICAgICAgIDxwYXRoIHJlZmlkPSJ0dXNjYW55LWJhc2UtcnVudGltZS1wb20ucGF0aCIvPg0KKyAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0idHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczIucGF0aCIvPg0KKyAgICAgICAgICAgICAgICA8cGF0aCByZWZpZD0idHVzY2FueS1ob3N0LWpldHR5LnBhdGgiLz4NCisgICAgICAgICAgICA8L2NsYXNzcGF0aD4gDQorICAgICAgICA8L2phdmE+ICAgICANCisgICAgPC90YXJnZXQ+CQ0KKwkNCisgICAgPCEtLSBSdW4gdXNpbmcgdGhlIGJhc2UgKyBleHRlbnNpb24gbWFuaWZlc3QgLS0+DQorICAgIDx0YXJnZXQgbmFtZT0ic2FtcGxlLWJpbmRpbmctcm1pLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uIiBkZXBlbmRzPSJjb21waWxlIj4NCisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0ibGF1bmNoZXIuSlNFTGF1bmNoZXJCaW5kaW5nUk1JQ2FsY3VsYXRvciINCisgICAgICAgICAgICAgIGZvcms9InRydWUiDQorICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+DQorICAgICAgICAgICAgPGNsYXNzcGF0aD4gIA0KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249InRhcmdldC8ke2phci5uYW1lfSIvPg0KKyAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dHVzY2FueS5ob21lfS9mZWF0dXJlcy90dXNjYW55LWJhc2UtcnVudGltZS1wb20iPg0KKyAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LWJhc2UtcnVudGltZS1wb20tbWFuaWZlc3QuamFyIiAvPg0KKyAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+DQorICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2ZlYXR1cmVzL3R1c2NhbnktYmluZGluZy1ybWktcnVudGltZSI+DQorICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2NhbnktYmluZGluZy1ybWktcnVudGltZS1tYW5pZmVzdC5qYXIiIC8+DQorICAgICAgICAgICAgICAgIDwvZmlsZXNldD4NCisgICAgICAgICAgICA8L2NsYXNzcGF0aD4gDQorICAgICAgICA8L2phdmE+ICAgICAgIA0KKyAgICA8L3RhcmdldD4JDQorCQ0KKyAgICA8IS0tIFJ1biB1c2luZyB0aGUgYmFzZSArIGV4dGVuc2lvbiBhZ2dyZWdhdGlvbnMgLS0+DQorICAgIDx0YXJnZXQgbmFtZT0ic2FtcGxlLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci1jb250cmlidXRpb24iIGRlcGVuZHM9ImNvbXBpbGUiPg0KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJsYXVuY2hlci5KU0VMYXVuY2hlckltcGxlbWVudGF0aW9uSmF2YUNhbGN1bGF0b3IiDQorICAgICAgICAgICAgICBmb3JrPSJ0cnVlIg0KKyAgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPg0KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+ICANCisgICAgICAgICAgICAgICAgPHBhdGhlbGVtZW50IGxvY2F0aW9uPSJ0YXJnZXQvJHtqYXIubmFtZX0iLz4NCisgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIke3R1c2NhbnkuaG9tZX0vbGliIj4NCisgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1iYXNlLXJ1bnRpbWUtYWdncmVnYXRpb24tMi4wLUJldGExLmphciIgLz4NCisgICAgICAgICAgICAgICAgPC9maWxlc2V0Pg0KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPiANCisgICAgICAgIDwvamF2YT4gICAgICAgDQorICAgIDwvdGFyZ2V0PgkNCisJDQorICAgIDx0YXJnZXQgbmFtZT0ic2FtcGxlLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci1hc3luYy1jb250cmlidXRpb24iIGRlcGVuZHM9ImNvbXBpbGUiPg0KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJsYXVuY2hlci5KU0VMYXVuY2hlckltcGxlbWVudGF0aW9uSmF2YUNhbGN1bGF0b3JBc3luYyINCisgICAgICAgICAgICAgIGZvcms9InRydWUiDQorICAgICAgICAgICAgICBmYWlsb25lcnJvcj0idHJ1ZSI+DQorICAgICAgICAgICAgPGNsYXNzcGF0aD4gIA0KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249InRhcmdldC8ke2phci5uYW1lfSIvPg0KKyAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dHVzY2FueS5ob21lfS9mZWF0dXJlcy90dXNjYW55LWJhc2UtcnVudGltZS1wb20iPg0KKyAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LWJhc2UtcnVudGltZS1wb20tbWFuaWZlc3QuamFyIiAvPg0KKyAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+DQorICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2ZlYXR1cmVzL3R1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyIj4NCisgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczItbWFuaWZlc3QuamFyIiAvPg0KKyAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+DQorICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2ZlYXR1cmVzL3R1c2NhbnktaG9zdC1qZXR0eSI+DQorICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2NhbnktaG9zdC1qZXR0eS1tYW5pZmVzdC5qYXIiIC8+DQorICAgICAgICAgICAgICAgIDwvZmlsZXNldD4gICAgICAgICAgICAJDQorICAgICAgICAgICAgPC9jbGFzc3BhdGg+DQorICAgICAgICA8L2phdmE+ICAgICAgIA0KKyAgICA8L3RhcmdldD4JDQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZS9wb20ueG1sIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4ZWMwMAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZS9wb20ueG1sCkBAIC0wLDAgKzEsOTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIDxhcnRpZmFjdElkPnNhbXBsZS1sYXVuY2hlci1lbWJlZGRlZC1qc2U8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgTGF1bmNoZXIgRW1iZWRkZWQgSlNFPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1wb208L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktb3NnaS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisgICAgICAgIA0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctcm1pLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorICAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zY3JpcHQtcnVudGltZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+ICANCisgICAgICAgIA0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctanNvbnJwYy1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgIA0KKyAgICAgICAgICAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIA0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisNCisgICAgICAgPHBsdWdpbnM+DQorICAgICAgICAgDQorICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtanNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL0pTRUxhdW5jaGVyQmluZGluZ0pTT05SUENDYWxjdWxhdG9yLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckJpbmRpbmdKU09OUlBDQ2FsY3VsYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZWY2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckJpbmRpbmdKU09OUlBDQ2FsY3VsYXRvci5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIGxhdW5jaGVyOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5Ow0KKw0KK2ltcG9ydCBjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlOw0KKw0KKy8qKg0KKyAqIFRoaXMgY2xpZW50IHByb2dyYW0gc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBlbWJlZGRlZCBTQ0EgcnVudGltZSwgbG9hZCBhIGNvbnRyaWJ1dGlvbiwNCisgKiBzdGFydCBpdCBhbmQgbG9jYXRlIGFuZCBpbnZva2UgYW4gU0NBIGNvbXBvbmVudCANCisgKi8NCitwdWJsaWMgY2xhc3MgSlNFTGF1bmNoZXJCaW5kaW5nSlNPTlJQQ0NhbGN1bGF0b3Igew0KKyAgICANCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBKU0VMYXVuY2hlckJpbmRpbmdKU09OUlBDQ2FsY3VsYXRvciBsYXVuY2hlciA9IG5ldyBKU0VMYXVuY2hlckJpbmRpbmdKU09OUlBDQ2FsY3VsYXRvcigpOw0KKyAgICAgICAgbGF1bmNoZXIubGF1bmNoQmluZGluZ1NDQUNhbGN1bGF0b3IoKTsgICAgICAgICANCisgICAgfQ0KKyAgICANCisgICAgLyoNCisgICAgICogVXNpbmcgdGhlIFR1c2NhbnkgTm9kZSBBUEkgdG8gbG9hZCBhIGNvbnRyaWJ1dGlvbi4NCisgICAgICogVXNpbmcgdGhlIFR1c2NhbnkgTm9kZSBBUEkgdG8gZ2V0IGEgbG9jYWwgc2VydmljZSBwcm94eQ0KKyAgICAgKi8NCisgICAgcHVibGljIHZvaWQgbGF1bmNoQmluZGluZ1NDQUNhbGN1bGF0b3IoKXsNCisgICAgICAgIE5vZGUgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZShuZXcgQ29udHJpYnV0aW9uKCJjMSIsICIuLi9iaW5kaW5nLWpzb25ycGMvY2FsY3VsYXRvci1jb250cmlidXRpb24vdGFyZ2V0L3NhbXBsZS1iaW5kaW5nLWpzb25ycGMtY2FsY3VsYXRvci1jb250cmlidXRpb24uamFyIikpOw0KKyAgICAgICAgbm9kZS5zdGFydCgpOw0KKyAgICAgICAgDQorICAgICAgICBDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yID0gbm9kZS5nZXRTZXJ2aWNlKENhbGN1bGF0b3JTZXJ2aWNlLmNsYXNzLCAiQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQiKTsNCisgICAgICAgIA0KKyAgICAgICAgLy8gVE9ETyAtIGNvdWxkIHVzZSBKVW5pdCBhc3NlcnRpb25zIGJ1dCBkb24ndCB3YW50IHRvIGhhdmUgdG8gaGFuZGxlIEpVbml0IGRlcGVuZGVuY3kgZnJvbSBBbnQgc2NyaXB0DQorICAgICAgICBkb3VibGUgcmVzdWx0ID0gY2FsY3VsYXRvci5hZGQoMywgMik7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgKyAyID0gIiArIHJlc3VsdCk7DQorICAgICAgICBpZiAocmVzdWx0ICE9IDUuMCl7DQorICAgICAgICAgICAgdGhyb3cgbmV3IFNhbXBsZUxhdW5jaGVyRXhjZXB0aW9uKCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIG5vZGUuc3RvcCgpOw0KKyAgICB9DQorICAgIA0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckJpbmRpbmdSTUlDYWxjdWxhdG9yLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckJpbmRpbmdSTUlDYWxjdWxhdG9yLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjOTllZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL0pTRUxhdW5jaGVyQmluZGluZ1JNSUNhbGN1bGF0b3IuamF2YQpAQCAtMCwwICsxLDYwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIGxhdW5jaGVyOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CisKK2ltcG9ydCBjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlOworCisvKioKKyAqIFRoaXMgY2xpZW50IHByb2dyYW0gc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBlbWJlZGRlZCBTQ0EgcnVudGltZSwgbG9hZCBhIGNvbnRyaWJ1dGlvbiwKKyAqIHN0YXJ0IGl0IGFuZCBsb2NhdGUgYW5kIGludm9rZSBhbiBTQ0EgY29tcG9uZW50IAorICovCitwdWJsaWMgY2xhc3MgSlNFTGF1bmNoZXJCaW5kaW5nUk1JQ2FsY3VsYXRvciB7CisgICAgCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEpTRUxhdW5jaGVyQmluZGluZ1JNSUNhbGN1bGF0b3IgbGF1bmNoZXIgPSBuZXcgSlNFTGF1bmNoZXJCaW5kaW5nUk1JQ2FsY3VsYXRvcigpOworICAgICAgICBsYXVuY2hlci5sYXVuY2hCaW5kaW5nUk1JQ2FsY3VsYXRvcigpOyAgICAgICAgIAorICAgIH0KKyAgICAKKworICAgIHB1YmxpYyB2b2lkIGxhdW5jaEJpbmRpbmdSTUlDYWxjdWxhdG9yKCl7CisgICAgCQorICAgICAgICBOb2RlIG5vZGUxID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uLy4uL2xlYXJuaW5nLW1vcmUvYmluZGluZy1ybWkvY2FsY3VsYXRvci1zZXJ2aWNlLWNvbnRyaWJ1dGlvbi90YXJnZXQvc2FtcGxlLWJpbmRpbmctcm1pLWNhbGN1bGF0b3Itc2VydmljZS1jb250cmlidXRpb24uamFyIikpOyAgICAgICAKKyAgICAgICAgTm9kZSBub2RlMiA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZShuZXcgQ29udHJpYnV0aW9uKCJjMSIsICIuLi8uLi9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi90YXJnZXQvc2FtcGxlLWJpbmRpbmctcm1pLWNhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbi5qYXIiKSk7CisgICAgICAgIAorICAgICAgICBub2RlMS5zdGFydCgpOworICAgICAgICBub2RlMi5zdGFydCgpOworICAgICAgICAKKyAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvciA9IG5vZGUyLmdldFNlcnZpY2UoQ2FsY3VsYXRvclNlcnZpY2UuY2xhc3MsICJDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCIpOworCisgICAgICAgIGRvdWJsZSByZXN1bHQgPSBjYWxjdWxhdG9yLmFkZCgzLCAyKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzICsgMiA9ICIgKyByZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0ICE9IDUuMCl7CisgICAgICAgICAgICB0aHJvdyBuZXcgU2FtcGxlTGF1bmNoZXJFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbm9kZTEuc3RvcCgpOworICAgICAgICBub2RlMi5zdG9wKCk7CisgICAgfQorICAgIAorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvSlNFTGF1bmNoZXJCaW5kaW5nU0NBQ2FsY3VsYXRvci5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvSlNFTGF1bmNoZXJCaW5kaW5nU0NBQ2FsY3VsYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZGU5ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckJpbmRpbmdTQ0FDYWxjdWxhdG9yLmphdmEKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBsYXVuY2hlcjsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5OworCitpbXBvcnQgY2FsY3VsYXRvci5DYWxjdWxhdG9yU2VydmljZTsKKworLyoqCisgKiBUaGlzIGNsaWVudCBwcm9ncmFtIHNob3dzIGhvdyB0byBjcmVhdGUgYW4gZW1iZWRkZWQgU0NBIHJ1bnRpbWUsIGxvYWQgYSBjb250cmlidXRpb24sCisgKiBzdGFydCBpdCBhbmQgbG9jYXRlIGFuZCBpbnZva2UgYW4gU0NBIGNvbXBvbmVudCAKKyAqLworcHVibGljIGNsYXNzIEpTRUxhdW5jaGVyQmluZGluZ1NDQUNhbGN1bGF0b3IgeworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBKU0VMYXVuY2hlckJpbmRpbmdTQ0FDYWxjdWxhdG9yIGxhdW5jaGVyID0gbmV3IEpTRUxhdW5jaGVyQmluZGluZ1NDQUNhbGN1bGF0b3IoKTsKKyAgICAgICAgbGF1bmNoZXIubGF1bmNoQmluZGluZ1NDQUNhbGN1bGF0b3IoKTsgICAgICAgICAKKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgKiBVc2luZyB0aGUgVHVzY2FueSBOb2RlIEFQSSB0byBsb2FkIGEgY29udHJpYnV0aW9uLgorICAgICAqIFVzaW5nIHRoZSBUdXNjYW55IE5vZGUgQVBJIHRvIGdldCBhIGxvY2FsIHNlcnZpY2UgcHJveHkKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsYXVuY2hCaW5kaW5nU0NBQ2FsY3VsYXRvcigpeworICAgICAgICBOb2RlIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUobmV3IENvbnRyaWJ1dGlvbigiYzEiLCAiLi4vLi4vbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi90YXJnZXQvc2FtcGxlLWJpbmRpbmctc2NhLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uLmphciIpKTsKKyAgICAgICAgbm9kZS5zdGFydCgpOworICAgICAgICAKKyAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvciA9IG5vZGUuZ2V0U2VydmljZShDYWxjdWxhdG9yU2VydmljZS5jbGFzcywgIkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50Iik7CisgICAgICAgIAorICAgICAgICAvLyBUT0RPIC0gY291bGQgdXNlIEpVbml0IGFzc2VydGlvbnMgYnV0IGRvbid0IHdhbnQgdG8gaGF2ZSB0byBoYW5kbGUgSlVuaXQgZGVwZW5kZW5jeSBmcm9tIEFudCBzY3JpcHQKKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IGNhbGN1bGF0b3IuYWRkKDMsIDIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgKyAyID0gIiArIHJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gNS4wKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBTYW1wbGVMYXVuY2hlckV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBub2RlLnN0b3AoKTsKKyAgICB9CisgICAgCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckJpbmRpbmdXU0NhbGN1bGF0b3IuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL0pTRUxhdW5jaGVyQmluZGluZ1dTQ2FsY3VsYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMjEyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckJpbmRpbmdXU0NhbGN1bGF0b3IuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSBsYXVuY2hlcjsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCisNCitpbXBvcnQgY2FsY3VsYXRvci5DYWxjdWxhdG9yU2VydmljZTsNCisNCisvKioNCisgKiBUaGlzIGNsaWVudCBwcm9ncmFtIHNob3dzIGhvdyB0byBjcmVhdGUgYW4gZW1iZWRkZWQgU0NBIHJ1bnRpbWUsIGxvYWQgYSBjb250cmlidXRpb24sDQorICogc3RhcnQgaXQgYW5kIGxvY2F0ZSBhbmQgaW52b2tlIGFuIFNDQSBjb21wb25lbnQgDQorICovDQorcHVibGljIGNsYXNzIEpTRUxhdW5jaGVyQmluZGluZ1dTQ2FsY3VsYXRvciB7DQorICAgIA0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIEpTRUxhdW5jaGVyQmluZGluZ1dTQ2FsY3VsYXRvciBsYXVuY2hlciA9IG5ldyBKU0VMYXVuY2hlckJpbmRpbmdXU0NhbGN1bGF0b3IoKTsNCisgICAgICAgIGxhdW5jaGVyLmxhdW5jaEJpbmRpbmdXU0NhbGN1bGF0b3IoKTsgICAgICAgICANCisgICAgfQ0KKyAgICANCisgICAgLyoNCisgICAgICogVXNpbmcgdGhlIFR1c2NhbnkgTm9kZSBBUEkgdG8gbG9hZCBhIGNvbnRyaWJ1dGlvbi4NCisgICAgICogVXNpbmcgdGhlIFR1c2NhbnkgTm9kZSBBUEkgdG8gZ2V0IGEgbG9jYWwgc2VydmljZSBwcm94eQ0KKyAgICAgKi8NCisgICAgcHVibGljIHZvaWQgbGF1bmNoQmluZGluZ1dTQ2FsY3VsYXRvcigpew0KKyAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uLy4uL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi90YXJnZXQvc2FtcGxlLWJpbmRpbmctd3MtY2FsY3VsYXRvci1jb250cmlidXRpb24uamFyIikpOw0KKyAgICAgICAgbm9kZS5zdGFydCgpOw0KKyAgICAgICAgDQorICAgICAgICBDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yID0gbm9kZS5nZXRTZXJ2aWNlKENhbGN1bGF0b3JTZXJ2aWNlLmNsYXNzLCAiQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQiKTsNCisgICAgICAgIA0KKyAgICAgICAgLy8gVE9ETyAtIGNvdWxkIHVzZSBKVW5pdCBhc3NlcnRpb25zIGJ1dCBkb24ndCB3YW50IHRvIGhhdmUgdG8gaGFuZGxlIEpVbml0IGRlcGVuZGVuY3kgZnJvbSBBbnQgc2NyaXB0DQorICAgICAgICBkb3VibGUgcmVzdWx0ID0gY2FsY3VsYXRvci5hZGQoMywgMik7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgKyAyID0gIiArIHJlc3VsdCk7DQorICAgICAgICBpZiAocmVzdWx0ICE9IDUuMCl7DQorICAgICAgICAgICAgdGhyb3cgbmV3IFNhbXBsZUxhdW5jaGVyRXhjZXB0aW9uKCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIG5vZGUuc3RvcCgpOw0KKyAgICB9DQorICAgIA0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckltcGxlbWVudGF0aW9uSmF2YUNhbGN1bGF0b3IuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL0pTRUxhdW5jaGVySW1wbGVtZW50YXRpb25KYXZhQ2FsY3VsYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlODY1ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckltcGxlbWVudGF0aW9uSmF2YUNhbGN1bGF0b3IuamF2YQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIGxhdW5jaGVyOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CisKK2ltcG9ydCBjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlOworCisvKioKKyAqIFRoaXMgY2xpZW50IHByb2dyYW0gc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBlbWJlZGRlZCBTQ0EgcnVudGltZSwgbG9hZCBhIGNvbnRyaWJ1dGlvbiwKKyAqIHN0YXJ0IGl0IGFuZCBsb2NhdGUgYW5kIGludm9rZSBhbiBTQ0EgY29tcG9uZW50IAorICovCitwdWJsaWMgY2xhc3MgSlNFTGF1bmNoZXJJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yIHsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgSlNFTGF1bmNoZXJJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yIGxhdW5jaGVyID0gbmV3IEpTRUxhdW5jaGVySW1wbGVtZW50YXRpb25KYXZhQ2FsY3VsYXRvcigpOworICAgICAgICBsYXVuY2hlci5sYXVuY2hJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yKCk7ICAgICAgICAgCisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIGxhdW5jaEltcGxlbWVudGF0aW9uSmF2YUNhbGN1bGF0b3IoKXsKKyAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uLy4uL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tamF2YS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi90YXJnZXQvc2FtcGxlLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci1jb250cmlidXRpb24uamFyIikpOworICAgICAgICBub2RlLnN0YXJ0KCk7CisgICAgICAgIAorICAgICAgICBub2RlLnN0b3AoKTsKKyAgICB9CisgICAgCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckltcGxlbWVudGF0aW9uSmF2YUNhbGN1bGF0b3JBc3luYy5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvSlNFTGF1bmNoZXJJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yQXN5bmMuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGNhYjkzCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvSlNFTGF1bmNoZXJJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yQXN5bmMuamF2YQpAQCAtMCwwICsxLDQ0IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSBsYXVuY2hlcjsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCisNCisvKioNCisgKiBUaGlzIGNsaWVudCBwcm9ncmFtIHNob3dzIGhvdyB0byBjcmVhdGUgYW4gZW1iZWRkZWQgU0NBIHJ1bnRpbWUsIGxvYWQgYSBjb250cmlidXRpb24sDQorICogc3RhcnQgaXQgYW5kIGxvY2F0ZSBhbmQgaW52b2tlIGFuIFNDQSBjb21wb25lbnQgDQorICovDQorcHVibGljIGNsYXNzIEpTRUxhdW5jaGVySW1wbGVtZW50YXRpb25KYXZhQ2FsY3VsYXRvckFzeW5jIHsNCisgICAgDQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgSlNFTGF1bmNoZXJJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yQXN5bmMgbGF1bmNoZXIgPSBuZXcgSlNFTGF1bmNoZXJJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yQXN5bmMoKTsNCisgICAgICAgIGxhdW5jaGVyLmxhdW5jaEltcGxlbWVudGF0aW9uSmF2YUNhbGN1bGF0b3IoKTsgICAgICAgICANCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIHZvaWQgbGF1bmNoSW1wbGVtZW50YXRpb25KYXZhQ2FsY3VsYXRvcigpew0KKyAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uLy4uL2xlYXJuaW5nLW1vcmUvYXN5bmMvY2FsY3VsYXRvci1jb250cmlidXRpb24vdGFyZ2V0L3NhbXBsZS1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3ItYXN5bmMtY29udHJpYnV0aW9uLmphciIpKTsNCisgICAgICAgIG5vZGUuc3RhcnQoKTsNCisgICAgICAgIA0KKyAgICAgICAgbm9kZS5zdG9wKCk7DQorICAgIH0NCisgICAgDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL0pTRUxhdW5jaGVySW1wbGVtZW50YXRpb25TY3JpcHRDYWxjdWxhdG9yLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckltcGxlbWVudGF0aW9uU2NyaXB0Q2FsY3VsYXRvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNmU5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9KU0VMYXVuY2hlckltcGxlbWVudGF0aW9uU2NyaXB0Q2FsY3VsYXRvci5qYXZhCkBAIC0wLDAgKzEsNTkgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIGxhdW5jaGVyOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5Ow0KKw0KK2ltcG9ydCBjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlOw0KKw0KKy8qKg0KKyAqIFRoaXMgY2xpZW50IHByb2dyYW0gc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBlbWJlZGRlZCBTQ0EgcnVudGltZSwgbG9hZCBhIGNvbnRyaWJ1dGlvbiwNCisgKiBzdGFydCBpdCBhbmQgbG9jYXRlIGFuZCBpbnZva2UgYW4gU0NBIGNvbXBvbmVudCANCisgKi8NCitwdWJsaWMgY2xhc3MgSlNFTGF1bmNoZXJJbXBsZW1lbnRhdGlvblNjcmlwdENhbGN1bGF0b3Igew0KKyAgICANCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBKU0VMYXVuY2hlckltcGxlbWVudGF0aW9uU2NyaXB0Q2FsY3VsYXRvciBsYXVuY2hlciA9IG5ldyBKU0VMYXVuY2hlckltcGxlbWVudGF0aW9uU2NyaXB0Q2FsY3VsYXRvcigpOw0KKyAgICAgICAgbGF1bmNoZXIubGF1bmNoSW1wbGVtZW50YXRpb25TY3JpcHRDYWxjdWxhdG9yKCk7ICAgICAgICAgDQorICAgIH0NCisgICAgDQorICAgIC8qDQorICAgICAqIFVzaW5nIHRoZSBUdXNjYW55IE5vZGUgQVBJIHRvIGxvYWQgYSBjb250cmlidXRpb24uDQorICAgICAqIFVzaW5nIHRoZSBUdXNjYW55IE5vZGUgQVBJIHRvIGdldCBhIGxvY2FsIHNlcnZpY2UgcHJveHkNCisgICAgICovDQorICAgIHB1YmxpYyB2b2lkIGxhdW5jaEltcGxlbWVudGF0aW9uU2NyaXB0Q2FsY3VsYXRvcigpew0KKyAgICAgICAgTm9kZSBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uLy4uL2xlYXJuaW5nLW1vcmUvaW1wbGVtZW50YXRpb24tc2NyaXB0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3RhcmdldC9zYW1wbGUtaW1wbGVtZW50YXRpb24tc2NyaXB0LWNhbGN1bGF0b3ItY29udHJpYnV0aW9uLmphciIpKTsNCisgICAgICAgIG5vZGUuc3RhcnQoKTsNCisgICAgICAgIA0KKyAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvciA9IG5vZGUuZ2V0U2VydmljZShDYWxjdWxhdG9yU2VydmljZS5jbGFzcywgIkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50Iik7DQorICAgICAgICANCisgICAgICAgIC8vIFRPRE8gLSBjb3VsZCB1c2UgSlVuaXQgYXNzZXJ0aW9ucyBidXQgZG9uJ3Qgd2FudCB0byBoYXZlIHRvIGhhbmRsZSBKVW5pdCBkZXBlbmRlbmN5IGZyb20gQW50IHNjcmlwdA0KKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IGNhbGN1bGF0b3IuYWRkKDMsIDIpOw0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzICsgMiA9ICIgKyByZXN1bHQpOw0KKyAgICAgICAgaWYgKHJlc3VsdCAhPSA1LjApew0KKyAgICAgICAgICAgIHRocm93IG5ldyBTYW1wbGVMYXVuY2hlckV4Y2VwdGlvbigpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBub2RlLnN0b3AoKTsNCisgICAgfQ0KKyAgICANCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVMYXVuY2hlckV4Y2VwdGlvbi5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvU2FtcGxlTGF1bmNoZXJFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVMYXVuY2hlckV4Y2VwdGlvbi5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVMYXVuY2hlckV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL3Rlc3QvamF2YS9sYXVuY2hlci9MYXVuY2hlclRlc3RDYXNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2Uvc3JjL3Rlc3QvamF2YS9sYXVuY2hlci9MYXVuY2hlclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM2YTkzZgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZS9zcmMvdGVzdC9qYXZhL2xhdW5jaGVyL0xhdW5jaGVyVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDYyIEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBsYXVuY2hlcjsNCisNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQorDQorLyoqDQorICogVGVzdCBzYW1wbGUgY29udHJpYnV0aW9ucy4NCisgKi8NCitwdWJsaWMgY2xhc3MgTGF1bmNoZXJUZXN0Q2FzZSB7DQorICAgIA0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QmluZGluZ0pTT05SUENDYWxjdWxhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBKU0VMYXVuY2hlckJpbmRpbmdTQ0FDYWxjdWxhdG9yLm1haW4obnVsbCk7DQorICAgIH0gICAgDQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RCaW5kaW5nU0NBQ2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgSlNFTGF1bmNoZXJCaW5kaW5nU0NBQ2FsY3VsYXRvci5tYWluKG51bGwpOw0KKyAgICB9DQorICAgICAgIA0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0QmluZGluZ1dTQ2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgSlNFTGF1bmNoZXJCaW5kaW5nV1NDYWxjdWxhdG9yLm1haW4obnVsbCk7DQorICAgIH0gICAgIA0KKyAgICANCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdEJpbmRpbmdSTUlDYWxjdWxhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgIAlKU0VMYXVuY2hlckJpbmRpbmdSTUlDYWxjdWxhdG9yLm1haW4obnVsbCk7DQorICAgIH0gDQorICAgIA0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0SW1wbGVtZW50YXRpb25KYXZhQ2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAJSlNFTGF1bmNoZXJJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yLm1haW4obnVsbCk7DQorICAgIH0gICANCisgICAgDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RJbXBsZW1lbnRhdGlvblNjcmlwdENhbGN1bGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIEpTRUxhdW5jaGVySW1wbGVtZW50YXRpb25TY3JpcHRDYWxjdWxhdG9yLm1haW4obnVsbCk7DQorICAgIH0gIA0KKyAgICANCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdEltcGxlbWVudGF0aW9uSmF2YUNhbGN1bGF0b3JBc3luYygpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgSlNFTGF1bmNoZXJJbXBsZW1lbnRhdGlvbkphdmFDYWxjdWxhdG9yQXN5bmMubWFpbihudWxsKTsNCisgICAgfSANCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpLWJhc2UvUkVBRE1FIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS1iYXNlL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpLWJhc2UvUkVBRE1FCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpLWJhc2UvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2ktYmFzZS9idWlsZC54bWwgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpLWJhc2UvYnVpbGQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2ktYmFzZS9idWlsZC54bWwKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2ktYmFzZS9idWlsZC54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2ktYmFzZS9wb20ueG1sIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS1iYXNlL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFlYWQ5NAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2ktYmFzZS9wb20ueG1sCkBAIC0wLDAgKzEsNzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPnNhbXBsZS1sYXVuY2hlci1lbWJlZGRlZC1vc2dpLWJhc2U8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBMYXVuY2hlciBFbWJlZGRlZCBPU0dpIHVzaW5nIGJhc2UgamFyPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtbm9kZXA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLWNsaTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtY2xpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+MS4yPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2U8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vc2dpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+My41LjAtdjIwMDkwNTIwPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2Uub3NnaTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnNlcnZpY2VzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+My4yLjAtdjIwMDkwNTIwLTE4MDA8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+CisKKyAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgIAorICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpLWJhc2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpLWJhc2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS1iYXNlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpLWJhc2Uvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS1iYXNlL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvUnVudGltZUludGVncmF0aW9uLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpLWJhc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9SdW50aW1lSW50ZWdyYXRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpLWJhc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9SdW50aW1lSW50ZWdyYXRpb24uamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS1iYXNlL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvUnVudGltZUludGVncmF0aW9uLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2ktYmFzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZUpTRUxhdW5jaGVyLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpLWJhc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVKU0VMYXVuY2hlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkOGVhN2YKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpLWJhc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVKU0VMYXVuY2hlci5qYXZhCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2UgbGF1bmNoZXI7CisKK2ltcG9ydCBqYXZhLm5ldC5VUkk7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLk5vU3VjaERvbWFpbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5Ob1N1Y2hTZXJ2aWNlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmNsaWVudC5TQ0FDbGllbnRGYWN0b3J5OworCitpbXBvcnQgY2FsY3VsYXRvci5DYWxjdWxhdG9yU2VydmljZTsKKworCisvKioKKyAqIFRoaXMgY2xpZW50IHByb2dyYW0gc2hvd3MgaG93IHRvIGNyZWF0ZSBhbiBlbWJlZGRlZCBTQ0EgcnVudGltZSwgc3RhcnQgaXQsCisgKiBhbmQgbG9jYXRlIGFuZCBpbnZva2UgYSBTQ0EgY29tcG9uZW50IAorICovCitwdWJsaWMgY2xhc3MgU2FtcGxlSlNFTGF1bmNoZXIgZXh0ZW5kcyBSdW50aW1lSW50ZWdyYXRpb24geworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTYW1wbGVKU0VMYXVuY2hlciBsYXVuY2hlciA9IG5ldyBTYW1wbGVKU0VMYXVuY2hlcigpOworICAgICAgICAKKyAgICAgICAgU3RyaW5nIGNvbnRyaWJ1dGlvbiA9IG51bGw7CisgICAgICAgIAorICAgICAgICBpZiAoYXJncyA9PSBudWxsIHx8IGFyZ3MubGVuZ3RoICE9IDEpeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJQbGVhc2UgcHJvdmlkZSB0aGUgbmFtZSBvZiB0aGUgc2FtcGxlIGNvbnRyaWJ1dGlvbiB0byBydW4gYXMgYSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUnVubmluZyBiaW5kaW5nLXNjYS1jYWxjdWxhdG9yIGJ5IGRlZmF1bHQiKTsKKyAgICAgICAgICAgIGNvbnRyaWJ1dGlvbiA9ICJjb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvciI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250cmlidXRpb24gPSBhcmdzWzBdOworICAgICAgICB9ICAgCisgICAgICAgIAorICAgICAgICBpZiAoY29udHJpYnV0aW9uLmVxdWFscygiY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IiKSl7CisgICAgICAgICAgICBsYXVuY2hlci5sYXVuY2hCaW5kaW5nU0NBQ2FsY3VsYXRvcigpOworICAgICAgICB9IGVsc2UgaWYgKGNvbnRyaWJ1dGlvbi5lcXVhbHMoImNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IiKSl7CisgICAgICAgICAgICBsYXVuY2hlci5sYXVuY2hCaW5kaW5nV1NDYWxjdWxhdG9yKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNhbXBsZSBjb250cmlidXRpb24gIiArIGNvbnRyaWJ1dGlvbiArICJub3QgZm91bmQiKTsKKyAgICAgICAgfQorCisgICAgfQorICAgICAgIAorICAgIC8qKgorICAgICAqIFRoZSBjb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvciBjb250cmlidXRpb24gaW5jbHVkZXMgYSBjbGllbnQgY29tcG9uZW50IAorICAgICAqIHRoYXQgY2FsbHMgdGhlIENhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50IGZyb20gYW4gb3BlcmF0aW9uIG1hcmtlZCBieSBASW5pdC4gCisgICAgICovCisgICAgcHVibGljIHZvaWQgbGF1bmNoQmluZGluZ1NDQUNhbGN1bGF0b3IoKXsKKyAgICAgICAgTm9kZSBub2RlID0gc3RhcnROb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uLy4uL2xlYXJuaW5nLW1vcmUvYmluZGluZy1zY2EvY2FsY3VsYXRvci1jb250cmlidXRpb24vdGFyZ2V0L3NhbXBsZS1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi5qYXIiKSk7CisgICAgICAgIAorICAgICAgICBzdG9wTm9kZShub2RlKTsKKyAgICB9ICAgIAorICAgIAorICAgIC8qCisgICAgICogVXNpbmcgYSBUdXNjYW55IHNwZWNpZmljIG1lY2hhbmlzbSBmb3IgZ2V0dGluZyBhdCBsb2NhbCBzZXJ2aWNlIHByb3hpZXMKKyAgICAgKi8KKyAgICBwdWJsaWMgdm9pZCBsYXVuY2hCaW5kaW5nV1NDYWxjdWxhdG9yKCkgdGhyb3dzIE5vU3VjaERvbWFpbkV4Y2VwdGlvbiwgTm9TdWNoU2VydmljZUV4Y2VwdGlvbnsKKyAgICAgICAgTm9kZSBub2RlID0gc3RhcnROb2RlKG5ldyBDb250cmlidXRpb24oImMxIiwgIi4uLy4uL2xlYXJuaW5nLW1vcmUvYmluZGluZy13cy9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi90YXJnZXQvc2FtcGxlLWJpbmRpbmctd3MtY2FsY3VsYXRvci1jb250cmlidXRpb24uamFyIikpOworICAgICAgICAKKyAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvciA9IG5vZGUuZ2V0U2VydmljZShDYWxjdWxhdG9yU2VydmljZS5jbGFzcywgIkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50Iik7CisgICAgICAgICAgICAgICAKKyAgICAgICAgZG91YmxlIHJlc3VsdCA9IGNhbGN1bGF0b3IuYWRkKDMsIDIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjMgKyAyID0gIiArIHJlc3VsdCk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gNS4wKXsKKyAgICAgICAgICAgIHRocm93IG5ldyBTYW1wbGVMYXVuY2hlckV4Y2VwdGlvbigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdG9wTm9kZShub2RlKTsKKyAgICB9CisgICAgCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2ktYmFzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZUxhdW5jaGVyRXhjZXB0aW9uLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpLWJhc2Uvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVMYXVuY2hlckV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2ktYmFzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZUxhdW5jaGVyRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2ktYmFzZS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZUxhdW5jaGVyRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaS1iYXNlL3NyYy90ZXN0L2phdmEvbGF1bmNoZXIvTGF1bmNoZXJUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS1iYXNlL3NyYy90ZXN0L2phdmEvbGF1bmNoZXIvTGF1bmNoZXJUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2ktYmFzZS9zcmMvdGVzdC9qYXZhL2xhdW5jaGVyL0xhdW5jaGVyVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS1iYXNlL3NyYy90ZXN0L2phdmEvbGF1bmNoZXIvTGF1bmNoZXJUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpL1JFQURNRSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMzUyZmEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpL1JFQURNRQpAQCAtMCwwICsxLDIwIEBACitPU0dJIFNhbXBsZSBMYXVuY2hlcg0KKz09PT09PT09PT09PT09PT09PT0NCisNCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIHNhbXBsZSBsYXVuY2hlciBmb3IgdGhlIHJ1bm5pbmcgdGhlDQordHVzY2FueSBzYW1wbGUgY29udHJpYnV0aW9ucyBpbiBhbiBPU0dJIGVudmlyb25tZW50Lg0KKw0KK1RoZSBSRUFETUUgZmlsZSBpbiB0aGUgPGRpc3RyaWJ1dGlvbi11bnBhY2stZGlyPi9zYW1wbGVzIGRpcmVjdG9yeSBwcm92aWRlcyANCitnZW5lcmFsIGluc3RydWN0aW9ucyBhYm91dCBidWlsZGluZyBhbmQgcnVubmluZyBzYW1wbGUgY29udHJpYnV0aW9ucyB1c2luZyB0aGUNCit0dXNjYW55IHNhbXBsZSBsYXVuY2hlcnMuICggd2hlcmUNCitkaXN0cmlidXRpb24tdW5wYWNrLWRpciBpcyB0aGUgZGlyZWN0b3J5IGluIHdoaWNoIHlvdSB1bnBhY2tlZCB0aGUgdHVzY2FueQ0KK2JpbmFyeSBkaXN0cmlidXRpb24gYXJjaGl2ZSkNCisNCitUbyB1c2UgdGhpcyBzYW1wbGUgT1NHSSBsYXVuY2hlciB3aXRoIGFudCBleGN1dGUgdGhlIGNvbW1hbmQNCisNCithbnQgPGNvbnRyaWJ1dGlvbm5hbWU+DQorDQord2hlcmUgPGNvbnRyaWJ1dGlvbm5hbWU+IGlzIG9uZSBvZiB0aGUgdGFyZ2V0cyBpbiB0aGUgcHJvdmlkZWQgYnVpbGQueG1sIGZpbGUNCisNCitUbyB1c2UgdGhpcyBzYW1wbGUgbGF1bmNoZXIgdG8gcnVuIGFsbCBvZiB0aGUgY29udHJpYnV0aW9ucyBhcyBqdW5pdCB0ZXN0IGNhc2VzLA0KK2V4ZWN1dGUgdGhlIGNvbW1hbmQgIm12biIgaW4gdGhlIGxhdW5jaGVyIGRpcmVjdG9yeS4NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpL2J1aWxkLnhtbCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMWY1OTEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpL2J1aWxkLnhtbApAQCAtMCwwICsxLDk4IEBACis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdCBuYW1lPSJsYXVuY2hlci1lbWJlZGRlZC1vc2dpIiBkZWZhdWx0PSJydW4iPiANCisJPHByb3BlcnR5IG5hbWU9InR1c2NhbnkuaG9tZSIgdmFsdWU9Ii4uLy4uLy4uIi8+DQorICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXIubmFtZSIgICB2YWx1ZT0ic2FtcGxlLWxhdW5jaGVyLWVtYmVkZGVkLW9zZ2kuamFyIiAvPg0KKwkNCisJPGVjaG8+JHt0dXNjYW55LmhvbWV9PC9lY2hvPg0KKw0KKyAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPiANCisgICAgICA8ZGVsZXRlIHF1aWV0PSJ0cnVlIiBpbmNsdWRlZW1wdHlkaXJzPSJ0cnVlIj4gDQorICAgICAgICAgPGZpbGVzZXQgZGlyPSJ0YXJnZXQiLz4gDQorICAgICAgPC9kZWxldGU+IA0KKyAgICAgIDxta2RpciBkaXI9InRhcmdldC9jbGFzc2VzIi8+IA0KKyAgICA8L3RhcmdldD4NCisJDQorICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCI+DQorICAgICAgPGphdmFjIHNyY2Rpcj0ic3JjL21haW4vamF2YSIgDQorICAgICAgCSAgICAgZGVzdGRpcj0idGFyZ2V0L2NsYXNzZXMiIA0KKyAgICAgIAkgICAgIGRlYnVnPSJvbiINCisgICAgICAgICAgICAgc291cmNlPSIxLjUiDQorICAgICAgICAgICAgIHRhcmdldD0iMS41Ig0KKyAgICAgIAkgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4gDQorICAgICAgICAgPGNsYXNzcGF0aD4NCisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dHVzY2FueS5ob21lfS9saWIiPg0KKyAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2NhbnktYmFzZS0qLmphciIgLz4NCisgICAgICAgICAgICA8L2ZpbGVzZXQ+DQorICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L21vZHVsZXMiPg0KKyAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LW5vZGUtYXBpLSouamFyIiAvPg0KKyAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LXNjYS1hcGktKi5qYXIiIC8+DQorICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktbm9kZS1sYXVuY2hlci1lcXVpbm94LSouamFyIiAvPg0KKyAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+IA0KKyAgICAgICAgIDwvY2xhc3NwYXRoPg0KKyAgICAgIDwvamF2YWM+IA0KKyAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke2phci5uYW1lfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPiANCisgICAgICAgICA8bWFuaWZlc3Q+DQorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0iJHttYWluLmNsYXNzfSIgLz4gDQorICAgICAgICAgPC9tYW5pZmVzdD4NCisgICAgICA8L2phcj4gICAgCQ0KKyAgICA8L3RhcmdldD4NCisJDQorCTx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJjb21waWxlIj4NCisJCTxlY2hvPlBsZWFzZSB1c2UgJ2FudCBydW4tbmFtZS1vZi1zYW1wbGUtY29udHJpYnV0aW9uLXRvLXJ1bicgZm9yIGV4YW1wbGUsIHRyeSBvbmUgb2Y8L2VjaG8+DQorCQk8ZWNobz4gICdhbnQgc2FtcGxlLWJpbmRpbmctc2NhLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uJyA8L2VjaG8+DQorICAgIDwvdGFyZ2V0Pg0KKwkNCisgICAgPHRhcmdldCBuYW1lPSJzYW1wbGUtYmluZGluZy1zY2EtY2FsY3VsYXRvci1jb250cmlidXRpb24iIGRlcGVuZHM9ImNvbXBpbGUiPg0KKyAgICAgICAgPGphdmEgY2xhc3NuYW1lPSJsYXVuY2hlci5TYW1wbGVPU0dJTGF1bmNoZXJCaW5kaW5nU0NBIg0KKyAgICAgICAgICAgICAgZm9yaz0idHJ1ZSINCisgICAgICAgICAgICAgIGZhaWxvbmVycm9yPSJ0cnVlIj4NCisgICAgICAgICAgICA8Y2xhc3NwYXRoPiAgDQorICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBsb2NhdGlvbj0idGFyZ2V0LyR7amFyLm5hbWV9Ii8+DQorICAgICAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L21vZHVsZXMiPg0KKyAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LW5vZGUtYXBpLSouamFyIiAvPg0KKyAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LXNjYS1hcGktKi5qYXIiIC8+DQorICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktbm9kZS1sYXVuY2hlci1lcXVpbm94LSouamFyIiAvPg0KKyAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+IA0KKyAgICAgICAgICAgIDwvY2xhc3NwYXRoPiANCisgICAgICAgICAgICA8YXJnIHZhbHVlPSJjb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvciIvPiANCisgICAgICAgIDwvamF2YT4gICAgIA0KKyAgICAJPGVjaG8+ICBhbmQgYW50IHJ1biA8L2VjaG8+DQorICAgIDwvdGFyZ2V0PgkNCisNCisJPCEtLSBUT0RPIC0gdGhpcyBydW5zIGZyb20gbXZuIGJ1dCBub3QgZnJvbSBhbnQgc28gdGhlcmUgaXMgc29tZSBpc3N1ZSB3aXRoIHRoZSANCisJICAgICAgICAgICAgd2F5IHRoZSBlbnZpcm9ubWVudCBnZXRzIHNldCB1cA0KKyAgICA8dGFyZ2V0IG5hbWU9InNhbXBsZS1iaW5kaW5nLXdzLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uIiBkZXBlbmRzPSJjb21waWxlIj4NCisgICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iJHttYWluLmNsYXNzfSINCisgICAgICAgICAgICAgIGZvcms9InRydWUiDQorICAgICAgICAJICBmYWlsb25lcnJvcj0idHJ1ZSI+DQorICAgICAgICAgICAgPGNsYXNzcGF0aD4gIA0KKyAgICAgICAgICAgICAgICA8cGF0aGVsZW1lbnQgbG9jYXRpb249InRhcmdldC8ke2phci5uYW1lfSIvPg0KKyAgICAgICAgICAgICAgICA8ZmlsZXNldCBkaXI9IiR7dHVzY2FueS5ob21lfS9tb2R1bGVzIj4NCisgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1ub2RlLWFwaS0qLmphciIgLz4NCisgICAgICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtYXBpLSouamFyIiAvPg0KKyAgICAgICAgICAgICAgICAgICA8aW5jbHVkZSBuYW1lPSJ0dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veC0qLmphciIgLz4NCisgICAgICAgICAgICAgICAgPC9maWxlc2V0PiANCisgICAgICAgICAgICA8L2NsYXNzcGF0aD4gDQorICAgICAgICAJPGFyZyB2YWx1ZT0iY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvciIvPiANCisgICAgICAgIDwvamF2YT4gICAgCQ0KKyAgICA8L3RhcmdldD4NCisJLS0+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvcG9tLnhtbCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTI2M2EyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS9wb20ueG1sCkBAIC0wLDAgKzEsNzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIDxhcnRpZmFjdElkPnNhbXBsZS1sYXVuY2hlci1lbWJlZGRlZC1vc2dpPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIExhdW5jaGVyIEVtYmVkZGVkIE9TR2k8L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1vc2dpLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+IA0KKyAgICAgICAgDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorICAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgICAgICAgIA0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisNCisgICAgICAgPHBsdWdpbnM+DQorICAgICAgICAgDQorICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2kvc3JjL21haW4vamF2YS9sYXVuY2hlci9SdW50aW1lSW50ZWdyYXRpb24uamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvc3JjL21haW4vamF2YS9sYXVuY2hlci9SdW50aW1lSW50ZWdyYXRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvUnVudGltZUludGVncmF0aW9uLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvc3JjL21haW4vamF2YS9sYXVuY2hlci9SdW50aW1lSW50ZWdyYXRpb24uamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvU2FtcGxlTGF1bmNoZXJFeGNlcHRpb24uamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVMYXVuY2hlckV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xhdW5jaGVyLWVtYmVkZGVkLW9zZ2kvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVMYXVuY2hlckV4Y2VwdGlvbi5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvU2FtcGxlTGF1bmNoZXJFeGNlcHRpb24uamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZU9TR0lMYXVuY2hlckJpbmRpbmdTQ0EuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVPU0dJTGF1bmNoZXJCaW5kaW5nU0NBLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY4MzA2MgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvc3JjL21haW4vamF2YS9sYXVuY2hlci9TYW1wbGVPU0dJTGF1bmNoZXJCaW5kaW5nU0NBLmphdmEKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBsYXVuY2hlcjsKKworaW1wb3J0IGphdmEubmV0LlVSSTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuTm9TdWNoRG9tYWluRXhjZXB0aW9uOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLk5vU3VjaFNlcnZpY2VFeGNlcHRpb247CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuY2xpZW50LlNDQUNsaWVudEZhY3Rvcnk7CisKK2ltcG9ydCBjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlOworCisKKy8qKgorICogVGhpcyBjbGllbnQgcHJvZ3JhbSBzaG93cyBob3cgdG8gY3JlYXRlIGFuIGVtYmVkZGVkIFNDQSBydW50aW1lLCBzdGFydCBpdCwKKyAqIGFuZCBsb2NhdGUgYW5kIGludm9rZSBhIFNDQSBjb21wb25lbnQgCisgKi8KK3B1YmxpYyBjbGFzcyBTYW1wbGVPU0dJTGF1bmNoZXJCaW5kaW5nU0NBIGV4dGVuZHMgUnVudGltZUludGVncmF0aW9uIHsKKyAgICAKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU2FtcGxlT1NHSUxhdW5jaGVyQmluZGluZ1NDQSBsYXVuY2hlciA9IG5ldyBTYW1wbGVPU0dJTGF1bmNoZXJCaW5kaW5nU0NBKCk7CisgCisgICAgICAgIAorICAgICAgICBOb2RlIG5vZGUgPSBsYXVuY2hlci5zdGFydE5vZGUobmV3IENvbnRyaWJ1dGlvbigiYzEiLCAiLi4vLi4vbGVhcm5pbmctbW9yZS9iaW5kaW5nLXNjYS9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi90YXJnZXQvc2FtcGxlLWJpbmRpbmctc2NhLWNhbGN1bGF0b3ItY29udHJpYnV0aW9uLmphciIpKTsKKyAgICAgICAgbGF1bmNoZXIuc3RvcE5vZGUobm9kZSk7CisgICAgfQorICAgIAorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZU9TR0lMYXVuY2hlckJpbmRpbmdXUy5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS9zcmMvbWFpbi9qYXZhL2xhdW5jaGVyL1NhbXBsZU9TR0lMYXVuY2hlckJpbmRpbmdXUy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5Mjk5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1vc2dpL3NyYy9tYWluL2phdmEvbGF1bmNoZXIvU2FtcGxlT1NHSUxhdW5jaGVyQmluZGluZ1dTLmphdmEKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBsYXVuY2hlcjsKKworaW1wb3J0IGphdmEubmV0LlVSSTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuTm9TdWNoRG9tYWluRXhjZXB0aW9uOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLk5vU3VjaFNlcnZpY2VFeGNlcHRpb247CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuY2xpZW50LlNDQUNsaWVudEZhY3Rvcnk7CisKK2ltcG9ydCBjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlOworCisKKy8qKgorICogVGhpcyBjbGllbnQgcHJvZ3JhbSBzaG93cyBob3cgdG8gY3JlYXRlIGFuIGVtYmVkZGVkIFNDQSBydW50aW1lLCBzdGFydCBpdCwKKyAqIGFuZCBsb2NhdGUgYW5kIGludm9rZSBhIFNDQSBjb21wb25lbnQgCisgKi8KK3B1YmxpYyBjbGFzcyBTYW1wbGVPU0dJTGF1bmNoZXJCaW5kaW5nV1MgZXh0ZW5kcyBSdW50aW1lSW50ZWdyYXRpb24geworICAgIAorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTYW1wbGVPU0dJTGF1bmNoZXJCaW5kaW5nV1MgbGF1bmNoZXIgPSBuZXcgU2FtcGxlT1NHSUxhdW5jaGVyQmluZGluZ1dTKCk7CisgICAgICAgIAorICAgICAgICAvLyBsYXVuY2hlci5sYXVuY2hCaW5kaW5nV1NDYWxjdWxhdG9yKCk7CisgICAgICAgIAorICAgICAgICBOb2RlIG5vZGUgPSBsYXVuY2hlci5zdGFydE5vZGUobmV3IENvbnRyaWJ1dGlvbigiYzEiLCAiLi4vLi4vbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3RhcmdldC9zYW1wbGUtYmluZGluZy13cy1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi5qYXIiKSk7CisgICAgICAgIAorICAgICAgICBDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yID0gbm9kZS5nZXRTZXJ2aWNlKENhbGN1bGF0b3JTZXJ2aWNlLmNsYXNzLCAiQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQiKTsKKyAgICAgICAgICAgICAgIAorICAgICAgICBkb3VibGUgcmVzdWx0ID0gY2FsY3VsYXRvci5hZGQoMywgMik7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyArIDIgPSAiICsgcmVzdWx0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA1LjApeworICAgICAgICAgICAgdGhyb3cgbmV3IFNhbXBsZUxhdW5jaGVyRXhjZXB0aW9uKCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxhdW5jaGVyLnN0b3BOb2RlKG5vZGUpOworICAgIH0KKyAgICAgICAKKyAgICAvKioKKyAgICAgKiBUaGUgY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IgY29udHJpYnV0aW9uIGluY2x1ZGVzIGEgY2xpZW50IGNvbXBvbmVudCAKKyAgICAgKiB0aGF0IGNhbGxzIHRoZSBDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCBmcm9tIGFuIG9wZXJhdGlvbiBtYXJrZWQgYnkgQEluaXQuIAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIGxhdW5jaEJpbmRpbmdTQ0FDYWxjdWxhdG9yKCl7CisgICAgICAgIE5vZGUgbm9kZSA9IHN0YXJ0Tm9kZShuZXcgQ29udHJpYnV0aW9uKCJjMSIsICIuLi8uLi9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3RhcmdldC9zYW1wbGUtY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IuamFyIikpOworICAgICAgICAKKyAgICAgICAgc3RvcE5vZGUobm9kZSk7CisgICAgfSAgICAKKyAgICAKKyAgICAvKgorICAgICAqIFVzaW5nIGEgVHVzY2FueSBzcGVjaWZpYyBtZWNoYW5pc20gZm9yIGdldHRpbmcgYXQgbG9jYWwgc2VydmljZSBwcm94aWVzCisgICAgICovCisgICAgcHVibGljIHZvaWQgbGF1bmNoQmluZGluZ1dTQ2FsY3VsYXRvcigpIHRocm93cyBOb1N1Y2hEb21haW5FeGNlcHRpb24sIE5vU3VjaFNlcnZpY2VFeGNlcHRpb257CisgICAgICAgIE5vZGUgbm9kZSA9IHN0YXJ0Tm9kZShuZXcgQ29udHJpYnV0aW9uKCJjMSIsICIuLi8uLi9sZWFybmluZy1tb3JlL2JpbmRpbmctd3MvY29udHJpYnV0aW9uLWNhbGN1bGF0b3IvdGFyZ2V0L3NhbXBsZS1jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yLmphciIpKTsKKyAgICAgICAgCisgICAgICAgIENhbGN1bGF0b3JTZXJ2aWNlIGNhbGN1bGF0b3IgPSBub2RlLmdldFNlcnZpY2UoQ2FsY3VsYXRvclNlcnZpY2UuY2xhc3MsICJDYWxjdWxhdG9yU2VydmljZUNvbXBvbmVudCIpOworICAgICAgICAgICAgICAgCisgICAgICAgIGRvdWJsZSByZXN1bHQgPSBjYWxjdWxhdG9yLmFkZCgzLCAyKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzICsgMiA9ICIgKyByZXN1bHQpOworICAgICAgICBpZiAocmVzdWx0ICE9IDUuMCl7CisgICAgICAgICAgICB0aHJvdyBuZXcgU2FtcGxlTGF1bmNoZXJFeGNlcHRpb24oKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RvcE5vZGUobm9kZSk7CisgICAgfQorICAgIAorfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtb3NnaS9zcmMvdGVzdC9qYXZhL2xhdW5jaGVyL0xhdW5jaGVyVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvc3JjL3Rlc3QvamF2YS9sYXVuY2hlci9MYXVuY2hlclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5NDg0YwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kvc3JjL3Rlc3QvamF2YS9sYXVuY2hlci9MYXVuY2hlclRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw0MSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgbGF1bmNoZXI7DQorDQoraW1wb3J0IG9yZy5qdW5pdC5UZXN0Ow0KKw0KKw0KKw0KKy8qKg0KKyAqIFRlc3QgdGhlIENhbGN1bGF0b3IgY29tcG9zaXRpb24uDQorICovDQorcHVibGljIGNsYXNzIExhdW5jaGVyVGVzdENhc2Ugew0KKw0KKyAgICAgDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RDb250cmlidXRpb25CaW5kaW5nU0NBQ2FsY3VsYXRvcjIoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIFNhbXBsZU9TR0lMYXVuY2hlckJpbmRpbmdTQ0EubWFpbihudWxsKTsNCisgICAgfQ0KKyAgICANCisgICANCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdENvbnRyaWJ1dGlvbkJpbmRpbmdXU0NhbGN1bGF0b3IoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIFNhbXBsZU9TR0lMYXVuY2hlckJpbmRpbmdXUy5tYWluKG51bGwpOw0KKyAgICB9ICAgDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL1JFQURNRSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTViYzljCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vUkVBRE1FCkBAIC0wLDAgKzEsMjYgQEAKK0NhbGN1bGF0b3IgU2FtcGxlIENvbnRyaWJ1dGlvbg0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KK1RoaXMgc2FtcGxlIGNvbnRyaWJ1dGlvbiBpbXBsZW1lbnRzIGEgc2ltcGxlIGNhbGN1bGF0b3IgdXNpbmcgU0NBIGNvbXBvbmVudHMuDQorDQorVGhlIFJFQURNRSBpbiB0aGUgPGRpc3RyaWJ1dGlvbi11bnBhY2stZGlyPi9zYW1wbGVzIGRpcmVjdG9yeSBwcm92aWRlcyANCitnZW5lcmFsIGluc3RydWN0aW9ucyBhYm91dCBidWlsZGluZyBhbmQgcnVubmluZyBzYW1wbGVzLiAoIHdoZXJlDQorZGlzdHJpYnV0aW9uLXVucGFjay1kaXIgaXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB5b3UgdW5wYWNrZWQgdGhlIHR1c2NhbnkNCitiaW5hcnkgZGlzdHJpYnV0aW9uIGFyY2hpdmUpIFRha2UgYSBsb29rIHRoZXJlIGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGxhdW5jaA0KK3RoaXMgc2FtcGxlIGNvbnRyaWJ1dGlvbi4gDQorDQorU2FtcGxlIE92ZXJ2aWV3DQorLS0tLS0tLS0tLS0tLS0tDQorVGhlIHNhbXBsZSBwcm92aWRlcyBhIHNpbmdsZSBjYWxjdWxhdG9yIHNlcnZpY2Ugd2l0aCBhIGRlZmF1bHQgU0NBIChqYXZhKSANCitiaW5kaW5nLiBUaGUgQ2FsY3VsYXRvckNsaWVudCBleGVyY2lzZXMgdGhpcyBpbnRlcmZhY2UgYnkgY2FsbGluZyBhZGQsIA0KK3N1YnRyYWN0LCBtdWx0aXBseSBhbmQgZGl2aWRlIG9wZXJhdGlvbnMuIFRoaXMgcmVzdWx0cyBpbiBtZXNzYWdlcyBwYXNzaW5nIHRvIA0KK3RoZSBhcHByb3ByaWF0ZSBjb21wb25lbnRzIGluIHRoZSBjb21wb3NpdGUgYWNyb3NzIHRoZSBsb2NhbCB3aXJlcy4NCisNCitBbW9uZ3N0IHRoZSBvdGhlciBvdXRwdXQgY3JlYXRlZCBieSB0aGUgbGF1bmNoZXIvY29udHJpYnV0aW9uIGNvbWJpbmF0aW9uLCAgeW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQgLi4uDQorDQorcnVuOg0KKyAgICAgW2phdmFdIDMgKyAyPTUuMA0KKyAgICAgW2phdmFdIDMgLSAyPTEuMA0KKyAgICAgW2phdmFdIDMgKiAyPTYuMA0KKyAgICAgW2phdmFdIDMgLyAyPTEuNQ0KKw0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL2J1aWxkLnhtbCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDA2MjEwCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vYnVpbGQueG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKw0KKzxwcm9qZWN0IG5hbWU9InNhbXBsZS1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbiIgZGVmYXVsdD0iY29tcGlsZSI+DQorICAgIDxwcm9wZXJ0eSBuYW1lPSJ0dXNjYW55LmhvbWUiIHZhbHVlPSIuLi8uLi8uLi8uLiIvPg0KKyAgICA8cHJvcGVydHkgbmFtZT0iamFyLm5hbWUiICAgdmFsdWU9InNhbXBsZS1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi5qYXIiIC8+DQorICAgIA0KKyAgICA8ZWNobz4ke3R1c2NhbnkuaG9tZX08L2VjaG8+DQorDQorICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+IA0KKyAgICAgIDxkZWxldGUgcXVpZXQ9InRydWUiIGluY2x1ZGVlbXB0eWRpcnM9InRydWUiPiANCisgICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPiANCisgICAgICA8L2RlbGV0ZT4gDQorICAgICAgPG1rZGlyIGRpcj0idGFyZ2V0L2NsYXNzZXMiLz4gDQorICAgIDwvdGFyZ2V0Pg0KKyAgICANCisgICAgPHRhcmdldCBuYW1lPSJjb21waWxlIiBkZXBlbmRzPSJpbml0Ij4NCisgICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIiANCisgICAgICAgICAgICAgZGVzdGRpcj0idGFyZ2V0L2NsYXNzZXMiIA0KKyAgICAgICAgICAgICBkZWJ1Zz0ib24iDQorICAgICAgICAgICAgIHNvdXJjZT0iMS41Ig0KKyAgICAgICAgICAgICB0YXJnZXQ9IjEuNSINCisgICAgICAgICAgICAgZmFpbG9uZXJyb3I9InRydWUiPiANCisgICAgICAgICA8Y2xhc3NwYXRoPg0KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0iJHt0dXNjYW55LmhvbWV9L2xpYiI+DQorICAgICAgICAgICAgICAgPGluY2x1ZGUgbmFtZT0idHVzY2FueS1zY2EtYXBpLSouamFyIiAvPg0KKyAgICAgICAgICAgIDwvZmlsZXNldD4NCisgICAgICAgICA8L2NsYXNzcGF0aD4NCisgICAgICA8L2phdmFjPiANCisgICAgICA8Y29weSB0b2Rpcj0idGFyZ2V0L2NsYXNzZXMiPiANCisgICAgICAgICA8ZmlsZXNldCBkaXI9InNyYy9tYWluL3Jlc291cmNlcyIvPiANCisgICAgICA8L2NvcHk+IA0KKyAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke2phci5uYW1lfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPiANCisgICAgICAgICA8bWFuaWZlc3Q+DQorICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJNYWluLUNsYXNzIiB2YWx1ZT0iJHttYWluLmNsYXNzfSIgLz4gDQorICAgICAgICAgPC9tYW5pZmVzdD4NCisgICAgICA8L2phcj4gICAgICAgIA0KKyAgICA8L3RhcmdldD4NCis8L3Byb2plY3Q+DQorDQorDQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vcG9tLnhtbCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI1OTMxZQotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3BvbS54bWwKQEAgLTAsMCArMSw1OCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLW1hdmVuLWp1bml0LWNhbGN1bGF0b3ItY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIE1hdmVuIEpVbml0IENhbGN1bGF0b3IgQ29udHJpYnV0aW9uPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1wb208L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICAgICA8cGx1Z2lucz4NCisgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXR1c2NhbnktcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgIDwvcGx1Z2luPg0KKyAgICAgICA8L3BsdWdpbnM+DQorICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWExZTdhNgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwyOCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCisvKioNCisgKiBUaGUgQWRkIHNlcnZpY2UgaW50ZXJmYWNlDQorICovDQorcHVibGljIGludGVyZmFjZSBBZGRTZXJ2aWNlIHsNCisNCisgICAgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2NzFjYwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQWRkIHNlcnZpY2UNCisgKi8NCitAU2VydmljZShBZGRTZXJ2aWNlLmNsYXNzKQ0KK3B1YmxpYyBjbGFzcyBBZGRTZXJ2aWNlSW1wbCBpbXBsZW1lbnRzIEFkZFNlcnZpY2Ugew0KKw0KKyAgICBwdWJsaWMgZG91YmxlIGFkZChkb3VibGUgbjEsIGRvdWJsZSBuMikgew0KKyAgICAgICAgTG9nZ2VyIGxvZ2dlciA9IExvZ2dlci5nZXRMb2dnZXIoImNhbGN1bGF0b3IiKTsNCisgICAgICAgIGxvZ2dlci5sb2coTGV2ZWwuRklORVNULCAiQWRkaW5nICIgKyBuMSArICIgYW5kICIgKyBuMik7DQorICAgICAgICByZXR1cm4gbjEgKyBuMjsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGYxZjMxCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpAQCAtMCwwICsxLDUyIEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkVhZ2VySW5pdDsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Jbml0Ow0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TY29wZTsNCisNCisvKioNCisgKiBUaGlzIGNsaWVudCBwcm9ncmFtIHNob3dzIGhvdyB0byBjcmVhdGUgYW4gU0NBIHJ1bnRpbWUsIHN0YXJ0IGl0LA0KKyAqIGFuZCBsb2NhdGUgYW5kIGludm9rZSBhIFNDQSBjb21wb25lbnQNCisgKi8NCitAU2NvcGUoIkNPTVBPU0lURSIpDQorQEVhZ2VySW5pdA0KK3B1YmxpYyBjbGFzcyBDYWxjdWxhdG9yQ2xpZW50IHsNCisNCisgICAgcHJpdmF0ZSBDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yU2VydmljZTsNCisNCisgICAgQFJlZmVyZW5jZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRDYWxjdWxhdG9yU2VydmljZShDYWxjdWxhdG9yU2VydmljZSBjYWxjdWxhdG9yU2VydmljZSkgew0KKyAgICAgICAgdGhpcy5jYWxjdWxhdG9yU2VydmljZSA9IGNhbGN1bGF0b3JTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBJbml0DQorICAgIHB1YmxpYyB2b2lkIGNhbGN1bGF0ZSgpIHsNCisgICAgICAgIC8vIENhbGN1bGF0ZQ0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJTQ0EgQVBJIENsYXNzTG9hZGVyOiAiICsgUmVmZXJlbmNlLmNsYXNzLmdldENsYXNzTG9hZGVyKCkpOw0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIzICsgMj0iICsgY2FsY3VsYXRvclNlcnZpY2UuYWRkKDMsIDIpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAtIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLnN1YnRyYWN0KDMsIDIpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAqIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLm11bHRpcGx5KDMsIDIpKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiMyAvIDI9IiArIGNhbGN1bGF0b3JTZXJ2aWNlLmRpdmlkZSgzLCAyKSk7DQorICAgIH0NCisNCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGVlYTM5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2UgY2FsY3VsYXRvcjsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZW1vdGFibGU7DQorDQorLyoqDQorICogVGhlIENhbGN1bGF0b3Igc2VydmljZSBpbnRlcmZhY2UuDQorICovDQorQFJlbW90YWJsZQ0KK3B1YmxpYyBpbnRlcmZhY2UgQ2FsY3VsYXRvclNlcnZpY2Ugew0KKw0KKyAgICBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCisgICAgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCisgICAgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKTsNCisNCisgICAgZG91YmxlIGRpdmlkZShkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTRiMDgyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsNzIgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNlcnZpY2U7DQorDQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIENhbGN1bGF0b3Igc2VydmljZS4NCisgKi8NCitAU2VydmljZShDYWxjdWxhdG9yU2VydmljZS5jbGFzcykNCitwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclNlcnZpY2VJbXBsIGltcGxlbWVudHMgQ2FsY3VsYXRvclNlcnZpY2Ugew0KKw0KKyAgICBwcml2YXRlIEFkZFNlcnZpY2UgYWRkU2VydmljZTsNCisgICAgcHJpdmF0ZSBTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3RTZXJ2aWNlOw0KKyAgICBwcml2YXRlIE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2U7DQorICAgIHByaXZhdGUgRGl2aWRlU2VydmljZSBkaXZpZGVTZXJ2aWNlOw0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyB2b2lkIHNldEFkZFNlcnZpY2UoQWRkU2VydmljZSBhZGRTZXJ2aWNlKSB7DQorICAgICAgICB0aGlzLmFkZFNlcnZpY2UgPSBhZGRTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0U3VidHJhY3RTZXJ2aWNlKFN1YnRyYWN0U2VydmljZSBzdWJ0cmFjdFNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMuc3VidHJhY3RTZXJ2aWNlID0gc3VidHJhY3RTZXJ2aWNlOw0KKyAgICB9DQorDQorICAgIEBSZWZlcmVuY2UNCisgICAgcHVibGljIHZvaWQgc2V0RGl2aWRlU2VydmljZShEaXZpZGVTZXJ2aWNlIGRpdmlkZVNlcnZpY2UpIHsNCisgICAgICAgIHRoaXMuZGl2aWRlU2VydmljZSA9IGRpdmlkZVNlcnZpY2U7DQorICAgIH0NCisNCisgICAgQFJlZmVyZW5jZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRNdWx0aXBseVNlcnZpY2UoTXVsdGlwbHlTZXJ2aWNlIG11bHRpcGx5U2VydmljZSkgew0KKyAgICAgICAgdGhpcy5tdWx0aXBseVNlcnZpY2UgPSBtdWx0aXBseVNlcnZpY2U7DQorICAgIH0NCisNCisgICAgcHVibGljIGRvdWJsZSBhZGQoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIHJldHVybiBhZGRTZXJ2aWNlLmFkZChuMSwgbjIpOw0KKyAgICB9DQorDQorICAgIHB1YmxpYyBkb3VibGUgc3VidHJhY3QoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIHJldHVybiBzdWJ0cmFjdFNlcnZpY2Uuc3VidHJhY3QobjEsIG4yKTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICByZXR1cm4gbXVsdGlwbHlTZXJ2aWNlLm11bHRpcGx5KG4xLCBuMik7DQorICAgIH0NCisNCisgICAgcHVibGljIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpIHsNCisgICAgICAgIHJldHVybiBkaXZpZGVTZXJ2aWNlLmRpdmlkZShuMSwgbjIpOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNmE4YjMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorLyoqDQorICogVGhlIGRpdmlkZSBzZXJ2aWNlIGludGVyZmFjZQ0KKyAqLw0KK3B1YmxpYyBpbnRlcmZhY2UgRGl2aWRlU2VydmljZSB7DQorDQorICAgIGRvdWJsZSBkaXZpZGUoZG91YmxlIG4xLCBkb3VibGUgbjIpOw0KKw0KK30NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDdiOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDM4IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorICovDQorcGFja2FnZSBjYWxjdWxhdG9yOw0KKw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5MZXZlbDsNCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOw0KKw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlNlcnZpY2U7DQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERpdmlkZSBzZXJ2aWNlLg0KKyAqLw0KK0BTZXJ2aWNlKERpdmlkZVNlcnZpY2UuY2xhc3MpDQorcHVibGljIGNsYXNzIERpdmlkZVNlcnZpY2VJbXBsIGltcGxlbWVudHMgRGl2aWRlU2VydmljZSB7DQorDQorICAgIHB1YmxpYyBkb3VibGUgZGl2aWRlKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJEaXZpZGluZyAiICsgbjEgKyAiIHdpdGggIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSAvIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjU2OGNjCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorLyoqDQorICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIE11bHRpcGx5U2VydmljZSB7DQorDQorICAgIGRvdWJsZSBtdWx0aXBseShkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjMGRlNDkKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTXVsdGlwbHkgc2VydmljZS4NCisgKi8NCitAU2VydmljZShNdWx0aXBseVNlcnZpY2UuY2xhc3MpDQorcHVibGljIGNsYXNzIE11bHRpcGx5U2VydmljZUltcGwgaW1wbGVtZW50cyBNdWx0aXBseVNlcnZpY2Ugew0KKw0KKyAgICBwdWJsaWMgZG91YmxlIG11bHRpcGx5KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJNdWx0aXBseWluZyAiICsgbjEgKyAiIHdpdGggIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSAqIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmVlMzcyCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCkBAIC0wLDAgKzEsMjggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQorLyoqDQorICogVGhlIGludGVyZmFjZSBmb3IgdGhlIG11bHRpcGx5IHNlcnZpY2UNCisgKi8NCitwdWJsaWMgaW50ZXJmYWNlIFN1YnRyYWN0U2VydmljZSB7DQorDQorICAgIGRvdWJsZSBzdWJ0cmFjdChkb3VibGUgbjEsIGRvdWJsZSBuMik7DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZTk1ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMzggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKg0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4NCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IGphdmEudXRpbC5sb2dnaW5nLkxldmVsOw0KK2ltcG9ydCBqYXZhLnV0aWwubG9nZ2luZy5Mb2dnZXI7DQorDQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3VidHJhY3Qgc2VydmljZS4NCisgKi8NCitAU2VydmljZShTdWJ0cmFjdFNlcnZpY2UuY2xhc3MpDQorcHVibGljIGNsYXNzIFN1YnRyYWN0U2VydmljZUltcGwgaW1wbGVtZW50cyBTdWJ0cmFjdFNlcnZpY2Ugew0KKw0KKyAgICBwdWJsaWMgZG91YmxlIHN1YnRyYWN0KGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7DQorICAgICAgICBMb2dnZXIgbG9nZ2VyID0gTG9nZ2VyLmdldExvZ2dlcigiY2FsY3VsYXRvciIpOw0KKyAgICAgICAgbG9nZ2VyLmxvZyhMZXZlbC5GSU5FU1QsICJTdWJ0cmFjdGluZyAiICsgbjEgKyAiIGZyb20gIiArIG4yKTsNCisgICAgICAgIHJldHVybiBuMSAtIG4yOw0KKyAgICB9DQorDQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzBlMWNmCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlCkBAIC0wLDAgKzEsNDkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vc2FtcGxlIg0KKyAgICAgICAgICAgeG1sbnM6c2FtcGxlPSJodHRwOi8vc2FtcGxlIg0KKyAgICAgICAgICAgbmFtZT0iQ2FsY3VsYXRvciI+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQiPg0KKwkJPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuQ2FsY3VsYXRvclNlcnZpY2VJbXBsIi8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImFkZFNlcnZpY2UiIHRhcmdldD0iQWRkU2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic3VidHJhY3RTZXJ2aWNlIiB0YXJnZXQ9IlN1YnRyYWN0U2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ibXVsdGlwbHlTZXJ2aWNlIiB0YXJnZXQ9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCIgLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iZGl2aWRlU2VydmljZSIgdGFyZ2V0PSJEaXZpZGVTZXJ2aWNlQ29tcG9uZW50IiAvPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJBZGRTZXJ2aWNlQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJjYWxjdWxhdG9yLkFkZFNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlN1YnRyYWN0U2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5TdWJ0cmFjdFNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9Ik11bHRpcGx5U2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5NdWx0aXBseVNlcnZpY2VJbXBsIi8+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkRpdmlkZVNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuRGl2aWRlU2VydmljZUltcGwiLz4NCisgICAgPC9jb21wb25lbnQ+DQorDQorPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9iaW5kaW5nLXNjYS9jb250cmlidXRpb24tY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvckNsaWVudC5jb21wb3NpdGUgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvckNsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2JpbmRpbmctc2NhL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpjb3B5IHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yQ2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKY29weSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1qdW5pdC9jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTI2OTE4Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvY2FsY3VsYXRvci1jb250cmlidXRpb24vc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsNDkgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIGNhbGN1bGF0b3I7DQorDQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQorDQorLyoqDQorICogQSB1bml0IHRlc3Qgb2YgdGhlIGJhc2ljIEphdmEgaW1wbGVtZW50YXRpb24gY2xhc3NlcyBpbiB0aGlzIGNvbnRyaWJ1dGlvbiANCisgKiB3aXRob3V0IHVzaW5nIFNDQQ0KKyAqLw0KK3B1YmxpYyBjbGFzcyBDYWxjdWxhdG9yVGVzdENhc2Ugew0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgDQorICAgICAgICBOb2RlIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUobmV3IENvbnRyaWJ1dGlvbigiYzEiLCAiLi90YXJnZXQvY2xhc3NlcyIpKTsNCisgICAgICAgIG5vZGUuc3RhcnQoKTsNCisgICAgICAgIA0KKyAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2UgY2FsY3VsYXRvciA9IG5vZGUuZ2V0U2VydmljZShDYWxjdWxhdG9yU2VydmljZS5jbGFzcywgIkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50Iik7DQorICAgICAgICANCisgICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLmFkZCgzLCAyKSwgNS4wLCAwKTsNCisgICAgICAgIGFzc2VydEVxdWFscyhjYWxjdWxhdG9yLnN1YnRyYWN0KDMsIDIpLCAxLjAsIDApOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKGNhbGN1bGF0b3IubXVsdGlwbHkoMywgMiksIDYuMCwgMCk7DQorICAgICAgICBhc3NlcnRFcXVhbHMoY2FsY3VsYXRvci5kaXZpZGUoMywgMiksIDEuNSwgMCk7DQorICAgICAgICANCisgICAgICAgIG5vZGUuc3RvcCgpOyAgICAgICAgDQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tanVuaXQvcG9tLnhtbCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMxODY4NwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLWp1bml0L3BvbS54bWwKQEAgLTAsMCArMSw0MyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGUtbWF2ZW4tanVuaXQ8L2FydGlmYWN0SWQ+DQorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgTWF2ZW4gSnVuaXQ8L25hbWU+DQorDQorICAgIDxwcm9maWxlcz4NCisgICAgICAgIDxwcm9maWxlPg0KKyAgICAgICAgICAgIDxpZD5kZWZhdWx0PC9pZD4NCisgICAgICAgICAgICA8YWN0aXZhdGlvbj4NCisgICAgICAgICAgICAgICAgPGFjdGl2ZUJ5RGVmYXVsdD50cnVlPC9hY3RpdmVCeURlZmF1bHQ+DQorICAgICAgICAgICAgPC9hY3RpdmF0aW9uPg0KKyAgICAgICAgICAgIDxtb2R1bGVzPg0KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmNhbGN1bGF0b3ItY29udHJpYnV0aW9uPC9tb2R1bGU+DQorICAgICAgICAgICAgPC9tb2R1bGVzPg0KKyAgICAgICAgPC9wcm9maWxlPg0KKyAgICA8L3Byb2ZpbGVzPiAgICANCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9NRVRBLUlORi9NQU5JRkVTVC5NRgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvTUVUQS1JTkYvTUFOSUZFU1QuTUYKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL01FVEEtSU5GL01BTklGRVNULk1GCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9SRUFETUUgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvY2FsY3VsYXRvci1vc2dpL1JFQURNRQpyZW5hbWUgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvUkVBRE1FCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9idWlsZC54bWwgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9idWlsZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFhNTI3MwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL2J1aWxkLnhtbApAQCAtMCwwICsxLDc4IEBACis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdCBuYW1lPSJjYWxjdWxhdG9yLW9zZ2kiIGRlZmF1bHQ9InJ1biI+CisgICAgPHByb3BlcnR5IG5hbWU9InNhbXBsZS5uYW1lIiB2YWx1ZT0iJHthbnQucHJvamVjdC5uYW1lfSIvPgorICAgIDxwcm9wZXJ0eSBuYW1lPSJzYW1wbGUuamFyIiB2YWx1ZT0iLi90YXJnZXQvc2FtcGxlLSR7c2FtcGxlLm5hbWV9LmphciIgLz4KKworICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+CisgICAgICAgIDxta2RpciBkaXI9InRhcmdldC9jbGFzc2VzIi8+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImNvbXBpbGUiIGRlcGVuZHM9ImluaXQiPgorICAgICAgICA8amF2YWMgc3JjZGlyPSJzcmMvbWFpbi9qYXZhIgorICAgICAgICAgICAgICAgZGVzdGRpcj0idGFyZ2V0L2NsYXNzZXMiCisgICAgICAgICAgICAgICBkZWJ1Zz0ib24iCisgICAgICAgICAgICAgICBzb3VyY2U9IjEuNSIKKyAgICAgICAgICAgICAgIHRhcmdldD0iMS41Ij4KKyAgICAgICAgICAgIDxjbGFzc3BhdGg+CisgICAgICAgICAgICAgICAgPGZpbGVzZXQgZGlyPSIuLi8uLi9mZWF0dXJlcyI+CisgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlIG5hbWU9InR1c2Nhbnktc2NhLW1hbmlmZXN0LmphciIgLz4KKyAgICAgICAgICAgICAgICA8L2ZpbGVzZXQ+CisgICAgICAgICAgICA8L2NsYXNzcGF0aD4KKyAgICAgICAgPC9qYXZhYz4KKyAgICAgICAgPGNvcHkgdG9kaXI9InRhcmdldC9jbGFzc2VzIj4KKyAgICAgICAgICAgIDxmaWxlc2V0IGRpcj0ic3JjL21haW4vcmVzb3VyY2VzIi8+CisgICAgICAgIDwvY29weT4KKyAgICAgICAgPGphciBkZXN0ZmlsZT0iJHtzYW1wbGUuamFyfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPgorICAgICAgICA8L2phcj4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJjb21waWxlIj4KKyAgICAgICAgPGphdmEgamFyPSIuLi8uLi9mZWF0dXJlcy90dXNjYW55LXNjYS1tYW5pZmVzdC5qYXIiIGZvcms9InRydWUiPgorICAgICAgICAgICAgPGp2bWFyZyB2YWx1ZT0iLURqYXZhLnV0aWwubG9nZ2luZy5jb25maWcuZmlsZT1sb2dnaW5nLnByb3BlcnRpZXMiLz4KKyAgICAgICAgICAgIDwhLS0gb3B0aW9uYWwgdG8gc2V0IHRoZSBkZXBsb3lhYmxlIGNvbXBvc2l0ZSAtLT4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9Ii1jb21wb3NpdGUiLz4KKyAgICAgICAgICAgIDxhcmcgdmFsdWU9IkNhbGN1bGF0b3IuY29tcG9zaXRlIi8+CisgICAgICAgICAgICA8IS0tIHN0b3AgdGhlIG5vZGUgYWZ0ZXIgdGhlIGFwcGxpY2F0aW9uIHJ1bnMgLS0+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSItdHRsIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIwIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSIke3NhbXBsZS5qYXJ9Ii8+CisgICAgICAgIDwvamF2YT4KKyAgICA8L3RhcmdldD4KKworICAgIDx0YXJnZXQgbmFtZT0icnVuLWVxdWlub3giIGRlcGVuZHM9ImNvbXBpbGUiPgorICAgICAgICA8amF2YSBqYXI9Ii4uLy4uL2ZlYXR1cmVzL3R1c2Nhbnktc2NhLWVxdWlub3gtbWFuaWZlc3QuamFyIiBmb3JrPSJ0cnVlIj4KKyAgICAgICAgICAgIDxqdm1hcmcgdmFsdWU9Ii1EamF2YS51dGlsLmxvZ2dpbmcuY29uZmlnLmZpbGU9bG9nZ2luZy5wcm9wZXJ0aWVzIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSItY29tcG9zaXRlIi8+CisgICAgICAgICAgICA8YXJnIHZhbHVlPSJDYWxjdWxhdG9yLmNvbXBvc2l0ZSIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLWNvbmZpZyIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLi4vLi4vZmVhdHVyZXMvY29uZmlndXJhdGlvbiIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iLXR0bCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iMCIvPgorICAgICAgICAgICAgPGFyZyB2YWx1ZT0iJHtzYW1wbGUuamFyfSIvPgorICAgICAgICA8L2phdmE+CisgICAgPC90YXJnZXQ+CisKKyAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KKyAgICAgICAgPGRlbGV0ZSBxdWlldD0idHJ1ZSIgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+CisgICAgICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPgorICAgICAgICA8L2RlbGV0ZT4KKyAgICA8L3RhcmdldD4KKzwvcHJvamVjdD4KKwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sb2dnaW5nLnByb3BlcnRpZXMgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9sb2dnaW5nLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvbG9nZ2luZy5wcm9wZXJ0aWVzCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9sb2dnaW5nLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL3BvbS54bWwgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OGRlNTYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9wb20ueG1sCkBAIC0wLDAgKzEsMTE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICogCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICogCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtbWF2ZW4tb3NnaS1qdW5pdC1jYWxjdWxhdG9yLW9zZ2k8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBNYXZlbiBPU0dJIEpVbml0IENhbGN1bGF0b3IgT1NHaTwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtYWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1lY2xpcHNlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjUuMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPGJ1aWxkY29tbWFuZHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8YnVpbGRjb21tYW5kPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L2J1aWxkY29tbWFuZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxidWlsZGNvbW1hbmQ+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L2J1aWxkY29tbWFuZD4KKyAgICAgICAgICAgICAgICAgICAgPC9idWlsZGNvbW1hbmRzPgorICAgICAgICAgICAgICAgICAgICA8cHJvamVjdG5hdHVyZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8cHJvamVjdG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9wcm9qZWN0bmF0dXJlPgorICAgICAgICAgICAgICAgICAgICAgICAgPHByb2plY3RuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvcHJvamVjdG5hdHVyZT4KKyAgICAgICAgICAgICAgICAgICAgPC9wcm9qZWN0bmF0dXJlcz4KKyAgICAgICAgICAgICAgICAgICAgPGNsYXNzcGF0aENvbnRhaW5lcnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y2xhc3NwYXRoQ29udGFpbmVyPm9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGFzc3BhdGhDb250YWluZXI+CisgICAgICAgICAgICAgICAgICAgIDwvY2xhc3NwYXRoQ29udGFpbmVycz4KKyAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICA8L3BsdWdpbj4KKworICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8YXJjaGl2ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxtYW5pZmVzdEZpbGU+JHtiYXNlZGlyfS9NRVRBLUlORi9NQU5JRkVTVC5NRjwvbWFuaWZlc3RGaWxlPgorICAgICAgICAgICAgICAgICAgICA8L2FyY2hpdmU+CisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgICAgICAKKyAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55Lm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tb3NnaS1qdW5pdC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+b3NnaS10ZXN0PC9pZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT50ZXN0PC9waGFzZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD50ZXN0PC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzeXN0ZW1Qcm9wZXJ0aWVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmFtZT5vc2dpLmNvbmZpZ3VyYXRpb24uYXJlYTwvbmFtZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2YWx1ZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9lcXVpbm94PC92YWx1ZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N5c3RlbVByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yQWN0aXZhdG9yLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1vc2dpL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3Itb3NnaS9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL01FVEEtSU5GL01BTklGRVNULk1GIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9NRVRBLUlORi9NQU5JRkVTVC5NRgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvY2FsY3VsYXRvci1vc2dpL01FVEEtSU5GL01BTklGRVNULk1GCmNvcHkgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9NRVRBLUlORi9NQU5JRkVTVC5NRgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9SRUFETUUgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3ItcmVzdC1vc2dpL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzY3Mjk2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9SRUFETUUKQEAgLTAsMCArMSw5OSBAQAorQ2FsY3VsYXRvciBTYW1wbGUKKz09PT09PT09PT09PT09PT09CitUaGlzIHNhbXBsZSBpbXBsZW1lbnRzIGEgc2ltcGxlIGNhbGN1bGF0b3IgdXNpbmcgU0NBIGNvbXBvbmVudHMgYW5kIHJ1biBpdCBpbiBhIE9TR2kgZW52aXJvbm1lbnQgdXNpbmcgdGhlIFJFU1QgYmluZGluZy4gCisKK1RoZSBSRUFETUUgaW4gdGhlIDxkaXN0cmlidXRpb24tdW5wYWNrLWRpcj4vc2FtcGxlcyBkaXJlY3RvcnkgcHJvdmlkZXMgCitnZW5lcmFsIGluc3RydWN0aW9ucyBhYm91dCBidWlsZGluZyBhbmQgcnVubmluZyBzYW1wbGVzLiAod2hlcmUKK2Rpc3RyaWJ1dGlvbi11bnBhY2stZGlyIGlzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHVucGFja2VkIHRoZSB0dXNjYW55CitiaW5hcnkgZGlzdHJpYnV0aW9uIGFyY2hpdmUpLiBUYWtlIGEgbG9vayB0aGVyZSBmaXJzdCAobm90aW5nIGF0IHlvdSByZWFkIGl0IHRoYXQgdGhpcyBzYW1wbGUKK2lzIG5vdCBhIG5ldyBzdHlsZSBzYW1wbGUpLiAKKworSWYgeW91IGp1c3Qgd2FudCB0byBydW4gaXQgdG8gc2VlIHdoYXQgaGFwcGVucyBvcGVuIGEgY29tbWFuZCBwcm9tcHQsIG5hdmlnYXRlCit0byB0aGlzIHNhbXBsZSBkaXJlY3RvcnkgYW5kIGRvOgorCithbnQgcnVuCisKK09SIGlmIHlvdSBkb24ndCBoYXZlIGFudCwgb24gV2luZG93cyBkbworCitqYXZhIC1qYXIgLi5cLi5cZmVhdHVyZXNcdHVzY2FueS1zY2EtZXF1aW5veC1tYW5pZmVzdC5qYXIgLWNvbXBvc2l0ZSBDYWxjdWxhdG9yLmNvbXBvc2l0ZSAtY29uZmlnIC4uXC4uXGZlYXR1cmVzXGNvbmZpZ3VyYXRpb25cIC10dGwgMCB0YXJnZXRcc2FtcGxlLWNhbGN1bGF0b3Itb3NnaS5qYXIKKworYW5kIG9uICpuaXggZG8KKworamF2YSAtamFyIC4uLy4uL2ZlYXR1cmVzL3R1c2Nhbnktc2NhLWVxdWlub3gtbWFuaWZlc3QuamFyIC1jb21wb3NpdGUgQ2FsY3VsYXRvci5jb21wb3NpdGUgLWNvbmZpZyAuLi8uLi9mZWF0dXJlcy9jb25maWd1cmF0aW9uLyAtdHRsIDAgdGFyZ2V0L3NhbXBsZS1jYWxjdWxhdG9yLW9zZ2kuamFyCisKK1NhbXBsZSBPdmVydmlldworLS0tLS0tLS0tLS0tLS0tCitUaGUgc2FtcGxlIHByb3ZpZGVzIGEgc2luZ2xlIGNhbGN1bGF0b3Igc2VydmljZSB3aXRoIGEgZGVmYXVsdCBTQ0EgKGphdmEpIAorYmluZGluZy4gVGhlIENhbGN1bGF0b3JDbGllbnQgZXhlcmNpc2VzIHRoaXMgaW50ZXJmYWNlIGJ5IGNhbGxpbmcgYWRkLCAKK3N1YnRyYWN0LCBtdWx0aXBseSBhbmQgZGl2aWRlIG9wZXJhdGlvbnMuIFRoaXMgcmVzdWx0cyBpbiBtZXNzYWdlcyBwYXNzaW5nIHRvIAordGhlIGFwcHJvcHJpYXRlIGNvbXBvbmVudHMgaW4gdGhlIGNvbXBvc2l0ZSBhY3Jvc3MgdGhlIGxvY2FsIHdpcmVzLgorCitjYWxjdWxhdG9yLworICBzcmMvCisgICAgbWFpbi8KKyAgICAgIGphdmEvCisgICAgICAgIGNhbGN1bGF0b3IvCisgICAgICAgICAgQ2FsY3VsYXRvclNlcnZpY2UuamF2YSAgLSB0aGUgZmlyc3QgY29tcG9uZW50LCBjYWxscyArLS8qIGFzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwcm9wcmlhdGUKKyAgICAgICAgICBDYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQorICAgICAgICAgIEFkZFNlcnZpY2UuamF2YSAgICAgICAgIC0gYWRkcyB0d28gbnVtYmVycworICAgICAgICAgIEFkZFNlcnZpY2VJbXBsLmphdmEKKyAgICAgICAgICBTdWJ0cmFjdFNlcnZpY2UuamF2YSAgICAtIHN1YnRyYWN0cyBvbmUgbnVtYmVyIGZyb20gYW5vdGhlcgorICAgICAgICAgIFN1YnRyYWN0U2VydmljZUltcGwuamF2YQorICAgICAgICAgIE11bHRpcGx5U2VydmljZS5qYXZhICAgIC0gbXVsdGlwbGllcyB0d28gbnVtYmVycworICAgICAgICAgIE11bHRpcGx5U2VydmljZUltcGwuamF2YQorICAgICAgICAgIERpdmlkZVNlcnZpY2UuamF2YSAgICAgIC0gZGl2aWRlcyBvbmUgbnVtYmVyIGJ5IGFub3RoZXIKKyAgICAgICAgICBEaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCisgICAgICAgICAgQ2FsY3VsYXRvckNsaWVudC5qYXZhICAgLSBzdGFydHMgdGhlIFNDQSBSdW50aW1lIGFuZCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcGxveXMgdGhlIENhbGN1bGF0b3IuY29tcG9zaXRlLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IHRoZW4gY2FsbHMgdGhlIGRlcGxveWVkIENhbGN1bGF0b3IgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb25lbnRzIHNlcnZpY2VzCisgICAgICByZXNvdXJjZXMvCisgICAgICAgIENhbGN1bGF0b3IuY29tcG9zaXRlICAgICAgLSB0aGUgU0NBIGFzc2VtYmx5IGZvciB0aGlzIHNhbXBsZQorICAgIHRlc3QvCisgICAgICBqYXZhLworICAgICAgICBjYWxjdWxhdG9yLworICAgICAgICAgIENhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhIC0gSlVuaXQgdGVzdCBjYXNlIAorICBjYWxjdWxhdG9yLnBuZyAgICAgICAgICAgICAgICAgIC0gYSBwaWN0b3JpYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNhbXBsZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb21wb3NpdGUgZmlsZQorICBidWlsZC54bWwgICAgICAgICAgICAgICAgICAgICAgIC0gdGhlIEFudCBidWlsZCBmaWxlCisgIHBvbS54bWwgICAgICAgICAgICAgICAgICAgICAgICAgLSB0aGUgTWF2ZW4gYnVpbGQgZmlsZSAgICAgICAgCisKK0J1aWxkaW5nIEFuZCBSdW5uaW5nIFRoZSBTYW1wbGUgVXNpbmcgQW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorV2l0aCB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbiB0aGUgc2FtcGxlIGNhbiBiZSBidWlsdCBhbmQgcnVuIHVzaW5nIEFudCBhcyAKK2ZvbGxvd3MKKworY2QgY2FsY3VsYXRvcgorYW50IGNvbXBpbGUKK2FudCBydW4KKworWW91IHNob3VsZCBzZWUgdGhlIGZvbGxvd2luZyBvdXRwdXQgZnJvbSB0aGUgcnVuIHRhcmdldC4KKworcnVuOgorICAgICBbamF2YV0gMyArIDI9NS4wCisgICAgIFtqYXZhXSAzIC0gMj0xLjAKKyAgICAgW2phdmFdIDMgKiAyPTYuMAorICAgICBbamF2YV0gMyAvIDI9MS41CisKK0J1aWxkaW5nIEFuZCBSdW5uaW5nIFRoZSBTYW1wbGUgVXNpbmcgTWF2ZW4gCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXaXRoIGVpdGhlciB0aGUgYmluYXJ5IG9yIHNvdXJjZSBkaXN0cmlidXRpb25zIHRoZSBzYW1wbGUgY2FuIGJlIGJ1aWx0IGFuZCBydW4gCit1c2luZyBNYXZlbiBhcyBmb2xsb3dzLiAKKworY2QgY2FsY3VsYXRvcgorbXZuCisKK1lvdSBzaG91bGQgc2VlIHRoZSBmb2xsb3dpbmcgb3V0cHV0IGZyb20gdGhlIHRlc3QgcGhhc2UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBUIEUgUyBUIFMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1J1bm5pbmcgY2FsY3VsYXRvci5DYWxjdWxhdG9yVGVzdENhc2UKK1Rlc3RzIHJ1bjogMSwgRmFpbHVyZXM6IDAsIEVycm9yczogMCwgU2tpcHBlZDogMCwgVGltZSBlbGFwc2VkOiAxLjI3MiBzZWMKKworUmVzdWx0cyA6CisKK1Rlc3RzIHJ1bjogMSwgRmFpbHVyZXM6IDAsIEVycm9yczogMCwgU2tpcHBlZDogMAorCitUaGlzIHNob3dzIHRoYXQgdGhlIEp1bml0IHRlc3QgY2FzZXMgaGF2ZSBydW4gc3VjY2Vzc2Z1bGx5LiAKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvcG9tLnhtbCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGJjNjdiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9wb20ueG1sCkBAIC0wLDAgKzEsMTYzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICoKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKgorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4KKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2FtcGxlczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtbWF2ZW4tb3NnaS1qdW5pdC1jYWxjdWxhdG9yLXJlc3Qtb3NnaTwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIE1hdmVuIE9TR2kgSlVuaXQgQ2FsY3VsYXRvciBSRVNUIE9TR2k8L25hbWU+CisKKwk8ZGVwZW5kZW5jaWVzPgorCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtYXBpPC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorCQkJPHR5cGU+cG9tPC90eXBlPgorCQk8L2RlcGVuZGVuY3k+CisKKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLWFsbDwvYXJ0aWZhY3RJZD4KKwkJCTx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKwkJCTx0eXBlPnBvbTwvdHlwZT4KKwkJPC9kZXBlbmRlbmN5PgorCisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1yZXN0LXJ1bnRpbWU8L2FydGlmYWN0SWQ+CisJCQk8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisJCTwvZGVwZW5kZW5jeT4KKworCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+CisJCQk8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KKwkJCTx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KKwkJCTxzY29wZT5wcm92aWRlZDwvc2NvcGU+CisJCTwvZGVwZW5kZW5jeT4KKworCQk8IS0tIEV4cGxpY2l0bHkgYWRkIHNsZjRqIHNvIHRoYXQgamFic29yYiB1c2VzIHRoZSBsYXRlc3QgdmVyc2lvbnMgLS0+CisJCTxkZXBlbmRlbmN5PgorCQkJPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+c2xmNGotYXBpPC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+MS41LjExPC92ZXJzaW9uPgorCQkJPHNjb3BlPnRlc3Q8L3Njb3BlPgorCQk8L2RlcGVuZGVuY3k+CisKKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorCQkJPHNjb3BlPnRlc3Q8L3Njb3BlPgorCQk8L2RlcGVuZGVuY3k+CisKKwkJPGRlcGVuZGVuY3k+CisJCQk8Z3JvdXBJZD5odHRwdW5pdDwvZ3JvdXBJZD4KKwkJCTxhcnRpZmFjdElkPmh0dHB1bml0PC9hcnRpZmFjdElkPgorCQkJPHZlcnNpb24+MS42LjE8L3ZlcnNpb24+CisJCQk8c2NvcGU+dGVzdDwvc2NvcGU+CisJCTwvZGVwZW5kZW5jeT4KKworCQk8ZGVwZW5kZW5jeT4KKwkJCTxncm91cElkPmp1bml0PC9ncm91cElkPgorCQkJPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+CisJCQk8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KKwkJCTxzY29wZT50ZXN0PC9zY29wZT4KKwkJPC9kZXBlbmRlbmN5PgorCTwvZGVwZW5kZW5jaWVzPgorCisJPGJ1aWxkPgorCQk8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKwkJPHBsdWdpbnM+CisJCQk8cGx1Z2luPgorCQkJCTxhcnRpZmFjdElkPm1hdmVuLWVjbGlwc2UtcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJCTx2ZXJzaW9uPjIuNS4xPC92ZXJzaW9uPgorCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQk8YnVpbGRjb21tYW5kcz4KKwkJCQkJCTxidWlsZGNvbW1hbmQ+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvYnVpbGRjb21tYW5kPgorCQkJCQkJPGJ1aWxkY29tbWFuZD5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvYnVpbGRjb21tYW5kPgorCQkJCQk8L2J1aWxkY29tbWFuZHM+CisJCQkJCTxwcm9qZWN0bmF0dXJlcz4KKwkJCQkJCTxwcm9qZWN0bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L3Byb2plY3RuYXR1cmU+CisJCQkJCQk8cHJvamVjdG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9wcm9qZWN0bmF0dXJlPgorCQkJCQk8L3Byb2plY3RuYXR1cmVzPgorCQkJCQk8Y2xhc3NwYXRoQ29udGFpbmVycz4KKwkJCQkJCTxjbGFzc3BhdGhDb250YWluZXI+b3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSPC9jbGFzc3BhdGhDb250YWluZXI+CisJCQkJCTwvY2xhc3NwYXRoQ29udGFpbmVycz4KKwkJCQk8L2NvbmZpZ3VyYXRpb24+CisJCQk8L3BsdWdpbj4KKworCQkJPHBsdWdpbj4KKwkJCQk8YXJ0aWZhY3RJZD5tYXZlbi1qYXItcGx1Z2luPC9hcnRpZmFjdElkPgorCQkJCTxjb25maWd1cmF0aW9uPgorCQkJCQk8YXJjaGl2ZT4KKwkJCQkJCTxtYW5pZmVzdEZpbGU+JHtiYXNlZGlyfS9NRVRBLUlORi9NQU5JRkVTVC5NRjwvbWFuaWZlc3RGaWxlPgorCQkJCQk8L2FyY2hpdmU+CisJCQkJPC9jb25maWd1cmF0aW9uPgorCQkJPC9wbHVnaW4+CisKKwkJCTxwbHVnaW4+CisJCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorCQkJCTxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCQk8dmVyc2lvbj4yLjU8L3ZlcnNpb24+CisJCQkJPGNvbmZpZ3VyYXRpb24+CisJCQkJCTxza2lwVGVzdHM+dHJ1ZTwvc2tpcFRlc3RzPgorCisJCQkJCTxmb3JrTW9kZT5uZXZlcjwvZm9ya01vZGU+CisJCQkJPC9jb25maWd1cmF0aW9uPgorCQkJPC9wbHVnaW4+CisKKworCQkJPHBsdWdpbj4KKwkJCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2NhbnkubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKwkJCQk8YXJ0aWZhY3RJZD5tYXZlbi1vc2dpLWp1bml0LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKwkJCQk8dmVyc2lvbj4xLjA8L3ZlcnNpb24+CisJCQkJPGRlcGVuZGVuY2llcz4KKwkJCQkJPGRlcGVuZGVuY3k+CisJCQkJCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorCQkJCQkJPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWxhdW5jaGVyLWVxdWlub3g8L2FydGlmYWN0SWQ+CisJCQkJCQk8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4KKwkJCQkJPC9kZXBlbmRlbmN5PgorCQkJCTwvZGVwZW5kZW5jaWVzPgorCQkJCTxleGVjdXRpb25zPgorCQkJCQk8ZXhlY3V0aW9uPgorCQkJCQkJPGlkPm9zZ2ktdGVzdDwvaWQ+CisJCQkJCQk8cGhhc2U+dGVzdDwvcGhhc2U+CisJCQkJCQk8Z29hbHM+CisJCQkJCQkJPGdvYWw+dGVzdDwvZ29hbD4KKwkJCQkJCTwvZ29hbHM+CisJCQkJCQk8Y29uZmlndXJhdGlvbj4KKwkJCQkJCQk8c3lzdGVtUHJvcGVydGllcz4KKwkJCQkJCQkJPHByb3BlcnR5PgorCQkJCQkJCQkJPG5hbWU+b3NnaS5jb25maWd1cmF0aW9uLmFyZWE8L25hbWU+CisJCQkJCQkJCQk8dmFsdWU+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vZXF1aW5veDwvdmFsdWU+CisJCQkJCQkJCTwvcHJvcGVydHk+CisJCQkJCQkJPC9zeXN0ZW1Qcm9wZXJ0aWVzPgorCQkJCQkJPC9jb25maWd1cmF0aW9uPgorCQkJCQk8L2V4ZWN1dGlvbj4KKwkJCQk8L2V4ZWN1dGlvbnM+CisJCQk8L3BsdWdpbj4KKwkJPC9wbHVnaW5zPgorCTwvYnVpbGQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3ItcmVzdC1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCmNvcHkgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3ItcmVzdC1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTNhN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YQpAQCAtMCwwICsxLDM2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjYWxjdWxhdG9yOworCitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTGV2ZWw7CitpbXBvcnQgamF2YS51dGlsLmxvZ2dpbmcuTG9nZ2VyOworCisvKioKKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBZGQgc2VydmljZQorICovCitwdWJsaWMgY2xhc3MgQWRkU2VydmljZUltcGwgaW1wbGVtZW50cyBBZGRTZXJ2aWNlIHsKKworICAgIHB1YmxpYyBkb3VibGUgYWRkKGRvdWJsZSBuMSwgZG91YmxlIG4yKSB7CisgICAgICAgIExvZ2dlciBsb2dnZXIgPSBMb2dnZXIuZ2V0TG9nZ2VyKCJjYWxjdWxhdG9yIik7CisgICAgICAgIGxvZ2dlci5sb2coTGV2ZWwuRklORVNULCAiQWRkaW5nICIgKyBuMSArICIgYW5kICIgKyBuMik7CisKKyAgICAgICAgcmV0dXJuIG4xICsgbjI7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckFjdGl2YXRvci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JBY3RpdmF0b3IuamF2YQpjb3B5IHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JBY3RpdmF0b3IuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQxNGJiZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY2FsY3VsYXRvcjsKKworaW1wb3J0IGphdmF4LndzLnJzLkNvbnN1bWVzOworaW1wb3J0IGphdmF4LndzLnJzLkdFVDsKK2ltcG9ydCBqYXZheC53cy5ycy5QYXRoOworaW1wb3J0IGphdmF4LndzLnJzLlBhdGhQYXJhbTsKK2ltcG9ydCBqYXZheC53cy5ycy5Qcm9kdWNlczsKK2ltcG9ydCBqYXZheC53cy5ycy5jb3JlLk1lZGlhVHlwZTsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOworCisvKioKKyAqIFRoZSBDYWxjdWxhdG9yIHNlcnZpY2UgaW50ZXJmYWNlLgorICovCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIENhbGN1bGF0b3JTZXJ2aWNlIHsKKworICAgIEBHRVQKKyAgICBAUGF0aCgiYWRkL3tuMX0ve24yfSIpCisgICAgQENvbnN1bWVzKE1lZGlhVHlwZS5URVhUX1BMQUlOKQorICAgIEBQcm9kdWNlcyhNZWRpYVR5cGUuVEVYVF9QTEFJTikKKyAgICBTdHJpbmcgYWRkKEBQYXRoUGFyYW0oIm4xIikgU3RyaW5nIG4xLCBAUGF0aFBhcmFtKCJuMiIpIFN0cmluZyBuMik7CisKKyAgICBAR0VUCisgICAgQFBhdGgoInN1YnRyYWN0L3tuMX0ve24yfSIpCisgICAgQENvbnN1bWVzKE1lZGlhVHlwZS5URVhUX1BMQUlOKQorICAgIEBQcm9kdWNlcyhNZWRpYVR5cGUuVEVYVF9QTEFJTikKKyAgICBTdHJpbmcgc3VidHJhY3QoQFBhdGhQYXJhbSgibjEiKSBTdHJpbmcgbjEsIEBQYXRoUGFyYW0oIm4yIikgU3RyaW5nIG4yKTsKKworICAgIEBHRVQKKyAgICBAUGF0aCgibXVsdGlwbHkve24xfS97bjJ9IikKKyAgICBAQ29uc3VtZXMoTWVkaWFUeXBlLlRFWFRfUExBSU4pCisgICAgQFByb2R1Y2VzKE1lZGlhVHlwZS5URVhUX1BMQUlOKQorICAgIFN0cmluZyBtdWx0aXBseShAUGF0aFBhcmFtKCJuMSIpIFN0cmluZyBuMSwgQFBhdGhQYXJhbSgibjIiKSBTdHJpbmcgbjIpOworCisgICAgQEdFVAorICAgIEBQYXRoKCJkaXZpZGUve24xfS97bjJ9IikKKyAgICBAQ29uc3VtZXMoTWVkaWFUeXBlLlRFWFRfUExBSU4pCisgICAgQFByb2R1Y2VzKE1lZGlhVHlwZS5URVhUX1BMQUlOKQorICAgIFN0cmluZyBkaXZpZGUoQFBhdGhQYXJhbSgibjEiKSBTdHJpbmcgbjEsIEBQYXRoUGFyYW0oIm4yIikgU3RyaW5nIG4yKTsKKworICAgIEBHRVQKKyAgICBAUGF0aCgiY2FsY3VsYXRlL3tmb3JtdWxhfSIpCisgICAgQENvbnN1bWVzKE1lZGlhVHlwZS5URVhUX1BMQUlOKQorICAgIEBQcm9kdWNlcyhNZWRpYVR5cGUuVEVYVF9QTEFJTikKKyAgICBTdHJpbmcgY2FsY3VsYXRlKEBQYXRoUGFyYW0oImZvcm11bGEiKSBTdHJpbmcgZm9ybXVsYSk7CisKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhYWJkYgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNhbGN1bGF0b3I7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlZmVyZW5jZTsKKworLyoqCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQ2FsY3VsYXRvciBzZXJ2aWNlLgorICovCitwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclNlcnZpY2VJbXBsIGltcGxlbWVudHMgQ2FsY3VsYXRvclNlcnZpY2UgeworCisgICAgcHJpdmF0ZSBBZGRTZXJ2aWNlIGFkZFNlcnZpY2U7CisgICAgcHJpdmF0ZSBTdWJ0cmFjdFNlcnZpY2Ugc3VidHJhY3RTZXJ2aWNlOworICAgIHByaXZhdGUgTXVsdGlwbHlTZXJ2aWNlIG11bHRpcGx5U2VydmljZTsKKyAgICBwcml2YXRlIERpdmlkZVNlcnZpY2UgZGl2aWRlU2VydmljZTsKKworICAgIEBSZWZlcmVuY2UKKyAgICBwdWJsaWMgdm9pZCBzZXRBZGRTZXJ2aWNlKEFkZFNlcnZpY2UgYWRkU2VydmljZSkgeworICAgICAgICB0aGlzLmFkZFNlcnZpY2UgPSBhZGRTZXJ2aWNlOworICAgIH0KKworICAgIEBSZWZlcmVuY2UKKyAgICBwdWJsaWMgdm9pZCBzZXRTdWJ0cmFjdFNlcnZpY2UoU3VidHJhY3RTZXJ2aWNlIHN1YnRyYWN0U2VydmljZSkgeworICAgICAgICB0aGlzLnN1YnRyYWN0U2VydmljZSA9IHN1YnRyYWN0U2VydmljZTsKKyAgICB9CisKKyAgICBAUmVmZXJlbmNlCisgICAgcHVibGljIHZvaWQgc2V0RGl2aWRlU2VydmljZShEaXZpZGVTZXJ2aWNlIGRpdmlkZVNlcnZpY2UpIHsKKyAgICAgICAgdGhpcy5kaXZpZGVTZXJ2aWNlID0gZGl2aWRlU2VydmljZTsKKyAgICB9CisKKyAgICBAUmVmZXJlbmNlCisgICAgcHVibGljIHZvaWQgc2V0TXVsdGlwbHlTZXJ2aWNlKE11bHRpcGx5U2VydmljZSBtdWx0aXBseVNlcnZpY2UpIHsKKyAgICAgICAgdGhpcy5tdWx0aXBseVNlcnZpY2UgPSBtdWx0aXBseVNlcnZpY2U7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBhZGQoU3RyaW5nIG4xLCBTdHJpbmcgbjIpIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkFERCBPcGVyYXRpb24gPT0+ICIgKyBuMSArICIgKyAiICsgbjIgKyAiID0gIiArIGFkZFNlcnZpY2UuYWRkKERvdWJsZS5wYXJzZURvdWJsZShuMSksIERvdWJsZS5wYXJzZURvdWJsZShuMikpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZy52YWx1ZU9mKGFkZFNlcnZpY2UuYWRkKERvdWJsZS5wYXJzZURvdWJsZShuMSksIERvdWJsZS5wYXJzZURvdWJsZShuMikpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIHN1YnRyYWN0KFN0cmluZyBuMSwgU3RyaW5nIG4yKSB7CisgICAgICAgIC8vU3lzdGVtLm91dC5wcmludGxuKCJTVUJUUkFDVCBPcGVyYXRpb24gPT0+ICIgKyBuMSArICIgKyAiICsgbjIgKyAiID0gIiArIHN1YnRyYWN0U2VydmljZS5zdWJ0cmFjdChEb3VibGUucGFyc2VEb3VibGUobjEpLCBEb3VibGUucGFyc2VEb3VibGUobjIpKSk7CisgICAgICAgIHJldHVybiBTdHJpbmcudmFsdWVPZihzdWJ0cmFjdFNlcnZpY2Uuc3VidHJhY3QoRG91YmxlLnBhcnNlRG91YmxlKG4xKSwgRG91YmxlLnBhcnNlRG91YmxlKG4yKSkpOworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgbXVsdGlwbHkoU3RyaW5nIG4xLCBTdHJpbmcgbjIpIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIk1VTFRJUExZIE9wZXJhdGlvbiA9PT4gIiArIG4xICsgIiArICIgKyBuMiArICIgPSAiICsgbXVsdGlwbHlTZXJ2aWNlLm11bHRpcGx5KERvdWJsZS5wYXJzZURvdWJsZShuMSksIERvdWJsZS5wYXJzZURvdWJsZShuMikpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZy52YWx1ZU9mKG11bHRpcGx5U2VydmljZS5tdWx0aXBseShEb3VibGUucGFyc2VEb3VibGUobjEpLCBEb3VibGUucGFyc2VEb3VibGUobjIpKSk7CisgICAgfQorCisgICAgcHVibGljIFN0cmluZyBkaXZpZGUoU3RyaW5nIG4xLCBTdHJpbmcgbjIpIHsKKyAgICAgICAgLy9TeXN0ZW0ub3V0LnByaW50bG4oIkRJVklERSBPcGVyYXRpb24gPT0+ICIgKyBuMSArICIgKyAiICsgbjIgKyAiID0gIiArIGRpdmlkZVNlcnZpY2UuZGl2aWRlKERvdWJsZS5wYXJzZURvdWJsZShuMSksIERvdWJsZS5wYXJzZURvdWJsZShuMikpKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZy52YWx1ZU9mKGRpdmlkZVNlcnZpY2UuZGl2aWRlKERvdWJsZS5wYXJzZURvdWJsZShuMSksIERvdWJsZS5wYXJzZURvdWJsZShuMikpKTsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGNhbGN1bGF0ZShTdHJpbmcgZm9ybXVsYSkgeworICAgICAgICBTdHJpbmdbXSBvcGVyYW5kcyA9IGZvcm11bGEuc3BsaXQoIltcXCtcXC1cXCpcXDpdIik7CisgICAgICAgIGlmKGZvcm11bGEuY29udGFpbnMoIisiKSkgeworICAgICAgICAgICAgcmV0dXJuIGFkZCggb3BlcmFuZHNbMF0sIG9wZXJhbmRzWzFdKTsKKyAgICAgICAgfSBlbHNlIGlmKGZvcm11bGEuY29udGFpbnMoIi0iKSkgeworICAgICAgICAgICAgcmV0dXJuIHN1YnRyYWN0KCBvcGVyYW5kc1swXSwgb3BlcmFuZHNbMV0pOworICAgICAgICB9IGVsc2UgaWYoZm9ybXVsYS5jb250YWlucygiKiIpKSB7CisgICAgICAgICAgICByZXR1cm4gbXVsdGlwbHkoIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSk7CisgICAgICAgIH0gZWxzZSBpZihmb3JtdWxhLmNvbnRhaW5zKCI6IikpIHsKKyAgICAgICAgICAgIHJldHVybiBkaXZpZGUoIG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGZvcm11bGE6ICIgKyBmb3JtdWxhICk7CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3ItcmVzdC1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCmNvcHkgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpjb3B5IHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCmNvcHkgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3NhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3ItcmVzdC1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCmNvcHkgZnJvbSBzYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCmNvcHkgdG8gc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3ItcmVzdC1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKY29weSBmcm9tIHNhbXBsZXMvY2FsY3VsYXRvci1vc2dpL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpjb3B5IHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9zYW1wbGVzL2NhbGN1bGF0b3Itb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpjb3B5IGZyb20gc2FtcGxlcy9jYWxjdWxhdG9yLW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpjb3B5IHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L2NhbGN1bGF0b3ItcmVzdC1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDI4Y2U5Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUKQEAgLTAsMCArMSw1NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCistLT4KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICAgICAgICAgeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIgorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGUiCisgICAgICAgICAgIHhtbG5zOnNhbXBsZT0iaHR0cDovL3NhbXBsZSIKKyAgICAgICAgICAgbmFtZT0iQ2FsY3VsYXRvciI+CisKKyAgICA8Y29tcG9uZW50IG5hbWU9IkNhbGN1bGF0b3JTZXJ2aWNlQ29tcG9uZW50Ij4KKwkJPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuQ2FsY3VsYXRvclNlcnZpY2VJbXBsIi8+CisJCTxzZXJ2aWNlIG5hbWU9IkNhbGN1bGF0b3JTZXJ2aWNlIj4KKwkJCTx0dXNjYW55OmJpbmRpbmcucmVzdCB1cmk9Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9jYWxjdWxhdG9yIj4KKwkJCQk8dHVzY2FueTpvcGVyYXRpb25TZWxlY3Rvci5qYXhycyAvPgorCQkJPC90dXNjYW55OmJpbmRpbmcucmVzdD4KKwkJPC9zZXJ2aWNlPgorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImFkZFNlcnZpY2UiIHRhcmdldD0iQWRkU2VydmljZUNvbXBvbmVudCIgLz4KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJzdWJ0cmFjdFNlcnZpY2UiIHRhcmdldD0iU3VidHJhY3RTZXJ2aWNlQ29tcG9uZW50IiAvPgorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9Im11bHRpcGx5U2VydmljZSIgdGFyZ2V0PSJNdWx0aXBseVNlcnZpY2VDb21wb25lbnQiIC8+CisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iZGl2aWRlU2VydmljZSIgdGFyZ2V0PSJEaXZpZGVTZXJ2aWNlQ29tcG9uZW50IiAvPgorICAgIDwvY29tcG9uZW50PgorCisgICAgPGNvbXBvbmVudCBuYW1lPSJBZGRTZXJ2aWNlQ29tcG9uZW50Ij4KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuQWRkU2VydmljZUltcGwiLz4KKyAgICA8L2NvbXBvbmVudD4KKworICAgIDxjb21wb25lbnQgbmFtZT0iU3VidHJhY3RTZXJ2aWNlQ29tcG9uZW50Ij4KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9ImNhbGN1bGF0b3IuU3VidHJhY3RTZXJ2aWNlSW1wbCIvPgorICAgIDwvY29tcG9uZW50PgorCisgICAgPGNvbXBvbmVudCBuYW1lPSJNdWx0aXBseVNlcnZpY2VDb21wb25lbnQiPgorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5NdWx0aXBseVNlcnZpY2VJbXBsIi8+CisgICAgPC9jb21wb25lbnQ+CisKKyAgICA8Y29tcG9uZW50IG5hbWU9IkRpdmlkZVNlcnZpY2VDb21wb25lbnQiPgorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0iY2FsY3VsYXRvci5EaXZpZGVTZXJ2aWNlSW1wbCIvPgorICAgIDwvY29tcG9uZW50PgorCis8L2NvbXBvc2l0ZT4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9jYWxjdWxhdG9yLXJlc3Qtb3NnaS9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0MTAxYgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuLW9zZ2ktanVuaXQvY2FsY3VsYXRvci1yZXN0LW9zZ2kvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjYWxjdWxhdG9yOworCitpbXBvcnQgamF2YXgud3MucnMuY29yZS5NZWRpYVR5cGU7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb25Mb2NhdGlvbkhlbHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworaW1wb3J0IGNvbS5tZXRlcndhcmUuaHR0cHVuaXQuR2V0TWV0aG9kV2ViUmVxdWVzdDsKK2ltcG9ydCBjb20ubWV0ZXJ3YXJlLmh0dHB1bml0LldlYkNvbnZlcnNhdGlvbjsKK2ltcG9ydCBjb20ubWV0ZXJ3YXJlLmh0dHB1bml0LldlYlJlcXVlc3Q7CitpbXBvcnQgY29tLm1ldGVyd2FyZS5odHRwdW5pdC5XZWJSZXNwb25zZTsKKworLyoqCisgKiBUaGlzIHNob3dzIGhvdyB0byB0ZXN0IHRoZSBDYWxjdWxhdG9yIGNvbXBvc2l0aW9uLgorICovCitwdWJsaWMgY2xhc3MgQ2FsY3VsYXRvclRlc3RDYXNlIHsKKyAgICBwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgU0VSVklDRV9VUkwgPSAiaHR0cDovL2xvY2FsaG9zdDo4MDg1L2NhbGN1bGF0b3IvIjsKKworICAgIHByaXZhdGUgc3RhdGljIE5vZGUgbm9kZTsKKworICAgIEBCZWZvcmVDbGFzcworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcEJlZm9yZUNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBsb2NhdGlvbiA9IENvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyLmdldENvbnRyaWJ1dGlvbkxvY2F0aW9uKCJDYWxjdWxhdG9yLmNvbXBvc2l0ZSIpOworICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJDYWxjdWxhdG9yLmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oImNhbGN1bGF0b3IiLCBsb2NhdGlvbikpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNDQSBOb2RlIEFQSSBDbGFzc0xvYWRlcjogIiArIG5vZGUuZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKKyAgICAgICAgbm9kZS5zdGFydCgpOworICAgIH0KKworICAgIEBBZnRlckNsYXNzCisgICAgcHVibGljIHN0YXRpYyB2b2lkIHRlYXJEb3duQWZ0ZXJDbGFzcygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7CisgICAgICAgICAgICBub2RlLnN0b3AoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEFkZCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgcXVlcnlTdHJpbmcgPSAiL2FkZC8zLzIiOworCisgICAgICAgIFdlYkNvbnZlcnNhdGlvbiB3YyA9IG5ldyBXZWJDb252ZXJzYXRpb24oKTsKKyAgICAgICAgV2ViUmVxdWVzdCByZXF1ZXN0ID0gbmV3IEdldE1ldGhvZFdlYlJlcXVlc3QoU0VSVklDRV9VUkwgKyBxdWVyeVN0cmluZyk7CisgICAgICAgIHJlcXVlc3Quc2V0SGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIsIE1lZGlhVHlwZS5URVhUX1BMQUlOKTsKKyAgICAgICAgV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSB3Yy5nZXRSZXNvdXJjZShyZXF1ZXN0KTsKKworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0UmVzcG9uc2VDb2RlKCkpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCI1LjAiLCByZXNwb25zZS5nZXRUZXh0KCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFN1YnRyYWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBxdWVyeVN0cmluZyA9ICIvc3VidHJhY3QvMy8yIjsKKworICAgICAgICBXZWJDb252ZXJzYXRpb24gd2MgPSBuZXcgV2ViQ29udmVyc2F0aW9uKCk7CisgICAgICAgIFdlYlJlcXVlc3QgcmVxdWVzdCA9IG5ldyBHZXRNZXRob2RXZWJSZXF1ZXN0KFNFUlZJQ0VfVVJMICsgcXVlcnlTdHJpbmcpOworICAgICAgICByZXF1ZXN0LnNldEhlYWRlckZpZWxkKCJDb250ZW50LVR5cGUiLCBNZWRpYVR5cGUuVEVYVF9QTEFJTik7CisgICAgICAgIFdlYlJlc3BvbnNlIHJlc3BvbnNlID0gd2MuZ2V0UmVzb3VyY2UocmVxdWVzdCk7CisKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyMDAsIHJlc3BvbnNlLmdldFJlc3BvbnNlQ29kZSgpKTsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiMS4wIiwgcmVzcG9uc2UuZ2V0VGV4dCgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RNdWx0aXBseSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgcXVlcnlTdHJpbmcgPSAiL211bHRpcGx5LzMvMiI7CisKKyAgICAgICAgV2ViQ29udmVyc2F0aW9uIHdjID0gbmV3IFdlYkNvbnZlcnNhdGlvbigpOworICAgICAgICBXZWJSZXF1ZXN0IHJlcXVlc3QgPSBuZXcgR2V0TWV0aG9kV2ViUmVxdWVzdChTRVJWSUNFX1VSTCArIHF1ZXJ5U3RyaW5nKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIiwgTWVkaWFUeXBlLlRFWFRfUExBSU4pOworICAgICAgICBXZWJSZXNwb25zZSByZXNwb25zZSA9IHdjLmdldFJlc291cmNlKHJlcXVlc3QpOworCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRSZXNwb25zZUNvZGUoKSk7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjYuMCIsIHJlc3BvbnNlLmdldFRleHQoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGl2aWRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBxdWVyeVN0cmluZyA9ICIvZGl2aWRlLzMvMiI7CisKKyAgICAgICAgV2ViQ29udmVyc2F0aW9uIHdjID0gbmV3IFdlYkNvbnZlcnNhdGlvbigpOworICAgICAgICBXZWJSZXF1ZXN0IHJlcXVlc3QgPSBuZXcgR2V0TWV0aG9kV2ViUmVxdWVzdChTRVJWSUNFX1VSTCArIHF1ZXJ5U3RyaW5nKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIZWFkZXJGaWVsZCgiQ29udGVudC1UeXBlIiwgTWVkaWFUeXBlLlRFWFRfUExBSU4pOworICAgICAgICBXZWJSZXNwb25zZSByZXNwb25zZSA9IHdjLmdldFJlc291cmNlKHJlcXVlc3QpOworCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoMjAwLCByZXNwb25zZS5nZXRSZXNwb25zZUNvZGUoKSk7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIjEuNSIsIHJlc3BvbnNlLmdldFRleHQoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Rm9ybXVsYSgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgcXVlcnlTdHJpbmcgPSAiL2NhbGN1bGF0ZS8zKzIiOworCisgICAgICAgIFdlYkNvbnZlcnNhdGlvbiB3YyA9IG5ldyBXZWJDb252ZXJzYXRpb24oKTsKKyAgICAgICAgV2ViUmVxdWVzdCByZXF1ZXN0ID0gbmV3IEdldE1ldGhvZFdlYlJlcXVlc3QoU0VSVklDRV9VUkwgKyBxdWVyeVN0cmluZyk7CisgICAgICAgIHJlcXVlc3Quc2V0SGVhZGVyRmllbGQoIkNvbnRlbnQtVHlwZSIsIE1lZGlhVHlwZS5URVhUX1BMQUlOKTsKKyAgICAgICAgV2ViUmVzcG9uc2UgcmVzcG9uc2UgPSB3Yy5nZXRSZXNvdXJjZShyZXF1ZXN0KTsKKworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKDIwMCwgcmVzcG9uc2UuZ2V0UmVzcG9uc2VDb2RlKCkpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCI1LjAiLCByZXNwb25zZS5nZXRUZXh0KCkpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9wb20ueG1sIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbWF2ZW4tb3NnaS1qdW5pdC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MzI3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9tYXZlbi1vc2dpLWp1bml0L3BvbS54bWwKQEAgLTAsMCArMSw0NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+c2FtcGxlLW1hdmVuLW9zZ2ktanVuaXQ8L2FydGlmYWN0SWQ+CisgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgTWF2ZW4gT1NHSSBKdW5pdCBwbHVnaW4gU2FtcGxlczwvbmFtZT4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxtb2R1bGVzPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsY3VsYXRvci1vc2dpPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5jYWxjdWxhdG9yLXJlc3Qtb3NnaTwvbW9kdWxlPgorICAgICAgICAgICAgPC9tb2R1bGVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4gICAgCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLW1hdmVuL1JFQURNRSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2FtcGxlcy9sYXVuY2hlci1tYXZlbi9SRUFETUUKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L21hdmVuL1JFQURNRQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvb3NnaS9SRUFETUUgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9vc2dpL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGYyYzFkCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvb3NnaS9SRUFETUUKQEAgLTAsMCArMSwzMyBAQAorVGhlIFR1c2NhbnkgcnVudGltZSBjYW4gYmUgcnVuIGluIGFuZCBPU0dpIGNvbnRhaW5lci4gDQorDQorUnVubmluZyBpbiBFcXVpbm94DQorLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorT24gV2luZG93cywgcnVuDQoramF2YSAtamFyIC4uXC4uXG1vZHVsZXNcb3NnaS0zLjUuMC12MjAwOTA1MjAuamFyIC1jb25maWd1cmF0aW9uIC4uXC4uXGZlYXR1cmVzXGNvbmZpZ3VyYXRpb24gLWNsZWFuIC1jb25zb2xlDQorDQorT24gKlVuaXgsIHJ1bg0KK2phdmEgLWphciAuLi8uLi9tb2R1bGVzL29zZ2ktMy41LjAtdjIwMDkwNTIwLmphciAtY29uZmlndXJhdGlvbiAuLi8uLi9mZWF0dXJlcy9jb25maWd1cmF0aW9uIC1jbGVhbiAtY29uc29sZQ0KKw0KK1lvdSBzaG91bGQgc2VlIHRoZSBvc2dpIGNvbnNvbGU6DQorDQorb3NnaT4NCisNCitvc2dpPiBKdW4gMjIsIDIwMDkgMTozMjoyNyBQTSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmV4dGVuc2liaWxpdHkuZXF1aW5veC5FcXVpbm94U2VydmljZURpc2NvdmVyeUFjdGl2YXRvciBzdGFydA0KK0lORk86IEVxdWlub3gtYmFzZWQgc2VydmljZSBkaXNjb3ZlcmVyIGlzIG5vdyBjb25maWd1cmVkLg0KKw0KK1lvdSBjYW4gcnVuICJzcyIgY29tbWFuZCB1bmRlciB0aGUgb3NnaT4gdG8gc2VlIHRoZSBzdGF0dXMgb2YgdGhlIGJ1bmRsZXMuDQorb3NnaT4gc3MNCisNCitUaGVuIHlvdSBjYW4gaW5zdGFsbCBhbmQgc3RhcnQgY29udHJpYnV0aW9ucyBhcyBidW5kbGVzIGJ5IGRvaW5nIHRoZSBmb2xsb3dpbmc6DQorDQorb3NnaT4gaW5zdGFsbCBmaWxlOi4vcGF0aC90by9jb250cmlidXRpb25fYnVuZGxlLmphcg0KKw0KK05vdGUgdGhhdCBjb250cmlidXRpb25fYnVuZGxlLmphciB3aWxsIG5lZWQgYW4gYWN0aXZhdG9yIGluIG9yZGVyIHRvIHJlZ2lzdGVyIHRoZSBidW5kbGUgYXMgYSBTQ0EgY29udHJpYnV0aW9uDQorc2VlIHNhbXBsZXMvPz8/Pw0KK1RPRE8gaXMgdGhpcyBzdGlsbCB0cnVlDQorDQorUnVubmluZyBvbiBGZWxpeA0KKy0tLS0tLS0tLS0tLS0tLS0NCisNCitTZWUgaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9kb2N1bWVudGF0aW9uLTJ4L3J1bm5pbmctdHVzY2FueS1zY2EtMngtd2l0aC1lcXVpbm94LWFuZC1mZWxpeC5odG1sDQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvcG9tLnhtbCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ0ZWM4YwotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3BvbS54bWwKQEAgLTAsMCArMSw1NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNhbXBsZXM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzLXJ1bm5pbmctdHVzY2FueTwvYXJ0aWZhY3RJZD4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBSdW5uaW5nIFR1c2NhbnkgU2FtcGxlczwvbmFtZT4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+CisgICAgICAgICAgICA8YWN0aXZhdGlvbj4KKyAgICAgICAgICAgICAgICA8YWN0aXZlQnlEZWZhdWx0PnRydWU8L2FjdGl2ZUJ5RGVmYXVsdD4KKyAgICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICAgIDxtb2R1bGVzPgorICAgICAgICAgICAgICAgIDwhLS0gZG9uJ3QgbmVlZCB0byBwcm9jZXNzIHRoZXNlIGFzIHRoZXkganVzdCBjb250YWluIFJFQURNRSBmaWxlcworICAgICAgICAgICAgICAgIDxtb2R1bGU+Y29tbWFuZC1saW5lPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5lY2xpcHNlPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5tYXZlbjwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+bWF2ZW4tanVuaXQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPm1hdmVuLW9zZ2ktanVuaXQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPm9zZ2k8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPndlYmFwcDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIC0tPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+ZW1iZWRkZWQtanNlPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5lbWJlZGRlZC1vc2dpPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPCEtLSBtb2R1bGU+ZW1iZWRkZWQtb3NnaS1iYXNlPC9tb2R1bGUgLS0+ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxtb2R1bGU+bWF2ZW4tb3NnaS1qdW5pdDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+bWF2ZW4tanVuaXQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnNoZWxsPC9tb2R1bGU+CisgICAgICAgICAgICA8L21vZHVsZXM+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPiAgICAKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL1JFQURNRSBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzQ1ZjU3Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvUkVBRE1FCkBAIC0wLDAgKzEsMzQgQEAKK1NhbXBsZSBUdXNjYW55IFNoZWxsCis9PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIHNhbXBsZSBzaGVsbCBwcm9ncmFtIHN1cHBvcnRpbmcgc2ltcGxlIGNvbW1hbmRzIHRvCitzdGFydCBhbmQgc3RvcCBTQ0EgY29tcG9zaXRlcy4KKworVG8gYnVpbGQgdGhlIHNhbXBsZSBzaGVsbCBkbyB0aGlzOgorbXZuIGluc3RhbGwKKworVG8gcnVuIGl0OgorLi9zY2EKKworYXQgdGhlIHByb21wdDoKK3N0YXJ0IG15Tm9kZSAuLi8uLi9hcHBsaWNhdGlvbnMvc3RvcmUvdGFyZ2V0L3NhbXBsZS1zdG9yZS5qYXIKKworb3I6CitzdGFydCBteU5vZGUgaHR0cDovL3Blb3BsZS5hcGFjaGUub3JnL35qc2RlbGZpbm8vdHVzY2FueS9qYXZhL3Rlc3Qvc2FtcGxlLXN0b3JlLmphcgorCithbHNvIHRyeToKK3N0YXR1cworc3RvcCBteU5vZGUKK2J5ZQorCitTdGFydGluZyBhbmQgc3RvcHBpbmcgY29tcG9zaXRlcyBpcyBwcmV0dHkgZmFzdC4gVG8gc2VlIHRoYXQsIHRyeSB0aGUgZm9sbG93aW5nCit0d28gc2NyaXB0cywgd2hpY2ggc3RhcnQvc3RvcCB0aGUgc2FtcGxlIHN0b3JlIGNvbXBvc2l0ZSAxMCB0aW1lcy4KKworLi9zY2EgPHNjcmlwdHMvdGVzdC50eHQKK29yCisuL3NjYSA8c2NyaXB0cy90ZXN0LXJlbW90ZS50eHQKKworVGhlIHNoZWxsIGNhbiBhbHNvIHJ1biBhcyBhIFdlYmFwcC4gVG8gdHJ5IGl0IGluc3RhbGwgdGFyZ2V0L3NjYXNoZWxsLndhciBpbgorYSBXZWIgY29udGFpbmVyLCBwb2ludCB5b3VyIFdlYiBicm93c2VyIHRvIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zY2FzaGVsbAorYW5kIHRyeSB0aGUgbGlua3Mgb24gdGhhdCBwYWdlLgorCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9wb20ueG1sIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2YxNGNiCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvcG9tLnhtbApAQCAtMCwwICsxLDkyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zYW1wbGVzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtbGF1bmNoZXItc2hlbGw8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgTGF1bmNoZXIgU2hlbGw8L25hbWU+DQorICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gIA0KKyAgICAgICAgDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS1jb3JlPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+IA0KKyAgICAgICAgDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS13ZWJzZXJ2aWNlPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLXdlYjIwPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC13ZWJhcHA8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPnNjYXNoZWxsPC9maW5hbE5hbWU+DQorICAgICAgIDxwbHVnaW5zPg0KKyAgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50b21jYXQtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgPCEtLSBLZXkgdXNlZCBmb3IgY29uZmlndXJpbmcgYWNjZXNzIHRvIHNlcnZlciBpbiBzZXR0aW5ncy54bWwtLT4NCisgICAgICAgICAgICAgICAgICAgPHNlcnZlcj50b21jYXQ8L3NlcnZlcj4NCisgICAgICAgICAgICAgICAgICAgPCEtLSBjb250ZXh0IGZvciB0aGUgd2ViYXBwLCBhcyBmaW5hbE5hbWUgaXMgbm90IGJlaW5nIGhvbm9yZWQgLS0+DQorICAgICAgICAgICAgICAgICAgIDxwYXRoPi9zY2FzaGVsbDwvcGF0aD4NCisgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgPC9wbHVnaW4+DQorICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zY2EgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zY2EKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHNhbXBsZXMvbGF1bmNoZXItc2hlbGwvc2NhCnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zY2EKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NjYS5iYXQgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zY2EuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxMTBlZmYKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zY2EuYmF0CkBAIC0wLDAgKzEsMzAgQEAKK0BlY2hvIG9mZgorcmVtIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKK3JlbSBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKK3JlbSBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorcmVtIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKK3JlbSB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCityZW0gIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorcmVtIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKK3JlbSAKK3JlbSAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorcmVtIAorcmVtIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKK3JlbSBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorcmVtICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorcmVtIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorcmVtIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKworcmVtIGNkIHRvIHRhcmdldCB0byByZWR1Y2UgdGhlIGxlbmd0aCBvZiB0aGUgY2xhc3NwYXRoLiBJdCBibG93cyB1cCBjbWQuZXhlIHdpdGhvdXQgdGhpcworY2QgdGFyZ2V0CitzZXQgX0NMQVNTUEFUSD0uXGNsYXNzZXMKK2ZvciAlJWkgaW4gKC5cc2Nhc2hlbGxcV0VCLUlORlxsaWJcKi5qYXIpIGRvIGNhbGw6c2V0Q2xhc3NwYXRoICUlaQorc2V0IENMQVNTUEFUSD0lX0NMQVNTUEFUSCUKK0BlY2hvIG9uCitqYXZhIHNhbXBsZS5TaGVsbAorY2QgLi4KK2dvdG86ZW9mCisKKzpzZXRDbGFzc3BhdGgKK3NldCBfQ0xBU1NQQVRIPSVfQ0xBU1NQQVRIJTslMQorZ290bzplb2YKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zY3JpcHRzL3Rlc3QtcmVtb3RlLnR4dCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NjcmlwdHMvdGVzdC1yZW1vdGUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMTNlNWMKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zY3JpcHRzL3Rlc3QtcmVtb3RlLnR4dApAQCAtMCwwICsxLDM2IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSBodHRwOi8vcGVvcGxlLmFwYWNoZS5vcmcvfmpzZGVsZmluby90dXNjYW55L2phdmEvdGVzdC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RhcnQudHh0IGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvc2NyaXB0cy90ZXN0LXN0YXJ0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTE0YTkwCi0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvc2NyaXB0cy90ZXN0LXN0YXJ0LnR4dApAQCAtMCwwICsxLDE4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworCityZXN0YXJ0IHRlc3ROb2RlIGh0dHA6Ly9wZW9wbGUuYXBhY2hlLm9yZy9+anNkZWxmaW5vL3R1c2NhbnkvamF2YS90ZXN0L3NhbXBsZS1zdG9yZS5qYXIKK3N0YXR1cwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9sYXVuY2hlci1zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RhdHVzLnR4dCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NjcmlwdHMvdGVzdC1zdGF0dXMudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NjcmlwdHMvdGVzdC1zdGF0dXMudHh0CnJlbmFtZSB0byBzYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RhdHVzLnR4dApkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvc2NyaXB0cy90ZXN0LXN0b3AudHh0IGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvc2NyaXB0cy90ZXN0LXN0b3AudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZWIzNmEKLS0tIC9kZXYvbnVsbAorKysgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RvcC50eHQKQEAgLTAsMCArMSwxNyBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKworc3RvcCB0ZXN0Tm9kZQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvc2NyaXB0cy90ZXN0LnR4dCBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NjcmlwdHMvdGVzdC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY0ODlhNAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NjcmlwdHMvdGVzdC50eHQKQEAgLTAsMCArMSwzNiBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjIAorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIyAKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKworc3RhcnQgdGVzdE5vZGUgLi4vLi4vYXBwbGljYXRpb25zL3N0b3JlL3RhcmdldC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSAuLi8uLi9hcHBsaWNhdGlvbnMvc3RvcmUvdGFyZ2V0L3NhbXBsZS1zdG9yZS5qYXIKK3N0b3AgdGVzdE5vZGUKK3N0YXJ0IHRlc3ROb2RlIC4uLy4uL2FwcGxpY2F0aW9ucy9zdG9yZS90YXJnZXQvc2FtcGxlLXN0b3JlLmphcgorc3RvcCB0ZXN0Tm9kZQorc3RhcnQgdGVzdE5vZGUgLi4vLi4vYXBwbGljYXRpb25zL3N0b3JlL3RhcmdldC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSAuLi8uLi9hcHBsaWNhdGlvbnMvc3RvcmUvdGFyZ2V0L3NhbXBsZS1zdG9yZS5qYXIKK3N0b3AgdGVzdE5vZGUKK3N0YXJ0IHRlc3ROb2RlIC4uLy4uL2FwcGxpY2F0aW9ucy9zdG9yZS90YXJnZXQvc2FtcGxlLXN0b3JlLmphcgorc3RvcCB0ZXN0Tm9kZQorc3RhcnQgdGVzdE5vZGUgLi4vLi4vYXBwbGljYXRpb25zL3N0b3JlL3RhcmdldC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCitzdGFydCB0ZXN0Tm9kZSAuLi8uLi9hcHBsaWNhdGlvbnMvc3RvcmUvdGFyZ2V0L3NhbXBsZS1zdG9yZS5qYXIKK3N0b3AgdGVzdE5vZGUKK3N0YXJ0IHRlc3ROb2RlIC4uLy4uL2FwcGxpY2F0aW9ucy9zdG9yZS90YXJnZXQvc2FtcGxlLXN0b3JlLmphcgorc3RvcCB0ZXN0Tm9kZQorc3RhcnQgdGVzdE5vZGUgLi4vLi4vYXBwbGljYXRpb25zL3N0b3JlL3RhcmdldC9zYW1wbGUtc3RvcmUuamFyCitzdG9wIHRlc3ROb2RlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9TaGVsbC5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvc3JjL21haW4vamF2YS9zYW1wbGUvU2hlbGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGQ4ZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvc3JjL21haW4vamF2YS9zYW1wbGUvU2hlbGwuamF2YQpAQCAtMCwwICsxLDIwMyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2Ugc2FtcGxlOw0KKw0KK2ltcG9ydCBzdGF0aWMgamF2YS5sYW5nLlN5c3RlbS5pbjsNCitpbXBvcnQgc3RhdGljIGphdmEubGFuZy5TeXN0ZW0ub3V0Ow0KK2ltcG9ydCBzdGF0aWMgamF2YS51dGlsLkNvbGxlY3Rpb25zLmVtcHR5TGlzdDsNCitpbXBvcnQgc3RhdGljIGphdmEudXRpbC5Db2xsZWN0aW9ucy5zaW5nbGV0b25MaXN0Ow0KKw0KK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOw0KK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOw0KK2ltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsNCitpbXBvcnQgamF2YS51dGlsLkFycmF5czsNCitpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KK2ltcG9ydCBqYXZhLnV0aWwuTWFwOw0KK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5DYWxsYWJsZTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCisNCisvKioNCisgKiBBIGxpdHRsZSBTQ0EgY29tbWFuZCBzaGVsbC4NCisgKi8NCitwdWJsaWMgY2xhc3MgU2hlbGwgew0KKyAgICBmaW5hbCBOb2RlRmFjdG9yeSBuZjsNCisNCisgICAgcHVibGljIHN0YXRpYyBjbGFzcyBOb2RlY29uZiB7DQorICAgICAgICBmaW5hbCBTdHJpbmcgbmFtZTsNCisgICAgICAgIGZpbmFsIFN0cmluZyBjbG9jOw0KKyAgICAgICAgZmluYWwgU3RyaW5nIGRjdXJpOw0KKyAgICAgICAgZmluYWwgTm9kZSBub2RlOw0KKw0KKyAgICAgICAgTm9kZWNvbmYoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0cmluZyBjbG9jLCBmaW5hbCBTdHJpbmcgZGN1cmksIGZpbmFsIE5vZGUgbm9kZSkgew0KKyAgICAgICAgICAgIHRoaXMubmFtZSA9IG5hbWU7DQorICAgICAgICAgICAgdGhpcy5jbG9jID0gY2xvYzsNCisgICAgICAgICAgICB0aGlzLmRjdXJpID0gZGN1cmk7DQorICAgICAgICAgICAgdGhpcy5ub2RlID0gbm9kZTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7DQorICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyAiICIgKyBjbG9jICsgKGRjdXJpICE9IG51bGw/ICIgIiArIGRjdXJpIDogIiIpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIGZpbmFsIE1hcDxTdHJpbmcsIE5vZGVjb25mPiBub2RlcyA9IG5ldyBIYXNoTWFwPFN0cmluZywgTm9kZWNvbmY+KCk7DQorICAgIGZpbmFsIExpc3Q8U3RyaW5nPiBoaXN0b3J5ID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7DQorDQorICAgIHB1YmxpYyBTaGVsbChOb2RlRmFjdG9yeSBuZikgew0KKyAgICAgICAgdGhpcy5uZiA9IG5mOw0KKyAgICB9DQorDQorICAgIExpc3Q8Pz4gc3RhcnQoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0cmluZyBjbG9jLCBmaW5hbCBTdHJpbmcgZGN1cmkpIHsNCisgICAgICAgIGlmKG5vZGVzLmNvbnRhaW5zS2V5KG5hbWUpKQ0KKyAgICAgICAgICAgIHJldHVybiBlbXB0eUxpc3QoKTsNCisgICAgICAgIGZpbmFsIE5vZGUgbm9kZSA9IGRjdXJpICE9IG51bGw/IG5mLmNyZWF0ZU5vZGUoZGN1cmksIG5ldyBDb250cmlidXRpb24oY2xvYywgY2xvYykpIDogbmYuY3JlYXRlTm9kZShuZXcgQ29udHJpYnV0aW9uKGNsb2MsIGNsb2MpKTsNCisgICAgICAgIG5vZGVzLnB1dChuYW1lLCBuZXcgTm9kZWNvbmYobmFtZSwgY2xvYywgZGN1cmksIG5vZGUpKTsNCisgICAgICAgIG5vZGUuc3RhcnQoKTsNCisgICAgICAgIHJldHVybiBlbXB0eUxpc3QoKTsNCisgICAgfQ0KKw0KKyAgICBMaXN0PD8+IHN0b3AoZmluYWwgU3RyaW5nIG5hbWUpIHsNCisgICAgICAgIGZpbmFsIE5vZGVjb25mIG5pbmZvID0gbm9kZXMuZ2V0KG5hbWUpOw0KKyAgICAgICAgaWYobmluZm8gPT0gbnVsbCkNCisgICAgICAgICAgICByZXR1cm4gZW1wdHlMaXN0KCk7DQorICAgICAgICBuaW5mby5ub2RlLnN0b3AoKTsNCisgICAgICAgIG5vZGVzLnJlbW92ZShuYW1lKTsNCisgICAgICAgIHJldHVybiBlbXB0eUxpc3QoKTsNCisgICAgfQ0KKw0KKyAgICBMaXN0PD8+IHN0b3AoKSB7DQorICAgICAgICBmb3IoTm9kZWNvbmYgbmluZm86IG5vZGVzLnZhbHVlcygpKQ0KKyAgICAgICAgICAgIG5pbmZvLm5vZGUuc3RvcCgpOw0KKyAgICAgICAgbm9kZXMuY2xlYXIoKTsNCisgICAgICAgIHJldHVybiBlbXB0eUxpc3QoKTsNCisgICAgfQ0KKw0KKyAgICBMaXN0PD8+IHJlc3RhcnQoZmluYWwgU3RyaW5nIG5hbWUsIGZpbmFsIFN0cmluZyBjbG9jLCBmaW5hbCBTdHJpbmcgZGN1cmkpIHsNCisgICAgICAgIGZpbmFsIE5vZGVjb25mIG5pbmZvID0gbm9kZXMuZ2V0KG5hbWUpOw0KKyAgICAgICAgaWYobmluZm8gPT0gbnVsbCkNCisgICAgICAgICAgICByZXR1cm4gc3RhcnQobmFtZSwgY2xvYywgZGN1cmkpOw0KKyAgICAgICAgbmluZm8ubm9kZS5zdG9wKCk7DQorICAgICAgICBub2Rlcy5yZW1vdmUobmFtZSk7DQorICAgICAgICBpZiAoY2xvYyA9PSBudWxsKQ0KKyAgICAgICAgICAgIHJldHVybiBzdGFydChuaW5mby5uYW1lLCBuaW5mby5jbG9jLCBuaW5mby5kY3VyaSk7DQorICAgICAgICByZXR1cm4gc3RhcnQobmFtZSwgY2xvYywgZGN1cmkpOw0KKyAgICB9DQorDQorICAgIExpc3Q8Pz4gc3RhdHVzKCkgew0KKyAgICAgICAgcmV0dXJuIG5ldyBBcnJheUxpc3Q8T2JqZWN0Pihub2Rlcy52YWx1ZXMoKSk7DQorICAgIH0NCisNCisgICAgTGlzdDw/PiBoaXN0b3J5KCkgew0KKyAgICAgICAgcmV0dXJuIGhpc3Rvcnk7DQorICAgIH0NCisNCisgICAgTGlzdDw/PiBieWUoKSB7DQorICAgICAgICByZXR1cm4gbnVsbDsNCisgICAgfQ0KKw0KKyAgICBMaXN0PFN0cmluZz4gcmVhZChmaW5hbCBCdWZmZXJlZFJlYWRlciByKSB0aHJvd3MgSU9FeGNlcHRpb24gew0KKyAgICAgICAgZmluYWwgU3RyaW5nIGwgPSByLnJlYWRMaW5lKCk7DQorICAgICAgICBoaXN0b3J5LmFkZChsKTsNCisgICAgICAgIHJldHVybiBsICE9IG51bGwgPyBBcnJheXMuYXNMaXN0KGwuc3BsaXQoIiAiKSkgOiBzaW5nbGV0b25MaXN0KCJieWUiKTsNCisgICAgfQ0KKw0KKyAgICBDYWxsYWJsZTxMaXN0PD8+PiBldmFsKGZpbmFsIExpc3Q8U3RyaW5nPiB0b2tzKSB7DQorICAgICAgICBmaW5hbCBTdHJpbmcgb3AgPSB0b2tzLmdldCgwKTsNCisgICAgICAgIGlmKG9wLmVxdWFscygic3RhcnQiKSkNCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxhYmxlPExpc3Q8Pz4+KCkgew0KKyAgICAgICAgICAgICAgICBwdWJsaWMgTGlzdDw/PiBjYWxsKCkgew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0KHRva3MuZ2V0KDEpLCB0b2tzLmdldCgyKSwgdG9rcy5zaXplKCkgPj0gND8gdG9rcy5nZXQoMykgOiBudWxsKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH07DQorICAgICAgICBpZihvcC5lcXVhbHMoInN0b3AiKSkNCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxhYmxlPExpc3Q8Pz4+KCkgew0KKyAgICAgICAgICAgICAgICBwdWJsaWMgTGlzdDw/PiBjYWxsKCkgew0KKyAgICAgICAgICAgICAgICAgICAgaWYodG9rcy5zaXplKCkgPT0gMSkNCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RvcCgpOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0b3AodG9rcy5nZXQoMSkpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfTsNCisgICAgICAgIGlmKG9wLmVxdWFscygicmVzdGFydCIpKQ0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGFibGU8TGlzdDw/Pj4oKSB7DQorICAgICAgICAgICAgICAgIHB1YmxpYyBMaXN0PD8+IGNhbGwoKSB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdGFydCh0b2tzLmdldCgxKSwgdG9rcy5zaXplKCkgPj0gMz8gdG9rcy5nZXQoMikgOiBudWxsLCB0b2tzLnNpemUoKSA+PSA0PyB0b2tzLmdldCgzKSA6IG51bGwpOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfTsNCisgICAgICAgIGlmKG9wLmVxdWFscygic3RhdHVzIikpDQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxMaXN0PD8+PigpIHsNCisgICAgICAgICAgICAgICAgcHVibGljIExpc3Q8Pz4gY2FsbCgpIHsNCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXMoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH07DQorICAgICAgICBpZihvcC5lcXVhbHMoImhpc3RvcnkiKSkNCisgICAgICAgICAgICByZXR1cm4gbmV3IENhbGxhYmxlPExpc3Q8Pz4+KCkgew0KKyAgICAgICAgICAgICAgICBwdWJsaWMgTGlzdDw/PiBjYWxsKCkgew0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhpc3RvcnkoKTsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH07DQorICAgICAgICBpZihvcC5lcXVhbHMoImJ5ZSIpKQ0KKyAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbGFibGU8TGlzdDw/Pj4oKSB7DQorICAgICAgICAgICAgICAgIHB1YmxpYyBMaXN0PD8+IGNhbGwoKSB7DQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnllKCk7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9Ow0KKyAgICAgICAgcmV0dXJuIG5ldyBDYWxsYWJsZTxMaXN0PD8+PigpIHsNCisgICAgICAgICAgICBwdWJsaWMgTGlzdDw/PiBjYWxsKCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gZW1wdHlMaXN0KCk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfTsNCisgICAgfQ0KKw0KKyAgICBMaXN0PD8+IGFwcGx5KGZpbmFsIENhbGxhYmxlPExpc3Q8Pz4+IGZ1bmMpIHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgcmV0dXJuIGZ1bmMuY2FsbCgpOw0KKyAgICAgICAgfSBjYXRjaChFeGNlcHRpb24gZSkgew0KKyAgICAgICAgICAgIFN0cmluZ1dyaXRlciBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTsNCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZShuZXcgUHJpbnRXcml0ZXIoc3cpKTsNCisgICAgICAgICAgICByZXR1cm4gc2luZ2xldG9uTGlzdChzdyk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgYm9vbGVhbiBwcmludChmaW5hbCBMaXN0PD8+IGwsIFByaW50V3JpdGVyIHcpIHsNCisgICAgICAgIGlmKGwgPT0gbnVsbCkNCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorICAgICAgICBmb3IoT2JqZWN0IG86IGwpDQorICAgICAgICAgICAgdy5wcmludGxuKG8pOw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0NCisNCisgICAgcHVibGljIE1hcDxTdHJpbmcsIE5vZGVjb25mPiBydW4oZmluYWwgQnVmZmVyZWRSZWFkZXIgciwgZmluYWwgUHJpbnRXcml0ZXIgdykgdGhyb3dzIElPRXhjZXB0aW9uIHsNCisgICAgICAgIHdoaWxlKHByaW50KGFwcGx5KGV2YWwocmVhZChyKSkpLCB3KSkNCisgICAgICAgICAgICA7DQorICAgICAgICByLmNsb3NlKCk7DQorICAgICAgICByZXR1cm4gbm9kZXM7DQorICAgIH0NCisNCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oZmluYWwgU3RyaW5nW10gYXJncykgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBuZXcgU2hlbGwoTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKSkucnVuKG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW4pKSwgbmV3IFByaW50V3JpdGVyKG91dCwgdHJ1ZSkpOw0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NyYy9tYWluL2phdmEvc2FtcGxlL1NoZWxsU2VydmxldC5qYXZhIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvc3JjL21haW4vamF2YS9zYW1wbGUvU2hlbGxTZXJ2bGV0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhYWRiZAotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NyYy9tYWluL2phdmEvc2FtcGxlL1NoZWxsU2VydmxldC5qYXZhCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIHNhbXBsZTsKKworaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOworaW1wb3J0IGphdmEubmV0LlVSTDsKKworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldDsKK2ltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OworaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0LndlYmFwcC5XZWJBcHBIZWxwZXI7CisKK3B1YmxpYyBjbGFzcyBTaGVsbFNlcnZsZXQgZXh0ZW5kcyBIdHRwU2VydmxldCB7CisgICAgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOworCisgICAgU2hlbGwgc2hlbGw7CisKKyAgICBwdWJsaWMgdm9pZCBpbml0KCkgeworICAgICAgICBzaGVsbCA9IG5ldyBTaGVsbChXZWJBcHBIZWxwZXIuZ2V0Tm9kZUZhY3RvcnkoKSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgZGVzdHJveSgpIHsKKyAgICAgICAgc2hlbGwuc3RvcCgpOworICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIGRvR2V0KGZpbmFsIEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIGZpbmFsIEh0dHBTZXJ2bGV0UmVzcG9uc2UgcmVzcCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgc2hlbGwucnVuKG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIobmV3IFVSTChyZXEuZ2V0UGFyYW1ldGVyKCJjb25mIikpLm9wZW5TdHJlYW0oKSkpLCByZXNwLmdldFdyaXRlcigpKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9zYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwgYi9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9zaGVsbC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBzYW1wbGVzL2xhdW5jaGVyLXNoZWxsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKcmVuYW1lIHRvIHNhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NyYy9tYWluL3dlYmFwcC9XRUItSU5GL3dlYi54bWwKZGlmZiAtLWdpdCBhL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NyYy9tYWluL3dlYmFwcC9pbmRleC5odG1sIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvc2hlbGwvc3JjL21haW4vd2ViYXBwL2luZGV4Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4YTg1NgotLS0gL2Rldi9udWxsCisrKyBiL3NhbXBsZXMvcnVubmluZy10dXNjYW55L3NoZWxsL3NyYy9tYWluL3dlYmFwcC9pbmRleC5odG1sCkBAIC0wLDAgKzEsNDIgQEAKKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+U2FtcGxlIFJ1bnRpbWUgU2hlbGw8L3RpdGxlPgorPC9oZWFkPgorPGJvZHk+Cis8aDE+SXQgd29ya3M8L2gxPgorCis8cD5UaGlzIFdlYiBhcHAgcnVucyBhIHNhbXBsZSBUdXNjYW55IHJ1bnRpbWUgc2hlbGwgc2ltaWxhciB0byBzYW1wbGVzL2xhdW5jaGVyLXNoZWxsLjxici8+CitUbyBzZWUgaG93IGl0IHdvcmtzIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gY29tbWFuZHMgYXJlIHN1cHBvcnRlZCwganVzdCByZWFkIHRoZSBTaGVsbCBwcm9ncmFtJ3MgPGEgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi90dXNjYW55L3NjYS1qYXZhLTIueC90cnVuay9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9sYXVuY2hlci1zaGVsbC9zcmMvbWFpbi9qYXZhL3NhbXBsZS9TaGVsbC5qYXZhIj5zb3VyY2UgY29kZTwvYT4uPC9wPgorCis8cD5Db25maWd1cmF0aW9uIGNvbW1hbmRzIGNhbiBiZSBwcm92aWRlZCB0aHJvdWdoIGEgdGV4dCBkb2N1bWVudCBzZXJ2ZWQgZnJvbSBhIFdlYiBsb2NhdGlvbiwgZm9yIGV4YW1wbGU6PGJyLz4KKzxhIGhyZWY9Imh0dHA6Ly9zdm4uYXBhY2hlLm9yZy9yZXBvcy9hc2YvdHVzY2FueS9zY2EtamF2YS0yLngvdHJ1bmsvc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvbGF1bmNoZXItc2hlbGwvc2NyaXB0cy90ZXN0LXN0YXJ0LnR4dCI+aHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi90dXNjYW55L3NjYS1qYXZhLTIueC90cnVuay9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9sYXVuY2hlci1zaGVsbC9zY3JpcHRzL3Rlc3Qtc3RhcnQudHh0PC9hPjwvcD4KKworPHA+VG8gcnVuIHRoYXQgcGFydGljdWxhciBjb25maWd1cmF0aW9uIHNjcmlwdCBqdXN0IHBvaW50IHlvdXIgV2ViIGJyb3dzZXIgdG86PGJyLz4KKzxhIGhyZWY9Ii9zY2FzaGVsbC9ydW4/Y29uZj1odHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3R1c2Nhbnkvc2NhLWphdmEtMi54L3RydW5rL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2xhdW5jaGVyLXNoZWxsL3NjcmlwdHMvdGVzdC1zdGFydC50eHQiPmh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zY2FzaGVsbC9ydW4/Y29uZj1odHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL3R1c2Nhbnkvc2NhLWphdmEtMi54L3RydW5rL3NhbXBsZXMvcnVubmluZy10dXNjYW55L2xhdW5jaGVyLXNoZWxsL3NjcmlwdHMvdGVzdC1zdGFydC50eHQ8L2E+PGJyLz4KK1RvIHJ1biB0aGUgc2NyaXB0IGFnYWluIGFuZCByZWZyZXNoIHRoZSBydW50aW1lIHNoZWxsLCBqdXN0IHJlZnJlc2ggdGhhdCBwYWdlIGluIHlvdXIgV2ViIGJyb3dzZXIuCis8L3A+CisKKzxwPlRoaXMgc2NyaXB0IHN0YXJ0cyB0aGUgVHVzY2FueSBzYW1wbGUgc3RvcmUgYXBwbGljYXRpb24uIENsaWNrIDxhIGhyZWY9Ii9zY2FzaGVsbC9zdG9yZS8iPmhlcmU8L2E+IHRvIHVzZSB0aGF0IGFwcGxpY2F0aW9uIGFmdGVyIHlvdSd2ZSBzdGFydGVkIGl0LjwvcD4KKworPHA+U2FtcGxlIGNvbmZpZ3VyYXRpb24gc2NyaXB0IHNhbXBsZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgVHVzY2FueSBTdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgPGEgaHJlZj0iaHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi90dXNjYW55L3NjYS1qYXZhLTIueC90cnVuay9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9sYXVuY2hlci1zaGVsbC9zY3JpcHRzLyI+dGhlcmU8L2E+LgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS93ZWJhcHAvUkVBRE1FIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvd2ViYXBwL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDgwZTM2Ci0tLSAvZGV2L251bGwKKysrIGIvc2FtcGxlcy9ydW5uaW5nLXR1c2Nhbnkvd2ViYXBwL1JFQURNRQpAQCAtMCwwICsxLDU5IEBACitUaGUgVHVzY2FueSBTQ0EgSmF2YSBydW50aW1lIGNhbiBydW4gaW5zaWRlIGEgd2ViYXBwIChhIFdBUikgYW5kIGV4cG9zZSANCitzZXJ2aWNlcyB3aGVuIHRoZSB3ZWJhcHAgaXMgc3RhcnRlZC4gSW4gb3JkZXIgZm9yIHRoaXMgdG8gd29yayANCithIG51bWJlciBvZiB0aGluZ3MgaGF2ZSB0byBiZSBpbiBwbGFjZSBpbiB0aGUgd2ViYXBwOg0KKw0KKzEuIFRoZSBUdXNjYW55IHJ1bnRpbWUgamFycyBoYXZlIHRvIGJlIHBhY2thZWQgaW4gdGhlIHdlYmFwcCBXRUItSU5GL2xpYg0KKyAgIGRpcmVjdG9yeQ0KKzIuIFRoZSBUdXNjYW55IEhUVFAgZmlsdGVyIHNlcnZsZXQgaGFzIHRvIGJlIGNvbmZpZ3VyZWQgaW4gdGhlIA0KKyAgIFdFQi1JTkYvd2ViLnhtbCBmaWxlIHVzaW5nIHNvbWV0aGluZyBsaWtlOg0KKw0KKyAgPGZpbHRlcj4NCisgICAgPGZpbHRlci1uYW1lPnR1c2Nhbnk8L2ZpbHRlci1uYW1lPiANCisgICAgPGZpbHRlci1jbGFzcz5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmhvc3Qud2ViYXBwLlR1c2NhbnlTZXJ2bGV0RmlsdGVyPC9maWx0ZXItY2xhc3M+IA0KKyAgPC9maWx0ZXI+DQorDQorICA8ZmlsdGVyLW1hcHBpbmc+DQorICAgIDxmaWx0ZXItbmFtZT50dXNjYW55PC9maWx0ZXItbmFtZT4gDQorICAgIDx1cmwtcGF0dGVybj4vKjwvdXJsLXBhdHRlcm4+IA0KKyAgPC9maWx0ZXItbWFwcGluZz4NCisNCiszLiBUaGUgY29tcG9zaXRlIGFwcGxpY2F0aW9uIGhhcyB0byBwYWNrYWdlZCBpbiB0aGUgV0FSIGZpbGUuIFdoZW4gdGhlIA0KKyAgIFR1c2NhbnlTZXJ2bGV0RmlsdGVyIHN0YXJ0ZWQgaXQgZWZmZWN0dmVseSByZWFkcyBpdHMgb3duIFdBUiBmaWxlIGFzDQorICAgdGhlIGNvbnRyaWJ1dGlvbi4gQXMgYW4gYWx0ZXJuYXRpdmUgeW91IGNhbiBwYWNrYWdlIGNvbXBsZXRlIA0KKyAgIGNvbnRyaWJ1dGlvbiBhcmNoaXZlcyBpbiB0aGUgV0VCLUlORi9zY2EtY29udHJpYnV0aW9ucyBkaXJlY3RvcnkuDQorDQorSW4gdGhlIGdldHRpbmctc3RhcnRlZC9oZWxsb3dvcmwtd2ViYXBwIHNhbXBsZSB3ZSBwcm92aWRlZCBhIE1hdmVuIA0KK2J1aWxkIHNjcmlwdCB0aGF0IHBlcmZvcm0gdGhlc2UgV0FSIHBhY2thZ2luZyBzdGVwcy4gDQorDQorVG8gZXhlY3V0ZSBhIHdlYmFwcCBiYXNlZCBjb250cmlidXRpb25zIChzYW1wbGUgY29udHJpYnV0aW9ucyB0aGF0IGhhdmUgd2ViYXBwDQorYXQgdGhlIGVuZCBvZiB0aGVpciBuYW1lKSB5b3UgY2FuIGJ1aWxkIHRoZSBjb250cmlidXRpb24gdXNpbmcgbWF2ZW4gYW5kIHRoZW4gDQorY29weSB0aGUgcmVzdWx0aW5nIHdhciBmaWxlIHRvIHlvdXIgd2ViIGNvbnRhaW5lciBvZiBjaG9pY2UNCisNCitGb3IgZXhhbXBsZSwgZm9yIGxlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXdlYmFwcCwgDQorZG8gdGhlIGZvbGxvd2luZw0KKw0KK2NkIGxlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXdlYmFwcA0KK212biANCitjcCB0YXJnZXQvc2FtcGxlLWNvbnRyaWJ1dGlvbi1iaW5kaW5nLWpzb25ycGMtY2FsY3VsYXRvci13ZWJhcHAud2FyIHlvdXJfY29udGFpbmVyX2RlcGxveW1lbnQtZGlyDQorDQorDQorQXMgYW4gYWx0ZXJuYXRpdmUgc2FtcGxlIHdlYmFwcCBiYXNlZCBjb250cmlidXRpb25zIGNhbiBiZSBydW4gd2l0aGluIEpldHR5IGRpcmVjdGx5IGZyb20gTWF2ZW4sIGxvb2sgZm9yIA0KK3dlYmFwcCBjb250cmlidXRpb25zIHRoYXQgaGF2ZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gaW4gdGhlaXIgcG9tLnhtbCBmaWxlOg0KKw0KKzxwbHVnaW4+DQorICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KKyAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgIDx2ZXJzaW9uPjYuMS4xODwvdmVyc2lvbj4NCis8L3BsdWdpbj4NCisNCitGb3IgY29udHJpYnV0aW9ucyB0aGF0IGhhdmUgdGhpcywgZm9yIGV4YW1wbGUsIA0KK2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXdlYmFwcCwgZG8gdGhlIGZvbGxvd2luZw0KKw0KK2NkIGxlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NvbnRyaWJ1dGlvbi1jYWxjdWxhdG9yLXdlYmFwcA0KK212biBqZXR0eTpydW4NCisNCitUaGlzIHdpbGwgbGF1bmNoIHRoZSBjb250cmlidXRpb24gaW4gdGhlIEpldHR5IHJ1bnRpbWUgYW5kIHRoZW4gd2FpdC4gQXQgdGhpcyBwb2ludCB5b3UgY2FuIHVzZQ0KK0hUVFAgY2xpZW50cyB0byBzZW5kIG1lc3NhZ2VzIHRvIHNlcnZpY2VzIHRoYXQgdGhlIHJ1bm5pbmcgU0NBIGFwcGxjYXRpb24gZXhwb3Nlcy4gRm9yIHRoaXMgDQorZXhhbXBsZSB0cnkgcG9pbnRpbmcgeW91ciBicm93c2VyIGF0Og0KKw0KK2h0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9zYW1wbGUtY29udHJpYnV0aW9uLWJpbmRpbmctanNvbnJwYy1jYWxjdWxhdG9yLXdlYmFwcC8NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3N0b3JlLXdlYmFwcC9wb20ueG1sIGIvc2FtcGxlcy9zdG9yZS13ZWJhcHAvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODAwMGIwZi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3N0b3JlLXdlYmFwcC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAgICAqIAotICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAgICAqIAotICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtc3RvcmUtd2ViYXBwPC9hcnRpZmFjdElkPgotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBHZXR0aW5nIFN0YXJ0ZWQgT25saW5lIFN0b3JlIGFzIFdlYkFwcDwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC13ZWJhcHA8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGEtYXBpPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1mZWF0dXJlLXdlYjIwPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgIDwvZGVwZW5kZW5jaWVzPgotICAgIAotICAgIDxidWlsZD4KLSAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KLSAgICAgICA8cGx1Z2lucz4KLQkJCTxwbHVnaW4+Ci0JCQkJPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+Ci0JCQkJPGFydGlmYWN0SWQ+dG9tY2F0LW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4KLQkJCQk8dmVyc2lvbj4xLjAtYmV0YS0xPC92ZXJzaW9uPgotCQkJCTxjb25maWd1cmF0aW9uPgotCQkJCQk8IS0tIEtleSB1c2VkIGZvciBjb25maWd1cmluZyBhY2Nlc3MgdG8gc2VydmVyIGluIHNldHRpbmdzLnhtbC0tPgotCi0JCQkJCTxzZXJ2ZXI+dG9tY2F0PC9zZXJ2ZXI+Ci0JCQkJCTwhLS0gY29udGV4dCBmb3IgdGhlIHdlYmFwcCwgYXMgZmluYWxOYW1lIGlzIG5vdCBiZWluZyBob25vcmVkIC0tPgotCQkJCQk8cGF0aD4vJHthcnRpZmFjdElkfTwvcGF0aD4KLQkJCQk8L2NvbmZpZ3VyYXRpb24+Ci0JCQk8L3BsdWdpbj4gICAgICAgCi0gICAgICAgICAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj42LjEuMTg8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgICAgICA8L3BsdWdpbj4gICAgICAgCi0gICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvc3RvcmUvYnVpbGQueG1sIGIvc2FtcGxlcy9zdG9yZS9idWlsZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkMzZhMGQuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy9zdG9yZS9idWlsZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdCBuYW1lPSJzdG9yZSIgZGVmYXVsdD0iY29tcGlsZSI+Ci0gICAgPHByb3BlcnR5IG5hbWU9InRlc3QuY2xhc3MiIHZhbHVlPSJsYXVuY2guTGF1bmNoIiAvPgotCTxwcm9wZXJ0eSBuYW1lPSJ0ZXN0LmphciIgICB2YWx1ZT0ic2FtcGxlLXN0b3JlLmphciIgLz4KLQkKLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8bWtkaXIgZGlyPSJ0YXJnZXQvY2xhc3NlcyIvPgotICAgIDwvdGFyZ2V0PgotCQotICAgIDx0YXJnZXQgbmFtZT0iY29tcGlsZSIgZGVwZW5kcz0iaW5pdCI+Ci0gICAgICAgIDxqYXZhYyBzcmNkaXI9InNyYy9tYWluL2phdmEiCi0gICAgICAgICAgICAgICBkZXN0ZGlyPSJ0YXJnZXQvY2xhc3NlcyIKLSAgICAgICAgICAgICAgIGRlYnVnPSJvbiIKLSAgICAgICAgICAgICAgIHNvdXJjZT0iMS41IgotICAgICAgICAgICAgICAgdGFyZ2V0PSIxLjUiPgotICAgICAgICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgICAgIAk8cGF0aGVsZW1lbnQgbG9jYXRpb249Ii4uLy4uL2ZlYXR1cmVzL3R1c2Nhbnktc2NhLW1hbmlmZXN0LmphciIvPgotICAgICAgICAgICAgCTxmaWxlc2V0IHJlZmlkPSIzcmRwYXJ0eS5qYXJzIi8+Ci0gICAgICAgICAgICA8L2NsYXNzcGF0aD4KLSAgICAgICAgPC9qYXZhYz4gCi0gICAgICAgIDxjb3B5IHRvZGlyPSJ0YXJnZXQvY2xhc3NlcyI+Ci0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9InNyYy9tYWluL3Jlc291cmNlcyIvPgotICAgICAgICA8L2NvcHk+Ci0gICAgICAgIDxqYXIgZGVzdGZpbGU9InRhcmdldC8ke3Rlc3QuamFyfSIgYmFzZWRpcj0idGFyZ2V0L2NsYXNzZXMiPgotICAgICAgICAgICAgPG1hbmlmZXN0PgotICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0iTWFpbi1DbGFzcyIgdmFsdWU9IiR7dGVzdC5jbGFzc30iIC8+IAotICAgICAgICAgICAgPC9tYW5pZmVzdD4KLSAgICAgICAgPC9qYXI+ICAgIAkKLSAgICA8L3RhcmdldD4JCi0JCi0gICAgPHRhcmdldCBuYW1lPSJydW4tY2xhc3NlcyI+Ci0gICAgICAgIDxqYXZhIGNsYXNzbmFtZT0iJHt0ZXN0LmNsYXNzfSIKLSAgICAgICAgICAgICAgZm9yaz0idHJ1ZSI+Ci0gICAgICAgICAgICA8Y2xhc3NwYXRoPgotICAgICAgICAgICAgICAgIDxwYXRoZWxlbWVudCBwYXRoPSJ0YXJnZXQvY2xhc3NlcyIvPgotICAgICAgICAgICAgCTxwYXRoZWxlbWVudCBsb2NhdGlvbj0iLi4vLi4vZmVhdHVyZXMvdHVzY2FueS1zY2EtbWFuaWZlc3QuamFyIi8+Ci0gICAgICAgICAgICAJPGZpbGVzZXQgcmVmaWQ9IjNyZHBhcnR5LmphcnMiLz4KLSAgICAgICAgICAgIDwvY2xhc3NwYXRoPgotICAgICAgICA8L2phdmE+Ci0gICAgPC90YXJnZXQ+Ci0JCi0gICAgPHRhcmdldCBuYW1lPSJydW4iPgotICAgICAgICA8amF2YSBjbGFzc25hbWU9IiR7dGVzdC5jbGFzc30iCi0gICAgICAgICAgICAgIGZvcms9InRydWUiPgotICAgICAgICAgICAgPGNsYXNzcGF0aD4KLSAgICAgICAgICAgIAk8cGF0aGVsZW1lbnQgcGF0aD0idGFyZ2V0LyR7dGVzdC5qYXJ9Ii8+Ci0gICAgICAgICAgICAJPHBhdGhlbGVtZW50IGxvY2F0aW9uPSIuLi8uLi9mZWF0dXJlcy90dXNjYW55LXNjYS1tYW5pZmVzdC5qYXIiLz4KLSAgICAgICAgICAgIAk8ZmlsZXNldCByZWZpZD0iM3JkcGFydHkuamFycyIvPgotICAgICAgICAgICAgPC9jbGFzc3BhdGg+Ci0gICAgICAgIDwvamF2YT4gICAgCQotICAgIDwvdGFyZ2V0PgkKLQkKLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFuIj4KLSAgICAgICAgPGRlbGV0ZSBxdWlldD0idHJ1ZSIgaW5jbHVkZWVtcHR5ZGlycz0idHJ1ZSI+Ci0gICAgICAgICAgICA8ZmlsZXNldCBkaXI9InRhcmdldCIvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICA8L3RhcmdldD4KLSAgICAKLSAgICA8ZmlsZXNldCBpZD0iM3JkcGFydHkuamFycyIgZGlyPSIuLi8uLi9saWIiPgotICAgICAgICA8aW5jbHVkZSBuYW1lPSJzYXhvbi04LjcuamFyIi8+Ci0gICAgPC9maWxlc2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9wb20ueG1sIGIvc2FtcGxlcy9zdG9yZS9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NmJhY2ZmLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RvcmUvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0gICAgPGFydGlmYWN0SWQ+c2FtcGxlLXN0b3JlPC9hcnRpZmFjdElkPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgR2V0dGluZyBTdGFydGVkIE9ubGluZSBTdG9yZTwvbmFtZT4KLQotCTxkZXBlbmRlbmNpZXM+Ci0JCTxkZXBlbmRlbmN5PgotCQkJPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLQkJCTxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPgotCQkJPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotCQk8L2RlcGVuZGVuY3k+Ci0KLQkJPGRlcGVuZGVuY3k+Ci0JCQk8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotCQkJPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhLWFwaTwvYXJ0aWZhY3RJZD4KLQkJCTx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLQkJPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZmVhdHVyZS13ZWIyMDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5uZXQuc291cmNlZm9yZ2UuaHRtbHVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNjwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotICAgICAgICAKLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICA8L2RlcGVuZGVuY2llcz4KLSAgICAKLSAgICA8YnVpbGQ+Ci0gICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+Ci0gICAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9zdG9yZS9zcmMvbWFpbi9yZXNvdXJjZXMvdWlzZXJ2aWNlcy9zdG9yZS5odG1sIGIvc2FtcGxlcy9zdG9yZS9zcmMvbWFpbi9yZXNvdXJjZXMvdWlzZXJ2aWNlcy9zdG9yZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDBmMWY4Li4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvc3RvcmUvc3JjL21haW4vcmVzb3VyY2VzL3Vpc2VydmljZXMvc3RvcmUuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE2MiArMCwwIEBACi08IS0tCi0gICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gICAgKiAKLSAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gICAgKiAKLSAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08aHRtbD4KLTxoZWFkPgotPHRpdGxlPlN0b3JlPC90aXRsZT4KLQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iL2Rvam8vZG9qby5qcyI+PC9zY3JpcHQ+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJzdG9yZS5qcyI+PC9zY3JpcHQ+Ci0KLTxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgotCi0JLy9AUmVmZXJlbmNlCi0JdmFyIGNhdGFsb2cgPSBuZXcgdHVzY2FueS5zY2EuUmVmZXJlbmNlKCJjYXRhbG9nIik7Ci0JCi0JLy9AUmVmZXJlbmNlCi0JdmFyIHNob3BwaW5nQ2FydCA9IG5ldyB0dXNjYW55LnNjYS5SZWZlcmVuY2UoInNob3BwaW5nQ2FydCIpOwotCi0JLy9AUmVmZXJlbmNlCi0JdmFyIHNob3BwaW5nVG90YWwgPSBuZXcgdHVzY2FueS5zY2EuUmVmZXJlbmNlKCJzaG9wcGluZ1RvdGFsIik7Ci0JCi0JdmFyIGNhdGFsb2dJdGVtczsKLQotCWZ1bmN0aW9uIGNhdGFsb2dfZ2V0UmVzcG9uc2UoaXRlbXMsZXhjZXB0aW9uKSB7Ci0JCWlmKGV4Y2VwdGlvbil7Ci0JCQlhbGVydChleGNlcHRpb24ubWVzc2FnZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdmFyIGNhdGFsb2cgPSAiIjsKLQkJCi0JCWZvciAodmFyIGk9MDsgaTxpdGVtcy5sZW5ndGg7IGkrKykgewotCQkJdmFyIGl0ZW0gPSBpdGVtc1tpXS5uYW1lICsgJyAtICcgKyBpdGVtc1tpXS5wcmljZTsKLQkJCWNhdGFsb2cgKz0gJzxpbnB1dCBuYW1lPSJpdGVtcyIgdHlwZT0iY2hlY2tib3giIHZhbHVlPSInICsgCi0JCQkJCQlpdGVtICsgJyI+JyArIGl0ZW0gKyAnIDxicj4nOwotCQl9Ci0JCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjYXRhbG9nJykuaW5uZXJIVE1MPWNhdGFsb2c7Ci0JCWNhdGFsb2dJdGVtcyA9IGl0ZW1zOwotCX0KLQkKLQlmdW5jdGlvbiBzaG9wcGluZ0NhcnRfZ2V0UmVzcG9uc2UoZmVlZCkgewotCQlpZiAoZmVlZCAhPSBudWxsKSB7Ci0JCQl2YXIgZW50cmllcyA9IGZlZWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImVudHJ5Iik7IAotCQkJdmFyIGxpc3QgPSAiIjsKLQkJCWZvciAodmFyIGk9MDsgaTxlbnRyaWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdmFyIGNvbnRlbnQgPSBlbnRyaWVzW2ldLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJjb250ZW50IilbMF07Ci0JCQkJdmFyIG5hbWUgPSBjb250ZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJuYW1lIilbMF0uZmlyc3RDaGlsZC5ub2RlVmFsdWU7Ci0JCQkJdmFyIHByaWNlID0gY29udGVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgicHJpY2UiKVswXS5maXJzdENoaWxkLm5vZGVWYWx1ZTsKLQkJCQlsaXN0ICs9IG5hbWUgKyAnIC0gJyArIHByaWNlICsgJyA8YnI+JzsKLQkJCX0KLQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzaG9wcGluZ0NhcnQiKS5pbm5lckhUTUwgPSBsaXN0OwotCi0JCQlpZiAoZW50cmllcy5sZW5ndGggIT0gMCkgewkJCQotCQkJCXRyeQl7Ci0JCQkJCXNob3BwaW5nVG90YWwuZ2V0VG90YWwoKS5hZGRDYWxsYmFjayhzaG9wcGluZ1RvdGFsX2dldFRvdGFsUmVzcG9uc2UpOwotCQkJCX0KLQkJCQljYXRjaChlKXsKLQkJCQkJYWxlcnQoZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCQotCWZ1bmN0aW9uIHNob3BwaW5nVG90YWxfZ2V0VG90YWxSZXNwb25zZSh0b3RhbCxleGNlcHRpb24pIHsKLQkJaWYoZXhjZXB0aW9uKSB7IAotCQkJYWxlcnQoZXhjZXB0aW9uLm1lc3NhZ2UpOyAKLQkJCXJldHVybjsKLQkJfQotCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90YWwnKS5pbm5lckhUTUwgPSB0b3RhbDsKLQl9Ci0JCi0JZnVuY3Rpb24gc2hvcHBpbmdDYXJ0X3Bvc3RSZXNwb25zZShlbnRyeSkgewotCQlzaG9wcGluZ0NhcnQuZ2V0KCIiKS5hZGRDYWxsYmFjayhzaG9wcGluZ0NhcnRfZ2V0UmVzcG9uc2UpOwotCX0JCQkJCi0KLQlmdW5jdGlvbiBhZGRUb0NhcnQoKSB7Ci0JCXZhciBpdGVtcyAgPSBkb2N1bWVudC5jYXRhbG9nRm9ybS5pdGVtczsKLQkJdmFyIGogPSAwOwotCQlmb3IgKHZhciBpPTA7IGk8aXRlbXMubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChpdGVtc1tpXS5jaGVja2VkKSB7Ci0JCQkJdmFyIGVudHJ5ID0gJzxlbnRyeSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwNS9BdG9tIj48dGl0bGU+aXRlbTwvdGl0bGU+PGNvbnRlbnQgdHlwZT0idGV4dC94bWwiPicgKwotICAgICAgICAgICAgICAgIAknPEl0ZW0geG1sbnM9Imh0dHA6Ly9zZXJ2aWNlcy8iPicgKwotICAgICAgICAgICAgICAgIAknPG5hbWUgeG1sbnM9IiI+JyArIGNhdGFsb2dJdGVtc1tpXS5uYW1lICsgJzwvbmFtZT4nICsgJzxwcmljZSB4bWxucz0iIj4nICsgY2F0YWxvZ0l0ZW1zW2ldLnByaWNlICsgJzwvcHJpY2U+JyArCi0gICAgICAgICAgICAgICAgIAknPC9JdGVtPicgKyAnPC9jb250ZW50PjwvZW50cnk+JzsKLQkJCQlzaG9wcGluZ0NhcnQucG9zdChlbnRyeSkuYWRkQ2FsbGJhY2soc2hvcHBpbmdDYXJ0X3Bvc3RSZXNwb25zZSk7Ci0JCQkJaXRlbXNbaV0uY2hlY2tlZCA9IGZhbHNlOwotCQkJfQotCQl9Ci0JfQotCWZ1bmN0aW9uIGNoZWNrb3V0Q2FydCgpIHsKLQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3N0b3JlJykuaW5uZXJIVE1MPSc8aDI+JyArCi0JCQkJJ1RoYW5rcyBmb3IgU2hvcHBpbmcgV2l0aCBVcyE8L2gyPicrCi0JCQkJJzxoMj5Zb3VyIE9yZGVyPC9oMj4nKwotCQkJCSc8Zm9ybSBuYW1lPSJvcmRlckZvcm0iPicrCi0JCQkJCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG9wcGluZ0NhcnQnKS5pbm5lckhUTUwrCi0JCQkJCSc8YnI+JysKLQkJCQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdGFsJykuaW5uZXJIVE1MKwotCQkJCQknPGJyPicrCi0JCQkJCSc8YnI+JysKLQkJCQkJJzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDb250aW51ZSBTaG9wcGluZyI+JysgCi0JCQkJJzwvZm9ybT4nOwotCQlzaG9wcGluZ0NhcnQuZGVsKCIiKTsKLQl9Ci0JZnVuY3Rpb24gZGVsZXRlQ2FydCgpIHsKLQkJc2hvcHBpbmdDYXJ0LmRlbCgiIik7Ci0JCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzaG9wcGluZ0NhcnQnKS5pbm5lckhUTUwgPSAiIjsKLQkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RvdGFsJykuaW5uZXJIVE1MID0gIiI7CQotCX0JCi0KLQlmdW5jdGlvbiBpbml0KCkgewotCQl0cnkJewotCQkJY2F0YWxvZy5nZXQoKS5hZGRDYWxsYmFjayhjYXRhbG9nX2dldFJlc3BvbnNlKTsKLQkJCXNob3BwaW5nQ2FydC5nZXQoIiIpLmFkZENhbGxiYWNrKHNob3BwaW5nQ2FydF9nZXRSZXNwb25zZSk7Ci0JCX0KLQkJY2F0Y2goZSl7Ci0JCQlhbGVydChlKTsKLQkJfQotCX0KLQkKLTwvc2NyaXB0PgotCi08L2hlYWQ+Ci0KLTxib2R5IG9ubG9hZD0iaW5pdCgpIj4KLTxoMT5TdG9yZTwvaDE+Ci0gIDxkaXYgaWQ9InN0b3JlIj4KLSAgIAk8aDI+Q2F0YWxvZzwvaDI+Ci0gICAJPGZvcm0gbmFtZT0iY2F0YWxvZ0Zvcm0iPgotCQk8ZGl2IGlkPSJjYXRhbG9nIiA+PC9kaXY+Ci0JCTxicj4KLQkJPGlucHV0IHR5cGU9ImJ1dHRvbiIgb25DbGljaz0iYWRkVG9DYXJ0KCkiICB2YWx1ZT0iQWRkIHRvIENhcnQiPgotICAgCTwvZm9ybT4KLSAKLSAJPGJyPgotICAKLSAgIAk8aDI+WW91ciBTaG9wcGluZyBDYXJ0PC9oMj4KLSAgIAk8Zm9ybSBuYW1lPSJzaG9wcGluZ0NhcnRGb3JtIj4KLQkJPGRpdiBpZD0ic2hvcHBpbmdDYXJ0Ij48L2Rpdj4KLQkJPGJyPgotCQk8ZGl2IGlkPSJ0b3RhbCI+PC9kaXY+Ci0JCTxicj4JCQotCQk8aW5wdXQgdHlwZT0iYnV0dG9uIiBvbkNsaWNrPSJjaGVja291dENhcnQoKSIgdmFsdWU9IkNoZWNrb3V0Ij4gCi0JCTxpbnB1dCB0eXBlPSJidXR0b24iIG9uQ2xpY2s9ImRlbGV0ZUNhcnQoKSIgdmFsdWU9IkVtcHR5Ij4gICAgIAotCSAgIAk8YSBocmVmPSIuLi9TaG9wcGluZ0NhcnQvQ2FydC8iPihmZWVkKTwvYT4KLQk8L2Zvcm0+ICAgIAotICA8L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWJwZWwvcG9tLnhtbCBiL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWJwZWwvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4N2RhMi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1icGVsL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdCB4bWxucz0iaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIg0KLQl4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL1BPTS80LjAuMCBodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9tYXZlbi12NF8wXzAueHNkIj4NCi0NCi0gICAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgICAgPHBhcmVudD4NCi0gICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQotICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgICAgPC9wYXJlbnQ+DQotDQotICAgICAgPGFydGlmYWN0SWQ+c2FtcGxlLWhlbGxvd29ybGQtYnBlbC13ZWJhcHA8L2FydGlmYWN0SWQ+DQotICAgICAgPHBhY2thZ2luZz53YXI8L3BhY2thZ2luZz4NCi0gICAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2FtcGxlIEhlbGxvd29ybGQgQlBFTDwvbmFtZT4NCi0NCi0JPHByb3BlcnRpZXM+DQotCQk8dHVzY2FueS52ZXJzaW9uPjIuMC1CZXRhMTwvdHVzY2FueS52ZXJzaW9uPg0KLQkJPGpldHR5LnZlcnNpb24+Ni4xLjE4PC9qZXR0eS52ZXJzaW9uPg0KLQk8L3Byb3BlcnRpZXM+DQotDQotCTxkZXBlbmRlbmNpZXM+DQotCQk8IS0tICBUVVNDQU5ZIERFUEVOREVOQ0lFUyAtLT4NCi0gICAgICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICA8dmVyc2lvbj4ke3R1c2NhbnkudmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi13ZWItcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICA8dmVyc2lvbj4ke3R1c2NhbnkudmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KLSAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tYnBlbC1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgIDx2ZXJzaW9uPiR7dHVzY2FueS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQotICAgICAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLQkJPCEtLSAgSlVOSVQgREVQRU5ERU5DWSBGT1IgVEVTVElORyAtLT4NCi0JCTxkZXBlbmRlbmN5Pg0KLQkJCTxncm91cElkPmp1bml0PC9ncm91cElkPg0KLQkJCTxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KLQkJCTx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KLQkJCTxzY29wZT50ZXN0PC9zY29wZT4NCi0JCTwvZGVwZW5kZW5jeT4NCi0NCi0JCTwhLS0gIEpFVFRZIERFUEVOREVOQ0lFUyBGT1IgVEVTVElORyAgLS0+DQotCQk8ZGVwZW5kZW5jeT4NCi0JCQk8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4NCi0JCQk8YXJ0aWZhY3RJZD5qZXR0eTwvYXJ0aWZhY3RJZD4NCi0JCQk8dmVyc2lvbj4ke2pldHR5LnZlcnNpb259PC92ZXJzaW9uPg0KLQkJCTxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotCQk8L2RlcGVuZGVuY3k+DQotCQk8ZGVwZW5kZW5jeT4NCi0JCQk8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4NCi0JCQk8YXJ0aWZhY3RJZD5qZXR0eS11dGlsPC9hcnRpZmFjdElkPg0KLQkJCTx2ZXJzaW9uPiR7amV0dHkudmVyc2lvbn08L3ZlcnNpb24+DQotCQkJPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0JCTwvZGVwZW5kZW5jeT4NCi0JCTxkZXBlbmRlbmN5Pg0KLQkJCTxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KLQkJCTxhcnRpZmFjdElkPmpldHR5LW1hbmFnZW1lbnQ8L2FydGlmYWN0SWQ+DQotCQkJPHZlcnNpb24+JHtqZXR0eS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0JCQk8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLQkJPC9kZXBlbmRlbmN5Pg0KLQk8L2RlcGVuZGVuY2llcz4NCi0NCi0JPGJ1aWxkPg0KLSAgICAgICAgIDxmaW5hbE5hbWU+aGVsbG93b3JsZC1icGVsPC9maW5hbE5hbWU+DQotDQotICAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgPGlkPnVucGFjazwvaWQ+DQotICAgICAgICAgICAgICAgICAgPHBoYXNlPmNvbXBpbGU8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgIDxnb2FsPnVucGFjazwvZ29hbD4NCi0gICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KLSAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbXM+DQotICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5vZGU8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b2RlLWRhby1qcGEtb2pwYS1kZXJieTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+DQotICAgICAgICAgICAgICAgICAgICAgICAgPG92ZXJXcml0ZT5mYWxzZTwvb3ZlcldyaXRlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vY2xhc3Nlczwvb3V0cHV0RGlyZWN0b3J5Pg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4qKi8qPC9pbmNsdWRlcz4NCi0gICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQotICAgICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbXM+DQotICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQotICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQotICAgICAgICAgICAgPC9wbHVnaW4+DQotDQotICAgICAgICAgIDxwbHVnaW4+DQotICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xODwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgIDxjb250ZXh0UGF0aD5oZWxsb3dvcmxkLWJwZWw8L2NvbnRleHRQYXRoPg0KLSAgICAgICAgICAgICAgICA8c3RvcEtleT5mb288L3N0b3BLZXk+DQotICAgICAgICAgICAgICAgIDxzdG9wUG9ydD45OTk5PC9zdG9wUG9ydD4NCi0gICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgICAgPGlkPnN0YXJ0LWpldHR5PC9pZD4NCi0gICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtdGVzdC1jbGFzc2VzPC9waGFzZT4NCi0gICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPg0KLSAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KLSAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgIDxzY2FuSW50ZXJ2YWxTZWNvbmRzPjA8L3NjYW5JbnRlcnZhbFNlY29uZHM+DQotICAgICAgICAgICAgICAgICAgICAgICA8ZGFlbW9uPnRydWU8L2RhZW1vbj4NCi0gICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3JzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbj0ib3JnLm1vcnRiYXkuamV0dHkubmlvLlNlbGVjdENoYW5uZWxDb25uZWN0b3IiPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvcnQ+ODA4NTwvcG9ydD4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9yPg0KLSAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3JzPg0KLSAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICAgICA8aWQ+c3RvcC1qZXR0eTwvaWQ+DQotICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcmVwYXJlLXBhY2thZ2U8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zdG9wPC9nb2FsPg0KLSAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KLSAgICAgICAgICA8L3BsdWdpbj4NCi0NCi0gICAgICAgICA8L3BsdWdpbnM+DQotCTwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpheHJzL3BvbS54bWwgYi9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qYXhycy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDU4NTdmLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpheHJzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4NCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaGVsbG93b3JsZC1qYXhycy13ZWJhcHA8L2FydGlmYWN0SWQ+DQotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgSGVsbG93b3JsZCBKQVgtUlM8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotDQotICAgICAgICA8IS0tIFR1c2NhbnkgZGVwZW5kZW5jeSAtLT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ub2RlcDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8IS0tIFdpbmsgZGVwZW5kZW5jeSBmb3IgSkFYLVJTIHN1cHBvcnQgLS0+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndpbms8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+d2luay1jb21tb248L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+MS4xLjEtaW5jdWJhdGluZzwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUud2luazwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD53aW5rLXNlcnZlcjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4xLjEuMS1pbmN1YmF0aW5nPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4xLjYuMDwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5odG1sdW5pdDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjY8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICA8ZmluYWxOYW1lPmhlbGxvd29ybGQtamF4cnM8L2ZpbmFsTmFtZT4NCi0gICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgIDxwbHVnaW4+DQotICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xODwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgIDxjb250ZXh0UGF0aD5oZWxsb3dvcmxkLWpheHJzPC9jb250ZXh0UGF0aD4NCi0gICAgICAgICAgICAgICAgPHN0b3BLZXk+Zm9vPC9zdG9wS2V5Pg0KLSAgICAgICAgICAgICAgICA8c3RvcFBvcnQ+OTk5OTwvc3RvcFBvcnQ+DQotICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgIDxpZD5zdGFydC1qZXR0eTwvaWQ+DQotICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLXRlc3QtY2xhc3NlczwvcGhhc2U+DQotICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnJ1bjwvZ29hbD4NCi0gICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICA8c2NhbkludGVydmFsU2Vjb25kcz4wPC9zY2FuSW50ZXJ2YWxTZWNvbmRzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgPGRhZW1vbj50cnVlPC9kYWVtb24+DQotICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9ycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3IgaW1wbGVtZW50YXRpb249Im9yZy5tb3J0YmF5LmpldHR5Lm5pby5TZWxlY3RDaGFubmVsQ29ubmVjdG9yIj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb3J0PjgwODU8L3BvcnQ+DQotICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3Rvcj4NCi0gICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9ycz4NCi0gICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgICAgPGlkPnN0b3AtamV0dHk8L2lkPg0KLSAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJlcGFyZS1wYWNrYWdlPC9waGFzZT4NCi0gICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c3RvcDwvZ29hbD4NCi0gICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQotICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCi0gICAgICAgICAgPC9wbHVnaW4+DQotICAgICAgIDwvcGx1Z2lucz4NCi0gICAgPC9idWlsZD4NCi0NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtamF4cnMvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkVGVzdENhc2UuamF2YSBiL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpheHJzL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZTVkZDMuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtamF4cnMvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkVGVzdENhc2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLS8qDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0gKi8NCi0NCi1wYWNrYWdlIGl0ZXN0Ow0KLQ0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7DQotDQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOw0KLQ0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsNCi0NCi1pbXBvcnQgY29tLmdhcmdveWxlc29mdHdhcmUuaHRtbHVuaXQuRmFpbGluZ0h0dHBTdGF0dXNDb2RlRXhjZXB0aW9uOw0KLWltcG9ydCBjb20uZ2FyZ295bGVzb2Z0d2FyZS5odG1sdW5pdC5UZXh0UGFnZTsNCi1pbXBvcnQgY29tLmdhcmdveWxlc29mdHdhcmUuaHRtbHVuaXQuV2ViQ2xpZW50Ow0KLWltcG9ydCBjb20uZ2FyZ295bGVzb2Z0d2FyZS5odG1sdW5pdC5odG1sLkh0bWxFbGVtZW50Ow0KLWltcG9ydCBjb20uZ2FyZ295bGVzb2Z0d2FyZS5odG1sdW5pdC5odG1sLkh0bWxQYXJhZ3JhcGg7DQotDQotLyoqDQotICovDQotcHVibGljIGNsYXNzIEhlbGxvd29ybGRUZXN0Q2FzZSB7DQotDQotICAgIEBUZXN0DQotICAgIHB1YmxpYyB2b2lkIHRlc3RBKCkgdGhyb3dzIEZhaWxpbmdIdHRwU3RhdHVzQ29kZUV4Y2VwdGlvbiwgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQotICAgICAgICBUZXh0UGFnZSBwYWdlID0gKFRleHRQYWdlKW5ldyBXZWJDbGllbnQoKS5nZXRQYWdlKCJodHRwOi8vbG9jYWxob3N0OjgwODUvaGVsbG93b3JsZC1qYXhycy9yZXN0L3dvcmxkIik7DQotICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIFdvcmxkIiwgcGFnZS5nZXRDb250ZW50KCkpOw0KLSAgICB9DQotDQotfQ0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWptcy9SRUFETUUgYi9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qbXMvUkVBRE1FCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGJiZTlhLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWptcy9SRUFETUUKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotSk1TIEhlbGxvV29ybGQgU2FtcGxlCi09PT09PT09PT09PT09PT09PT09PT0KLVRoaXMgc2FtcGxlIGRlbW9uc3RyYXRlcyBhIHNpbXBsZSB3ZWJhcHAgY29udGFpbmluZyBhIGhlbGxvIHdvcmxkICBzdHlsZSBjbGllbnQKLWFuZCBzZXJ2aWNlIHVzaW5nIHRoZSBKTVMgYmluZGluZyBmb3IgcmVxdWVzdC1yZXNwb25zZSBzdHlsZSBtZXNzYWdpbmcuIAotCi1UaGUgUkVBRE1FIGluIHRoZSBzYW1wbGVzIGRpcmVjdG9yeSAodGhlIGRpcmVjdG9yeSBhYm92ZSB0aGlzKSBwcm92aWRlcyAKLWdlbmVyYWwgaW5zdHJ1Y3Rpb25zIGFib3V0IGJ1aWxkaW5nIGFuZCBydW5uaW5nIHNhbXBsZXMuIFRha2UgYSBsb29rIHRoZXJlIAotZmlyc3QuIAotCi1BcyB0aGlzIHNhbXBsZSBwcm92aWRlcyBhIHdlYiBhcHAgdGhlcmUgaXMgYSBtYW51YWwgc3RlcCB3aGVyZSB0aGUgV0FSIGZpbGUKLXRoYXQgY29udGFpbnMgdGhlIHNhbXBsZSBpcyBjb3BpZWQgdG8geW91ciB3ZWIgYXBwIGNvbnRhaW5lci4gSWYgeW91IGp1c3Qgd2FudCAKLXRvIGdpdmUgdGhpcyBzYW1wbGUgYSBnbyBkZXBsb3kgdGhlIFdBUiBmaWxlICh0YXJnZXQvaGVsbG93b3JsZC1qbXMud2FyICkKLXRvIHlvdSB3ZWIgYXBwbGljYXRpb24gc2VydmVyLiBBbHRlcm5hdGV2bHksIHRoZSBzYW1wbGUgcG9tLnhtbCBpcyBjb25maWd1cmVkCi13aXRoIHRoZSBKZXR0eSBwbHVnaW4gc28geW91IGNhbiBydW4gdGhlIGl0IHdpdGggSmV0dHkgYnkgc2ltcGx5IGRvaW5nICJtdm4gamV0dHk6cnVuIi4KLQotT25jZSB0aGUgd2ViIGFwcCBpcyBkZXBsb3llZCB1c2UgeW91ciBicm93c2VyIHRvIHZpc2l0IHRoZSBmb2xsb3dpbmcgVVJMOwotCi1odHRwOi8vbG9jYWxob3N0OjgwODAvaGVsbG93b3JsZC1qbXMKLQotVGhlIHBvcnQgYW5kIGhvc3RuYW1lIHdpbGwgb2YgY291cnNlIHZhcnkgZGVwZW5kaW5nIG9uIHlvdXIgbG9jYWwgaW5zdGFsbGF0aW9uLiAKLQotQ29uZmlndXJpbmcgdGhlIEpNUyByZXNvdXJjZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBzYW1wbGUgcmVxdWlyZXMgSk1TIHJlc291cmNlcyBiZSBtYW51YWxseSBjb25maWd1cmVkIGluIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQsIHRoZXNlIGFyZTogCi0KLS0gYSBKTVMgY29ubmVjdGlvbiBmYWN0b3J5IG5hbWVkICJDb25uZWN0aW9uRmFjdG9yeSIKLS0gYSBKTVMgcXVldWUgbmFtZWQgIkhlbGxvV29ybGRTZXJ2aWNlIgotCi1TZWUgdGhlIGZvbGxvd2luZyBmb3IgaG93IHRvIGRlZmluZSB0aGVzZSByZXNvdXJjZXMgZGVwZW5kaW5nIG9uIHRoZSBhcHBsaWNhdGlvbiBzZXJ2ZXIgYmVpbmcgdXNlZDoKLQotVHVzY2FueSB3aXRoIGVtYmVkZGVkIEFjdGl2ZU1RIGJyb2tlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0KLUFwYWNoZSBUb21jYXQKLS0tLS0tLS0tLS0tLS0KLQotTm8gY29uZmlndXJhdGlvbiBpcyBuZWNlc3NhcnkgZm9yIFRvbWNhdCBhcyB0aGUgc2FtcGxlIFdBUiBpbmNsdWRlcyBldmVyeXRoaW5nIHByZS1jb25maWd1cmVkIHRvIHJ1biAKLWFuIEFjdGl2ZU1RIGVtYmVkZGVkIEpNUyBicm9rZXIgYW5kIHRvIGNvbmZpZ3VyZSB0aGUgSk1TIHJlc291cmNlcyBpbiBKTkRJLgotCi1UaGUgSk5ESSByZXNvdXJjZXMgYXJlIGNvbmZpZ3VyZWQgaW4gdGhlIE1FVEEtSU5GL2NvbXRleHQueG1sIGZpbGUsIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcKLUFjdGl2ZU1RIGluIFRvbWNhdCBzZWU6IGh0dHA6Ly9hY3RpdmVtcS5hcGFjaGUub3JnL3RvbWNhdC5odG1sCi0KLQotQXBhY2hlIEdlcm9uaW1vCi0tLS0tLS0tLS0tLS0tLS0KLQotRm9yIEFwYWNoZSBHZXJvbmltbyAyLjAuMSAoMi4wLjIgZmFpbHMgdG8gZGVmaW5lIEpNUyByZXNvdXJjZXMgZm9yIG1lKQotCi1Mb2dvbiB0byB0aGUgR2Vyb25pbW8gU2VydmVyIENvbnNvbGUgKGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9jb25zb2xlLCB1aWQgc3lzdGVtLCBwc3dkIG1hbmFnZXIpCi0KLUluIHRoZSBDb25zb2xlIE5hdmlnYXRpb24gb24gdGhlIGxlZnQgdW5kZXIgU2VydmljZXMgY2xpY2sgSk1TIFJlc291cmNlcwotCi1BdCB0aGUgYm90dG9tIG9mIHRoZSBKTVMgUmVzb3VyY2VzIHBhbmVsIGNsaWNrIHVuZGVyIENyZWF0ZSBhIG5ldyBKTVMgUmVzb3VyY2UgR3JvdXAgY2xpY2sgRm9yIEFjdGl2ZU1RCi0KLUluIFJlc291cmNlIEdyb3VwIE5hbWUgZW50ZXIgIk15UkdOIiBhbmQgY2xpY2sgbmV4dAotCi1BdCBKTVMgUmVzb3VyY2UgR3JvdXAgY2xpY2sgQWRkIENvbm5lY3Rpb24gRmFjdG9yeQotCi1Gb3IgSk1TIEZhY3RvcnkgVHlwZSBjaG9vc2UgamF2YXguam1zLkNvbm5lY3Rpb25GYWN0b3J5IGFuZCBjbGljayBOZXh0Ci0KLUluIENvbm5lY3Rpb24gRmFjdG9yeSBOYW1lIGVudGVyICJDb25uZWN0aW9uRmFjdG9yeSIgYW5kIGNsaWNrIE5leHQKLQotQ2xpY2sgQWRkIGRlc3RpbmF0aW9uCi0KLUZvciBKTVMgRGVzdGluYXRpb24gVHlwZSBjaG9vc2UgamF2YXguam1zLlF1ZXVlIGFuZCBjbGljayBOZXh0CQotCQotRW50ZXIgIkhlbGxvV29ybGRTZXJ2aWNlIiBmb3IgYm90aCBNZXNzYWdlIERlc3RpbmF0aW9uIE5hbWUgYW5kIFBoeXNpY2FsTmFtZSBhbmQgY2xpY2sgTmV4dCAJCi0KLUNsaWNrIERlcGxveSBOb3cKLQotVGhhdHMgaXQsIHlvdSdyZSBkb25lLgotCi0KLVdlYlNwaGVyZSAKLS0tLS0tLS0tLQotCi1UbyBkZWZpbmUgdGhlIEpNUyByZXNvdXJjZXMgaW4gYSBuZXcgV2ViU3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlciA2LjEgaW5zdGFsbGF0aW9uOgotCi0xKSBGaXJzdCBkZWZpbmUgYSBTZXJ2aWNlIGludGVncmF0aW9uIGJ1czoKLQotTG9nb24gdG8gdGhlIFdlYlNwaGVyZSBJbnRlZ3JhdGVkIFNvbHV0aW9ucyBDb25zb2xlIChodHRwOi8vbG9jYWxob3N0OjkwNjAvaWJtL2NvbnNvbGUpCi0KLU9uIHRoZSBMZWZ0IGhhbmQgbWVudSBleHBhbmQgU2VydmljZSBpbnRlZ3JhdGlvbiwgYW5kIGNsaWNrIG9uIEJ1c2VzLgotCi1JbiB0aGUgQnVzZXMgcGFuZWwgY2xpY2sgb24gTmV3Ci0KLUVudGVyIGEgbmFtZSBmb3IgdGhlIGJ1cywgZWcgTXlCdXMsIGFuZCBjbGljayBOZXh0LCBhbmQgdGhlbiBjbGljayBGaW5pc2ggYW5kIFNhdmUgdGhlIGNoYW5nZXMuCi0KLUluIHRoZSBCdXNlcyBwYW5lbCBjbGljayBvbiBNeUJ1cwotCi1GaW5kIHRoZSBUb3BvbG9neSBzZWNpb24gYW5kIGNsaWNrIG9uIEJ1cyBtZW1iZXJzCi0KLUNsaWNrIG9uIEFkZCwgbGVhdmUgdGhlIGRlZmF1bHRzIGFuZCBjbGljayBOZXh0LCBOZXh0LCBOZXh0LCBGaW5pc2gsIGFuZCBTYXZlIHRoZSBjaGFuZ2VzLgotCi1SZXN0YXJ0IFdlYlNwaGVyZSBhbmQgd2hlbiBiYWNrIHVwIGxvZ29uIGJhY2sgb24gdG8gdGhlIEludGVncmF0ZWQgU29sdXRpb25zIENvbnNvbGUKLSAKLTIpIE5vdyBkZWZpbmUgdGhlIEpNUyByZXNjb3VyY2VzCi0KLU9uIHRoZSBMZWZ0IGhhbmQgbWVudSBleHBhbmQgUmVzb3VyY2VzLCBhbmQgSk1TIGFuZCBjbGljayBvbiBDb25uZWN0aW9uIEZhY290b3JpZXMuIAotCi1JbiB0aGUgQ29ubmVjdGlvbiBmYWN0b3JpZXMgcGFuZWwgY2xpY2sgTmV3LgotCi1MZWF2ZSB0aGUgRGVmYXVsdCBtZXNzYWdpbmcgcHJvdmlkZXIgYW5kIGNsaWNrIE9LCi0KLUVudGVyICJDb25uZWN0aW9uRmFjdG9yeSIgaW4gdGhlIE5hbWUgYW5kIEpOREkgbmFtZSBhbmQgaW4gdGhlIEJ1cyBuYW1lIGluIHRoZSBDb25uZWN0aW9uIHBhbmUgY2hvb3NlIE15QnVzIGFuZCBjbGljayBPSwotCi1PbiB0aGUgTGVmdCBoYW5kIG1lbnUgaW4gSk1TIGNsaWNrIG9uIFF1ZXVlcyAKLQotSW4gdGhlIFF1ZXVlcyBwYW5lbCBjbGljayBOZXcsIGFjY2VwdCB0aGUgZGVmYXVsdHMgYW5kIGNsaWNrIE9LCi0KLUVudGVyICJIZWxsb1dvcmxkU2VydmljZSIgZm9yIHRoZSBOYW1lIGFuZCBKTkRJIG5hbWUgYW5kIGluIHRoZSBCdXMgbmFtZSBpbiB0aGUgQ29ubmVjdGlvbiBwYW5lIGNob29zZSBNeUJ1cywKLWFuZCB0aGVuIGluIHRoZSBRdWV1ZSBuYW1lIGRyb3AgZG93biBsaXN0IGNob29zZSAiQ3JlYXRlIFNJQiBkZXN0aW5hdGlvbiIKLQotSW4gdGhlIFNldCBxdWV1ZSBhdHRyaWJ1dGVzIHBhbmVsIGVudGVyICJIZWxsb1dvcmxkU2VydmljZSIgZm9yIHRoZSBJZGVudGlmaWVyIGFuZCBjbGljayBOZXh0LCBOZXh0LCBhbmQgRmluaXNoCi0KLVRoYXQgc2hvdWxkIHRha2UgeW91IGJhY2sgdG8gdGhlIFF1ZXVlcyBwYW5lbCB3aGVyZSB5b3UgY2FuIGNsaWNrIE9LIHRvIGNyZWF0ZSB0aGUgbmV3IEpNUyBxdWV1ZS4KLQotU2F2ZSB0aGUgY2hhbmdlcwotCi1SZXN0YXJ0IFdlYlNwaGVyZSBhbmQgeW91J3JlIGRvbmUuCi0KLQotCi1PdGhlcnMuLi4KLS0tLS0tLS0tLQotCi0KLQotIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWptcy9wb20ueG1sIGIvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtam1zL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkNGI3ODcuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtam1zL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCEtLQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotICogCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICogCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKLS0tPgotPHByb2plY3Q+Ci0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgotICAgIDxwYXJlbnQ+Ci0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhPC9hcnRpZmFjdElkPgotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgotICAgIDwvcGFyZW50PgotCi0gICAgPGFydGlmYWN0SWQ+c2FtcGxlLWhlbGxvd29ybGQtam1zLXdlYmFwcDwvYXJ0aWZhY3RJZD4KLSAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgSk1TIEhlbGxvV29ybGQgaW4gYSBXZWJBcHA8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2U8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktam1zPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjUuMy4wPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0gICAgICAgIAotICAgIDwvZGVwZW5kZW5jaWVzPgotCi0gICAgPGJ1aWxkPgotICAgICAgIDxmaW5hbE5hbWU+aGVsbG93b3JsZC1qbXM8L2ZpbmFsTmFtZT4KLSAgICAgICA8cGx1Z2lucz4KLSAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPgotICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLWpldHR5LXBsdWdpbjwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgICA8dmVyc2lvbj42LjEuMTg8L3ZlcnNpb24+Ci0gICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgPGNvbnRleHRQYXRoPmhlbGxvd29ybGQtam1zPC9jb250ZXh0UGF0aD4KLSAgICAgICAgICAgICAgICA8c3RvcEtleT5mb288L3N0b3BLZXk+Ci0gICAgICAgICAgICAgICAgPHN0b3BQb3J0Pjk5OTk8L3N0b3BQb3J0PgotICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgIDxpZD5zdGFydC1qZXR0eTwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtdGVzdC1jbGFzc2VzPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnJ1bjwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICA8c2NhbkludGVydmFsU2Vjb25kcz4wPC9zY2FuSW50ZXJ2YWxTZWNvbmRzPgotICAgICAgICAgICAgICAgICAgICAgICA8ZGFlbW9uPnRydWU8L2RhZW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvcnM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3IgaW1wbGVtZW50YXRpb249Im9yZy5tb3J0YmF5LmpldHR5Lm5pby5TZWxlY3RDaGFubmVsQ29ubmVjdG9yIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvcnQ+ODA4NTwvcG9ydD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3I+Ci0gICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9ycz4KLSAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICA8aWQ+c3RvcC1qZXR0eTwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgPHBoYXNlPnByZXBhcmUtcGFja2FnZTwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zdG9wPC9nb2FsPgotICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qbXMvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLmNvbXBvc2l0ZSBiL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWptcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTE5ODViLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWptcy9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIuY29tcG9zaXRlCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKg0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4NCi0tLT4NCi08Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQotICAgICAgICAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiDQotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9zYW1wbGVzIg0KLSAgICAgICAgICAgbmFtZT0iSGVsbG93b3JsZCI+DQotDQotICAgIDxjb21wb25lbnQgbmFtZT0iZm9vIj4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi53ZWIgd2ViLXVyaT0iIi8+DQotICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InNlcnZpY2UiIHRhcmdldD0iSGVsbG9Xb3JsZENsaWVudENvbXBvbmVudCIvPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkQ2xpZW50Q29tcG9uZW50Ij4NCi0gICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJzYW1wbGUuSGVsbG9Xb3JsZENsaWVudCIvPg0KLSAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJoZWxsb1dvcmxkUmVmIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6SGVsbG9Xb3JsZFNlcnZpY2UiLz4NCi0gICAgICAgIDwvcmVmZXJlbmNlPg0KLSAgICA8L2NvbXBvbmVudD4NCi0NCi0gICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkU2VydmljZUNvbXBvbmVudCI+DQotICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ic2FtcGxlLkhlbGxvV29ybGRTZXJ2aWNlSW1wbCIgLz4NCi0JICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIj4NCi0gICAgICAgICAgICA8YmluZGluZy5qbXMgLz4NCi0gICAgICAgIDwvc2VydmljZT4NCi0gICAgPC9jb21wb25lbnQ+DQotDQotPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanMtY2xpZW50L3BvbS54bWwgYi9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qcy1jbGllbnQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjllM2QzMC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qcy1jbGllbnQvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1oZWxsb3dvcmxkLWpzLWNsaWVudC13ZWJhcHA8L2FydGlmYWN0SWQ+DQotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTYW1wbGUgSGVsbG93b3JsZCBKYXZhc2NyaXB0IENsaWVudDwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWpzb24tbm9kZXA8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+bmV0LnNvdXJjZWZvcmdlLmh0bWx1bml0PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0bWx1bml0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNjwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgIDxmaW5hbE5hbWU+aGVsbG93b3JsZC1qcy1jbGllbnQ8L2ZpbmFsTmFtZT4NCi0gICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgIDxwbHVnaW4+DQotICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xODwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgIDxjb250ZXh0UGF0aD5oZWxsb3dvcmxkLWpzLWNsaWVudDwvY29udGV4dFBhdGg+DQotICAgICAgICAgICAgICAgIDxzdG9wS2V5PmZvbzwvc3RvcEtleT4NCi0gICAgICAgICAgICAgICAgPHN0b3BQb3J0Pjk5OTk8L3N0b3BQb3J0Pg0KLSAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICAgICA8aWQ+c3RhcnQtamV0dHk8L2lkPg0KLSAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJvY2Vzcy10ZXN0LWNsYXNzZXM8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+DQotICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQotICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgPHNjYW5JbnRlcnZhbFNlY29uZHM+MDwvc2NhbkludGVydmFsU2Vjb25kcz4NCi0gICAgICAgICAgICAgICAgICAgICAgIDxkYWVtb24+dHJ1ZTwvZGFlbW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvcnM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9yIGltcGxlbWVudGF0aW9uPSJvcmcubW9ydGJheS5qZXR0eS5uaW8uU2VsZWN0Q2hhbm5lbENvbm5lY3RvciI+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9ydD44MDg1PC9wb3J0Pg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3I+DQotICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3RvcnM+DQotICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQotICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgIDxpZD5zdG9wLWpldHR5PC9pZD4NCi0gICAgICAgICAgICAgICAgICAgPHBoYXNlPnByZXBhcmUtcGFja2FnZTwvcGhhc2U+DQotICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnN0b3A8L2dvYWw+DQotICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQotICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICA8L3BsdWdpbnM+DQotICAgIDwvYnVpbGQ+DQotDQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzLWNsaWVudC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhIGIvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5OWI0NDIuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanMtY2xpZW50L3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKg0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotICovDQotDQotcGFja2FnZSBpdGVzdDsNCi0NCi1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsNCi0NCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsNCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsNCi1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7DQotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsNCi1pbXBvcnQgamF2YS5uZXQuVVJMOw0KLWltcG9ydCBqYXZhLm5ldC5VUkxDb25uZWN0aW9uOw0KLWltcG9ydCBqYXZhLm5ldC5VUkxFbmNvZGVyOw0KLQ0KLWltcG9ydCBvcmcuanVuaXQuVGVzdDsNCi0NCi0vKioNCi0gKiBWZXJmaXkgdGhlIHNlcnZlcnNpZGUgY29kZSBpcyB3b3JraW5nLCBub3Qgc3VyZSBob3cgdG8gZWFzaWx5IGl0ZXN0IHRoZSBicm93c2VyIGphdmFzY3JpcHQgY29kZSANCi0gKi8NCi1wdWJsaWMgY2xhc3MgSGVsbG93b3JsZFRlc3RDYXNlIHsNCi0NCi0gICAgQFRlc3QNCi0gICAgcHVibGljIHZvaWQgdGVzdEEoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQotICAgICAgICANCi0gICAgICAgIFVSTCB1cmwgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvaGVsbG93b3JsZC1qcy1jbGllbnQvb3JnLm9hc2lzb3Blbi5zY2EuY29tcG9uZW50Q29udGV4dC5qcy9mb28vY2FsbC9wbGFpbmNhbGwvc2VydmljZS5zYXlIZWxsby5kd3IiKTsNCi0gICAgICAgIFVSTENvbm5lY3Rpb24gY29ubiA9IHVybC5vcGVuQ29ubmVjdGlvbigpOw0KLSAgICAgICAgY29ubi5zZXREb091dHB1dCh0cnVlKTsNCi0gICAgICAgIE91dHB1dFN0cmVhbVdyaXRlciB3ciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoY29ubi5nZXRPdXRwdXRTdHJlYW0oKSk7DQotDQotICAgICAgICAvLyB0byBmaW5kIHRoaXMgcnVuIHRoZSBzYW1wbGUgdGhyb3VnaCBUQ1BNT04gdG8gY2FwdHVyZSB0aGUgbWVzc2FnZXMgICAgICAgIA0KLSAgICAgICAgDQotICAgICAgICBTdHJpbmcgZGF0YSA9IFVSTEVuY29kZXIuZW5jb2RlKCJjYWxsQ291bnQiLCAiVVRGLTgiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKCIxIiwgIlVURi04Iik7DQotICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJwYWdlIiwgIlVURi04IikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZSgiL2hlbGxvd29ybGQtanMtY2xpZW50LyIsICJVVEYtOCIpOyAgICAgICANCi0gICAgICAgIGRhdGEgKz0gIiYiICsgVVJMRW5jb2Rlci5lbmNvZGUoImh0dHBTZXNzaW9uSWQiLCAiVVRGLTgiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKCIiLCAiVVRGLTgiKTsgICAgICAgDQotICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJzY3JpcHRTZXNzaW9uSWQiLCAiVVRGLTgiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKCJBMDIzREE2NjRFNTZGMDc1NDkxQkUxQjg3QjM3QjAyNjcxIiwgIlVURi04Iik7ICAgICAgIA0KLSAgICAgICAgZGF0YSArPSAiJiIgKyBVUkxFbmNvZGVyLmVuY29kZSgiYzAtc2NyaXB0TmFtZSIsICJVVEYtOCIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUoInNlcnZpY2UiLCAiVVRGLTgiKTsgICAgICAgDQotICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJjMC1tZXRob2ROYW1lIiwgIlVURi04IikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZSgic2F5SGVsbG8iLCAiVVRGLTgiKTsgICAgICAgDQotICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJjMC1pZCIsICJVVEYtOCIpICsgIj0iICsgVVJMRW5jb2Rlci5lbmNvZGUoIjAiLCAiVVRGLTgiKTsgICAgICAgDQotICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJjMC1wYXJhbTAiLCAiVVRGLTgiKSArICI9IiArIFVSTEVuY29kZXIuZW5jb2RlKCJzdHJpbmc6cGV0cmEiLCAiVVRGLTgiKTsgICAgICAgDQotICAgICAgICBkYXRhICs9ICImIiArIFVSTEVuY29kZXIuZW5jb2RlKCJiYXRjaElkIiwgIlVURi04IikgKyAiPSIgKyBVUkxFbmNvZGVyLmVuY29kZSgiMCIsICJVVEYtOCIpOyAgICAgICANCi0gICAgICAgIA0KLSAgICAgICAgd3Iud3JpdGUoZGF0YSk7DQotICAgICAgICB3ci5mbHVzaCgpOw0KLSAgICAgICAgDQotICAgICAgICBCdWZmZXJlZFJlYWRlciByZCA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoY29ubi5nZXRJbnB1dFN0cmVhbSgpKSk7DQotICAgICAgICByZC5yZWFkTGluZSgpOyAvLyB0aHJvdyAnYWxsb3dTY3JpcHRUYWdSZW1vdGluZyBpcyBmYWxzZS4nOw0KLSAgICAgICAgcmQucmVhZExpbmUoKTsgLy8jRFdSLUlOU0VSVA0KLSAgICAgICAgcmQucmVhZExpbmUoKTsgLy8jRFdSLVJFUExZDQotICAgICAgICBTdHJpbmcgbGluZSA9IHJkLnJlYWRMaW5lKCk7IC8vIGR3ci5lbmdpbmUuX3JlbW90ZUhhbmRsZUNhbGxiYWNrKCcwJywnMCcsIkhlbGxvIHBldHJhIik7DQotICAgICAgICB3ci5jbG9zZSgpOw0KLSAgICAgICAgcmQuY2xvc2UoKTsNCi0gICAgICAgIA0KLSAgICAgICAgYXNzZXJ0VHJ1ZShsaW5lLmVuZHNXaXRoKCJcIkhlbGxvIHBldHJhXCIpOyIpKTsNCi0NCi0gICAgfQ0KLQ0KLX0NCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc2YvcG9tLnhtbCBiL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzZi9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzkxOWMzLi4wMDAwMDAwCi0tLSBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLWpzZi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLQotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1oZWxsb3dvcmxkLWpzZi13ZWJhcHA8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBIZWxsb3dvcmxkIEpTRjwvbmFtZT4KLSAgICA8cGFja2FnaW5nPndhcjwvcGFja2FnaW5nPgotCi0gICAgPGRlcGVuZGVuY2llcz4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+Y29tcGlsZTwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXdlYi1ydW50aW1lPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1teWZhY2VzPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICAgIDxidWlsZD4KLSAgICAgICA8ZmluYWxOYW1lPmhlbGxvd29ybGQtanNmPC9maW5hbE5hbWU+Ci0gICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgPHZlcnNpb24+Ni4xLjE4PC92ZXJzaW9uPgotICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgIDxjb250ZXh0UGF0aD5oZWxsb3dvcmxkLWpzZjwvY29udGV4dFBhdGg+Ci0gICAgICAgICAgICAgICAgPHN0b3BLZXk+Zm9vPC9zdG9wS2V5PgotICAgICAgICAgICAgICAgIDxzdG9wUG9ydD45OTk5PC9zdG9wUG9ydD4KLSAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICA8aWQ+c3RhcnQtamV0dHk8L2lkPgotICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLXRlc3QtY2xhc3NlczwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgPHNjYW5JbnRlcnZhbFNlY29uZHM+MDwvc2NhbkludGVydmFsU2Vjb25kcz4KLSAgICAgICAgICAgICAgICAgICAgICAgPGRhZW1vbj50cnVlPC9kYWVtb24+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3JzPgotICAgICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9yIGltcGxlbWVudGF0aW9uPSJvcmcubW9ydGJheS5qZXR0eS5uaW8uU2VsZWN0Q2hhbm5lbENvbm5lY3RvciI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwb3J0PjgwODU8L3BvcnQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9yPgotICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3RvcnM+Ci0gICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgPGlkPnN0b3AtamV0dHk8L2lkPgotICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcmVwYXJlLXBhY2thZ2U8L3BoYXNlPgotICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c3RvcDwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgotICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICA8L3BsdWdpbj4KLSAgICAgICA8L3BsdWdpbnM+Ci0gICAgPC9idWlsZD4KLQotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQtanNwL3BvbS54bWwgYi9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc3AvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY2ZWFhNS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1qc3AvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDk4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaGVsbG93b3JsZC1qc3Atd2ViYXBwPC9hcnRpZmFjdElkPgotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBIZWxsb3dvcmxkIEpTUDwvbmFtZT4KLQotICAgIDxkZXBlbmRlbmNpZXM+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5uZXQuc291cmNlZm9yZ2UuaHRtbHVuaXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5odG1sdW5pdDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNjwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgPGZpbmFsTmFtZT5oZWxsb3dvcmxkLWpzcDwvZmluYWxOYW1lPgotICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamV0dHktcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xODwvdmVyc2lvbj4KLSAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICA8Y29udGV4dFBhdGg+aGVsbG93b3JsZC1qc3A8L2NvbnRleHRQYXRoPgotICAgICAgICAgICAgICAgIDxzdG9wS2V5PmZvbzwvc3RvcEtleT4KLSAgICAgICAgICAgICAgICA8c3RvcFBvcnQ+OTk5OTwvc3RvcFBvcnQ+Ci0gICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgPGlkPnN0YXJ0LWpldHR5PC9pZD4KLSAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJvY2Vzcy10ZXN0LWNsYXNzZXM8L3BoYXNlPgotICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPgotICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxzY2FuSW50ZXJ2YWxTZWNvbmRzPjA8L3NjYW5JbnRlcnZhbFNlY29uZHM+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxkYWVtb24+dHJ1ZTwvZGFlbW9uPgotICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9ycz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbj0ib3JnLm1vcnRiYXkuamV0dHkubmlvLlNlbGVjdENoYW5uZWxDb25uZWN0b3IiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9ydD44MDg1PC9wb3J0PgotICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3Rvcj4KLSAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3JzPgotICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgIDxpZD5zdG9wLWpldHR5PC9pZD4KLSAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJlcGFyZS1wYWNrYWdlPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnN0b3A8L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXNlcnZsZXQvcG9tLnhtbCBiL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXNlcnZsZXQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTM0YWNhNS4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zZXJ2bGV0L3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLQotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1oZWxsb3dvcmxkLXNlcnZsZXQtd2ViYXBwPC9hcnRpZmFjdElkPgotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBIZWxsb3dvcmxkIFNlcnZsZXQ8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2Utbm9kZXA8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+bmV0LnNvdXJjZWZvcmdlLmh0bWx1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+aHRtbHVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjY8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgIDwvZGVwZW5kZW5jaWVzPgotCi0gICAgPGJ1aWxkPgotICAgICAgIDxmaW5hbE5hbWU+aGVsbG93b3JsZC1zZXJ2bGV0PC9maW5hbE5hbWU+Ci0gICAgICAgPHBsdWdpbnM+Ci0gICAgICAgICAgPHBsdWdpbj4KLSAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4KLSAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1qZXR0eS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgPHZlcnNpb24+Ni4xLjE4PC92ZXJzaW9uPgotICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgIDxjb250ZXh0UGF0aD5oZWxsb3dvcmxkLXNlcnZsZXQ8L2NvbnRleHRQYXRoPgotICAgICAgICAgICAgICAgIDxzdG9wS2V5PmZvbzwvc3RvcEtleT4KLSAgICAgICAgICAgICAgICA8c3RvcFBvcnQ+OTk5OTwvc3RvcFBvcnQ+Ci0gICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgIDxleGVjdXRpb25zPgotICAgICAgICAgICAgICAgIDxleGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgICAgPGlkPnN0YXJ0LWpldHR5PC9pZD4KLSAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJvY2Vzcy10ZXN0LWNsYXNzZXM8L3BoYXNlPgotICAgICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPgotICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxzY2FuSW50ZXJ2YWxTZWNvbmRzPjA8L3NjYW5JbnRlcnZhbFNlY29uZHM+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxkYWVtb24+dHJ1ZTwvZGFlbW9uPgotICAgICAgICAgICAgICAgICAgICAgICA8Y29ubmVjdG9ycz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvciBpbXBsZW1lbnRhdGlvbj0ib3JnLm1vcnRiYXkuamV0dHkubmlvLlNlbGVjdENoYW5uZWxDb25uZWN0b3IiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cG9ydD44MDg1PC9wb3J0PgotICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Nvbm5lY3Rvcj4KLSAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3JzPgotICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgIDxpZD5zdG9wLWpldHR5PC9pZD4KLSAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJlcGFyZS1wYWNrYWdlPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnN0b3A8L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+Ci0gICAgICAgICAgPC9wbHVnaW4+Ci0gICAgICAgPC9wbHVnaW5zPgotICAgIDwvYnVpbGQ+Ci08L3Byb2plY3Q+Ci0KZGlmZiAtLWdpdCBhL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvcG9tLnhtbCBiL3NhbXBsZXMvd2ViYXBwcy9oZWxsb3dvcmxkLXN0cmlwZXMvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjhkZmVjZi4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC1zdHJpcGVzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqIAotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqIAotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCi0tLT4KLTxwcm9qZWN0PgotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KLSAgICA8cGFyZW50PgotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KLSAgICA8L3BhcmVudD4KLQotICAgIDxhcnRpZmFjdElkPnNhbXBsZS1oZWxsb3dvcmxkLXN0cmlwZXMtd2ViYXBwPC9hcnRpZmFjdElkPgotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBIZWxsb3dvcmxkIHVzaW5nIFN0cmlwZXM8L25hbWU+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotCi0gICAgICAgIDwhLS0gIFR1c2NhbnkgZGVwZW5kZW5jaWVzIC0tPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPCEtLSAgU3RyaXBlcyBGcmFtZXdvcmsgZGVwZW5kZW5jaWVzIC0tPgotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5zdHJpcGVzPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RyaXBlczwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuNS4yPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0JCQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPnRhZ2xpYnM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGFuZGFyZDwvYXJ0aWZhY3RJZD4KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMS4yPC92ZXJzaW9uPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICAgICAgPGRlcGVuZGVuY3k+Ci0gICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+Ci0gICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5odG1sdW5pdDwvZ3JvdXBJZD4KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmh0bWx1bml0PC9hcnRpZmFjdElkPgotICAgICAgICAgICAgPHZlcnNpb24+Mi42PC92ZXJzaW9uPgotICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgotICAgICAgICA8L2RlcGVuZGVuY3k+Ci0KLSAgICA8L2RlcGVuZGVuY2llcz4KLQotICAgIDxidWlsZD4KLSAgICAgICA8ZmluYWxOYW1lPmhlbGxvd29ybGQtc3RyaXBlczwvZmluYWxOYW1lPgotICAgICAgIDxwbHVnaW5zPgotICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamV0dHktcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xODwvdmVyc2lvbj4KLSAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICA8Y29udGV4dFBhdGg+aGVsbG93b3JsZC1zdHJpcGVzPC9jb250ZXh0UGF0aD4KLSAgICAgICAgICAgICAgICA8c3RvcEtleT5mb288L3N0b3BLZXk+Ci0gICAgICAgICAgICAgICAgPHN0b3BQb3J0Pjk5OTk8L3N0b3BQb3J0PgotICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgotICAgICAgICAgICAgICAgICAgIDxpZD5zdGFydC1qZXR0eTwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtdGVzdC1jbGFzc2VzPC9waGFzZT4KLSAgICAgICAgICAgICAgICAgICA8Z29hbHM+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnJ1bjwvZ29hbD4KLSAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgotICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICAgICAgICAgICA8c2NhbkludGVydmFsU2Vjb25kcz4wPC9zY2FuSW50ZXJ2YWxTZWNvbmRzPgotICAgICAgICAgICAgICAgICAgICAgICA8ZGFlbW9uPnRydWU8L2RhZW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvcnM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3IgaW1wbGVtZW50YXRpb249Im9yZy5tb3J0YmF5LmpldHR5Lm5pby5TZWxlY3RDaGFubmVsQ29ubmVjdG9yIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvcnQ+ODA4NTwvcG9ydD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3I+Ci0gICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9ycz4KLSAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICA8aWQ+c3RvcC1qZXR0eTwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgPHBoYXNlPnByZXBhcmUtcGFja2FnZTwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zdG9wPC9nb2FsPgotICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC9SRUFETUUgYi9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC9SRUFETUUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOGFhZGIuLjAwMDAwMDAKLS0tIGEvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQvUkVBRE1FCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi1UaGUgUkVBRE1FIGluIHRoZSA8ZGlzdHJpYnV0aW9uLXVucGFjay1kaXI+L3NhbXBsZXMgZGlyZWN0b3J5IHByb3ZpZGVzIA0KLWdlbmVyYWwgaW5zdHJ1Y3Rpb25zIGFib3V0IGJ1aWxkaW5nIGFuZCBydW5uaW5nIHNhbXBsZXMuICh3aGVyZQ0KLWRpc3RyaWJ1dGlvbi11bnBhY2stZGlyIGlzIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggeW91IHVucGFja2VkIHRoZSB0dXNjYW55DQotYmluYXJ5IGRpc3RyaWJ1dGlvbiBhcmNoaXZlKS4gVGFrZSBhIGxvb2sgdGhlcmUgZmlyc3QgKG5vdGluZyBhdCB5b3UgcmVhZCBpdCB0aGF0IHRoaXMgc2FtcGxlDQotaXMgbm90IGEgbmV3IHN0eWxlIHNhbXBsZSkuIA0KLQ0KLVRPRE8gLSBmaW5pc2gKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC9wb20ueG1sIGIvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I1MGRkMy4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IS0tCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKiAKLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0gKiAKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAotLS0+Ci08cHJvamVjdD4KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+Ci0gICAgPHBhcmVudD4KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+Ci0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi8uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+Ci0gICAgPC9wYXJlbnQ+Ci0KLSAgICA8YXJ0aWZhY3RJZD5zYW1wbGUtaGVsbG93b3JsZC13ZWJhcHA8L2FydGlmYWN0SWQ+Ci0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNhbXBsZSBIZWxsb3dvcmxkPC9uYW1lPgotICAgIDxwYWNrYWdpbmc+d2FyPC9wYWNrYWdpbmc+Ci0KLSAgICA8ZGVwZW5kZW5jaWVzPgotCi0gICAgICAgIDxkZXBlbmRlbmN5PgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+Ci0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2Utbm9kZXA8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+Ci0gICAgICAgIDwvZGVwZW5kZW5jeT4KLQotICAgICAgICA8ZGVwZW5kZW5jeT4KLSAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8dmVyc2lvbj40LjguMTwvdmVyc2lvbj4KLSAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KLSAgICAgICAgPC9kZXBlbmRlbmN5PgotCi0gICAgPC9kZXBlbmRlbmNpZXM+Ci0KLSAgICA8YnVpbGQ+Ci0gICAgICAgPGZpbmFsTmFtZT5oZWxsb3dvcmxkPC9maW5hbE5hbWU+Ci0gICAgICAgPHBsdWdpbnM+Ci0KLSAgICAgICAgICA8cGx1Z2luPgotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgotICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICA8ZXhlY3V0aW9ucz4KLSAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICA8aWQ+Y29weTwvaWQ+Ci0gICAgICAgICAgICAgICAgPHBoYXNlPmNvbXBpbGU8L3BoYXNlPgotICAgICAgICAgICAgICAgIDxnb2Fscz4KLSAgICAgICAgICAgICAgICAgIDxnb2FsPmNvcHk8L2dvYWw+Ci0gICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4KLSAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnNhbXBsZS1oZWxsb3dvcmxkPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBzaG91bGQgcmVhbGx5IGdvIGluIHRoZSB0YXJnZXQgZm9sZGVyIGJ1dCBpIGNhbid0IGdldCBqZXR0eTpydW4gdG8gd29yayB1c2luZyB0aGF0IC0tPgotICAgICAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PnNyYy9tYWluL3dlYmFwcC9XRUItSU5GL3NjYS1jb250cmlidXRpb25zPC9vdXRwdXREaXJlY3Rvcnk+Ci0gICAgICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4KLSAgICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbXM+Ci0gICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgotICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KLSAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KLSAgICAgICAgICA8L3BsdWdpbj4KLQotICAgICAgICAgIDxwbHVnaW4+Ci0gICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLm1vcnRiYXkuamV0dHk8L2dyb3VwSWQ+Ci0gICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamV0dHktcGx1Z2luPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgIDx2ZXJzaW9uPjYuMS4xODwvdmVyc2lvbj4KLSAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICA8Y29udGV4dFBhdGg+aGVsbG93b3JsZDwvY29udGV4dFBhdGg+Ci0gICAgICAgICAgICAgICAgPHN0b3BLZXk+Zm9vPC9zdG9wS2V5PgotICAgICAgICAgICAgICAgIDxzdG9wUG9ydD45OTk5PC9zdG9wUG9ydD4KLSAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgPGV4ZWN1dGlvbnM+Ci0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICA8aWQ+c3RhcnQtamV0dHk8L2lkPgotICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLXRlc3QtY2xhc3NlczwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5ydW48L2dvYWw+Ci0gICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KLSAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgPG92ZXJyaWRlV2ViWG1sPnNyYy90ZXN0L3Jlc291cmNlcy90ZXN0LXdlYi54bWw8L292ZXJyaWRlV2ViWG1sPgotICAgICAgICAgICAgICAgICAgICAgICA8c2NhbkludGVydmFsU2Vjb25kcz4wPC9zY2FuSW50ZXJ2YWxTZWNvbmRzPgotICAgICAgICAgICAgICAgICAgICAgICA8ZGFlbW9uPnRydWU8L2RhZW1vbj4KLSAgICAgICAgICAgICAgICAgICAgICAgPGNvbm5lY3RvcnM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDxjb25uZWN0b3IgaW1wbGVtZW50YXRpb249Im9yZy5tb3J0YmF5LmpldHR5Lm5pby5TZWxlY3RDaGFubmVsQ29ubmVjdG9yIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBvcnQ+ODA4NTwvcG9ydD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25uZWN0b3I+Ci0gICAgICAgICAgICAgICAgICAgICAgIDwvY29ubmVjdG9ycz4KLSAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+Ci0gICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KLSAgICAgICAgICAgICAgICAgICA8aWQ+c3RvcC1qZXR0eTwvaWQ+Ci0gICAgICAgICAgICAgICAgICAgPHBoYXNlPnByZXBhcmUtcGFja2FnZTwvcGhhc2U+Ci0gICAgICAgICAgICAgICAgICAgPGdvYWxzPgotICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zdG9wPC9nb2FsPgotICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+Ci0gICAgICAgICAgICAgICAgPC9leGVjdXRpb24+Ci0gICAgICAgICAgICAgPC9leGVjdXRpb25zPgotICAgICAgICAgIDwvcGx1Z2luPgotICAgICAgIDwvcGx1Z2lucz4KLSAgICA8L2J1aWxkPgotCi08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sIGIvc2FtcGxlcy93ZWJhcHBzL2hlbGxvd29ybGQvc3JjL21haW4vd2ViYXBwL1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVhZWQzNC4uMDAwMDAwMAotLS0gYS9zYW1wbGVzL3dlYmFwcHMvaGVsbG93b3JsZC9zcmMvbWFpbi93ZWJhcHAvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhLS0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucwotICogdW5kZXIgdGhlIExpY2Vuc2UuCi0tLT4KLTx3ZWItYXBwIHZlcnNpb249IjIuNCIKLSAgICAgICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIgotICAgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKLSAgICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCIgPgotCi0gIDxkaXNwbGF5LW5hbWU+QXBhY2hlIFR1c2NhbnkgSGVsbG93b3JsZCBTYW1wbGU8L2Rpc3BsYXktbmFtZT4KLQotICA8Y29udGV4dC1wYXJhbT4KLSAgICA8cGFyYW0tbmFtZT5jb250cmlidXRpb25zPC9wYXJhbS1uYW1lPgotICAgIDxwYXJhbS12YWx1ZT4vV0VCLUlORi9zY2EtY29udHJpYnV0aW9uczwvcGFyYW0tdmFsdWU+Ci0gIDwvY29udGV4dC1wYXJhbT4KLQotICA8Y29udGV4dC1wYXJhbT4KLSAgICA8cGFyYW0tbmFtZT5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbmZpZzwvcGFyYW0tbmFtZT4KLSAgICA8cGFyYW0tdmFsdWU+dXJpOmRlZmF1bHQ8L3BhcmFtLXZhbHVlPgotICA8L2NvbnRleHQtcGFyYW0+Ci0KLSAgPGZpbHRlcj4KLSAgICA8ZmlsdGVyLW5hbWU+dHVzY2FueTwvZmlsdGVyLW5hbWU+IAotICAgIDxmaWx0ZXItY2xhc3M+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5ob3N0LndlYmFwcC5UdXNjYW55U2VydmxldEZpbHRlcjwvZmlsdGVyLWNsYXNzPiAKLSAgPC9maWx0ZXI+Ci0KLSAgPGZpbHRlci1tYXBwaW5nPgotICAgIDxmaWx0ZXItbmFtZT50dXNjYW55PC9maWx0ZXItbmFtZT4gCi0gICAgPHVybC1wYXR0ZXJuPi8qPC91cmwtcGF0dGVybj4gCi0gIDwvZmlsdGVyLW1hcHBpbmc+Ci0KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3NoYWRlcy9iYXNlLW5vZGVwL3BvbS54bWwgYi9zaGFkZXMvYmFzZS1ub2RlcC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2ViMDdiLi4wMDAwMDAwCi0tLSBhL3NoYWRlcy9iYXNlLW5vZGVwL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2hhZGVzPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLW5vZGVwPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgQmFzZSBKYXIgaW5jbHVkaW5nIGRlcGVuZGVuY2llczwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDwhLS0gVHVzY2FueSB1c2VzIGphdmEudXRpbC5sb2dnaW5nIGJ1dCBleHRlbnNpb25zIGFuZCBkZXBlbmRlbmNpZXMgbWF5IHVzZSANCi0gICAgICAgICAgICAgbG9nNGosIGNvbW1vbnMtbG9nZ2luZywgc2xmNGosIG9yIGphdmEudXRpbC5sb2dnaW5nLiBTbyBpbmxjdWRlIHNsZjRqIA0KLSAgICAgICAgICAgICBtb2R1bGVzIGZvciBhbGwgb2YgdGhvc2UgdGhhdCBkZWxlZ2F0ZSB0byBqYXZhLnV0aWwubG9nZ2luZy4gVGhpcyBzaG91bGQNCi0gICAgICAgICAgICAgbWVhbiB0aGVyZSdzIG5vIG5lZWQgZm9yIGFueSBvdGhlciBsb2dnaW5nIGphcnMgYW5kIG5vIGNvbmZsaWN0cyBvbg0KLSAgICAgICAgICAgICBsb2dnaW5nIHZlcmlzb25zIGFzIHRob3NlIGFyZSBoYW5kbGVkIHRyYW5zcGFyZW50bHkgYnkgc2xmNGosIGFuZCwgDQotICAgICAgICAgICAgIGV2ZXJ5dGhpbmcgdXNlcyBhbmQgY2FuIGJlIGNvbmZpZ3VyZWQganVzdCB3aXRoIGphdmEudXRpbC5sb2dnaW5nLg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4xLjYuMDwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qY2wtb3Zlci1zbGY0ajwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4xLjYuMDwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5zbGY0ajwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5sb2c0ai1vdmVyLXNsZjRqPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLnNsZjRqPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnNsZjRqLWpkazE0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi4wPC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgLS0+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5vc2dpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuNS4wLXYyMDA5MDUyMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICA8cGx1Z2luPg0KLSAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tamFyLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgPGFyY2hpdmU+DQotICAgICAgICAgICAgICAgICAgICA8bWFuaWZlc3RGaWxlPnNyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9NQU5JRkVTVC5NRjwvbWFuaWZlc3RGaWxlPg0KLSAgICAgICAgICAgICAgICAgPC9hcmNoaXZlPg0KLSAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICAgICAgIDxwbHVnaW4+DQotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2hhZGUtcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjMuMjwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wYWNrYWdlPC9waGFzZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnNoYWRlPC9nb2FsPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb249Im9yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy5zaGFkZS5yZXNvdXJjZS5TZXJ2aWNlc1Jlc291cmNlVHJhbnNmb3JtZXIiLz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KLSAgICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICAgPC9wbHVnaW5zPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zaGFkZXMvYmFzZS9wb20ueG1sIGIvc2hhZGVzL2Jhc2UvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTBmNmE0My4uMDAwMDAwMAotLS0gYS9zaGFkZXMvYmFzZS9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNoYWRlczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIEJhc2UgSmFyPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1ub2RlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXdlYi1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWxhdW5jaGVyPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWVuZHBvaW50LWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1lbmRwb2ludC1oYXplbGNhc3QtY2xpZW50PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPCEtLSBkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtY2xpZW50LWphdmFzY3JpcHQ8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3kgLS0+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWNsaWVudC1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlLXNwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcubW9ydGJheS5qZXR0eTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpldHR5PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+amV0dHktdXRpbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWhhemVsY2FzdC1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXN0cmlwZXM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgIDxncm91cElkPm5ldC5zb3VyY2Vmb3JnZS5zdHJpcGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdHJpcGVzPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktd2luazwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtamF4d3Mtcmk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1ybWktcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LXJtaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb250cmlidXRpb24tb3NnaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3NnaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLW9zZ2ktcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3NnaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtaW1wbC1vc2dpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2U8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5vc2dpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLm9zZ2k8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2aWNlczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWV4dGVuc2liaWxpdHktZXF1aW5veDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3NnaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtbGF1bmNoZXItZXF1aW5veDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b3NnaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5zZXJ2bGV0PC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c2VydmxldC1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1jbGk8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5jb21tb25zLWNsaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLTwhLS0gdGhlc2UgcmVtYWluaW5nIGRlcGVuZGVuY2llcyBhcmUgbm90IHJlcXVpcmVkIHdoZW4gdXNpbmcgSkRLNiwgc28gdXNlIGEgc2NvcGUgb2YgcHJvdmlkZWQgIC0tPg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1zdGF4LWFwaV8xLjBfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4xLjAuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPndzdHgtYXNsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zdGF4PC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RheC1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPmphdmF4LnhtbC5iaW5kPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheGItYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguYWN0aXZhdGlvbjwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmF0aW9uPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+Y29tLnN1bi54bWwuYmluZDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXhiLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+Mi4xLjEyPC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC54bWwud3M8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+amF4d3MtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjIuMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLnNvYXA8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zYWFqLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguYW5ub3RhdGlvbjwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5qc3IyNTAtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguandzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjE4MS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+MS4wLU1SMTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXgueG1sLnN0cmVhbTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGF4LWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4xLjAtMjwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaGFkZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4yPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2hhZGU8L2dvYWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8Y3JlYXRlU291cmNlc0phcj50cnVlPC9jcmVhdGVTb3VyY2VzSmFyPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9tb3RlVHJhbnNpdGl2ZURlcGVuZGVuY2llcz50cnVlPC9wcm9tb3RlVHJhbnNpdGl2ZURlcGVuZGVuY2llcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RTZXQ+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUudHVzY2FueS5zY2E6KjwvaW5jbHVkZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczoqPC9pbmNsdWRlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdFNldD4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXJzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbj0ib3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zLnNoYWRlLnJlc291cmNlLlNlcnZpY2VzUmVzb3VyY2VUcmFuc2Zvcm1lciIvPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbj0ib3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zLnNoYWRlLnJlc291cmNlLk1hbmlmZXN0UmVzb3VyY2VUcmFuc2Zvcm1lciI+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hbmlmZXN0RW50cmllcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8TWFpbi1DbGFzcz5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmxhdW5jaGVyLkxhdW5jaGVyTWFpbjwvTWFpbi1DbGFzcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hbmlmZXN0RW50cmllcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVyPiANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KLSAgICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICAgPC9wbHVnaW5zPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zaGFkZXMvYnBlbC1ub2RlcC9wb20ueG1sIGIvc2hhZGVzL2JwZWwtbm9kZXAvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzMwMThjNS4uMDAwMDAwMAotLS0gYS9zaGFkZXMvYnBlbC1ub2RlcC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2hhZGVzPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1icGVsLW5vZGVwPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgQlBFTCBKYXIgaW5jbHVkaW5nIGRlcGVuZGVuY2llczwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYnBlbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktd2Vic2VydmljZXM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaGFkZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4yPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2hhZGU8L2dvYWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbj0ib3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zLnNoYWRlLnJlc291cmNlLlNlcnZpY2VzUmVzb3VyY2VUcmFuc2Zvcm1lciIvPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KLSAgICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICAgPC9wbHVnaW5zPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zaGFkZXMvYnBlbC9wb20ueG1sIGIvc2hhZGVzL2JwZWwvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhlNzRmZi4uMDAwMDAwMAotLS0gYS9zaGFkZXMvYnBlbC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNoYWRlczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYnBlbDwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIEJQRUwgSmFyPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWJwZWwtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5LXhtbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbnRyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbnRlcmZhY2UtamF2YTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbnRlcmZhY2Utd3NkbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8IS0tIGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmxvZzRqPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bG9nNGo8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uIC0tPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1sb2dnaW5nPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmFzbTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFzbTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgICA8cGx1Z2lucz4NCi0gICAgICAgICAgICA8cGx1Z2luPg0KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNoYWRlLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPHZlcnNpb24+MS4zLjI8L3ZlcnNpb24+DQotICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zaGFkZTwvZ29hbD4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9tb3RlVHJhbnNpdGl2ZURlcGVuZGVuY2llcz50cnVlPC9wcm9tb3RlVHJhbnNpdGl2ZURlcGVuZGVuY2llcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RTZXQ+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUudHVzY2FueS5zY2E6KjwvaW5jbHVkZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RTZXQ+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lcnM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb249Im9yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy5zaGFkZS5yZXNvdXJjZS5TZXJ2aWNlc1Jlc291cmNlVHJhbnNmb3JtZXIiLz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cmFuc2Zvcm1lcnM+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICA8L3BsdWdpbj4NCi0gICAgICAgIDwvcGx1Z2lucz4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2hhZGVzL2ptcy1ub2RlcC9wb20ueG1sIGIvc2hhZGVzL2ptcy1ub2RlcC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDk1YWI0Li4wMDAwMDAwCi0tLSBhL3NoYWRlcy9qbXMtbm9kZXAvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zaGFkZXM8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWptcy1ub2RlcDwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIEpNUyBTdXBwb3J0IEphciBpbmNsdWRpbmcgZGVwZW5kZW5jaWVzPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1qbXM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2ZW1xLWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+NS4zLjA8L3ZlcnNpb24+DQotICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+a2FoYWRiPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXEucHJvdG9idWY8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5hY3RpdmVtcS1wcm90b2J1ZjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tajJlZS1tYW5hZ2VtZW50XzEuMF9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmNvbW1vbnMtbG9nZ2luZzwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtbG9nZ2luZy1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1sb2dnaW5nPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5zcHJpbmdmcmFtZXdvcms8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zcHJpbmctY29udGV4dDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5jb21tb25zLW5ldDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmNvbW1vbnMtbmV0PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2U8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgIDxwbHVnaW5zPg0KLSAgICAgICAgICAgIDxwbHVnaW4+DQotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2hhZGUtcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjMuMjwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wYWNrYWdlPC9waGFzZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnNoYWRlPC9nb2FsPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lcnM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb249Im9yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy5zaGFkZS5yZXNvdXJjZS5TZXJ2aWNlc1Jlc291cmNlVHJhbnNmb3JtZXIiLz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cmFuc2Zvcm1lcnM+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICA8L3BsdWdpbj4NCi0gICAgICAgIDwvcGx1Z2lucz4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2hhZGVzL2ptcy9wb20ueG1sIGIvc2hhZGVzL2ptcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzY1MjgxLi4wMDAwMDAwCi0tLSBhL3NoYWRlcy9qbXMvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zaGFkZXM8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWptczwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIEpNUyBTdXBwb3J0IEphcjwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1zcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1hc3NlbWJseS14bWw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW50ZXJmYWNlLWphdmE8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW50ZXJmYWNlLXdzZGw8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZGF0YWJpbmRpbmctamF4YjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXdzLXdzZGxnZW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktcG9saWN5LXNlY3VyaXR5PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbnRyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2U8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgPHZlcnNpb24+JHtwb20udmVyc2lvbn08L3ZlcnNpb24+DQotICAgICAgICAgICAgPHNjb3BlPnByb3ZpZGVkPC9zY29wZT4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgPC9kZXBlbmRlbmNpZXM+DQotDQotICAgIDxidWlsZD4NCi0gICAgICAgIDxwbHVnaW5zPg0KLSAgICAgICAgICAgIDxwbHVnaW4+DQotICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc2hhZGUtcGx1Z2luPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjMuMjwvdmVyc2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQotICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT5wYWNrYWdlPC9waGFzZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPnNoYWRlPC9nb2FsPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb21vdGVUcmFuc2l0aXZlRGVwZW5kZW5jaWVzPnRydWU8L3Byb21vdGVUcmFuc2l0aXZlRGVwZW5kZW5jaWVzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdFNldD4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZXM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+b3JnLmFwYWNoZS50dXNjYW55LnNjYToqPC9pbmNsdWRlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdFNldD4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbj0ib3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zLnNoYWRlLnJlc291cmNlLlNlcnZpY2VzUmVzb3VyY2VUcmFuc2Zvcm1lciIvPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KLSAgICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICAgPC9wbHVnaW5zPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zaGFkZXMvanNvbi1ub2RlcC9wb20ueG1sIGIvc2hhZGVzL2pzb24tbm9kZXAvcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQzNzZiYy4uMDAwMDAwMAotLS0gYS9zaGFkZXMvanNvbi1ub2RlcC9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IS0tDQotICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KLSAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQotICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KLSAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCi0gKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQotICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KLSAqIA0KLSAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQotICogDQotICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KLSAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQotICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQotICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQotICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KLSAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCi0tLT4NCi08cHJvamVjdD4NCi0gICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KLSAgICA8cGFyZW50Pg0KLSAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2hhZGVzPC9hcnRpZmFjdElkPg0KLSAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KLSAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQotICAgIDwvcGFyZW50Pg0KLQ0KLSAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgPGFydGlmYWN0SWQ+dHVzY2FueS1qc29uLW5vZGVwPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgSlNPTlAgU3VwcG9ydCBKYXIgaW5jbHVkaW5nIGRlcGVuZGVuY2llczwvbmFtZT4NCi0NCi0gICAgPGRlcGVuZGVuY2llcz4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktanNvbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaGFkZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4yPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2hhZGU8L2dvYWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbj0ib3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zLnNoYWRlLnJlc291cmNlLlNlcnZpY2VzUmVzb3VyY2VUcmFuc2Zvcm1lciIvPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KLSAgICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICAgPC9wbHVnaW5zPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zaGFkZXMvanNvbi9wb20ueG1sIGIvc2hhZGVzL2pzb24vcG9tLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZjMGRhZS4uMDAwMDAwMAotLS0gYS9zaGFkZXMvanNvbi9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNoYWRlczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPnR1c2NhbnktanNvbjwvYXJ0aWZhY3RJZD4NCi0gICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIEpTT04gU3VwcG9ydCBKYXI8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qc29ucC1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHkteG1sPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbnRyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2EtYXBpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtaHR0cDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctanNvbnJwYy1ydW50aW1lPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZS1zcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29yZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb21tb24teG1sPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUud3MuY29tbW9ucy5heGlvbTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmF4aW9tLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLmNvbW1vbnMuYXhpb208L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5heGlvbS1pbXBsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5LXhtbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWh0dHA8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi13ZWItY2xpZW50PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxleGNsdXNpb25zPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYXNzZW1ibHk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24td2ViLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaGFkZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4yPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2hhZGU8L2dvYWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvbW90ZVRyYW5zaXRpdmVEZXBlbmRlbmNpZXM+dHJ1ZTwvcHJvbW90ZVRyYW5zaXRpdmVEZXBlbmRlbmNpZXM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0U2V0Pg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhOio8L2luY2x1ZGU+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FydGlmYWN0U2V0Pg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXJzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVyIGltcGxlbWVudGF0aW9uPSJvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMuc2hhZGUucmVzb3VyY2UuU2VydmljZXNSZXNvdXJjZVRyYW5zZm9ybWVyIi8+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHJhbnNmb3JtZXJzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQotICAgICAgICAgICAgPC9wbHVnaW4+DQotICAgICAgICA8L3BsdWdpbnM+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NoYWRlcy9wb20ueG1sIGIvc2hhZGVzL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYTAxOTQuLjAwMDAwMDAKLS0tIGEvc2hhZGVzL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2hhZGVzPC9hcnRpZmFjdElkPg0KLSAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU2hhZGVkIEphcnM8L25hbWU+DQotDQotICAgIDxtb2R1bGVzPg0KLSAgICAgICAgPG1vZHVsZT5iYXNlPC9tb2R1bGU+DQotICAgICAgICA8bW9kdWxlPmJhc2Utbm9kZXA8L21vZHVsZT4NCi0gICAgICAgIDxtb2R1bGU+am1zPC9tb2R1bGU+DQotICAgICAgICA8bW9kdWxlPmpzb248L21vZHVsZT4NCi0gICAgICAgIDxtb2R1bGU+anNvbi1ub2RlcDwvbW9kdWxlPg0KLSAgICAgICAgPG1vZHVsZT5zcHJpbmc8L21vZHVsZT4NCi0gICAgICAgIDxtb2R1bGU+c3ByaW5nLW5vZGVwPC9tb2R1bGU+DQotICAgICAgICA8bW9kdWxlPndlYnNlcnZpY2VzPC9tb2R1bGU+DQotICAgICAgICA8bW9kdWxlPndlYnNlcnZpY2VzLW5vZGVwPC9tb2R1bGU+DQotICAgIDwvbW9kdWxlcz4NCi0NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvc2hhZGVzL3NwcmluZy1ub2RlcC9wb20ueG1sIGIvc2hhZGVzL3NwcmluZy1ub2RlcC9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2U5Yjg1Li4wMDAwMDAwCi0tLSBhL3NoYWRlcy9zcHJpbmctbm9kZXAvcG9tLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNoYWRlczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc3ByaW5nLW5vZGVwPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU3ByaW5nIFN1cHBvcnQgSmFyIGluY2x1ZGluZyBkZXBlbmRlbmNpZXM8L25hbWU+DQotDQotICAgIDxkZXBlbmRlbmNpZXM+DQotDQotICAgICAgICA8ZGVwZW5kZW5jeT4NCi0gICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnNoYWRlczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNwcmluZzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaGFkZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4yPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2hhZGU8L2dvYWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbj0ib3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zLnNoYWRlLnJlc291cmNlLlNlcnZpY2VzUmVzb3VyY2VUcmFuc2Zvcm1lciIvPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KLSAgICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICAgPC9wbHVnaW5zPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zaGFkZXMvc3ByaW5nL3BvbS54bWwgYi9zaGFkZXMvc3ByaW5nL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ODA3OWQuLjAwMDAwMDAKLS0tIGEvc2hhZGVzL3NwcmluZy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNoYWRlczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc3ByaW5nPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU3ByaW5nIFN1cHBvcnQgSmFyPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWltcGxlbWVudGF0aW9uLXNwcmluZzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5LXhtbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb250cmlidXRpb248L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktc2NhLWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1qYXZhLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1hcGk8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaGFkZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4yPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2hhZGU8L2dvYWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvbW90ZVRyYW5zaXRpdmVEZXBlbmRlbmNpZXM+dHJ1ZTwvcHJvbW90ZVRyYW5zaXRpdmVEZXBlbmRlbmNpZXM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0U2V0Pg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhOio8L2luY2x1ZGU+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FydGlmYWN0U2V0Pg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXJzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVyIGltcGxlbWVudGF0aW9uPSJvcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnMuc2hhZGUucmVzb3VyY2UuU2VydmljZXNSZXNvdXJjZVRyYW5zZm9ybWVyIi8+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHJhbnNmb3JtZXJzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KLSAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQotICAgICAgICAgICAgPC9wbHVnaW4+DQotICAgICAgICA8L3BsdWdpbnM+DQotICAgIDwvYnVpbGQ+DQotPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3NoYWRlcy93ZWJzZXJ2aWNlcy1ub2RlcC9wb20ueG1sIGIvc2hhZGVzL3dlYnNlcnZpY2VzLW5vZGVwL3BvbS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMzYWY0ZWMuLjAwMDAwMDAKLS0tIGEvc2hhZGVzL3dlYnNlcnZpY2VzLW5vZGVwL3BvbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhLS0NCi0gKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQotICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCi0gKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQotICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KLSAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCi0gKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQotICogDQotICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCi0gKiANCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQotICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCi0gKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCi0gKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCi0gKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQotICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KLS0tPg0KLTxwcm9qZWN0Pg0KLSAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQotICAgIDxwYXJlbnQ+DQotICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zaGFkZXM8L2FydGlmYWN0SWQ+DQotICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQotICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCi0gICAgPC9wYXJlbnQ+DQotDQotICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXdlYnNlcnZpY2VzLW5vZGVwPC9hcnRpZmFjdElkPg0KLSAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgV2ViIFNlcnZpY2VzIEphciBpbmNsdWRpbmcgZGVwZW5kZW5jaWVzPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS13ZWJzZXJ2aWNlczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgIDwvZGVwZW5kZW5jeT4NCi0gICAgICAgIDxkZXBlbmRlbmN5Pg0KLSAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2Euc2hhZGVzPC9ncm91cElkPg0KLSAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8c2NvcGU+cHJvdmlkZWQ8L3Njb3BlPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLSAgICA8L2RlcGVuZGVuY2llcz4NCi0NCi0gICAgPGJ1aWxkPg0KLSAgICAgICAgPHBsdWdpbnM+DQotICAgICAgICAgICAgPHBsdWdpbj4NCi0gICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zaGFkZS1wbHVnaW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMy4yPC92ZXJzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQotICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnBhY2thZ2U8L3BoYXNlPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+c2hhZGU8L2dvYWw+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lciBpbXBsZW1lbnRhdGlvbj0ib3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zLnNoYWRlLnJlc291cmNlLlNlcnZpY2VzUmVzb3VyY2VUcmFuc2Zvcm1lciIvPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyYW5zZm9ybWVycz4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQotICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KLSAgICAgICAgICAgIDwvcGx1Z2luPg0KLSAgICAgICAgPC9wbHVnaW5zPg0KLSAgICA8L2J1aWxkPg0KLTwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9zaGFkZXMvd2Vic2VydmljZXMvcG9tLnhtbCBiL3NoYWRlcy93ZWJzZXJ2aWNlcy9wb20ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjRiMDU4Li4wMDAwMDAwCi0tLSBhL3NoYWRlcy93ZWJzZXJ2aWNlcy9wb20ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjA4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPCEtLQ0KLSAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCi0gKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCi0gKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KLSAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCi0gKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQotICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KLSAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCi0gKiANCi0gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KLSAqIA0KLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCi0gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KLSAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KLSAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KLSAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCi0gKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQotLS0+DQotPHByb2plY3Q+DQotICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCi0gICAgPHBhcmVudD4NCi0gICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNoYWRlczwvYXJ0aWZhY3RJZD4NCi0gICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCi0gICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KLSAgICA8L3BhcmVudD4NCi0NCi0gICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktd2Vic2VydmljZXM8L2FydGlmYWN0SWQ+DQotICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBXZWIgU2VydmljZXMgSmFyPC9uYW1lPg0KLQ0KLSAgICA8ZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3MtcnVudGltZS1heGlzMjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICA8dmVyc2lvbj4ke3BvbS52ZXJzaW9ufTwvdmVyc2lvbj4NCi0gICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3M8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy13c2RsZ2VuPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWludGVyZmFjZS13c2RsPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmU8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29udHJpYnV0aW9uPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5LXhtbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbnRlcmZhY2UtamF2YTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbnRlcmZhY2UtamF2YS1qYXh3czwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kYXRhYmluZGluZzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb3JlLWRhdGFiaW5kaW5nPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGFiaW5kaW5nLWpheGI8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1odHRwPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvcmUtc3BpPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWFzc2VtYmx5PC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXhzZDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLndzLmNvbW1vbnMuc2NoZW1hPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+WG1sU2NoZW1hPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuZ2Vyb25pbW8uc3BlY3M8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5nZXJvbmltby1hY3RpdmF0aW9uXzEuMV9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmphdmF4LnNlcnZsZXQ8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zZXJ2bGV0LWFwaTwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmdlcm9uaW1vLnNwZWNzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Z2Vyb25pbW8tYWN0aXZhdGlvbl8xLjFfc3BlYzwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3R4LWFzbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5tYWlsPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWFpbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD54YWxhbjwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnhhbGFuPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPnhtbC1hcGlzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+eG1sLWFwaXM8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5nZXJvbmltby5zcGVjczwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmdlcm9uaW1vLXN0YXgtYXBpXzEuMF9zcGVjPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUucmFtcGFydDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnJhbXBhcnQtdHJ1c3Q8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguYWN0aXZhdGlvbjwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFjdGl2YXRpb248L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+Y29tbW9ucy1sb2dnaW5nPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+Y29tbW9ucy1sb2dnaW5nPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPmxvZzRqPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bG9nNGo8L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF4ZW48L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXhlbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQotICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcGVuc2FtbDwvZ3JvdXBJZD4NCi0gICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9wZW5zYW1sPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCi0gICAgICAgICAgICAgICAgICAgIDxncm91cElkPnhhbGFuPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+eGFsYW48L2FydGlmYWN0SWQ+DQotICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+eGVyY2VzPC9ncm91cElkPg0KLSAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+eGVyY2VzSW1wbDwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQotICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KLSAgICAgICAgPC9kZXBlbmRlbmN5Pg0KLQ0KLSAgICAgICAgPGRlcGVuZGVuY3k+DQotICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYS5zaGFkZXM8L2dyb3VwSWQ+DQotICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlPC9hcnRpZmFjdElkPg0KLSAgICAgICAgICAgIDx2ZXJzaW9uPiR7cG9tLnZlcnNpb259PC92ZXJzaW9uPg0KLSAgICAgICAgICAgIDxzY29wZT5wcm92aWRlZDwvc2NvcGU+DQotICAgICAgICA8L2RlcGVuZGVuY3k+DQotDQotICAgIDwvZGVwZW5kZW5jaWVzPg0KLQ0KLSAgICA8YnVpbGQ+DQotICAgICAgICA8cGx1Z2lucz4NCi0gICAgICAgICAgICA8cGx1Z2luPg0KLSAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQotICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXNoYWRlLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCi0gICAgICAgICAgICAgICAgPHZlcnNpb24+MS4zLjI8L3ZlcnNpb24+DQotICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KLSAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cGFja2FnZTwvcGhhc2U+DQotICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5zaGFkZTwvZ29hbD4NCi0gICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9tb3RlVHJhbnNpdGl2ZURlcGVuZGVuY2llcz50cnVlPC9wcm9tb3RlVHJhbnNpdGl2ZURlcGVuZGVuY2llcz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RTZXQ+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5hcGFjaGUudHVzY2FueS5zY2E6KjwvaW5jbHVkZT4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RTZXQ+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cmFuc2Zvcm1lcnM+DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb249Im9yZy5hcGFjaGUubWF2ZW4ucGx1Z2lucy5zaGFkZS5yZXNvdXJjZS5TZXJ2aWNlc1Jlc291cmNlVHJhbnNmb3JtZXIiLz4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cmFuc2Zvcm1lcnM+DQotICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KLSAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQotICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCi0gICAgICAgICAgICA8L3BsdWdpbj4NCi0gICAgICAgIDwvcGx1Z2lucz4NCi0gICAgPC9idWlsZD4NCi08L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2Fzc2VtYmx5L3BvbS54bWwgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYXNzZW1ibHkvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzYzMWU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2Fzc2VtYmx5L3BvbS54bWwKQEAgLTAsMCArMSwxNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbXBsaWFuY2UtdGVzdHM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0LWFzc2VtYmx5PC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU3BlY2lmaWNhdGlvbiBDb21wbGlhbmNlIFRlc3RzIEFzc2VtYmx5PC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKw0KKyAgICAgICAgPCEtLSBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGdldCB0aGUgbW9kdWxlIHdvcmtpbmcgaW4gRWNsaXBzZSB3aGljaCBkb2Vzbid0IHBpY2sgaXQgdXAgZnJvbSB0aGUgZGVwZW5kZW5jeSBwbHVnaW4gdW5wYWNrIC0tPg0KKyAgICAgICAgPCEtLSBUaGUgZGVwZW5kZW5jeSBwbHVnaW4gdW5wYWNrIGlzIG5lZWRlZCBhcyBwcmVzZW50bHkgdGhlIHN1cmVmaXJlIHBsdWdpbiB3b250IHJ1biB0ZXN0cyBpbiBhIGRlcGVuZGVuY3kgamFyIC0tPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW90ZXN0cy1hc20tdGVzdHM8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1wb208L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktb3NnaS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczI8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisNCisgICAgICAgIDwhLS0gTm90IHN1cmUgd2h5IHRoaXMgaXMgcmVxdWlyZWQgZm9yIEFTTS4gQnV0IEFTTV82MDM5ICYgQVNNXzYwMzYgZmFpbCB3aXRob3V0IGl0IC0tPiANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmNvbS5zdW4ueG1sLndzPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheHdzLXJ0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMS43PC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisNCisgICAgICAgIDwhLS0gVGhpcyBpcyBuZWVkIHdoZW4gcnVubmluZyB3aXRoIFN1biBKREsgd2hpY2ggZ2V0cyBhbiB1bnN1cHBvcnRlZCBvcGVyYXRpb24gZXhjZXB0aW9uIGNyZWF0aW5nIGFuIFhNTFN0cmVhbVJlYWRlciBmcm9tIGEgRE9NU291cmNlDQorICAgICAgICAgICAgIHdoZW4gVHVzY2FueSBpcyB3cml0aW5nIGEgcHJvcGVydHkgdmFsdWUgIC0tPg0KKzwhLS0NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy53b29kc3RveDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD53c3R4LWFzbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4zLjIuNDwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQorICAgICAgICAgICAgPGV4Y2x1c2lvbnM+DQorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+DQorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zdGF4PC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3RheC1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPg0KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCistLT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPmp1bml0PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuNTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgPGJ1aWxkPg0KKyAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPHBsdWdpbnM+DQorICAgICAgICAgICAgICAgICAgICAgICAgDQorICAgICAgPHBsdWdpbj4NCisgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPg0KKyAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgPGV4Y2x1ZGVzPg0KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovQVNNXzUwMTZfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tIFRVU0NBTlktMzcwOSAtLT4NCisgICAgICAgICAgICAgIDxleGNsdWRlPioqL0FTTV82MDA0X1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGU+PCEtLSBUVVNDQU5ZLTM3MDkgLS0+DQorICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9BU01fNjAwN19UZXN0Q2FzZS5qYXZhPC9leGNsdWRlPjwhLS0gVFVTQ0FOWS0zNzA5IC0tPg0KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovQVNNXzYwMDhfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tIFRVU0NBTlktMzcwOSAtLT4NCisgICAgICAgICAgICAgIDxleGNsdWRlPioqL0FTTV82MDE0X1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGU+PCEtLSBUVVNDQU5ZLTM3MDkgLS0+DQorICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9BU01fNjAzNF9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlPjwhLS0gVFVTQ0FOWS0zNzA5IC0tPg0KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovQVNNXzEyMDA3X1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGU+PCEtLSBUVVNDQU5ZLTM3MDkgLS0+DQorICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9BU01fMTIwMDhfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tIFRVU0NBTlktMzcwOSAtLT4NCisgICAgICAgICAgIDwvZXhjbHVkZXM+DQorICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgIDwvcGx1Z2luPg0KKyAgICAgIDxwbHVnaW4+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBlbmRlbmN5LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgIDxpZD51bnBhY2s8L2lkPg0KKyAgICAgICAgICAgIDxwaGFzZT50ZXN0LWNvbXBpbGU8L3BoYXNlPg0KKyAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgIDxnb2FsPnVucGFjazwvZ29hbD4NCisgICAgICAgICAgICA8L2dvYWxzPg0KKyAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW1zPg0KKyAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4NCisgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+b2FzaXMtYXNzZW1ibHktY29udHJpYnV0aW9uczwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+DQorICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vb2FzaXMtY29udHJpYnV0aW9uczwvb3V0cHV0RGlyZWN0b3J5Pg0KKyAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPg0KKyAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW90ZXN0cy1hc20tdGVzdHM8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICAgICAgPHR5cGU+amFyPC90eXBlPg0KKyAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+Y29tbW9ucy1sb2dnaW5nLnByb3BlcnRpZXMsb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXM8L2V4Y2x1ZGVzPg0KKyAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3Rlc3QtY2xhc3Nlczwvb3V0cHV0RGlyZWN0b3J5Pg0KKyAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPg0KKyAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICA8L2V4ZWN1dGlvbnM+DQorICAgICAgPC9wbHVnaW4+DQorICAgIDwvcGx1Z2lucz4NCisgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9hc3NlbWJseS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9hc3NlbWJseS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2ExNjFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2Fzc2VtYmx5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9vdGVzdC9UdXNjYW55UnVudGltZUJyaWRnZS5qYXZhCkBAIC0wLDAgKzEsMjE3IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0Ow0KKw0KK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7DQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7DQorDQoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7DQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7DQorDQoraW1wb3J0IHRlc3RDbGllbnQuVGVzdEV4Y2VwdGlvbl9FeGNlcHRpb247DQoraW1wb3J0IGNsaWVudC5SdW50aW1lQnJpZGdlOw0KKw0KKy8qKg0KKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdW50aW1lIEJyaWRnZSBmb3IgdGhlIEFwYWNoZSBUdXNjYW55IFNDQSBydW50aW1lICh2ZXJzaW9uIDIueCkNCisgKg0KKyAqLw0KK3B1YmxpYyBjbGFzcyBUdXNjYW55UnVudGltZUJyaWRnZSBpbXBsZW1lbnRzIFJ1bnRpbWVCcmlkZ2Ugew0KKw0KKyAgICBzdGF0aWMgZmluYWwgU3RyaW5nIENPTlRSSUJVVElPTl9MT0NBVElPTl9QUk9QS0VZID0gIk9BU0lTX1RFU1RFTlZfQ09OVFJJQlVUSU9OX0xPQ0FUSU9OIjsNCisNCisgICAgcHJvdGVjdGVkIE5vZGVGYWN0b3J5IGxhdW5jaGVyOw0KKyAgICBwcm90ZWN0ZWQgTm9kZSBub2RlOw0KKyAgICBwcm90ZWN0ZWQgUHJvcGVydGllcyBleHBlY3RlZEVycm9yTWVzc2FnZXM7DQorDQorICAgIHB1YmxpYyBUdXNjYW55UnVudGltZUJyaWRnZSgpIHsNCisgICAgICAgIC8vIHJlYWQgdGVzdCBlcnJvciBtYXBwaW5nDQorICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZXMgPSBuZXcgUHJvcGVydGllcygpOw0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICBJbnB1dFN0cmVhbSBwcm9wZXJ0aWVzU3RyZWFtID0gdGhpcy5nZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oIi90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyIpOw0KKyAgICAgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlcy5sb2FkKHByb3BlcnRpZXNTdHJlYW0pOw0KKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeyAgIA0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIHJlYWQgb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIGZpbGUiKTsNCisgICAgICAgIH0gDQorICAgIH0NCisNCisgICAgcHVibGljIGJvb2xlYW4gc3RhcnRDb250cmlidXRpb24oU3RyaW5nIGNvbXBvc2l0ZU5hbWUsIFN0cmluZyBjb250cmlidXRpb25Mb2NhdGlvbiwgU3RyaW5nW10gY29udHJpYnV0aW9uTmFtZXMpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICAvLyBUdXNjYW55IHNwZWNpZmljIGNvZGUgd2hpY2ggc3RhcnRzIHRoZSBjb250cmlidXRpb24ocykgaG9sZGluZyB0aGUgdGVzdA0KKyAgICAgICAgICAgIGxhdW5jaGVyID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKTsNCisNCisgICAgICAgICAgICBDb250cmlidXRpb25bXSBjb250cmlidXRpb25zID0gbmV3IENvbnRyaWJ1dGlvbltjb250cmlidXRpb25OYW1lcy5sZW5ndGhdOw0KKyAgICAgICAgICAgIFN0cmluZ1tdIGNvbnRyaWJ1dGlvblVSSXMgPSBnZXRDb250cmlidXRpb25VUklzKGNvbnRyaWJ1dGlvbkxvY2F0aW9uLCBjb250cmlidXRpb25OYW1lcyk7DQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250cmlidXRpb25zLmxlbmd0aDsgaSsrKSB7DQorICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbnNbaV0gPSBuZXcgQ29udHJpYnV0aW9uKGNvbnRyaWJ1dGlvbk5hbWVzW2ldLCBjb250cmlidXRpb25VUklzW2ldKTsNCisgICAgICAgICAgICB9IC8vIGVuZCBmb3INCisNCisgICAgICAgICAgICBub2RlID0gbGF1bmNoZXIuY3JlYXRlTm9kZShjb21wb3NpdGVOYW1lLCBjb250cmlidXRpb25zKTsNCisgICAgICAgICAgICAvLyBTdGFydCB0aGUgbm9kZQ0KKyAgICAgICAgICAgIG5vZGUuc3RhcnQoKTsNCisgICAgICAgICAgICANCisgICAgICAgICAgICAvLyBGb3IgZGVidWdnaW5nIA0KKyAgICAgICAgICAgIC8vIHByaW50IG91dCB0aGUgY29tcG9zaXRlcyB0aGF0IGhhdmUgYmVlbiByZWFkIGluIHN1Y2Nlc3MgY2FzZXMNCisgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oKChOb2RlSW1wbClub2RlKS5kdW1wRG9tYWluQ29tcG9zaXRlKCkpOw0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOw0KKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAgICAgDQorICAgICAgICAgICAgdGhyb3cgZTsNCisgICAgICAgIH0gLy8gZW5kIHRyeQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0gLy8gZW5kIG1ldGhvZCBzdGFydENvbnRyaWJ1dGlvbg0KKw0KKyAgICAvKioNCisgICAgICogR2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbnMgYXMgVVJJcw0KKyAgICAgKiBAcGFyYW0gY29udHJpYnV0aW9uTG9jYXRpb24gLSBhIGxvY2F0aW9uIHBhdHRlcm4gVVJJLCB3aGljaCBjb250YWlucyBvbmUgb3IgbW9yZSAiJTEiDQorICAgICAqIHN1YnN0cmluZ3MsIHdoaWNoIGFyZSBzdWJzdGl0dXRlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjb250cmlidXRpb24gdG8gZ2V0IHRoZSBVUkkgb2YNCisgICAgICogdGhlIGNvbnRyaWJ1dGlvbg0KKyAgICAgKiBAcmV0dXJuIHRoZSBjb250cmlidXRpb24gbG9jYXRpb25zIGFzIGFuIGFycmF5IG9mIFN0cmluZ3MNCisgICAgICovDQorICAgIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRDb250cmlidXRpb25VUklzKFN0cmluZyBjb250cmlidXRpb25Mb2NhdGlvbiwgU3RyaW5nW10gY29udHJpYnV0aW9uTmFtZXMpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgU3RyaW5nW10gbG9jYXRpb25zID0gbmV3IFN0cmluZ1tjb250cmlidXRpb25OYW1lcy5sZW5ndGhdOw0KKw0KKyAgICAgICAgaWYgKGxvY2F0aW9ucyAhPSBudWxsICYmIGNvbnRyaWJ1dGlvbkxvY2F0aW9uICE9IG51bGwpIHsNCisNCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGg7IGkrKykgew0KKyAgICAgICAgICAgICAgICBTdHJpbmcgYUxvY2F0aW9uID0gY29udHJpYnV0aW9uTG9jYXRpb24ucmVwbGFjZUFsbCgiJTEiLCBjb250cmlidXRpb25OYW1lc1tpXSk7DQorDQorICAgICAgICAgICAgICAgIGxvY2F0aW9uc1tpXSA9IGFMb2NhdGlvbjsNCisgICAgICAgICAgICB9IC8vIGVuZCBmb3IgICAgCSAgCQ0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBpZiAobG9jYXRpb25zID09IG51bGwpIHsNCisgICAgICAgICAgICAgICAgLy8gTm8gY29udHJpYnV0aW9uIHNwZWNpZmllZCAtIHRocm93IGFuIEV4Y2VwdGlvbg0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmFibGUgdG8gc3RhcnQgU0NBIHJ1bnRpbWUgLSBubyBjb250cmlidXRpb24gc3VwcGxpZWQgLSBlcnJvciIpOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgIC8vIE5vIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbiBzdXBwbGllZCAtIHRocm93IGFuIEV4Y2VwdGlvbg0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmFibGUgdG8gc3RhcnQgU0NBIHJ1bnRpbWUgLSBubyBjb250cmlidXRpb24gbG9jYXRpb24gc3VwcGxpZWQgLSBlcnJvciIpOw0KKyAgICAgICAgICAgIH0gLy8gZW5kIGlmIA0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisNCisgICAgICAgIHJldHVybiBsb2NhdGlvbnM7DQorICAgIH0gLy8gZW5kIGdldENvbnRyaWJ1dGlvblVSSQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBzdG9wQ29udHJpYnV0aW9uKCkgew0KKyAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgew0KKyAgICAgICAgICAgIG5vZGUuc3RvcCgpOw0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisgICAgICAgIGlmIChsYXVuY2hlciAhPSBudWxsKSB7DQorICAgICAgICAgICAgbGF1bmNoZXIuZGVzdHJveSgpOw0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisgICAgfSAvLyBlbmQgbWV0aG9kIHN0b3BDb250cmlidXRpb24NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIGNoZWNrRXJyb3IoU3RyaW5nIHRlc3ROYW1lLCBUaHJvd2FibGUgZXgpIHRocm93cyBUaHJvd2FibGUgeyANCisgICAgICAgICAgICAgIA0KKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZSA9IGV4cGVjdGVkRXJyb3JNZXNzYWdlcy5nZXRQcm9wZXJ0eSh0ZXN0TmFtZSk7DQorICAgICAgICBTdHJpbmcgcmVjZWl2ZWRNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGV4KTsvL2V4LmdldE1lc3NhZ2UoKTsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZSA9PSBudWxsKXsNCisgICAgICAgICAgICB3cml0ZU1pc3NpbmdNZXNzYWdlKHRlc3ROYW1lLCBleCk7DQorICAgICAgICAgICAgZmFpbCgiTnVsbCBleHBlY3RlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSArIA0KKyAgICAgICAgICAgICAgICAgIlBsZWFzZSBhZGQgbWVzc2FnZSB0byBvYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMiKTsNCisgICAgICAgIH0gLy8gZW5kIGlmDQorICAgICAgICANCisgICAgICAgIGlmIChyZWNlaXZlZE1lc3NhZ2UgPT0gbnVsbCl7DQorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7DQorICAgICAgICAgICAgZmFpbCgiTnVsbCByZWNlaXZlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSk7DQorICAgICAgICB9IC8vIGVuZCBpZg0KKw0KKyAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZS5zdGFydHNXaXRoKCIqIikpIHsNCisgICAgICAgICAgICAvLyBhbGxvdyB1c2luZyAqIHRvIGlnbm9yZSBhIG1lc3NhZ2UgY29tcGFyaXNvbg0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgLy8gRGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBtZXNzYWdlIGhhcyB2YXJpYWJsZSBwYXJ0cyB3aXRoaW4gaXQNCisgICAgICAgIC8vIG1hcmtlZCB3aXRoIHRoZSBjaGFyYWN0ZXJzICoqKi4gSGVyZSB3ZSB0b2tlbml6ZSB0aGUgZXhwZWN0ZWQgc3RyaW5nIA0KKyAgICAgICAgLy8gYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIGluZGl2aWR1YWwgcGFydHMgYXJlIHByZXNlbnQgaW4gdGhlIHJlc3VsdHMgc3RyaW5nDQorICAgICAgICBTdHJpbmcgZXhwZWN0ZWRNZXNzYWdlUGFydHNbXSA9IGV4cGVjdGVkTWVzc2FnZS5zcGxpdCgiXFwqXFwqXFwqIik7DQorICAgICAgICANCisgICAgICAgIGlmIChleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGggPiAxKXsNCisgICAgICAgICAgICBpbnQgZm91bmRQYXJ0cyA9IDA7DQorICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGV4cGVjdGVkTWVzc2FnZVBhcnRzLmxlbmd0aDsgaSsrKXsNCisgICAgICAgICAgICAgICAgaWYgKHJlY2VpdmVkTWVzc2FnZS5pbmRleE9mKGV4cGVjdGVkTWVzc2FnZVBhcnRzW2ldKSA+IC0xICl7DQorICAgICAgICAgICAgICAgICAgICBmb3VuZFBhcnRzKys7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgaWYgKGZvdW5kUGFydHMgPT0gZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoKXsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIA0KKyAgICAgICAgLy8gRGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2UgaXMgdmFyaWFibGUgKGVnIGNvbnRhaW5zIGFic29sdXRlIGZpbGVuYW1lcykgDQorICAgICAgICAvLyBhbmQgd2hlcmUgdGhlIG9ubHkgcmVsZXZhbnQgcGFydCBpcyB0aGUgc3RhcnQgb2YgdGhlIG1lc3NhZ2UgLSBpbiB0aGlzIGNhc2UgdGhlIGV4cGVjdGVkDQorICAgICAgICAvLyBtZXNzYWdlIG9ubHkgY29udGFpbnMgdGhlIHN0ZW0gc2VjdGlvbiB3aGljaCBpcyB1bmNoYW5naW5nLi4uDQorICAgICAgICBpZiggcmVjZWl2ZWRNZXNzYWdlLmxlbmd0aCgpID4gZXhwZWN0ZWRNZXNzYWdlLmxlbmd0aCgpICkgew0KKyAgICAgICAgICAgIC8vIFRydW5jYXRlIHRoZSByZWNlaXZlZCBtZXNzYWdlIHRvIHRoZSBsZW5ndGggb2YgdGhlIGV4cGVjdGVkIG1lc3NhZ2UNCisgICAgICAgICAgICByZWNlaXZlZE1lc3NhZ2UgPSByZWNlaXZlZE1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGV4cGVjdGVkTWVzc2FnZS5sZW5ndGgoKSApOw0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisNCisgICAgICAgIGlmICghZXhwZWN0ZWRNZXNzYWdlLmVxdWFscyhyZWNlaXZlZE1lc3NhZ2UpKSB7DQorICAgICAgICAgICAgd3JpdGVJbmNvcnJlY3RNZXNzYWdlKHRlc3ROYW1lLCBleHBlY3RlZE1lc3NhZ2UsIHJlY2VpdmVkTWVzc2FnZSk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIGFzc2VydEVxdWFscyggZXhwZWN0ZWRNZXNzYWdlLCByZWNlaXZlZE1lc3NhZ2UgKTsNCisgICAgICAgIA0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgICANCisgICAgfQ0KKw0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZU1pc3NpbmdNZXNzYWdlKFN0cmluZyB0ZXN0TmFtZSwgVGhyb3dhYmxlIGV4KSB7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIG91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigidGFyZ2V0L09UZXN0TWlzc2luZ01zZ3MudHh0IiwgdHJ1ZSkpOw0KKyAgICAgICAgICAgIG91dC53cml0ZSh0ZXN0TmFtZSArICI9KiIpOw0KKyAgICAgICAgICAgIG91dC5uZXdMaW5lKCk7DQorICAgICAgICAgICAgb3V0LmNsb3NlKCk7DQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQorICAgICAgICB9IA0KKyAgICB9DQorDQorICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlSW5jb3JyZWN0TWVzc2FnZShTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIHJlY2VpdmVkKSB7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIG91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigidGFyZ2V0L09UZXN0SW5jb3JyZWN0TXNncy50eHQiLCB0cnVlKSk7DQorICAgICAgICAgICAgb3V0LndyaXRlKHRlc3ROYW1lKTsgb3V0Lm5ld0xpbmUoKTsNCisgICAgICAgICAgICBvdXQud3JpdGUoIiAgICAiICsgZXhwZWN0ZWQpOyBvdXQubmV3TGluZSgpOw0KKyAgICAgICAgICAgIG91dC53cml0ZSgiICAgICIgKyByZWNlaXZlZCk7IG91dC5uZXdMaW5lKCk7DQorICAgICAgICAgICAgb3V0LmNsb3NlKCk7DQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQorICAgICAgICB9IA0KKyAgICB9DQorDQorICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKFRocm93YWJsZSBleCkgew0KKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG51bGw7DQorICAgICAgICANCisgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIFRlc3RFeGNlcHRpb25fRXhjZXB0aW9uKSB7DQorICAgICAgICAgICAgVGVzdEV4Y2VwdGlvbl9FeGNlcHRpb24gdGUgPSAoVGVzdEV4Y2VwdGlvbl9FeGNlcHRpb24pIGV4Ow0KKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHRlLmdldEZhdWx0SW5mbygpLmdldE1lc3NhZ2UoKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXguZ2V0TWVzc2FnZSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlOw0KKyAgICB9DQorfSAvLyBlbmQgY2xhc3MgVHVzY2FueVJ1bnRpbWVCcmlkZ2UNCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYXNzZW1ibHkvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2Fzc2VtYmx5L3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjAxYjZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2Fzc2VtYmx5L3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpAQCAtMCwwICsxLDMwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorDQorIyBPQVNJUyBTQ0EgQXNzZW1ibHkgdGVzdCBwcm9wZXJ0aWVzDQorIyBUaGUgaW1wbGVtZW50YXRpb24gdHlwZSB0byB1c2UgZm9yIEFzc2VtYmx5IHRlc3Qgc3VpdGUNCisjIG9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1CUEVMDQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5sYW5nPUphdmENCisNCisjIFRoZSBjbGFzcyB0byB1c2UgYXMgdGhlIFJ1bnRpbWUgQnJpZGdlIGZvciB0aGUgU0NBIHJ1bnRpbWUgdW5kZXIgdGVzdA0KKyNvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LnJ1bnRpbWVfYnJpZGdlPW9yZy5hcGFjaGUudHVzY2FueS5zY2Eub3Rlc3QuVHVzY2FueU9TR2lSdW50aW1lQnJpZGdlDQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlSdW50aW1lQnJpZGdlDQorDQorIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgZm9yIHRoZSB0ZXN0IHN1aXRlDQorIyAlMSByZXByZXNlbnRzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5hbWUgb2YgZWFjaCBjb250cmlidXRpb24gaW50byB0aGUgbG9jYXRpb24gVVJJDQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5jb250cmlidXRpb24ubG9jYXRpb249Li90YXJnZXQvb2FzaXMtY29udHJpYnV0aW9ucy8lMS90YXJnZXQvJTEuemlwDQorDQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2Fzc2VtYmx5L3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9hc3NlbWJseS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ4NzY0ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9hc3NlbWJseS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKQEAgLTAsMCArMSw5NSBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyANCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyANCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KKw0KK0FTTV80MDAyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNDAwMDMsQVNNNjAwMDMsSkNBOTAwNDVdIER1cGxpY2F0ZSBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlIG5hbWU6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFNlcnZpY2UgPSBTZXJ2aWNlMQ0KK0FTTV80MDAzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNDAwMDQsQVNNNTAwMDcsQVNNNjAwMDZdIER1cGxpY2F0ZSBpbXBsZW1lbnRhdGlvbiByZWZlcmVuY2UgbmFtZTogQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDEgUmVmZXJlbmNlID0gUmVmZXJlbmNlMQ0KK0FTTV80MDA0PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNDAwMDUsQVNNNjAwMTRdIER1cGxpY2F0ZSBpbXBsZW1lbnRhdGlvbiBwcm9wZXJ0eSBuYW1lOiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZQ0KK0FTTV80MDA3PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOiBbQVNNNDAwMTAsQVNNNjAwNDBdIEVycm9yOiBwcm9wZXJ0eSBoYXMgYm90aCBAdHlwZSBhbmQgQGVsZW1lbnQgYXR0cmlidXRlIHZhbHVlcyAtIHByb3BlcnR5TmFtZQ0KK0FTTV80MDA4PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNDAwMTEsQVNNNjAwMzRdIE5vIHZhbHVlIGNvbmZpZ3VyZWQgb24gYSBtdXN0U3VwcGx5IHByb3BlcnR5OiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBQcm9wZXJ0eSA9IHByb3BlcnR5TmFtZQ0KK0FTTV81MDA0PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q2xpZW50XSAtIFtBU001MDAyMl0gVG9vIG1hbnkgdGFyZ2V0cyBvbiByZWZlcmVuY2U6IHJlZmVyZW5jZTENCitBU01fNTAwNT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdF9BU01fNTAwNUNvbXBvbmVudDFdIC0gW0FTTTQwMDAzLEFTTTYwMDAzLEpDQTkwMDQ1XSBEdXBsaWNhdGUgaW1wbGVtZW50YXRpb24gc2VydmljZSBuYW1lOiBDb21wb25lbnQgPSBUZXN0X0FTTV81MDA1Q29tcG9uZW50MSBTZXJ2aWNlID0gU2VydmljZTENCitBU01fNTAwNj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gQ29tcG9uZW50IHR5cGUgc2VydmljZSBub3QgZm91bmQgZm9yIGNvbXBvbmVudCBzZXJ2aWNlIChtaXNzaW5nIEBSZW1vdGFibGUgYW5ub3RhdGlvbj8pOiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBTZXJ2aWNlID0gSW52YWxpZE5hbWUNCitBU01fNTAwNz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdF9BU01fNTAwN0NvbXBvbmVudDFdIC0gW0FTTTQwMDA0LEFTTTUwMDA3LEFTTTYwMDA2XSBEdXBsaWNhdGUgaW1wbGVtZW50YXRpb24gcmVmZXJlbmNlIG5hbWU6IENvbXBvbmVudCA9IFRlc3RfQVNNXzUwMDdDb21wb25lbnQxIFJlZmVyZW5jZSA9IFJlZmVyZW5jZTENCitBU01fNTAwOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gW0FTTTUwMDA4XSBDb21wb25lbnQgdHlwZSByZWZlcmVuY2Ugbm90IGZvdW5kIGZvciBjb21wb25lbnQgcmVmZXJlbmNlOiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBSZWZlcmVuY2UgPSBJbnZhbGlkTmFtZQ0KK0FTTV81MDA5PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfV0gLSBbQVNNNTAwMDFdIER1cGxpY2F0ZSBjb21wb25lbnQgbmFtZTogQ29tcG9zaXRlID0ge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0gQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDENCitBU01fNTAxMD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gW0FTTTUwMDA0LEpDQTMwMDAyLEpDSTgwMDAxXSBDb21wb25lbnQgc2VydmljZSBpbnRlcmZhY2UgaW5jb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gc2VydmljZSBpbnRlcmZhY2U6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFNlcnZpY2UgPSBTZXJ2aWNlMQ0KK0FTTV81MDE0PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNTAwMDldIENvbXBvbmVudCByZWZlcmVuY2UgbXVsdGlwbGljaXR5IGluY29tcGF0aWJsZSB3aXRoIHJlZmVyZW5jZSBtdWx0aXBsaWNpdHk6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFJlZmVyZW5jZSA9IFJlZmVyZW5jZTENCitBU01fNTAyMz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGUxMSwgQ29tcG9uZW50OiBDb21wb3NpdGUxMUNvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGU0LCBDb21wb25lbnQ6IENvbXBvc2l0ZTRDb21wb25lbnQxXSAtIFtBU001MDAyMl0gVG9vIG1hbnkgdGFyZ2V0cyBvbiByZWZlcmVuY2U6IHJlZmVyZW5jZTENCitBU01fNTAyND1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDEsIFJlZmVyZW5jZTogUmVmZXJlbmNlMV0gLSBbQVNNNTAwMjZdIENvbXBvc2l0ZSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSBDb21wb25lbnQgVGVzdENvbXBvbmVudDEgUmVmZXJlbmNlIFJlZmVyZW5jZTEgbXVzdCBub3Qgc3BlY2lmeSBlbmRwb2ludHMgdXNpbmcgYm90aCB0YXJnZXQgYXR0cmlidXRlIGFuZCB3aXRoIGEgYmluZGluZyBjaGlsZCBlbGVtZW50DQorQVNNXzUwMjc9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIER1cGxpY2F0ZSBjb21wb25lbnQgcHJvcGVydHkgbmFtZTogQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDEgUHJvcGVydHkgPSBzZXJ2aWNlTmFtZQ0KK0FTTV81MDI4PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNTAwMzFdIFByb3BlcnR5IG5vdCBmb3VuZCBmb3IgY29tcG9uZW50IHByb3BlcnR5OiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBQcm9wZXJ0eSA9IHJhbmRvbU5hbWUNCitBU01fNTAyOT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gW0FTTTUwMDMyXSBUaGUgcHJvcGVydHkgY29tcG9uZW50IFRlc3RDb21wb25lbnQxIHByb3BlcnR5IGNvbXBsZXhUeXBlIGhhcyBtYW55IHZhbHVlcyBidXQgaXRzICJtYW55IiBhdHRyaWJ1dGUgaXMgc2V0IHRvIGZhbHNlDQorQVNNXzUwMzA9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEFTTV81MDMwLCBBcnRpZmFjdDogVGVzdF9BU01fNTAzMC5jb21wb3NpdGVdIC0gQVNNNTAwMzM6IHZhbHVlIGF0dHJpYnV0ZSBleGlzdHMgZm9yIHRoZSBwcm9wZXJ0eSBlbGVtZW50DQorQVNNXzUwMzU9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb246IFtBU000MDAxMCxBU002MDA0MF0gRXJyb3I6IHByb3BlcnR5IGhhcyBib3RoIEB0eXBlIGFuZCBAZWxlbWVudCBhdHRyaWJ1dGUgdmFsdWVzIC0gY29tcGxleFR5cGUNCitBU01fNTAzNj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9BU01fNTAzNkNvbXBvbmVudDFdIC0gW0FTTV81MDM2XSBUaGUgcHJvcGVydHkgY29tcG9uZW50IFRFU1RfQVNNXzUwMzZDb21wb25lbnQxIHByb3BlcnR5IGNvbXBsZXhUeXBlIGhhcyBYU0QgdHlwZSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9Q29tcGxleFR5cGUyIHdoaWxlIGl0cyBjb21wb25lbnQgdHlwZSBwcm9wZXJ0eSBoYXMgdGhlIFhTRCB0eXBlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31Db21wbGV4VHlwZTENCitBU01fNTAzNz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9BU01fNTAzN0NvbXBvbmVudDFdIC0gW0FTTTUwMDMxXSBQcm9wZXJ0eSBub3QgZm91bmQgZm9yIGNvbXBvbmVudCBwcm9wZXJ0eTogQ29tcG9uZW50ID0gVEVTVF9BU01fNTAzN0NvbXBvbmVudDEgUHJvcGVydHkgPSBib2d1c05hbWUNCitBU01fNTAzOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9BU01fNTAzOENvbXBvbmVudDFdIC0gW0FTTTUwMDI3XSBUaGUgcHJvcGVydHkgc2VydmljZURhdGExIG9uIGNvbXBvbmVudCBURVNUX0FTTV81MDM4Q29tcG9uZW50MSBoYXMgYSB2YWx1ZSB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgc2ltcGxlIHR5cGUge2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hfWZsb2F0IHdpdGggd2hpY2ggaXQgaXMgYXNzb2NpYXRlZA0KK0FTTV81MDM5PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV81MDM5Q29tcG9uZW50MV0gLSBbQVNNNTAwMzhdIFRoZSBwcm9wZXJ0eSBjb21wbGV4VHlwZSBvbiBjb21wb25lbnQgVEVTVF9BU01fNTAzOUNvbXBvbmVudDEgaGFzIGEgdmFsdWUgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGNvbXBsZXggdHlwZSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9Q29tcGxleFR5cGUxIHdpdGggd2hpY2ggaXQgaXMgYXNzb2NpYXRlZC4gVmFsaWRhdGlvbiByZXBvcnRlZCBjdmMtY29tcGxleC10eXBlLjIuNC5kOiBJbnZhbGlkIGNvbnRlbnQgd2FzIGZvdW5kIHN0YXJ0aW5nIHdpdGggZWxlbWVudCAndGVzdDp0aGlyZERhdGEnLiBObyBjaGlsZCBlbGVtZW50IGlzIGV4cGVjdGVkIGF0IHRoaXMgcG9pbnQuDQorQVNNXzUwNDA9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfQVNNXzUwNDBDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlNzRdIC0gW0FTTTUwMDQyXSBDb21wb3NpdGUgcmVmZXJlbmNlIHByb21vdGVzIGNvbXBvbmVudCByZWZlcmVuY2Ugd2l0aCAxLi4xIG11bHRpcGxpY2l0eSBhbmQgbm9uT3ZlcnJpZGFibGUgZmxhZyBzZXQgdHJ1ZTogQ29tcG9zaXRlID0gVGVzdENvbXBvc2l0ZTc0LmNvbXBvc2l0ZSBDb21wb3NpdGUgcmVmZXJlbmNlID0gUmVmZXJlbmNlMSBDb21wb25lbnQgcmVmZXJlbmNlID0gUmVmZXJlbmNlMQ0KK0FTTV82MDAxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fNjAwMSwgQXJ0aWZhY3Q6IFRlc3REdXBsaWNhdGUxLmNvbXBvc2l0ZV0gLSBbQVNNXzYwMDFdIE1vcmUgdGhhbiBvbmUgY29tcG9zaXRlIHdpdGggdGhlIHNhbWUgbmFtZSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9RHVwbGljYXRlQ29tcG9zaXRlIGZvdW5kIGluIGNvbnRyaWJ1dGlvbg0KK0FTTV82MDAyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNDAwMDMsQVNNNjAwMDMsSkNBOTAwNDVdIER1cGxpY2F0ZSBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlIG5hbWU6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFNlcnZpY2UgPSBTZXJ2aWNlMQ0KK0FTTV82MDAzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTE3XSAtIFtBU002MDAwNCxBU002MDAzMl0gUHJvbW90ZWQgY29tcG9uZW50IHNlcnZpY2Ugbm90IGZvdW5kOiBDb21wb3NpdGUgPSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTE3IFNlcnZpY2UgPSBTcHVyaW91c0NvbXBvbmVudC9TcHVyaW91c1NlcnZpY2UNCitBU01fNjAwNT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gW0FTTTQwMDA0LEFTTTUwMDA3LEFTTTYwMDA2XSBEdXBsaWNhdGUgaW1wbGVtZW50YXRpb24gcmVmZXJlbmNlIG5hbWU6IENvbXBvbmVudCA9IFRlc3RDb21wb25lbnQxIFJlZmVyZW5jZSA9IFJlZmVyZW5jZTENCitBU01fNjAwNj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGUyMF0gLSBbQVNNNjAwMDddIFByb21vdGVkIGNvbXBvbmVudCByZWZlcmVuY2Ugbm90IGZvdW5kOiBDb21wb3NpdGUgPSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTIwIFJlZmVyZW5jZSA9IENvbXBvc2l0ZTIwQ29tcG9uZW50ei9SZWZlcmVuY2UxDQorQVNNXzYwMDg9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfQVNNXzYwMDhDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlMjJdIC0gW0FTTTYwMDA4LEFTTTYwMDEzXSBJbnRlcmZhY2Ugb2YgY29tcG9zaXRlIHJlZmVyZW5jZSBSZWZlcmVuY2UxIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBpbnRlcmZhY2UgZGVjbGFyZWQgYnkgcHJvbW90ZWQgY29tcG9uZW50IHJlZmVyZW5jZS4gT3BlcmF0aW9uIG9wZXJhdGlvbjIgbm90IGZvdW5kIG9uIHRhcmdldA0KK0FTTV82MDEyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV82MDEyVGVzdENvbXBvbmVudDFdIC0gW0FTTTQwMDA1LEFTTTYwMDE0XSBEdXBsaWNhdGUgaW1wbGVtZW50YXRpb24gcHJvcGVydHkgbmFtZTogQ29tcG9uZW50ID0gVEVTVF9BU01fNjAxMlRlc3RDb21wb25lbnQxIFByb3BlcnR5ID0gcHJvcGVydHlOYW1lDQorQVNNXzYwMTY9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlMzAsIENvbXBvbmVudDogVGVzdENvbXBvbmVudDEsIFJlZmVyZW5jZTogUmVmZXJlbmNlMV0gLSBbQVNNNjAwMjhdIE5vIHRhcmdldCBzZXJ2aWNlcyBmb3VuZCBmb3IgdGhlIGNvbXBvbmVudCByZWZlcmVuY2UgdG8gYmUgYXV0b3dpcmVkOiBSZWZlcmVuY2UxDQorQVNNXzYwMjA9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxLCBSZWZlcmVuY2U6IFJlZmVyZW5jZTFdIC0gW0FTTTYwMDI4XSBObyB0YXJnZXQgc2VydmljZXMgZm91bmQgZm9yIHRoZSBjb21wb25lbnQgcmVmZXJlbmNlIHRvIGJlIGF1dG93aXJlZDogUmVmZXJlbmNlMQ0KK0FTTV82MDIxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV82MDIxVGVzdENvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGUzMV0gLSBbQVNNNjAwMDQsQVNNNjAwMzJdIFByb21vdGVkIGNvbXBvbmVudCBzZXJ2aWNlIG5vdCBmb3VuZDogQ29tcG9zaXRlID0ge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGUzMSBTZXJ2aWNlID0gTm90X0FfVVJJX29mX2FfQ29tcG9uZW50DQorQVNNXzYwMjI9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlMzIsIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gW0FTTTYwMDMzXSBObyB0YXJnZXRzIGZvciByZWZlcmVuY2U6IENvbXBvc2l0ZSA9IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlMzIgUmVmZXJlbmNlID0gUmVmZXJlbmNlMQ0KK0FTTV82MDIzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MV0gLSBbQVNNNDAwMTEsQVNNNjAwMzRdIE5vIHZhbHVlIGNvbmZpZ3VyZWQgb24gYSBtdXN0U3VwcGx5IHByb3BlcnR5OiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBQcm9wZXJ0eSA9IHNpbXBsZVR5cGUNCitBU01fNjAyND1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gW0FTTTYwMDMwLEpDSTUwMDA0LEpDSTgwMDAxXSBDb21wb25lbnQgaW1wbGVtZW50YXRpb24gbm90IHJlc29sdmVkOiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBVcmkgPSBUZXN0Q29tcG9uZW50MQ0KK0FTTV82MDI1PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfV0gLSBbQVNNNTAwMDFdIER1cGxpY2F0ZSBjb21wb25lbnQgbmFtZTogQ29tcG9zaXRlID0ge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0gQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDENCitBU01fNjAyOD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjogW0FTTTQwMDEwLEFTTTYwMDQwXSBFcnJvcjogcHJvcGVydHkgaGFzIGJvdGggQHR5cGUgYW5kIEBlbGVtZW50IGF0dHJpYnV0ZSB2YWx1ZXMgLSBJbnZhbGlkUHJvcGVydHkNCitBU01fNjAyOT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogW0FTTTYwMDQxXSBFcnJvcjogQ29tcG9zaXRlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0FTTV82MDI5IGNhbiBvbmx5IGluY2x1ZGUgYW5vdGhlciBjb21wb3NpdGUgd2l0aCB0aGUgaWRlbnRpY2FsIEBsb2NhbCBhdHRyaWJ1dGUgdmFsdWUNCitBU01fNjAzMD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogW0FTTTYwMDQyXSBFcnJvcjogQ29tcG9zaXRlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31JbnZhbGlkX2NvbXBvc2l0ZV9uYW1lIGlzIG5vdCBhIHZhbGlkIGNvbXBvc2l0ZSB3aXRoaW4gdGhlIGRvbWFpbg0KK0FTTV82MDMxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTM5XSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9c3VzcGVuZHNUcmFuc2FjdGlvbiBhbmQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1wcm9wYWdhdGVzVHJhbnNhY3Rpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KK0FTTV82MDMyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTQwXSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9c3VzcGVuZHNUcmFuc2FjdGlvbiBhbmQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1wcm9wYWdhdGVzVHJhbnNhY3Rpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KK0FTTV82MDMzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTQxXSAtIFtBU002MDAxMV0gQ29tcG9zaXRlIHJlZmVyZW5jZSBtdWx0aXBsaWNpdHkgaW5jb21wYXRpYmxlIHdpdGggY29tcG9uZW50IHJlZmVyZW5jZSBtdWx0aXBsaWNpdHk6IENvbXBvc2l0ZSA9IFRlc3RDb21wb3NpdGU0MS5jb21wb3NpdGUgQ29tcG9zaXRlIHJlZmVyZW5jZSA9IFJlZmVyZW5jZTEgQ29tcG9uZW50IHJlZmVyZW5jZSA9IFJlZmVyZW5jZTENCitBU01fNjAzNj1UZXN0IHNlcnZpY2UgZ290IGFuIGV4Y2VwdGlvbiBkdXJpbmcgZXhlY3V0aW9uOiBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbiBVbmFibGUgdG8gYmluZCBbXSAtIE5vIGVuZHBvaW50cyBmb3VuZCBpbiB0aGUgZG9tYWluIHRoYXQgbWF0Y2ggdGhlIHJlZmVyZW5jZSAoQCoqKilFbmRwb2ludFJlZmVyZW5jZTogIFVSSSA9IFRlc3RDbGllbnQjcmVmZXJlbmNlKHJlZmVyZW5jZTEpIFdJUkVEX1RBUkdFVF9OT1RfRk9VTkQgVGFyZ2V0ID0gKEAqKiopRW5kcG9pbnQ6ICBVUkkgPSBURVNUX0FTTV82MDM2Q29tcG9uZW50MSNzZXJ2aWNlKFNlcnZpY2VaKSBbVW5yZXNvbHZlZF0NCitBU01fNjAzOT1UZXN0IHNlcnZpY2UgZ290IGFuIGV4Y2VwdGlvbiBkdXJpbmcgZXhlY3V0aW9uOiBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbiBVbmFibGUgdG8gYmluZCBbXSAtIE5vIGVuZHBvaW50cyBmb3VuZCBpbiB0aGUgZG9tYWluIHRoYXQgbWF0Y2ggdGhlIHJlZmVyZW5jZSAoQCoqKilFbmRwb2ludFJlZmVyZW5jZTogIFVSSSA9IFRlc3RDbGllbnQjcmVmZXJlbmNlKHJlZmVyZW5jZTEpIFdJUkVEX1RBUkdFVF9OT1RfRk9VTkQgVGFyZ2V0ID0gKEAqKiopRW5kcG9pbnQ6ICBVUkkgPSBURVNUX0FTTV82MDM5Q29tcG9uZW50MSNzZXJ2aWNlLWJpbmRpbmcoU2VydmljZTEvaGFycnkpIFtVbnJlc29sdmVkXSANCitBU01fODAwMT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PdmVybG9hZGVkT3BlcmF0aW9uRXhjZXB0aW9uOiBbSkNBMjAwMDFdIENhbm5vdCBvdmVybG9hZCBvcGVyYXRpb24gb3BlcmF0aW9uMSBvbiBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2UzIGFzIGl0IGlzIGEgQFJlbW90YWJsZSBpbnRlcmZhY2UNCitBU01fODAwND1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnZhbGlkQ2FsbGJhY2tFeGNlcHRpb246IENhbGxiYWNrIG9yZy5vYXNpc29wZW4uc2NhLnRlc3QuU2VydmljZTZDYWxsYmFjayBtdXN0IGJlIHJlbW90YWJsZSBvbiByZW1vdGFibGUgaW50ZXJmYWNlIG9yZy5vYXNpc29wZW4uc2NhLnRlc3QuU2VydmljZTYNCitBU01fODAwNT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnZhbGlkQ2FsbGJhY2tFeGNlcHRpb246IENhbGxiYWNrb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5TZXJ2aWNlN0NhbGxiYWNrIG11c3Qgbm90IGJlIHJlbW90YWJsZSBvbiBsb2NhbCBpbnRlcmZhY2Ugb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5TZXJ2aWNlNw0KK0FTTV84MDA2PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fODAwNiwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9BU01fODAwNl0gLSBUaGUgaW50ZXJmYWNlLndzZGwgZWxlbWVudCBoYXMgYSBmb3J3YXJkIGludGVyZmFjZSB3aXRoIGEgY2FsbGJhY2sgZGVjbGFyZWQgaW4gdGhlIFdTREwge2h0dHA6Ly90ZXN0LnNjYS5vYXNpc29wZW4ub3JnL31TZXJ2aWNlOUNhbGxiYWNrIGFuZCBhIGNhbGxiYWNrIGludGVyZmFjZSBhbHNvIGRlY2xhcmVkIHVzaW5nIHRoZSBjYWxsYmFja0ludGVyZmFjZSBhdHRyaWJ1dGUge2h0dHA6Ly90ZXN0LnNjYS5vYXNpc29wZW4ub3JnL31TZXJ2aWNlOENhbGxiYWNrIGJ1dCB0aGUgY2FsbGJhY2sgaW50ZXJmYWNlcyBhcmUgbm90IGVxdWFsLg0KK0FTTV84MDA3PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50Ml0gLSBbQVNNNTAwMDQsSkNBMzAwMDIsSkNJODAwMDFdIENvbXBvbmVudCBzZXJ2aWNlIGludGVyZmFjZSBpbmNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlIGludGVyZmFjZTogQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDIgU2VydmljZSA9IFNlcnZpY2UxDQorQVNNXzgwMDg9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIFtKQ0EzMDAwMSxKQ0EzMDAwMixKQ0EzMDAwMyxKQ0E5MDA0Nl0gQ29tcG9uZW50IHJlZmVyZW5jZSBpbnRlcmZhY2UgaW5jb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gcmVmZXJlbmNlIGludGVyZmFjZTogQ29tcG9uZW50ID0gVGVzdENvbXBvbmVudDEgUmVmZXJlbmNlID0gUmVmZXJlbmNlMQ0KK0FTTV84MDA5PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV84MDA5Q29tcG9uZW50MV0gLSBbSkNBMzAwMDEsSkNBMzAwMDIsSkNBMzAwMDMsSkNBOTAwNDZdIENvbXBvbmVudCByZWZlcmVuY2UgaW50ZXJmYWNlIGluY29tcGF0aWJsZSB3aXRoIGltcGxlbWVudGF0aW9uIHJlZmVyZW5jZSBpbnRlcmZhY2U6IENvbXBvbmVudCA9IFRFU1RfQVNNXzgwMDlDb21wb25lbnQxIFJlZmVyZW5jZSA9IFJlZmVyZW5jZTENCitBU01fODAxMD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9BU01fODAxMENvbXBvbmVudDIsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGU2M10gLSBJbnRlcmZhY2Ugb2YgY29tcG9zaXRlIHNlcnZpY2UgU2VydmljZTEgbXVzdCBiZSBzdWJzZXQgb2YgdGhlIGludGVyZmFjZSBkZWNsYXJlZCBieSBwcm9tb3RlZCBjb21wb25lbnQgc2VydmljZS4gQ2FsbGJhY2sgb3BlcmF0aW9uIG5vdCBmb3VuZCBvbiB0YXJnZXQNCitBU01fODAxMT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGU2Ml0gLSBbQVNNNjAwMDgsQVNNNjAwMTNdIEludGVyZmFjZSBvZiBjb21wb3NpdGUgcmVmZXJlbmNlIFJlZmVyZW5jZTEgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGludGVyZmFjZSBkZWNsYXJlZCBieSBwcm9tb3RlZCBjb21wb25lbnQgcmVmZXJlbmNlLiBDYWxsYmFjayBvcGVyYXRpb24gbm90IGZvdW5kIG9uIHRhcmdldA0KK0FTTV84MDEyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV84MDEyQ29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTY0XSAtIFtBU002MDAwOCxBU002MDAxM10gSW50ZXJmYWNlIG9mIGNvbXBvc2l0ZSByZWZlcmVuY2UgUmVmZXJlbmNlMSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgaW50ZXJmYWNlIGRlY2xhcmVkIGJ5IHByb21vdGVkIGNvbXBvbmVudCByZWZlcmVuY2UuDQorQVNNXzgwMTQ9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQyLCBTZXJ2aWNlOiBTZXJ2aWNlMV0gLSBbUE9MNDAwMDksQVNNNjAwMDksQVNNNjAwMTAsSkNBNzAwMDEsSkNBNzAwMDNdIEludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9Sm9lIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfWNvbmZpZGVudGlhbGl0eS50cmFuc3BvcnQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KK0FTTV84MDE3PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV84MDE3Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZTcyXSAtIEludGVyZmFjZSBvZiBjb21wb3NpdGUgc2VydmljZSBTZXJ2aWNlMWEgbXVzdCBiZSBzdWJzZXQgb2YgdGhlIGludGVyZmFjZSBkZWNsYXJlZCBieSBwcm9tb3RlZCBjb21wb25lbnQgc2VydmljZS4gQ2FsbGJhY2sgaW50ZXJmYWNlIGRvZXNuJ3QgbWF0Y2gNCitBU01fODAxOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENsaWVudF0gLSBbQVNNNTAwMDQsSkNBMzAwMDIsSkNJODAwMDFdIENvbXBvbmVudCBzZXJ2aWNlIGludGVyZmFjZSBpbmNvbXBhdGlibGUgd2l0aCBpbXBsZW1lbnRhdGlvbiBzZXJ2aWNlIGludGVyZmFjZTogQ29tcG9uZW50ID0gVGVzdENsaWVudCBTZXJ2aWNlID0gVGVzdEludm9jYXRpb24NCitBU01fODAxOT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQVNNXzgwMTksIEFydGlmYWN0OiBUZXN0X0FTTV84MDE5LmNvbXBvc2l0ZV0gLSBUaGUgaW50ZXJmYWNlLndzZGwgaW50ZXJmYWNlIHtodHRwOi8vdGVzdC5zY2Eub2FzaXNvcGVuLm9yZy99U2VydmljZTEgZWxlbWVudCBjYW4gb25seSBoYXZlIGEgcmVtb3RhYmxlIGF0dHJpYnV0ZSB3aXRoIHRoZSB2YWx1ZSAidHJ1ZSIgYXMgV1NETCBpbnRlcmZhY2UgYXJlIGFzc3VtZWQgdG8gYmUgcmVtb3RhYmxlIGJ5IGRlZmF1bHQuIFRoZSB2YWx1ZSB0aGF0IHdhcyBmb3VuZCBpczogZmFsc2UuDQorQVNNXzkwMDI9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDb21wb25lbnQxXSAtIE11bHRpcGxlIGJpbmRpbmdzIHdpdGggdGhlIHNhbWUgbmFtZSBmb3IgYSBzZXJ2aWNlOiBTZXJ2aWNlID0gU2VydmljZTEgQmluZGluZyBuYW1lID0gRnJlZA0KK0FTTV85MDA1PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0FTTV85MDA1Q29tcG9uZW50MV0gLSBbQVNNOTAwMDVdIFRoZSBTQ0EgYmluZGluZyBTZXJ2aWNlMSBvbiBjb21wb25lbnQgVEVTVF9BU01fOTAwNUNvbXBvbmVudDEgc2VydmljZSBTZXJ2aWNlMSBzaG91bGQgbm90IGhhdmUgYSBVUkkgYW5kIHRoZSBVUkkgaXMgY3VycmVudGx5IHNldCB0byBodHRwOi8vZXhhbXBsZS9iYXINCitBU01fMTAwMDE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEFTTV8xMDAwMSwgQXJ0aWZhY3Q6IE1FVEEtSU5GL2RlZmluaXRpb25zLnhtbCwgRGVmaW5pdGlvbnM6IGphcjpmaWxlOioqKkFTTV8xMDAwMSoqKi56aXAhL01FVEEtSU5GL2RlZmluaXRpb25zLnhtbF0gLSBbQVNNMTAwMDEsUE9MMzAwMDJdIER1cGxpY2F0ZSBpbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfUZyZWQgZm91bmQgaW4gZG9tYWluDQorQVNNXzEwMDAzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTAwMDMsIEFydGlmYWN0OiBNRVRBLUlORi9kZWZpbml0aW9ucy54bWwsIERlZmluaXRpb25zOiBqYXI6ZmlsZToqKipBU01fMTAwMDMqKiouemlwIS9NRVRBLUlORi9kZWZpbml0aW9ucy54bWxdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9BU01fMTAwMDMuY29tcG9zaXRlICxsaW5lID0gKioqLCBjb2x1bW4gPSAqKiosIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjIuNC5hOiBJbnZhbGlkIGNvbnRlbnQgd2FzIGZvdW5kIHN0YXJ0aW5nIHdpdGggZWxlbWVudCAnY29tcG9uZW50Jy4gT25lIG9mICd7Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6ZG9jdW1lbnRhdGlvbiwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6aW50ZW50LCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpwb2xpY3lTZXQsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmJpbmRpbmdUeXBlLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjppbXBsZW1lbnRhdGlvblR5cGUsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmV4dGVybmFsQXR0YWNobWVudCwgV0NbIyNvdGhlcjoiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIl19JyBpcyBleHBlY3RlZC4NCitBU01fMTIwMDM9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IEludmFsaWQgaW50ZXJmYWNlIHdoZW4gcmVzb2x2aW5nDQorQVNNXzEyMDA3PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDMyfVRlc3RDb21wb3NpdGU1LCBDb21wb25lbnQ6IFRlc3RDb21wb3NpdGU1VGVzdENvbXBvbmVudDFdIC0gW0FTTTUwMDA0LEpDQTMwMDAyLEpDSTgwMDAxXSBDb21wb25lbnQgc2VydmljZSBpbnRlcmZhY2UgaW5jb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gc2VydmljZSBpbnRlcmZhY2U6IENvbXBvbmVudCA9IFRlc3RDb21wb3NpdGU1VGVzdENvbXBvbmVudDEgU2VydmljZSA9IFNlcnZpY2UxIE9wZXJhdGlvbnMgY2FsbGVkIG9wZXJhdGlvbjIgYXJlIG5vdCBjb21wYXRpYmxlIE9wZXJhdGlvbiBhcmd1bWVudCB0eXBlcyBzb3VyY2UgPSB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9aW50IHRhcmdldCA9IHtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYX1zdHJpbmcgZG9uJ3QgbWF0Y2ggZm9yIG91dHB1dCB0eXBlc3x8fA0KK0FTTV8xMjAwOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9BU01fMTIwMDhUZXN0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDMyfVRlc3RDb21wb3NpdGU1LCBDb21wb25lbnQ6IFRlc3RDb21wb3NpdGU1VGVzdENvbXBvbmVudDFdIC0gW0FTTTUwMDA0LEpDQTMwMDAyLEpDSTgwMDAxXSBDb21wb25lbnQgc2VydmljZSBpbnRlcmZhY2UgaW5jb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gc2VydmljZSBpbnRlcmZhY2U6IENvbXBvbmVudCA9IFRlc3RDb21wb3NpdGU1VGVzdENvbXBvbmVudDEgU2VydmljZSA9IFNlcnZpY2UxIE9wZXJhdGlvbnMgY2FsbGVkIG9wZXJhdGlvbjIgYXJlIG5vdCBjb21wYXRpYmxlIE9wZXJhdGlvbiBhcmd1bWVudCB0eXBlcyBzb3VyY2UgPSB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9aW50IHRhcmdldCA9IHtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYX1zdHJpbmcgZG9uJ3QgbWF0Y2ggZm9yIG91dHB1dCB0eXBlc3x8fA0KK0FTTV8xMjAxMT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENvbXBvbmVudDFdIC0gW0FTTTYwMDMwLEpDSTUwMDA0LEpDSTgwMDAxXSBDb21wb25lbnQgaW1wbGVtZW50YXRpb24gbm90IHJlc29sdmVkOiBDb21wb25lbnQgPSBUZXN0Q29tcG9uZW50MSBVcmkgPSBUZXN0Q29tcG9uZW50MQ0KK0FTTV8xMjAxMj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQVNNXzEyMDEyLCBBcnRpZmFjdDogTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWxdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogamFyOmZpbGU6KioqQVNNXzEyMDEyKioqLnppcCEvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgLGxpbmUgPSAqKiosIGNvbHVtbiA9ICoqKiwgTWVzc2FnZSA9IGN2Yy1jb21wbGV4LXR5cGUuMi40LmE6IEludmFsaWQgY29udGVudCB3YXMgZm91bmQgc3RhcnRpbmcgd2l0aCBlbGVtZW50ICdjb21wb25lbnQnLiBPbmUgb2YgJ3siaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpkb2N1bWVudGF0aW9uLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpkZXBsb3lhYmxlLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjppbXBvcnRCYXNlLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpleHBvcnRCYXNlLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpleHRlbnNpb25zfScgaXMgZXhwZWN0ZWQuDQorQVNNXzEzMDAxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTMwMDEsIEFydGlmYWN0OiBUZXN0X0FTTV8xMzAwMS5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9BU01fMTMwMDEuY29tcG9zaXRlICxsaW5lID0gKioqLCBjb2x1bW4gPSAqKiosIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjIuNC5hOiBJbnZhbGlkIGNvbnRlbnQgd2FzIGZvdW5kIHN0YXJ0aW5nIHdpdGggZWxlbWVudCAnc2V2cmljZScuIE9uZSBvZiAneyJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnNlcnZpY2UsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnJlZmVyZW5jZSwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6cHJvcGVydHksICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnJlcXVpcmVzLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpwb2xpY3lTZXRBdHRhY2htZW50LCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpleHRlbnNpb25zfScgaXMgZXhwZWN0ZWQuDQorQVNNXzEzMDAyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTMwMDIsIEFydGlmYWN0OiBUZXN0X0FTTV8xMzAwMi5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9BU01fMTMwMDIuY29tcG9zaXRlICxsaW5lID0gKioqLCBjb2x1bW4gPSAqKiosIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjIuNC5hOiBJbnZhbGlkIGNvbnRlbnQgd2FzIGZvdW5kIHN0YXJ0aW5nIHdpdGggZWxlbWVudCAnb3BlcmF0aW9uJy4gT25lIG9mICd7Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6YmluZGluZywgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6Y2FsbGJhY2ssICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnJlcXVpcmVzLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpwb2xpY3lTZXRBdHRhY2htZW50LCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpleHRlbnNpb25zfScgaXMgZXhwZWN0ZWQuDQorQVNNXzEzMDAzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTMwMDMsIEFydGlmYWN0OiBUZXN0X0FTTV8xMzAwMy5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9BU01fMTMwMDMuY29tcG9zaXRlICxsaW5lID0gKioqLCBjb2x1bW4gPSAqKiosIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjIuNC5hOiBJbnZhbGlkIGNvbnRlbnQgd2FzIGZvdW5kIHN0YXJ0aW5nIHdpdGggZWxlbWVudCAnYmluZGluZy53cycuIE9uZSBvZiAneyJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmRvY3VtZW50YXRpb24sICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmluY2x1ZGUsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnJlcXVpcmVzLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpwb2xpY3lTZXRBdHRhY2htZW50LCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpzZXJ2aWNlLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpwcm9wZXJ0eSwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6Y29tcG9uZW50LCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpyZWZlcmVuY2UsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOndpcmUsIFdDWyMjb3RoZXI6Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiJdfScgaXMgZXhwZWN0ZWQuDQorQVNNXzEzMDA0PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q2xpZW50LCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q2xpZW50XzAwMDIsIENvbXBvbmVudDogVGVzdENsaWVudF8wMDAyVGVzdENsaWVudF0gLSBbQVNNNDAwMTEsQVNNNjAwMzRdIE5vIHZhbHVlIGNvbmZpZ3VyZWQgb24gYSBtdXN0U3VwcGx5IHByb3BlcnR5DQorQVNNXzEzMDA1PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTMwMDUsIEFydGlmYWN0OiBUZXN0X0FTTV8xMzAwNS5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9BU01fMTMwMDUuY29tcG9zaXRlICxsaW5lID0gKioqLCBjb2x1bW4gPSAqKiosIE1lc3NhZ2UgPSBjdmMtZWx0LjI6IFRoZSB2YWx1ZSBvZiB7YWJzdHJhY3R9IGluIHRoZSBlbGVtZW50IGRlY2xhcmF0aW9uIGZvciAnaW1wbGVtZW50YXRpb24nIG11c3QgYmUgZmFsc2UuDQorQVNNXzEzMDA2PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBBU01fMTMwMDYsIEFydGlmYWN0OiBUZXN0X0FTTV8xMzAwNi5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9BU01fMTMwMDYuY29tcG9zaXRlICxsaW5lID0gKioqLCBjb2x1bW4gPSAqKiosIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjMuMi4yOiBBdHRyaWJ1dGUgJ2NhbGxiYWNrJyBpcyBub3QgYWxsb3dlZCB0byBhcHBlYXIgaW4gZWxlbWVudCAnaW50ZXJmYWNlLmphdmEnLg0KK0FTTV8xMzAwNz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQVNNXzEzMDA3LCBBcnRpZmFjdDogVGVzdF9BU01fMTMwMDcuY29tcG9zaXRlXSAtIFhNTFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yIG9jY3VyZWQgaW46IFRlc3RfQVNNXzEzMDA3LmNvbXBvc2l0ZSAsbGluZSA9ICoqKiwgY29sdW1uID0gKioqLCBNZXNzYWdlID0gY3ZjLWNvbXBsZXgtdHlwZS4zLjIuMjogQXR0cmlidXRlICdtdWxwbGljaXR5JyBpcyBub3QgYWxsb3dlZCB0byBhcHBlYXIgaW4gZWxlbWVudCAncmVmZXJlbmNlJy4NCitBU01fMTMwMDg9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEFTTV8xMzAwOCwgQXJ0aWZhY3Q6IFRlc3RfQVNNXzEzMDA4LmNvbXBvc2l0ZV0gLSBYTUxTY2hlbWEgdmFsaWRhdGlvbiBlcnJvciBvY2N1cmVkIGluOiBUZXN0X0FTTV8xMzAwOC5jb21wb3NpdGUgLGxpbmUgPSAqKiosIGNvbHVtbiA9ICoqKiwgTWVzc2FnZSA9IGN2Yy1jb21wbGV4LXR5cGUuMi40LmE6IEludmFsaWQgY29udGVudCB3YXMgZm91bmQgc3RhcnRpbmcgd2l0aCBlbGVtZW50ICdvcGVyYXRpb24nLiBPbmUgb2YgJ3siaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpkb2N1bWVudGF0aW9uLCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjp3aXJlRm9ybWF0LCAiaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIjpvcGVyYXRpb25TZWxlY3RvciwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6cmVxdWlyZXMsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnBvbGljeVNldEF0dGFjaG1lbnR9JyBpcyBleHBlY3RlZC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy1qbXMvcG9tLnhtbCBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwODgyOTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy1qbXMvcG9tLnhtbApAQCAtMCwwICsxLDEzMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbXBsaWFuY2UtdGVzdHM8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb21wbGlhbmNlLXRlc3QtYmluZGluZy1qbXM8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNwZWNpZmljYXRpb24gQ29tcGxpYW5jZSBUZXN0cyBCaW5kaW5nIEpNUzwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8IS0tIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gZ2V0IHRoZSBtb2R1bGUgd29ya2luZyBpbiBFY2xpcHNlIHdoaWNoIGRvZXNuJ3QgcGljayBpdCB1cCBmcm9tIHRoZSBkZXBlbmRlbmN5IHBsdWdpbiB1bnBhY2sgLS0+CisgICAgICAgICAgICA8IS0tIFRoZSBkZXBlbmRlbmN5IHBsdWdpbiB1bnBhY2sgaXMgbmVlZGVkIGFzIHByZXNlbnRseSB0aGUgc3VyZWZpcmUgcGx1Z2luIHdvbnQgcnVuIHRlc3RzIGluIGEgZGVwZW5kZW5jeSBqYXIgLS0+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1vdGVzdHMtc2NhLWptcy10ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgIDwhLS0gVGhpcyBpcyBuZWVkIHdoZW4gcnVubmluZyB3aXRoIFN1biBKREsgd2hpY2ggZ2V0cyBhbiB1bnN1cHBvcnRlZCBvcGVyYXRpb24gZXhjZXB0aW9uIGNyZWF0aW5nIGFuIFhNTFN0cmVhbVJlYWRlciBmcm9tIGEgRE9NU291cmNlCisgICAgICAgICAgICAgd2hlbiBUdXNjYW55IGlzIHdyaXRpbmcgYSBwcm9wZXJ0eSB2YWx1ZSAgLS0+CisgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5jb2RlaGF1cy53b29kc3RveDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndzdHgtYXNsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+My4yLjQ8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zdGF4PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGF4LWFwaTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgICAgICAgIDwvZXhjbHVzaW9ucz4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuNTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgPGJ1aWxkPgorICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgorICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICA8cGx1Z2luPgorICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPgorICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tc3VyZWZpcmUtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgIDxleGNsdWRlcz4KKyAgICAgICAgICAgICAgPCEtLSBleGNsdWRlPioqL1BPSk9fODAxMV9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlIC0tPgorICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisKKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICA8aWQ+dW5wYWNrPC9pZD4KKyAgICAgICAgICAgIDxwaGFzZT50ZXN0LWNvbXBpbGU8L3BoYXNlPgorICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICA8Z29hbD51bnBhY2s8L2dvYWw+CisgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4KKyAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4KKyAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLWptcy1jb250cmlidXRpb25zPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+CisgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9vYXNpcy1jb250cmlidXRpb25zPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1vdGVzdHMtc2NhLWptcy10ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgPHR5cGU+amFyPC90eXBlPgorICAgICAgICAgICAgICAgICAgIDxleGNsdWRlcz5jb21tb25zLWxvZ2dpbmcucHJvcGVydGllcyxvYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcyx0dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllczwvZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS90ZXN0LWNsYXNzZXM8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbXM+CisgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgIDwvcGx1Z2luPgorCisgICAgPC9wbHVnaW5zPgorICA8L2J1aWxkPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctam1zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9vdGVzdC9UdXNjYW55UnVudGltZUJyaWRnZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy1qbXMvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctam1zL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzMyOTZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctam1zL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpAQCAtMCwwICsxLDMwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4gCisKKyMgT0FTSVMgU0NBIEFzc2VtYmx5IHRlc3QgcHJvcGVydGllcworIyBUaGUgaW1wbGVtZW50YXRpb24gdHlwZSB0byB1c2UgZm9yIEFzc2VtYmx5IHRlc3Qgc3VpdGUKKyMgb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5sYW5nPUJQRUwKK29yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1KYXZhCisKKyMgVGhlIGNsYXNzIHRvIHVzZSBhcyB0aGUgUnVudGltZSBCcmlkZ2UgZm9yIHRoZSBTQ0EgcnVudGltZSB1bmRlciB0ZXN0Cisjb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlPU0dpUnVudGltZUJyaWRnZQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlSdW50aW1lQnJpZGdlCisKKyMgVGhlIGxvY2F0aW9uIG9mIHRoZSBjb250cmlidXRpb25zIGZvciB0aGUgdGVzdCBzdWl0ZQorIyAlMSByZXByZXNlbnRzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5hbWUgb2YgZWFjaCBjb250cmlidXRpb24gaW50byB0aGUgbG9jYXRpb24gVVJJCitvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LmNvbnRyaWJ1dGlvbi5sb2NhdGlvbj10YXJnZXQvb2FzaXMtY29udHJpYnV0aW9ucy8lMS90YXJnZXQvJTEuemlwCisKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy1qbXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwNDc3N2EKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy1qbXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNDggQEAKKyMgQ29weXJpZ2h0KEMpIE9BU0lTKFIpIDIwMTAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIE9BU0lTIHRyYWRlbWFyaywgSVBSIGFuZCBvdGhlciBwb2xpY2llcyBhcHBseS4gICAgCisjCisjIERldGFpbGVkIFR1c2NhbnkgZXJyb3IgbWVzc2FnZXMgZm9yIFNDQSBKTVMgQmluZGluZyB0ZXN0Y2FzZXMsIHdoZXJlIHRoZSB0ZXN0Y2FzZSBjYXVzZXMgYW4KKyMgZXhjZXB0aW9uIGVpdGhlciBpbiBpbml0aWFsaXphdGlvbiBvciBhdCBydW50aW1lCisjCitCSk1fMzAwMT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQkpNXzMwMDEsIEFydGlmYWN0OiBUZXN0X0JKTV8zMDAxLmNvbXBvc2l0ZV0gLSBVUkkgbXVzdCBzdGFydCB3aXRoIHRoZSBzY2hlbWUgam1zOmpuZGk6IG9yIGptczpxdWV1ZTogb3Igam1zOnRvcGljOiAgZm9yIHVyaTogaHR0cDovL3Rlc3Quc2NhLm9hc2lzb3Blbi5vcmcvCitCSk1fMzAwMj1UZXN0IHNlcnZpY2UgZ290IGFuIGV4Y2VwdGlvbiBkdXJpbmcgZXhlY3V0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdFeGNlcHRpb24gSk1TIERlc3RpbmF0aW9uIEJKTV8zMDAyX1F1ZXVlIG5vdCBmb3VuZCB3aXRoIGNyZWF0ZSBtb2RlIG9mICJpZk5vdEV4aXN0IiB3aGlsZSByZWdpc3RlcmluZyBiaW5kaW5nIFJlZmVyZW5jZTEgaW52b2tlcgorQkpNXzMwMTE9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nRXhjZXB0aW9uOiBKTVMgRGVzdGluYXRpb24gVEVTVF9CSk1fMzAxMV9RdWV1ZSBhbHJlYWR5IGV4aXN0cyBidXQgaGFzIGNyZWF0ZSBtb2RlIG9mICJhbHdheXMiIHdoaWxlIHJlZ2lzdGVyaW5nIHNlcnZpY2UgU2VydmljZTEgbGlzdGVuZXIKK0JKTV8zMDExQT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdFeGNlcHRpb246IEluY29ycmVjdCByZXNvdXJjZSB0eXBlIGZvciBBY3RpdmF0aW9uU3BlYzogb3JnLmFwYWNoZS5hY3RpdmVtcS5jb21tYW5kLkFjdGl2ZU1RUXVldWUKK0JKTV8zMDExQz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQkpNXzMwMTFDLCBBcnRpZmFjdDogVGVzdF9CSk1fMzAxMUMuY29tcG9zaXRlXSAtIFdoZW4gY29ubmVjdGlvbiBmYWN0b3J5ICJBbHJlYWR5RXhpc3RzIiBlbGVtZW50IGlzIHByZXNlbnQgdGhlbiBhIGRlc3RpbmF0aW9uIG5hbWUgbXVzdCBhbHNvIGJlIGRlZmluZWQKK0JKTV8zMDExRD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdFeGNlcHRpb246IEpNUyBEZXN0aW5hdGlvbiBBbHJlYWR5RXhpc3RzIGFscmVhZHkgZXhpc3RzIGJ1dCBoYXMgY3JlYXRlIG1vZGUgb2YgImFsd2F5cyIgd2hpbGUgcmVnaXN0ZXJpbmcgc2VydmljZSBTZXJ2aWNlMSBsaXN0ZW5lcgorQkpNXzMwMTJBPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBCSk1fMzAxMkEsIEFydGlmYWN0OiBUZXN0X0JKTV8zMDEyQS5jb21wb3NpdGVdIC0gTXVzdCBzcGVjaWZ5IGpuZGlOYW1lIGF0dHJpYnV0ZSB3aGVuIGNyZWF0ZSBtb2RlIGlzICJpZk5vdEV4aXN0IgorQkpNXzMwMTJDPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBCSk1fMzAxMkMsIEFydGlmYWN0OiBUZXN0X0JKTV8zMDEyQy5jb21wb3NpdGVdIC0gTWlzc2luZyBDb25uZWN0aW9uRmFjdG9yeSBOYW1lCitCSk1fMzAxMkQ9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJKTV8zMDEyRCwgQXJ0aWZhY3Q6IFRlc3RfQkpNXzMwMTJELmNvbXBvc2l0ZV0gLSBNdXN0IHNwZWNpZnkgam5kaU5hbWUgYXR0cmlidXRlIHdoZW4gY3JlYXRlIG1vZGUgaXMgImlmTm90RXhpc3QiCitCSk1fMzAxMz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdFeGNlcHRpb246IEpNUyBEZXN0aW5hdGlvbiBURVNUX0JKTV8zMDEzX1F1ZXVlIG5vdCBmb3VuZCB3aXRoIGNyZWF0ZSBtb2RlIG9mICJpZk5vdEV4aXN0IiB3aGlsZSByZWdpc3RlcmluZyBzZXJ2aWNlIFNlcnZpY2UxIGxpc3RlbmVyCitCSk1fMzAxM0E9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nRXhjZXB0aW9uOiBDYW4gbm90IGNyZWF0ZSBBY3RpdmF0aW9uU3BlYworQkpNXzMwMTNDPSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdFeGNlcHRpb246IGNvbm5lY3Rpb24gZmFjdG9yeSBub3QgZm91bmQ6IFRFU1RfQkpNXzMwMTNfQ0YKK0JKTV8zMDE0PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjogSk1TIERlc3RpbmF0aW9uIFRFU1RfQkpNXzMwMTRfUXVldWUgZXhwZWN0aW5nIHR5cGUgb2YgcXVldWUgYnV0IGZvdW5kIHRvcGljIHdoaWxlIHJlZ2lzdGVyaW5nIHNlcnZpY2UgU2VydmljZTEgbGlzdGVuZXIKK0JKTV8zMDE0QT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdFeGNlcHRpb246IEluY29ycmVjdCByZXNvdXJjZSB0eXBlIGZvciBBY3RpdmF0aW9uU3BlYzogb3JnLmFwYWNoZS5hY3RpdmVtcS5jb21tYW5kLkFjdGl2ZU1RVG9waWMKK0JKTV8zMDE0Qz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0JpbmRpbmdFeGNlcHRpb246IEpOREkgcmVzb3VyY2UgJ1RFU1RfQkpNXzMwMTRfUXVldWUnIGlzIG5vdCBhIEpNUyBDb25uZWN0aW9uRmFjdG9yeQorQkpNXzMwMTREPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjogSk1TIERlc3RpbmF0aW9uIFRFU1RfQkpNXzMwMTRfVG9waWMgZXhwZWN0aW5nIHR5cGUgb2YgcXVldWUgYnV0IGZvdW5kIHRvcGljIHdoaWxlIHJlZ2lzdGVyaW5nIHNlcnZpY2UgU2VydmljZTEgbGlzdGVuZXIKK0JKTV8zMDE1QWE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJKTV8zMDE1QWEsIEFydGlmYWN0OiBUZXN0X0JKTV8zMDE1QWEuY29tcG9zaXRlXSAtIE11c3Qgc3BlY2lmeSBqbmRpTmFtZSBhdHRyaWJ1dGUgd2hlbiBjcmVhdGUgbW9kZSBpcyAibmV2ZXIiCitCSk1fMzAxNUFiPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjogQWN0aXZhdGlvblNwZWMgc3BlY2lmaWVzIGNyZWF0ZSBtb2RlIG9mICJuZXZlciIgYnV0IHJlc291cmNlIGRvZXMgbm90IGV4aXN0IGF0IGpuZGlOYW1lIERvZXNudEV4aXN0CitCSk1fMzAxNUFjPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjogSW5jb3JyZWN0IHJlc291cmNlIHR5cGUgZm9yIEFjdGl2YXRpb25TcGVjOiBvcmcuYXBhY2hlLmFjdGl2ZW1xLmNvbW1hbmQuQWN0aXZlTVFRdWV1ZQorQkpNXzMwMTVDYT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQkpNXzMwMTVDYSwgQXJ0aWZhY3Q6IFRlc3RfQkpNXzMwMTVDYS5jb21wb3NpdGVdIC0gTWlzc2luZyBDb25uZWN0aW9uRmFjdG9yeSBOYW1lCitCSk1fMzAxNUNiPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjogY29ubmVjdGlvbiBmYWN0b3J5IG5vdCBmb3VuZDogRG9lc250RXhpc3QKK0JKTV8zMDE1Q2M9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5KTVNCaW5kaW5nRXhjZXB0aW9uOiBKTkRJIHJlc291cmNlICdURVNUX0JKTV8zMDE1X1F1ZXVlJyBpcyBub3QgYSBKTVMgQ29ubmVjdGlvbkZhY3RvcnkKK0JKTV8zMDE1RGE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJKTV8zMDE1RGEsIEFydGlmYWN0OiBUZXN0X0JKTV8zMDE1RGEuY29tcG9zaXRlXSAtIE11c3Qgc3BlY2lmeSBqbmRpTmFtZSBhdHRyaWJ1dGUgd2hlbiBjcmVhdGUgbW9kZSBpcyAibmV2ZXIiCitCSk1fMzAxNURiPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjogSk1TIERlc3RpbmF0aW9uIEJKTV8zMDE1X0RvZXNudEV4aXN0IG5vdCBmb3VuZCBidXQgY3JlYXRlIG1vZGUgb2YgIm5ldmVyIiB3aGlsZSByZWdpc3RlcmluZyBzZXJ2aWNlIFNlcnZpY2UxIGxpc3RlbmVyCitCSk1fMzAxNURjPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjogSk1TIERlc3RpbmF0aW9uIFRFU1RfQkpNXzMwMTVfVG9waWMgZXhwZWN0aW5nIHR5cGUgb2YgcXVldWUgYnV0IGZvdW5kIHRvcGljIHdoaWxlIHJlZ2lzdGVyaW5nIHNlcnZpY2UgU2VydmljZTEgbGlzdGVuZXIKK0JKTV8zMDE3PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBCSk1fMzAxNywgQXJ0aWZhY3Q6IFRlc3RfQkpNXzMwMTcuY29tcG9zaXRlXSAtIFhNTFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yIG9jY3VyZWQgaW46IFRlc3RfQkpNXzMwMTcuY29tcG9zaXRlICxsaW5lID0gMzYsIGNvbHVtbiA9IDE3LCBNZXNzYWdlID0gY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYTogSW52YWxpZCBjb250ZW50IHdhcyBmb3VuZCBzdGFydGluZyB3aXRoIGVsZW1lbnQgJ2FjdGl2YXRpb25TcGVjJy4gT25lIG9mICd7Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6cmVzcG9uc2UsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOmhlYWRlcnMsICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOm1lc3NhZ2VTZWxlY3Rpb24sICJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiOnJlc291cmNlQWRhcHRlciwgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6b3BlcmF0aW9uUHJvcGVydGllcywgImh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiI6ZXh0ZW5zaW9uc30nIGlzIGV4cGVjdGVkLgorQkpNXzMwMTg9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJKTV8zMDE4LCBBcnRpZmFjdDogVGVzdF9CSk1fMzAxOC5jb21wb3NpdGVdIC0gV2hlbiBjb25uZWN0aW9uIGZhY3RvcnkgIlRFU1RfQkpNXzMwMThfQ0YiIGVsZW1lbnQgaXMgcHJlc2VudCB0aGVuIGEgZGVzdGluYXRpb24gbmFtZSBtdXN0IGFsc28gYmUgZGVmaW5lZAorQkpNXzMwMTk9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJKTV8zMDE5LCBBcnRpZmFjdDogVGVzdF9CSk1fMzAxOS5jb21wb3NpdGVdIC0gQWN0aXZhdGlvbiBzcGVjIG5hbWUgVEVTVF9CSk1fMzAxOV9BUyBtdXN0IG1hdGNoIGRlc3RpbmF0aW9uIG5hbWUgVEVTVF9CSk1fMzAxOV9RdWV1ZV9YWFgKK0JKTV8zMDIwPVRlc3Qgc2VydmljZSBnb3QgYW4gZXhjZXB0aW9uIGR1cmluZyBleGVjdXRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbiBBY3RpdmF0aW9uIHNwZWMgY2FuIG5vdCBiZSBzcGVjaWZpZWQgb24gYW4gU0NBIHJlZmVyZW5jZSBiaW5kaW5nLgorQkpNXzMwMjE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJKTV8zMDIxLCBBcnRpZmFjdDogVGVzdF9CSk1fMzAyMS5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9CSk1fMzAyMS5jb21wb3NpdGUgLGxpbmUgPSA0NCwgY29sdW1uID0gMjEsIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjIuNC5kOiBJbnZhbGlkIGNvbnRlbnQgd2FzIGZvdW5kIHN0YXJ0aW5nIHdpdGggZWxlbWVudCAnYWN0aXZhdGlvblNwZWMnLiBObyBjaGlsZCBlbGVtZW50IGlzIGV4cGVjdGVkIGF0IHRoaXMgcG9pbnQuCitCSk1fMzAyMj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQkpNXzMwMjIsIEFydGlmYWN0OiBUZXN0X0JKTV8zMDIyLmNvbXBvc2l0ZV0gLSBBY3RpdmF0aW9uIHNwZWMgbmFtZSBURVNUX0JKTV8zMDIyX1Jlc3BvbnNlX0FTIG11c3QgbWF0Y2ggZGVzdGluYXRpb24gbmFtZSBURVNUX0JKTV8zMDIyX1Jlc3BvbnNlX1F1ZXVlCitCSk1fMzAyMz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuQWN0aXZhdGlvbkV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkFjdGl2YXRpb25FeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjogW0JKTTMwMDIzXSByZXNwb25zZS9hY3RpdmF0aW9uU3BlYyBlbGVtZW50IE1VU1QgTk9UIGJlIHByZXNlbnQgd2hlbiB0aGUgYmluZGluZyBpcyBiZWluZyB1c2VkIGZvciBhbiBTQ0Egc2VydmljZQorQkpNXzMwMjk9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJKTV8zMDI5LCBBcnRpZmFjdDogVGVzdF9CSk1fMzAyOS5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9CSk1fMzAyOS5jb21wb3NpdGUgLGxpbmUgPSAzNywgY29sdW1uID0gMTcsIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjMuMi4yOiBBdHRyaWJ1dGUgJ3NlbGVjdGVkT3BlcmF0aW9uJyBpcyBub3QgYWxsb3dlZCB0byBhcHBlYXIgaW4gZWxlbWVudCAnb3BlcmF0aW9uUHJvcGVydGllcycuCitCSk1fMzAzND1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQkpNXzMwMzQsIEFydGlmYWN0OiBUZXN0X0JKTV8zMDM0LmNvbXBvc2l0ZV0gLSBEZXN0aW5hdGlvbiBURVNUX0JKTV8zMDM0X1F1ZXVlIGNhbiBub3QgYmUgc3BlY2lmaWVkIHdoZW4gVVJJIGptczpqbmRpOlRFU1RfQkpNXzMwMzRfUXVldWUgaXMgcHJlc2VudAorQkpNXzMwMzY9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJKTV8zMDM2LCBBcnRpZmFjdDogVGVzdF9CSk1fMzAzNi5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9CSk1fMzAzNi5jb21wb3NpdGUgLGxpbmUgPSAyNiwgY29sdW1uID0gMTMsIE1lc3NhZ2UgPSBjdmMtY29tcGxleC10eXBlLjMuMi4yOiBBdHRyaWJ1dGUgJ2ludmFsaWRBdHRyaWJ1dGUnIGlzIG5vdCBhbGxvd2VkIHRvIGFwcGVhciBpbiBlbGVtZW50ICdiaW5kaW5nLmptcycKK0JKTV8zMDM3QT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQkpNXzMwMzdBLCBBcnRpZmFjdDogVGVzdF9CSk1fMzAzN0EuY29tcG9zaXRlXSAtIEEgSk5ESSBuYW1lIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gYW4gQWN0aXZhdGlvblNwZWMgaGFzIGEgY3JlYXRlIG1vZGUgb2YgImFsd2F5cyIKK0JKTV8zMDM3Qz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQkpNXzMwMzdDLCBBcnRpZmFjdDogVGVzdF9CSk1fMzAzN0MuY29tcG9zaXRlXSAtIE1pc3NpbmcgQ29ubmVjdGlvbkZhY3RvcnkgTmFtZQorQkpNXzMwMzdEPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQmluZGluZ0V4Y2VwdGlvbjogSk1TIERlc3RpbmF0aW9uIFNlcnZpY2UxIGFscmVhZHkgZXhpc3RzIGJ1dCBoYXMgY3JlYXRlIG1vZGUgb2YgImFsd2F5cyIgd2hpbGUgcmVnaXN0ZXJpbmcgc2VydmljZSBTZXJ2aWNlMSBsaXN0ZW5lcgorQkpNXzQwMDQ9b3JnLnhtbC5zYXguU0FYUGFyc2VFeGNlcHRpb246IENvbnRlbnQgaXMgbm90IGFsbG93ZWQgaW4gcHJvbG9nCitCSk1fNDAxMT1DYW5ub3QgZGV0ZXJtaW5lIHNlcnZpY2Ugb3BlcmF0aW9uCitCSk1fNjAxNj1tZXNzYWdlIHByb3BlcnR5IHNjYUNhbGxiYWNrRGVzdGluYXRpb24gZG9lcyBub3Qgc3RhcnQgd2l0aCAnam1zOmpuZGk6JyBmb3VuZDogRE9FU05UX0VYSVNUCisKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3BvbS54bWwgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDYzMGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9wb20ueG1sCkBAIC0wLDAgKzEsMTQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0czwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbXBsaWFuY2UtdGVzdC1iaW5kaW5nLXdzPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTcGVjaWZpY2F0aW9uIENvbXBsaWFuY2UgVGVzdHMgQmluZGluZyBXUzwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8IS0tIFRoaXMgaXMgb25seSBuZWVkZWQgdG8gZ2V0IHRoZSBtb2R1bGUgd29ya2luZyBpbiBFY2xpcHNlIHdoaWNoIGRvZXNuJ3QgcGljayBpdCB1cCBmcm9tIHRoZSBkZXBlbmRlbmN5IHBsdWdpbiB1bnBhY2sgLS0+CisgICAgICAgICAgICA8IS0tIFRoZSBkZXBlbmRlbmN5IHBsdWdpbiB1bnBhY2sgaXMgbmVlZGVkIGFzIHByZXNlbnRseSB0aGUgc3VyZWZpcmUgcGx1Z2luIHdvbnQgcnVuIHRlc3RzIGluIGEgZGVwZW5kZW5jeSBqYXIgLS0+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1vdGVzdHMtc2NhLXdzLXRlc3RzPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZS1wb208L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gCisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptczwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktb3NnaS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAKKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3MtcnVudGltZS1heGlzMjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1qZXR0eTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAKKworICAgICAgICAgPCEtLSBUaGlzIGlzIG5lZWQgd2hlbiBydW5uaW5nIHdpdGggU3VuIEpESyB3aGljaCBnZXRzIGFuIHVuc3VwcG9ydGVkIG9wZXJhdGlvbiBleGNlcHRpb24gY3JlYXRpbmcgYW4gWE1MU3RyZWFtUmVhZGVyIGZyb20gYSBET01Tb3VyY2UKKyAgICAgICAgICAgICB3aGVuIFR1c2NhbnkgaXMgd3JpdGluZyBhIHByb3BlcnR5IHZhbHVlICAtLT4KKyAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3N0eC1hc2w8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4zLjIuNDwvdmVyc2lvbj4KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4KKyAgICAgICAgICAgIDxleGNsdXNpb25zPgorICAgICAgICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPnN0YXg8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0YXgtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgICAgPC9leGNsdXNpb25zPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC41PC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICA8L2RlcGVuZGVuY2llcz4KKworICA8YnVpbGQ+CisgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+CisgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgIDxwbHVnaW4+CisgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CisgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgPGV4Y2x1ZGVzPgorICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgPC9wbHVnaW4+CisKKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgIDxleGVjdXRpb25zPgorICAgICAgICAgIDxleGVjdXRpb24+CisgICAgICAgICAgICA8aWQ+dW5wYWNrPC9pZD4KKyAgICAgICAgICAgIDxwaGFzZT50ZXN0LWNvbXBpbGU8L3BoYXNlPgorICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICA8Z29hbD51bnBhY2s8L2dvYWw+CisgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4KKyAgICAgICAgICAgICAgICAgPGFydGlmYWN0SXRlbT4KKyAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLXdzLWNvbnRyaWJ1dGlvbnM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgIDx0eXBlPnppcDwvdHlwZT4KKyAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L29hc2lzLWNvbnRyaWJ1dGlvbnM8L291dHB1dERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+CisgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW90ZXN0cy1zY2Etd3MtdGVzdHM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgIDx0eXBlPmphcjwvdHlwZT4KKyAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+Y29tbW9ucy1sb2dnaW5nLnByb3BlcnRpZXMsb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXM8L2V4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vdGVzdC1jbGFzc2VzPC9vdXRwdXREaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtPgorICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPgorICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICA8L3BsdWdpbj4KKworICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zY2FfdmFyaWFibGVzLmR0ZCBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3NjYV92YXJpYWJsZXMuZHRkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBjb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctd3Mvc2NhX3ZhcmlhYmxlcy5kdGQKcmVuYW1lIHRvIHRlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3NjYV92YXJpYWJsZXMuZHRkCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9vdGVzdC9UdXNjYW55UnVudGltZUJyaWRnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOWU4YjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQpAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdDsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CisKK2ltcG9ydCB0ZXN0Q2xpZW50LlRlc3RFeGNlcHRpb25fRXhjZXB0aW9uOworaW1wb3J0IGNsaWVudC5SdW50aW1lQnJpZGdlOworCisvKioKKyAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBSdW50aW1lIEJyaWRnZSBmb3IgdGhlIEFwYWNoZSBUdXNjYW55IFNDQSBydW50aW1lICh2ZXJzaW9uIDIueCkKKyAqCisgKi8KK3B1YmxpYyBjbGFzcyBUdXNjYW55UnVudGltZUJyaWRnZSBpbXBsZW1lbnRzIFJ1bnRpbWVCcmlkZ2UgeworCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT05UUklCVVRJT05fTE9DQVRJT05fUFJPUEtFWSA9ICJPQVNJU19URVNURU5WX0NPTlRSSUJVVElPTl9MT0NBVElPTiI7CisKKyAgICBwcm90ZWN0ZWQgTm9kZUZhY3RvcnkgbGF1bmNoZXI7CisgICAgcHJvdGVjdGVkIE5vZGUgbm9kZTsKKyAgICBwcm90ZWN0ZWQgUHJvcGVydGllcyBleHBlY3RlZEVycm9yTWVzc2FnZXM7CisKKyAgICBwdWJsaWMgVHVzY2FueVJ1bnRpbWVCcmlkZ2UoKSB7CisgICAgICAgIC8vIHJlYWQgdGVzdCBlcnJvciBtYXBwaW5nCisgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlcyA9IG5ldyBQcm9wZXJ0aWVzKCk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBJbnB1dFN0cmVhbSBwcm9wZXJ0aWVzU3RyZWFtID0gdGhpcy5nZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oIi90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyIpOworICAgICAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzLmxvYWQocHJvcGVydGllc1N0cmVhbSk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgICAKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiVW5hYmxlIHRvIHJlYWQgb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIGZpbGUiKTsKKyAgICAgICAgfSAKKyAgICB9CisKKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydENvbnRyaWJ1dGlvbihTdHJpbmcgY29tcG9zaXRlTmFtZSwgU3RyaW5nIGNvbnRyaWJ1dGlvbkxvY2F0aW9uLCBTdHJpbmdbXSBjb250cmlidXRpb25OYW1lcykgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICAvLyBUdXNjYW55IHNwZWNpZmljIGNvZGUgd2hpY2ggc3RhcnRzIHRoZSBjb250cmlidXRpb24ocykgaG9sZGluZyB0aGUgdGVzdAorICAgICAgICAgICAgbGF1bmNoZXIgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOworCisgICAgICAgICAgICBDb250cmlidXRpb25bXSBjb250cmlidXRpb25zID0gbmV3IENvbnRyaWJ1dGlvbltjb250cmlidXRpb25OYW1lcy5sZW5ndGhdOworICAgICAgICAgICAgU3RyaW5nW10gY29udHJpYnV0aW9uVVJJcyA9IGdldENvbnRyaWJ1dGlvblVSSXMoY29udHJpYnV0aW9uTG9jYXRpb24sIGNvbnRyaWJ1dGlvbk5hbWVzKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGNvbnRyaWJ1dGlvbnNbaV0gPSBuZXcgQ29udHJpYnV0aW9uKGNvbnRyaWJ1dGlvbk5hbWVzW2ldLCBjb250cmlidXRpb25VUklzW2ldKTsKKyAgICAgICAgICAgIH0gLy8gZW5kIGZvcgorCisgICAgICAgICAgICBub2RlID0gbGF1bmNoZXIuY3JlYXRlTm9kZShjb21wb3NpdGVOYW1lLCBjb250cmlidXRpb25zKTsKKyAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBub2RlCisgICAgICAgICAgICBub2RlLnN0YXJ0KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgCisgICAgICAgICAgICAvLyBwcmludCBvdXQgdGhlIGNvbXBvc2l0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZCBpbiBzdWNjZXNzIGNhc2VzCisgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oKChOb2RlSW1wbClub2RlKS5kdW1wRG9tYWluQ29tcG9zaXRlKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAgICAgCisgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICB9IC8vIGVuZCB0cnkKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IC8vIGVuZCBtZXRob2Qgc3RhcnRDb250cmlidXRpb24KKworICAgIC8qKgorICAgICAqIEdldHMgdGhlIGxvY2F0aW9uIG9mIHRoZSBDb250cmlidXRpb25zIGFzIFVSSXMKKyAgICAgKiBAcGFyYW0gY29udHJpYnV0aW9uTG9jYXRpb24gLSBhIGxvY2F0aW9uIHBhdHRlcm4gVVJJLCB3aGljaCBjb250YWlucyBvbmUgb3IgbW9yZSAiJTEiCisgICAgICogc3Vic3RyaW5ncywgd2hpY2ggYXJlIHN1YnN0aXR1dGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNvbnRyaWJ1dGlvbiB0byBnZXQgdGhlIFVSSSBvZgorICAgICAqIHRoZSBjb250cmlidXRpb24KKyAgICAgKiBAcmV0dXJuIHRoZSBjb250cmlidXRpb24gbG9jYXRpb25zIGFzIGFuIGFycmF5IG9mIFN0cmluZ3MKKyAgICAgKi8KKyAgICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0Q29udHJpYnV0aW9uVVJJcyhTdHJpbmcgY29udHJpYnV0aW9uTG9jYXRpb24sIFN0cmluZ1tdIGNvbnRyaWJ1dGlvbk5hbWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nW10gbG9jYXRpb25zID0gbmV3IFN0cmluZ1tjb250cmlidXRpb25OYW1lcy5sZW5ndGhdOworCisgICAgICAgIGlmIChsb2NhdGlvbnMgIT0gbnVsbCAmJiBjb250cmlidXRpb25Mb2NhdGlvbiAhPSBudWxsKSB7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGFMb2NhdGlvbiA9IGNvbnRyaWJ1dGlvbkxvY2F0aW9uLnJlcGxhY2VBbGwoIiUxIiwgY29udHJpYnV0aW9uTmFtZXNbaV0pOworCisgICAgICAgICAgICAgICAgbG9jYXRpb25zW2ldID0gYUxvY2F0aW9uOworICAgICAgICAgICAgfSAvLyBlbmQgZm9yICAgIAkgIAkKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChsb2NhdGlvbnMgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIC8vIE5vIGNvbnRyaWJ1dGlvbiBzcGVjaWZpZWQgLSB0aHJvdyBhbiBFeGNlcHRpb24KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmFibGUgdG8gc3RhcnQgU0NBIHJ1bnRpbWUgLSBubyBjb250cmlidXRpb24gc3VwcGxpZWQgLSBlcnJvciIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBObyBjb250cmlidXRpb24gbG9jYXRpb24gc3VwcGxpZWQgLSB0aHJvdyBhbiBFeGNlcHRpb24KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmFibGUgdG8gc3RhcnQgU0NBIHJ1bnRpbWUgLSBubyBjb250cmlidXRpb24gbG9jYXRpb24gc3VwcGxpZWQgLSBlcnJvciIpOworICAgICAgICAgICAgfSAvLyBlbmQgaWYgCisgICAgICAgIH0gLy8gZW5kIGlmCisKKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uczsKKyAgICB9IC8vIGVuZCBnZXRDb250cmlidXRpb25VUkkKKworICAgIHB1YmxpYyB2b2lkIHN0b3BDb250cmlidXRpb24oKSB7CisgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsKKyAgICAgICAgICAgIG5vZGUuc3RvcCgpOworICAgICAgICB9IC8vIGVuZCBpZgorICAgICAgICBpZiAobGF1bmNoZXIgIT0gbnVsbCkgeworICAgICAgICAgICAgbGF1bmNoZXIuZGVzdHJveSgpOworICAgICAgICB9IC8vIGVuZCBpZgorICAgIH0gLy8gZW5kIG1ldGhvZCBzdG9wQ29udHJpYnV0aW9uCisgICAgCisgICAgcHVibGljIHZvaWQgY2hlY2tFcnJvcihTdHJpbmcgdGVzdE5hbWUsIFRocm93YWJsZSBleCkgdGhyb3dzIFRocm93YWJsZSB7IAorICAgICAgICAgICAgICAKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZSA9IGV4cGVjdGVkRXJyb3JNZXNzYWdlcy5nZXRQcm9wZXJ0eSh0ZXN0TmFtZSk7CisgICAgICAgIFN0cmluZyByZWNlaXZlZE1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXgpOy8vZXguZ2V0TWVzc2FnZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZSA9PSBudWxsKXsKKyAgICAgICAgICAgIHdyaXRlTWlzc2luZ01lc3NhZ2UodGVzdE5hbWUsIGV4KTsKKyAgICAgICAgICAgIGZhaWwoIk51bGwgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSBmb3IgdGVzdCAiICsgdGVzdE5hbWUgKyAKKyAgICAgICAgICAgICAgICAgIlBsZWFzZSBhZGQgbWVzc2FnZSB0byBvYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMiKTsKKyAgICAgICAgfSAvLyBlbmQgaWYKKyAgICAgICAgCisgICAgICAgIGlmIChyZWNlaXZlZE1lc3NhZ2UgPT0gbnVsbCl7CisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgIGZhaWwoIk51bGwgcmVjZWl2ZWQgZXJyb3IgbWVzc2FnZSBmb3IgdGVzdCAiICsgdGVzdE5hbWUpOworICAgICAgICB9IC8vIGVuZCBpZgorCisgICAgICAgIGlmIChleHBlY3RlZE1lc3NhZ2Uuc3RhcnRzV2l0aCgiKiIpKSB7CisgICAgICAgICAgICAvLyBhbGxvdyB1c2luZyAqIHRvIGlnbm9yZSBhIG1lc3NhZ2UgY29tcGFyaXNvbgorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBEZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIG1lc3NhZ2UgaGFzIHZhcmlhYmxlIHBhcnRzIHdpdGhpbiBpdAorICAgICAgICAvLyBtYXJrZWQgd2l0aCB0aGUgY2hhcmFjdGVycyAqKiouIEhlcmUgd2UgdG9rZW5pemUgdGhlIGV4cGVjdGVkIHN0cmluZyAKKyAgICAgICAgLy8gYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIGluZGl2aWR1YWwgcGFydHMgYXJlIHByZXNlbnQgaW4gdGhlIHJlc3VsdHMgc3RyaW5nCisgICAgICAgIFN0cmluZyBleHBlY3RlZE1lc3NhZ2VQYXJ0c1tdID0gZXhwZWN0ZWRNZXNzYWdlLnNwbGl0KCJcXCpcXCpcXCoiKTsKKyAgICAgICAgCisgICAgICAgIGlmIChleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGggPiAxKXsKKyAgICAgICAgICAgIGludCBmb3VuZFBhcnRzID0gMDsKKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGg7IGkrKyl7CisgICAgICAgICAgICAgICAgaWYgKHJlY2VpdmVkTWVzc2FnZS5pbmRleE9mKGV4cGVjdGVkTWVzc2FnZVBhcnRzW2ldKSA+IC0xICl7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kUGFydHMrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmb3VuZFBhcnRzID09IGV4cGVjdGVkTWVzc2FnZVBhcnRzLmxlbmd0aCl7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgCisgICAgICAgIC8vIERlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlIGlzIHZhcmlhYmxlIChlZyBjb250YWlucyBhYnNvbHV0ZSBmaWxlbmFtZXMpIAorICAgICAgICAvLyBhbmQgd2hlcmUgdGhlIG9ubHkgcmVsZXZhbnQgcGFydCBpcyB0aGUgc3RhcnQgb2YgdGhlIG1lc3NhZ2UgLSBpbiB0aGlzIGNhc2UgdGhlIGV4cGVjdGVkCisgICAgICAgIC8vIG1lc3NhZ2Ugb25seSBjb250YWlucyB0aGUgc3RlbSBzZWN0aW9uIHdoaWNoIGlzIHVuY2hhbmdpbmcuLi4KKyAgICAgICAgaWYoIHJlY2VpdmVkTWVzc2FnZS5sZW5ndGgoKSA+IGV4cGVjdGVkTWVzc2FnZS5sZW5ndGgoKSApIHsKKyAgICAgICAgICAgIC8vIFRydW5jYXRlIHRoZSByZWNlaXZlZCBtZXNzYWdlIHRvIHRoZSBsZW5ndGggb2YgdGhlIGV4cGVjdGVkIG1lc3NhZ2UKKyAgICAgICAgICAgIHJlY2VpdmVkTWVzc2FnZSA9IHJlY2VpdmVkTWVzc2FnZS5zdWJzdHJpbmcoMCwgZXhwZWN0ZWRNZXNzYWdlLmxlbmd0aCgpICk7CisgICAgICAgIH0gLy8gZW5kIGlmCisKKyAgICAgICAgaWYgKCFleHBlY3RlZE1lc3NhZ2UuZXF1YWxzKHJlY2VpdmVkTWVzc2FnZSkpIHsKKyAgICAgICAgICAgIHdyaXRlSW5jb3JyZWN0TWVzc2FnZSh0ZXN0TmFtZSwgZXhwZWN0ZWRNZXNzYWdlLCByZWNlaXZlZE1lc3NhZ2UpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBhc3NlcnRFcXVhbHMoIGV4cGVjdGVkTWVzc2FnZSwgcmVjZWl2ZWRNZXNzYWdlICk7CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgICAgCisgICAgfQorCisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVNaXNzaW5nTWVzc2FnZShTdHJpbmcgdGVzdE5hbWUsIFRocm93YWJsZSBleCkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIgb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKCJ0YXJnZXQvT1Rlc3RNaXNzaW5nTXNncy50eHQiLCB0cnVlKSk7CisgICAgICAgICAgICBvdXQud3JpdGUodGVzdE5hbWUgKyAiPSoiKTsKKyAgICAgICAgICAgIG91dC5uZXdMaW5lKCk7CisgICAgICAgICAgICBvdXQuY2xvc2UoKTsKKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworICAgICAgICB9IAorICAgIH0KKworICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlSW5jb3JyZWN0TWVzc2FnZShTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIHJlY2VpdmVkKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBCdWZmZXJlZFdyaXRlciBvdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoInRhcmdldC9PVGVzdEluY29ycmVjdE1zZ3MudHh0IiwgdHJ1ZSkpOworICAgICAgICAgICAgb3V0LndyaXRlKHRlc3ROYW1lKTsgb3V0Lm5ld0xpbmUoKTsKKyAgICAgICAgICAgIG91dC53cml0ZSgiICAgICIgKyBleHBlY3RlZCk7IG91dC5uZXdMaW5lKCk7CisgICAgICAgICAgICBvdXQud3JpdGUoIiAgICAiICsgcmVjZWl2ZWQpOyBvdXQubmV3TGluZSgpOworICAgICAgICAgICAgb3V0LmNsb3NlKCk7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgfSAKKyAgICB9CisKKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldEVycm9yTWVzc2FnZShUaHJvd2FibGUgZXgpIHsKKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG51bGw7CisgICAgICAgIAorICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBUZXN0RXhjZXB0aW9uX0V4Y2VwdGlvbikgeworICAgICAgICAgICAgVGVzdEV4Y2VwdGlvbl9FeGNlcHRpb24gdGUgPSAoVGVzdEV4Y2VwdGlvbl9FeGNlcHRpb24pIGV4OworICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gdGUuZ2V0RmF1bHRJbmZvKCkuZ2V0TWVzc2FnZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXguZ2V0TWVzc2FnZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlOworICAgIH0KK30gLy8gZW5kIGNsYXNzIFR1c2NhbnlSdW50aW1lQnJpZGdlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zcmMvdGVzdC9yZXNvdXJjZXMvb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zcmMvdGVzdC9yZXNvdXJjZXMvb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGMzMjk2YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpAQCAtMCwwICsxLDMwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMgCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIAorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworIyB1bmRlciB0aGUgTGljZW5zZS4gCisKKyMgT0FTSVMgU0NBIEFzc2VtYmx5IHRlc3QgcHJvcGVydGllcworIyBUaGUgaW1wbGVtZW50YXRpb24gdHlwZSB0byB1c2UgZm9yIEFzc2VtYmx5IHRlc3Qgc3VpdGUKKyMgb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5sYW5nPUJQRUwKK29yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1KYXZhCisKKyMgVGhlIGNsYXNzIHRvIHVzZSBhcyB0aGUgUnVudGltZSBCcmlkZ2UgZm9yIHRoZSBTQ0EgcnVudGltZSB1bmRlciB0ZXN0Cisjb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlPU0dpUnVudGltZUJyaWRnZQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlSdW50aW1lQnJpZGdlCisKKyMgVGhlIGxvY2F0aW9uIG9mIHRoZSBjb250cmlidXRpb25zIGZvciB0aGUgdGVzdCBzdWl0ZQorIyAlMSByZXByZXNlbnRzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5hbWUgb2YgZWFjaCBjb250cmlidXRpb24gaW50byB0aGUgbG9jYXRpb24gVVJJCitvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LmNvbnRyaWJ1dGlvbi5sb2NhdGlvbj10YXJnZXQvb2FzaXMtY29udHJpYnV0aW9ucy8lMS90YXJnZXQvJTEuemlwCisKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLXdzL3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzJhNWYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2JpbmRpbmctd3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzMgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIyAKKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMgCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisjIHVuZGVyIHRoZSBMaWNlbnNlLiAKKworQldTXzIwMDE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJXU18yMDAxLCBBcnRpZmFjdDogVGVzdF9CV1NfMjAwMS5jb21wb3NpdGVdIC0gW0JXUzIwMDAxXSBUaGUgVVJJIHZhbHVlIGZvciBiaW5kaW5nLndzIG9uIGFuIFNDQSByZWZlcmVuY2UgbXVzdCBiZSBhYnNvbHV0ZS4gTm9uLWFic29sdXRlIHZhbHVlIGZvdW5kIC9URVNUX0JXU18yMDAxQ29tcG9uZW50Mi9TZXJ2aWNlMQorQldTXzIwMDI9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJXU18yMDAyLCBBcnRpZmFjdDogVGVzdF9CV1NfMjAwMi5jb21wb3NpdGVdIC0gSW52YWxpZCBXZWJTZXJ2aWNlIGJpbmRpbmcgd3NkbEVsZW1lbnQgYXR0cmlidXRlOiBodHRwOi8vdGVzdC5zY2Eub2FzaXNvcGVuLm9yZy8jd3NkbC5wb3J0KE5vbkV4aXN0ZW50UG9ydE5hbWUpCitCV1NfMjAwMz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQldTXzIwMDMsIEFydGlmYWN0OiBUZXN0X0JXU18yMDAzLmNvbXBvc2l0ZV0gLSBbQldTMjAwMDNdIFRoZSB3c2RsRWxlbWVudCBhdHRyaWJ1dGUgb2YgYSBiaW5kaW5nLndzIG9uIGFuIFNDQSBzZXJ2aWNlIG11c3Qgbm90IHNwZWNpZnkgdGhlIHdzZGwuc2VydmljZSBmb3JtIG9mIFVSSS4gVGhlIGZvbGxvd2luZyBVUkkgd2FzIGZvdW5kIGh0dHA6Ly90ZXN0LnNjYS5vYXNpc29wZW4ub3JnLyN3c2RsLnNlcnZpY2UoU2VydmljZTFTZXJ2aWNlKQorQldTXzIwMDU9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJXU18yMDA1LCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0JXU18yMDA1XSAtIFtCV1MyMDAwNV1bQldTMjAwMTBdIFRoZSBXU0RMIGJpbmRpbmcgdHJhbnNwb3J0IGh0dHA6Ly9leGFtcGxlLmNvbS9mb28vYmFyIGlzIG5vdCBzdXBwb3J0ZWQgYnkgVHVzY2FueQorQldTXzIwMDc9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkFjdGl2YXRpb25FeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5BY3RpdmF0aW9uRXhjZXB0aW9uOiBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogQ29tcG9uZW50IFRFU1RfQldTXzIwMDdDb21wb25lbnQyIFNlcnZpY2UgU2VydmljZTEgaW50ZXJmYWNlIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHJlZmVyZW5jZSBiaW5kaW5nICAtIFNlcnZpY2UxIC0gT3BlcmF0aW9ucyBjYWxsZWQgb3BlcmF0aW9uMSBhcmUgbm90IGNvbXBhdGlibGUgT3BlcmF0aW9uIGFyZ3VtZW50IHR5cGVzIHNvdXJjZSA9IHtodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYX1mbG9hdCB0YXJnZXQgPSB7aHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWF9c3RyaW5nIGRvbid0IG1hdGNoIGZvciBvdXRwdXQgdHlwZXN8fHxPcGVyYXRpb25zIGNhbGxlZCBvcGVyYXRpb24xIGFyZSBub3QgY29tcGF0aWJsZXx8fCAtIFsoKioqKUVuZHBvaW50OiAgVVJJID0gVEVTVF9CV1NfMjAwN0NvbXBvbmVudDIjc2VydmljZS1iaW5kaW5nKFNlcnZpY2UxL1NlcnZpY2UxKV0KK0JXU18yMDExPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBCV1NfMjAxMSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9CV1NfMjAxMV0gLSBbQldTMjAwMDVdW0JXUzIwMDEwXSBUaGUgV1NETCBiaW5kaW5nIHRyYW5zcG9ydCBodHRwOi8vZXhhbXBsZS5jb20vZm9vL2JhciBpcyBub3Qgc3VwcG9ydGVkIGJ5IFR1c2NhbnkKK0JXU18yMDEzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBCV1NfMjAxMywgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9CV1NfMjAxM10gLSBbQldTMjAwMDVdW0JXUzIwMDEwXSBUaGUgV1NETCBiaW5kaW5nIHRyYW5zcG9ydCBodHRwOi8vZXhhbXBsZS5jb20vZm9vL2JhciBpcyBub3Qgc3VwcG9ydGVkIGJ5IFR1c2NhbnkKK0JXU18yMDE1PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBCV1NfMjAxNSwgQXJ0aWZhY3Q6IFRlc3RfQldTXzIwMTUuY29tcG9zaXRlXSAtIFtCV1MyMDAxN10gYmluZGluZy53cyBoYXMgYSBAd3NkbGk6d3NkbExvY2F0aW9uIGF0dHJpYnV0ZSBidXQgbm8gQHdzZGxFbGVtZW50IGF0dHJpYnV0ZQorQldTXzIwMTY9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJXU18yMDE2LCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0JXU18yMDE2XSAtIEV4Y2VwdGlvbiBsb2NhdGluZyB3c2RsaTpsb2NhdGlvbiByZXNvdXJjZTogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb246IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOiBodHRwOi8vZXhhbXBsZS5vcmcvU2VydmljZTEud3NkbAorQldTXzIwMTc9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEJXU18yMDE3LCBBcnRpZmFjdDogVGVzdF9CV1NfMjAxNy5jb21wb3NpdGVdIC0gW0JXUzIwMDE5XSB3aXRoIGJpbmRpbmcud3MgeW91IGNhbiBvbmx5IHNwZWNpZnkgb25lIG9mIHVybCwgd3NhOkVuZHBvaW50UmVmZXJlbmNlLCAjd3NkbC5zZXJ2aWNlIG9yICN3c2RsLnBvcnQuIFRoZSBmb2xsb3dpbmcgd2VyZSBmb3VuZCBbdXJpLCB3c2E6RW5kcG9pbnRSZWZlcmVuY2VdCitCV1NfMjAxOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQldTXzIwMTgsIEFydGlmYWN0OiBUZXN0X0JXU18yMDE4LmNvbXBvc2l0ZV0gLSBbQldTMjAwMjBdIEZvciB0aGUgY2FsbGJhY2sgZWxlbWVudCBvZiBhbiBTQ0Egc2VydmljZSwgdGhlIGJpbmRpbmcgbXVzdCBub3Qgc3BlY2lmeSBhbiBlbmRwb2ludCBhZGRyZXNzIFVSSSBvciBhIFdTLUFkZHJlc3Npbmcgd3NhOkVuZHBvaW50UmVmZXJlbmNlCitCV1NfMjAxOT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogQldTXzIwMTksIEFydGlmYWN0OiBUZXN0X0JXU18yMDE5LmNvbXBvc2l0ZV0gLSBYTUxTY2hlbWEgdmFsaWRhdGlvbiBlcnJvciBvY2N1cmVkIGluOiBUZXN0X0JXU18yMDE5LmNvbXBvc2l0ZSAsbGluZSA9IDM2LCBjb2x1bW4gPSAxMCwgTWVzc2FnZSA9IGN2Yy1jb21wbGV4LXR5cGUuMy4yLjI6IEF0dHJpYnV0ZSAnaW52YWxpZEF0dHJpYnV0ZScgaXMgbm90IGFsbG93ZWQgdG8gYXBwZWFyIGluIGVsZW1lbnQgJ2JpbmRpbmcud3MnLgorQldTXzIwMjA9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb24gW0JXUzIwMDI1XSBVbmFibGUgdG8gZGV0ZXJtaW5lIGRlc3RpbmF0aW9uIGVuZHBvaW50IGZvciBlbmRwb2ludCByZWZlcmVuY2UgKCoqKilFbmRwb2ludFJlZmVyZW5jZTogIFVSSSA9IFRFU1RfQldTXzIwMjBDb21wb25lbnQxI3JlZmVyZW5jZS1iaW5kaW5nKHJlZmVyZW5jZTEvUmVmZXJlbmNlMSkgUkVTT0xWRURfQklORElORyBUYXJnZXQgPSAoKioqKUVuZHBvaW50OgorQldTXzIwMjI9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkFjdGl2YXRpb25FeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5BY3RpdmF0aW9uRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuQWN0aXZhdGlvbkV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkFjdGl2YXRpb25FeGNlcHRpb246IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBDb21wb25lbnQgVEVTVF9CV1NfMjAyMkNvbXBvbmVudDEgUmVmZXJlbmNlIHJlZmVyZW5jZTEgaW50ZXJmYWNlIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBpbnRlcmZhY2Ugb2YgdGhlIHJlZmVyZW5jZSBiaW5kaW5nIFJlZmVyZW5jZTEgLSBDYWxsYmFjayBpbnRlcmZhY2UgZG9lc24ndCBtYXRjaCBhcyBvbmUgb2YgdGhlIGNhbGxiYWNrIGludGVyZmFjZXMgaXMgbnVsbCAtIFsoKioqKUVuZHBvaW50UmVmZXJlbmNlOiAgVVJJID0gVEVTVF9CV1NfMjAyMkNvbXBvbmVudDEjcmVmZXJlbmNlLWJpbmRpbmcocmVmZXJlbmNlMS9SZWZlcmVuY2UxKSBSRVNPTFZFRF9CSU5ESU5HIFRhcmdldCA9ICgqKiopRW5kcG9pbnQ6IF0KK0JXU180MDA4PW9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5BY3RpdmF0aW9uRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLnJ1bnRpbWUuQWN0aXZhdGlvbkV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ydW50aW1lLkFjdGl2YXRpb25FeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EucnVudGltZS5BY3RpdmF0aW9uRXhjZXB0aW9uOiBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogcnBjL2VuY29kZWQgV1NETCBzdHlsZSBub3Qgc3VwcG9ydGVkLiBDb21wb25lbnQgVEVTVF9CV1NfNDAwOENvbXBvbmVudDEgUmVmZXJlbmNlIHJlZmVyZW5jZTEgQmluZGluZyBSZWZlcmVuY2UxCitCV1NfNTAwMz1BIGhlYWRlciByZXByZXNlbnRpbmcgYSBNZXNzYWdlIEFkZHJlc3NpbmcgUHJvcGVydHkgaXMgbm90IHZhbGlkIGFuZCB0aGUgbWVzc2FnZSBjYW5ub3QgYmUgcHJvY2Vzc2VkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3BvbS54bWwgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jYWEvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODdiNzA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3BvbS54bWwKQEAgLTAsMCArMSwxNDIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbXBsaWFuY2UtdGVzdHM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0LWphdmEtY2FhPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgU3BlY2lmaWNhdGlvbiBDb21wbGlhbmNlIFRlc3RzIEphdmEgQ0FBPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPCEtLSBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGdldCB0aGUgbW9kdWxlIHdvcmtpbmcgaW4gRWNsaXBzZSB3aGljaCBkb2Vzbid0IHBpY2sgaXQgdXAgZnJvbSB0aGUgZGVwZW5kZW5jeSBwbHVnaW4gdW5wYWNrIC0tPg0KKyAgICAgICAgICAgIDwhLS0gVGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayBpcyBuZWVkZWQgYXMgcHJlc2VudGx5IHRoZSBzdXJlZmlyZSBwbHVnaW4gd29udCBydW4gdGVzdHMgaW4gYSBkZXBlbmRlbmN5IGphciAtLT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktb3Rlc3RzLXNjYS1qLWNhYS10ZXN0czwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtU05BUFNIT1Q8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1vc2dpLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+IA0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJpbmRpbmctd3MtcnVudGltZS1heGlzMjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1qZXR0eTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+IA0KKw0KKyAgICAgICAgPCEtLSBUaGlzIGlzIG5lZWQgd2hlbiBydW5uaW5nIHdpdGggU3VuIEpESyB3aGljaCBnZXRzIGFuIHVuc3VwcG9ydGVkIG9wZXJhdGlvbiBleGNlcHRpb24gY3JlYXRpbmcgYW4gWE1MU3RyZWFtUmVhZGVyIGZyb20gYSBET01Tb3VyY2UNCisgICAgICAgICAgICAgd2hlbiBUdXNjYW55IGlzIHdyaXRpbmcgYSBwcm9wZXJ0eSB2YWx1ZSAgLS0+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMud29vZHN0b3g8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+d3N0eC1hc2w8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+My4yLjQ8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPg0KKyAgICAgICAgICAgIDxleGNsdXNpb25zPg0KKyAgICAgICAgICAgICAgICA8ZXhjbHVzaW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+c3RheDwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnN0YXgtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICA8L2V4Y2x1c2lvbj4NCisgICAgICAgICAgICA8L2V4Y2x1c2lvbnM+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj40LjU8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisNCisNCisgIDxidWlsZD4NCisgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDxwbHVnaW5zPg0KKw0KKyAgICAgIDxwbHVnaW4+DQorICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgIDxleGNsdWRlcz4NCisgICAgICAgICAgICA8ZXhjbHVkZT4qKi9KQ0FfMTEwMjFfVGVzdENhc2UuamF2YTwvZXhjbHVkZT48IS0tIFRVU0NBTlktMzY2NCAtLT4NCisgICAgICAgICAgIDwvZXhjbHVkZXM+DQorICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgIDwvcGx1Z2luPg0KKw0KKyAgICAgIDxwbHVnaW4+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1kZXBlbmRlbmN5LXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgIDxpZD51bnBhY2s8L2lkPg0KKyAgICAgICAgICAgIDxwaGFzZT5wcm9jZXNzLXRlc3QtcmVzb3VyY2VzPC9waGFzZT4NCisgICAgICAgICAgICA8Z29hbHM+DQorICAgICAgICAgICAgICA8Z29hbD51bnBhY2s8L2dvYWw+DQorICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4NCisgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLWphdmFjYWEtY29udHJpYnV0aW9uczwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgICAgICA8dHlwZT56aXA8L3R5cGU+DQorICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vb2FzaXMtY29udHJpYnV0aW9uczwvb3V0cHV0RGlyZWN0b3J5Pg0KKyAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtPg0KKyAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW90ZXN0cy1zY2Etai1jYWEtdGVzdHM8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICAgICAgPHR5cGU+amFyPC90eXBlPg0KKyAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+Y29tbW9ucy1sb2dnaW5nLnByb3BlcnRpZXMsb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMsdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXM8L2V4Y2x1ZGVzPg0KKyAgICAgICAgICAgICAgICAgICA8b3V0cHV0RGlyZWN0b3J5PiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3Rlc3QtY2xhc3Nlczwvb3V0cHV0RGlyZWN0b3J5Pg0KKyAgICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgPC9hcnRpZmFjdEl0ZW1zPg0KKyAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICA8L2V4ZWN1dGlvbnM+DQorICAgICAgPC9wbHVnaW4+DQorDQorICAgIDwvcGx1Z2lucz4NCisgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNhYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNhYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjE2Zjg1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9vdGVzdC9UdXNjYW55UnVudGltZUJyaWRnZS5qYXZhCkBAIC0wLDAgKzEsMjI0IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0Ow0KKw0KK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7DQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7DQorDQoraW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7DQoraW1wb3J0IGphdmEuaW8uRmlsZVdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsNCitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsNCitpbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7DQorDQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5jb25maWd1cmF0aW9uLk5vZGVDb25maWd1cmF0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuaW1wbC5Ob2RlSW1wbDsNCisNCitpbXBvcnQgdGVzdENsaWVudC5UZXN0RXhjZXB0aW9uX0V4Y2VwdGlvbjsNCitpbXBvcnQgY2xpZW50LlJ1bnRpbWVCcmlkZ2U7DQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1bnRpbWUgQnJpZGdlIGZvciB0aGUgQXBhY2hlIFR1c2NhbnkgU0NBIHJ1bnRpbWUgKHZlcnNpb24gMi54KQ0KKyAqDQorICovDQorcHVibGljIGNsYXNzIFR1c2NhbnlSdW50aW1lQnJpZGdlIGltcGxlbWVudHMgUnVudGltZUJyaWRnZSB7DQorDQorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVFJJQlVUSU9OX0xPQ0FUSU9OX1BST1BLRVkgPSAiT0FTSVNfVEVTVEVOVl9DT05UUklCVVRJT05fTE9DQVRJT04iOw0KKw0KKyAgICBwcm90ZWN0ZWQgTm9kZUZhY3RvcnkgbGF1bmNoZXI7DQorICAgIHByb3RlY3RlZCBOb2RlIG5vZGU7DQorICAgIHByb3RlY3RlZCBQcm9wZXJ0aWVzIGV4cGVjdGVkRXJyb3JNZXNzYWdlczsNCisNCisgICAgcHVibGljIFR1c2NhbnlSdW50aW1lQnJpZGdlKCkgew0KKyAgICAgICAgLy8gcmVhZCB0ZXN0IGVycm9yIG1hcHBpbmcNCisgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlcyA9IG5ldyBQcm9wZXJ0aWVzKCk7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIElucHV0U3RyZWFtIHByb3BlcnRpZXNTdHJlYW0gPSB0aGlzLmdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIik7DQorICAgICAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzLmxvYWQocHJvcGVydGllc1N0cmVhbSk7DQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7ICAgDQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gcmVhZCBvYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMgZmlsZSIpOw0KKyAgICAgICAgfSANCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydENvbnRyaWJ1dGlvbihTdHJpbmcgY29tcG9zaXRlTmFtZSwgU3RyaW5nIGNvbnRyaWJ1dGlvbkxvY2F0aW9uLCBTdHJpbmdbXSBjb250cmlidXRpb25OYW1lcykgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIC8vIFR1c2Nhbnkgc3BlY2lmaWMgY29kZSB3aGljaCBzdGFydHMgdGhlIGNvbnRyaWJ1dGlvbihzKSBob2xkaW5nIHRoZSB0ZXN0DQorICAgICAgICAgICAgbGF1bmNoZXIgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KKw0KKyAgICAgICAgICAgIENvbnRyaWJ1dGlvbltdIGNvbnRyaWJ1dGlvbnMgPSBuZXcgQ29udHJpYnV0aW9uW2NvbnRyaWJ1dGlvbk5hbWVzLmxlbmd0aF07DQorICAgICAgICAgICAgU3RyaW5nW10gY29udHJpYnV0aW9uVVJJcyA9IGdldENvbnRyaWJ1dGlvblVSSXMoY29udHJpYnV0aW9uTG9jYXRpb24sIGNvbnRyaWJ1dGlvbk5hbWVzKTsNCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHsNCisgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uc1tpXSA9IG5ldyBDb250cmlidXRpb24oY29udHJpYnV0aW9uTmFtZXNbaV0sIGNvbnRyaWJ1dGlvblVSSXNbaV0pOw0KKyAgICAgICAgICAgIH0gLy8gZW5kIGZvcg0KKw0KKyAgICAgICAgICAgIG5vZGUgPSBsYXVuY2hlci5jcmVhdGVOb2RlKGNvbXBvc2l0ZU5hbWUsIGNvbnRyaWJ1dGlvbnMpOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIC8vIFNldCB0aGUgZG9tYWluIFVSSSBmb3IgdGhlIG5vZGUgYXMgSkNBXzkwMTYgdGVzdHMgZm9yIHRoaXMgZG9tYWluIG5hbWUNCisgICAgICAgICAgICBOb2RlQ29uZmlndXJhdGlvbiBub2RlQ29uZmlndXJhdGlvbiA9ICgoTm9kZUltcGwpbm9kZSkuZ2V0Q29uZmlndXJhdGlvbigpOw0KKyAgICAgICAgICAgIG5vZGVDb25maWd1cmF0aW9uLnNldERvbWFpblVSSSgiaHR0cDovL0RvbWFpbjEiKTsNCisgICAgICAgICAgICANCisgICAgICAgICAgICAvLyBTdGFydCB0aGUgbm9kZQ0KKyAgICAgICAgICAgIG5vZGUuc3RhcnQoKTsNCisgICAgICAgICAgICANCisgICAgICAgICAgICAvLyBGb3IgZGVidWdnaW5nIA0KKyAgICAgICAgICAgIC8vIHByaW50IG91dCB0aGUgY29tcG9zaXRlcyB0aGF0IGhhdmUgYmVlbiByZWFkIGluIHN1Y2Nlc3MgY2FzZXMNCisgICAgICAgICAgICAvLyBTeXN0ZW0ub3V0LnByaW50bG4oKChOb2RlSW1wbClub2RlKS5kdW1wRG9tYWluQ29tcG9zaXRlKCkpOw0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZS5nZXRNZXNzYWdlKCkpOw0KKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7ICAgICAgDQorICAgICAgICAgICAgdGhyb3cgZTsNCisgICAgICAgIH0gLy8gZW5kIHRyeQ0KKw0KKyAgICAgICAgcmV0dXJuIHRydWU7DQorICAgIH0gLy8gZW5kIG1ldGhvZCBzdGFydENvbnRyaWJ1dGlvbg0KKw0KKyAgICAvKioNCisgICAgICogR2V0cyB0aGUgbG9jYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbnMgYXMgVVJJcw0KKyAgICAgKiBAcGFyYW0gY29udHJpYnV0aW9uTG9jYXRpb24gLSBhIGxvY2F0aW9uIHBhdHRlcm4gVVJJLCB3aGljaCBjb250YWlucyBvbmUgb3IgbW9yZSAiJTEiDQorICAgICAqIHN1YnN0cmluZ3MsIHdoaWNoIGFyZSBzdWJzdGl0dXRlZCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjb250cmlidXRpb24gdG8gZ2V0IHRoZSBVUkkgb2YNCisgICAgICogdGhlIGNvbnRyaWJ1dGlvbg0KKyAgICAgKiBAcmV0dXJuIHRoZSBjb250cmlidXRpb24gbG9jYXRpb25zIGFzIGFuIGFycmF5IG9mIFN0cmluZ3MNCisgICAgICovDQorICAgIHByb3RlY3RlZCBTdHJpbmdbXSBnZXRDb250cmlidXRpb25VUklzKFN0cmluZyBjb250cmlidXRpb25Mb2NhdGlvbiwgU3RyaW5nW10gY29udHJpYnV0aW9uTmFtZXMpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgU3RyaW5nW10gbG9jYXRpb25zID0gbmV3IFN0cmluZ1tjb250cmlidXRpb25OYW1lcy5sZW5ndGhdOw0KKw0KKyAgICAgICAgaWYgKGxvY2F0aW9ucyAhPSBudWxsICYmIGNvbnRyaWJ1dGlvbkxvY2F0aW9uICE9IG51bGwpIHsNCisNCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGg7IGkrKykgew0KKyAgICAgICAgICAgICAgICBTdHJpbmcgYUxvY2F0aW9uID0gY29udHJpYnV0aW9uTG9jYXRpb24ucmVwbGFjZUFsbCgiJTEiLCBjb250cmlidXRpb25OYW1lc1tpXSk7DQorDQorICAgICAgICAgICAgICAgIGxvY2F0aW9uc1tpXSA9IGFMb2NhdGlvbjsNCisgICAgICAgICAgICB9IC8vIGVuZCBmb3IgICAgCSAgCQ0KKyAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICBpZiAobG9jYXRpb25zID09IG51bGwpIHsNCisgICAgICAgICAgICAgICAgLy8gTm8gY29udHJpYnV0aW9uIHNwZWNpZmllZCAtIHRocm93IGFuIEV4Y2VwdGlvbg0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmFibGUgdG8gc3RhcnQgU0NBIHJ1bnRpbWUgLSBubyBjb250cmlidXRpb24gc3VwcGxpZWQgLSBlcnJvciIpOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgIC8vIE5vIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbiBzdXBwbGllZCAtIHRocm93IGFuIEV4Y2VwdGlvbg0KKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJVbmFibGUgdG8gc3RhcnQgU0NBIHJ1bnRpbWUgLSBubyBjb250cmlidXRpb24gbG9jYXRpb24gc3VwcGxpZWQgLSBlcnJvciIpOw0KKyAgICAgICAgICAgIH0gLy8gZW5kIGlmIA0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisNCisgICAgICAgIHJldHVybiBsb2NhdGlvbnM7DQorICAgIH0gLy8gZW5kIGdldENvbnRyaWJ1dGlvblVSSQ0KKw0KKyAgICBwdWJsaWMgdm9pZCBzdG9wQ29udHJpYnV0aW9uKCkgew0KKyAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgew0KKyAgICAgICAgICAgIG5vZGUuc3RvcCgpOw0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisgICAgICAgIGlmIChsYXVuY2hlciAhPSBudWxsKSB7DQorICAgICAgICAgICAgbGF1bmNoZXIuZGVzdHJveSgpOw0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisgICAgfSAvLyBlbmQgbWV0aG9kIHN0b3BDb250cmlidXRpb24NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIGNoZWNrRXJyb3IoU3RyaW5nIHRlc3ROYW1lLCBUaHJvd2FibGUgZXgpIHRocm93cyBUaHJvd2FibGUgeyANCisgICAgICAgICAgICAgIA0KKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZSA9IGV4cGVjdGVkRXJyb3JNZXNzYWdlcy5nZXRQcm9wZXJ0eSh0ZXN0TmFtZSk7DQorICAgICAgICBTdHJpbmcgcmVjZWl2ZWRNZXNzYWdlID0gZ2V0RXJyb3JNZXNzYWdlKGV4KTsvL2V4LmdldE1lc3NhZ2UoKTsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZSA9PSBudWxsKXsNCisgICAgICAgICAgICB3cml0ZU1pc3NpbmdNZXNzYWdlKHRlc3ROYW1lLCBleCk7DQorICAgICAgICAgICAgZmFpbCgiTnVsbCBleHBlY3RlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSArIA0KKyAgICAgICAgICAgICAgICAgIlBsZWFzZSBhZGQgbWVzc2FnZSB0byBvYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMiKTsNCisgICAgICAgIH0gLy8gZW5kIGlmDQorICAgICAgICANCisgICAgICAgIGlmIChyZWNlaXZlZE1lc3NhZ2UgPT0gbnVsbCl7DQorICAgICAgICAgICAgZXgucHJpbnRTdGFja1RyYWNlKCk7DQorICAgICAgICAgICAgZmFpbCgiTnVsbCByZWNlaXZlZCBlcnJvciBtZXNzYWdlIGZvciB0ZXN0ICIgKyB0ZXN0TmFtZSk7DQorICAgICAgICB9IC8vIGVuZCBpZg0KKw0KKyAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZS5zdGFydHNXaXRoKCIqIikpIHsNCisgICAgICAgICAgICAvLyBhbGxvdyB1c2luZyAqIHRvIGlnbm9yZSBhIG1lc3NhZ2UgY29tcGFyaXNvbg0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgLy8gRGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBtZXNzYWdlIGhhcyB2YXJpYWJsZSBwYXJ0cyB3aXRoaW4gaXQNCisgICAgICAgIC8vIG1hcmtlZCB3aXRoIHRoZSBjaGFyYWN0ZXJzICoqKi4gSGVyZSB3ZSB0b2tlbml6ZSB0aGUgZXhwZWN0ZWQgc3RyaW5nIA0KKyAgICAgICAgLy8gYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIGluZGl2aWR1YWwgcGFydHMgYXJlIHByZXNlbnQgaW4gdGhlIHJlc3VsdHMgc3RyaW5nDQorICAgICAgICBTdHJpbmcgZXhwZWN0ZWRNZXNzYWdlUGFydHNbXSA9IGV4cGVjdGVkTWVzc2FnZS5zcGxpdCgiXFwqXFwqXFwqIik7DQorICAgICAgICANCisgICAgICAgIGlmIChleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGggPiAxKXsNCisgICAgICAgICAgICBpbnQgZm91bmRQYXJ0cyA9IDA7DQorICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGV4cGVjdGVkTWVzc2FnZVBhcnRzLmxlbmd0aDsgaSsrKXsNCisgICAgICAgICAgICAgICAgaWYgKHJlY2VpdmVkTWVzc2FnZS5pbmRleE9mKGV4cGVjdGVkTWVzc2FnZVBhcnRzW2ldKSA+IC0xICl7DQorICAgICAgICAgICAgICAgICAgICBmb3VuZFBhcnRzKys7DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgaWYgKGZvdW5kUGFydHMgPT0gZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoKXsNCisgICAgICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIA0KKyAgICAgICAgLy8gRGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZSBlbmQgb2YgdGhlIG1lc3NhZ2UgaXMgdmFyaWFibGUgKGVnIGNvbnRhaW5zIGFic29sdXRlIGZpbGVuYW1lcykgDQorICAgICAgICAvLyBhbmQgd2hlcmUgdGhlIG9ubHkgcmVsZXZhbnQgcGFydCBpcyB0aGUgc3RhcnQgb2YgdGhlIG1lc3NhZ2UgLSBpbiB0aGlzIGNhc2UgdGhlIGV4cGVjdGVkDQorICAgICAgICAvLyBtZXNzYWdlIG9ubHkgY29udGFpbnMgdGhlIHN0ZW0gc2VjdGlvbiB3aGljaCBpcyB1bmNoYW5naW5nLi4uDQorICAgICAgICBpZiggcmVjZWl2ZWRNZXNzYWdlLmxlbmd0aCgpID4gZXhwZWN0ZWRNZXNzYWdlLmxlbmd0aCgpICkgew0KKyAgICAgICAgICAgIC8vIFRydW5jYXRlIHRoZSByZWNlaXZlZCBtZXNzYWdlIHRvIHRoZSBsZW5ndGggb2YgdGhlIGV4cGVjdGVkIG1lc3NhZ2UNCisgICAgICAgICAgICByZWNlaXZlZE1lc3NhZ2UgPSByZWNlaXZlZE1lc3NhZ2Uuc3Vic3RyaW5nKDAsIGV4cGVjdGVkTWVzc2FnZS5sZW5ndGgoKSApOw0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisNCisgICAgICAgIGlmICghZXhwZWN0ZWRNZXNzYWdlLmVxdWFscyhyZWNlaXZlZE1lc3NhZ2UpKSB7DQorICAgICAgICAgICAgd3JpdGVJbmNvcnJlY3RNZXNzYWdlKHRlc3ROYW1lLCBleHBlY3RlZE1lc3NhZ2UsIHJlY2VpdmVkTWVzc2FnZSk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIGFzc2VydEVxdWFscyggZXhwZWN0ZWRNZXNzYWdlLCByZWNlaXZlZE1lc3NhZ2UgKTsNCisgICAgICAgIA0KKyAgICAgICAgcmV0dXJuOw0KKyAgICAgICANCisgICAgfQ0KKw0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZU1pc3NpbmdNZXNzYWdlKFN0cmluZyB0ZXN0TmFtZSwgVGhyb3dhYmxlIGV4KSB7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIG91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigidGFyZ2V0L09UZXN0TWlzc2luZ01zZ3MudHh0IiwgdHJ1ZSkpOw0KKyAgICAgICAgICAgIG91dC53cml0ZSh0ZXN0TmFtZSArICI9KiIpOw0KKyAgICAgICAgICAgIG91dC5uZXdMaW5lKCk7DQorICAgICAgICAgICAgb3V0LmNsb3NlKCk7DQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQorICAgICAgICB9IA0KKyAgICB9DQorDQorICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlSW5jb3JyZWN0TWVzc2FnZShTdHJpbmcgdGVzdE5hbWUsIFN0cmluZyBleHBlY3RlZCwgU3RyaW5nIHJlY2VpdmVkKSB7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIEJ1ZmZlcmVkV3JpdGVyIG91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihuZXcgRmlsZVdyaXRlcigidGFyZ2V0L09UZXN0SW5jb3JyZWN0TXNncy50eHQiLCB0cnVlKSk7DQorICAgICAgICAgICAgb3V0LndyaXRlKHRlc3ROYW1lKTsgb3V0Lm5ld0xpbmUoKTsNCisgICAgICAgICAgICBvdXQud3JpdGUoIiAgICAiICsgZXhwZWN0ZWQpOyBvdXQubmV3TGluZSgpOw0KKyAgICAgICAgICAgIG91dC53cml0ZSgiICAgICIgKyByZWNlaXZlZCk7IG91dC5uZXdMaW5lKCk7DQorICAgICAgICAgICAgb3V0LmNsb3NlKCk7DQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7DQorICAgICAgICB9IA0KKyAgICB9DQorDQorICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKFRocm93YWJsZSBleCkgew0KKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG51bGw7DQorICAgICAgICANCisgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIFRlc3RFeGNlcHRpb25fRXhjZXB0aW9uKSB7DQorICAgICAgICAgICAgVGVzdEV4Y2VwdGlvbl9FeGNlcHRpb24gdGUgPSAoVGVzdEV4Y2VwdGlvbl9FeGNlcHRpb24pIGV4Ow0KKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHRlLmdldEZhdWx0SW5mbygpLmdldE1lc3NhZ2UoKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXguZ2V0TWVzc2FnZSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlOw0KKyAgICB9DQorfSAvLyBlbmQgY2xhc3MgVHVzY2FueVJ1bnRpbWVCcmlkZ2UNCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jYWEvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjI0NjQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpAQCAtMCwwICsxLDMwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorDQorIyBPQVNJUyBTQ0EgQXNzZW1ibHkgdGVzdCBwcm9wZXJ0aWVzDQorIyBUaGUgaW1wbGVtZW50YXRpb24gdHlwZSB0byB1c2UgZm9yIEFzc2VtYmx5IHRlc3Qgc3VpdGUNCisjIG9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1CUEVMDQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5sYW5nPVBPSk8NCisNCisjIFRoZSBjbGFzcyB0byB1c2UgYXMgdGhlIFJ1bnRpbWUgQnJpZGdlIGZvciB0aGUgU0NBIHJ1bnRpbWUgdW5kZXIgdGVzdA0KKyNvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LnJ1bnRpbWVfYnJpZGdlPW9yZy5hcGFjaGUudHVzY2FueS5zY2Eub3Rlc3QuVHVzY2FueU9TR2lSdW50aW1lQnJpZGdlDQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlSdW50aW1lQnJpZGdlDQorDQorIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgZm9yIHRoZSB0ZXN0IHN1aXRlDQorIyAlMSByZXByZXNlbnRzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5hbWUgb2YgZWFjaCBjb250cmlidXRpb24gaW50byB0aGUgbG9jYXRpb24gVVJJDQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5jb250cmlidXRpb24ubG9jYXRpb249Li90YXJnZXQvb2FzaXMtY29udHJpYnV0aW9ucy8lMS90YXJnZXQvJTEuemlwDQorDQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2FhL3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNhYS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTgwZmZlNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNhYS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKQEAgLTAsMCArMSw3MCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyANCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyANCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KK0pDQV8xMDAxPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuSW50cm9zcGVjdGlvbkV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbnRlcmZhY2VkZWYuSW52YWxpZENhbGxiYWNrRXhjZXB0aW9uOiBDYWxsYmFjayBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2VSZW1vdGVMb2NhbENhbGxiYWNrIG11c3QgYmUgcmVtb3RhYmxlIG9uIHJlbW90YWJsZSBpbnRlcmZhY2Ugb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5TZXJ2aWNlUmVtb3RlTG9jYWwNCitKQ0FfMTAwMj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkludHJvc3BlY3Rpb25FeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW50ZXJmYWNlZGVmLkludmFsaWRDYWxsYmFja0V4Y2VwdGlvbjogQ2FsbGJhY2tvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2VMb2NhbFJlbW90ZUNhbGxiYWNrIG11c3Qgbm90IGJlIHJlbW90YWJsZSBvbiBsb2NhbCBpbnRlcmZhY2Ugb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5TZXJ2aWNlTG9jYWxSZW1vdGUNCitKQ0FfMjAwMT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5PdmVybG9hZGVkT3BlcmF0aW9uRXhjZXB0aW9uOiBbSkNBMjAwMDFdIENhbm5vdCBvdmVybG9hZCBvcGVyYXRpb24gb3BlcmF0aW9uMSBvbiBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2UxT3ZlcmxvYWQgYXMgaXQgaXMgYSBAUmVtb3RhYmxlIGludGVyZmFjZQ0KK0pDQV8zMDAxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBKQ0FfMzAwMSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9KQ0FfMzAwMV0gLSBDbGFzcyBOb3QgRm91bmQgRXhjZXB0aW9uOiBTZXJ2aWNlMQ0KK0pDQV8zMDAyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBKQ0FfMzAwMiwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9KQ0FfMzAwMl0gLSBDbGFzcyBOb3QgRm91bmQgRXhjZXB0aW9uOiBTZXJ2aWNlMQ0KK0pDQV8zMDAzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBKQ0FfMzAwMywgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9KQ0FfMzAwM10gLSBDbGFzcyBOb3QgRm91bmQgRXhjZXB0aW9uOiBTZXJ2aWNlM0NhbGxiYWNrDQorSkNBXzMwMDQ9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEpDQV8zMDA0LCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV8zMDA0XSAtIENsYXNzIE5vdCBGb3VuZCBFeGNlcHRpb246IFNlcnZpY2UzQ2FsbGJhY2sNCitKQ0FfMzAwNj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9KQ0FfMzAwNkNvbXBvbmVudDJdIC0gW0FTTTUwMDA0LEpDQTMwMDAyLEpDSTgwMDAxXSBDb21wb25lbnQgc2VydmljZSBpbnRlcmZhY2UgaW5jb21wYXRpYmxlIHdpdGggaW1wbGVtZW50YXRpb24gc2VydmljZSBpbnRlcmZhY2U6IENvbXBvbmVudCA9IFRFU1RfSkNBXzMwMDZDb21wb25lbnQyIFNlcnZpY2UgPSBTZXJ2aWNlM1dpdGhDYWxsYmFjayBDYWxsYmFjayBvcGVyYXRpb24gbm90IGZvdW5kIG9uIHRhcmdldA0KK0pDQV8zMDA3PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0pDQV8zMDA3Q29tcG9uZW50MV0gLSBbSkNBMzAwMDEsSkNBMzAwMDIsSkNBMzAwMDMsSkNBOTAwNDZdIENvbXBvbmVudCByZWZlcmVuY2UgaW50ZXJmYWNlIGluY29tcGF0aWJsZSB3aXRoIGltcGxlbWVudGF0aW9uIHJlZmVyZW5jZSBpbnRlcmZhY2U6IENvbXBvbmVudCA9IFRFU1RfSkNBXzMwMDdDb21wb25lbnQxIFJlZmVyZW5jZSA9IHJlZmVyZW5jZTEgDQorSkNBXzMwMDg9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEpDQV8zMDA4LCBBcnRpZmFjdDogVGVzdF9KQ0FfMzAwOC5jb21wb3NpdGVdIC0gWE1MU2NoZW1hIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJlZCBpbjogVGVzdF9KQ0FfMzAwOC5jb21wb3NpdGUgLGxpbmUgPSAqKiosIGNvbHVtbiA9ICoqKiwgTWVzc2FnZSA9IGN2Yy1jb21wbGV4LXR5cGUuMy4yLjI6IEF0dHJpYnV0ZSAnb29wcycgaXMgbm90IGFsbG93ZWQgdG8gYXBwZWFyIGluIGVsZW1lbnQgJ2ludGVyZmFjZS5qYXZhJy4NCitKQ0FfMzAwOT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmludGVyZmFjZWRlZi5JbnZhbGlkQW5ub3RhdGlvbkV4Y2VwdGlvbjogW0pDQTMwMDA1XSBAUmVtb3RhYmxlIGFubm90YXRpb24gcHJlc2VudCBpbiBhIGludGVyZmFjZSBtYXJrZWQgYXMgbm90IHJlbW90YWJsZSBpbiB0aGUgU0NETA0KK0pDQV8zMDExPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBKQ0FfMzAxMSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9KQ0FfMzAxMV0gLSBbSkNBMzAwMDZdIEZvcmJpZGRlbiBhbm5vdGF0aW9uIGludGVyZmFjZSBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlByb3BlcnR5IGZvdW5kIG9uIHNlcnZpY2UgaW50ZXJmYWNlIGluIGNsYXNzIG9yZy5vYXNpc29wZW4uc2NhLnRlc3QuSkNBMzAxMVNlcnZpY2UNCitKQ0FfMzAxMj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogSkNBXzMwMTIsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfSkNBXzMwMTJdIC0gW0pDQTMwMDA3XSBGb3JiaWRkZW4gYW5ub3RhdGlvbiBpbnRlcmZhY2Ugb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5Qcm9wZXJ0eSBmb3VuZCBvbiBjYWxsYmFjayBpbnRlcmZhY2UgaW4gY2xhc3Mgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5KQ0EzMDEyU2VydmljZTNDYWxsYmFjaw0KK0pDQV8zMDEzPVRlc3Qgc2VydmljZSBnb3QgYW4gZXhjZXB0aW9uIGR1cmluZyBleGVjdXRpb246IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uIFVuYWJsZSB0byBiaW5kIFtdIC0gPSBVbmFibGUgdG8gbWF0Y2ggdGhlIGVuZHBvaW50IHJlZmVyZW5jZSAoKioqKUVuZHBvaW50UmVmZXJlbmNlOiAgVVJJID0gVEVTVF9KQ0FfMzAxM0NvbXBvbmVudDEjcmVmZXJlbmNlKHJlZmVyZW5jZTEpIFdJUkVEX1RBUkdFVF9OT1RfRk9VTkQgVGFyZ2V0ID0gKCoqKilFbmRwb2ludDogIFVSSSA9IFRFU1RfSkNBXzMwMTNDb21wb25lbnQyI3NlcnZpY2UoU2VydmljZU9uZVdheSkgW1VucmVzb2x2ZWRdIHdpdGggdGhlIHBvbGljeSBvZiB0aGUgc2VydmljZSB0byB3aGljaCBpdCByZWZlcnMsIG1hdGNoaW5nIHByb2Nlc3Mgd2FzIE1hdGNoIHBvbGljeSBvZiAoKioqKUVuZHBvaW50UmVmZXJlbmNlOiAgVVJJID0gVEVTVF9KQ0FfMzAxM0NvbXBvbmVudDEjcmVmZXJlbmNlKHJlZmVyZW5jZTEpIFdJUkVEX1RBUkdFVF9OT1RfRk9VTkQgVGFyZ2V0ID0gKCoqKilFbmRwb2ludDogIFVSSSA9IFRFU1RfSkNBXzMwMTNDb21wb25lbnQyI3NlcnZpY2UoU2VydmljZU9uZVdheSkgW1VucmVzb2x2ZWRdIHRvICgqKiopRW5kcG9pbnQ6ICBVUkkgPSBURVNUX0pDQV8zMDEzQ29tcG9uZW50MiNzZXJ2aWNlLWJpbmRpbmcoU2VydmljZU9uZVdheS9TZXJ2aWNlT25lV2F5KSBNYXRjaCBiZWNhdXNlIHRoZXJlIGFyZSBubyBpbnRlbnRzIG9yIHBvbGljaWVzIHx8fE1hdGNoIGludGVyZmFjZSBvZiAoKioqKUVuZHBvaW50UmVmZXJlbmNlOiAgVVJJID0gVEVTVF9KQ0FfMzAxM0NvbXBvbmVudDEjcmVmZXJlbmNlKHJlZmVyZW5jZTEpIFdJUkVEX1RBUkdFVF9OT1RfRk9VTkQgVGFyZ2V0ID0gKCoqKilFbmRwb2ludDogIFVSSSA9IFRFU1RfSkNBXzMwMTNDb21wb25lbnQyI3NlcnZpY2UoU2VydmljZU9uZVdheSkgW1VucmVzb2x2ZWRdIHRvICgqKiopRW5kcG9pbnQ6ICBVUkkgPSBURVNUX0pDQV8zMDEzQ29tcG9uZW50MiNzZXJ2aWNlLWJpbmRpbmcoU2VydmljZU9uZVdheS9TZXJ2aWNlT25lV2F5KSBvcGVyYXRpb25zIG9uZS13YXkgbm90IHRoZSBzYW1lLCBzb3VyY2UgPSBmYWxzZSB0YXJnZXQgPSB0cnVlfHx8T3BlcmF0aW9ucyBjYWxsZWQgaW5vbmx5MSBhcmUgbm90IGNvbXBhdGlibGV8fHxNYXRjaCBmYWlsZWQgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIGNvbnRyYWN0IG1hcHBlciBmYWlsZWQgfHx8DQorSkNBXzMwMTQ9VGVzdCBzZXJ2aWNlIGdvdCBhbiBleGNlcHRpb24gZHVyaW5nIGV4ZWN1dGlvbjogb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb24gVW5hYmxlIHRvIGJpbmQgW10gLSA9IFVuYWJsZSB0byBtYXRjaCB0aGUgZW5kcG9pbnQgcmVmZXJlbmNlICgqKiopRW5kcG9pbnRSZWZlcmVuY2U6ICBVUkkgPSBURVNUX0pDQV8zMDE0Q29tcG9uZW50MSNyZWZlcmVuY2UocmVmZXJlbmNlMSkgV0lSRURfVEFSR0VUX05PVF9GT1VORCBUYXJnZXQgPSAoKioqKUVuZHBvaW50OiAgVVJJID0gVEVTVF9KQ0FfMzAxNENvbXBvbmVudDIjc2VydmljZShTZXJ2aWNlM09wZXJhdGlvbnNXU0RMKSBbVW5yZXNvbHZlZF0gd2l0aCB0aGUgcG9saWN5IG9mIHRoZSBzZXJ2aWNlIHRvIHdoaWNoIGl0IHJlZmVycywgbWF0Y2hpbmcgcHJvY2VzcyB3YXMgTWF0Y2ggcG9saWN5IG9mICgqKiopRW5kcG9pbnRSZWZlcmVuY2U6ICBVUkkgPSBURVNUX0pDQV8zMDE0Q29tcG9uZW50MSNyZWZlcmVuY2UocmVmZXJlbmNlMSkgV0lSRURfVEFSR0VUX05PVF9GT1VORCBUYXJnZXQgPSAoKioqKUVuZHBvaW50OiAgVVJJID0gVEVTVF9KQ0FfMzAxNENvbXBvbmVudDIjc2VydmljZShTZXJ2aWNlM09wZXJhdGlvbnNXU0RMKSBbVW5yZXNvbHZlZF0gdG8gKCoqKilFbmRwb2ludDogIFVSSSA9IFRFU1RfSkNBXzMwMTRDb21wb25lbnQyI3NlcnZpY2UtYmluZGluZyhTZXJ2aWNlM09wZXJhdGlvbnNXU0RML1NlcnZpY2UzT3BlcmF0aW9uc1dTREwpIE1hdGNoIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGludGVudHMgb3IgcG9saWNpZXMgfHx8TWF0Y2ggaW50ZXJmYWNlIG9mICgqKiopRW5kcG9pbnRSZWZlcmVuY2U6ICBVUkkgPSBURVNUX0pDQV8zMDE0Q29tcG9uZW50MSNyZWZlcmVuY2UocmVmZXJlbmNlMSkgV0lSRURfVEFSR0VUX05PVF9GT1VORCBUYXJnZXQgPSAoKioqKUVuZHBvaW50OiAgVVJJID0gVEVTVF9KQ0FfMzAxNENvbXBvbmVudDIjc2VydmljZShTZXJ2aWNlM09wZXJhdGlvbnNXU0RMKSBbVW5yZXNvbHZlZF0gdG8gKCoqKilFbmRwb2ludDogIFVSSSA9IFRFU1RfSkNBXzMwMTRDb21wb25lbnQyI3NlcnZpY2UtYmluZGluZyhTZXJ2aWNlM09wZXJhdGlvbnNXU0RML1NlcnZpY2UzT3BlcmF0aW9uc1dTREwpIE9wZXJhdGlvbiBvcGVyYXRpb24zIG5vdCBmb3VuZCBvbiB0YXJnZXR8fHxNYXRjaCBmYWlsZWQgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIGNvbnRyYWN0IG1hcHBlciBmYWlsZWQgfHx8DQorSkNBXzcwMDQ9VGVzdCBzZXJ2aWNlIGdvdCBhbiBleGNlcHRpb24gZHVyaW5nIGV4ZWN1dGlvbjogb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb24gVW5hYmxlIHRvIGJpbmQgW10gLSA9IFVuYWJsZSB0byBtYXRjaCB0aGUgZW5kcG9pbnQgcmVmZXJlbmNlICgqKiopRW5kcG9pbnRSZWZlcmVuY2U6ICBVUkkgPSBUZXN0Q2xpZW50I3JlZmVyZW5jZShyZWZlcmVuY2UxKSBXSVJFRF9UQVJHRVRfTk9UX0ZPVU5EIFRhcmdldCA9ICgqKiopRW5kcG9pbnQ6ICBVUkkgPSBURVNUX0pDQV83MDA0Q29tcG9uZW50MSNzZXJ2aWNlKFNlcnZpY2UxQXN5bmNTZXJ2ZXJFcnJvcikgW1VucmVzb2x2ZWRdIHdpdGggdGhlIHBvbGljeSBvZiB0aGUgc2VydmljZSB0byB3aGljaCBpdCByZWZlcnMsIG1hdGNoaW5nIHByb2Nlc3Mgd2FzIE1hdGNoIHBvbGljeSBvZiAoKioqKUVuZHBvaW50UmVmZXJlbmNlOiAgVVJJID0gVGVzdENsaWVudCNyZWZlcmVuY2UocmVmZXJlbmNlMSkgV0lSRURfVEFSR0VUX05PVF9GT1VORCBUYXJnZXQgPSAoKioqKUVuZHBvaW50OiAgVVJJID0gVEVTVF9KQ0FfNzAwNENvbXBvbmVudDEjc2VydmljZShTZXJ2aWNlMUFzeW5jU2VydmVyRXJyb3IpIFtVbnJlc29sdmVkXSB0byAoKioqKUVuZHBvaW50OiAgVVJJID0gVEVTVF9KQ0FfNzAwNENvbXBvbmVudDEjc2VydmljZS1iaW5kaW5nKFNlcnZpY2UxQXN5bmNTZXJ2ZXJFcnJvci9TZXJ2aWNlMUFzeW5jU2VydmVyRXJyb3IpIE1hdGNoIGJlY2F1c2UgdGhlcmUgYXJlIG5vIGludGVudHMgb3IgcG9saWNpZXMgfHx8TWF0Y2ggaW50ZXJmYWNlIG9mICgqKiopRW5kcG9pbnRSZWZlcmVuY2U6ICBVUkkgPSBUZXN0Q2xpZW50I3JlZmVyZW5jZShyZWZlcmVuY2UxKSBXSVJFRF9UQVJHRVRfTk9UX0ZPVU5EIFRhcmdldCA9ICgqKiopRW5kcG9pbnQ6ICBVUkkgPSBURVNUX0pDQV83MDA0Q29tcG9uZW50MSNzZXJ2aWNlKFNlcnZpY2UxQXN5bmNTZXJ2ZXJFcnJvcikgW1VucmVzb2x2ZWRdIHRvICgqKiopRW5kcG9pbnQ6ICBVUkkgPSBURVNUX0pDQV83MDA0Q29tcG9uZW50MSNzZXJ2aWNlLWJpbmRpbmcoU2VydmljZTFBc3luY1NlcnZlckVycm9yL1NlcnZpY2UxQXN5bmNTZXJ2ZXJFcnJvcikgT3BlcmF0aW9uIG9wZXJhdGlvbjEgbm90IGZvdW5kIG9uIHRhcmdldHx8fE1hdGNoIGZhaWxlZCBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgY29udHJhY3QgbWFwcGVyIGZhaWxlZCB8fHwNCitKQ0FfMTAwMDE9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuSWxsZWdhbFByb3BlcnR5RXhjZXB0aW9uOiBbSkNBOTAwMDFdIEFyZ3VtZW50IDEgb2YgbWV0aG9kIG9wZXJhdGlvbjEgaW4gY2xhc3MgY2xhc3Mgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZEFubm90YXRpb24gY2FuIG5vdCBiZSBhIFByb3BlcnR5DQorSkNBXzEwMDAyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBKQ0FfMTAwMDIsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfSkNBXzEwMDAyXSAtIFtKQ0E5MDAyXSBTQ0EgYW5ub3RhdGlvbnMgYXJlIG5vdCBwZXJtaXR0ZWQgb24gc3RhdGljIG1lbWJlcnM6IG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFTdGENCitKQ0FfMTAwMDM9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IEpDQV8xMDAwMywgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9KQ0FfMTAwMDNdIC0gW0pDQTkwMDJdIFNDQSBhbm5vdGF0aW9ucyBhcmUgbm90IHBlcm1pdHRlZCBvbiBzdGF0aWMgbWVtYmVyczogb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMVN0YQ0KK0pDQV8xMDAwND1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5JbGxlZ2FsQ2FsbGJhY2tSZWZlcmVuY2VFeGNlcHRpb246IFtKQ0E5MDA0Nl0gQENhbGxiYWNrIG9uIGZpZWxkIG9mIG1ldGhvZCBtdXN0IG5vdCBoYXZlIGFueSBwYXJhbWV0ZXJzDQorSkNBXzEwMDA2PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLkludmFsaWRDb25zdHJ1Y3RvckV4Y2VwdGlvbjogSkNBOTAwMDMgY29uc3RydWN0b3IgcGFyYW1ldGVycyBmb3IgY2xhc3Mgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZENvbnN0ckltcGwgbXVzdCBoYXZlIEBQcm9wZXJ0eSBvciBAUmVmZXJlbmNlIGFubm90YXRpb24NCitKQ0FfMTAwMDc9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuSWxsZWdhbERlc3RydWN0b3JFeGNlcHRpb246IFtKQ0E5MDAwNF0gRGVzdHJ1Y3RvciBtdXN0IG5vdCBoYXZlIGFyZ3VtZW50cw0KK0pDQV8xMDAwOD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5JbGxlZ2FsSW5pdEV4Y2VwdGlvbjogW0pDQTkwMDA4XSBJbml0aWFsaXplciBtdXN0IG5vdCBoYXZlIGFyZ21lbnRzDQorSkNBXzEwMDA5PW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLklsbGVnYWxQcm9wZXJ0eUV4Y2VwdGlvbjogW0pDQTkwMDExXSBGaW5hbCBmaWVsZCBzZXJ2aWNlTmFtZSBpbiBjbGFzcyBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxQmFkUHJvcEltcGwgY2FuIG5vdCBiZSBhbm5vdGF0ZWQgYXMgYSBQcm9wZXJ0eQ0KK0pDQV8xMDAxMD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5JbnZhbGlkUHJvcGVydHlFeGNlcHRpb246IFtKQ0E5MDAxM10gTWlzc2luZyBwcm9wZXJ0eSBuYW1lOiBwdWJsaWMgb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUNvbnN0ckJhZFByb3BJbXBsKGphdmEubGFuZy5TdHJpbmcpWzBdDQorSkNBXzEwMDExPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLkludmFsaWRQcm9wZXJ0eUV4Y2VwdGlvbjogW0pDQTkwMDE0XSBDb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IG5vdCBoYXZlIHJlcXVpcmVkPWZhbHNlOiBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxQ29uc3RyQmFkUHJvcEltcGwNCitKQ0FfMTAwMTM9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfSkNBXzEwMDEzQ29tcG9uZW50MSwgU2VydmljZTogU2VydmljZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXRlc3RJbnRlbnQ2LnF1YWwyIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9dGVzdEludGVudDYucXVhbDEgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KK0pDQV8xMDAxND1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5JbnZhbGlkUmVmZXJlbmNlRXhjZXB0aW9uOiBbSkNBOTAwMThdIEBSZWZlcmVuY2UgaW4gYSBDb25zdHJ1Y3RvciBtdXN0IGhhdmUgYSBuYW1lIGF0dHJpYnV0ZW9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFDb25zdHJCYWQNCitKQ0FfMTAwMTU9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuSW52YWxpZFJlZmVyZW5jZQ0KK0pDQV8xMDA0Nj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW10gLSBbSkNBOTAwNDBdIEV4Y2VwdGlvbiB3aGlsZSBnZW5lcmF0aW5nIFdTREwgZm9yIFRFU1RfSkNBXzEwMDQ2Q29tcG9uZW50MS9Vbm1hcHBhYmxlIGV4Y2VwdGlvbiB3YXM6IGNvbS5zdW4ueG1sLmJpbmQudjIucnVudGltZS5JbGxlZ2FsQW5ub3RhdGlvbnNFeGNlcHRpb246IDQgY291bnRzIG9mIElsbGVnYWxBbm5vdGF0aW9uRXhjZXB0aW9ucw0KK0pDQV8xMDA0Nz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkludHJvc3BlY3Rpb25FeGNlcHRpb246IFtKQ0E5MDA0MV0gQFNjb3BlIGFubm90YXRpb24gbm90IGFsbG93ZWQgb24gc2VydmljZSBpbnRlcmZhY2UNCitKQ0FfMTAwNDg9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5JbnRyb3NwZWN0aW9uRXhjZXB0aW9uOiBbSkNBOTAwNDIsSkNJMjAwMDJdIEltcGxlbWVudGF0aW9uIG1pc3Npbmcgc2VydmljZSBtZXRob2Qgb3BlcmF0aW9uMiBzZXJ2aWNlIGludGVyZmFjZSBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2UxU3VwZXJzZXQNCitKQ0FfMTAwNDk9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5JbnRyb3NwZWN0aW9uRXhjZXB0aW9uOiBbSkNBOTAwNTBdIFRoZSBudW1iZXIgb2YgU3RyaW5ncyBpbiB0aGUgbmFtZXMgYXR0cmlidXRlIGFycmF5IG9mIHRoZSBAU2VydmljZSBhbm5vdGF0aW9uIE1VU1QgbWF0Y2ggdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdmFsdWUgYXR0cmlidXRlIGFycmF5DQorSkNBXzEwMDUwPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0pDQV8xMDA1MENvbXBvbmVudDFdIC0gW0FTTTQwMDAzLEFTTTYwMDAzLEpDQTkwMDQ1XSBEdXBsaWNhdGUgaW1wbGVtZW50YXRpb24gc2VydmljZSBuYW1lOiBDb21wb25lbnQgPSBURVNUX0pDQV8xMDA1MENvbXBvbmVudDEgU2VydmljZSA9IFNlcnZpY2UxDQorSkNBXzEwMDUxPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuSW50cm9zcGVjdGlvbkV4Y2VwdGlvbjogW0pDQTkwMDU5XSBUaGUgYXJyYXkgb2YgaW50ZXJmYWNlcyBvciBjbGFzc2VzIHNwZWNpZmllZCBieSB0aGUgdmFsdWUgYXR0cmlidXRlIG9mIHRoZSBAU2VydmljZSBhbm5vdGF0aW9uIA0KK0pDQV8xMDA1Mj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkludHJvc3BlY3Rpb25FeGNlcHRpb246IFtKQ0E5MDA2MF0gVGhlIHZhbHVlIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgQFNlcnZpY2UgbmFtZXMgYXJyYXkgTVVTVCBiZSB1bmlxdWUgYW1vbmdzdCBhbGwgdGhlIG90aGVyIGVsZW1lbnQgdmFsdWVzIGluIHRoZSBhcnJheQ0KK0pDQV8xMTAwNT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvbmVudDogVEVTVF9KQ0FfMTEwMDVDb21wb25lbnQxLCBTZXJ2aWNlOiBTZXJ2aWNlMV0gLSBbSkNBMTAwMDA2XSBKQVgtV1MgY2xpZW50LXNpZGUgYXN5bmNocm9ub3VzIHBvbGxpbmcgYW5kIGNhbGxiYWNrIG1ldGhvZHMgYXJlIG5vdCBhbGxvd2VkIGluIHNlcnZpY2UgaW50ZXJmYWNlcw0KK0pDQV8xMTAxMD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9KQ0FfMTEwMTBDb21wb25lbnQxLCBTZXJ2aWNlOiBTZXJ2aWNlMV0gLSBbUE9MNDAwMDksQVNNNjAwMDksQVNNNjAwMTAsSkNBNzAwMDEsSkNBNzAwMDNdIEludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9YW50aVNvYXAgYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9U09BUC52MV8xIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCitKQ0FfMTEwMTE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfSkNBXzExMDExQ29tcG9uZW50MSwgU2VydmljZTogU2VydmljZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfWFudGlTb2FwIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfVNPQVAudjFfMSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlDQorSkNBXzExMDEyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX0pDQV8xMTAxMkNvbXBvbmVudDEsIFNlcnZpY2U6IFNlcnZpY2UxXSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31hbnRpU29hcCBhbmQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1TT0FQLnYxXzEgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KK0pDQV8xMTAxMz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9KQ0FfMTEwMTNDb21wb25lbnQxLCBTZXJ2aWNlOiBTZXJ2aWNlMV0gLSBbUE9MNDAwMDksQVNNNjAwMDksQVNNNjAwMTAsSkNBNzAwMDEsSkNBNzAwMDNdIEludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9YW50aVNvYXAgYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9U09BUCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlDQorSkNBXzExMDE0PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBKQ0FfMTEwMTQsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRFU1RfSkNBXzExMDE0XSAtIFtKQ0ExMDAwMThdIEZvcmJpZGRlbiBhbm5vdGF0aW9uIGludGVyZmFjZSBqYXZheC54bWwud3MuV2ViU2VydmljZUNsaWVudCBmb3VuZCBpbiBjbGFzcyBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LlNlcnZpY2UxV2l0aFdlYlNlcnZpY2VDbGllbnQNCitKQ0FfMTEwMTY9VGVzdCBzZXJ2aWNlIGdvdCBhbiBleGNlcHRpb24gZHVyaW5nIGV4ZWN1dGlvbjogb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb24gVW5hYmxlIHRvIGJpbmQgW10gLSA9IFVuYWJsZSB0byBtYXRjaCB0aGUgZW5kcG9pbnQgcmVmZXJlbmNlICgqKiopRW5kcG9pbnRSZWZlcmVuY2U6ICBVUkkgPSBURVNUX0pDQV8xMTAxNkNvbXBvbmVudDEjcmVmZXJlbmNlKHJlZmVyZW5jZTEpIFdJUkVEX1RBUkdFVF9OT1RfRk9VTkQgVGFyZ2V0ID0gKCoqKilFbmRwb2ludDogIFVSSSA9IFRFU1RfSkNBXzExMDE2Q29tcG9uZW50MiNzZXJ2aWNlKFNlcnZpY2UzT3BlcmF0aW9uc1dlYlNlcnZpY2VQcm92aWRlckltcGwpIFtVbnJlc29sdmVkXSB3aXRoIHRoZSBwb2xpY3kgb2YgdGhlIHNlcnZpY2UgdG8gd2hpY2ggaXQgcmVmZXJzLCBtYXRjaGluZyBwcm9jZXNzIHdhcyBNYXRjaCBwb2xpY3kgb2YgKCoqKilFbmRwb2ludFJlZmVyZW5jZTogIFVSSSA9IFRFU1RfSkNBXzExMDE2Q29tcG9uZW50MSNyZWZlcmVuY2UocmVmZXJlbmNlMSkgV0lSRURfVEFSR0VUX05PVF9GT1VORCBUYXJnZXQgPSAoKioqKUVuZHBvaW50OiAgVVJJID0gVEVTVF9KQ0FfMTEwMTZDb21wb25lbnQyI3NlcnZpY2UoU2VydmljZTNPcGVyYXRpb25zV2ViU2VydmljZVByb3ZpZGVySW1wbCkgW1VucmVzb2x2ZWRdIHRvICgqKiopRW5kcG9pbnQ6ICBVUkkgPSBURVNUX0pDQV8xMTAxNkNvbXBvbmVudDIjc2VydmljZS1iaW5kaW5nKFNlcnZpY2UzT3BlcmF0aW9uc1dlYlNlcnZpY2VQcm92aWRlckltcGwvU2VydmljZTNPcGVyYXRpb25zV2ViU2VydmljZVByb3ZpZGVySW1wbCkgTWF0Y2ggYmVjYXVzZSB0aGVyZSBhcmUgbm8gaW50ZW50cyBvciBwb2xpY2llcyB8fHxNYXRjaCBpbnRlcmZhY2Ugb2YgKCoqKilFbmRwb2ludFJlZmVyZW5jZTogIFVSSSA9IFRFU1RfSkNBXzExMDE2Q29tcG9uZW50MSNyZWZlcmVuY2UocmVmZXJlbmNlMSkgV0lSRURfVEFSR0VUX05PVF9GT1VORCBUYXJnZXQgPSAoKioqKUVuZHBvaW50OiAgVVJJID0gVEVTVF9KQ0FfMTEwMTZDb21wb25lbnQyI3NlcnZpY2UoU2VydmljZTNPcGVyYXRpb25zV2ViU2VydmljZVByb3ZpZGVySW1wbCkgW1VucmVzb2x2ZWRdIHRvICgqKiopRW5kcG9pbnQ6ICBVUkkgPSBURVNUX0pDQV8xMTAxNkNvbXBvbmVudDIjc2VydmljZS1iaW5kaW5nKFNlcnZpY2UzT3BlcmF0aW9uc1dlYlNlcnZpY2VQcm92aWRlckltcGwvU2VydmljZTNPcGVyYXRpb25zV2ViU2VydmljZVByb3ZpZGVySW1wbCkgT3BlcmF0aW9uIG9wZXJhdGlvbjMgbm90IGZvdW5kIG9uIHRhcmdldHx8fE1hdGNoIGZhaWxlZCBiZWNhdXNlIHRoZSBpbnRlcmZhY2UgY29udHJhY3QgbWFwcGVyIGZhaWxlZCB8fHwNCitKQ0FfMTEwMjA9VGVzdCBzZXJ2aWNlIGdvdCBhbiBleGNlcHRpb24gZHVyaW5nIGV4ZWN1dGlvbjogamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBObyBtYXRjaGluZyBvcGVyYXRpb24gaXMgZm91bmQ6IHB1YmxpYyBhYnN0cmFjdCBqYXZhLmxhbmcuU3RyaW5nIG9yZy5vYXNpc29wZW4uc2NhLnRlc3QuU2VydmljZTJPcGVyYXRpb25zLm9wZXJhdGlvbjEoamF2YS5sYW5nLlN0cmluZykNCisjIEludGVudCBhbmQgUG9saWN5U2V0IHJlbGF0ZWQgdGVzdHMNCitKQ0FfODAwMT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9KQ0FfODAwMUNvbXBvbmVudDEsIFNlcnZpY2U6IFNlcnZpY2UxXSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM310ZXN0SW50ZW50MiBhbmQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXRlc3RJbnRlbnQxIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCitKQ0FfODAwMj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IFByb2Nlc3NpbmcgY29tcG9zaXRlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV84MDAyOiBSZXNvbHZpbmcgSmF2YSBpbXBsZW1lbnRhdGlvbjogb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZEludGVudCwgW0pDQTcwMDAyLEpDQTcwMDA1XSBNZXRob2QgdGhhdCBpcyBub3QgYW4gU0NBIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBwb2xpY3lTZXQvaW50ZW50IGFubm90YXRpb25zOiBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxQmFkSW50ZW50Lm9wZXJhdGlvbjEoamF2YS5sYW5nLlN0cmluZykNCitKQ0FfODAwMz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IFByb2Nlc3NpbmcgY29tcG9zaXRlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV84MDAzOiBSZXNvbHZpbmcgSmF2YSBpbXBsZW1lbnRhdGlvbjogb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZEludGVudCwgW0pDQTcwMDAyLEpDQTcwMDA1XSBGaWVsZCB0aGF0IGlzIG5vdCBhbiBTQ0EgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIHBvbGljeVNldC9pbnRlbnQgYW5ub3RhdGlvbnM6IHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRJbnRlbnQuc29tZUZpZWxkDQorSkNBXzgwMDQ9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBQcm9jZXNzaW5nIGNvbXBvc2l0ZSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9KQ0FfODAwNDogUmVzb2x2aW5nIEphdmEgaW1wbGVtZW50YXRpb246IG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRJbnRlbnQsIFtKQ0E3MDAwMixKQ0E3MDAwNV0gQ29uc3RydWN0b3IgcGFyYW1ldGVyIHRoYXQgaXMgbm90IGFuIFNDQSByZWZlcmVuY2UgY2Fubm90IGhhdmUgcG9saWN5U2V0L2ludGVudCBhbm5vdGF0aW9uczogcHVibGljIG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRJbnRlbnQoamF2YS5sYW5nLlN0cmluZylbMF0NCitKQ0FfODAwNj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9KQ0FfODAwNkNvbXBvbmVudDEsIFNlcnZpY2U6IFNlcnZpY2UxXSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM310ZXN0SW50ZW50MiBhbmQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXRlc3RJbnRlbnQxIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCitKQ0FfODAwOD1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IFByb2Nlc3NpbmcgY29tcG9zaXRlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV84MDA4OiBSZXNvbHZpbmcgSmF2YSBpbXBsZW1lbnRhdGlvbjogb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZFBvbGljeVNldCwgW0pDQTcwMDAyLEpDQTcwMDA1XSBNZXRob2QgdGhhdCBpcyBub3QgYW4gU0NBIHJlZmVyZW5jZSBjYW5ub3QgaGF2ZSBwb2xpY3lTZXQvaW50ZW50IGFubm90YXRpb25zOiBwdWJsaWMgamF2YS5sYW5nLlN0cmluZyBvcmcub2FzaXNvcGVuLnNjYS50ZXN0LnNlcnZpY2UxQmFkUG9saWN5U2V0Lm9wZXJhdGlvbjEoamF2YS5sYW5nLlN0cmluZykNCitKQ0FfODAwOT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IFByb2Nlc3NpbmcgY29tcG9zaXRlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31URVNUX0pDQV84MDA5OiBSZXNvbHZpbmcgSmF2YSBpbXBsZW1lbnRhdGlvbjogb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUJhZFBvbGljeVNldCwgW0pDQTcwMDAyLEpDQTcwMDA1XSBGaWVsZCB0aGF0IGlzIG5vdCBhbiBTQ0EgcmVmZXJlbmNlIGNhbm5vdCBoYXZlIHBvbGljeVNldC9pbnRlbnQgYW5ub3RhdGlvbnM6IHB1YmxpYyBqYXZhLmxhbmcuU3RyaW5nIG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRQb2xpY3lTZXQuc29tZUZpZWxkDQorSkNBXzgwMTA9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBQcm9jZXNzaW5nIGNvbXBvc2l0ZSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VEVTVF9KQ0FfODAxMDogUmVzb2x2aW5nIEphdmEgaW1wbGVtZW50YXRpb246IG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRQb2xpY3lTZXQsIFtKQ0E3MDAwMixKQ0E3MDAwNV0gQ29uc3RydWN0b3IgcGFyYW1ldGVyIHRoYXQgaXMgbm90IGFuIFNDQSByZWZlcmVuY2UgY2Fubm90IGhhdmUgcG9saWN5U2V0L2ludGVudCBhbm5vdGF0aW9uczogcHVibGljIG9yZy5vYXNpc29wZW4uc2NhLnRlc3Quc2VydmljZTFCYWRQb2xpY3lTZXQoamF2YS5sYW5nLlN0cmluZylbMF0NCisNCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9wb20ueG1sIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2kvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2U2MjE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2kvcG9tLnhtbApAQCAtMCwwICsxLDEzOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0czwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb21wbGlhbmNlLXRlc3QtamF2YS1jaTwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIFNwZWNpZmljYXRpb24gQ29tcGxpYW5jZSBUZXN0cyBKYXZhIENJPC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPCEtLSBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGdldCB0aGUgbW9kdWxlIHdvcmtpbmcgaW4gRWNsaXBzZSB3aGljaCBkb2Vzbid0IHBpY2sgaXQgdXAgZnJvbSB0aGUgZGVwZW5kZW5jeSBwbHVnaW4gdW5wYWNrIC0tPg0KKyAgICAgICAgICAgIDwhLS0gVGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayBpcyBuZWVkZWQgYXMgcHJlc2VudGx5IHRoZSBzdXJlZmlyZSBwbHVnaW4gd29udCBydW4gdGVzdHMgaW4gYSBkZXBlbmRlbmN5IGphciAtLT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktb3Rlc3RzLXNjYS1qLWNpLXRlc3RzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1TTkFQU0hPVDwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+IA0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW9zZ2ktcnVudGltZS1wb208L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorDQorICAgICAgICAgPCEtLSBUaGlzIGlzIG5lZWQgd2hlbiBydW5uaW5nIHdpdGggU3VuIEpESyB3aGljaCBnZXRzIGFuIHVuc3VwcG9ydGVkIG9wZXJhdGlvbiBleGNlcHRpb24gY3JlYXRpbmcgYW4gWE1MU3RyZWFtUmVhZGVyIGZyb20gYSBET01Tb3VyY2UNCisgICAgICAgICAgICAgd2hlbiBUdXNjYW55IGlzIHdyaXRpbmcgYSBwcm9wZXJ0eSB2YWx1ZSAgLS0+DQorICAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndzdHgtYXNsPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPnN0YXg8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGF4LWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQorICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC41PC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorICA8YnVpbGQ+DQorICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8cGx1Z2lucz4NCisgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICA8cGx1Z2luPg0KKyAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICA8ZXhjbHVkZXM+DQorICAgICAgICAgICA8L2V4Y2x1ZGVzPg0KKyAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICA8L3BsdWdpbj4NCisNCisgICAgICA8cGx1Z2luPg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICA8ZXhlY3V0aW9ucz4NCisgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICA8aWQ+dW5wYWNrPC9pZD4NCisgICAgICAgICAgICA8cGhhc2U+dGVzdC1jb21waWxlPC9waGFzZT4NCisgICAgICAgICAgICA8Z29hbHM+DQorICAgICAgICAgICAgICA8Z29hbD51bnBhY2s8L2dvYWw+DQorICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4NCisgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLWpjaS1jb250cmlidXRpb25zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtU05BUFNIT1Q8L3ZlcnNpb24+DQorICAgICAgICAgICAgICAgICAgIDx0eXBlPnppcDwvdHlwZT4NCisgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9vYXNpcy1jb250cmlidXRpb25zPC9vdXRwdXREaXJlY3Rvcnk+DQorICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4NCisgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktb3Rlc3RzLXNjYS1qLWNpLXRlc3RzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtU05BUFNIT1Q8L3ZlcnNpb24+DQorICAgICAgICAgICAgICAgICAgIDx0eXBlPmphcjwvdHlwZT4NCisgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPmNvbW1vbnMtbG9nZ2luZy5wcm9wZXJ0aWVzLG9hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzLHR1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzPC9leGNsdWRlcz4NCisgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS90ZXN0LWNsYXNzZXM8L291dHB1dERpcmVjdG9yeT4NCisgICAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtPg0KKyAgICAgICAgICAgICAgIDwvYXJ0aWZhY3RJdGVtcz4NCisgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgIDwvZXhlY3V0aW9uPg0KKyAgICAgICAgPC9leGVjdXRpb25zPg0KKyAgICAgIDwvcGx1Z2luPg0KKw0KKyAgICA8L3BsdWdpbnM+DQorICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNpL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9vdGVzdC9UdXNjYW55UnVudGltZUJyaWRnZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YTE2MWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YQpAQCAtMCwwICsxLDIxNyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdDsNCisNCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOw0KK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5mYWlsOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOw0KK2ltcG9ydCBqYXZhLmlvLkZpbGVXcml0ZXI7DQoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247DQoraW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07DQoraW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5Ow0KKw0KK2ltcG9ydCB0ZXN0Q2xpZW50LlRlc3RFeGNlcHRpb25fRXhjZXB0aW9uOw0KK2ltcG9ydCBjbGllbnQuUnVudGltZUJyaWRnZTsNCisNCisvKioNCisgKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUnVudGltZSBCcmlkZ2UgZm9yIHRoZSBBcGFjaGUgVHVzY2FueSBTQ0EgcnVudGltZSAodmVyc2lvbiAyLngpDQorICoNCisgKi8NCitwdWJsaWMgY2xhc3MgVHVzY2FueVJ1bnRpbWVCcmlkZ2UgaW1wbGVtZW50cyBSdW50aW1lQnJpZGdlIHsNCisNCisgICAgc3RhdGljIGZpbmFsIFN0cmluZyBDT05UUklCVVRJT05fTE9DQVRJT05fUFJPUEtFWSA9ICJPQVNJU19URVNURU5WX0NPTlRSSUJVVElPTl9MT0NBVElPTiI7DQorDQorICAgIHByb3RlY3RlZCBOb2RlRmFjdG9yeSBsYXVuY2hlcjsNCisgICAgcHJvdGVjdGVkIE5vZGUgbm9kZTsNCisgICAgcHJvdGVjdGVkIFByb3BlcnRpZXMgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzOw0KKw0KKyAgICBwdWJsaWMgVHVzY2FueVJ1bnRpbWVCcmlkZ2UoKSB7DQorICAgICAgICAvLyByZWFkIHRlc3QgZXJyb3IgbWFwcGluZw0KKyAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzID0gbmV3IFByb3BlcnRpZXMoKTsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgSW5wdXRTdHJlYW0gcHJvcGVydGllc1N0cmVhbSA9IHRoaXMuZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCIvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMiKTsNCisgICAgICAgICAgICBleHBlY3RlZEVycm9yTWVzc2FnZXMubG9hZChwcm9wZXJ0aWVzU3RyZWFtKTsNCisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsgICANCisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlVuYWJsZSB0byByZWFkIG9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyBmaWxlIik7DQorICAgICAgICB9IA0KKyAgICB9DQorDQorICAgIHB1YmxpYyBib29sZWFuIHN0YXJ0Q29udHJpYnV0aW9uKFN0cmluZyBjb21wb3NpdGVOYW1lLCBTdHJpbmcgY29udHJpYnV0aW9uTG9jYXRpb24sIFN0cmluZ1tdIGNvbnRyaWJ1dGlvbk5hbWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgLy8gVHVzY2FueSBzcGVjaWZpYyBjb2RlIHdoaWNoIHN0YXJ0cyB0aGUgY29udHJpYnV0aW9uKHMpIGhvbGRpbmcgdGhlIHRlc3QNCisgICAgICAgICAgICBsYXVuY2hlciA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCk7DQorDQorICAgICAgICAgICAgQ29udHJpYnV0aW9uW10gY29udHJpYnV0aW9ucyA9IG5ldyBDb250cmlidXRpb25bY29udHJpYnV0aW9uTmFtZXMubGVuZ3RoXTsNCisgICAgICAgICAgICBTdHJpbmdbXSBjb250cmlidXRpb25VUklzID0gZ2V0Q29udHJpYnV0aW9uVVJJcyhjb250cmlidXRpb25Mb2NhdGlvbiwgY29udHJpYnV0aW9uTmFtZXMpOw0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29udHJpYnV0aW9ucy5sZW5ndGg7IGkrKykgew0KKyAgICAgICAgICAgICAgICBjb250cmlidXRpb25zW2ldID0gbmV3IENvbnRyaWJ1dGlvbihjb250cmlidXRpb25OYW1lc1tpXSwgY29udHJpYnV0aW9uVVJJc1tpXSk7DQorICAgICAgICAgICAgfSAvLyBlbmQgZm9yDQorDQorICAgICAgICAgICAgbm9kZSA9IGxhdW5jaGVyLmNyZWF0ZU5vZGUoY29tcG9zaXRlTmFtZSwgY29udHJpYnV0aW9ucyk7DQorICAgICAgICAgICAgLy8gU3RhcnQgdGhlIG5vZGUNCisgICAgICAgICAgICBub2RlLnN0YXJ0KCk7DQorICAgICAgICAgICAgDQorICAgICAgICAgICAgLy8gRm9yIGRlYnVnZ2luZyANCisgICAgICAgICAgICAvLyBwcmludCBvdXQgdGhlIGNvbXBvc2l0ZXMgdGhhdCBoYXZlIGJlZW4gcmVhZCBpbiBzdWNjZXNzIGNhc2VzDQorICAgICAgICAgICAgLy8gU3lzdGVtLm91dC5wcmludGxuKCgoTm9kZUltcGwpbm9kZSkuZHVtcERvbWFpbkNvbXBvc2l0ZSgpKTsNCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7DQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGUuZ2V0TWVzc2FnZSgpKTsNCisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOyAgICAgIA0KKyAgICAgICAgICAgIHRocm93IGU7DQorICAgICAgICB9IC8vIGVuZCB0cnkNCisNCisgICAgICAgIHJldHVybiB0cnVlOw0KKyAgICB9IC8vIGVuZCBtZXRob2Qgc3RhcnRDb250cmlidXRpb24NCisNCisgICAgLyoqDQorICAgICAqIEdldHMgdGhlIGxvY2F0aW9uIG9mIHRoZSBDb250cmlidXRpb25zIGFzIFVSSXMNCisgICAgICogQHBhcmFtIGNvbnRyaWJ1dGlvbkxvY2F0aW9uIC0gYSBsb2NhdGlvbiBwYXR0ZXJuIFVSSSwgd2hpY2ggY29udGFpbnMgb25lIG9yIG1vcmUgIiUxIg0KKyAgICAgKiBzdWJzdHJpbmdzLCB3aGljaCBhcmUgc3Vic3RpdHV0ZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgY29udHJpYnV0aW9uIHRvIGdldCB0aGUgVVJJIG9mDQorICAgICAqIHRoZSBjb250cmlidXRpb24NCisgICAgICogQHJldHVybiB0aGUgY29udHJpYnV0aW9uIGxvY2F0aW9ucyBhcyBhbiBhcnJheSBvZiBTdHJpbmdzDQorICAgICAqLw0KKyAgICBwcm90ZWN0ZWQgU3RyaW5nW10gZ2V0Q29udHJpYnV0aW9uVVJJcyhTdHJpbmcgY29udHJpYnV0aW9uTG9jYXRpb24sIFN0cmluZ1tdIGNvbnRyaWJ1dGlvbk5hbWVzKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIFN0cmluZ1tdIGxvY2F0aW9ucyA9IG5ldyBTdHJpbmdbY29udHJpYnV0aW9uTmFtZXMubGVuZ3RoXTsNCisNCisgICAgICAgIGlmIChsb2NhdGlvbnMgIT0gbnVsbCAmJiBjb250cmlidXRpb25Mb2NhdGlvbiAhPSBudWxsKSB7DQorDQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsb2NhdGlvbnMubGVuZ3RoOyBpKyspIHsNCisgICAgICAgICAgICAgICAgU3RyaW5nIGFMb2NhdGlvbiA9IGNvbnRyaWJ1dGlvbkxvY2F0aW9uLnJlcGxhY2VBbGwoIiUxIiwgY29udHJpYnV0aW9uTmFtZXNbaV0pOw0KKw0KKyAgICAgICAgICAgICAgICBsb2NhdGlvbnNbaV0gPSBhTG9jYXRpb247DQorICAgICAgICAgICAgfSAvLyBlbmQgZm9yICAgIAkgIAkNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgaWYgKGxvY2F0aW9ucyA9PSBudWxsKSB7DQorICAgICAgICAgICAgICAgIC8vIE5vIGNvbnRyaWJ1dGlvbiBzcGVjaWZpZWQgLSB0aHJvdyBhbiBFeGNlcHRpb24NCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIHN0YXJ0IFNDQSBydW50aW1lIC0gbm8gY29udHJpYnV0aW9uIHN1cHBsaWVkIC0gZXJyb3IiKTsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAvLyBObyBjb250cmlidXRpb24gbG9jYXRpb24gc3VwcGxpZWQgLSB0aHJvdyBhbiBFeGNlcHRpb24NCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5hYmxlIHRvIHN0YXJ0IFNDQSBydW50aW1lIC0gbm8gY29udHJpYnV0aW9uIGxvY2F0aW9uIHN1cHBsaWVkIC0gZXJyb3IiKTsNCisgICAgICAgICAgICB9IC8vIGVuZCBpZiANCisgICAgICAgIH0gLy8gZW5kIGlmDQorDQorICAgICAgICByZXR1cm4gbG9jYXRpb25zOw0KKyAgICB9IC8vIGVuZCBnZXRDb250cmlidXRpb25VUkkNCisNCisgICAgcHVibGljIHZvaWQgc3RvcENvbnRyaWJ1dGlvbigpIHsNCisgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsNCisgICAgICAgICAgICBub2RlLnN0b3AoKTsNCisgICAgICAgIH0gLy8gZW5kIGlmDQorICAgICAgICBpZiAobGF1bmNoZXIgIT0gbnVsbCkgew0KKyAgICAgICAgICAgIGxhdW5jaGVyLmRlc3Ryb3koKTsNCisgICAgICAgIH0gLy8gZW5kIGlmDQorICAgIH0gLy8gZW5kIG1ldGhvZCBzdG9wQ29udHJpYnV0aW9uDQorICAgIA0KKyAgICBwdWJsaWMgdm9pZCBjaGVja0Vycm9yKFN0cmluZyB0ZXN0TmFtZSwgVGhyb3dhYmxlIGV4KSB0aHJvd3MgVGhyb3dhYmxlIHsgDQorICAgICAgICAgICAgICANCisgICAgICAgIFN0cmluZyBleHBlY3RlZE1lc3NhZ2UgPSBleHBlY3RlZEVycm9yTWVzc2FnZXMuZ2V0UHJvcGVydHkodGVzdE5hbWUpOw0KKyAgICAgICAgU3RyaW5nIHJlY2VpdmVkTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShleCk7Ly9leC5nZXRNZXNzYWdlKCk7DQorICAgICAgICANCisgICAgICAgIGlmIChleHBlY3RlZE1lc3NhZ2UgPT0gbnVsbCl7DQorICAgICAgICAgICAgd3JpdGVNaXNzaW5nTWVzc2FnZSh0ZXN0TmFtZSwgZXgpOw0KKyAgICAgICAgICAgIGZhaWwoIk51bGwgZXhwZWN0ZWQgZXJyb3IgbWVzc2FnZSBmb3IgdGVzdCAiICsgdGVzdE5hbWUgKyANCisgICAgICAgICAgICAgICAgICJQbGVhc2UgYWRkIG1lc3NhZ2UgdG8gb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIik7DQorICAgICAgICB9IC8vIGVuZCBpZg0KKyAgICAgICAgDQorICAgICAgICBpZiAocmVjZWl2ZWRNZXNzYWdlID09IG51bGwpew0KKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOw0KKyAgICAgICAgICAgIGZhaWwoIk51bGwgcmVjZWl2ZWQgZXJyb3IgbWVzc2FnZSBmb3IgdGVzdCAiICsgdGVzdE5hbWUpOw0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisNCisgICAgICAgIGlmIChleHBlY3RlZE1lc3NhZ2Uuc3RhcnRzV2l0aCgiKiIpKSB7DQorICAgICAgICAgICAgLy8gYWxsb3cgdXNpbmcgKiB0byBpZ25vcmUgYSBtZXNzYWdlIGNvbXBhcmlzb24NCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIC8vIERlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgbWVzc2FnZSBoYXMgdmFyaWFibGUgcGFydHMgd2l0aGluIGl0DQorICAgICAgICAvLyBtYXJrZWQgd2l0aCB0aGUgY2hhcmFjdGVycyAqKiouIEhlcmUgd2UgdG9rZW5pemUgdGhlIGV4cGVjdGVkIHN0cmluZyANCisgICAgICAgIC8vIGFuZCBtYWtlIHN1cmUgYWxsIHRoZSBpbmRpdmlkdWFsIHBhcnRzIGFyZSBwcmVzZW50IGluIHRoZSByZXN1bHRzIHN0cmluZw0KKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkTWVzc2FnZVBhcnRzW10gPSBleHBlY3RlZE1lc3NhZ2Uuc3BsaXQoIlxcKlxcKlxcKiIpOw0KKyAgICAgICAgDQorICAgICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoID4gMSl7DQorICAgICAgICAgICAgaW50IGZvdW5kUGFydHMgPSAwOw0KKyAgICAgICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGg7IGkrKyl7DQorICAgICAgICAgICAgICAgIGlmIChyZWNlaXZlZE1lc3NhZ2UuaW5kZXhPZihleHBlY3RlZE1lc3NhZ2VQYXJ0c1tpXSkgPiAtMSApew0KKyAgICAgICAgICAgICAgICAgICAgZm91bmRQYXJ0cysrOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIGlmIChmb3VuZFBhcnRzID09IGV4cGVjdGVkTWVzc2FnZVBhcnRzLmxlbmd0aCl7DQorICAgICAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorDQorICAgICAgICANCisgICAgICAgIC8vIERlYWwgd2l0aCB0aGUgY2FzZSB3aGVyZSB0aGUgZW5kIG9mIHRoZSBtZXNzYWdlIGlzIHZhcmlhYmxlIChlZyBjb250YWlucyBhYnNvbHV0ZSBmaWxlbmFtZXMpIA0KKyAgICAgICAgLy8gYW5kIHdoZXJlIHRoZSBvbmx5IHJlbGV2YW50IHBhcnQgaXMgdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlIC0gaW4gdGhpcyBjYXNlIHRoZSBleHBlY3RlZA0KKyAgICAgICAgLy8gbWVzc2FnZSBvbmx5IGNvbnRhaW5zIHRoZSBzdGVtIHNlY3Rpb24gd2hpY2ggaXMgdW5jaGFuZ2luZy4uLg0KKyAgICAgICAgaWYoIHJlY2VpdmVkTWVzc2FnZS5sZW5ndGgoKSA+IGV4cGVjdGVkTWVzc2FnZS5sZW5ndGgoKSApIHsNCisgICAgICAgICAgICAvLyBUcnVuY2F0ZSB0aGUgcmVjZWl2ZWQgbWVzc2FnZSB0byB0aGUgbGVuZ3RoIG9mIHRoZSBleHBlY3RlZCBtZXNzYWdlDQorICAgICAgICAgICAgcmVjZWl2ZWRNZXNzYWdlID0gcmVjZWl2ZWRNZXNzYWdlLnN1YnN0cmluZygwLCBleHBlY3RlZE1lc3NhZ2UubGVuZ3RoKCkgKTsNCisgICAgICAgIH0gLy8gZW5kIGlmDQorDQorICAgICAgICBpZiAoIWV4cGVjdGVkTWVzc2FnZS5lcXVhbHMocmVjZWl2ZWRNZXNzYWdlKSkgew0KKyAgICAgICAgICAgIHdyaXRlSW5jb3JyZWN0TWVzc2FnZSh0ZXN0TmFtZSwgZXhwZWN0ZWRNZXNzYWdlLCByZWNlaXZlZE1lc3NhZ2UpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBhc3NlcnRFcXVhbHMoIGV4cGVjdGVkTWVzc2FnZSwgcmVjZWl2ZWRNZXNzYWdlICk7DQorICAgICAgICANCisgICAgICAgIHJldHVybjsNCisgICAgICAgDQorICAgIH0NCisNCisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVNaXNzaW5nTWVzc2FnZShTdHJpbmcgdGVzdE5hbWUsIFRocm93YWJsZSBleCkgew0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICBCdWZmZXJlZFdyaXRlciBvdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoInRhcmdldC9PVGVzdE1pc3NpbmdNc2dzLnR4dCIsIHRydWUpKTsNCisgICAgICAgICAgICBvdXQud3JpdGUodGVzdE5hbWUgKyAiPSoiKTsNCisgICAgICAgICAgICBvdXQubmV3TGluZSgpOw0KKyAgICAgICAgICAgIG91dC5jbG9zZSgpOw0KKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKyAgICAgICAgfSANCisgICAgfQ0KKw0KKyAgICBwcm90ZWN0ZWQgdm9pZCB3cml0ZUluY29ycmVjdE1lc3NhZ2UoU3RyaW5nIHRlc3ROYW1lLCBTdHJpbmcgZXhwZWN0ZWQsIFN0cmluZyByZWNlaXZlZCkgew0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICBCdWZmZXJlZFdyaXRlciBvdXQgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IEZpbGVXcml0ZXIoInRhcmdldC9PVGVzdEluY29ycmVjdE1zZ3MudHh0IiwgdHJ1ZSkpOw0KKyAgICAgICAgICAgIG91dC53cml0ZSh0ZXN0TmFtZSk7IG91dC5uZXdMaW5lKCk7DQorICAgICAgICAgICAgb3V0LndyaXRlKCIgICAgIiArIGV4cGVjdGVkKTsgb3V0Lm5ld0xpbmUoKTsNCisgICAgICAgICAgICBvdXQud3JpdGUoIiAgICAiICsgcmVjZWl2ZWQpOyBvdXQubmV3TGluZSgpOw0KKyAgICAgICAgICAgIG91dC5jbG9zZSgpOw0KKyAgICAgICAgfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgew0KKyAgICAgICAgfSANCisgICAgfQ0KKw0KKyAgICBwcm90ZWN0ZWQgU3RyaW5nIGdldEVycm9yTWVzc2FnZShUaHJvd2FibGUgZXgpIHsNCisgICAgICAgIFN0cmluZyBlcnJvck1lc3NhZ2UgPSBudWxsOw0KKyAgICAgICAgDQorICAgICAgICBpZiAoZXggaW5zdGFuY2VvZiBUZXN0RXhjZXB0aW9uX0V4Y2VwdGlvbikgew0KKyAgICAgICAgICAgIFRlc3RFeGNlcHRpb25fRXhjZXB0aW9uIHRlID0gKFRlc3RFeGNlcHRpb25fRXhjZXB0aW9uKSBleDsNCisgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB0ZS5nZXRGYXVsdEluZm8oKS5nZXRNZXNzYWdlKCk7DQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGV4LmdldE1lc3NhZ2UoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTsNCisgICAgfQ0KK30gLy8gZW5kIGNsYXNzIFR1c2NhbnlSdW50aW1lQnJpZGdlDQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2kvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL2phdmEtY2kvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxZWY1NmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9yZXNvdXJjZXMvb2FzaXMtc2NhLXRlc3RzLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzMCBAQAorIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorIyBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorIyByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorIyB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorIyAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorIyB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyANCisjICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyANCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisjIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorIyAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisjIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyMgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyMgdW5kZXIgdGhlIExpY2Vuc2UuIA0KKw0KKyMgT0FTSVMgU0NBIEFzc2VtYmx5IHRlc3QgcHJvcGVydGllcw0KKyMgVGhlIGltcGxlbWVudGF0aW9uIHR5cGUgdG8gdXNlIGZvciBBc3NlbWJseSB0ZXN0IHN1aXRlDQorIyBvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5Lmxhbmc9QlBFTA0KK29yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1QT0pPDQorDQorIyBUaGUgY2xhc3MgdG8gdXNlIGFzIHRoZSBSdW50aW1lIEJyaWRnZSBmb3IgdGhlIFNDQSBydW50aW1lIHVuZGVyIHRlc3QNCisjb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlPU0dpUnVudGltZUJyaWRnZQ0KK29yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkucnVudGltZV9icmlkZ2U9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5vdGVzdC5UdXNjYW55UnVudGltZUJyaWRnZQ0KKw0KKyMgVGhlIGxvY2F0aW9uIG9mIHRoZSBjb250cmlidXRpb25zIGZvciB0aGUgdGVzdCBzdWl0ZQ0KKyMgJTEgcmVwcmVzZW50cyB0aGUgcGxhY2VtZW50IG9mIHRoZSBuYW1lIG9mIGVhY2ggY29udHJpYnV0aW9uIGludG8gdGhlIGxvY2F0aW9uIFVSSQ0KK29yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkuY29udHJpYnV0aW9uLmxvY2F0aW9uPXRhcmdldC9vYXNpcy1jb250cmlidXRpb25zLyUxL3RhcmdldC8lMS56aXANCisNCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvamF2YS1jaS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ4YzkzYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9qYXZhLWNpL3NyYy90ZXN0L3Jlc291cmNlcy90dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorUE9KT18yMDAzPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuSW50cm9zcGVjdGlvbkV4Y2VwdGlvbjogW0pDQTkwMDQyLEpDSTIwMDAyXSBJbXBsZW1lbnRhdGlvbiBtaXNzaW5nIHNlcnZpY2UgbWV0aG9kIG9wZXJhdGlvbjIgc2VydmljZSBpbnRlcmZhY2Ugb3JnLm9hc2lzb3Blbi5zY2EudGVzdC5TZXJ2aWNlMVN1cGVyc2V0DQorUE9KT181MDAxPW9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZXNvbHZlRXhjZXB0aW9uOiBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmltcGxlbWVudGF0aW9uLmphdmEuaW50cm9zcGVjdC5pbXBsLk5vQ29uc3RydWN0b3JFeGNlcHRpb246IFtKQ0k1MDAwMV0gTm8gcHVibGljIGNvbnN0cnVjdG9yIGZvciBjbGFzcw0KK1BPSk9fNTAwNT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5BbWJpZ3VvdXNDb25zdHJ1Y3RvckV4Y2VwdGlvbjoNCitQT0pPXzUwMDY9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuRHVwbGljYXRlQ29uc3RydWN0b3JFeGNlcHRpb246IFtKQ0k1MDAwMl0gTXVsdGlwbGUgY29uc3RydWN0b3JzIG1hcmtlZCB3aXRoIEBDb25zdHJ1Y3Rvcg0KK1BPSk9fNTAwNz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5JbnZhbGlkQ29uc3RydWN0b3JFeGNlcHRpb246IFtKQ0k1MDAwNV0gTXVsdGlwbGUgYW5ub3RhdGVkIGNvbnN0cnVjdG9ycw0KK1BPSk9fODAwMj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9QT0pPXzgwMDJDb21wb25lbnQxXSAtIFtBU001MDAwNCxKQ0EzMDAwMixKQ0k4MDAwMV0gQ29tcG9uZW50IHNlcnZpY2UgaW50ZXJmYWNlIGluY29tcGF0aWJsZSB3aXRoIGltcGxlbWVudGF0aW9uIHNlcnZpY2UgaW50ZXJmYWNlOiBDb21wb25lbnQgPSBURVNUX1BPSk9fODAwMkNvbXBvbmVudDEgU2VydmljZSA9IFNlcnZpY2UxU3VwZXJzZXQgT3BlcmF0aW9uIG9wZXJhdGlvbmIgbm90IGZvdW5kIG9uIHRhcmdldA0KK1BPSk9fODAwMz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9QT0pPXzgwMDNDb21wb25lbnQxLCBTZXJ2aWNlOiBTZXJ2aWNlMV0gLSBbUE9MNDAwMDksQVNNNjAwMDksQVNNNjAwMTAsSkNBNzAwMDEsSkNBNzAwMDNdIEludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfXN1c3BlbmRzVHJhbnNhY3Rpb24gYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9cHJvcGFnYXRlc1RyYW5zYWN0aW9uIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCitQT0pPXzgwMDg9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfUE9KT184MDA4Q29tcG9uZW50MSwgU2VydmljZTogU2VydmljZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1zdXNwZW5kc1RyYW5zYWN0aW9uIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfXByb3BhZ2F0ZXNUcmFuc2FjdGlvbiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlDQorUE9KT184MDEyPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX1BPSk9fODAxMkNvbXBvbmVudDEsIFNlcnZpY2U6IFNlcnZpY2UxXSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9KioqYW5hZ2VkVHJhbnNhY3Rpb24gYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9KioqYW5hZ2VkVHJhbnNhY3Rpb24gYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KK1BPSk9fODAxMz1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLmludHJvc3BlY3QuaW1wbC5EdXBsaWNhdGVQcm9wZXJ0eUV4Y2VwdGlvbjogZHVwbGljYXRlUHJvcGVydHkNCitQT0pPXzgwMTQ9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaW1wbGVtZW50YXRpb24uamF2YS5pbnRyb3NwZWN0LmltcGwuRHVwbGljYXRlUmVmZXJlbmNlRXhjZXB0aW9uOiBkdXBsaWNhdGVSZWZlcmVuY2UNCitQT0pPXzgwMzA9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfUE9KT184MDMwQ29tcG9uZW50MSwgU2VydmljZTogU2VydmljZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1TT0FQLnYxXzEgYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9U09BUC52MV8yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCitQT0pPXzgwMzE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfUE9KT184MDMxQ29tcG9uZW50MSwgU2VydmljZTogU2VydmljZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfWFudGlTb2FwIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfVNPQVAgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQ0KK1BPSk9fODAzMj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9QT0pPXzgwMzJDb21wb25lbnQxLCBTZXJ2aWNlOiBTZXJ2aWNlMV0gLSBbUE9MNDAwMDksQVNNNjAwMDksQVNNNjAwMTAsSkNBNzAwMDEsSkNBNzAwMDNdIEludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9YW50aVNvYXAgYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9U09BUCBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlDQorUE9KT184MDMzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX1BPSk9fODAzM0NvbXBvbmVudDEsIFNlcnZpY2U6IFNlcnZpY2UxXSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31hbnRpU29hcCBhbmQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1TT0FQIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCitQT0pPXzgwMzU9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfUE9KT184MDM1Q29tcG9uZW50MSwgU2VydmljZTogU2VydmljZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn1TT0FQLnYxXzEgYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9U09BUC52MV8yIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCitQT0pPXzkwMDE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IFBPSk9fOTAwMSwgQXJ0aWZhY3Q6IFRlc3RfUE9KT185MDAxLmNvbXBvc2l0ZV0gLSBYTUxTY2hlbWEgdmFsaWRhdGlvbiBlcnJvciBvY2N1cmVkIGluOiBUZXN0X1BPSk9fOTAwMS5jb21wb3NpdGUgLGxpbmUgPSAqKiosIGNvbHVtbiA9ICoqKiwgTWVzc2FnZSA9IGN2Yy1jb21wbGV4LXR5cGUuMy4yLjI6IEF0dHJpYnV0ZSAnaW50ZXJmYWNlJyBpcyBub3QgYWxsb3dlZCB0byBhcHBlYXIgaW4gZWxlbWVudCAnaW1wbGVtZW50YXRpb24uamF2YScuDQorUE9KT18xMDAwMT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUE9KT18xMDAwMSwgQXJ0aWZhY3Q6IE1FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sXSAtIFtKQ0kxMDAwMV0gVGhlIHZhbHVlIG9mIHRoZSBAcGFja2FnZSBhdHRyaWJ1dGUgb24gdGhlIDxpbXBvcnQuamF2YS8+IGVsZW1lbnQgaXMgbm90IHVuaXF1ZSBhY3Jvc3MgYWxsIG90aGVyIDxpbXBvcnQuamF2YS8+IGVsZW1lbnRzIHdpdGhpbiB0aGUgY29udHJpYnV0aW9uLg0KK1BPSk9fMTAwMDQ9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlc29sdmVFeGNlcHRpb246IFtKQ0kxMDAwMDddIEEgSmF2YSBwYWNrYWdlIG9yZy5vYXNpc29wZW4uc2NhLnRlc3Q7dmVyc2lvbj0xLjAuMCB0aGF0IGlzIHNwZWNpZmllZCBvbiBhbiBleHBvcnQgZWxlbWVudCBNVVNUIGJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIGNvbnRyaWJ1dGlvbiBjb250YWluaW5nIHRoZSBleHBvcnQgZWxlbWVudC4NCitQT0pPXzEwMDA1PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBQT0pPXzEwMDA1LCBBcnRpZmFjdDogTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWxdIC0gW0pDSTEwMDA0XSBUaGUgdmFsdWUgb2YgdGhlIEBwYWNrYWdlIGF0dHJpYnV0ZSBvbiB0aGUgPGV4cG9ydC5qYXZhLz4gZWxlbWVudCBpcyBub3QgdW5pcXVlIGFjcm9zcyBhbGwgb3RoZXIgPGV4cG9ydC5qYXZhLz4gZWxlbWVudHMgd2l0aGluIHRoZSBjb250cmlidXRpb24uDQorUE9KT18xMDAwNj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVzb2x2ZUV4Y2VwdGlvbjogW0pDSTEwMDAwN10gQSBKYXZhIHBhY2thZ2Ugb3JnLm9hc2lzb3Blbi5zY2EudGVzdC55IHRoYXQgaXMgc3BlY2lmaWVkIG9uIGFuIGV4cG9ydCBlbGVtZW50IE1VU1QgYmUgY29udGFpbmVkIHdpdGhpbiB0aGUgY29udHJpYnV0aW9uIGNvbnRhaW5pbmcgdGhlIGV4cG9ydCBlbGVtZW50Lg0KKw0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvcG9tLnhtbCBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGM5MmEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL3BvbGljeS9wb20ueG1sCkBAIC0wLDAgKzEsMTQ0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1jb21wbGlhbmNlLXRlc3RzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWNvbXBsaWFuY2UtdGVzdC1wb2xpY3k8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBTcGVjaWZpY2F0aW9uIENvbXBsaWFuY2UgVGVzdHMgUG9saWN5PC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPCEtLSBUaGlzIGlzIG9ubHkgbmVlZGVkIHRvIGdldCB0aGUgbW9kdWxlIHdvcmtpbmcgaW4gRWNsaXBzZSB3aGljaCBkb2Vzbid0IHBpY2sgaXQgdXAgZnJvbSB0aGUgZGVwZW5kZW5jeSBwbHVnaW4gdW5wYWNrIC0tPg0KKyAgICAgICAgICAgIDwhLS0gVGhlIGRlcGVuZGVuY3kgcGx1Z2luIHVucGFjayBpcyBuZWVkZWQgYXMgcHJlc2VudGx5IHRoZSBzdXJlZmlyZSBwbHVnaW4gd29udCBydW4gdGVzdHMgaW4gYSBkZXBlbmRlbmN5IGphciAtLT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktb3Rlc3RzLXBvbGljeS10ZXN0czwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtU05BUFNIT1Q8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorDQorICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtcG9tPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+IA0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW9zZ2ktcnVudGltZS1wb208L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8IS0tIFRoaXMgaXMgbmVlZCBmb3IgUE9MXzQwMTMgYW5kIFBPTF80MDI4IHdoZW4gcnVubmluZyB3aXRoIFN1biBKREsgd2hpY2ggDQorICAgICAgICAgICAgZ2V0cyBhbiB1bnN1cHBvcnRlZCBvcGVyYXRpb24gZXhjZXB0aW9uIGNyZWF0aW5nIGFuIFhNTFN0cmVhbVJlYWRlciBmcm9tIGEgRE9NU291cmNlDQorICAgICAgICAgICAgd2hlbiBUdXNjYW55IGlzIHdyaXRpbmcgYSBwcm9wZXJ0eSB2YWx1ZSAgLS0+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLndvb2RzdG94PC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPndzdHgtYXNsPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjMuMi40PC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT5ydW50aW1lPC9zY29wZT4NCisgICAgICAgICAgICA8ZXhjbHVzaW9ucz4NCisgICAgICAgICAgICAgICAgPGV4Y2x1c2lvbj4NCisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPnN0YXg8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zdGF4LWFwaTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPC9leGNsdXNpb24+DQorICAgICAgICAgICAgPC9leGNsdXNpb25zPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC41PC92ZXJzaW9uPg0KKyAgICAgICAgICAgIDxzY29wZT50ZXN0PC9zY29wZT4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorICA8YnVpbGQ+DQorICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8cGx1Z2lucz4NCisgICAgICAgICAgICAgICAgICAgICAgICANCisgICAgICA8cGx1Z2luPg0KKyAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICA8YXJ0aWZhY3RJZD5tYXZlbi1zdXJlZmlyZS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICA8ZXhjbHVkZXM+DQorICAgICAgICAgICAgICA8IS0tIDMwMDIgaXMgbm8gbG9uZ2VyIHBhcnQgb2YgdGhlIHN1aXRlIGFuZCA0MDE1LzQwMTYgYXJlIHRlc3RzIGZvciBvcHRpb25hbCBzdXBwb3J0IHRoYXQgVHVzY2FueSBkb2Vzbid0IHByb3ZpZGUgLS0+DQorICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi9QT0xfMzAwMl9UZXN0Q2FzZS5qYXZhPC9leGNsdWRlPg0KKyAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovUE9MXzQwMTVfVGVzdENhc2UuamF2YTwvZXhjbHVkZT4NCisgICAgICAgICAgICAgIDxleGNsdWRlPioqL1BPTF80MDE2X1Rlc3RDYXNlLmphdmE8L2V4Y2x1ZGU+DQorICAgICAgICAgICA8L2V4Y2x1ZGVzPg0KKyAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICA8L3BsdWdpbj4NCisNCisgICAgICA8cGx1Z2luPg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5tYXZlbi5wbHVnaW5zPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICA8ZXhlY3V0aW9ucz4NCisgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICA8aWQ+dW5wYWNrPC9pZD4NCisgICAgICAgICAgICA8cGhhc2U+dGVzdC1jb21waWxlPC9waGFzZT4NCisgICAgICAgICAgICA8Z29hbHM+DQorICAgICAgICAgICAgICA8Z29hbD51bnBhY2s8L2dvYWw+DQorICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICA8YXJ0aWZhY3RJdGVtcz4NCisgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm9hc2lzLXBvbGljeS1jb250cmlidXRpb25zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4yLjAtU05BUFNIT1Q8L3ZlcnNpb24+DQorICAgICAgICAgICAgICAgICAgIDx0eXBlPnppcDwvdHlwZT4NCisgICAgICAgICAgICAgICAgICAgPG91dHB1dERpcmVjdG9yeT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9vYXNpcy1jb250cmlidXRpb25zPC9vdXRwdXREaXJlY3Rvcnk+DQorICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4NCisgICAgICAgICAgICAgICAgIDxhcnRpZmFjdEl0ZW0+DQorICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktb3Rlc3RzLXBvbGljeS10ZXN0czwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLVNOQVBTSE9UPC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgICAgICA8dHlwZT5qYXI8L3R5cGU+DQorICAgICAgICAgICAgICAgICAgIDxleGNsdWRlcz5jb21tb25zLWxvZ2dpbmcucHJvcGVydGllcyxvYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcyx0dXNjYW55LW9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllczwvZXhjbHVkZXM+DQorICAgICAgICAgICAgICAgICAgIDxvdXRwdXREaXJlY3Rvcnk+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vdGVzdC1jbGFzc2VzPC9vdXRwdXREaXJlY3Rvcnk+DQorICAgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbT4NCisgICAgICAgICAgICAgICA8L2FydGlmYWN0SXRlbXM+DQorICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICA8L3BsdWdpbj4NCisNCisgICAgPC9wbHVnaW5zPg0KKyAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL3BvbGljeS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evb3Rlc3QvVHVzY2FueVJ1bnRpbWVCcmlkZ2UuamF2YSBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL290ZXN0L1R1c2NhbnlSdW50aW1lQnJpZGdlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZlZTQxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL290ZXN0L1R1c2NhbnlSdW50aW1lQnJpZGdlLmphdmEKQEAgLTAsMCArMSwyMTggQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2Eub3Rlc3Q7DQorDQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsNCisNCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFdyaXRlcjsNCitpbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOw0KK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCisNCitpbXBvcnQgdGVzdENsaWVudC5UZXN0RXhjZXB0aW9uX0V4Y2VwdGlvbjsNCitpbXBvcnQgY2xpZW50LlJ1bnRpbWVCcmlkZ2U7DQorDQorLyoqDQorICogQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFJ1bnRpbWUgQnJpZGdlIGZvciB0aGUgQXBhY2hlIFR1c2NhbnkgU0NBIHJ1bnRpbWUgKHZlcnNpb24gMi54KQ0KKyAqDQorICovDQorcHVibGljIGNsYXNzIFR1c2NhbnlSdW50aW1lQnJpZGdlIGltcGxlbWVudHMgUnVudGltZUJyaWRnZSB7DQorDQorICAgIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OVFJJQlVUSU9OX0xPQ0FUSU9OX1BST1BLRVkgPSAiT0FTSVNfVEVTVEVOVl9DT05UUklCVVRJT05fTE9DQVRJT04iOw0KKw0KKyAgICBwcm90ZWN0ZWQgTm9kZUZhY3RvcnkgbGF1bmNoZXI7DQorICAgIHByb3RlY3RlZCBOb2RlIG5vZGU7DQorICAgIHByb3RlY3RlZCBQcm9wZXJ0aWVzIGV4cGVjdGVkRXJyb3JNZXNzYWdlczsNCisNCisgICAgcHVibGljIFR1c2NhbnlSdW50aW1lQnJpZGdlKCkgew0KKyAgICAgICAgLy8gcmVhZCB0ZXN0IGVycm9yIG1hcHBpbmcNCisgICAgICAgIGV4cGVjdGVkRXJyb3JNZXNzYWdlcyA9IG5ldyBQcm9wZXJ0aWVzKCk7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIElucHV0U3RyZWFtIHByb3BlcnRpZXNTdHJlYW0gPSB0aGlzLmdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbSgiL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIik7DQorICAgICAgICAgICAgZXhwZWN0ZWRFcnJvck1lc3NhZ2VzLmxvYWQocHJvcGVydGllc1N0cmVhbSk7DQorICAgICAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7ICAgDQorICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJVbmFibGUgdG8gcmVhZCBvYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMgZmlsZSIpOw0KKyAgICAgICAgfSANCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgYm9vbGVhbiBzdGFydENvbnRyaWJ1dGlvbihTdHJpbmcgY29tcG9zaXRlTmFtZSwgU3RyaW5nIGNvbnRyaWJ1dGlvbkxvY2F0aW9uLCBTdHJpbmdbXSBjb250cmlidXRpb25OYW1lcykgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIC8vIFR1c2Nhbnkgc3BlY2lmaWMgY29kZSB3aGljaCBzdGFydHMgdGhlIGNvbnRyaWJ1dGlvbihzKSBob2xkaW5nIHRoZSB0ZXN0DQorICAgICAgICAgICAgbGF1bmNoZXIgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpOw0KKw0KKyAgICAgICAgICAgIENvbnRyaWJ1dGlvbltdIGNvbnRyaWJ1dGlvbnMgPSBuZXcgQ29udHJpYnV0aW9uW2NvbnRyaWJ1dGlvbk5hbWVzLmxlbmd0aF07DQorICAgICAgICAgICAgU3RyaW5nW10gY29udHJpYnV0aW9uVVJJcyA9IGdldENvbnRyaWJ1dGlvblVSSXMoY29udHJpYnV0aW9uTG9jYXRpb24sIGNvbnRyaWJ1dGlvbk5hbWVzKTsNCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGlvbnMubGVuZ3RoOyBpKyspIHsNCisgICAgICAgICAgICAgICAgY29udHJpYnV0aW9uc1tpXSA9IG5ldyBDb250cmlidXRpb24oY29udHJpYnV0aW9uTmFtZXNbaV0sIGNvbnRyaWJ1dGlvblVSSXNbaV0pOw0KKyAgICAgICAgICAgIH0gLy8gZW5kIGZvcg0KKw0KKyAgICAgICAgICAgIG5vZGUgPSBsYXVuY2hlci5jcmVhdGVOb2RlKGNvbXBvc2l0ZU5hbWUsIGNvbnRyaWJ1dGlvbnMpOw0KKyAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBub2RlDQorICAgICAgICAgICAgbm9kZS5zdGFydCgpOw0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIC8vIEZvciBkZWJ1Z2dpbmcgDQorICAgICAgICAgICAgLy8gcHJpbnQgb3V0IHRoZSBjb21wb3NpdGVzIHRoYXQgaGF2ZSBiZWVuIHJlYWQgaW4gc3VjY2VzcyBjYXNlcw0KKyAgICAgICAgICAgIC8vIFN5c3RlbS5vdXQucHJpbnRsbigoKE5vZGVJbXBsKW5vZGUpLmR1bXBEb21haW5Db21wb3NpdGUoKSk7DQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgew0KKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihlLmdldE1lc3NhZ2UoKSk7DQorICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsgICAgICANCisgICAgICAgICAgICB0aHJvdyBlOw0KKyAgICAgICAgfSAvLyBlbmQgdHJ5DQorDQorICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgfSAvLyBlbmQgbWV0aG9kIHN0YXJ0Q29udHJpYnV0aW9uDQorDQorICAgIC8qKg0KKyAgICAgKiBHZXRzIHRoZSBsb2NhdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9ucyBhcyBVUklzDQorICAgICAqIEBwYXJhbSBjb250cmlidXRpb25Mb2NhdGlvbiAtIGEgbG9jYXRpb24gcGF0dGVybiBVUkksIHdoaWNoIGNvbnRhaW5zIG9uZSBvciBtb3JlICIlMSINCisgICAgICogc3Vic3RyaW5ncywgd2hpY2ggYXJlIHN1YnN0aXR1dGVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGNvbnRyaWJ1dGlvbiB0byBnZXQgdGhlIFVSSSBvZg0KKyAgICAgKiB0aGUgY29udHJpYnV0aW9uDQorICAgICAqIEByZXR1cm4gdGhlIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbnMgYXMgYW4gYXJyYXkgb2YgU3RyaW5ncw0KKyAgICAgKi8NCisgICAgcHJvdGVjdGVkIFN0cmluZ1tdIGdldENvbnRyaWJ1dGlvblVSSXMoU3RyaW5nIGNvbnRyaWJ1dGlvbkxvY2F0aW9uLCBTdHJpbmdbXSBjb250cmlidXRpb25OYW1lcykgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBTdHJpbmdbXSBsb2NhdGlvbnMgPSBuZXcgU3RyaW5nW2NvbnRyaWJ1dGlvbk5hbWVzLmxlbmd0aF07DQorDQorICAgICAgICBpZiAobG9jYXRpb25zICE9IG51bGwgJiYgY29udHJpYnV0aW9uTG9jYXRpb24gIT0gbnVsbCkgew0KKw0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9jYXRpb25zLmxlbmd0aDsgaSsrKSB7DQorICAgICAgICAgICAgICAgIFN0cmluZyBhTG9jYXRpb24gPSBjb250cmlidXRpb25Mb2NhdGlvbi5yZXBsYWNlQWxsKCIlMSIsIGNvbnRyaWJ1dGlvbk5hbWVzW2ldKTsNCisNCisgICAgICAgICAgICAgICAgbG9jYXRpb25zW2ldID0gYUxvY2F0aW9uOw0KKyAgICAgICAgICAgIH0gLy8gZW5kIGZvciAgICAJICAJDQorICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgIGlmIChsb2NhdGlvbnMgPT0gbnVsbCkgew0KKyAgICAgICAgICAgICAgICAvLyBObyBjb250cmlidXRpb24gc3BlY2lmaWVkIC0gdGhyb3cgYW4gRXhjZXB0aW9uDQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBTQ0EgcnVudGltZSAtIG5vIGNvbnRyaWJ1dGlvbiBzdXBwbGllZCAtIGVycm9yIik7DQorICAgICAgICAgICAgfSBlbHNlIHsNCisgICAgICAgICAgICAgICAgLy8gTm8gY29udHJpYnV0aW9uIGxvY2F0aW9uIHN1cHBsaWVkIC0gdGhyb3cgYW4gRXhjZXB0aW9uDQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oIlVuYWJsZSB0byBzdGFydCBTQ0EgcnVudGltZSAtIG5vIGNvbnRyaWJ1dGlvbiBsb2NhdGlvbiBzdXBwbGllZCAtIGVycm9yIik7DQorICAgICAgICAgICAgfSAvLyBlbmQgaWYgDQorICAgICAgICB9IC8vIGVuZCBpZg0KKw0KKyAgICAgICAgcmV0dXJuIGxvY2F0aW9uczsNCisgICAgfSAvLyBlbmQgZ2V0Q29udHJpYnV0aW9uVVJJDQorDQorICAgIHB1YmxpYyB2b2lkIHN0b3BDb250cmlidXRpb24oKSB7DQorICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7DQorICAgICAgICAgICAgbm9kZS5zdG9wKCk7DQorICAgICAgICB9IC8vIGVuZCBpZg0KKyAgICAgICAgaWYgKGxhdW5jaGVyICE9IG51bGwpIHsNCisgICAgICAgICAgICBsYXVuY2hlci5kZXN0cm95KCk7DQorICAgICAgICB9IC8vIGVuZCBpZg0KKyAgICB9IC8vIGVuZCBtZXRob2Qgc3RvcENvbnRyaWJ1dGlvbg0KKyAgICANCisgICAgcHVibGljIHZvaWQgY2hlY2tFcnJvcihTdHJpbmcgdGVzdE5hbWUsIFRocm93YWJsZSBleCkgdGhyb3dzIFRocm93YWJsZSB7IA0KKyAgICAgICAgICAgICAgDQorICAgICAgICBTdHJpbmcgZXhwZWN0ZWRNZXNzYWdlID0gZXhwZWN0ZWRFcnJvck1lc3NhZ2VzLmdldFByb3BlcnR5KHRlc3ROYW1lKTsNCisgICAgICAgIFN0cmluZyByZWNlaXZlZE1lc3NhZ2UgPSBnZXRFcnJvck1lc3NhZ2UoZXgpOy8vZXguZ2V0TWVzc2FnZSgpOw0KKyAgICAgICAgDQorICAgICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlID09IG51bGwpew0KKyAgICAgICAgICAgIHdyaXRlTWlzc2luZ01lc3NhZ2UodGVzdE5hbWUsIGV4KTsNCisgICAgICAgICAgICBmYWlsKCJOdWxsIGV4cGVjdGVkIGVycm9yIG1lc3NhZ2UgZm9yIHRlc3QgIiArIHRlc3ROYW1lICsgDQorICAgICAgICAgICAgICAgICAiUGxlYXNlIGFkZCBtZXNzYWdlIHRvIG9hc2lzLXNjYS10ZXN0cy1lcnJvcnMucHJvcGVydGllcyIpOw0KKyAgICAgICAgfSAvLyBlbmQgaWYNCisgICAgICAgIA0KKyAgICAgICAgaWYgKHJlY2VpdmVkTWVzc2FnZSA9PSBudWxsKXsNCisgICAgICAgICAgICBleC5wcmludFN0YWNrVHJhY2UoKTsNCisgICAgICAgICAgICBmYWlsKCJOdWxsIHJlY2VpdmVkIGVycm9yIG1lc3NhZ2UgZm9yIHRlc3QgIiArIHRlc3ROYW1lKTsNCisgICAgICAgIH0gLy8gZW5kIGlmDQorDQorICAgICAgICBpZiAoZXhwZWN0ZWRNZXNzYWdlLnN0YXJ0c1dpdGgoIioiKSkgew0KKyAgICAgICAgICAgIC8vIGFsbG93IHVzaW5nICogdG8gaWdub3JlIGEgbWVzc2FnZSBjb21wYXJpc29uDQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICAvLyBEZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIG1lc3NhZ2UgaGFzIHZhcmlhYmxlIHBhcnRzIHdpdGhpbiBpdA0KKyAgICAgICAgLy8gbWFya2VkIHdpdGggdGhlIGNoYXJhY3RlcnMgKioqLiBIZXJlIHdlIHRva2VuaXplIHRoZSBleHBlY3RlZCBzdHJpbmcgDQorICAgICAgICAvLyBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgaW5kaXZpZHVhbCBwYXJ0cyBhcmUgcHJlc2VudCBpbiB0aGUgcmVzdWx0cyBzdHJpbmcNCisgICAgICAgIFN0cmluZyBleHBlY3RlZE1lc3NhZ2VQYXJ0c1tdID0gZXhwZWN0ZWRNZXNzYWdlLnNwbGl0KCJcXCpcXCpcXCoiKTsNCisgICAgICAgIA0KKyAgICAgICAgaWYgKGV4cGVjdGVkTWVzc2FnZVBhcnRzLmxlbmd0aCA+IDEpew0KKyAgICAgICAgICAgIGludCBmb3VuZFBhcnRzID0gMDsNCisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRNZXNzYWdlUGFydHMubGVuZ3RoOyBpKyspew0KKyAgICAgICAgICAgICAgICBpZiAocmVjZWl2ZWRNZXNzYWdlLmluZGV4T2YoZXhwZWN0ZWRNZXNzYWdlUGFydHNbaV0pID4gLTEgKXsNCisgICAgICAgICAgICAgICAgICAgIGZvdW5kUGFydHMrKzsNCisgICAgICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIH0NCisgICAgICAgICAgICANCisgICAgICAgICAgICBpZiAoZm91bmRQYXJ0cyA9PSBleHBlY3RlZE1lc3NhZ2VQYXJ0cy5sZW5ndGgpew0KKyAgICAgICAgICAgICAgICByZXR1cm47DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgDQorICAgICAgICAvLyBEZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlIGVuZCBvZiB0aGUgbWVzc2FnZSBpcyB2YXJpYWJsZSAoZWcgY29udGFpbnMgYWJzb2x1dGUgZmlsZW5hbWVzKSANCisgICAgICAgIC8vIGFuZCB3aGVyZSB0aGUgb25seSByZWxldmFudCBwYXJ0IGlzIHRoZSBzdGFydCBvZiB0aGUgbWVzc2FnZSAtIGluIHRoaXMgY2FzZSB0aGUgZXhwZWN0ZWQNCisgICAgICAgIC8vIG1lc3NhZ2Ugb25seSBjb250YWlucyB0aGUgc3RlbSBzZWN0aW9uIHdoaWNoIGlzIHVuY2hhbmdpbmcuLi4NCisgICAgICAgIGlmKCByZWNlaXZlZE1lc3NhZ2UubGVuZ3RoKCkgPiBleHBlY3RlZE1lc3NhZ2UubGVuZ3RoKCkgKSB7DQorICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdGhlIHJlY2VpdmVkIG1lc3NhZ2UgdG8gdGhlIGxlbmd0aCBvZiB0aGUgZXhwZWN0ZWQgbWVzc2FnZQ0KKyAgICAgICAgICAgIHJlY2VpdmVkTWVzc2FnZSA9IHJlY2VpdmVkTWVzc2FnZS5zdWJzdHJpbmcoMCwgZXhwZWN0ZWRNZXNzYWdlLmxlbmd0aCgpICk7DQorICAgICAgICB9IC8vIGVuZCBpZg0KKw0KKyAgICAgICAgaWYgKCFleHBlY3RlZE1lc3NhZ2UuZXF1YWxzKHJlY2VpdmVkTWVzc2FnZSkpIHsNCisgICAgICAgICAgICB3cml0ZUluY29ycmVjdE1lc3NhZ2UodGVzdE5hbWUsIGV4cGVjdGVkTWVzc2FnZSwgcmVjZWl2ZWRNZXNzYWdlKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCBleHBlY3RlZE1lc3NhZ2UsIHJlY2VpdmVkTWVzc2FnZSApOw0KKyAgICAgICAgDQorICAgICAgICByZXR1cm47DQorICAgICAgIA0KKyAgICB9DQorDQorICAgIHByb3RlY3RlZCB2b2lkIHdyaXRlTWlzc2luZ01lc3NhZ2UoU3RyaW5nIHRlc3ROYW1lLCBUaHJvd2FibGUgZXgpIHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIgb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKCJ0YXJnZXQvT1Rlc3RNaXNzaW5nTXNncy50eHQiLCB0cnVlKSk7DQorICAgICAgICAgICAgb3V0LndyaXRlKHRlc3ROYW1lICsgIj0qIik7DQorICAgICAgICAgICAgb3V0Lm5ld0xpbmUoKTsNCisgICAgICAgICAgICBvdXQuY2xvc2UoKTsNCisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCisgICAgICAgIH0gDQorICAgIH0NCisNCisgICAgcHJvdGVjdGVkIHZvaWQgd3JpdGVJbmNvcnJlY3RNZXNzYWdlKFN0cmluZyB0ZXN0TmFtZSwgU3RyaW5nIGV4cGVjdGVkLCBTdHJpbmcgcmVjZWl2ZWQpIHsNCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgQnVmZmVyZWRXcml0ZXIgb3V0ID0gbmV3IEJ1ZmZlcmVkV3JpdGVyKG5ldyBGaWxlV3JpdGVyKCJ0YXJnZXQvT1Rlc3RJbmNvcnJlY3RNc2dzLnR4dCIsIHRydWUpKTsNCisgICAgICAgICAgICBvdXQud3JpdGUodGVzdE5hbWUpOyBvdXQubmV3TGluZSgpOw0KKyAgICAgICAgICAgIG91dC53cml0ZSgiICAgICIgKyBleHBlY3RlZCk7IG91dC5uZXdMaW5lKCk7DQorICAgICAgICAgICAgb3V0LndyaXRlKCIgICAgIiArIHJlY2VpdmVkKTsgb3V0Lm5ld0xpbmUoKTsNCisgICAgICAgICAgICBvdXQuY2xvc2UoKTsNCisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsNCisgICAgICAgIH0gDQorICAgIH0NCisgICAgDQorICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0RXJyb3JNZXNzYWdlKFRocm93YWJsZSBleCkgew0KKyAgICAgICAgU3RyaW5nIGVycm9yTWVzc2FnZSA9IG51bGw7DQorICAgICAgICANCisgICAgICAgIGlmIChleCBpbnN0YW5jZW9mIFRlc3RFeGNlcHRpb25fRXhjZXB0aW9uKSB7DQorICAgICAgICAgICAgVGVzdEV4Y2VwdGlvbl9FeGNlcHRpb24gdGUgPSAoVGVzdEV4Y2VwdGlvbl9FeGNlcHRpb24pIGV4Ow0KKyAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHRlLmdldEZhdWx0SW5mbygpLmdldE1lc3NhZ2UoKTsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXguZ2V0TWVzc2FnZSgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlOw0KKyAgICB9DQorDQorfSAvLyBlbmQgY2xhc3MgVHVzY2FueVJ1bnRpbWVCcmlkZ2UNCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvcG9saWN5L3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvc3JjL3Rlc3QvcmVzb3VyY2VzL29hc2lzLXNjYS10ZXN0cy5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNDdmYzMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvcG9saWN5L3NyYy90ZXN0L3Jlc291cmNlcy9vYXNpcy1zY2EtdGVzdHMucHJvcGVydGllcwpAQCAtMCwwICsxLDMwIEBACisjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisjIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisjIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisjIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisjICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisjIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIA0KKyMgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIA0KKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyMgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisjICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyMgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorIyBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorIyB1bmRlciB0aGUgTGljZW5zZS4gDQorDQorIyBPQVNJUyBTQ0EgQXNzZW1ibHkgdGVzdCBwcm9wZXJ0aWVzDQorIyBUaGUgaW1wbGVtZW50YXRpb24gdHlwZSB0byB1c2UgZm9yIEFzc2VtYmx5IHRlc3Qgc3VpdGUNCisjIG9yZy5vYXNpcy5zY2EudGVzdHMuYXNzZW1ibHkubGFuZz1CUEVMDQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5sYW5nPUphdmENCisNCisjIFRoZSBjbGFzcyB0byB1c2UgYXMgdGhlIFJ1bnRpbWUgQnJpZGdlIGZvciB0aGUgU0NBIHJ1bnRpbWUgdW5kZXIgdGVzdA0KKyNvcmcub2FzaXMuc2NhLnRlc3RzLmFzc2VtYmx5LnJ1bnRpbWVfYnJpZGdlPW9yZy5hcGFjaGUudHVzY2FueS5zY2Eub3Rlc3QuVHVzY2FueU9TR2lSdW50aW1lQnJpZGdlDQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5ydW50aW1lX2JyaWRnZT1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm90ZXN0LlR1c2NhbnlSdW50aW1lQnJpZGdlDQorDQorIyBUaGUgbG9jYXRpb24gb2YgdGhlIGNvbnRyaWJ1dGlvbnMgZm9yIHRoZSB0ZXN0IHN1aXRlDQorIyAlMSByZXByZXNlbnRzIHRoZSBwbGFjZW1lbnQgb2YgdGhlIG5hbWUgb2YgZWFjaCBjb250cmlidXRpb24gaW50byB0aGUgbG9jYXRpb24gVVJJDQorb3JnLm9hc2lzLnNjYS50ZXN0cy5hc3NlbWJseS5jb250cmlidXRpb24ubG9jYXRpb249dGFyZ2V0L29hc2lzLWNvbnRyaWJ1dGlvbnMvJTEvdGFyZ2V0LyUxLnppcA0KKw0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzIGIvdGVzdGluZy9jb21wbGlhbmNlLXRlc3RzL3BvbGljeS9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E2ZTA2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9wb2xpY3kvc3JjL3Rlc3QvcmVzb3VyY2VzL3R1c2Nhbnktb2FzaXMtc2NhLXRlc3RzLWVycm9ycy5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsNTcgQEAKKyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMgDQorIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMgDQorIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisjIHVuZGVyIHRoZSBMaWNlbnNlLiANCisNCitQT0xfMzAwMT1UZXN0IHNlcnZpY2UgZ290IGFuIGV4Y2VwdGlvbiBkdXJpbmcgZXhlY3V0aW9uOiBvcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbiBXU0RMIGRvY3VtZW50IGlzIHVzaW5nIFNPQVAgdjEuMiBidXQgU09BUCB2MS4xIGlzIHJlcXVpcmVkIGJ5IHRoZSBzcGVjaWZpZWQgcG9saWN5IGludGVudHMNCitQT0xfMzAwMj1UVVNDQU5ZLTMzNzANCitQT0xfMzAwMz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUE9MXzMwMDMsIEFydGlmYWN0OiBNRVRBLUlORi9kZWZpbml0aW9ucy54bWwsIERlZmluaXRpb25zOiBqYXI6ZmlsZToqKiovUE9MXzMwMDMuemlwIS9NRVRBLUlORi9kZWZpbml0aW9ucy54bWxdIC0gW0FTTTEwMDAxLFBPTDMwMDAyXSBEdXBsaWNhdGUgaW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31kdXBJbnRlbnQgZm91bmQgaW4gZG9tYWluDQorUE9MXzMwMDQ9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IFBPTF8zMDA0LCBBcnRpZmFjdDogTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sLCBEZWZpbml0aW9uczogamFyOmZpbGU6KioqL1BPTF8zMDA0LnppcCEvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sXSAtIFtQT0wzMDAwNF0gSW50ZW50IHR3b0RlZmF1bHRzIGhhcyBtb3JlIHRoYW4gb25lIHF1YWxpZmllciBtYXJrZWQgYXMgdGhlIGRlZmF1bHQgcXVhbGlmaWVyDQorUE9MXzMwMDU9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IFBPTF8zMDA1LCBBcnRpZmFjdDogTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sLCBEZWZpbml0aW9uczogamFyOmZpbGU6KioqL1BPTF8zMDA1LnppcCEvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sXSAtIFtQT0wzMDAwNV0gVGhlIGludGVudCBkdXBRdWFsaWZpZXJzIGhhcyBtb3JlIHRoYW4gb25lIHF1YWxpZmllciB3aXRoIHRoZSBuYW1lIHF1YWwxDQorUE9MXzMwMDY9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IFBPTF8zMDA2LCBBcnRpZmFjdDogTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sLCBEZWZpbml0aW9uczogamFyOmZpbGU6KioqL1BPTF8zMDA2LnppcCEvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sXSAtIFtQT0wzMDAwNl0gVGhlIHByb2ZpbGUgaW50ZW50IG5hbWUgYmFkLlByb2ZpbGVJbnRlbnQgbXVzdCBub3QgaGF2ZSB0aGUgY2hhcmFjdGVyICIuIiBpbiBpdA0KK1BPTF8zMDA5PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBQT0xfMzAwOSwgQXJ0aWZhY3Q6IE1FVEEtSU5GL2RlZmluaXRpb25zLnhtbCwgRGVmaW5pdGlvbnM6IGphcjpmaWxlOioqKi9QT0xfMzAwOS56aXAhL01FVEEtSU5GL2RlZmluaXRpb25zLnhtbF0gLSBbUE9MMzAwMTBdIFRoZSBwb2xpY3kgc2V0IFR3b0ludGVudE1hcFBvbGljeVNldCBoYXMgbW9yZSB0aGFuIG9uZSBpbnRlbnQgbWFwIHdpdGggdGhlIG5hbWUgdGVzdEludGVudDYNCitQT0xfMzAxMj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9TeXN0ZW1Db250cmlidXRpb25dIC0gW1BPTDMwMDE1XSBSZXF1aXJlZCBJbnRlbnQgLSB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9dW5kZWZpbmVkSW50ZW50MiBub3QgZm91bmQgZm9yIFByb2ZpbGVJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfWJhZFByb2ZpbGVJbnRlbnQNCitQT0xfMzAxMz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy9TeXN0ZW1Db250cmlidXRpb25dIC0gW1BPTDMwMDE2XSBFeGNsdWRlZCBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXVuZGVmaW5lZEludGVudCBub3QgZm91bmQgZm9yIGludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9bm9NdXhJbnRlbnQNCitQT0xfMzAxND1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUG9saWN5X0dlbmVyYWwsIERlZmluaXRpb25zOiBqYXI6ZmlsZToqKiovUG9saWN5X0dlbmVyYWwuemlwIS9NRVRBLUlORi9kZWZpbml0aW9ucy54bWxdIC0gRHVwbGljYXRlUG9saWN5U2V0DQorUE9MXzMwMTU9b3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb250cmlidXRpb24ucHJvY2Vzc29yLkNvbnRyaWJ1dGlvblJlYWRFeGNlcHRpb246IGphdmF4LnhtbC54cGF0aC5YUGF0aEV4cHJlc3Npb25FeGNlcHRpb24NCitQT0xfMzAxNj1vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5wcm9jZXNzb3IuQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbjogamF2YXgueG1sLnhwYXRoLlhQYXRoRXhwcmVzc2lvbkV4Y2VwdGlvbg0KK1BPTF8zMDE3PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL1N5c3RlbUNvbnRyaWJ1dGlvbl0gLSBbUE9MMzAwMjBdIFRoZSBwb2xpY3kgc2V0IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31CYWRJbnRlbnRNYXBQb2xpY3lTZXQgaW50ZW50IG1hcCB0ZXN0SW50ZW50NiBoYXMgbWlzc2luZyBxdWFsaWZpZXJzOiB0ZXN0SW50ZW50Ni5xdWFsMiAgVGhlIGludGVudCBtYXAgcXVhbGlmaWVycyBtdXN0IG1hdGNoIHRoZSBwcm92aWRlZCBpbnRlbnQgcXVhbGlmaWVycy4NCitQT0xfMzAxOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUE9MXzMwMTgsIEFydGlmYWN0OiBNRVRBLUlORi9kZWZpbml0aW9ucy54bWwsIERlZmluaXRpb25zOiBqYXI6ZmlsZToqKiovUE9MXzMwMTguemlwIS9NRVRBLUlORi9kZWZpbml0aW9ucy54bWxdIC0gW1BPTDMwMDIxXSBJbnRlbnQgTWFwIHByb3ZpZGVzIGZvciBJbnRlbnQgbm90IHNwZWNpZmllZCBhcyBwcm92aWRlZCBieSBwYXJlbnQgUG9saWN5U2V0IC0gQmFkSW50ZW50TWFwUG9saWN5U2V0DQorUE9MXzMwMjA9VFVTQ0FOWS0zMzcxDQorUE9MXzQwMDE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDbGllbnQsIFNlcnZpY2U6IFRlc3RJbnZvY2F0aW9uXSAtIFRoZSBpbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXRlc3RJbnRlbnRFeHQyIGFzc29jaWF0ZWQgd2l0aCBwb2xpY3kgc3ViamVjdCAqKipFbmRwb2ludDogIFVSSSA9IFRlc3RDbGllbnQjc2VydmljZS1iaW5kaW5nKFRlc3RJbnZvY2F0aW9uL1Rlc3RJbnZvY2F0aW9uKSBoYXMgbm8gbWF0Y2hpbmcgcG9saWN5IHNldA0KK1BPTF80MDA0PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBURVNUX1BPTF80MDA0Q29tcG9uZW50MSwgQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9VGVzdENvbXBvc2l0ZUltcGxJbnRlbnQsIENvbXBvbmVudDogVGVzdENvbXBvc2l0ZTBDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlMCwgQ29tcG9uZW50OiBUZXN0Q29tcG9zaXRlMENvbXBvbmVudDFdIC0gVGhlIGludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9dGVzdEltcGxJbnRlbnQucXVhbDIgYXNzb2NpYXRlZCB3aXRoIHBvbGljeSBzdWJqZWN0IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9aW1wbGVtZW50YXRpb24uamF2YSAoY2xhc3M9b3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUltcGwpIGhhcyBubyBtYXRjaGluZyBwb2xpY3kgc2V0DQorUE9MXzQwMDU9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfUE9MXzQwMDVDb21wb25lbnQxLCBTZXJ2aWNlOiBTZXJ2aWNlMV0gLSBUaGUgaW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM310ZXN0SW1wbEludGVudC5xdWFsMiBhc3NvY2lhdGVkIHdpdGggcG9saWN5IHN1YmplY3QgKioqRW5kcG9pbnQ6ICBVUkkgPSBURVNUX1BPTF80MDA1Q29tcG9uZW50MSNzZXJ2aWNlLWJpbmRpbmcoU2VydmljZTEvU2VydmljZTEpIGhhcyBubyBtYXRjaGluZyBwb2xpY3kgc2V0DQorUE9MXzQwMDY9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDbGllbnQsIFNlcnZpY2U6IFRlc3RJbnZvY2F0aW9uXSAtIFRoZSBpbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfUhpZ2hJbnRlbnQgYXNzb2NpYXRlZCB3aXRoIHBvbGljeSBzdWJqZWN0ICoqKkVuZHBvaW50OiAgVVJJID0gVGVzdENsaWVudCNzZXJ2aWNlLWJpbmRpbmcoVGVzdEludm9jYXRpb24vVGVzdEludm9jYXRpb24pIGhhcyBubyBtYXRjaGluZyBwb2xpY3kgc2V0DQorUE9MXzQwMDk9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfUE9MXzQwMDlDb21wb25lbnQxLCBDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM31UZXN0Q29tcG9zaXRlSW1wbFBvbGljeVNldCwgQ29tcG9uZW50OiBUZXN0Q29tcG9zaXRlMENvbXBvbmVudDEsIENvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVRlc3RDb21wb3NpdGUwLCBDb21wb25lbnQ6IFRlc3RDb21wb3NpdGUwQ29tcG9uZW50MV0gLSBUaGUgaW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM310ZXN0SW1wbEludGVudDIgYXNzb2NpYXRlZCB3aXRoIHBvbGljeSBzdWJqZWN0IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9aW1wbGVtZW50YXRpb24uamF2YSAoY2xhc3M9b3JnLm9hc2lzb3Blbi5zY2EudGVzdC5zZXJ2aWNlMUltcGwpIGhhcyBubyBtYXRjaGluZyBwb2xpY3kgc2V0DQorUE9MXzQwMTA9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRlc3RDbGllbnQsIFNlcnZpY2U6IFRlc3RJbnZvY2F0aW9uXSAtIFRoZSBpbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfURpcmVjdEludGVudCBhc3NvY2lhdGVkIHdpdGggcG9saWN5IHN1YmplY3QgKioqRW5kcG9pbnQ6ICBVUkkgPSBUZXN0Q2xpZW50I3NlcnZpY2UtYmluZGluZyhUZXN0SW52b2NhdGlvbi9UZXN0SW52b2NhdGlvbikgaGFzIG5vIG1hdGNoaW5nIHBvbGljeSBzZXQNCitQT0xfNDAxMj1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENsaWVudCwgU2VydmljZTogVGVzdEludm9jYXRpb25dIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfXRlc3RJbnRlbnQqKiogYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYXRlc3RzLzIwMDkwM310ZXN0SW50ZW50KioqIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCitQT0xfNDAxOD1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVGVzdENsaWVudCwgU2VydmljZTogVGVzdEludm9jYXRpb25dIC0gVGhlIGludGVudCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2F0ZXN0cy8yMDA5MDN9RGlyZWN0SW50ZW50IGFzc29jaWF0ZWQgd2l0aCBwb2xpY3kgc3ViamVjdCAqKipFbmRwb2ludDogIFVSSSA9IFRlc3RDbGllbnQjc2VydmljZS1iaW5kaW5nKFRlc3RJbnZvY2F0aW9uL1Rlc3RJbnZvY2F0aW9uKSBoYXMgbm8gbWF0Y2hpbmcgcG9saWN5IHNldA0KK1BPTF80MDI3PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBQT0xfNDAyNywgQXJ0aWZhY3Q6IE1FVEEtSU5GL2RlZmluaXRpb25zLnhtbCwgRGVmaW5pdGlvbnM6KioqIC0gW1BPTDQwMDIwXSBEdXBsaWNhdGUgYmluZGluZyB0eXBlIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9ZHVwQmluZGluZy50eXBlIGZvdW5kIGluIGRvbWFpbg0KK1BPTF80MDI4PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfV0gLSBbUE9MNDAwMDJdIFRoZSBwb2xpY3kge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhdGVzdHMvMjAwOTAzfVBvbGljeVNldEV4dEF0dGFjaFByb3AgaGFzIGJlZW4gYXR0YWNoZWQgdG8gYSBwcm9wZXJ0eSBvciBvbmUgb2YgaXRzIGNoaWxkcmVuLiBUaGlzIGlzIG5vdCBhbGxvd2VkLg0KK1BPTF80MDMzPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29udHJpYnV0aW9uOiBQT0xfNDAzMywgQXJ0aWZhY3Q6IE1FVEEtSU5GL2RlZmluaXRpb25zLnhtbCwgRGVmaW5pdGlvbnM6KioqIC0gQ29udHJpYnV0aW9uUmVhZEV4Y2VwdGlvbiBvY2N1cnJlZCBkdWUgdG86IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuY29udHJpYnV0aW9uLnByb2Nlc3Nvci5Db250cmlidXRpb25SZWFkRXhjZXB0aW9uOiBqYXZheC54bWwueHBhdGguWFBhdGhFeHByZXNzaW9uRXhjZXB0aW9uDQorUE9MXzUwMDE9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb250cmlidXRpb246IGh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcvU3lzdGVtQ29udHJpYnV0aW9uXSAtIFtQT0w1MDAwMV0gQW4gZXh0ZW5zaW9uIHRvIHN1cHBvcnQgdGhlIGltcGxlbWVudGF0aW9uIHR5cGUge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn11bmtub3duLnR5cGUgY2FudCBiZSBmb3VuZCBpbiB0aGUgZG9tYWluDQorUE9MXzkwMDY9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtdIC0gVGhlIENvbXBvbmVudCByZWZlcmVuY2UgcmVmZXJlbmNlMSBjYW4gbm90IHJlcXVpcmUgdHJhbnNhY3RlZE9uZVdheSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgQ29tcG9uZW50IFRFU1RfUE9MXzkwMDZDb21wb25lbnQxIHJlcXVpcmVzIG1hbmFnZWRUcmFuc2FjdGlvbi5sb2NhbA0KK1BPTF85MDA5PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbXSAtIFRoZSBDb21wb25lbnQgc2VydmljZSBTZXJ2aWNlMSBjYW4gbm90IHJlcXVpcmUgdHJhbnNhY3RlZE9uZVdheSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgQ29tcG9uZW50IFRFU1RfUE9MXzkwMDlDb21wb25lbnQyIHJlcXVpcmVzIG1hbmFnZWRUcmFuc2FjdGlvbi5sb2NhbA0KK1BPTF85MDE1PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbXSAtIFRoZSBjb21wb25lbnQgc2VydmljZSBTZXJ2aWNlMSBjYW4gbm90IHJlcXVpcmUgcHJvcGFnYXRlc1RyYW5zYWN0aW9uIGJlY2F1c2UgdGhlIGltcGxlbWVudGF0aW9uIGZvciBjb21wb25lbnQgVEVTVF9QT0xfOTAxNUNvbXBvbmVudDEgcmVxdWlyZXMgbWFuYWdlZFRyYW5zYWN0aW9uLmxvY2FsDQorUE9MXzkwMTY9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtdIC0gVGhlIGNvbXBvbmVudCBzZXJ2aWNlIFNlcnZpY2UxIGNhbiBub3QgcmVxdWlyZSBwcm9wYWdhdGVzVHJhbnNhY3Rpb24gYmVjYXVzZSB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGNvbXBvbmVudCBURVNUX1BPTF85MDE2Q29tcG9uZW50MSByZXF1aXJlcyBub01hbmFnZWRUcmFuc2FjdGlvbg0KK1BPTF85MDE3PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbXSAtIFRoZSBjb21wb25lbnQgcmVmZXJlbmNlIHJlZmVyZW5jZTEgY2FuIG5vdCByZXF1aXJlIHByb3BhZ2F0ZXNUcmFuc2FjdGlvbiBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgY29tcG9uZW50IFRFU1RfUE9MXzkwMTdDb21wb25lbnQxIHJlcXVpcmVzIG1hbmFnZWRUcmFuc2FjdGlvbi5sb2NhbA0KK1BPTF85MDE4PW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbXSAtIFRoZSBjb21wb25lbnQgcmVmZXJlbmNlIHJlZmVyZW5jZTEgY2FuIG5vdCByZXF1aXJlIHByb3BhZ2F0ZXNUcmFuc2FjdGlvbiBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgY29tcG9uZW50IFRFU1RfUE9MXzkwMThDb21wb25lbnQxIHJlcXVpcmVzIG5vTWFuYWdlZFRyYW5zYWN0aW9uDQorUE9MXzkwMTk9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFsqKipdIC0gVGhlIENvbXBvbmVudCByZWZlcmVuY2UgcmVmZXJlbmNlMSBjYW4gbm90IHJlcXVpcmUgdHJhbnNhY3RlZE9uZVdheSBiZWNhdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgQ29tcG9uZW50IFRFU1RfUE9MXzkwMTlDb21wb25lbnQxIHJlcXVpcmVzIG1hbmFnZWRUcmFuc2FjdGlvbi5sb2NhbA0KK1BPTF85MDIwPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbXSAtIFRoZSBjb21wb25lbnQgcmVmZXJlbmNlIHJlZmVyZW5jZTEgY2FuIG5vdCByZXF1aXJlIHRyYW5zYWN0ZWRPbmVXYXkgYmVjYXVzZSB0aGUgb3BlcmF0aW9uIG9wZXJhdGlvbjEgaXMgYSB0d28gd2F5IG9wZXJhdGlvbg0KK1BPTF85MDIxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbXSAtIFRoZSBjb21wb25lbnQgcmVmZXJlbmNlIHJlZmVyZW5jZTEgY2FuIG5vdCByZXF1aXJlIGltbWVkaWF0ZU9uZVdheSBiZWNhdXNlIHRoZSBvcGVyYXRpb24gb3BlcmF0aW9uMSBpcyBhIHR3byB3YXkgb3BlcmF0aW9uDQorUE9MXzkwMjI9b3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb246IFtDb21wb3NpdGU6IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9LCBDb21wb25lbnQ6IFRFU1RfUE9MXzkwMjJDb21wb25lbnQxLCBSZWZlcmVuY2U6IHJlZmVyZW5jZTFdIC0gW1BPTDQwMDA5LEFTTTYwMDA5LEFTTTYwMDEwLEpDQTcwMDAxLEpDQTcwMDAzXSBJbnRlbnQge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0qKiogYW5kIHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9KioqIGFyZSBtdXR1YWxseSBleGNsdXNpdmUNCitQT0xfOTAyMz1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbXBvc2l0ZToge2h0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMn0sIENvbXBvbmVudDogVEVTVF9QT0xfOTAyM0NvbXBvbmVudDIsIFNlcnZpY2U6IFNlcnZpY2UxXSAtIFtQT0w0MDAwOSxBU002MDAwOSxBU002MDAxMCxKQ0E3MDAwMSxKQ0E3MDAwM10gSW50ZW50IHtodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTJ9KioqIGFuZCB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSoqKiBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlDQorUE9MXzEwMDAxPW9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOiBbQ29tcG9zaXRlOiB7aHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyfSwgQ29tcG9uZW50OiBUZXN0Q2xpZW50LCBTZXJ2aWNlOiBUZXN0SW52b2NhdGlvbl0gLSBUaGUgbm9MaXN0ZW5lciBpbnRlbnQgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIG9uIGEgcmVmZXJlbmNlLg0KK1BPTF8xMTAwMT1vcmcub2FzaXNvcGVuLnNjYS5TZXJ2aWNlUnVudGltZUV4Y2VwdGlvbjogW0NvbnRyaWJ1dGlvbjogUE9MXzExMDAxLCBBcnRpZmFjdDogVGVzdF9QT0xfMTEwMDEuY29tcG9zaXRlXSAtIFhNTFNjaGVtYSB2YWxpZGF0aW9uIGVycm9yIG9jY3VyZWQgaW46IFRlc3RfUE9MXzExMDAxLmNvbXBvc2l0ZSAsbGluZSA9IDIxLCBjb2x1bW4gPSA0LCBNZXNzYWdlID0gY3ZjLWNvbXBsZXgtdHlwZS4zLjIuMjogQXR0cmlidXRlICdiYWRBdHRyaWJ1dGUnIGlzIG5vdCBhbGxvd2VkIHRvIGFwcGVhciBpbiBlbGVtZW50ICdwb2xpY3lTZXRBdHRhY2htZW50Jy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvcG9tLnhtbCBiL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NTM1YWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvcG9tLnhtbApAQCAtMCwwICsxLDUzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1zY2E8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+DQorICAgIDxhcnRpZmFjdElkPnR1c2NhbnktY29tcGxpYW5jZS10ZXN0czwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIENvbXBsaWFuY2UgVGVzdHM8L25hbWU+DQorDQorICAgIDxyZXBvc2l0b3JpZXM+DQorICAgICAgICA8cmVwb3NpdG9yeT4NCisgICAgICAgICAgICA8IS0tIE9BU0lTIHdpbGwgZXZlbnR1YWxseSBwdWJsaXNoIHRoZXNlIHRoZW1zZWx2ZXMgYnV0IGZvciBub3cgdGhleSdyZSBpbiB0aGUgVHVzY2FueSBzdm4gLS0+DQorICAgICAgICAgICAgPGlkPm9hc2lzLmNvbnRyaWJ1dGlvbnM8L2lkPg0KKyAgICAgICAgICAgIDx1cmw+aHR0cDovL3N2bi5hcGFjaGUub3JnL3JlcG9zL2FzZi90dXNjYW55L21hdmVuPC91cmw+DQorICAgICAgICA8L3JlcG9zaXRvcnk+DQorICAgIDwvcmVwb3NpdG9yaWVzPg0KKw0KKyAgICA8bW9kdWxlcz4NCisNCisgICAgICAgPG1vZHVsZT5hc3NlbWJseTwvbW9kdWxlPg0KKyAgICAgICA8bW9kdWxlPmphdmEtY2FhPC9tb2R1bGU+DQorICAgICAgIDxtb2R1bGU+amF2YS1jaTwvbW9kdWxlPg0KKyAgICAgICA8bW9kdWxlPnBvbGljeTwvbW9kdWxlPg0KKyAgICAgICA8bW9kdWxlPmJpbmRpbmctd3M8L21vZHVsZT4NCis8IS0tICAgDQorICAgICAgIDxtb2R1bGU+YmluZGluZy1qbXM8L21vZHVsZT4NCistLT4NCisgICAgPC9tb2R1bGVzPg0KKw0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L1QzNTU4L3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L1QzNTU4L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY4NDZlYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvVDM1NTgvcG9tLnhtbApAQCAtMCwwICsxLDQ1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3QtdDM1NTg8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBUMzU1ODwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRhdGEtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgPC9kZXBlbmRlbmNpZXM+DQorICAgIA0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9UMzU1OC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvdDM1NTgvVDM1NThUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9UMzU1OC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvdDM1NTgvVDM1NThUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9UMzU1OC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvdDM1NTgvVDM1NThUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L1QzNTU4L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC90MzU1OC9UMzU1OFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L1QzNTU4L3NyYy90ZXN0L3Jlc291cmNlcy9zYW1wbGUtc3RvcmUtYWxsLmphciBiL3Rlc3RpbmcvaXRlc3QvVDM1NTgvc3JjL3Rlc3QvcmVzb3VyY2VzL3NhbXBsZS1zdG9yZS1hbGwuamFyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9UMzU1OC9zcmMvdGVzdC9yZXNvdXJjZXMvc2FtcGxlLXN0b3JlLWFsbC5qYXIKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvVDM1NTgvc3JjL3Rlc3QvcmVzb3VyY2VzL3NhbXBsZS1zdG9yZS1hbGwuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l0ZXN0L1QzNTU4L3NyYy90ZXN0L3Jlc291cmNlcy9zYW1wbGUtc3RvcmUtY2xpZW50LmphciBiL3Rlc3RpbmcvaXRlc3QvVDM1NTgvc3JjL3Rlc3QvcmVzb3VyY2VzL3NhbXBsZS1zdG9yZS1jbGllbnQuamFyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9UMzU1OC9zcmMvdGVzdC9yZXNvdXJjZXMvc2FtcGxlLXN0b3JlLWNsaWVudC5qYXIKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvVDM1NTgvc3JjL3Rlc3QvcmVzb3VyY2VzL3NhbXBsZS1zdG9yZS1jbGllbnQuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l0ZXN0L1QzNTU4L3NyYy90ZXN0L3Jlc291cmNlcy9zYW1wbGUtc3RvcmUuamFyIGIvdGVzdGluZy9pdGVzdC9UMzU1OC9zcmMvdGVzdC9yZXNvdXJjZXMvc2FtcGxlLXN0b3JlLmphcgpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvVDM1NTgvc3JjL3Rlc3QvcmVzb3VyY2VzL3NhbXBsZS1zdG9yZS5qYXIKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvVDM1NTgvc3JjL3Rlc3QvcmVzb3VyY2VzL3NhbXBsZS1zdG9yZS5qYXIKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJjNGUwYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3BvbS54bWwKQEAgLTAsMCArMSwxNjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKworICAgIDxhcnRpZmFjdElkPml0ZXN0LWFzeW5jLWludGVncmF0aW9uczwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBBc3luYyBJbnRlZ3JhdGlvbiBUZXN0czwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1qbXM8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLmFjdGl2ZW1xPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjUuMi4wPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnJ1bnRpbWU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5qdW5pdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPmp1bml0PC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKyAgICA8YnVpbGQ+CisgICAgICAgIDxwbHVnaW5zPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5idWlsZC1oZWxwZXItbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuNTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5hZGQtamF4d3M8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPmFkZC10ZXN0LXNvdXJjZTwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9qYXh3cy1zb3VyY2U8L3NvdXJjZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NvdXJjZXM+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgIDwvcGx1Z2luPgorICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuY29kZWhhdXMubW9qbzwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qYXh3cy1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4xMjwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8IS0tIEV4cGxpY2l0bHkgYWRkIHRoZSB0cmFuc2l0aXZlIGRlcGVuZGVuY2llcyBmb3IgamF4d3MtYXBpIGh0dHA6Ly9qaXJhLmNvZGVoYXVzLm9yZy9icm93c2UvTUVWLTQ5OCAtLT4KKyAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmphdmF4Lmp3czwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjE4MS1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjAtTVIxPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+amF2YXguYW5ub3RhdGlvbjwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjI1MC1hcGk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4xLjA8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD53c2ltcG9ydC1jbGllbnQ8L2lkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPmdlbmVyYXRlLXNvdXJjZXM8L3BoYXNlPgorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPndzaW1wb3J0PC9nb2FsPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsRGlyZWN0b3J5PiR7YmFzZWRpcn0vc3JjL21haW4vcmVzb3VyY2VzL3dzZGw8L3dzZGxEaXJlY3Rvcnk+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxGaWxlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxGaWxlPmNyZWRpdGNhcmQud3NkbDwvd3NkbEZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93c2RsRmlsZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJpbmRpbmdEaXJlY3Rvcnk+JHtiYXNlZGlyfS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbDwvYmluZGluZ0RpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZGluZ0ZpbGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZGluZ0ZpbGU+Y3JlZGl0Y2FyZC1jbGllbnQueG1sPC9iaW5kaW5nRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2JpbmRpbmdGaWxlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlRGVzdERpcj4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9qYXh3cy1zb3VyY2U8L3NvdXJjZURlc3REaXI+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDb25maWd1cmUgdGhlIHN0YWxlIGZpbGUgc28gdGhhdCB0d28gZXhlY3V0aW9ucyB3aWxsIHdvcmsgLS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0YWxlRmlsZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS93c2ltcG9ydC1jbGllbnQuc3RhbGU8L3N0YWxlRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmVyYm9zZT5mYWxzZTwvdmVyYm9zZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eG5vY29tcGlsZT50cnVlPC94bm9jb21waWxlPgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhqY0FyZ3M+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4amNBcmc+LXA8L3hqY0FyZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhqY0FyZz5jb20uZXhhbXBsZS50ZXN0LmpheGIuY2xpZW50PC94amNBcmc+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC94amNBcmdzPgorCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPndzaW1wb3J0LXNlcnZlcjwvaWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+d3NpbXBvcnQ8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2dvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxEaXJlY3Rvcnk+JHtiYXNlZGlyfS9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbDwvd3NkbERpcmVjdG9yeT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbEZpbGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbEZpbGU+Y3JlZGl0Y2FyZC53c2RsPC93c2RsRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxGaWxlcz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmluZGluZ0RpcmVjdG9yeT4ke2Jhc2VkaXJ9L3NyYy9tYWluL3Jlc291cmNlcy93c2RsPC9iaW5kaW5nRGlyZWN0b3J5PgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kaW5nRmlsZXM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiaW5kaW5nRmlsZT5jcmVkaXRjYXJkLXNlcnZlci54bWw8L2JpbmRpbmdGaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYmluZGluZ0ZpbGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzb3VyY2VEZXN0RGlyPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L2pheHdzLXNvdXJjZTwvc291cmNlRGVzdERpcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RhbGVGaWxlPiR7cHJvamVjdC5idWlsZC5kaXJlY3Rvcnl9L3dzaW1wb3J0LXNlcnZlci5zdGFsZTwvc3RhbGVGaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJib3NlPmZhbHNlPC92ZXJib3NlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx4bm9jb21waWxlPnRydWU8L3hub2NvbXBpbGU+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eGpjQXJncz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHhqY0FyZz4tcDwveGpjQXJnPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8eGpjQXJnPmNvbS5leGFtcGxlLnRlc3QuamF4Yi5zZXJ2ZXI8L3hqY0FyZz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3hqY0FyZ3M+CisKKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPgorICAgICAgICAgICAgPC9wbHVnaW4+CisgICAgICAgIDwvcGx1Z2lucz4KKyAgICA8L2J1aWxkPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L2NsaWVudC9DcmVkaXRDYXJkQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3QvY2xpZW50L0NyZWRpdENhcmRDbGllbnQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWE5YmMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L2NsaWVudC9DcmVkaXRDYXJkQ2xpZW50LmphdmEKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2UgdGVzdC5jbGllbnQ7CisKKy8qKgorICogQSBjbGllbnQgaW50ZXJmYWNlIHRvIGludm9rZSB0aGUgQ3JlZGl0Q2FyZFBheW1lbnQgdXNpbmcgZGlmZmVyZW50IGludGVyYWN0aW9uIHBhdHRlcm5zCisgKi8KK3B1YmxpYyBpbnRlcmZhY2UgQ3JlZGl0Q2FyZENsaWVudCB7CisgICAgLyoqCisgICAgICogSW52b2tlIHRoZSBzZXJ2aWNlIHN5bmNocm9ub3VzbHkgCisgICAgICogQHBhcmFtIGNyZWRpdENhcmROdW1iZXIKKyAgICAgKiBAcGFyYW0gaG9sZGVyCisgICAgICogQHBhcmFtIGFtb3VudAorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBTdHJpbmcgYXV0aG9yaXplKFN0cmluZyBjcmVkaXRDYXJkTnVtYmVyLCBTdHJpbmcgaG9sZGVyLCBmbG9hdCBhbW91bnQpOworCisgICAgLyoqCisgICAgICogSW52b2tlIHRoZSBzZXJ2aWNlIGFzeW5jaHJvbm91c2x5IGFuZCBwb2xsIGZvciB0aGUgcmVzdWx0IAorICAgICAqIEBwYXJhbSBjcmVkaXRDYXJkTnVtYmVyCisgICAgICogQHBhcmFtIGhvbGRlcgorICAgICAqIEBwYXJhbSBhbW91bnQKKyAgICAgKiBAcmV0dXJuCisgICAgICovCisgICAgU3RyaW5nIGF1dGhvcml6ZUFzeW5jKFN0cmluZyBjcmVkaXRDYXJkTnVtYmVyLCBTdHJpbmcgaG9sZGVyLCBmbG9hdCBhbW91bnQpOworCisgICAgLyoqCisgICAgICogSW52b2tlIHRoZSBzZXJ2aWNlIGFzeW5jaHJvbm91c2x5IGFuZCBnZXQgdGhlIHJlc3VsdCBmcm9tIGEgY2FsbGJhY2sKKyAgICAgKiBAcGFyYW0gY3JlZGl0Q2FyZE51bWJlcgorICAgICAqIEBwYXJhbSBob2xkZXIKKyAgICAgKiBAcGFyYW0gYW1vdW50CisgICAgICogQHJldHVybgorICAgICAqLworICAgIFN0cmluZyBhdXRob3JpemVBc3luY1dpdGhDYWxsYmFjayhTdHJpbmcgY3JlZGl0Q2FyZE51bWJlciwgU3RyaW5nIGhvbGRlciwgZmxvYXQgYW1vdW50KTsKKworICAgIC8qKgorICAgICAqIEludm9rZSB0aGUgc2VydmljZSB1c2luZyBvbmV3YXkgKGZpcmUtYW5kLWZvcmdldCkgYW5kIHRoZSB0YXJnZXQgY29tcG9uZW50IHdpbGwgbWFrZSBhIGNhbGxiYWNrIHVwb24gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkCisgICAgICogQHBhcmFtIGNyZWRpdENhcmROdW1iZXIKKyAgICAgKiBAcGFyYW0gaG9sZGVyCisgICAgICogQHBhcmFtIGFtb3VudAorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBTdHJpbmcgYXV0aG9yaXplU0NBQXN5bmNXaXRoQ2FsbGJhY2soU3RyaW5nIGNyZWRpdENhcmROdW1iZXIsIFN0cmluZyBob2xkZXIsIGZsb2F0IGFtb3VudCk7CisgICAgCisgICAgLyoqCisgICAgICogSW52b2tlIHRoZSBzZXJ2aWNlIHVzaW5nIHJlcXVlc3QvcmVzcG9uc2UgYW5kIHRoZSB0YXJnZXQgY29tcG9uZW50IHdpbGwgbWFrZSBhIGNhbGxiYWNrIHVwb24gdGhlIHJlcXVlc3QgaGFzIGJlZW4gcHJvY2Vzc2VkCisgICAgICogQHBhcmFtIGNyZWRpdENhcmROdW1iZXIKKyAgICAgKiBAcGFyYW0gaG9sZGVyCisgICAgICogQHBhcmFtIGFtb3VudAorICAgICAqIEByZXR1cm4KKyAgICAgKi8KKyAgICBTdHJpbmcgYXV0aG9yaXplU0NBV2l0aENhbGxiYWNrKFN0cmluZyBjcmVkaXRDYXJkTnVtYmVyLCBTdHJpbmcgaG9sZGVyLCBmbG9hdCBhbW91bnQpOworfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L2NsaWVudC9DcmVkaXRDYXJkUGF5bWVudENhbGxiYWNrLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3QvY2xpZW50L0NyZWRpdENhcmRQYXltZW50Q2FsbGJhY2suamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDhmMzBkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L2NsaWVudC9DcmVkaXRDYXJkUGF5bWVudENhbGxiYWNrLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2UgdGVzdC5jbGllbnQ7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLk9uZVdheTsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKKworLyoqCisgKiBUaGUgb25ld2F5IGNhbGxiYWNrIGludGVyZmFjZQorICovCitAUmVtb3RhYmxlCitwdWJsaWMgaW50ZXJmYWNlIENyZWRpdENhcmRQYXltZW50Q2FsbGJhY2sgeworICAgIC8vIE1ha2VzIGEgY2FsbGJhY2sKKyAgICBAT25lV2F5CisgICAgdm9pZCBhdXRob3JpemVSZXNwb25zZU9uZXdheShTdHJpbmcgY3JlZGl0Q2FyZE51bWJlciwgU3RyaW5nIHN0YXR1cyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3QvY2xpZW50L0NyZWRpdENhcmRQYXltZW50Q2FsbGJhY2tTeW5jLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3QvY2xpZW50L0NyZWRpdENhcmRQYXltZW50Q2FsbGJhY2tTeW5jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAxZWZmYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL2phdmEvdGVzdC9jbGllbnQvQ3JlZGl0Q2FyZFBheW1lbnRDYWxsYmFja1N5bmMuamF2YQpAQCAtMCwwICsxLDMwIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworcGFja2FnZSB0ZXN0LmNsaWVudDsKKworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOworCisvKioKKyAqIFRoZSBzeW5jaHJvbm91cyBjYWxsYmFjayBpbnRlcmZhY2UKKyAqLworQFJlbW90YWJsZQorcHVibGljIGludGVyZmFjZSBDcmVkaXRDYXJkUGF5bWVudENhbGxiYWNrU3luYyB7CisgICAgLy8gTWFrZXMgYSBjYWxsYmFjaworICAgIFN0cmluZyBhdXRob3JpemVSZXNwb25zZShTdHJpbmcgY3JlZGl0Q2FyZE51bWJlciwgU3RyaW5nIHN0YXR1cyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3QvY2xpZW50L0NyZWRpdENhcmRQYXltZW50Q2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L2NsaWVudC9DcmVkaXRDYXJkUGF5bWVudENsaWVudEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWE2MjAzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L2NsaWVudC9DcmVkaXRDYXJkUGF5bWVudENsaWVudEltcGwuamF2YQpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2UgdGVzdC5jbGllbnQ7CisKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkZ1dHVyZTsKKworaW1wb3J0IGphdmF4LnhtbC53cy5Bc3luY0hhbmRsZXI7CitpbXBvcnQgamF2YXgueG1sLndzLlJlc3BvbnNlOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5TZXJ2aWNlOworCitpbXBvcnQgY29tLmV4YW1wbGUudGVzdC5qYXhiLmNsaWVudC5BdXRob3JpemVSZXNwb25zZTsKK2ltcG9ydCBjb20uZXhhbXBsZS50ZXN0LmpheGIuY2xpZW50LkNyZWRpdENhcmREZXRhaWxzVHlwZTsKK2ltcG9ydCBjb20uZXhhbXBsZS50ZXN0LmpheGIuY2xpZW50Lk9iamVjdEZhY3Rvcnk7CitpbXBvcnQgY29tLmV4YW1wbGUudGVzdC5qYXhiLmNsaWVudC5QYXllclR5cGU7CitpbXBvcnQgY29tLmV4YW1wbGUudGVzdC5qYXh3cy5jbGllbnQuQXV0aG9yaXplRmF1bHQ7CitpbXBvcnQgY29tLmV4YW1wbGUudGVzdC5qYXh3cy5jbGllbnQuQ3JlZGl0Q2FyZFBheW1lbnQ7CisKKy8qKgorICogTW9ja2VkIGltcGxlbWVudGF0aW9uIG9mIENyZWRpdENhcmRQYXltZW50Q2xpZW50CisgKi8KK0BTZXJ2aWNlKENyZWRpdENhcmRDbGllbnQuY2xhc3MpCitwdWJsaWMgY2xhc3MgQ3JlZGl0Q2FyZFBheW1lbnRDbGllbnRJbXBsIGltcGxlbWVudHMgQ3JlZGl0Q2FyZENsaWVudCwgQ3JlZGl0Q2FyZFBheW1lbnRDYWxsYmFjaywKKyAgICBDcmVkaXRDYXJkUGF5bWVudENhbGxiYWNrU3luYyB7CisKKyAgICBAUmVmZXJlbmNlCisgICAgcHJpdmF0ZSBDcmVkaXRDYXJkUGF5bWVudCBwcm94eTsKKworICAgIEBSZWZlcmVuY2UKKyAgICBwcml2YXRlIENyZWRpdENhcmRQYXltZW50UmVxdWVzdENsaWVudCBhc3luY1Byb3h5OworCisgICAgQFJlZmVyZW5jZQorICAgIHByaXZhdGUgQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0Q2xpZW50U3luYyBzeW5jUHJveHk7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgU3RyaW5nIGF1dGhvcml6ZShTdHJpbmcgY3JlZGl0Q2FyZE51bWJlciwgU3RyaW5nIGhvbGRlciwgZmxvYXQgYW1vdW50KSB7CisgICAgICAgIENyZWRpdENhcmREZXRhaWxzVHlwZSBjcmVkaXRDYXJkID0gY3JlYXRlQ3JlZGl0Q2FyZChjcmVkaXRDYXJkTnVtYmVyLCBob2xkZXIpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gcHJveHkuYXV0aG9yaXplKGNyZWRpdENhcmQsIGFtb3VudCk7CisgICAgICAgIH0gY2F0Y2ggKEF1dGhvcml6ZUZhdWx0IGUpIHsKKyAgICAgICAgICAgIHJldHVybiAiRkFJTDogIiArIGUuZ2V0RmF1bHRJbmZvKCkuZ2V0RXJyb3JDb2RlKCk7CisgICAgICAgIH0KKworICAgIH0KKworICAgIHByaXZhdGUgQ3JlZGl0Q2FyZERldGFpbHNUeXBlIGNyZWF0ZUNyZWRpdENhcmQoU3RyaW5nIGNyZWRpdENhcmROdW1iZXIsIFN0cmluZyBob2xkZXIpIHsKKyAgICAgICAgT2JqZWN0RmFjdG9yeSBmYWN0b3J5ID0gbmV3IE9iamVjdEZhY3RvcnkoKTsKKyAgICAgICAgQ3JlZGl0Q2FyZERldGFpbHNUeXBlIGNyZWRpdENhcmQgPSBmYWN0b3J5LmNyZWF0ZUNyZWRpdENhcmREZXRhaWxzVHlwZSgpOworICAgICAgICBjcmVkaXRDYXJkLnNldENyZWRpdENhcmROdW1iZXIoY3JlZGl0Q2FyZE51bWJlcik7CisgICAgICAgIFBheWVyVHlwZSBwYXllciA9IGZhY3RvcnkuY3JlYXRlUGF5ZXJUeXBlKCk7CisgICAgICAgIHBheWVyLnNldE5hbWUoaG9sZGVyKTsKKyAgICAgICAgY3JlZGl0Q2FyZC5zZXRDYXJkT3duZXIocGF5ZXIpOworICAgICAgICByZXR1cm4gY3JlZGl0Q2FyZDsKKyAgICB9CisKKyAgICBwdWJsaWMgU3RyaW5nIGF1dGhvcml6ZUFzeW5jKFN0cmluZyBjcmVkaXRDYXJkTnVtYmVyLCBTdHJpbmcgaG9sZGVyLCBmbG9hdCBhbW91bnQpIHsKKyAgICAgICAgQ3JlZGl0Q2FyZERldGFpbHNUeXBlIGNyZWRpdENhcmQgPSBjcmVhdGVDcmVkaXRDYXJkKGNyZWRpdENhcmROdW1iZXIsIGhvbGRlcik7CisKKyAgICAgICAgUmVzcG9uc2U8QXV0aG9yaXplUmVzcG9uc2U+IHJlc3BvbmUgPSBwcm94eS5hdXRob3JpemVBc3luYyhjcmVkaXRDYXJkLCBhbW91bnQpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIHJlc3BvbmUuZ2V0KCkuZ2V0U3RhdHVzKCk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOworICAgICAgICAgICAgcmV0dXJuICJGQUlMOiAiICsgZS5nZXRNZXNzYWdlKCk7CisgICAgICAgIH0KKworICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgYXV0aG9yaXplQXN5bmNXaXRoQ2FsbGJhY2soU3RyaW5nIGNyZWRpdENhcmROdW1iZXIsIFN0cmluZyBob2xkZXIsIGZsb2F0IGFtb3VudCkgeworICAgICAgICBDcmVkaXRDYXJkRGV0YWlsc1R5cGUgY3JlZGl0Q2FyZCA9IGNyZWF0ZUNyZWRpdENhcmQoY3JlZGl0Q2FyZE51bWJlciwgaG9sZGVyKTsKKworICAgICAgICBGdXR1cmU8Pz4gcmVzcG9uZSA9IHByb3h5LmF1dGhvcml6ZUFzeW5jKGNyZWRpdENhcmQsIGFtb3VudCwgbmV3IEFzeW5jSGFuZGxlcjxBdXRob3JpemVSZXNwb25zZT4oKSB7CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIHZvaWQgaGFuZGxlUmVzcG9uc2UoUmVzcG9uc2U8QXV0aG9yaXplUmVzcG9uc2U+IHJlcykgeworICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIiBSZXNwb25zZSBoYXMgYXJyaXZlZDogIiArIHJlcy5nZXQoKS5nZXRTdGF0dXMoKSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIHdoaWxlICghKHJlc3BvbmUuaXNEb25lKCkgfHwgcmVzcG9uZS5pc0NhbmNlbGxlZCgpKSkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBUaHJlYWQuc2xlZXAoMTAwMCk7CisgICAgICAgICAgICB9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gIkZBSUw6ICIgKyBlLmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIiBUaGUgdGFzayBpcyBkb25lIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gKChBdXRob3JpemVSZXNwb25zZSlyZXNwb25lLmdldCgpKS5nZXRTdGF0dXMoKTsKKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICByZXR1cm4gIkZBSUw6ICIgKyBlLmdldE1lc3NhZ2UoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIEEgbWFwIHRoYXQgaG9zdCB0aGUgcmVzdWx0IGZvciBhIGdpdmVuIGNyZWRpdCBjYXJkCisgICAgICovCisgICAgcHJpdmF0ZSBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBzdGF0dXNNYXAgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKKworICAgIHB1YmxpYyBTdHJpbmcgYXV0aG9yaXplU0NBQXN5bmNXaXRoQ2FsbGJhY2soU3RyaW5nIGNyZWRpdENhcmROdW1iZXIsIFN0cmluZyBob2xkZXIsIGZsb2F0IGFtb3VudCkgeworICAgICAgICBDcmVkaXRDYXJkRGV0YWlsc1R5cGUgY3JlZGl0Q2FyZCA9IGNyZWF0ZUNyZWRpdENhcmQoY3JlZGl0Q2FyZE51bWJlciwgaG9sZGVyKTsKKyAgICAgICAgYXN5bmNQcm94eS5hdXRob3JpemVSZXF1ZXN0T25ld2F5KGNyZWRpdENhcmQsIGFtb3VudCk7CisgICAgICAgIHN5bmNocm9uaXplZCAoc3RhdHVzTWFwKSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBzdGF0dXNNYXAucmVtb3ZlKCJBU1lOQzoiICsgY3JlZGl0Q2FyZE51bWJlcik7CisgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUmVzcG9uc2UgZm91bmQgZm9yICIgKyBjcmVkaXRDYXJkTnVtYmVyICsgIiA6IiArIHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c01hcC53YWl0KCk7CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGUucHJpbnRTdGFja1RyYWNlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkZBSUw6ICIgKyBlLmdldE1lc3NhZ2UoKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyB2b2lkIGF1dGhvcml6ZVJlc3BvbnNlT25ld2F5KFN0cmluZyBjcmVkaXRDYXJkTnVtYmVyLCBTdHJpbmcgc3RhdHVzKSB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiU0NBIG9uZSBjYWxsYmFjazogQ3JlZGl0Q2FyZDogIiArIGNyZWRpdENhcmROdW1iZXIgKyAiIFN0YXR1czogIiArIHN0YXR1cyk7CisgICAgICAgIHN5bmNocm9uaXplZCAoc3RhdHVzTWFwKSB7CisgICAgICAgICAgICBzdGF0dXNNYXAucHV0KCJBU1lOQzoiICsgY3JlZGl0Q2FyZE51bWJlciwgc3RhdHVzKTsKKyAgICAgICAgICAgIHN0YXR1c01hcC5ub3RpZnlBbGwoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHB1YmxpYyBTdHJpbmcgYXV0aG9yaXplU0NBV2l0aENhbGxiYWNrKFN0cmluZyBjcmVkaXRDYXJkTnVtYmVyLCBTdHJpbmcgaG9sZGVyLCBmbG9hdCBhbW91bnQpIHsKKyAgICAgICAgQ3JlZGl0Q2FyZERldGFpbHNUeXBlIGNyZWRpdENhcmQgPSBjcmVhdGVDcmVkaXRDYXJkKGNyZWRpdENhcmROdW1iZXIsIGhvbGRlcik7CisgICAgICAgIHN5bmNQcm94eS5hdXRob3JpemVSZXF1ZXN0KGNyZWRpdENhcmQsIGFtb3VudCk7CisgICAgICAgIHN5bmNocm9uaXplZCAoc3RhdHVzTWFwKSB7CisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBzdGF0dXMgPSBzdGF0dXNNYXAucmVtb3ZlKCJTWU5DOiIgKyBjcmVkaXRDYXJkTnVtYmVyKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJSZXNwb25zZSBmb3VuZCBmb3IgIiArIGNyZWRpdENhcmROdW1iZXIgKyAiIDoiICsgc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzTWFwLndhaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmludFN0YWNrVHJhY2UoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAiRkFJTDogIiArIGUuZ2V0TWVzc2FnZSgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyBhdXRob3JpemVSZXNwb25zZShTdHJpbmcgY3JlZGl0Q2FyZE51bWJlciwgU3RyaW5nIHN0YXR1cykgeworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIlNDQSBzeW5jaHJvbm91cyBjYWxsYmFjazogQ3JlZGl0Q2FyZDogIiArIGNyZWRpdENhcmROdW1iZXIgKyAiIFN0YXR1czogIiArIHN0YXR1cyk7CisgICAgICAgIHN5bmNocm9uaXplZCAoc3RhdHVzTWFwKSB7CisgICAgICAgICAgICBzdGF0dXNNYXAucHV0KCJTWU5DOiIgKyBjcmVkaXRDYXJkTnVtYmVyLCBzdGF0dXMpOworICAgICAgICAgICAgc3RhdHVzTWFwLm5vdGlmeUFsbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiQUNLIjsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL2phdmEvdGVzdC9jbGllbnQvQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0Q2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3QvY2xpZW50L0NyZWRpdENhcmRQYXltZW50UmVxdWVzdENsaWVudC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlMGU5OWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3QvY2xpZW50L0NyZWRpdENhcmRQYXltZW50UmVxdWVzdENsaWVudC5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2UgdGVzdC5jbGllbnQ7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkNhbGxiYWNrOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uT25lV2F5OworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOworCitpbXBvcnQgY29tLmV4YW1wbGUudGVzdC5qYXhiLmNsaWVudC5DcmVkaXRDYXJkRGV0YWlsc1R5cGU7CisKKy8qKgorICogVGhlIGJpLWRpcmVjdGlvbiBpbnRlcmZhY2UgZm9yIHRoZSBjbGllbnQgc2lkZSAod2UgbmVlZCBzZXBhcmF0ZSBjbGFzc2VzIGZvciB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgc28gdGhhdCB0aGV5IGNhbiB0YWtlIGRpZmZlcmVudCBDcmVkaXRDYXJkRGV0YWlsc1R5cGUpCisgKi8KK0BSZW1vdGFibGUKK0BDYWxsYmFjayhDcmVkaXRDYXJkUGF5bWVudENhbGxiYWNrLmNsYXNzKQorcHVibGljIGludGVyZmFjZSBDcmVkaXRDYXJkUGF5bWVudFJlcXVlc3RDbGllbnQgeworICAgIC8vIFNlbmQgb3V0IHRoZSByZXF1ZXN0CisgICAgQE9uZVdheQorICAgIHZvaWQgYXV0aG9yaXplUmVxdWVzdE9uZXdheShDcmVkaXRDYXJkRGV0YWlsc1R5cGUgY3JlZGl0Q2FyZCwgZmxvYXQgYW1vdW50KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL2phdmEvdGVzdC9jbGllbnQvQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0Q2xpZW50U3luYy5qYXZhIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L2NsaWVudC9DcmVkaXRDYXJkUGF5bWVudFJlcXVlc3RDbGllbnRTeW5jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJmNTAxNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL2phdmEvdGVzdC9jbGllbnQvQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0Q2xpZW50U3luYy5qYXZhCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2UgdGVzdC5jbGllbnQ7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkNhbGxiYWNrOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOworCitpbXBvcnQgY29tLmV4YW1wbGUudGVzdC5qYXhiLmNsaWVudC5DcmVkaXRDYXJkRGV0YWlsc1R5cGU7CisKKy8qKgorICogVGhlIHN5bmNocm9ub3VzIGJpLWRpcmVjdGlvbiBpbnRlcmZhY2UgZm9yIHRoZSBjbGllbnQgc2lkZSAod2UgbmVlZCBzZXBhcmF0ZSBjbGFzc2VzIGZvciB0aGUgY2xpZW50IGFuZCBzZXJ2ZXIgc28gdGhhdCB0aGV5IGNhbiB0YWtlIGRpZmZlcmVudCBDcmVkaXRDYXJkRGV0YWlsc1R5cGUpCisgKi8KK0BSZW1vdGFibGUKK0BDYWxsYmFjayhDcmVkaXRDYXJkUGF5bWVudENhbGxiYWNrU3luYy5jbGFzcykKK3B1YmxpYyBpbnRlcmZhY2UgQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0Q2xpZW50U3luYyB7CisgICAgLy8gU2VuZCBvdXQgdGhlIHJlcXVlc3QKKyAgICBTdHJpbmcgYXV0aG9yaXplUmVxdWVzdChDcmVkaXRDYXJkRGV0YWlsc1R5cGUgY3JlZGl0Q2FyZCwgZmxvYXQgYW1vdW50KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL2phdmEvdGVzdC9zZXJ2ZXIvQ3JlZGl0Q2FyZFBheW1lbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3Qvc2VydmVyL0NyZWRpdENhcmRQYXltZW50SW1wbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkOTQ2YjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3Qvc2VydmVyL0NyZWRpdENhcmRQYXltZW50SW1wbC5qYXZhCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2UgdGVzdC5zZXJ2ZXI7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkNhbGxiYWNrOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uU2VydmljZTsKKworaW1wb3J0IHRlc3QuY2xpZW50LkNyZWRpdENhcmRQYXltZW50Q2FsbGJhY2s7CitpbXBvcnQgdGVzdC5jbGllbnQuQ3JlZGl0Q2FyZFBheW1lbnRDYWxsYmFja1N5bmM7CisKK2ltcG9ydCBjb20uZXhhbXBsZS50ZXN0LmpheGIuc2VydmVyLkNyZWRpdENhcmREZXRhaWxzVHlwZTsKK2ltcG9ydCBjb20uZXhhbXBsZS50ZXN0LmpheHdzLnNlcnZlci5BdXRob3JpemVGYXVsdDsKK2ltcG9ydCBjb20uZXhhbXBsZS50ZXN0LmpheHdzLnNlcnZlci5DcmVkaXRDYXJkUGF5bWVudDsKKworLyoqCisgKiBNb2NrZWQgaW1wbGVtZW50YXRpb24gb2YgQ3JlZGl0Q2FyZFBheW1lbnQgCisgKi8KK0BTZXJ2aWNlKHtDcmVkaXRDYXJkUGF5bWVudC5jbGFzcywgQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0U2VydmVyLmNsYXNzLCBDcmVkaXRDYXJkUGF5bWVudFJlcXVlc3RTZXJ2ZXJTeW5jLmNsYXNzfSkKK3B1YmxpYyBjbGFzcyBDcmVkaXRDYXJkUGF5bWVudEltcGwgaW1wbGVtZW50cyBDcmVkaXRDYXJkUGF5bWVudCwgQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0U2VydmVyLAorICAgIENyZWRpdENhcmRQYXltZW50UmVxdWVzdFNlcnZlclN5bmMgeworICAgIEBDYWxsYmFjaworICAgIHByb3RlY3RlZCBDcmVkaXRDYXJkUGF5bWVudENhbGxiYWNrIGNhbGxiYWNrOworICAgIAorICAgIEBDYWxsYmFjaworICAgIHByb3RlY3RlZCBDcmVkaXRDYXJkUGF5bWVudENhbGxiYWNrU3luYyBjYWxsYmFja1N5bmM7CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwdWJsaWMgdm9pZCBhdXRob3JpemVSZXF1ZXN0T25ld2F5KENyZWRpdENhcmREZXRhaWxzVHlwZSBjcmVkaXRDYXJkLCBmbG9hdCBhbW91bnQpIHsKKyAgICAgICAgU3RyaW5nIHN0YXR1czsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHN0YXR1cyA9IGF1dGhvcml6ZShjcmVkaXRDYXJkLCBhbW91bnQpOworICAgICAgICB9IGNhdGNoIChBdXRob3JpemVGYXVsdCBlKSB7CisgICAgICAgICAgICBzdGF0dXMgPSAiRkFJTDogIiArIGUuZ2V0RmF1bHRJbmZvKCkuZ2V0RXJyb3JDb2RlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FsbGJhY2suYXV0aG9yaXplUmVzcG9uc2VPbmV3YXkoY3JlZGl0Q2FyZC5nZXRDcmVkaXRDYXJkTnVtYmVyKCksIHN0YXR1cyk7CisgICAgfQorICAgIAorICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgYXV0aG9yaXplUmVxdWVzdChDcmVkaXRDYXJkRGV0YWlsc1R5cGUgY3JlZGl0Q2FyZCwgZmxvYXQgYW1vdW50KSB7CisgICAgICAgIFN0cmluZyBzdGF0dXM7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzdGF0dXMgPSBhdXRob3JpemUoY3JlZGl0Q2FyZCwgYW1vdW50KTsKKyAgICAgICAgfSBjYXRjaCAoQXV0aG9yaXplRmF1bHQgZSkgeworICAgICAgICAgICAgc3RhdHVzID0gIkZBSUw6ICIgKyBlLmdldEZhdWx0SW5mbygpLmdldEVycm9yQ29kZSgpOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrU3luYy5hdXRob3JpemVSZXNwb25zZShjcmVkaXRDYXJkLmdldENyZWRpdENhcmROdW1iZXIoKSwgc3RhdHVzKTsKKyAgICAgICAgcmV0dXJuICJBQ0siOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgYXV0aG9yaXplKENyZWRpdENhcmREZXRhaWxzVHlwZSBjcmVkaXRDYXJkLCBmbG9hdCBhbW91bnQpIHRocm93cyBBdXRob3JpemVGYXVsdCB7CisgICAgICAgIGlmIChjcmVkaXRDYXJkICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiQ2hlY2tpbmcgY2FyZDogbmFtZSA9ICIgKyBjcmVkaXRDYXJkLmdldENhcmRPd25lcigpLmdldE5hbWUoKQorICAgICAgICAgICAgICAgICsgIiBudW1iZXIgPSAiCisgICAgICAgICAgICAgICAgKyBjcmVkaXRDYXJkLmdldENyZWRpdENhcmROdW1iZXIoKQorICAgICAgICAgICAgICAgICsgIiBmb3IgYW1vdW50ICIKKyAgICAgICAgICAgICAgICArIGFtb3VudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkNoZWNraW5nIGNhcmQgaXMgbnVsbCIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuICJPSyI7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9qYXZhL3Rlc3Qvc2VydmVyL0NyZWRpdENhcmRQYXltZW50UmVxdWVzdFNlcnZlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L3NlcnZlci9DcmVkaXRDYXJkUGF5bWVudFJlcXVlc3RTZXJ2ZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjU3ZTVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L3NlcnZlci9DcmVkaXRDYXJkUGF5bWVudFJlcXVlc3RTZXJ2ZXIuamF2YQpAQCAtMCwwICsxLDM5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHRlc3Quc2VydmVyOworCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5DYWxsYmFjazsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLk9uZVdheTsKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsKKworaW1wb3J0IHRlc3QuY2xpZW50LkNyZWRpdENhcmRQYXltZW50Q2FsbGJhY2s7CisKK2ltcG9ydCBjb20uZXhhbXBsZS50ZXN0LmpheGIuc2VydmVyLkNyZWRpdENhcmREZXRhaWxzVHlwZTsKKworLyoqCisgKiBUaGUgYmktZGlyZWN0aW9uIGludGVyZmFjZSBmb3IgdGhlIHNlcnZlciBzaWRlCisgKi8KK0BSZW1vdGFibGUKK0BDYWxsYmFjayhDcmVkaXRDYXJkUGF5bWVudENhbGxiYWNrLmNsYXNzKQorcHVibGljIGludGVyZmFjZSBDcmVkaXRDYXJkUGF5bWVudFJlcXVlc3RTZXJ2ZXIgeworICAgIC8vIFNlbmQgb3V0IHRoZSByZXF1ZXN0CisgICAgQE9uZVdheQorICAgIHZvaWQgYXV0aG9yaXplUmVxdWVzdE9uZXdheShDcmVkaXRDYXJkRGV0YWlsc1R5cGUgY3JlZGl0Q2FyZCwgZmxvYXQgYW1vdW50KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL2phdmEvdGVzdC9zZXJ2ZXIvQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0U2VydmVyU3luYy5qYXZhIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vamF2YS90ZXN0L3NlcnZlci9DcmVkaXRDYXJkUGF5bWVudFJlcXVlc3RTZXJ2ZXJTeW5jLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTMzNTFjMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL2phdmEvdGVzdC9zZXJ2ZXIvQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0U2VydmVyU3luYy5qYXZhCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2UgdGVzdC5zZXJ2ZXI7CisKK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLkNhbGxiYWNrOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVtb3RhYmxlOworCitpbXBvcnQgdGVzdC5jbGllbnQuQ3JlZGl0Q2FyZFBheW1lbnRDYWxsYmFja1N5bmM7CisKK2ltcG9ydCBjb20uZXhhbXBsZS50ZXN0LmpheGIuc2VydmVyLkNyZWRpdENhcmREZXRhaWxzVHlwZTsKKworLyoqCisgKiBUaGUgc3luY2hyb25vdXMgYmktZGlyZWN0aW9uIGludGVyZmFjZSBmb3IgdGhlIGNsaWVudCBzaWRlICh3ZSBuZWVkIHNlcGFyYXRlIGNsYXNzZXMgZm9yIHRoZSBjbGllbnQgYW5kIHNlcnZlciBzbyB0aGF0IHRoZXkgY2FuIHRha2UgZGlmZmVyZW50IENyZWRpdENhcmREZXRhaWxzVHlwZSkKKyAqLworQFJlbW90YWJsZQorQENhbGxiYWNrKENyZWRpdENhcmRQYXltZW50Q2FsbGJhY2tTeW5jLmNsYXNzKQorcHVibGljIGludGVyZmFjZSBDcmVkaXRDYXJkUGF5bWVudFJlcXVlc3RTZXJ2ZXJTeW5jIHsKKyAgICAvLyBTZW5kIG91dCB0aGUgcmVxdWVzdAorICAgIFN0cmluZyBhdXRob3JpemVSZXF1ZXN0KENyZWRpdENhcmREZXRhaWxzVHlwZSBjcmVkaXRDYXJkLCBmbG9hdCBhbW91bnQpOworfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI0MTMyNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzOSBAQAorICMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICMgb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgIyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICMgcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICMgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICMgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICMgd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICMgCisgIyAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICMgCisgIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgIyBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICMgIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgIyBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAjIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAjIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKK2phdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCA9IG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeQorCisjIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBjb25uZWN0b3IKK2phdmEubmFtaW5nLnByb3ZpZGVyLnVybCA9IHZtOi8vbG9jYWxob3N0P2Jyb2tlci5wZXJzaXN0ZW50PWZhbHNlCisKKyMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgSk5ESSBuYW1lIHRoZSBjb25uZWN0aW9uIGZhY3RvcnkKKyMgc2hvdWxkIGFwcGVhciBhcy4gCisjY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IGNvbm5lY3Rpb25GYWN0b3J5LCBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LCB0b3BpY0Nvbm5lY3Rpb25GYWN0cnkKK2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBDb25uZWN0aW9uRmFjdG9yeQorCisjIHJlZ2lzdGVyIHNvbWUgcXVldWVzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0KKyMgcXVldWUuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdCitxdWV1ZS5SZXF1ZXN0UXVldWUgPSBSZXF1ZXN0UXVldWUKK3F1ZXVlLlJlc3BvbnNlUXVldWUgPSBSZXNwb25zZVF1ZXVlCisKK3F1ZXVlLkNyZWRpdENhcmRQYXltZW50ID0gQ3JlZGl0Q2FyZFBheW1lbnRRdWV1ZQorcXVldWUuQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0U2VydmVyID0gQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0U2VydmVyUXVldWUKKworIyByZWdpc3RlciBzb21lIHRvcGljcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtCisjIHRvcGljLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQorI3RvcGljLk15VG9waWMgPSBleGFtcGxlLk15VG9waWMKKworIyBFTkQgU05JUFBFVDogam5kaQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL3Rlc3QvY2xpZW50L2NyZWRpdGNhcmQtY2xpZW50LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL3Jlc291cmNlcy90ZXN0L2NsaWVudC9jcmVkaXRjYXJkLWNsaWVudC5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhODAyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL3Jlc291cmNlcy90ZXN0L2NsaWVudC9jcmVkaXRjYXJkLWNsaWVudC5jb21wb3NpdGUKQEAgLTAsMCArMSw0NyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgorICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIgbmFtZT0iQ3JlZGl0Q2FyZENvbXBvc2l0ZSI+CisKKyAgICA8Y29tcG9uZW50IG5hbWU9IkNyZWRpdENhcmRQYXltZW50Q29tcG9uZW50Ij4KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9InRlc3Quc2VydmVyLkNyZWRpdENhcmRQYXltZW50SW1wbCIgLz4KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iQ3JlZGl0Q2FyZFBheW1lbnQiPgorICAgICAgICAgICAgPGJpbmRpbmcuam1zPgorICAgICAgICAgICAgICAgIDx0dXNjYW55OndpcmVGb3JtYXQuam1zVGV4dFhNTCAvPgorICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iQ3JlZGl0Q2FyZFBheW1lbnQiIC8+CisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPgorICAgICAgICA8L3NlcnZpY2U+CisgICAgICAgIAorICAgICAgICAgPHNlcnZpY2UgbmFtZT0iQ3JlZGl0Q2FyZFBheW1lbnRSZXF1ZXN0U2VydmVyIj4KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcz4KKyAgICAgICAgICAgICAgICA8dHVzY2FueTp3aXJlRm9ybWF0Lmptc1RleHRYTUwgLz4KKyAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkNyZWRpdENhcmRQYXltZW50UmVxdWVzdFNlcnZlciIgLz4KKyAgICAgICAgICAgIDwvYmluZGluZy5qbXM+CisgICAgICAgIDwvc2VydmljZT4KKyAgICA8L2NvbXBvbmVudD4KKworICAgIDxjb21wb25lbnQgbmFtZT0iQ3JlZGl0Q2FyZENsaWVudENvbXBvbmVudCI+CisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJ0ZXN0LmNsaWVudC5DcmVkaXRDYXJkUGF5bWVudENsaWVudEltcGwiIC8+CisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0icHJveHkiIHRhcmdldD0iQ3JlZGl0Q2FyZFBheW1lbnRDb21wb25lbnQvQ3JlZGl0Q2FyZFBheW1lbnQiIC8+CisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iYXN5bmNQcm94eSIgdGFyZ2V0PSJDcmVkaXRDYXJkUGF5bWVudENvbXBvbmVudC9DcmVkaXRDYXJkUGF5bWVudFJlcXVlc3RTZXJ2ZXIiIC8+CisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic3luY1Byb3h5IiB0YXJnZXQ9IkNyZWRpdENhcmRQYXltZW50Q29tcG9uZW50L0NyZWRpdENhcmRQYXltZW50UmVxdWVzdFNlcnZlclN5bmMiIC8+CisgICAgPC9jb21wb25lbnQ+CisKKzwvY29tcG9zaXRlPgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvY3JlZGl0Y2FyZC1jbGllbnQueG1sIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvY3JlZGl0Y2FyZC1jbGllbnQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkZjhmMzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9jcmVkaXRjYXJkLWNsaWVudC54bWwKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxiaW5kaW5ncworICAgIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCisgICAgeG1sbnM6d3NkbD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iCisgICAgd3NkbExvY2F0aW9uPSJjcmVkaXRjYXJkLndzZGwiCisgICAgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2pheHdzIj4KKyAgICA8YmluZGluZ3Mgbm9kZT0id3NkbDpkZWZpbml0aW9ucyI+CisgICAgICAgIDxwYWNrYWdlIG5hbWU9ImNvbS5leGFtcGxlLnRlc3QuamF4d3MuY2xpZW50Ii8+CisgICAgICAgIDxlbmFibGVBc3luY01hcHBpbmc+dHJ1ZTwvZW5hYmxlQXN5bmNNYXBwaW5nPgorICAgIDwvYmluZGluZ3M+Cis8L2JpbmRpbmdzPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL2NyZWRpdGNhcmQtc2VydmVyLnhtbCBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL2NyZWRpdGNhcmQtc2VydmVyLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjM5ZTE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvY3JlZGl0Y2FyZC1zZXJ2ZXIueG1sCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8YmluZGluZ3MKKyAgICB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgorICAgIHhtbG5zOndzZGw9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvIgorICAgIHdzZGxMb2NhdGlvbj0iY3JlZGl0Y2FyZC53c2RsIgorICAgIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qYXh3cyI+CisgICAgPGJpbmRpbmdzIG5vZGU9IndzZGw6ZGVmaW5pdGlvbnMiPgorICAgICAgICA8cGFja2FnZSBuYW1lPSJjb20uZXhhbXBsZS50ZXN0LmpheHdzLnNlcnZlciIvPgorICAgICAgICA8ZW5hYmxlQXN5bmNNYXBwaW5nPmZhbHNlPC9lbmFibGVBc3luY01hcHBpbmc+CisgICAgPC9iaW5kaW5ncz4KKzwvYmluZGluZ3M+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvY3JlZGl0Y2FyZC53c2RsIGIvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvY3JlZGl0Y2FyZC53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzOTg4MzIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2FzeW5jLWludGVyYWN0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC9jcmVkaXRjYXJkLndzZGwKQEAgLTAsMCArMSwxMjUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8d3NkbDpkZWZpbml0aW9ucyBuYW1lPSJDcmVkaXRDYXJkUGF5bWVudCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0NyZWRpdENhcmRQYXltZW50LyIKKyAgICB4bWxuczp3c2RsPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0NyZWRpdENhcmRQYXltZW50LyIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKKyAgICB4bWxuczpzb2FwPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsL3NvYXAvIj4KKyAgICA8d3NkbDp0eXBlcz4KKyAgICAgICAgPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0NyZWRpdENhcmRQYXltZW50LyIKKyAgICAgICAgICAgIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9DcmVkaXRDYXJkUGF5bWVudC8iPgorCisgICAgICAgICAgICA8IS0tIGh0dHBzOi8vamF4Yi5kZXYuamF2YS5uZXQvaXNzdWVzL3Nob3dfYnVnLmNnaT9pZD01MTggLS0+CisgICAgICAgICAgICA8IS0tIEkgaGF2ZSB0byBjaGFuZ2UgdGhlIGNvbXBsZXggdHlwZXMgdG8gYmUgYW5ub3ltb3VzIC0tPgorICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9ImF1dGhvcml6ZSI+CisgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDcmVkaXRDYXJkIiB0eXBlPSJ0bnM6Q3JlZGl0Q2FyZERldGFpbHNUeXBlIj48L3hzZDplbGVtZW50PgorICAgICAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFtb3VudCIgdHlwZT0ieHNkOmZsb2F0Ij48L3hzZDplbGVtZW50PgorICAgICAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDwveHNkOmVsZW1lbnQ+CisKKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhdXRob3JpemVSZXNwb25zZSI+CisgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTdGF0dXMiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+CisgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KKworICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJDcmVkaXRDYXJkRGV0YWlsc1R5cGUiPgorICAgICAgICAgICAgICAgIDx4c2Q6c2VxdWVuY2U+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJDcmVkaXRDYXJkVHlwZSIgdHlwZT0idG5zOkNyZWRpdENhcmRUeXBlVHlwZSIgbWluT2NjdXJzPSIwIiAvPgorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ3JlZGl0Q2FyZE51bWJlciIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiAvPgorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iRXhwTW9udGgiIHR5cGU9InhzZDppbnQiIG1pbk9jY3Vycz0iMCIgLz4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkV4cFllYXIiIHR5cGU9InhzZDppbnQiIG1pbk9jY3Vycz0iMCIgLz4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNhcmRPd25lciIgdHlwZT0idG5zOlBheWVyVHlwZSIgbWluT2NjdXJzPSIwIiAvPgorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iQ1ZWMiIgdHlwZT0ieHNkOnN0cmluZyIgbWluT2NjdXJzPSIwIiAvPgorICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgPC94c2Q6Y29tcGxleFR5cGU+CisgICAgICAgICAgICA8eHNkOnNpbXBsZVR5cGUgbmFtZT0iQ3JlZGl0Q2FyZFR5cGVUeXBlIj4KKyAgICAgICAgICAgICAgICA8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDp0b2tlbiI+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IlZpc2EiIC8+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9Ik1hc3RlckNhcmQiIC8+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZW51bWVyYXRpb24gdmFsdWU9IkRpc2NvdmVyIiAvPgorICAgICAgICAgICAgICAgICAgICA8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJBbWV4IiAvPgorICAgICAgICAgICAgICAgIDwveHNkOnJlc3RyaWN0aW9uPgorICAgICAgICAgICAgPC94c2Q6c2ltcGxlVHlwZT4KKyAgICAgICAgICAgIDx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iUGF5ZXJUeXBlIj4KKyAgICAgICAgICAgICAgICA8eHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgICAgICA8eHNkOmVsZW1lbnQgbmFtZT0iTmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkFkZHJlc3MiIHR5cGU9InRuczpBZGRyZXNzVHlwZSIgLz4KKyAgICAgICAgICAgICAgICA8L3hzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJBZGRyZXNzVHlwZSI+CisgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlN0cmVldCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IkNpdHkiIHR5cGU9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTdGF0ZSIgdHlwZT0ieHNkOnN0cmluZyIgLz4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDplbGVtZW50IG5hbWU9IlppcENvZGUiIHR5cGU9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJIb21lUGhvbmUiIHR5cGU9InhzZDpzdHJpbmciIC8+CisgICAgICAgICAgICAgICAgPC94c2Q6c2VxdWVuY2U+CisgICAgICAgICAgICA8L3hzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJhdXRob3JpemVGYXVsdCI+CisgICAgICAgICAgICAgICAgPHhzZDpjb21wbGV4VHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHhzZDpzZXF1ZW5jZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJlcnJvckNvZGUiIHR5cGU9InhzZDpzdHJpbmciPjwveHNkOmVsZW1lbnQ+CisgICAgICAgICAgICAgICAgICAgIDwveHNkOnNlcXVlbmNlPgorICAgICAgICAgICAgICAgIDwveHNkOmNvbXBsZXhUeXBlPgorICAgICAgICAgICAgPC94c2Q6ZWxlbWVudD4KKyAgICAgICAgPC94c2Q6c2NoZW1hPgorICAgIDwvd3NkbDp0eXBlcz4KKyAgICA8d3NkbDptZXNzYWdlIG5hbWU9IkF1dGhvcml6ZVJlcXVlc3QiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczphdXRob3JpemUiPjwvd3NkbDpwYXJ0PgorICAgIDwvd3NkbDptZXNzYWdlPgorICAgIDx3c2RsOm1lc3NhZ2UgbmFtZT0iQXV0aG9yaXplUmVzcG9uc2UiPgorICAgICAgICA8d3NkbDpwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczphdXRob3JpemVSZXNwb25zZSI+PC93c2RsOnBhcnQ+CisgICAgPC93c2RsOm1lc3NhZ2U+CisgICAgPHdzZGw6bWVzc2FnZSBuYW1lPSJBdXRob3JpemVGYXVsdCI+CisgICAgICAgIDx3c2RsOnBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmF1dGhvcml6ZUZhdWx0Ij48L3dzZGw6cGFydD4KKyAgICA8L3dzZGw6bWVzc2FnZT4KKyAgICA8d3NkbDpwb3J0VHlwZSBuYW1lPSJDcmVkaXRDYXJkUGF5bWVudCI+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJhdXRob3JpemUiPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQgbWVzc2FnZT0idG5zOkF1dGhvcml6ZVJlcXVlc3QiPjwvd3NkbDppbnB1dD4KKyAgICAgICAgICAgIDx3c2RsOm91dHB1dCBtZXNzYWdlPSJ0bnM6QXV0aG9yaXplUmVzcG9uc2UiPjwvd3NkbDpvdXRwdXQ+CisgICAgICAgICAgICA8d3NkbDpmYXVsdCBuYW1lPSJhdXRob3JpemF0aW9uRmFpbHVyZSIgbWVzc2FnZT0idG5zOkF1dGhvcml6ZUZhdWx0Ij48L3dzZGw6ZmF1bHQ+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgPC93c2RsOnBvcnRUeXBlPgorICAgIDx3c2RsOmJpbmRpbmcgbmFtZT0iQ3JlZGl0Q2FyZFBheW1lbnRCaW5kaW5nIiB0eXBlPSJ0bnM6Q3JlZGl0Q2FyZFBheW1lbnQiPgorICAgICAgICA8c29hcDpiaW5kaW5nIHN0eWxlPSJkb2N1bWVudCIgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIC8+CisgICAgICAgIDx3c2RsOm9wZXJhdGlvbiBuYW1lPSJhdXRob3JpemUiPgorICAgICAgICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vQ3JlZGl0Q2FyZFBheW1lbnQvYXV0aG9yaXplIiAvPgorICAgICAgICAgICAgPHdzZGw6aW5wdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L3dzZGw6aW5wdXQ+CisgICAgICAgICAgICA8d3NkbDpvdXRwdXQ+CisgICAgICAgICAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L3dzZGw6b3V0cHV0PgorICAgICAgICAgICAgPHdzZGw6ZmF1bHQgbmFtZT0iYXV0aG9yaXphdGlvbkZhaWx1cmUiPgorICAgICAgICAgICAgICAgIDxzb2FwOmZhdWx0IG5hbWU9ImF1dGhvcml6YXRpb25GYWlsdXJlIiB1c2U9ImxpdGVyYWwiIC8+CisgICAgICAgICAgICA8L3dzZGw6ZmF1bHQ+CisgICAgICAgIDwvd3NkbDpvcGVyYXRpb24+CisgICAgPC93c2RsOmJpbmRpbmc+CisgICAgPHdzZGw6c2VydmljZSBuYW1lPSJDcmVkaXRDYXJkUGF5bWVudFNlcnZpY2UiPgorICAgICAgICA8d3NkbDpwb3J0IG5hbWU9IkNyZWRpdENhcmRQYXltZW50UG9ydCIgYmluZGluZz0idG5zOkNyZWRpdENhcmRQYXltZW50QmluZGluZyI+CisgICAgICAgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwODAvQ3JlZGl0Q2FyZFBheW1lbnQiIC8+CisgICAgICAgIDwvd3NkbDpwb3J0PgorICAgIDwvd3NkbDpzZXJ2aWNlPgorCis8L3dzZGw6ZGVmaW5pdGlvbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9hc3luYy1pbnRlcmFjdGlvbnMvc3JjL3Rlc3QvamF2YS9pdGVzdC9DcmVkaXRDYXJkVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy90ZXN0L2phdmEvaXRlc3QvQ3JlZGl0Q2FyZFRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDliODIxNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYXN5bmMtaW50ZXJhY3Rpb25zL3NyYy90ZXN0L2phdmEvaXRlc3QvQ3JlZGl0Q2FyZFRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2UgaXRlc3Q7CisKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb247CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb25Mb2NhdGlvbkhlbHBlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LkFzc2VydDsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCB0ZXN0LmNsaWVudC5DcmVkaXRDYXJkQ2xpZW50OworCisvKioKKyAqIEEgdGVzdCBjYXNlIGZvciB0d28gU0NBIGNvbXBvbmVudHMgZXhjaGFuZ2UgZGF0YSB2aWEgYmluZGluZy5qbXMKKyAqLworcHVibGljIGNsYXNzIENyZWRpdENhcmRUZXN0Q2FzZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBOb2RlIG5vZGU7CisgICAgcHJpdmF0ZSBzdGF0aWMgQ3JlZGl0Q2FyZENsaWVudCBjbGllbnQ7CisKKyAgICBAQmVmb3JlQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgaW5pdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgY29udHJpYnV0aW9uID0gQ29udHJpYnV0aW9uTG9jYXRpb25IZWxwZXIuZ2V0Q29udHJpYnV0aW9uTG9jYXRpb24oQ3JlZGl0Q2FyZENsaWVudC5jbGFzcyk7CisgICAgICAgIG5vZGUgPQorICAgICAgICAgICAgTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJ0ZXN0L2NsaWVudC9jcmVkaXRjYXJkLWNsaWVudC5jb21wb3NpdGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDb250cmlidXRpb24oImNjIiwgY29udHJpYnV0aW9uKSk7CisgICAgICAgIG5vZGUuc3RhcnQoKTsKKworICAgICAgICBjbGllbnQgPSBub2RlLmdldFNlcnZpY2UoQ3JlZGl0Q2FyZENsaWVudC5jbGFzcywgIkNyZWRpdENhcmRDbGllbnRDb21wb25lbnQvQ3JlZGl0Q2FyZENsaWVudCIpOworICAgIH0KKworICAgIEBBZnRlckNsYXNzCisgICAgcHVibGljIHN0YXRpYyB2b2lkIGRlc3Ryb3koKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgeworICAgICAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RDcmVkaXRDYXJkKCkgeworICAgICAgICBTdHJpbmcgc3RhdHVzID0gY2xpZW50LmF1dGhvcml6ZSgiMTIzIiwgIkpvaG4iLCAxMDAuMGYpOworICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJPSyIsIHN0YXR1cyk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q3JlZGl0Q2FyZEFzeW5jKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBFeGVjdXRpb25FeGNlcHRpb24geworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY2xpZW50LmF1dGhvcml6ZUFzeW5jKCI0NTYiLCAiTWFyeSIsIDEyMC4wZik7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIk9LIiwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RDcmVkaXRDYXJkQXN5bmNXaXRoQ2FsbGJhY2soKSB0aHJvd3MgSW50ZXJydXB0ZWRFeGNlcHRpb24sIEV4ZWN1dGlvbkV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyByZXN1bHQgPSBjbGllbnQuYXV0aG9yaXplQXN5bmNXaXRoQ2FsbGJhY2soIjc4OSIsICJTbWl0aCIsIDE4MC4wZik7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIk9LIiwgcmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q3JlZGl0Q2FyZFNDQUFzeW5jV2l0aENhbGxiYWNrKCkgdGhyb3dzIEludGVycnVwdGVkRXhjZXB0aW9uLCBFeGVjdXRpb25FeGNlcHRpb24geworICAgICAgICBTdHJpbmcgcmVzdWx0ID0gY2xpZW50LmF1dGhvcml6ZVNDQUFzeW5jV2l0aENhbGxiYWNrKCI4ODgiLCAiSmFuZSIsIDExMC4wZik7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIk9LIiwgcmVzdWx0KTsKKyAgICB9CisgICAgCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q3JlZGl0Q2FyZFNDQVdpdGhDYWxsYmFjaygpIHRocm93cyBJbnRlcnJ1cHRlZEV4Y2VwdGlvbiwgRXhlY3V0aW9uRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IGNsaWVudC5hdXRob3JpemVTQ0FXaXRoQ2FsbGJhY2soIjk5OSIsICJTdGV2ZSIsIDIxMC4wZik7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIk9LIiwgcmVzdWx0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2Jhc2UvZGVwZW5kZW5jaWVzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2Jhc2UvZGVwZW5kZW5jaWVzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5OTcxYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYmFzZS9kZXBlbmRlbmNpZXMvcG9tLnhtbApAQCAtMCwwICsxLDU5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3QtYmFzZS1kZXBlbmRlbmNpZXM8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBCYXNlIERlcGVuZGVuY2llczwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisgICAgDQorICAgIDxidWlsZD4NCisgICAgICAgPHBsdWdpbnM+DQorICAgICAgICAgIDwhLS0gQ29weSBhbGwgdGhlIGRlcGVuZGVuY2llcyBzbyB0aGUgdGVzdCBjYW4gdmVyaWZ5IG9ubHkgdGhlIGV4cGVjdGVkIG9uZXMgZ2V0IGRyYWdnZWQgaW4gLS0+DQorICAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwZW5kZW5jeS1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICAgICA8aWQ+Y29weTwvaWQ+DQorICAgICAgICAgICAgICAgICAgIDxwaGFzZT5jb21waWxlPC9waGFzZT4NCisgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jb3B5LWRlcGVuZGVuY2llczwvZ29hbD4NCisgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICAgICAgPC9wbHVnaW4+DQorICAgICAgIDwvcGx1Z2lucz4NCisgIDwvYnVpbGQ+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvYmFzZS9kZXBlbmRlbmNpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2Jhc2UvZGVwZW5kZW5jaWVzL1ZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvYmFzZS9kZXBlbmRlbmNpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2Jhc2UvZGVwZW5kZW5jaWVzL1ZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2RkNzdiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9iYXNlL2RlcGVuZGVuY2llcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmFzZS9kZXBlbmRlbmNpZXMvVmFsaWRhdGVEZXBlbmRlbmNpZXNUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsNTYgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaXRlc3QuYmFzZS5kZXBlbmRlbmNpZXM7DQorDQoraW1wb3J0IGphdmEuaW8uRmlsZTsNCisNCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsNCisNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQorDQorLyoqDQorICogVGVzdCBjYXNlIGZvciB2ZXJpZnlpbmcgdGhlIGV4cGVjdGVkIGRlcGVuZGVuY2llcyBvZiB0aGUgYmFzZSBqYXINCisgKiAoVXNlcyBtYXZlbi1kZXBlbmRlbmN5LXBsdWdpbiBjb25maWcgaW4gdGhlIHBvbS54bWwgdG8gZ2VuZXJhdGUgdGhlIGRlcGVuZGVuY3kgbGlzdCkNCisgKg0KKyAqICoqKiBOT1RFOiB0aGlzIGlzIGFuIEFQSSEgSWYgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2UgdGhlIEFQSSBpcyBjaGFuZ2VkIGFuZCB1c2VycyB3aWxsIGJlIGJyb2tlbi4NCisgKiAgICAgICAgICAgRG9uJ3QganVzdCBjaGFuZ2UgdGhlIGxpc3Qgd2l0aG91dCB0aGlua2luZyBhYm91dCB0aGUgY29uc2VxdWVuY2llcw0KKyAqIA0KKyAqIEN1cnJlbnQgcmVxdWlyZWQgamFycyBhcmU6DQorICogICAgYXNtLTMuMS5qYXINCisgKiAgICBjZ2xpYi0yLjIuamFyDQorICogICAgdHVzY2FueS1iYXNlLTIuMC1TTkFQU0hPVC5qYXINCisgKiAgICB3c2RsNGotMS42LjIuamFyDQorICogICAgWG1sU2NoZW1hLTEuNC4zLmphciAgDQorICoNCisgKiAgICBqdW5pdC00LjguMS5qYXIgKG9ubHkgZnJvbSB0aGlzIHRlc3RjYXNlKQ0KKyAqDQorICovDQorcHVibGljIGNsYXNzIFZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2Ugew0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCBjb3VudERlcGVuZGVuY2llcygpIHsNCisNCisgICAgICAgIEZpbGUgZGVwZW5kZW5jaWVzRGlyID0gbmV3IEZpbGUoInRhcmdldC9kZXBlbmRlbmN5Iik7DQorICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZXBlbmRlbmNpZXNEaXIuZXhpc3RzKCkpOw0KKyAgICAgICAgDQorICAgICAgICBGaWxlW10gZGVwZW5kZW5jeUZpbGVzID0gZGVwZW5kZW5jaWVzRGlyLmxpc3RGaWxlcygpOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscyg2LCBkZXBlbmRlbmN5RmlsZXMubGVuZ3RoKTsNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS9pdGVzdC9iYXNlL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2Jhc2UvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYmFzZS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2Jhc2UvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2UvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9ncmVldGluZ3MvR3JlZXRpbmdzU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvZ3JlZXRpbmdzL0dyZWV0aW5nc1NlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2dyZWV0aW5ncy9HcmVldGluZ3NTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2dyZWV0aW5ncy9HcmVldGluZ3NTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9ncmVldGluZ3MvR3JlZXRpbmdzU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2dyZWV0aW5ncy9HcmVldGluZ3NTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvZ3JlZXRpbmdzL0dyZWV0aW5nc1NlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2dyZWV0aW5ncy9HcmVldGluZ3NTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvZ3JlZXRpbmdzL0dyZWV0aW5nc1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9ncmVldGluZ3MvR3JlZXRpbmdzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2dyZWV0aW5ncy9HcmVldGluZ3NUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9ncmVldGluZ3MvR3JlZXRpbmdzVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L3Jlc291cmNlcy9ncmVldGluZ3MvZ3JlZXRpbmdzLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9yZXNvdXJjZXMvZ3JlZXRpbmdzL2dyZWV0aW5ncy5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2dyZWV0aW5ncy9ncmVldGluZ3MuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2dyZWV0aW5ncy9ncmVldGluZ3MuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L3Jlc291cmNlcy9ncmVldGluZ3MvZ3JlZXRpbmdzLndzZGwgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2dyZWV0aW5ncy9ncmVldGluZ3Mud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9yZXNvdXJjZXMvZ3JlZXRpbmdzL2dyZWV0aW5ncy53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2dyZWV0aW5ncy9ncmVldGluZ3Mud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmJwZWwgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5icGVsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYnBlbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYnBlbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbCBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXJlZmVyZW5jZS9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQvaGVsbG93b3JsZC53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQvaGVsbG93b3JsZC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9icGVsL2hlbGxvd29ybGQtcmVmZXJlbmNlL3NyYy90ZXN0L3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC1yZWZlcmVuY2Uvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC13cy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtd3MvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC13cy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhIGIvdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtd3Mvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC13cy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC13cy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2JwZWwvaGVsbG93b3JsZC13cy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYnBlbCBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYnBlbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYnBlbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtd3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5icGVsCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQtd3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC13cy9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC13cy9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbCBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQtd3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQvaGVsbG93b3JsZC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQtd3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC13cy9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkLXdzL3NyYy90ZXN0L3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC13cy9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9icGVsL2hlbGxvd29ybGQvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZWQzOWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KKworcGFja2FnZSBoZWxsb3dvcmxkOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5pbXBsZW1lbnRhdGlvbi5icGVsLmV4YW1wbGUuaGVsbG93b3JsZC5IZWxsb1BvcnRUeXBlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Db250cmlidXRpb247CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbkxvY2F0aW9uSGVscGVyOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoqCisgKiBUZXN0cyB0aGUgQlBFTCBIZWxsb3dvcmxkIFNlcnZpY2UKKyAqIAorICogQHZlcnNpb24gJFJldiQgJERhdGUkCisgKi8KK0BJZ25vcmUKK3B1YmxpYyBjbGFzcyBIZWxsb1dvcmxkVGVzdENhc2UgeworCisJcHJpdmF0ZSBzdGF0aWMgTm9kZSBub2RlOworICAgIAorICAgIC8qKgorICAgICAqIEB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgorICAgICAqLworICAgIEBCZWZvcmVDbGFzcworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgIAlTdHJpbmcgbG9jYXRpb24gPSBDb250cmlidXRpb25Mb2NhdGlvbkhlbHBlci5nZXRDb250cmlidXRpb25Mb2NhdGlvbigiaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZSIpOworCQlub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJoZWxsb3dvcmxkL2hlbGxvd29ybGQuY29tcG9zaXRlIiwgbmV3IENvbnRyaWJ1dGlvbigiYzEiLCBsb2NhdGlvbikpOworICAgICAgICBub2RlLnN0YXJ0KCk7CisgICAgfQorCisgICAgLyoqCisgICAgICogQHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCisgICAgICovCisgICAgQEFmdGVyQ2xhc3MKKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAJbm9kZS5zdG9wKCk7CisgICAgfQorICAgIAorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFNlcnZpY2VJbnZvY2F0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIEhlbGxvUG9ydFR5cGUgYnBlbFNlcnZpY2UgPSBub2RlLmdldFNlcnZpY2UoSGVsbG9Qb3J0VHlwZS5jbGFzcywgIkJQRUxIZWxsb1dvcmxkU2VydmljZSIpOworICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSBicGVsU2VydmljZS5oZWxsbygiSGVsbG8iKTsKKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygiSGVsbG8gV29ybGQiLCByZXNwb25zZSk7CisgICAgfQorICAgIAorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFJlZmVyZW5jZUludm9jYXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgSGVsbG9Xb3JsZCBicGVsU2VydmljZSA9IG5vZGUuZ2V0U2VydmljZShIZWxsb1dvcmxkLmNsYXNzLCAiQlBFTEhlbGxvV29ybGQiKTsKKyAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gYnBlbFNlcnZpY2UuaGVsbG8oIkhlbGxvIik7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkhlbGxvIFdvcmxkIiwgcmVzcG9uc2UpOyAgICAgICAgCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYnBlbCBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYnBlbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuYnBlbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5icGVsCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC9zcmMvdGVzdC9yZXNvdXJjZXMvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbCBiL3Rlc3RpbmcvaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQvaGVsbG93b3JsZC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC9icGVsL2hlbGxvd29ybGQvc3JjL3Rlc3QvcmVzb3VyY2VzL2xvZzRqLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnBlbC9oZWxsb3dvcmxkL3NyYy90ZXN0L3Jlc291cmNlcy9sb2c0ai5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2JwZWwvaGVsbG93b3JsZC9zcmMvdGVzdC9yZXNvdXJjZXMvbG9nNGoucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3QvYnBlbC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9icGVsL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2JwZWwvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9icGVsL3BvbS54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ3YTY5NAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9wb20ueG1sCkBAIC0wLDAgKzEsNjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1idWlsZGVyPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBCdWlsZGVyPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lLXBvbTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgIAorCisgICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgIAorICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD54ZXJjZXM8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD54ZXJjZXNJbXBsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi44LjE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAKKyAgICA8L2RlcGVuZGVuY2llcz4KKworICAgIDxidWlsZD4KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4KKyAgICA8L2J1aWxkPgorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9Db21wb25lbnRESW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL0NvbXBvbmVudERJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvQ29tcG9uZW50REltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL0NvbXBvbmVudERJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvQ29tcG9uZW50RFJlZmVyZW5jZU11bHRpcGxpY2l0eUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9Db21wb25lbnREUmVmZXJlbmNlTXVsdGlwbGljaXR5SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL0NvbXBvbmVudERSZWZlcmVuY2VNdWx0aXBsaWNpdHlJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9Db21wb25lbnREUmVmZXJlbmNlTXVsdGlwbGljaXR5SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL0NvbXBvbmVudEVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvQ29tcG9uZW50RUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9Db21wb25lbnRFSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvQ29tcG9uZW50RUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9Db21wb25lbnRGSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL0NvbXBvbmVudEZJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvQ29tcG9uZW50RkltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL0NvbXBvbmVudEZJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvU2VydmljZTMuamF2YSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9TZXJ2aWNlMy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL1NlcnZpY2UzLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9TZXJ2aWNlMy5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL1NlcnZpY2UzYS5qYXZhIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL1NlcnZpY2UzYS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL1NlcnZpY2UzYS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvU2VydmljZTNhLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEvc2NlbmFyaW8xLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xL3NjZW5hcmlvMS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMS9zY2VuYXJpbzEuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMS9zY2VuYXJpbzEuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEvc2NlbmFyaW8xYS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMS9zY2VuYXJpbzFhLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xL3NjZW5hcmlvMWEuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMS9zY2VuYXJpbzFhLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMC9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMC9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMC9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEwL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEwL3NjZW5hcmlvMTAuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEwL3NjZW5hcmlvMTAuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEwL3NjZW5hcmlvMTAuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTAvc2NlbmFyaW8xMC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTAvc2NlbmFyaW8xMGEuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEwL3NjZW5hcmlvMTBhLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMC9zY2VuYXJpbzEwYS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMC9zY2VuYXJpbzEwYS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTAvc2VydmljZTMud3NkbCBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMC9zZXJ2aWNlMy53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEwL3NlcnZpY2UzLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMC9zZXJ2aWNlMy53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzExL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzExL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzExL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTEvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTEvc2NlbmFyaW8xMS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTEvc2NlbmFyaW8xMS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTEvc2NlbmFyaW8xMS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMS9zY2VuYXJpbzExLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMS9zY2VuYXJpbzExYS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTEvc2NlbmFyaW8xMWEuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzExL3NjZW5hcmlvMTFhLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzExL3NjZW5hcmlvMTFhLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMS9zZXJ2aWNlMy53c2RsIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzExL3NlcnZpY2UzLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTEvc2VydmljZTMud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzExL3NlcnZpY2UzLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTIvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTIvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTIvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMi9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMi9zY2VuYXJpbzEyLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMi9zY2VuYXJpbzEyLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMi9zY2VuYXJpbzEyLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEyL3NjZW5hcmlvMTIuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEyL3NjZW5hcmlvMTJhLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMi9zY2VuYXJpbzEyYS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTIvc2NlbmFyaW8xMmEuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTIvc2NlbmFyaW8xMmEuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTMvc2NlbmFyaW8xMy5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTMvc2NlbmFyaW8xMy5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTMvc2NlbmFyaW8xMy5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMy9zY2VuYXJpbzEzLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xMy9zY2VuYXJpbzEzYS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTMvc2NlbmFyaW8xM2EuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEzL3NjZW5hcmlvMTNhLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEzL3NjZW5hcmlvMTNhLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8yL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzIvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMi9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzIvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMi9zY2VuYXJpbzIuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzIvc2NlbmFyaW8yLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8yL3NjZW5hcmlvMi5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8yL3NjZW5hcmlvMi5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMi9zY2VuYXJpbzJhLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8yL3NjZW5hcmlvMmEuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzIvc2NlbmFyaW8yYS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8yL3NjZW5hcmlvMmEuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8zL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8zL3NjZW5hcmlvMy5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMy9zY2VuYXJpbzMuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzMvc2NlbmFyaW8zLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzMvc2NlbmFyaW8zLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8zL3NjZW5hcmlvM2EuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzMvc2NlbmFyaW8zYS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMy9zY2VuYXJpbzNhLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzMvc2NlbmFyaW8zYS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNC9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW80L01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzQvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW80L01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzQvc2NlbmFyaW80LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW80L3NjZW5hcmlvNC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNC9zY2VuYXJpbzQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNC9zY2VuYXJpbzQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzQvc2NlbmFyaW80YS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNC9zY2VuYXJpbzRhLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW80L3NjZW5hcmlvNGEuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNC9zY2VuYXJpbzRhLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW81L01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzUvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzUvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNS9zY2VuYXJpbzUuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzUvc2NlbmFyaW81LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW81L3NjZW5hcmlvNS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW81L3NjZW5hcmlvNS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNS9zY2VuYXJpbzVhLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW81L3NjZW5hcmlvNWEuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzUvc2NlbmFyaW81YS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW81L3NjZW5hcmlvNWEuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzUvc2NlbmFyaW9zLndzZGwgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNS9zY2VuYXJpb3Mud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW81L3NjZW5hcmlvcy53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNS9zY2VuYXJpb3Mud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW82L01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzYvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNi9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzYvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNi9zY2VuYXJpbzYuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzYvc2NlbmFyaW82LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW82L3NjZW5hcmlvNi5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW82L3NjZW5hcmlvNi5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNi9zY2VuYXJpbzZhLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW82L3NjZW5hcmlvNmEuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzYvc2NlbmFyaW82YS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW82L3NjZW5hcmlvNmEuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzYvc2NlbmFyaW9zLndzZGwgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNi9zY2VuYXJpb3Mud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW82L3NjZW5hcmlvcy53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNi9zY2VuYXJpb3Mud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW83L01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzcvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzcvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNy9zY2VuYXJpbzcuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzcvc2NlbmFyaW83LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW83L3NjZW5hcmlvNy5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW83L3NjZW5hcmlvNy5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNy9zY2VuYXJpbzdhLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW83L3NjZW5hcmlvN2EuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzcvc2NlbmFyaW83YS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW83L3NjZW5hcmlvN2EuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzcvc2NlbmFyaW9zLndzZGwgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNy9zY2VuYXJpb3Mud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW83L3NjZW5hcmlvcy53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNy9zY2VuYXJpb3Mud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW84L01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzgvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvOC9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzgvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvOC9zY2VuYXJpbzguY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzgvc2NlbmFyaW84LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW84L3NjZW5hcmlvOC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW84L3NjZW5hcmlvOC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvOC9zY2VuYXJpbzhhLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW84L3NjZW5hcmlvOGEuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzgvc2NlbmFyaW84YS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW84L3NjZW5hcmlvOGEuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzgvc2NlbmFyaW9zLndzZGwgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvOC9zY2VuYXJpb3Mud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW84L3NjZW5hcmlvcy53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvOC9zY2VuYXJpb3Mud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW85L01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzkvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvOS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzkvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvOS9zY2VuYXJpbzkuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzkvc2NlbmFyaW85LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW85L3NjZW5hcmlvOS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW85L3NjZW5hcmlvOS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvOS9zY2VuYXJpbzlhLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW85L3NjZW5hcmlvOWEuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9idWlsZGVyL3NyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzkvc2NlbmFyaW85YS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW85L3NjZW5hcmlvOWEuY29tcG9zaXRlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvQnVpbGRlclRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvQnVpbGRlclRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBjOWY3NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9CdWlsZGVyVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDgxNCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCisgKi8KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pdGVzdC5idWlsZGVyOworCitpbXBvcnQgamF2YXgud3NkbC5EZWZpbml0aW9uOworaW1wb3J0IGphdmF4LndzZGwuUG9ydDsKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLkFzc2VydDsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9uZW50OworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuQ29tcG9uZW50U2VydmljZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvc2l0ZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuV2ViU2VydmljZUJpbmRpbmc7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogTG9hZCBhbmQgYnVpbGQgc29tZSBjb21wb3NpdGVzIGFuZCBpbnNwZWN0IHRoZSByZXN1bHRzLgorICogCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIEJ1aWxkZXJUZXN0Q2FzZSB7CisgICAgcHJpdmF0ZSBDdXN0b21Db21wb3NpdGVCdWlsZGVyIGN1c3RvbUJ1aWxkZXI7CisgICAgCisgICAgQEJlZm9yZQorICAgIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgfQorCisgICAgQEFmdGVyCisgICAgcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICB9CisKKyAvKiBPQVNJUyBkb2Vzbid0IHRha2Ugbm90aWNlIG9mIHRvcCBsZXZlbCBjb21wb3NpdGUgc2VydmljZXMKKyAgKiAKKyAgICAvLyBTY2VuYXJpbyAxOiA8YmluZGluZy53cz4gb24gb3V0ZXIgY29tcG9zaXRlIHNlcnZpY2UgQ29tcG9zaXRlQS9TZXJ2aWNlMQorICAgIEBJZ25vcmUKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvMSIpOworICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOworICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvMS5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW8xLyIpOworICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBjaGVja1NjZW5hcmlvMVJlc3VsdHMoZmFsc2UpOworICAgIH0KKworICAgIEBJZ25vcmUKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzFOb25XaXJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvMU5vbldpcmluZyIpOworICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIodHJ1ZSk7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW8xLmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEvIik7CisgICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIGNoZWNrU2NlbmFyaW8xUmVzdWx0cyh0cnVlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzFSZXN1bHRzKGJvb2xlYW4gbm9uV2lyaW5nKSB7CisgICAgICAgIENvbXBvc2l0ZSBkb21haW5Db21wb3NpdGUgPSBjdXN0b21CdWlsZGVyLmdldERvbWFpbkNvbXBvc2l0ZSgpOworCisgICAgICAgIENvbXBvbmVudCBjb21wb25lbnREID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnREIik7CisgICAgICAgIGlmICghbm9uV2lyaW5nKSB7CisgICAgICAgICAgICAvLyBTaG91bGQgY3JlYXRlIGNvbXBvbmVudCBzZXJ2aWNlICRwcm9tb3RlZCRTZXJ2aWNlMSBvbiBpbm5lcm1vc3QgY29tcG9uZW50CisgICAgICAgICAgICAvLyAgQ29tcG9uZW50RCwgd2l0aCA8YmluZGluZy53cz4gYW5kIHVyaT0iL1NlcnZpY2UxIgorICAgICAgICAgICAgLy8gTm8gb3RoZXIgc2VydmljZXMgb24gQ29tcG9uZW50RCBzaG91bGQgaGF2ZSA8YmluZGluZy53cz4KKyAgICAgICAgICAgIFdlYlNlcnZpY2VCaW5kaW5nIHdzQmluZGluZyA9IG51bGw7CisgICAgICAgICAgICBmb3IgKENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSA6IGNvbXBvbmVudEQuZ2V0U2VydmljZXMoKSkgeworICAgICAgICAgICAgICAgIFdlYlNlcnZpY2VCaW5kaW5nIHdzYiA9IHNlcnZpY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7CisgICAgICAgICAgICAgICAgaWYgKCIkcHJvbW90ZWQkU2VydmljZTEiLmVxdWFscyhzZXJ2aWNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgd3NCaW5kaW5nID0gd3NiOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCB3c2IgPT0gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQgIi9TZXJ2aWNlMSIuZXF1YWxzKHdzQmluZGluZy5nZXRVUkkoKSk7CisKKyAgICAgICAgICAgIC8vIFNob3VsZCBjcmVhdGUgV1NETCBkb2N1bWVudCBmb3IgQ29tcG9uZW50RC8kcHJvbW90ZWQkU2VydmljZTEgd2l0aCBlbmRwb2ludCB1cmk9Ii9TZXJ2aWNlMSIKKyAgICAgICAgICAgIERlZmluaXRpb24gZGVmID0gd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpOworICAgICAgICAgICAgamF2YXgud3NkbC5TZXJ2aWNlIHN2YyA9IGRlZi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL2J1aWxkZXIuaXRlc3Quc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iLCAiU2VydmljZTNTZXJ2aWNlIikpOyAKKyAgICAgICAgICAgIFBvcnQgcG9ydCA9IHN2Yy5nZXRQb3J0KCJTZXJ2aWNlM1BvcnQiKTsKKyAgICAgICAgICAgIGFzc2VydCAiL1NlcnZpY2UxIi5lcXVhbHMoVGVzdFV0aWxzLmdldFBvcnRBZGRyZXNzKHBvcnQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNob3VsZCBub3QgY3JlYXRlIGNvbXBvbmVudCBzZXJ2aWNlICRwcm9tb3RlZCRTZXJ2aWNlMSBvbiBpbm5lcm1vc3QgY29tcG9uZW50IENvbXBvbmVudEQKKyAgICAgICAgICAgIC8vIE5vIGNvbXBvbmVudCBzZXJ2aWNlcyBvbiBDb21wb25lbnREIHNob3VsZCBoYXZlIDxiaW5kaW5nLndzPgorICAgICAgICAgICAgZm9yIChDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnRELmdldFNlcnZpY2VzKCkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQgISIkcHJvbW90ZWQkU2VydmljZTEiLmVxdWFscyhzZXJ2aWNlLmdldE5hbWUoKSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0IHNlcnZpY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcykgPT0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vIHNlcnZpY2VzIG9uIENvbXBvbmVudEIgc2hvdWxkIGhhdmUgPGJpbmRpbmcud3M+CisgICAgICAgIENvbXBvbmVudCBjb21wb25lbnRCID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnRCIik7CisgICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlIDogY29tcG9uZW50Qi5nZXRTZXJ2aWNlcygpKSB7CisgICAgICAgICAgICBhc3NlcnQgc2VydmljZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKSA9PSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm8gc2VydmljZXMgb24gQ29tcG9zaXRlQyBzaG91bGQgaGF2ZSA8YmluZGluZy53cz4KKyAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZUMgPSBUZXN0VXRpbHMuZ2V0Q29tcG9zaXRlKGRvbWFpbkNvbXBvc2l0ZSwgbmV3IFFOYW1lKCJodHRwOi8vc2NlbmFyaW8xIiwgIkNvbXBvc2l0ZUMiKSk7CisgICAgICAgIGZvciAoU2VydmljZSBzZXJ2aWNlIDogY29tcG9zaXRlQy5nZXRTZXJ2aWNlcygpKSB7CisgICAgICAgICAgICBhc3NlcnQgc2VydmljZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKSA9PSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5vbldpcmluZykgeworICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBhZGQgYSBXU0RMIGRvY3VtZW50IHRvIGRvbWFpbiBjb21wb3NpdGUgc2VydmljZSBTZXJ2aWNlMQorICAgICAgICAgICAgV2ViU2VydmljZUJpbmRpbmcgd3NCaW5kaW5nID0gbnVsbDsKKyAgICAgICAgICAgIGZvciAoU2VydmljZSBzZXJ2aWNlIDogZG9tYWluQ29tcG9zaXRlLmdldFNlcnZpY2VzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIlNlcnZpY2UxIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHNlcnZpY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0IHdzQmluZGluZy5nZXRXU0RMRG9jdW1lbnQoKSA9PSBudWxsOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBTdHJpbmcgZXhwZWN0ZWRFbmRwb2ludHMgPSAgIkNvbXBvbmVudCAtIENvbXBvbmVudEJcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2aWNlIC0gU2VydmljZTJcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbmRwb2ludCAtIFNlcnZpY2UyXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VydmljZSAtIFNlcnZpY2UyYVxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVuZHBvaW50IC0gU2VydmljZTJhXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVmZXJlbmNlIC0gcmVmZXJlbmNlMlxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBvbmVudCAtIENvbXBvbmVudEIgaGFzIGNvbXBvc2l0ZSBpbXBsXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgQ29tcG9uZW50IC0gQ29tcG9uZW50RFxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIFNlcnZpY2UgLSBTZXJ2aWNlM1xuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIEVuZHBvaW50IC0gU2VydmljZTNcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBTZXJ2aWNlIC0gU2VydmljZTNhXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgRW5kcG9pbnQgLSBTZXJ2aWNlM2FcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBSZWZlcmVuY2UgLSByZWZlcmVuY2UzIjsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBhY3R1YWxFbmRwb2ludHMgPSBUZXN0VXRpbHMucHJpbnRFbmRwb2ludHMoZG9tYWluQ29tcG9zaXRlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFjdHVhbEVuZHBvaW50cyk7CisgICAgICAgIAorICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkRW5kcG9pbnRzLCBhY3R1YWxFbmRwb2ludHMpOworICAgIH0KKyovCisKKyAgICAvLyBTY2VuYXJpbyAyOiA8YmluZGluZy53cz4gb24gb3V0ZXIgY29tcG9uZW50IHNlcnZpY2UgQ29tcG9uZW50Qi9TZXJ2aWNlMgorICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8yIik7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcihmYWxzZSk7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW8yLmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzIvIik7CisgICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIGNoZWNrU2NlbmFyaW8yYW5kM1Jlc3VsdHMoImh0dHA6Ly9zY2VuYXJpbzIiLCBmYWxzZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMk5vbldpcmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8yTm9uV2lyaW5nIik7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcih0cnVlKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzIuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMi8iKTsKKyAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgY2hlY2tTY2VuYXJpbzJhbmQzUmVzdWx0cygiaHR0cDovL3NjZW5hcmlvMiIsIHRydWUpOworICAgIH0KKyAgICAKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzJhbmQzUmVzdWx0cyhTdHJpbmcgbmFtZXNwYWNlLCBib29sZWFuIG5vbldpcmluZykgeworICAgICAgICBDb21wb3NpdGUgZG9tYWluQ29tcG9zaXRlID0gY3VzdG9tQnVpbGRlci5nZXREb21haW5Db21wb3NpdGUoKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRlc3QgdGhhdCBlbmRwb2ludCBzdHJ1Y3R1cmUgbWF0Y2hlcyBleHBlY3RlZAorICAgICAgICBTdHJpbmcgc3RydWN0dXJlID0gVGVzdFV0aWxzLnByaW50U3RydWN0dXJlKGRvbWFpbkNvbXBvc2l0ZSwgIiIpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oc3RydWN0dXJlKTsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBleHBlY3RlZFN0cnVjdHVyZSA9ICJDb21wb25lbnQgVVJJIC0gQ29tcG9uZW50QlxuIiArCisgICAgICAgICIgIENvbXBvbmVudCBVUkkgLSBDb21wb25lbnRCL0NvbXBvbmVudERcbiIgKworICAgICAgICAiICBFbmRwb2ludDogIFVSSSA9IENvbXBvbmVudEIvQ29tcG9uZW50RCNzZXJ2aWNlLWJpbmRpbmcoU2VydmljZTMvU2VydmljZTMpIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuaW1wbC5TQ0FCaW5kaW5nSW1wbFxuIiArCisgICAgICAgICIgIEVuZHBvaW50OiAgVVJJID0gQ29tcG9uZW50Qi9Db21wb25lbnREI3NlcnZpY2UtYmluZGluZyhTZXJ2aWNlM2EvU2VydmljZTNhKSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LmltcGwuU0NBQmluZGluZ0ltcGxcbiIgKworICAgICAgICAiRW5kcG9pbnQ6ICBVUkkgPSBDb21wb25lbnRCI3NlcnZpY2UtYmluZGluZyhTZXJ2aWNlMi9TZXJ2aWNlMikgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmltcGwuV2ViU2VydmljZUJpbmRpbmdJbXBsXG4iICsKKyAgICAgICAgIkVuZHBvaW50OiAgVVJJID0gQ29tcG9uZW50QiNzZXJ2aWNlLWJpbmRpbmcoU2VydmljZTJhL1NlcnZpY2UzYSkgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5pbXBsLlNDQUJpbmRpbmdJbXBsXG4iOworCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSk7CisgICAgICAgIAorICAgICAgICAvLyBUZXN0IHRoYXQgZ2VuZXJhdGVkIFdTREwgbWF0Y2hlcyBleHBlY3RlZAorICAgICAgICAvLyBTaG91bGQgY3JlYXRlIFdTREwgZG9jdW1lbnQgZm9yIENvbXBvbmVudEIvU2VydmljZTIgd2l0aCBlbmRwb2ludCB1cmk9Ii9Db21wb25lbnRCL1NlcnZpY2UyIgorICAgICAgICAvLyBObyBvdGhlciBzZXJ2aWNlcyBvbiBDb21wb25lbnRCIHNob3VsZCBoYXZlIDxiaW5kaW5nLndzPgorICAgICAgICBDb21wb25lbnQgY29tcG9uZW50QiA9IFRlc3RVdGlscy5nZXRDb21wb25lbnQoZG9tYWluQ29tcG9zaXRlLCAiQ29tcG9uZW50QiIpOworICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c0JpbmRpbmcgPSBudWxsOworICAgIAorICAgICAgICBmb3IgKENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSA6IGNvbXBvbmVudEIuZ2V0U2VydmljZXMoKSkgeworICAgICAgICAgICAgV2ViU2VydmljZUJpbmRpbmcgd3NiID0gc2VydmljZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKTsKKyAgICAgICAgICAgIGlmICgiU2VydmljZTIiLmVxdWFscyhzZXJ2aWNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSB3c2I7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFzc2VydCB3c2IgPT0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgIAorICAgICAgICBEZWZpbml0aW9uIGRlZiA9IHdzQmluZGluZy5nZXRHZW5lcmF0ZWRXU0RMRG9jdW1lbnQoKTsKKyAgICAgICAgVGVzdFV0aWxzLndyaXRlV1NETChkZWYpOworICAgICAgICAKKyAgICAgICAgamF2YXgud3NkbC5TZXJ2aWNlIHN2YyA9IGRlZi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL2J1aWxkZXIuaXRlc3Quc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iLCAiU2VydmljZTIiKSk7IAorICAgICAgICBQb3J0IHBvcnQgPSBzdmMuZ2V0UG9ydCgiU2VydmljZTJTT0FQMTFQb3J0Iik7CisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIi9Db21wb25lbnRCL1NlcnZpY2UyIixUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOworICAgICAKKyAgICB9CisvKgorICAgIC8vIFNjZW5hcmlvIDM6IDxiaW5kaW5nLndzPiBvbiBpbm5lciBjb21wb3NpdGUgc2VydmljZSBDb21wb3NpdGVDL1NlcnZpY2UyCisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8zIik7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcihmYWxzZSk7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW8zLmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzMvIik7CisgICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIGNoZWNrU2NlbmFyaW8yYW5kM1Jlc3VsdHMoImh0dHA6Ly9zY2VuYXJpbzMiLCBmYWxzZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvM05vbldpcmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8zTm9uV2lyaW5nIik7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcih0cnVlKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzMuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMy8iKTsKKyAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgY2hlY2tTY2VuYXJpbzJhbmQzUmVzdWx0cygiaHR0cDovL3NjZW5hcmlvMyIsIHRydWUpOworICAgIH0KKworICAgIC8vIFNjZW5hcmlvIDQ6IDxiaW5kaW5nLndzPiBvbiBpbm5lciBjb21wb25lbnQgc2VydmljZSBDb21wb25lbnREL1NlcnZpY2UzCisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvNCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW80Iik7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcihmYWxzZSk7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW80LmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzQvIik7CisgICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIGNoZWNrU2NlbmFyaW80UmVzdWx0cyhmYWxzZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvNE5vbldpcmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW80Tm9uV2lyaW5nIik7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcih0cnVlKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzQuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNC8iKTsKKyAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgY2hlY2tTY2VuYXJpbzRSZXN1bHRzKHRydWUpOworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBjaGVja1NjZW5hcmlvNFJlc3VsdHMoYm9vbGVhbiBub25XaXJpbmcpIHsKKyAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7CisKKyAgICAgICAgLy8gU2hvdWxkIGNyZWF0ZSBXU0RMIGRvY3VtZW50IGZvciBDb21wb25lbnREL1NlcnZpY2UzIHdpdGggZW5kcG9pbnQgdXJpPSIvQ29tcG9uZW50RC9TZXJ2aWNlMyIKKyAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEQgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEQiKTsKKyAgICAgICAgV2ViU2VydmljZUJpbmRpbmcgd3NCaW5kaW5nID0gbnVsbDsKKyAgICAgICAgZm9yIChDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnRELmdldFNlcnZpY2VzKCkpIHsKKyAgICAgICAgICAgIGlmICgiU2VydmljZTMiLmVxdWFscyhzZXJ2aWNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIERlZmluaXRpb24gZGVmID0gd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpOworICAgICAgICBqYXZheC53c2RsLlNlcnZpY2Ugc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vYnVpbGRlci5pdGVzdC5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIsICJTZXJ2aWNlM1NlcnZpY2UiKSk7IAorICAgICAgICBQb3J0IHBvcnQgPSBzdmMuZ2V0UG9ydCgiU2VydmljZTNQb3J0Iik7CisgICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvQ29tcG9uZW50RC9TZXJ2aWNlMyIuZXF1YWxzKFRlc3RVdGlscy5nZXRQb3J0QWRkcmVzcyhwb3J0KSk7CisKKyAgICAgICAgLy8gU2hvdWxkIGFkZCA8YmluZGluZy53cz4gdG8gaW5uZXIgY29tcG9zaXRlIHNlcnZpY2UgQ29tcG9zaXRlQy9TZXJ2aWNlMiAKKyAgICAgICAgLy8gTm8gb3RoZXIgc2VydmljZXMgb24gQ29tcG9zaXRlQyBzaG91bGQgaGF2ZSA8YmluZGluZy53cz4KKyAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZUMgPSBUZXN0VXRpbHMuZ2V0Q29tcG9zaXRlKGRvbWFpbkNvbXBvc2l0ZSwgbmV3IFFOYW1lKCJodHRwOi8vc2NlbmFyaW80IiwgIkNvbXBvc2l0ZUMiKSk7CisgICAgICAgIHdzQmluZGluZyA9IG51bGw7CisgICAgICAgIGZvciAoU2VydmljZSBzZXJ2aWNlIDogY29tcG9zaXRlQy5nZXRTZXJ2aWNlcygpKSB7CisgICAgICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c2IgPSBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOworICAgICAgICAgICAgaWYgKCJTZXJ2aWNlMiIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgeworICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHdzYjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0IHdzYiA9PSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvU2VydmljZTIiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOworCisgICAgICAgIC8vIFNob3VsZCBhZGQgPGJpbmRpbmcud3M+IHRvIG91dGVyIGNvbXBvbmVudCBzZXJ2aWNlIENvbXBvbmVudEIvU2VydmljZTIgCisgICAgICAgIC8vIFNob3VsZCBjcmVhdGUgV1NETCBkb2N1bWVudCBmb3IgQ29tcG9uZW50Qi9TZXJ2aWNlMiB3aXRoIGVuZHBvaW50IHVyaT0iL0NvbXBvbmVudEIvU2VydmljZTIiCisgICAgICAgIC8vIE5vIG90aGVyIHNlcnZpY2VzIG9uIENvbXBvbmVudEIgc2hvdWxkIGhhdmUgPGJpbmRpbmcud3M+CisgICAgICAgIENvbXBvbmVudCBjb21wb25lbnRCID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnRCIik7CisgICAgICAgIHdzQmluZGluZyA9IG51bGw7CisgICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlIDogY29tcG9uZW50Qi5nZXRTZXJ2aWNlcygpKSB7CisgICAgICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c2IgPSBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOworICAgICAgICAgICAgaWYgKCJTZXJ2aWNlMiIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgeworICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHdzYjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0IHdzYiA9PSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvU2VydmljZTIiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOworICAgICAgICBkZWYgPSB3c0JpbmRpbmcuZ2V0V1NETERvY3VtZW50KCk7CisgICAgICAgIHN2YyA9IGRlZi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL2J1aWxkZXIuaXRlc3Quc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iLCAiU2VydmljZTNTZXJ2aWNlIikpOyAKKyAgICAgICAgcG9ydCA9IHN2Yy5nZXRQb3J0KCJTZXJ2aWNlM1BvcnQiKTsKKyAgICAgICAgYXNzZXJ0ICIvQ29tcG9uZW50Qi9TZXJ2aWNlMiIuZXF1YWxzKFRlc3RVdGlscy5nZXRQb3J0QWRkcmVzcyhwb3J0KSk7CisKKyAgICAgICAgaWYgKCFub25XaXJpbmcpIHsKKyAgICAgICAgICAgIC8vIFNob3VsZCBjcmVhdGUgY29tcG9uZW50IHNlcnZpY2UgJHByb21vdGVkJENvbXBvbmVudEIkc2xhc2gkU2VydmljZTIgb24gaW5uZXJtb3N0IGNvbXBvbmVudAorICAgICAgICAgICAgLy8gIENvbXBvbmVudEQsIHdpdGggPGJpbmRpbmcud3M+IGFuZCB1cmk9Ii9Db21wb25lbnRCL1NlcnZpY2UyIgorICAgICAgICAgICAgd3NCaW5kaW5nID0gbnVsbDsKKyAgICAgICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlIDogY29tcG9uZW50RC5nZXRTZXJ2aWNlcygpKSB7CisgICAgICAgICAgICAgICAgaWYgKCIkcHJvbW90ZWQkQ29tcG9uZW50QiRzbGFzaCRTZXJ2aWNlMiIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgeworICAgICAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSBzZXJ2aWNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvU2VydmljZTIiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOworCisgICAgICAgICAgICAvLyBTaG91bGQgY3JlYXRlIFdTREwgZG9jdW1lbnQgZm9yIENvbXBvbmVudEQvJHByb21vdGVkJENvbXBvbmVudEIkc2xhc2gkU2VydmljZTIgd2l0aCBlbmRwb2ludCB1cmk9Ii9Db21wb25lbnRCL1NlcnZpY2UyIgorICAgICAgICAgICAgZGVmID0gd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpOworICAgICAgICAgICAgc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vYnVpbGRlci5pdGVzdC5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIsICJTZXJ2aWNlM1NlcnZpY2UiKSk7IAorICAgICAgICAgICAgcG9ydCA9IHN2Yy5nZXRQb3J0KCJTZXJ2aWNlM1BvcnQiKTsKKyAgICAgICAgICAgIGFzc2VydCAiL0NvbXBvbmVudEIvU2VydmljZTIiLmVxdWFscyhUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBjcmVhdGUgY29tcG9uZW50IHNlcnZpY2UgJHByb21vdGVkJENvbXBvbmVudEIkc2xhc2gkU2VydmljZTIgb24gaW5uZXJtb3N0IGNvbXBvbmVudCBDb21wb25lbnRECisgICAgICAgICAgICBmb3IgKENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSA6IGNvbXBvbmVudEQuZ2V0U2VydmljZXMoKSkgeworICAgICAgICAgICAgICAgIGFzc2VydCAhIiRwcm9tb3RlZCRDb21wb25lbnRCJHNsYXNoJFNlcnZpY2UyIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gU2hvdWxkIGFkZCA8YmluZGluZy53cz4gdG8gb3V0ZXIgY29tcG9zaXRlIHNlcnZpY2UgQ29tcG9zaXRlQS9TZXJ2aWNlMSAKKyAgICAgICAgd3NCaW5kaW5nID0gbnVsbDsKKyAgICAgICAgZm9yIChTZXJ2aWNlIHNlcnZpY2UgOiBkb21haW5Db21wb3NpdGUuZ2V0U2VydmljZXMoKSkgeworICAgICAgICAgICAgaWYgKCJTZXJ2aWNlMSIuZXF1YWxzKHNlcnZpY2UuZ2V0TmFtZSgpKSkgeworICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHNlcnZpY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0IHdzQmluZGluZyAhPSBudWxsOworICAgICAgICBpZiAobm9uV2lyaW5nKSB7CisgICAgICAgICAgICAvLyBTaG91bGQgbm90IGFkZCBhIFdTREwgZG9jdW1lbnQgdG8gZG9tYWluIGNvbXBvc2l0ZSBzZXJ2aWNlIFNlcnZpY2UxCisgICAgICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpID09IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW5vbldpcmluZykgeworICAgICAgICAgICAgLy8gU2hvdWxkIGNyZWF0ZSBjb21wb25lbnQgc2VydmljZSAkcHJvbW90ZWQkU2VydmljZTEgb24gaW5uZXJtb3N0IGNvbXBvbmVudAorICAgICAgICAgICAgLy8gIENvbXBvbmVudEQsIHdpdGggPGJpbmRpbmcud3M+IGFuZCB1cmk9Ii9TZXJ2aWNlMSIKKyAgICAgICAgICAgIHdzQmluZGluZyA9IG51bGw7CisgICAgICAgICAgICBmb3IgKENvbXBvbmVudFNlcnZpY2Ugc2VydmljZSA6IGNvbXBvbmVudEQuZ2V0U2VydmljZXMoKSkgeworICAgICAgICAgICAgICAgIGlmICgiJHByb21vdGVkJFNlcnZpY2UxIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHNlcnZpY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0ICIvU2VydmljZTEiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOworCisgICAgICAgICAgICAvLyBTaG91bGQgY3JlYXRlIFdTREwgZG9jdW1lbnQgZm9yIENvbXBvbmVudEQvJHByb21vdGVkJFNlcnZpY2UxIHdpdGggZW5kcG9pbnQgdXJpPSIvU2VydmljZTEiCisgICAgICAgICAgICBkZWYgPSB3c0JpbmRpbmcuZ2V0V1NETERvY3VtZW50KCk7CisgICAgICAgICAgICBzdmMgPSBkZWYuZ2V0U2VydmljZShuZXcgUU5hbWUoImh0dHA6Ly9idWlsZGVyLml0ZXN0LnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiwgIlNlcnZpY2UzU2VydmljZSIpKTsgCisgICAgICAgICAgICBwb3J0ID0gc3ZjLmdldFBvcnQoIlNlcnZpY2UzUG9ydCIpOworICAgICAgICAgICAgYXNzZXJ0ICIvU2VydmljZTEiLmVxdWFscyhUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBjcmVhdGUgY29tcG9uZW50IHNlcnZpY2UgJHByb21vdGVkJC5TZXJ2aWNlMSBvbiBpbm5lcm1vc3QgY29tcG9uZW50IENvbXBvbmVudEQKKyAgICAgICAgICAgIGZvciAoQ29tcG9uZW50U2VydmljZSBzZXJ2aWNlIDogY29tcG9uZW50RC5nZXRTZXJ2aWNlcygpKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0ICEiJHByb21vdGVkJFNlcnZpY2UxIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm8gc2VydmljZXMgb24gQ29tcG9uZW50RCBzaG91bGQgaGF2ZSA8YmluZGluZy53cz4sIGV4Y2VwdCBmb3IgU2VydmljZTMsCisgICAgICAgIC8vICAkcHJvbW90ZWQkLlNlcnZpY2UxIGFuZCAkcHJvbW90ZWQkLkNvbXBvbmVudEIuU2VydmljZTIKKyAgICAgICAgZm9yIChDb21wb25lbnRTZXJ2aWNlIHNlcnZpY2UgOiBjb21wb25lbnRELmdldFNlcnZpY2VzKCkpIHsKKyAgICAgICAgICAgIGlmICghIlNlcnZpY2UzIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpICYmCisgICAgICAgICAgICAgICAgISIkcHJvbW90ZWQkU2VydmljZTEiLmVxdWFscyhzZXJ2aWNlLmdldE5hbWUoKSkgJiYKKyAgICAgICAgICAgICAgICAhIiRwcm9tb3RlZCRDb21wb25lbnRCJHNsYXNoJFNlcnZpY2UyIi5lcXVhbHMoc2VydmljZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0IHNlcnZpY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcykgPT0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBTY2VuYXJpbyA1OiA8YmluZGluZy53cz4gYW5kIDxpbnRlcmZhY2Uud3NkbD4gb24gb3V0ZXIgY29tcG9zaXRlIHJlZmVyZW5jZSBDb21wb3NpdGVBL3JlZmVyZW5jZTEKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvNSIpOworICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOworICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvNS5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW81LyIpOworICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBjaGVja1NjZW5hcmlvNVJlc3VsdHMoZmFsc2UpOworICAgIH0KKyAgICAKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzVOb25XaXJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvNU5vbldpcmluZyIpOworICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIodHJ1ZSk7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW81LmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzUvIik7CisgICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIGNoZWNrU2NlbmFyaW81UmVzdWx0cyh0cnVlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzVSZXN1bHRzKGJvb2xlYW4gbm9uV2lyaW5nKSB7CisgICAgICAgIENvbXBvc2l0ZSBkb21haW5Db21wb3NpdGUgPSBjdXN0b21CdWlsZGVyLmdldERvbWFpbkNvbXBvc2l0ZSgpOworCisgICAgICAgIC8vIFNob3VsZCBub3QgYWRkIDxiaW5kaW5nLndzPiB0byBhbnkgb3V0ZXIgY29tcG9uZW50IHJlZmVyZW5jZXMgCisgICAgICAgIENvbXBvbmVudCBjb21wb25lbnRCID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnRCIik7CisgICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEIuZ2V0UmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpID09IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBEZWZpbml0aW9uIGRlZjsKKyAgICAgICAgamF2YXgud3NkbC5TZXJ2aWNlIHN2YzsKKyAgICAgICAgUG9ydCBwb3J0OworICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c0JpbmRpbmc7CisgICAgICAgIENvbXBvbmVudCBjb21wb25lbnREID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnREIik7CisgICAgICAgIGlmICghbm9uV2lyaW5nKSB7CisgICAgICAgICAgICAvLyBTaG91bGQgYWRkIDxiaW5kaW5nLndzPiB0byBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMyB3aXRoIHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIiAKKyAgICAgICAgICAgIC8vIFNob3VsZCBzZXQgPGludGVyZmFjZS53c2RsPiBvbiBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMyAKKyAgICAgICAgICAgIHdzQmluZGluZyA9IG51bGw7CisgICAgICAgICAgICBmb3IgKENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnRELmdldFJlZmVyZW5jZXMoKSkgeworICAgICAgICAgICAgICAgIGlmICgicmVmZXJlbmNlMyIuZXF1YWxzKHJlZmVyZW5jZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHJlZmVyZW5jZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdCh3c0JpbmRpbmcpIGluc3RhbmNlb2YgV1NETEludGVyZmFjZUNvbnRyYWN0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydCAiaHR0cDovL2Zvby5jb20vYmFyIi5lcXVhbHMod3NCaW5kaW5nLmdldFVSSSgpKTsKKworICAgICAgICAgICAgLy8gU2hvdWxkIGNyZWF0ZSBXU0RMIGRvY3VtZW50IGZvciBDb21wb25lbnREL3JlZmVyZW5jZTMgd2l0aCBlbmRwb2ludCB1cmk9Imh0dHA6Ly9mb28uY29tL2JhciIKKyAgICAgICAgICAgIGRlZiA9IHdzQmluZGluZy5nZXRXU0RMRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIHN2YyA9IGRlZi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL3NjZW5hcmlvcy9Db21wb25lbnREL3JlZmVyZW5jZTMiLCAiU2VydmljZTNhU2VydmljZSIpKTsgCisgICAgICAgICAgICBwb3J0ID0gc3ZjLmdldFBvcnQoIlNlcnZpY2UzYVBvcnQiKTsKKyAgICAgICAgICAgIGFzc2VydCAiaHR0cDovL2Zvby5jb20vYmFyIi5lcXVhbHMoVGVzdFV0aWxzLmdldFBvcnRBZGRyZXNzKHBvcnQpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNob3VsZCBub3QgYWRkIDxiaW5kaW5nLndzPiB0byBhbnkgaW5uZXIgY29tcG9uZW50IHJlZmVyZW5jZXMgCisgICAgICAgICAgICBmb3IgKENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnRELmdldFJlZmVyZW5jZXMoKSkgeworICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcykgPT0gbnVsbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIFNob3VsZCBub3QgYWRkIDxiaW5kaW5nLndzPiBvciA8aW50ZXJmYWNlLndzZGw+IHRvIGlubmVyIGNvbXBvc2l0ZSByZWZlcmVuY2UgQ29tcG9zaXRlQy9yZWZlcmVuY2UyIAorICAgICAgICBDb21wb3NpdGUgY29tcG9zaXRlQyA9IFRlc3RVdGlscy5nZXRDb21wb3NpdGUoZG9tYWluQ29tcG9zaXRlLCBuZXcgUU5hbWUoImh0dHA6Ly9zY2VuYXJpbzUiLCAiQ29tcG9zaXRlQyIpKTsKKyAgICAgICAgZm9yIChSZWZlcmVuY2UgcmVmZXJlbmNlIDogY29tcG9zaXRlQy5nZXRSZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcykgPT0gbnVsbDsKKyAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSBpbnN0YW5jZW9mIEphdmFJbnRlcmZhY2VDb250cmFjdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgU3RyaW5nIGV4cGVjdGVkRW5kcG9pbnRzID0gICJDb21wb25lbnQgLSBDb21wb25lbnRCXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VydmljZSAtIFNlcnZpY2UyXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRW5kcG9pbnQgLSBTZXJ2aWNlMlxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlcnZpY2UgLSBTZXJ2aWNlMmFcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbmRwb2ludCAtIFNlcnZpY2UyYVxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlZmVyZW5jZSAtIHJlZmVyZW5jZTJcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wb25lbnQgLSBDb21wb25lbnRCIGhhcyBjb21wb3NpdGUgaW1wbFxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIENvbXBvbmVudCAtIENvbXBvbmVudERcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBTZXJ2aWNlIC0gU2VydmljZTNcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBFbmRwb2ludCAtIFNlcnZpY2UzXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgU2VydmljZSAtIFNlcnZpY2UzYVxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIEVuZHBvaW50IC0gU2VydmljZTNhXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgUmVmZXJlbmNlIC0gcmVmZXJlbmNlMyI7CisKKyAgICAgICAgU3RyaW5nIGFjdHVhbEVuZHBvaW50cyA9IFRlc3RVdGlscy5wcmludEVuZHBvaW50cyhkb21haW5Db21wb3NpdGUpOworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYWN0dWFsRW5kcG9pbnRzKTsKKyAgICAgICAgCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoZXhwZWN0ZWRFbmRwb2ludHMsIGFjdHVhbEVuZHBvaW50cyk7ICAgICAgICAKKyAgICB9CisKKyAgICAKKyAgICAvLyBTY2VuYXJpbyA2OiA8YmluZGluZy53cz4gYW5kIDxpbnRlcmZhY2Uud3NkbD4gb24gb3V0ZXIgY29tcG9uZW50IHJlZmVyZW5jZSBDb21wb25lbnRCL3JlZmVyZW5jZTIKKyAgICBASWdub3JlCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW82KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT5SdW5uaW5nIHRlc3RTY2VuYXJpbzYiKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKGZhbHNlKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzYuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNi8iKTsKKyAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgY2hlY2tTY2VuYXJpbzZhbmQ3UmVzdWx0cygiaHR0cDovL3NjZW5hcmlvNiIsIGZhbHNlKTsKKyAgICB9CisKKyAgICBASWdub3JlCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW82Tm9uV2lyaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiPT09PT5SdW5uaW5nIHRlc3RTY2VuYXJpbzZOb25XaXJpbmciKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKHRydWUpOworICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvNi5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW82LyIpOworICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBjaGVja1NjZW5hcmlvNmFuZDdSZXN1bHRzKCJodHRwOi8vc2NlbmFyaW82IiwgdHJ1ZSk7CisgICAgfQorCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrU2NlbmFyaW82YW5kN1Jlc3VsdHMoU3RyaW5nIG5hbWVzcGFjZSwgYm9vbGVhbiBub25XaXJpbmcpIHsKKyAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7CisKKyAgICAgICAgLy8gU2hvdWxkIHJlbW92ZSB0YXJnZXQ9IG9uIENvbXBvbmVudEIvcmVmZXJlbmNlMiAoZm9yIFNjZW5hcmlvIDYpIG9yCisgICAgICAgIC8vICBDb21wb3NpdGVDL3JlZmVyZW5jZTIgKGZvciBTY2VuYXJpbyA3KSwgYW5kIGFkZCB1cmk9Imh0dHA6Ly9mb28uY29tL2JhciIKKyAgICAgICAgLy8gIHRvIHRoZSA8YmluZGluZy53cz4gZWxlbWVudCBvbiBDb21wb25lbnRCL3JlZmVyZW5jZTIKKyAgICAgICAgLy8gRm9yIG5vbldpcmluZywgQ29tcG9uZW50Qi9yZWZlcmVuY2UyIHNob3VsZCBoYXZlIHRhcmdldD0KKyAgICAgICAgLy8gIGFuZCBubyB1cmk9IHNob3VsZCBiZSBhZGRlZAorICAgICAgICBDb21wb25lbnQgY29tcG9uZW50QiA9IFRlc3RVdGlscy5nZXRDb21wb25lbnQoZG9tYWluQ29tcG9zaXRlLCAiQ29tcG9uZW50QiIpOworICAgICAgICBXZWJTZXJ2aWNlQmluZGluZyB3c0JpbmRpbmcgPSBudWxsOworICAgICAgICBmb3IgKENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnRCLmdldFJlZmVyZW5jZXMoKSkgeworICAgICAgICAgICAgaWYgKCJyZWZlcmVuY2UyIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5vbldpcmluZykgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldFRhcmdldHMoKS5zaXplKCkgPT0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldFRhcmdldHMoKS5zaXplKCkgPT0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgd3NCaW5kaW5nID0gcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghbm9uV2lyaW5nKSB7CisgICAgICAgICAgICBhc3NlcnQgImh0dHA6Ly9mb28uY29tL2JhciIuZXF1YWxzKHdzQmluZGluZy5nZXRVUkkoKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFVSSSgpID09IG51bGw7CisgICAgICAgIH0KKworICAgICAgICBEZWZpbml0aW9uIGRlZjsKKyAgICAgICAgamF2YXgud3NkbC5TZXJ2aWNlIHN2YzsKKyAgICAgICAgUG9ydCBwb3J0OworICAgICAgICBpZiAoIW5vbldpcmluZykgeworICAgICAgICAgICAgLy8gU2hvdWxkIGNyZWF0ZSBXU0RMIGRvY3VtZW50IGZvciBDb21wb25lbnRCL3JlZmVyZW5jZTIgd2l0aCBlbmRwb2ludCB1cmk9Imh0dHA6Ly9mb28uY29tL2JhciIKKyAgICAgICAgICAgIGRlZiA9IHdzQmluZGluZy5nZXRXU0RMRG9jdW1lbnQoKTsKKyAgICAgICAgICAgIHN2YyA9IGRlZi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL3NjZW5hcmlvcy9Db21wb25lbnRCL3JlZmVyZW5jZTIiLCAiU2VydmljZTNhU2VydmljZSIpKTsgCisgICAgICAgICAgICBwb3J0ID0gc3ZjLmdldFBvcnQoIlNlcnZpY2UzYVBvcnQiKTsKKyAgICAgICAgICAgIGFzc2VydCAiaHR0cDovL2Zvby5jb20vYmFyIi5lcXVhbHMoVGVzdFV0aWxzLmdldFBvcnRBZGRyZXNzKHBvcnQpKTsKKyAgICAgICAgfQorCisgICAgICAgIENvbXBvbmVudCBjb21wb25lbnREID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnREIik7CisgICAgICAgIGlmICghbm9uV2lyaW5nKSB7CisgICAgICAgICAgICAvLyBTaG91bGQgYWRkIDxiaW5kaW5nLndzPiB0byBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMyB3aXRoIHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIiAKKyAgICAgICAgICAgIC8vIFNob3VsZCBzZXQgPGludGVyZmFjZS53c2RsPiBvbiBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMyAKKyAgICAgICAgICAgIHdzQmluZGluZyA9IG51bGw7CisgICAgICAgICAgICBmb3IgKENvbXBvbmVudFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb25lbnRELmdldFJlZmVyZW5jZXMoKSkgeworICAgICAgICAgICAgICAgIGlmICgicmVmZXJlbmNlMyIuZXF1YWxzKHJlZmVyZW5jZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgICAgIHdzQmluZGluZyA9IHJlZmVyZW5jZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRCaW5kaW5ncygpLnNpemUoKSA9PSAxOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KHdzQmluZGluZykgaW5zdGFuY2VvZiBXU0RMSW50ZXJmYWNlQ29udHJhY3Q7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0ICJodHRwOi8vZm9vLmNvbS9iYXIiLmVxdWFscyh3c0JpbmRpbmcuZ2V0VVJJKCkpOworCisgICAgICAgICAgICAvLyBTaG91bGQgY3JlYXRlIFdTREwgZG9jdW1lbnQgZm9yIENvbXBvbmVudEQvcmVmZXJlbmNlMyB3aXRoIGVuZHBvaW50IHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIgorICAgICAgICAgICAgZGVmID0gd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpOworICAgICAgICAgICAgc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vc2NlbmFyaW9zL0NvbXBvbmVudEIvcmVmZXJlbmNlMiIsICJTZXJ2aWNlM2FTZXJ2aWNlIikpOyAKKyAgICAgICAgICAgIHBvcnQgPSBzdmMuZ2V0UG9ydCgiU2VydmljZTNhUG9ydCIpOworICAgICAgICAgICAgYXNzZXJ0ICJodHRwOi8vZm9vLmNvbS9iYXIiLmVxdWFscyhUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gU2hvdWxkIG5vdCBhZGQgPGJpbmRpbmcud3M+IHRvIGFueSBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlcyAKKyAgICAgICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRCaW5kaW5nKFdlYlNlcnZpY2VCaW5kaW5nLmNsYXNzKSA9PSBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm8gcmVmZXJlbmNlcyBvbiBDb21wb3NpdGVDIHNob3VsZCBoYXZlIDxiaW5kaW5nLndzPiBvciA8aW50ZXJmYWNlLndzZGw+LCBleGNlcHQgZm9yCisgICAgICAgIC8vICByZWZlcmVuY2UyIGluIFNjZW5hcmlvIDcKKyAgICAgICAgQ29tcG9zaXRlIGNvbXBvc2l0ZUMgPSBUZXN0VXRpbHMuZ2V0Q29tcG9zaXRlKGRvbWFpbkNvbXBvc2l0ZSwgbmV3IFFOYW1lKG5hbWVzcGFjZSwgIkNvbXBvc2l0ZUMiKSk7CisgICAgICAgIGZvciAoUmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvc2l0ZUMuZ2V0UmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBpZiAoImh0dHA6Ly9zY2VuYXJpbzciLmVxdWFscyhuYW1lc3BhY2UpICYmICJyZWZlcmVuY2UyIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpIT0gbnVsbDsKKyAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkgaW5zdGFuY2VvZiBXU0RMSW50ZXJmYWNlQ29udHJhY3Q7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcykgPT0gbnVsbDsKKyAgICAgICAgICAgICAgICBhc3NlcnQgcmVmZXJlbmNlLmdldEludGVyZmFjZUNvbnRyYWN0KCkgaW5zdGFuY2VvZiBKYXZhSW50ZXJmYWNlQ29udHJhY3Q7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBTaG91bGQgYWRkIDxiaW5kaW5nLndzPiBhbmQgPGludGVyZmFjZS53c2RsPiB0byBvdXRlciBjb21wb3NpdGUgcmVmZXJlbmNlIENvbXBvc2l0ZUEvcmVmZXJlbmNlMSAKKyAgICAgICAgd3NCaW5kaW5nID0gbnVsbDsKKyAgICAgICAgZm9yIChSZWZlcmVuY2UgcmVmZXJlbmNlIDogZG9tYWluQ29tcG9zaXRlLmdldFJlZmVyZW5jZXMoKSkgeworICAgICAgICAgICAgaWYgKCJyZWZlcmVuY2UxIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpIGluc3RhbmNlb2YgV1NETEludGVyZmFjZUNvbnRyYWN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydCB3c0JpbmRpbmcuZ2V0VVJJKCkgPT0gbnVsbDsKKworICAgICAgICAvLyBTaG91bGQgbm90IGFkZCBhIFdTREwgZG9jdW1lbnQgdG8gZG9tYWluIGNvbXBvc2l0ZSByZWZlcmVuY2UgcmVmZXJlbmNlMQorICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpID09IG51bGw7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgZXhwZWN0ZWRFbmRwb2ludHMgPSAgIkNvbXBvbmVudCAtIENvbXBvbmVudEJcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZXJ2aWNlIC0gU2VydmljZTJcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFbmRwb2ludCAtIFNlcnZpY2UyXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VydmljZSAtIFNlcnZpY2UyYVxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVuZHBvaW50IC0gU2VydmljZTJhXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVmZXJlbmNlIC0gcmVmZXJlbmNlMlxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBvbmVudCAtIENvbXBvbmVudEIgaGFzIGNvbXBvc2l0ZSBpbXBsXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgQ29tcG9uZW50IC0gQ29tcG9uZW50RFxuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIFNlcnZpY2UgLSBTZXJ2aWNlM1xuIiArIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIEVuZHBvaW50IC0gU2VydmljZTNcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBTZXJ2aWNlIC0gU2VydmljZTNhXG4iICsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgRW5kcG9pbnQgLSBTZXJ2aWNlM2FcbiIgKyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBSZWZlcmVuY2UgLSByZWZlcmVuY2UzIjsKKyAgICAgICAgCisgICAgICAgIFN0cmluZyBhY3R1YWxFbmRwb2ludHMgPSBUZXN0VXRpbHMucHJpbnRFbmRwb2ludHMoZG9tYWluQ29tcG9zaXRlKTsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFjdHVhbEVuZHBvaW50cyk7CisgICAgICAgIAorICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKGV4cGVjdGVkRW5kcG9pbnRzLCBhY3R1YWxFbmRwb2ludHMpOyAgICAgICAgCisgICAgfQorCisgICAgLy8gU2NlbmFyaW8gNzogPGJpbmRpbmcud3M+IGFuZCA8aW50ZXJmYWNlLndzZGw+IG9uIGlubmVyIGNvbXBvc2l0ZSByZWZlcmVuY2UgQ29tcG9zaXRlQy9yZWZlcmVuY2UyCisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvNygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW83Iik7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcihmYWxzZSk7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW83LmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzcvIik7CisgICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIGNoZWNrU2NlbmFyaW82YW5kN1Jlc3VsdHMoImh0dHA6Ly9zY2VuYXJpbzciLCBmYWxzZSk7CisgICAgfQorCisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvN05vbldpcmluZygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW83Tm9uV2lyaW5nIik7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIgPSBuZXcgQ3VzdG9tQ29tcG9zaXRlQnVpbGRlcih0cnVlKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzcuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvNy8iKTsKKyAgICAgICAgLy9UZXN0VXRpbHMucHJpbnRSZXN1bHRzKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBUZXN0VXRpbHMuY2hlY2tQcm9ibGVtcyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgY2hlY2tTY2VuYXJpbzZhbmQ3UmVzdWx0cygiaHR0cDovL3NjZW5hcmlvNyIsIHRydWUpOworICAgIH0KKworICAgIC8vIFNjZW5hcmlvIDg6IDxiaW5kaW5nLndzPiBhbmQgPGludGVyZmFjZS53c2RsPiBvbiBpbm5lciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEQvcmVmZXJlbmNlMworICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvOCIpOworICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOworICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvOC5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW84LyIpOworICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBjaGVja1NjZW5hcmlvOFJlc3VsdHMoZmFsc2UpOworICAgIH0KKworICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzhOb25XaXJpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvOE5vbldpcmluZyIpOworICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIodHJ1ZSk7CisgICAgICAgIGN1c3RvbUJ1aWxkZXIubG9hZENvbnRyaWJ1dGlvbigic2NlbmFyaW84LmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzgvIik7CisgICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIGNoZWNrU2NlbmFyaW84UmVzdWx0cyh0cnVlKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzhSZXN1bHRzKGJvb2xlYW4gbm9uV2lyaW5nKSB7CisgICAgICAgIENvbXBvc2l0ZSBkb21haW5Db21wb3NpdGUgPSBjdXN0b21CdWlsZGVyLmdldERvbWFpbkNvbXBvc2l0ZSgpOworCisgICAgICAgIC8vIFNob3VsZCByZXBsYWNlIHRhcmdldD0gb24gQ29tcG9uZW50RC9yZWZlcmVuY2UzIGJ5IHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIiBvbiA8YmluZGluZy53cz4KKyAgICAgICAgLy8gRm9yIG5vbldpcmluZywgdGhlIG9yaWdpbmFsIHRhcmdldD0gaXMgcHJlc2VydmVkIGFuZCB0aGVyZSBpcyBubyB1cmk9CisgICAgICAgIENvbXBvbmVudCBjb21wb25lbnREID0gVGVzdFV0aWxzLmdldENvbXBvbmVudChkb21haW5Db21wb3NpdGUsICJDb21wb25lbnREIik7CisgICAgICAgIFdlYlNlcnZpY2VCaW5kaW5nIHdzQmluZGluZyA9IG51bGw7CisgICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBpZiAoInJlZmVyZW5jZTMiLmVxdWFscyhyZWZlcmVuY2UuZ2V0TmFtZSgpKSkgeworICAgICAgICAgICAgICAgIGlmICghbm9uV2lyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0VGFyZ2V0cygpLnNpemUoKSA9PSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0VGFyZ2V0cygpLnNpemUoKSA9PSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFub25XaXJpbmcpIHsKKyAgICAgICAgICAgIGFzc2VydCAiaHR0cDovL2Zvby5jb20vYmFyIi5lcXVhbHMod3NCaW5kaW5nLmdldFVSSSgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydCB3c0JpbmRpbmcuZ2V0VVJJKCkgPT0gbnVsbDsKKyAgICAgICAgfQorCisgICAgICAgIERlZmluaXRpb24gZGVmOworICAgICAgICBqYXZheC53c2RsLlNlcnZpY2Ugc3ZjOworICAgICAgICBQb3J0IHBvcnQ7CisgICAgICAgIGlmICghbm9uV2lyaW5nKSB7CisgICAgICAgICAgICAvLyBTaG91bGQgY3JlYXRlIFdTREwgZG9jdW1lbnQgZm9yIENvbXBvbmVudEQvcmVmZXJlbmNlMyB3aXRoIGVuZHBvaW50IHVyaT0iaHR0cDovL2Zvby5jb20vYmFyIgorICAgICAgICAgICAgZGVmID0gd3NCaW5kaW5nLmdldFdTRExEb2N1bWVudCgpOworICAgICAgICAgICAgc3ZjID0gZGVmLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vc2NlbmFyaW9zL0NvbXBvbmVudEQvcmVmZXJlbmNlMyIsICJTZXJ2aWNlM2FTZXJ2aWNlIikpOyAKKyAgICAgICAgICAgIHBvcnQgPSBzdmMuZ2V0UG9ydCgiU2VydmljZTNhUG9ydCIpOworICAgICAgICAgICAgYXNzZXJ0ICJodHRwOi8vZm9vLmNvbS9iYXIiLmVxdWFscyhUZXN0VXRpbHMuZ2V0UG9ydEFkZHJlc3MocG9ydCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gU2hvdWxkIGFkZCA8YmluZGluZy53cz4gYW5kIDxpbnRlcmZhY2Uud3NkbD4gdG8gaW5uZXIgY29tcG9zaXRlIHJlZmVyZW5jZSBDb21wb3NpdGVDL3JlZmVyZW5jZTIgCisgICAgICAgIENvbXBvc2l0ZSBjb21wb3NpdGVDID0gVGVzdFV0aWxzLmdldENvbXBvc2l0ZShkb21haW5Db21wb3NpdGUsIG5ldyBRTmFtZSgiaHR0cDovL3NjZW5hcmlvOCIsICJDb21wb3NpdGVDIikpOworICAgICAgICB3c0JpbmRpbmcgPSBudWxsOworICAgICAgICBmb3IgKFJlZmVyZW5jZSByZWZlcmVuY2UgOiBjb21wb3NpdGVDLmdldFJlZmVyZW5jZXMoKSkgeworICAgICAgICAgICAgaWYgKCJyZWZlcmVuY2UyIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICB3c0JpbmRpbmcgPSByZWZlcmVuY2UuZ2V0QmluZGluZyhXZWJTZXJ2aWNlQmluZGluZy5jbGFzcyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdCgpIGluc3RhbmNlb2YgV1NETEludGVyZmFjZUNvbnRyYWN0OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydCB3c0JpbmRpbmcuZ2V0VVJJKCkgPT0gbnVsbDsKKworICAgICAgICAvLyBTaG91bGQgYWRkIDxiaW5kaW5nLndzPiBhbmQgPGludGVyZmFjZS53c2RsPiB0byBvdXRlciBjb21wb25lbnQgcmVmZXJlbmNlIENvbXBvbmVudEIvcmVmZXJlbmNlMiAKKyAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEIgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEIiKTsKKyAgICAgICAgd3NCaW5kaW5nID0gbnVsbDsKKyAgICAgICAgZm9yIChDb21wb25lbnRSZWZlcmVuY2UgcmVmZXJlbmNlIDogY29tcG9uZW50Qi5nZXRSZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAgIGlmICgicmVmZXJlbmNlMiIuZXF1YWxzKHJlZmVyZW5jZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgd3NCaW5kaW5nID0gcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOworICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSBpbnN0YW5jZW9mIFdTRExJbnRlcmZhY2VDb250cmFjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFVSSSgpID09IG51bGw7CisKKyAgICAgICAgLy8gU2hvdWxkIGFkZCA8YmluZGluZy53cz4gYW5kIDxpbnRlcmZhY2Uud3NkbD4gdG8gb3V0ZXIgY29tcG9zaXRlIHJlZmVyZW5jZSBDb21wb3NpdGVBL3JlZmVyZW5jZTEgCisgICAgICAgIHdzQmluZGluZyA9IG51bGw7CisgICAgICAgIGZvciAoUmVmZXJlbmNlIHJlZmVyZW5jZSA6IGRvbWFpbkNvbXBvc2l0ZS5nZXRSZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAgIGlmICgicmVmZXJlbmNlMSIuZXF1YWxzKHJlZmVyZW5jZS5nZXROYW1lKCkpKSB7CisgICAgICAgICAgICAgICAgd3NCaW5kaW5nID0gcmVmZXJlbmNlLmdldEJpbmRpbmcoV2ViU2VydmljZUJpbmRpbmcuY2xhc3MpOworICAgICAgICAgICAgICAgIGFzc2VydCByZWZlcmVuY2UuZ2V0SW50ZXJmYWNlQ29udHJhY3QoKSBpbnN0YW5jZW9mIFdTRExJbnRlcmZhY2VDb250cmFjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhc3NlcnQgd3NCaW5kaW5nLmdldFVSSSgpID09IG51bGw7CisKKyAgICAgICAgLy8gU2hvdWxkIG5vdCBhZGQgYSBXU0RMIGRvY3VtZW50IHRvIGRvbWFpbiBjb21wb3NpdGUgcmVmZXJlbmNlIHJlZmVyZW5jZTEKKyAgICAgICAgYXNzZXJ0IHdzQmluZGluZy5nZXRXU0RMRG9jdW1lbnQoKSA9PSBudWxsOworICAgIH0KKworICAgIC8vIFNjZW5hcmlvIDk6IHRhcmdldCBpbiByZWZlcmVuY2UgQ0RSM0EgYW5kIGJpbmRpbmcud3MgdXJpPSBhdCBDQVIxQQorICAgIHB1YmxpYyB2b2lkIHRlc3RTY2VuYXJpbzkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvOSIpOworICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOworICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvOS5jb21wb3NpdGUiLCAiVGVzdENvbnRyaWJ1dGlvbiIsICJzcmMvbWFpbi9yZXNvdXJjZXMvc2NlbmFyaW85LyIpOworICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBjaGVja1NjZW5hcmlvOVJlc3VsdHMoKTsKKyAgICB9ICAgIAorCisgICAgcHJpdmF0ZSB2b2lkIGNoZWNrU2NlbmFyaW85UmVzdWx0cygpIHsKKyAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7CisKKyAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEQgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEQiKTsKKyAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlIGNvbXBvbmVudFJlZiA9IG51bGw7CisgICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBpZiAoInJlZmVyZW5jZTNhIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYgPSByZWZlcmVuY2U7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5zaXplKCkgPT0gMik7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMCkgaW5zdGFuY2VvZiBTQ0FCaW5kaW5nKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJlZmVyZW5jZS5nZXRCaW5kaW5ncygpLmdldCgxKSBpbnN0YW5jZW9mIFdlYlNlcnZpY2VCaW5kaW5nKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhc3NlcnRUcnVlKGNvbXBvbmVudFJlZiAhPSBudWxsKTsKKyAgICB9ICAgIAorICAgIAorICAgIC8vIFNjZW5hcmlvIDEwOiB0YXJnZXRzIGluIHJlZmVyZW5jZXMgQ0JSMkEgYW5kIENEUjNBIGFuZCBiaW5kaW5nLndzIGF0IENCUjJBCisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMTAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvMTAiKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKGZhbHNlKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzEwLmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzEwLyIpOworICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBjaGVja1NjZW5hcmlvMTBBbmQxMVJlc3VsdHMoKTsKKyAgICB9ICAgIAorICAgIAorICAgIC8vIFNjZW5hcmlvIDExOiB0YXJnZXRzIGluIHJlZmVyZW5jZXMgQ0JSMkEgYW5kIENEUjNBIGFuZCBiaW5kaW5nLndzIGF0IENDUjJBCisgICAgcHVibGljIHZvaWQgdGVzdFNjZW5hcmlvMTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI9PT09PlJ1bm5pbmcgdGVzdFNjZW5hcmlvMTEiKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlciA9IG5ldyBDdXN0b21Db21wb3NpdGVCdWlsZGVyKGZhbHNlKTsKKyAgICAgICAgY3VzdG9tQnVpbGRlci5sb2FkQ29udHJpYnV0aW9uKCJzY2VuYXJpbzExLmNvbXBvc2l0ZSIsICJUZXN0Q29udHJpYnV0aW9uIiwgInNyYy9tYWluL3Jlc291cmNlcy9zY2VuYXJpbzExLyIpOworICAgICAgICAvL1Rlc3RVdGlscy5wcmludFJlc3VsdHMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIFRlc3RVdGlscy5jaGVja1Byb2JsZW1zKGN1c3RvbUJ1aWxkZXIpOworICAgICAgICBjaGVja1NjZW5hcmlvMTBBbmQxMVJlc3VsdHMoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzEwQW5kMTFSZXN1bHRzKCkgeworICAgICAgICBDb21wb3NpdGUgZG9tYWluQ29tcG9zaXRlID0gY3VzdG9tQnVpbGRlci5nZXREb21haW5Db21wb3NpdGUoKTsKKworICAgICAgICBDb21wb25lbnQgY29tcG9uZW50RCA9IFRlc3RVdGlscy5nZXRDb21wb25lbnQoZG9tYWluQ29tcG9zaXRlLCAiQ29tcG9uZW50RCIpOworICAgICAgICBDb21wb25lbnRSZWZlcmVuY2UgY29tcG9uZW50UmVmID0gbnVsbDsKKyAgICAgICAgZm9yIChDb21wb25lbnRSZWZlcmVuY2UgcmVmZXJlbmNlIDogY29tcG9uZW50RC5nZXRSZWZlcmVuY2VzKCkpIHsKKyAgICAgICAgICAgIGlmICgicmVmZXJlbmNlM2EiLmVxdWFscyhyZWZlcmVuY2UuZ2V0TmFtZSgpKSkgeworICAgICAgICAgICAgICAgIGNvbXBvbmVudFJlZiA9IHJlZmVyZW5jZTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJlZmVyZW5jZS5nZXRCaW5kaW5ncygpLnNpemUoKSA9PSAyKTsKKyAgICAgICAgICAgICAgICBCaW5kaW5nIGJpbmRpbmcxID0gcmVmZXJlbmNlLmdldEJpbmRpbmdzKCkuZ2V0KDApOworICAgICAgICAgICAgICAgIGFzc2VydFRydWUoYmluZGluZzEgaW5zdGFuY2VvZiBTQ0FCaW5kaW5nKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdChiaW5kaW5nMSkgaW5zdGFuY2VvZiBKYXZhSW50ZXJmYWNlQ29udHJhY3QpOworICAgICAgICAgICAgICAgIEJpbmRpbmcgYmluZGluZzIgPSByZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShiaW5kaW5nMiBpbnN0YW5jZW9mIFdlYlNlcnZpY2VCaW5kaW5nKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRUcnVlKHJlZmVyZW5jZS5nZXRJbnRlcmZhY2VDb250cmFjdChiaW5kaW5nMikgaW5zdGFuY2VvZiBXU0RMSW50ZXJmYWNlQ29udHJhY3QpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydFRydWUoY29tcG9uZW50UmVmICE9IG51bGwpOworICAgIH0gIAorCisgICAgLy8gU2NlbmFyaW8gMTI6IHRhcmdldHMgaW4gcmVmZXJlbmNlcyBDQlIyQSBhbmQgQ0RSM0EgYW5kIGJpbmRpbmcud3MgYXQgQ0RSM0EKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW8xMigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8xMiIpOworICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOworICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvMTIuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTIvIik7CisgICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIGNoZWNrU2NlbmFyaW8xMlJlc3VsdHMoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzEyUmVzdWx0cygpIHsKKyAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7CisKKyAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEQgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEQiKTsKKyAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlIGNvbXBvbmVudFJlZiA9IG51bGw7CisgICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBpZiAoInJlZmVyZW5jZTNhIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYgPSByZWZlcmVuY2U7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5zaXplKCkgPT0gMik7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMCkgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlQmluZGluZyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMSkgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlQmluZGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0VHJ1ZShjb21wb25lbnRSZWYgIT0gbnVsbCk7CisgICAgfQorCisgICAgLy8gU2NlbmFyaW8gMTM6IHRhcmdldCBpbiByZWZlcmVuY2UgQ0RSM0EKKyAgICBwdWJsaWMgdm9pZCB0ZXN0U2NlbmFyaW8xMygpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj09PT0+UnVubmluZyB0ZXN0U2NlbmFyaW8xMyIpOworICAgICAgICBjdXN0b21CdWlsZGVyID0gbmV3IEN1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIoZmFsc2UpOworICAgICAgICBjdXN0b21CdWlsZGVyLmxvYWRDb250cmlidXRpb24oInNjZW5hcmlvMTMuY29tcG9zaXRlIiwgIlRlc3RDb250cmlidXRpb24iLCAic3JjL21haW4vcmVzb3VyY2VzL3NjZW5hcmlvMTMvIik7CisgICAgICAgIC8vVGVzdFV0aWxzLnByaW50UmVzdWx0cyhjdXN0b21CdWlsZGVyKTsKKyAgICAgICAgVGVzdFV0aWxzLmNoZWNrUHJvYmxlbXMoY3VzdG9tQnVpbGRlcik7CisgICAgICAgIGNoZWNrU2NlbmFyaW8xM1Jlc3VsdHMoKTsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgY2hlY2tTY2VuYXJpbzEzUmVzdWx0cygpIHsKKyAgICAgICAgQ29tcG9zaXRlIGRvbWFpbkNvbXBvc2l0ZSA9IGN1c3RvbUJ1aWxkZXIuZ2V0RG9tYWluQ29tcG9zaXRlKCk7CisKKyAgICAgICAgQ29tcG9uZW50IGNvbXBvbmVudEQgPSBUZXN0VXRpbHMuZ2V0Q29tcG9uZW50KGRvbWFpbkNvbXBvc2l0ZSwgIkNvbXBvbmVudEQiKTsKKyAgICAgICAgQ29tcG9uZW50UmVmZXJlbmNlIGNvbXBvbmVudFJlZiA9IG51bGw7CisgICAgICAgIGZvciAoQ29tcG9uZW50UmVmZXJlbmNlIHJlZmVyZW5jZSA6IGNvbXBvbmVudEQuZ2V0UmVmZXJlbmNlcygpKSB7CisgICAgICAgICAgICBpZiAoInJlZmVyZW5jZTNhIi5lcXVhbHMocmVmZXJlbmNlLmdldE5hbWUoKSkpIHsKKyAgICAgICAgICAgICAgICBjb21wb25lbnRSZWYgPSByZWZlcmVuY2U7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5zaXplKCkgPT0gMSk7CisgICAgICAgICAgICAgICAgYXNzZXJ0VHJ1ZShyZWZlcmVuY2UuZ2V0QmluZGluZ3MoKS5nZXQoMCkgaW5zdGFuY2VvZiBXZWJTZXJ2aWNlQmluZGluZyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0VHJ1ZShjb21wb25lbnRSZWYgIT0gbnVsbCk7CisgICAgfQorKi8KK30KZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvQ3VzdG9tQ29tcG9zaXRlQnVpbGRlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9idWlsZGVyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9idWlsZGVyL0N1c3RvbUNvbXBvc2l0ZUJ1aWxkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvYnVpbGRlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9DdXN0b21Db21wb3NpdGVCdWlsZGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9DdXN0b21Db21wb3NpdGVCdWlsZGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2J1aWxkZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvVGVzdFV0aWxzLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2J1aWxkZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvVGVzdFV0aWxzLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2J1aWxkZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2J1aWxkZXIvVGVzdFV0aWxzLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvYnVpbGRlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYnVpbGRlci9UZXN0VXRpbHMuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stYXBpL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWFwaS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1hcGkvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1hcGkvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpQ2FsbEJhY2suamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpQ2FsbEJhY2suamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpQ2FsbEJhY2suamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tBcGlDYWxsQmFjay5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tBcGlDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0FwaUNsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0FwaUNsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tBcGlDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0FwaUNsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0FwaUNsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tBcGlTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0FwaVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1hcGkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tBcGlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0FwaVNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0FwaVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0FwaVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stYXBpL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stYXBpL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsQmFja0FwaVRlc3QuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1hcGkvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrQXBpVGVzdC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tBcGlUZXN0LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1hcGkvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrQXBpVGVzdC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stYXBpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stYXBpL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stYXBpL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stYXBpL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQXBpVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1hcGkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tBcGlUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay1iYXNpYy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1iYXNpYy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1iYXNpYy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNDYWxsQmFjay5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2FsbEJhY2suamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NhbGxCYWNrLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NhbGxCYWNrLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY1NlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrQmFzaWNUZXN0LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrQmFzaWNUZXN0LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrQmFzaWNUZXN0LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tCYXNpY1Rlc3QuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWJhc2ljL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1iYXNpYy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stY29tcGxleC10eXBlL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stY29tcGxleC10eXBlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQ1R5cGVDYWxsQmFjay5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZUNhbGxCYWNrLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlQ2FsbEJhY2suamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZUNhbGxCYWNrLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stY29tcGxleC10eXBlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQ1R5cGVDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stY29tcGxleC10eXBlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQ1R5cGVDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZUNsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZUNsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stY29tcGxleC10eXBlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQ1R5cGVTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stY29tcGxleC10eXBlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQ1R5cGVTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZVNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tDVHlwZUNsaWVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tDVHlwZUNsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tDVHlwZUNsaWVudC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stY29tcGxleC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsQmFja0NUeXBlQ2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stY29tcGxleC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZVNlcnZpY2VJbXBsLmNvbXBvbmVudFR5cGUgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQ1R5cGVTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlU2VydmljZUltcGwuY29tcG9uZW50VHlwZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlU2VydmljZUltcGwuY29tcG9uZW50VHlwZQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stY29tcGxleC10eXBlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQ1R5cGVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLWNvbXBsZXgtdHlwZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0NUeXBlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1jb21wbGV4LXR5cGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tDVHlwZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svTXlDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svTXlDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svTXlDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1tdWx0aXBsZS13aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jYWxsYmFjay9NeUNsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay1tdWx0aXBsZS13aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jYWxsYmFjay9NeUNsaWVudEltcGwxLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NhbGxiYWNrL015Q2xpZW50SW1wbDEuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svTXlDbGllbnRJbXBsMS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NhbGxiYWNrL015Q2xpZW50SW1wbDEuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svTXlDbGllbnRJbXBsMi5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1tdWx0aXBsZS13aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jYWxsYmFjay9NeUNsaWVudEltcGwyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NhbGxiYWNrL015Q2xpZW50SW1wbDIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1tdWx0aXBsZS13aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jYWxsYmFjay9NeUNsaWVudEltcGwyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NhbGxiYWNrL015U2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1tdWx0aXBsZS13aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jYWxsYmFjay9NeVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svTXlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svTXlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NhbGxiYWNrL015U2VydmljZUNhbGxiYWNrLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NhbGxiYWNrL015U2VydmljZUNhbGxiYWNrLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NhbGxiYWNrL015U2VydmljZUNhbGxiYWNrLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svTXlTZXJ2aWNlQ2FsbGJhY2suamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svTXlTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1tdWx0aXBsZS13aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jYWxsYmFjay9NeVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NhbGxiYWNrL015U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1tdWx0aXBsZS13aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jYWxsYmFjay9NeVNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsYmFja011bHRpV2lyZVRlc3QuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1tdWx0aXBsZS13aXJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbGJhY2tNdWx0aVdpcmVUZXN0LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxiYWNrTXVsdGlXaXJlVGVzdC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxiYWNrTXVsdGlXaXJlVGVzdC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLW11bHRpcGxlLXdpcmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NhbGxiYWNrL0NhbGxiYWNrTXVsdGlXaXJlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svQ2FsbGJhY2tNdWx0aVdpcmVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1tdWx0aXBsZS13aXJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jYWxsYmFjay9DYWxsYmFja011bHRpV2lyZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stbXVsdGlwbGUtd2lyZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY2FsbGJhY2svQ2FsbGJhY2tNdWx0aVdpcmVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXNlcGFyYXRldGhyZWFkL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXNlcGFyYXRldGhyZWFkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9DYWxsQmFja1NlcGFyYXRlVGhyZWFkQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXNlcGFyYXRldGhyZWFkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9DYWxsQmFja1NlcGFyYXRlVGhyZWFkQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLXNlcGFyYXRldGhyZWFkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9DYWxsQmFja1NlcGFyYXRlVGhyZWFkQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0NhbGxCYWNrU2VwYXJhdGVUaHJlYWRDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0NhbGxCYWNrU2VwYXJhdGVUaHJlYWRDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXNlcGFyYXRldGhyZWFkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9DYWxsQmFja1NlcGFyYXRlVGhyZWFkQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQ2FsbEJhY2tTZXBhcmF0ZVRocmVhZENsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQ2FsbEJhY2tTZXBhcmF0ZVRocmVhZENsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0V2ZW50UHJvY2Vzc29yQ2FsbEJhY2suamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0V2ZW50UHJvY2Vzc29yQ2FsbEJhY2suamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0V2ZW50UHJvY2Vzc29yQ2FsbEJhY2suamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvRXZlbnRQcm9jZXNzb3JDYWxsQmFjay5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvRXZlbnRQcm9jZXNzb3JTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXNlcGFyYXRldGhyZWFkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9FdmVudFByb2Nlc3NvclNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0V2ZW50UHJvY2Vzc29yU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXNlcGFyYXRldGhyZWFkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9FdmVudFByb2Nlc3NvclNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0V2ZW50UHJvY2Vzc29yU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0V2ZW50UHJvY2Vzc29yU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0V2ZW50UHJvY2Vzc29yU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvRXZlbnRQcm9jZXNzb3JTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tTZXBhcmF0ZVRocmVhZFRlc3QuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tTZXBhcmF0ZVRocmVhZFRlc3QuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tTZXBhcmF0ZVRocmVhZFRlc3QuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXNlcGFyYXRldGhyZWFkL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsQmFja1NlcGFyYXRlVGhyZWFkVGVzdC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXNlcGFyYXRldGhyZWFkL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9DYWxsQmFja1NlcGFyYXRlVGhyZWFkVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0NhbGxCYWNrU2VwYXJhdGVUaHJlYWRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay1zZXBhcmF0ZXRocmVhZC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQ2FsbEJhY2tTZXBhcmF0ZVRocmVhZFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stc2VwYXJhdGV0aHJlYWQvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0NhbGxCYWNrU2VwYXJhdGVUaHJlYWRUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNDYWxsQmFjay5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2FsbEJhY2suamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NhbGxCYWNrLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NhbGxCYWNrLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY1NlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrUmVmZXJlbmNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrUmVmZXJlbmNlLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrUmVmZXJlbmNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tSZWZlcmVuY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tTZXJ2aWNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrU2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsQmFja1NlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsQmFja1NlcnZpY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1jb21wb3NpdGVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tUd29Db21wb3NpdGVzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tUd29Db21wb3NpdGVzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stdHdvLWNvbXBvc2l0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tUd29Db21wb3NpdGVzVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tY29tcG9zaXRlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja1R3b0NvbXBvc2l0ZXNUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjVkZDBlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvcG9tLnhtbApAQCAtMCwwICsxLDg2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICogCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICogCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisgICAgPGFydGlmYWN0SWQ+aXRlc3QtY2FsbGJhY2stdHdvLW5vZGVzPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBDYWxsYmFjayBUd28gTm9kZXM8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LW5vZGUtYXBpPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWltcGw8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczI8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1odHRwPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWhvc3QtamV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKworICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1oYXplbGNhc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgICAgICA8c2NvcGU+dGVzdDwvc2NvcGU+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICAgICAgCisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8cHJvcGVydGllcz4KKyAgICAgICAgPHdhcy5hbnQuc2NyaXB0PiR7YmFzZWRpcn0vLi4vYnVpbGQtd2FzLWludGVncmF0aW9uLnhtbDwvd2FzLmFudC5zY3JpcHQ+CisgICAgICAgIDx3YXMucHl0aG9uLnNjcmlwdD4ke2Jhc2VkaXJ9Ly4uL3dhc0FkbWluLnB5PC93YXMucHl0aG9uLnNjcmlwdD4KKyAgICA8L3Byb3BlcnRpZXM+ICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNDYWxsQmFjay5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NhbGxCYWNrLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2FsbEJhY2suamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NhbGxCYWNrLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY0NsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY1NlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrQmFzaWNTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY1NlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja0Jhc2ljU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tCYXNpY1NlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tSZWZlcmVuY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrUmVmZXJlbmNlLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsQmFja1JlZmVyZW5jZS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsQmFja1JlZmVyZW5jZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsbEJhY2tTZXJ2aWNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsQmFja1NlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vcmVzb3VyY2VzL0NhbGxCYWNrU2VydmljZS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy9tYWluL3Jlc291cmNlcy9DYWxsQmFja1NlcnZpY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NhbGxiYWNrLXR3by1ub2Rlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9DYWxsQmFja1R3b05vZGVzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrVHdvTm9kZXNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jYWxsYmFjay10d28tbm9kZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvQ2FsbEJhY2tUd29Ob2Rlc1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY2FsbGJhY2stdHdvLW5vZGVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L0NhbGxCYWNrVHdvTm9kZXNUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb21wb25lbnQtdHlwZS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvckNsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvQ2FsY3VsYXRvci5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL0NhbGN1bGF0b3IuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuY29tcG9uZW50VHlwZSBiL3Rlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuY29tcG9uZW50VHlwZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuY29tcG9uZW50VHlwZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuY29tcG9uZW50VHlwZSBiL3Rlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmNvbXBvbmVudFR5cGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlIGIvdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmNvbXBvbmVudFR5cGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuY29tcG9uZW50VHlwZSBiL3Rlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmNvbXBvbmVudFR5cGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCmRpZmYgLS1naXQgYS9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvbWFpbi9yZXNvdXJjZXMvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmNvbXBvbmVudFR5cGUgYi90ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuY29tcG9uZW50VHlwZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL21haW4vcmVzb3VyY2VzL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5jb21wb25lbnRUeXBlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy9tYWluL3Jlc291cmNlcy9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuY29tcG9uZW50VHlwZQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29tcG9uZW50LXR5cGUvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbXBvbmVudC10eXBlL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb21wb25lbnQtdHlwZS9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWZvbGRlci9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24tZm9sZGVyL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWZvbGRlci9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24tZm9sZGVyL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24tZm9sZGVyL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24tZm9sZGVyL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvamF2YS90ZXN0L0NvbnRyaWJ1dGlvbkZvbGRlclRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvamF2YS90ZXN0L0NvbnRyaWJ1dGlvbkZvbGRlclRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvamF2YS90ZXN0L0NvbnRyaWJ1dGlvbkZvbGRlclRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWZvbGRlci9zcmMvdGVzdC9qYXZhL3Rlc3QvQ29udHJpYnV0aW9uRm9sZGVyVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWZvbGRlci9zcmMvdGVzdC9yZXNvdXJjZXMvcmVwb3NpdG9yeS9mb2xkZXJXaXRoSmFycy9DYWxjdWxhdG9yLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWZvbGRlci9zcmMvdGVzdC9yZXNvdXJjZXMvcmVwb3NpdG9yeS9mb2xkZXJXaXRoSmFycy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWZvbGRlci9zcmMvdGVzdC9yZXNvdXJjZXMvcmVwb3NpdG9yeS9mb2xkZXJXaXRoSmFycy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24tZm9sZGVyL3NyYy90ZXN0L3Jlc291cmNlcy9yZXBvc2l0b3J5L2ZvbGRlcldpdGhKYXJzL0NhbGN1bGF0b3IuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24tZm9sZGVyL3NyYy90ZXN0L3Jlc291cmNlcy9yZXBvc2l0b3J5L2ZvbGRlcldpdGhKYXJzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24tZm9sZGVyL3NyYy90ZXN0L3Jlc291cmNlcy9yZXBvc2l0b3J5L2ZvbGRlcldpdGhKYXJzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24tZm9sZGVyL3NyYy90ZXN0L3Jlc291cmNlcy9yZXBvc2l0b3J5L2ZvbGRlcldpdGhKYXJzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkvZm9sZGVyV2l0aEphcnMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkvZm9sZGVyV2l0aEphcnMvc2VydmljZS5qYXIgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkvZm9sZGVyV2l0aEphcnMvc2VydmljZS5qYXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkvZm9sZGVyV2l0aEphcnMvc2VydmljZS5qYXIKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWZvbGRlci9zcmMvdGVzdC9yZXNvdXJjZXMvcmVwb3NpdG9yeS9mb2xkZXJXaXRoSmFycy9zZXJ2aWNlLmphcgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24tZm9sZGVyL3NyYy90ZXN0L3Jlc291cmNlcy9yZXBvc2l0b3J5L2ZvbGRlcldpdGhKYXJzL3NlcnZpY2VJbXBsLmphciBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWZvbGRlci9zcmMvdGVzdC9yZXNvdXJjZXMvcmVwb3NpdG9yeS9mb2xkZXJXaXRoSmFycy9zZXJ2aWNlSW1wbC5qYXIKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkvZm9sZGVyV2l0aEphcnMvc2VydmljZUltcGwuamFyCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkvZm9sZGVyV2l0aEphcnMvc2VydmljZUltcGwuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkzL2NvbnRyaWJ1dGlvbi56aXAgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkzL2NvbnRyaWJ1dGlvbi56aXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1mb2xkZXIvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkzL2NvbnRyaWJ1dGlvbi56aXAKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWZvbGRlci9zcmMvdGVzdC9yZXNvdXJjZXMvcmVwb3NpdG9yeTMvY29udHJpYnV0aW9uLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtY29tcG9zaXRlL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1jb21wb3NpdGUvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWNvbXBvc2l0ZS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1jb21wb3NpdGUvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9qYXZhL2hlbGxvL0hlbGxvLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1jb21wb3NpdGUvc3JjL21haW4vamF2YS9oZWxsby9IZWxsby5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG8vSGVsbG8uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG8vSGVsbG8uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9qYXZhL2hlbGxvL0hlbGxvSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG8vSGVsbG9JbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1jb21wb3NpdGUvc3JjL21haW4vamF2YS9oZWxsby9IZWxsb0ltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG8vSGVsbG9JbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1jb21wb3NpdGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtY29tcG9zaXRlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1jb21wb3NpdGUvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG8uY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtY29tcG9zaXRlL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsby5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG8uY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtY29tcG9zaXRlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvbnRyaWJ1dGlvbi9IZWxsb1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1jb21wb3NpdGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29udHJpYnV0aW9uL0hlbGxvVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWNvbXBvc2l0ZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb250cmlidXRpb24vSGVsbG9UZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1jb21wb3NpdGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29udHJpYnV0aW9uL0hlbGxvVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWphdmEvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWphdmEvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWphdmEvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtamF2YS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtamF2YS9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWphdmEvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1qYXZhL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1qYXZhL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtamF2YS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWphdmEvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWphdmEvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuY29tcG9uZW50VHlwZSBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWphdmEvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuY29tcG9uZW50VHlwZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LWphdmEvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuY29tcG9uZW50VHlwZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtamF2YS9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5jb21wb25lbnRUeXBlCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtcmVzb3VyY2UvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LXJlc291cmNlL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1yZXNvdXJjZS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1yZXNvdXJjZS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvdWZzZXJ2aWNlcy9zdG9yZS5odG1sIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL3Vmc2VydmljZXMvc3RvcmUuaHRtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LXJlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy91ZnNlcnZpY2VzL3N0b3JlLmh0bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LXJlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy91ZnNlcnZpY2VzL3N0b3JlLmh0bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC13c2RsL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC13c2RsL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC13c2RsL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LXdzZGwvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LXdzZGwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC13c2RsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC13c2RsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC13c2RsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC13c2RsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LXdzZGwvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvZXhwb3J0LXdzZGwvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQueHNkIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC54c2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2V4cG9ydC13c2RsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9leHBvcnQtd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC54c2QKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2ZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQud3NkbCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLnhzZCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC54c2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQueHNkCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkd3MuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkd3MuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtY29tcG9zaXRlL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkd3MuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGR3cy5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2NhbnkvdGVzdC9jb250cmlidXRpb24vSGVsbG9Xb3JsZFNlcnZlclRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2NhbnkvdGVzdC9jb250cmlidXRpb24vSGVsbG9Xb3JsZFNlcnZlclRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1jb21wb3NpdGUvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2NhbnkvdGVzdC9jb250cmlidXRpb24vSGVsbG9Xb3JsZFNlcnZlclRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWNvbXBvc2l0ZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS90ZXN0L2NvbnRyaWJ1dGlvbi9IZWxsb1dvcmxkU2VydmVyVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWphdmEvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWphdmEvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWphdmEvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtamF2YS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtamF2YS9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWphdmEvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1qYXZhL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1qYXZhL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtamF2YS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWphdmEvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWphdmEvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGR3cy5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1qYXZhL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkd3MuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtamF2YS9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHdzLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtamF2YS9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHdzLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LWphdmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29udHJpYnV0aW9uL0hlbGxvV29ybGRTZXJ2ZXJUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb250cmlidXRpb24vSGVsbG9Xb3JsZFNlcnZlclRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1qYXZhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvbnRyaWJ1dGlvbi9IZWxsb1dvcmxkU2VydmVyVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtamF2YS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb250cmlidXRpb24vSGVsbG9Xb3JsZFNlcnZlclRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1yZXNvdXJjZS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtcmVzb3VyY2UvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXJlc291cmNlL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXJlc291cmNlL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXJlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXJlc291cmNlL3NyYy9tYWluL3Jlc291cmNlcy9zdG9yZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1yZXNvdXJjZS9zcmMvbWFpbi9yZXNvdXJjZXMvc3RvcmUuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL3N0b3JlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtcmVzb3VyY2Uvc3JjL21haW4vcmVzb3VyY2VzL3N0b3JlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXJlc291cmNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvbnRyaWJ1dGlvbi9TdG9yZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC1yZXNvdXJjZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb250cmlidXRpb24vU3RvcmVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtcmVzb3VyY2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29udHJpYnV0aW9uL1N0b3JlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtcmVzb3VyY2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29udHJpYnV0aW9uL1N0b3JlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtd3NkbC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtd3NkbC9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC13c2RsL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC13c2RsL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtd3NkbC9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtd3NkbC9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtd3NkbC9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC13c2RsL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC13c2RsL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtd3NkbC9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC13c2RsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHdzLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGR3cy5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC13c2RsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkd3MuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC13c2RsL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkd3MuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9pbXBvcnQtd3NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb250cmlidXRpb24vSGVsbG9Xb3JsZFNlcnZlclRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC13c2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvbnRyaWJ1dGlvbi9IZWxsb1dvcmxkU2VydmVyVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvaW1wb3J0LXdzZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29udHJpYnV0aW9uL0hlbGxvV29ybGRTZXJ2ZXJUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi1pbXBvcnQtZXhwb3J0L2ltcG9ydC13c2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvbnRyaWJ1dGlvbi9IZWxsb1dvcmxkU2VydmVyVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLWltcG9ydC1leHBvcnQvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24taW1wb3J0LWV4cG9ydC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24temlwL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi16aXAvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLXppcC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi16aXAvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLXppcC9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29udHJpYnV0aW9uLXppcC9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLXppcC9zcmMvdGVzdC9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24temlwL3NyYy90ZXN0L2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb250cmlidXRpb24temlwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9jb250cmlidXRpb24vemlwL0NvbnRyaWJ1dGlvblpJUFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi16aXAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi96aXAvQ29udHJpYnV0aW9uWklQVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29udHJpYnV0aW9uLXppcC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY29udHJpYnV0aW9uL3ppcC9Db250cmlidXRpb25aSVBUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvbnRyaWJ1dGlvbi16aXAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2NvbnRyaWJ1dGlvbi96aXAvQ29udHJpYnV0aW9uWklQVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29udHJpYnV0aW9uLXppcC9zcmMvdGVzdC9yZXNvdXJjZXMvcmVwb3NpdG9yeS9jb250cmlidXRpb24uemlwIGIvdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24temlwL3NyYy90ZXN0L3Jlc291cmNlcy9yZXBvc2l0b3J5L2NvbnRyaWJ1dGlvbi56aXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvbnRyaWJ1dGlvbi16aXAvc3JjL3Rlc3QvcmVzb3VyY2VzL3JlcG9zaXRvcnkvY29udHJpYnV0aW9uLnppcApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb250cmlidXRpb24temlwL3NyYy90ZXN0L3Jlc291cmNlcy9yZXBvc2l0b3J5L2NvbnRyaWJ1dGlvbi56aXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9TY2VuYXJpb0ZpdmVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9TY2VuYXJpb0ZpdmVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9TY2VuYXJpb0ZpdmVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvRml2ZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvRm91clRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvRm91clRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvRm91clRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvU2NlbmFyaW9Gb3VyVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvU2NlbmFyaW9PbmVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9TY2VuYXJpb09uZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvT25lVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9TY2VuYXJpb09uZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvU2l4VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvU2NlbmFyaW9TaXhUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9TY2VuYXJpb1NpeFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvU2NlbmFyaW9TaXhUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9TY2VuYXJpb1RocmVlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvU2NlbmFyaW9UaHJlZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvVGhyZWVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvVGhyZWVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9TY2VuYXJpb1R3b1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvVHdvVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvU2NlbmFyaW9Ud29UZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1NjZW5hcmlvVHdvVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvVGVzdENvcmJhSG9zdC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9UZXN0Q29yYmFIb3N0LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1Rlc3RDb3JiYUhvc3QuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9UZXN0Q29yYmFIb3N0LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL1Rlc3RDb3JiYUhvc3RNb2R1bGVBY3RpdmF0b3IuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvVGVzdENvcmJhSG9zdE1vZHVsZUFjdGl2YXRvci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9UZXN0Q29yYmFIb3N0TW9kdWxlQWN0aXZhdG9yLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvVGVzdENvcmJhSG9zdE1vZHVsZUFjdGl2YXRvci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvQW5ub3RhdGVkU3RydWN0LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Bbm5vdGF0ZWRTdHJ1Y3QuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0Fubm90YXRlZFN0cnVjdC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Bbm5vdGF0ZWRTdHJ1Y3QuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0Fubm90YXRlZFN0cnVjdEhlbHBlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvQW5ub3RhdGVkU3RydWN0SGVscGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Bbm5vdGF0ZWRTdHJ1Y3RIZWxwZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvQW5ub3RhdGVkU3RydWN0SGVscGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Bbm5vdGF0ZWRTdHJ1Y3RIb2xkZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0Fubm90YXRlZFN0cnVjdEhvbGRlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvQW5ub3RhdGVkU3RydWN0SG9sZGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0Fubm90YXRlZFN0cnVjdEhvbGRlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvQ29sb3IuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0NvbG9yLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Db2xvci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Db2xvci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvQ29sb3JIZWxwZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0NvbG9ySGVscGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Db2xvckhlbHBlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Db2xvckhlbHBlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvQ29sb3JIb2xkZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0NvbG9ySG9sZGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Db2xvckhvbGRlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Db2xvckhvbGRlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvSW5uZXJTdHJ1Y3QuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0lubmVyU3RydWN0LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclN0cnVjdC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclN0cnVjdC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvSW5uZXJTdHJ1Y3RIZWxwZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0lubmVyU3RydWN0SGVscGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclN0cnVjdEhlbHBlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclN0cnVjdEhlbHBlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvSW5uZXJTdHJ1Y3RIb2xkZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0lubmVyU3RydWN0SG9sZGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclN0cnVjdEhvbGRlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclN0cnVjdEhvbGRlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvSW5uZXJVbmlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvSW5uZXJVbmlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvSW5uZXJVbmlvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclVuaW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclVuaW9uSGVscGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclVuaW9uSGVscGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Jbm5lclVuaW9uSGVscGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0lubmVyVW5pb25IZWxwZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0lubmVyVW5pb25Ib2xkZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0lubmVyVW5pb25Ib2xkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0lubmVyVW5pb25Ib2xkZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvSW5uZXJVbmlvbkhvbGRlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvTG9uZ1NlcXVlbmNlSGVscGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Mb25nU2VxdWVuY2VIZWxwZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0xvbmdTZXF1ZW5jZUhlbHBlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Mb25nU2VxdWVuY2VIZWxwZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL0xvbmdTZXF1ZW5jZUhvbGRlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvTG9uZ1NlcXVlbmNlSG9sZGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Mb25nU2VxdWVuY2VIb2xkZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvTG9uZ1NlcXVlbmNlSG9sZGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9SaWNoU3RydWN0LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9SaWNoU3RydWN0LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9SaWNoU3RydWN0LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1JpY2hTdHJ1Y3QuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1JpY2hTdHJ1Y3RIZWxwZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1JpY2hTdHJ1Y3RIZWxwZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1JpY2hTdHJ1Y3RIZWxwZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvUmljaFN0cnVjdEhlbHBlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvUmljaFN0cnVjdEhvbGRlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvUmljaFN0cnVjdEhvbGRlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvUmljaFN0cnVjdEhvbGRlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9SaWNoU3RydWN0SG9sZGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9SaWNoVW5pb24uamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1JpY2hVbmlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvUmljaFVuaW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1JpY2hVbmlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvUmljaFVuaW9uSGVscGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9SaWNoVW5pb25IZWxwZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1JpY2hVbmlvbkhlbHBlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9SaWNoVW5pb25IZWxwZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1JpY2hVbmlvbkhvbGRlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvUmljaFVuaW9uSG9sZGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9SaWNoVW5pb25Ib2xkZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvUmljaFVuaW9uSG9sZGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb09uZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9PbmUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvT25lLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvT25lLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb09uZUhlbHBlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9PbmVIZWxwZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvT25lSGVscGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvT25lSGVscGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb09uZUhvbGRlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9PbmVIb2xkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvT25lSG9sZGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvT25lSG9sZGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb09uZU9wZXJhdGlvbnMuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvT25lT3BlcmF0aW9ucy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9PbmVPcGVyYXRpb25zLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvT25lT3BlcmF0aW9ucy5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9TaXguamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvU2l4LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1NpeC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1NpeC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9TaXhIZWxwZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvU2l4SGVscGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1NpeEhlbHBlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1NpeEhlbHBlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9TaXhIb2xkZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvU2l4SG9sZGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1NpeEhvbGRlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1NpeEhvbGRlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9TaXhPcGVyYXRpb25zLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1NpeE9wZXJhdGlvbnMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvU2l4T3BlcmF0aW9ucy5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1NpeE9wZXJhdGlvbnMuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvVHdvLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1R3by5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9Ud28uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9Ud28uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvVHdvSGVscGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1R3b0hlbHBlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9Ud29IZWxwZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9Ud29IZWxwZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvVHdvSG9sZGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1R3b0hvbGRlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9Ud29Ib2xkZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9Ud29Ib2xkZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1NjZW5hcmlvVHdvT3BlcmF0aW9ucy5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9Ud29PcGVyYXRpb25zLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TY2VuYXJpb1R3b09wZXJhdGlvbnMuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU2NlbmFyaW9Ud29PcGVyYXRpb25zLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TdHJpbmdBcnJheUhlbHBlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU3RyaW5nQXJyYXlIZWxwZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1N0cmluZ0FycmF5SGVscGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1N0cmluZ0FycmF5SGVscGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TdHJpbmdBcnJheUhvbGRlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU3RyaW5nQXJyYXlIb2xkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1N0cmluZ0FycmF5SG9sZGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1N0cmluZ0FycmF5SG9sZGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TdHJpbmdTZXF1ZW5jZUhlbHBlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU3RyaW5nU2VxdWVuY2VIZWxwZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1N0cmluZ1NlcXVlbmNlSGVscGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1N0cmluZ1NlcXVlbmNlSGVscGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9TdHJpbmdTZXF1ZW5jZUhvbGRlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvU3RyaW5nU2VxdWVuY2VIb2xkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1N0cmluZ1NlcXVlbmNlSG9sZGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1N0cmluZ1NlcXVlbmNlSG9sZGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Ud29EaW1Mb25nU2VxdWVuY2VIZWxwZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1R3b0RpbUxvbmdTZXF1ZW5jZUhlbHBlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvVHdvRGltTG9uZ1NlcXVlbmNlSGVscGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1R3b0RpbUxvbmdTZXF1ZW5jZUhlbHBlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvVHdvRGltTG9uZ1NlcXVlbmNlSG9sZGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Ud29EaW1Mb25nU2VxdWVuY2VIb2xkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1R3b0RpbUxvbmdTZXF1ZW5jZUhvbGRlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Ud29EaW1Mb25nU2VxdWVuY2VIb2xkZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1VuZXhwZWN0ZWRFeGNlcHRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1VuZXhwZWN0ZWRFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1VuZXhwZWN0ZWRFeGNlcHRpb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvVW5leHBlY3RlZEV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvVW5leHBlY3RlZEV4Y2VwdGlvbkhlbHBlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvVW5leHBlY3RlZEV4Y2VwdGlvbkhlbHBlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvVW5leHBlY3RlZEV4Y2VwdGlvbkhlbHBlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9VbmV4cGVjdGVkRXhjZXB0aW9uSGVscGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9VbmV4cGVjdGVkRXhjZXB0aW9uSG9sZGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9VbmV4cGVjdGVkRXhjZXB0aW9uSG9sZGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9VbmV4cGVjdGVkRXhjZXB0aW9uSG9sZGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1VuZXhwZWN0ZWRFeGNlcHRpb25Ib2xkZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1dyb25nQ29sb3IuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1dyb25nQ29sb3IuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1dyb25nQ29sb3IuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvV3JvbmdDb2xvci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvV3JvbmdDb2xvckhlbHBlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvV3JvbmdDb2xvckhlbHBlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvV3JvbmdDb2xvckhlbHBlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Xcm9uZ0NvbG9ySGVscGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Xcm9uZ0NvbG9ySG9sZGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Xcm9uZ0NvbG9ySG9sZGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9Xcm9uZ0NvbG9ySG9sZGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL1dyb25nQ29sb3JIb2xkZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL19TY2VuYXJpb09uZUltcGxCYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9fU2NlbmFyaW9PbmVJbXBsQmFzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvX1NjZW5hcmlvT25lSW1wbEJhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvX1NjZW5hcmlvT25lSW1wbEJhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL19TY2VuYXJpb09uZVN0dWIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL19TY2VuYXJpb09uZVN0dWIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL19TY2VuYXJpb09uZVN0dWIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvX1NjZW5hcmlvT25lU3R1Yi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvX1NjZW5hcmlvU2l4SW1wbEJhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL19TY2VuYXJpb1NpeEltcGxCYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9fU2NlbmFyaW9TaXhJbXBsQmFzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9fU2NlbmFyaW9TaXhJbXBsQmFzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvX1NjZW5hcmlvU2l4U3R1Yi5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvX1NjZW5hcmlvU2l4U3R1Yi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvX1NjZW5hcmlvU2l4U3R1Yi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9fU2NlbmFyaW9TaXhTdHViLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9fU2NlbmFyaW9Ud29JbXBsQmFzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS9nZW5lcmF0ZWQvX1NjZW5hcmlvVHdvSW1wbEJhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL19TY2VuYXJpb1R3b0ltcGxCYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL19TY2VuYXJpb1R3b0ltcGxCYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9fU2NlbmFyaW9Ud29TdHViLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9fU2NlbmFyaW9Ud29TdHViLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL2dlbmVyYXRlZC9fU2NlbmFyaW9Ud29TdHViLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvZ2VuZXJhdGVkL19TY2VuYXJpb1R3b1N0dWIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9GaXZlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvRml2ZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZpdmUuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZpdmUuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9GaXZlQ29tcG9uZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvRml2ZUNvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZpdmVDb21wb25lbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZpdmVDb21wb25lbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9GaXZlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZpdmVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvRml2ZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZpdmVJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvRm91ci5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZvdXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Gb3VyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Gb3VyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvRm91ckNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZvdXJDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Gb3VyQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Gb3VyQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvRm91ckV4Y2VwdGlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZvdXJFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Gb3VyRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Gb3VyRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvRm91ckltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Gb3VySW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZvdXJJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Gb3VySW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb0ZvdXJTdHJ1Y3QuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Gb3VyU3RydWN0LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvRm91clN0cnVjdC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvRm91clN0cnVjdC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb09uZUNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb09uZUNvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb09uZUNvbXBvbmVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvT25lQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvT25lU2VydmFudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb09uZVNlcnZhbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9PbmVTZXJ2YW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9PbmVTZXJ2YW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvU2l4U2VydmFudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb1NpeFNlcnZhbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9TaXhTZXJ2YW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9TaXhTZXJ2YW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1NjZW5hcmlvVHdvU2VydmFudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9TY2VuYXJpb1R3b1NlcnZhbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Ud29TZXJ2YW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvU2NlbmFyaW9Ud29TZXJ2YW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RBbm5vdGF0ZWRTdHJ1Y3QuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVEFubm90YXRlZFN0cnVjdC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UQW5ub3RhdGVkU3RydWN0LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVEFubm90YXRlZFN0cnVjdC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UQ29sb3IuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVENvbG9yLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RDb2xvci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RDb2xvci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9USW5uZXJTdHJ1Y3QuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVElubmVyU3RydWN0LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RJbm5lclN0cnVjdC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RJbm5lclN0cnVjdC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9USW5uZXJVbmlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9USW5uZXJVbmlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9USW5uZXJVbmlvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RJbm5lclVuaW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RSaWNoU3RydWN0LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RSaWNoU3RydWN0LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RSaWNoU3RydWN0LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFJpY2hTdHJ1Y3QuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFJpY2hVbmlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UUmljaFVuaW9uLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RSaWNoVW5pb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UUmljaFVuaW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb09uZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9PbmUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvT25lLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvT25lLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb09uZUNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9PbmVDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvT25lQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvT25lQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb09uZVNlcnZhbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvT25lU2VydmFudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9PbmVTZXJ2YW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvT25lU2VydmFudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9TaXguamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvU2l4LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1NpeC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1NpeC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9TaXhDb21wb25lbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvU2l4Q29tcG9uZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1NpeENvbXBvbmVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1NpeENvbXBvbmVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9TaXhTZXJ2YW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1NpeFNlcnZhbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvU2l4U2VydmFudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1NpeFNlcnZhbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVGhyZWUuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVGhyZWUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVGhyZWUuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9UaHJlZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9UaHJlZUNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9UaHJlZUNvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9UaHJlZUNvbXBvbmVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1RocmVlQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1RocmVlU2VydmFudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9UaHJlZVNlcnZhbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVGhyZWVTZXJ2YW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVGhyZWVTZXJ2YW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1R3by5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9Ud28uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVHdvLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVHdvLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1R3b0NvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9Ud29Db21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVHdvQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVHdvQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2NvcmJhL3R5cGVzL1RTY2VuYXJpb1R3b1NlcnZhbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVHdvU2VydmFudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9jb3JiYS90eXBlcy9UU2NlbmFyaW9Ud29TZXJ2YW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvY29yYmEvdHlwZXMvVFNjZW5hcmlvVHdvU2VydmFudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5jb3JlLk1vZHVsZUFjdGl2YXRvciBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuY29yZS5Nb2R1bGVBY3RpdmF0b3IKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuTW9kdWxlQWN0aXZhdG9yCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvcmUuTW9kdWxlQWN0aXZhdG9yCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvU2NlbmFyaW9GaXZlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL1NjZW5hcmlvRml2ZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb0ZpdmUuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb0ZpdmUuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvU2NlbmFyaW9Gb3VyLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL1NjZW5hcmlvRm91ci5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb0ZvdXIuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb0ZvdXIuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvU2NlbmFyaW9PbmUuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvU2NlbmFyaW9PbmUuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvU2NlbmFyaW9PbmUuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb09uZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb1NpeC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb1NpeC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb1NpeC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL1NjZW5hcmlvU2l4LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL1NjZW5hcmlvVGhyZWUuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvU2NlbmFyaW9UaHJlZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb1RocmVlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvU2NlbmFyaW9UaHJlZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb1R3by5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb1R3by5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9TY2VuYXJpb1R3by5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL1NjZW5hcmlvVHdvLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL2l0ZXN0X3NjZW5hcmlvLmlkbCBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL2l0ZXN0X3NjZW5hcmlvLmlkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL2l0ZXN0X3NjZW5hcmlvLmlkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvaXRlc3Rfc2NlbmFyaW8uaWRsCmRpZmYgLS1naXQgYS9pdGVzdC9jb3JiYS9zcmMvdGVzdC9yZXNvdXJjZXMvc2NlbmFyaW9mb3VyLnhzZCBiL3Rlc3RpbmcvaXRlc3QvY29yYmEvc3JjL3Rlc3QvcmVzb3VyY2VzL3NjZW5hcmlvZm91ci54c2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9zY2VuYXJpb2ZvdXIueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2NvcmJhL3NyYy90ZXN0L3Jlc291cmNlcy9zY2VuYXJpb2ZvdXIueHNkCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0FDbGllbnRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQUNsaWVudFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9BQ2xpZW50U2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQUNsaWVudFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9BU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0FTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0FTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQmVhbjEuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9CZWFuMS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4xLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9CZWFuMS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4xMC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4xMC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4xMC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQmVhbjEwLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQmVhbjExLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQmVhbjExLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQmVhbjExLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9CZWFuMTEuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9CZWFuMi5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4yLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQmVhbjIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4yLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQmVhbjMuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9CZWFuMy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4zLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9CZWFuMy5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4zMS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4zMS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0JlYW4zMS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvQmVhbjMxLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvR2VuZXJpY3NMb2NhbFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9HZW5lcmljc0xvY2FsU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0dlbmVyaWNzTG9jYWxTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9HZW5lcmljc0xvY2FsU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0dlbmVyaWNzU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0dlbmVyaWNzU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0dlbmVyaWNzU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvR2VuZXJpY3NTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvR2VuZXJpY3NTZXJ2aWNlQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvR2VuZXJpY3NTZXJ2aWNlQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvR2VuZXJpY3NTZXJ2aWNlQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9HZW5lcmljc1NlcnZpY2VDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9IZWxsb0xvY2FsU2VydmljZVNpbXBsZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0hlbGxvTG9jYWxTZXJ2aWNlU2ltcGxlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvSGVsbG9Mb2NhbFNlcnZpY2VTaW1wbGUuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0hlbGxvTG9jYWxTZXJ2aWNlU2ltcGxlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvSGVsbG9TZXJ2aWNlU2ltcGxlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvSGVsbG9TZXJ2aWNlU2ltcGxlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvSGVsbG9TZXJ2aWNlU2ltcGxlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9IZWxsb1NlcnZpY2VTaW1wbGUuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9IZWxsb1NlcnZpY2VTaW1wbGVDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9IZWxsb1NlcnZpY2VTaW1wbGVDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9IZWxsb1NlcnZpY2VTaW1wbGVDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0hlbGxvU2VydmljZVNpbXBsZUNsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1ByaW1pdGl2ZXNMb2NhbFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9QcmltaXRpdmVzTG9jYWxTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc0xvY2FsU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc0xvY2FsU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1ByaW1pdGl2ZXNTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc1NlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9QcmltaXRpdmVzU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9QcmltaXRpdmVzU2VydmljZUNsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1ByaW1pdGl2ZXNTZXJ2aWNlQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc1NlcnZpY2VDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1ByaW1pdGl2ZXNTZXJ2aWNlQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvU3RhbmRhcmRUeXBlc0xvY2FsU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1N0YW5kYXJkVHlwZXNMb2NhbFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9TdGFuZGFyZFR5cGVzTG9jYWxTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9TdGFuZGFyZFR5cGVzTG9jYWxTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvU3RhbmRhcmRUeXBlc1NlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9TdGFuZGFyZFR5cGVzU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1N0YW5kYXJkVHlwZXNTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9TdGFuZGFyZFR5cGVzU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1N0YW5kYXJkVHlwZXNTZXJ2aWNlQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvU3RhbmRhcmRUeXBlc1NlcnZpY2VDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9TdGFuZGFyZFR5cGVzU2VydmljZUNsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvU3RhbmRhcmRUeXBlc1NlcnZpY2VDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0FDbGllbnRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvQUNsaWVudFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9BQ2xpZW50U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvQUNsaWVudFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9BU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0FTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvQVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0FTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvR2VuZXJpY3NMb2NhbFNlcnZpY2VDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9HZW5lcmljc0xvY2FsU2VydmljZUNsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0dlbmVyaWNzTG9jYWxTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9HZW5lcmljc0xvY2FsU2VydmljZUNsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0dlbmVyaWNzU2VydmljZUNsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0dlbmVyaWNzU2VydmljZUNsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0dlbmVyaWNzU2VydmljZUNsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvR2VuZXJpY3NTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvR2VuZXJpY3NTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvR2VuZXJpY3NTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvR2VuZXJpY3NTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9HZW5lcmljc1NlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9HZW5lcmljc1RyYW5zZm9ybWVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9HZW5lcmljc1RyYW5zZm9ybWVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9HZW5lcmljc1RyYW5zZm9ybWVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0dlbmVyaWNzVHJhbnNmb3JtZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0hlbGxvTG9jYWxTZXJ2aWNlU2ltcGxlQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvSGVsbG9Mb2NhbFNlcnZpY2VTaW1wbGVDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9IZWxsb0xvY2FsU2VydmljZVNpbXBsZUNsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvSGVsbG9Mb2NhbFNlcnZpY2VTaW1wbGVDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9IZWxsb1NlcnZpY2VTaW1wbGVDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9IZWxsb1NlcnZpY2VTaW1wbGVDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9IZWxsb1NlcnZpY2VTaW1wbGVDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0hlbGxvU2VydmljZVNpbXBsZUNsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0hlbGxvU2VydmljZVNpbXBsZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0hlbGxvU2VydmljZVNpbXBsZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0hlbGxvU2VydmljZVNpbXBsZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvSGVsbG9TZXJ2aWNlU2ltcGxlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvUHJpbWl0aXZlc0xvY2FsU2VydmljZUNsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1ByaW1pdGl2ZXNMb2NhbFNlcnZpY2VDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9QcmltaXRpdmVzTG9jYWxTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9QcmltaXRpdmVzTG9jYWxTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvUHJpbWl0aXZlc1NlcnZpY2VDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9QcmltaXRpdmVzU2VydmljZUNsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1ByaW1pdGl2ZXNTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9QcmltaXRpdmVzU2VydmljZUNsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1ByaW1pdGl2ZXNTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvUHJpbWl0aXZlc1NlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9QcmltaXRpdmVzU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvUHJpbWl0aXZlc1NlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9TdGFuZGFyZFR5cGVzTG9jYWxTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvU3RhbmRhcmRUeXBlc0xvY2FsU2VydmljZUNsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNMb2NhbFNlcnZpY2VDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNMb2NhbFNlcnZpY2VDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9TdGFuZGFyZFR5cGVzU2VydmljZUNsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvU3RhbmRhcmRUeXBlc1NlcnZpY2VDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvU3RhbmRhcmRUeXBlc1NlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9TdGFuZGFyZFR5cGVzU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9TdGFuZGFyZFR5cGVzU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNUcmFuc2Zvcm1lci5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvU3RhbmRhcmRUeXBlc1RyYW5zZm9ybWVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9TdGFuZGFyZFR5cGVzVHJhbnNmb3JtZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvU3RhbmRhcmRUeXBlc1RyYW5zZm9ybWVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9yZXNvdXJjZXMvYXNlcnZpY2Uud3NkbCBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL3Jlc291cmNlcy9hc2VydmljZS53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL2FzZXJ2aWNlLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL3Jlc291cmNlcy9hc2VydmljZS53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL2RvY2xpdGJhcmV3c2RsLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL3Jlc291cmNlcy9kb2NsaXRiYXJld3NkbC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9yZXNvdXJjZXMvZG9jbGl0YmFyZXdzZGwuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9yZXNvdXJjZXMvZG9jbGl0YmFyZXdzZGwuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL2dlbmVyaWNzLXNlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL2dlbmVyaWNzLXNlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL2dlbmVyaWNzLXNlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9yZXNvdXJjZXMvZ2VuZXJpY3Mtc2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG9zZXJ2aWNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3NlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvc2VydmljZS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3NlcnZpY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL3ByaW1pdGl2ZXNzZXJ2aWNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy9tYWluL3Jlc291cmNlcy9wcmltaXRpdmVzc2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9yZXNvdXJjZXMvcHJpbWl0aXZlc3NlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9yZXNvdXJjZXMvcHJpbWl0aXZlc3NlcnZpY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL3N0YW5kYXJkLXR5cGVzLXNlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL3N0YW5kYXJkLXR5cGVzLXNlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL21haW4vcmVzb3VyY2VzL3N0YW5kYXJkLXR5cGVzLXNlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvbWFpbi9yZXNvdXJjZXMvc3RhbmRhcmQtdHlwZXMtc2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvRGF0YWJpbmRpbmdUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0RhdGFiaW5kaW5nVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9EYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9EYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvRG9jTGl0QmFyZVdzZGxUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0RvY0xpdEJhcmVXc2RsVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9Eb2NMaXRCYXJlV3NkbFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9Eb2NMaXRCYXJlV3NkbFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvR2VuZXJpY3NEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvR2VuZXJpY3NEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvR2VuZXJpY3NEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9HZW5lcmljc0RhdGFiaW5kaW5nVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9QcmltaXRpdmVzRGF0YWJpbmRpbmdUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1ByaW1pdGl2ZXNEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc0RhdGFiaW5kaW5nVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1ByaW1pdGl2ZXNEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLWJvdHRvbS11cC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvU3RhbmRhcmRUeXBlc0RhdGFiaW5kaW5nVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9TdGFuZGFyZFR5cGVzRGF0YWJpbmRpbmdUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi1ib3R0b20tdXAvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1N0YW5kYXJkVHlwZXNEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItYm90dG9tLXVwL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9TdGFuZGFyZFR5cGVzRGF0YWJpbmRpbmdUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9IZWxsb1NlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0hlbGxvU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvSGVsbG9TZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0hlbGxvU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvSGVsbG9TZXJ2aWNlQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9IZWxsb1NlcnZpY2VDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL0hlbGxvU2VydmljZUNsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9IZWxsb1NlcnZpY2VDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1ByaW1pdGl2ZXNTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9QcmltaXRpdmVzU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc1NlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1ByaW1pdGl2ZXNTZXJ2aWNlQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9QcmltaXRpdmVzU2VydmljZUNsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc1NlcnZpY2VDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvUHJpbWl0aXZlc1NlcnZpY2VDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1N0YW5kYXJkVHlwZXNTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9TdGFuZGFyZFR5cGVzU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvU3RhbmRhcmRUeXBlc1NlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvU3RhbmRhcmRUeXBlc1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL1N0YW5kYXJkVHlwZXNTZXJ2aWNlQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9TdGFuZGFyZFR5cGVzU2VydmljZUNsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvU3RhbmRhcmRUeXBlc1NlcnZpY2VDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvU3RhbmRhcmRUeXBlc1NlcnZpY2VDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvSGVsbG9TZXJ2aWNlQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9IZWxsb1NlcnZpY2VDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0hlbGxvU2VydmljZUNsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9IZWxsb1NlcnZpY2VDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL0hlbGxvU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvSGVsbG9TZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9IZWxsb1NlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvSGVsbG9TZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9QcmltaXRpdmVzU2VydmljZUNsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvUHJpbWl0aXZlc1NlcnZpY2VDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1ByaW1pdGl2ZXNTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1ByaW1pdGl2ZXNTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9QcmltaXRpdmVzU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvUHJpbWl0aXZlc1NlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1ByaW1pdGl2ZXNTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1ByaW1pdGl2ZXNTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9TdGFuZGFyZFR5cGVzU2VydmljZUNsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvU3RhbmRhcmRUeXBlc1NlcnZpY2VDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNTZXJ2aWNlQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9TdGFuZGFyZFR5cGVzU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvU3RhbmRhcmRUeXBlc1NlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvaW1wbC9TdGFuZGFyZFR5cGVzVHJhbnNmb3JtZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL2ltcGwvU3RhbmRhcmRUeXBlc1RyYW5zZm9ybWVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNUcmFuc2Zvcm1lci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi9pbXBsL1N0YW5kYXJkVHlwZXNUcmFuc2Zvcm1lci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC93cmFwcGVkL2hlbGxvLXNlcnZpY2Uud3NkbCBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvd3JhcHBlZC9oZWxsby1zZXJ2aWNlLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL3dyYXBwZWQvaGVsbG8tc2VydmljZS53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL3dyYXBwZWQvaGVsbG8tc2VydmljZS53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC93cmFwcGVkL2hlbGxvc2VydmljZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL3dyYXBwZWQvaGVsbG9zZXJ2aWNlLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvd3JhcHBlZC9oZWxsb3NlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL3dyYXBwZWQvaGVsbG9zZXJ2aWNlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvd3JhcHBlZC9wcmltaXRpdmVzLXNlcnZpY2Uud3NkbCBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvd3JhcHBlZC9wcmltaXRpdmVzLXNlcnZpY2Uud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvd3JhcHBlZC9wcmltaXRpdmVzLXNlcnZpY2Uud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC93cmFwcGVkL3ByaW1pdGl2ZXMtc2VydmljZS53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC93cmFwcGVkL3ByaW1pdGl2ZXNzZXJ2aWNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvd3JhcHBlZC9wcmltaXRpdmVzc2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL3dyYXBwZWQvcHJpbWl0aXZlc3NlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL3dyYXBwZWQvcHJpbWl0aXZlc3NlcnZpY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC93cmFwcGVkL3N0YW5kYXJkLXR5cGVzLXNlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC93cmFwcGVkL3N0YW5kYXJkLXR5cGVzLXNlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC93cmFwcGVkL3N0YW5kYXJkLXR5cGVzLXNlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL3dyYXBwZWQvc3RhbmRhcmQtdHlwZXMtc2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy9tYWluL3Jlc291cmNlcy93c2RsL3dyYXBwZWQvc3RhbmRhcmQtdHlwZXMtc2VydmljZS53c2RsIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvbWFpbi9yZXNvdXJjZXMvd3NkbC93cmFwcGVkL3N0YW5kYXJkLXR5cGVzLXNlcnZpY2Uud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvd3JhcHBlZC9zdGFuZGFyZC10eXBlcy1zZXJ2aWNlLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL21haW4vcmVzb3VyY2VzL3dzZGwvd3JhcHBlZC9zdGFuZGFyZC10eXBlcy1zZXJ2aWNlLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi90b3Bkb3duL0RhdGFiaW5kaW5nVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL3RvcGRvd24vRGF0YWJpbmRpbmdUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvdG9wZG93bi9EYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL3RvcGRvd24vRGF0YWJpbmRpbmdUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvdG9wZG93bi9QcmltaXRpdmVzRGF0YWJpbmRpbmdUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvdG9wZG93bi9QcmltaXRpdmVzRGF0YWJpbmRpbmdUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvamF4Yi10b3AtZG93bi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGIvdG9wZG93bi9QcmltaXRpdmVzRGF0YWJpbmRpbmdUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi90b3Bkb3duL1ByaW1pdGl2ZXNEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi90b3Bkb3duL1N0YW5kYXJkVHlwZXNEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi90b3Bkb3duL1N0YW5kYXJkVHlwZXNEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiLXRvcC1kb3duL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9kYXRhYmluZGluZ3MvamF4Yi90b3Bkb3duL1N0YW5kYXJkVHlwZXNEYXRhYmluZGluZ1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGF0YWJpbmRpbmdzL2pheGItdG9wLWRvd24vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2RhdGFiaW5kaW5ncy9qYXhiL3RvcGRvd24vU3RhbmRhcmRUeXBlc0RhdGFiaW5kaW5nVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZGF0YWJpbmRpbmdzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2RhdGFiaW5kaW5ncy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kYXRhYmluZGluZ3MvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kYXRhYmluZGluZ3MvcG9tLnhtbApkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vYmluLWRpc3Ryby11bnppcC9idWlsZC54bWwgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9iaW4tZGlzdHJvLXVuemlwL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTZhMWVhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vYmluLWRpc3Ryby11bnppcC9idWlsZC54bWwKQEAgLTAsMCArMSwyNyBAQAorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3QgbmFtZT0iaXRlc3QtdW56aXAiIGRlZmF1bHQ9InVuemlwIj4gCisKKyAgICA8dGFyZ2V0IG5hbWU9InVuemlwIj4gCisgICAgICAgIDxkZWxldGUgZGlyPSIuLi8uLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS5kaXIiLz4KKyAgICAgICAgPHVuemlwIHNyYz0iLi4vLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0ke3R1c2NhbnkudmVyc2lvbn0uemlwIiAKKyAgICAgICAgICAgICAgIGRlc3Q9Ii4uLy4uLy4uLy4uL2Rpc3RyaWJ1dGlvbi9hbGwvdGFyZ2V0L2FwYWNoZS10dXNjYW55LXNjYS1hbGwtJHt0dXNjYW55LnZlcnNpb259LmRpciIvPgorICAgIDwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vYmluLWRpc3Ryby11bnppcC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vYmluLWRpc3Ryby11bnppcC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kaXN0cmlidXRpb24vYmluLWRpc3Ryby11bnppcC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9iaW4tZGlzdHJvLXVuemlwL3BvbS54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLWpzb25ycGMtY2FsY3VsYXRvci9idWlsZC54bWwgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy1qc29ucnBjLWNhbGN1bGF0b3IvYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MjIwODUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy1qc29ucnBjLWNhbGN1bGF0b3IvYnVpbGQueG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0IG5hbWU9Iml0ZXN0LXNhbXBsZXMiIGRlZmF1bHQ9InJ1biI+IA0KKwkNCisJPGVjaG8+JHtqYXZhLmhvbWV9PC9lY2hvPg0KKwk8IS0tIA0KKwkgICAgY29tcGlsZSBhbmQgcnVuIGVhY2ggc2FtcGxlIGFzIHRob3VnaCB0aGUgdXNlciB3ZXJlIHJ1bm5pbmcNCisJICAgIHNhbXBsZXMgZnJvbSB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbi4gSGVyZSB3ZSB1c2UgYW50IHRhcmdldHMNCisJICAgIGluIHRoZSBmaXJzdCBpbnN0YW5jZSBidXQgZm9yIHNvbWUgdGVzdHMgd2UgbWF5IHdhbnQgdG8gcnVuIA0KKwkgICAgamFycyBkaXJlY3RseSBvciBmaXJlIHVwIHdlYmFwcCBjb250YWluZXJzIGFuZCBkZXBsb3kgd2Fycy4gSW4gb3RoZXIgY2FzZXMNCisJICAgIHdlIG1heSBuZWVkIHRvIHJ1biB0d28gc2FtcGxlcyB0b2dldGhlciB0byBwcm92aWRlIHJlZmVyZW5jZSBhbmQgDQorCSAgICBzZXJ2aWNlIHNpZGVzIG9mIHRoZSBzYW1wbGUuDQorCS0tPg0KKw0KKyAgICA8cHJvcGVydHkgbmFtZT0iZGlzdHJvLnJvb3QiIHZhbHVlPSIuLi8uLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS5kaXIvdHVzY2FueS1zY2EtJHt0dXNjYW55LnZlcnNpb259IiAvPg0KKw0KKyAgICA8dGFyZ2V0IG5hbWU9InJ1biI+IA0KKyAgICAJDQorICAgICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCINCisgICAgCSAgICAgZGlyPSIke2Rpc3Ryby5yb290fS9zYW1wbGVzL2xlYXJuaW5nLW1vcmUvYmluZGluZy1qc29ucnBjL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uIi8+DQorICAgIAkNCisgICAgPC90YXJnZXQ+DQorDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLWpzb25ycGMtY2FsY3VsYXRvci9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWJpbmRpbmctanNvbnJwYy1jYWxjdWxhdG9yL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3ZmRiNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLWpzb25ycGMtY2FsY3VsYXRvci9wb20ueG1sCkBAIC0wLDAgKzEsODcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1kaXN0cmlidXRpb248L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWRpc3RyaWJ1dGlvbi1jb250cmlidXRpb24tYmluZGluZy1qc29ucnBjLWNhbGN1bGF0b3I8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBEaXN0cmlidXRpb24gQ29udHJpYnV0aW9uIGJpbmRpbmctanNvbnJwYyBDYWxjdWxhdG9yPC9uYW1lPg0KKw0KKyAgICA8cHJvZmlsZXM+DQorICAgICAgICA8cHJvZmlsZT4NCisgICAgICAgICAgICA8aWQ+ZGlzdHJpYnV0aW9uPC9pZD4NCisgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1iaW4tZGlzdHJvLXVuemlwPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPg0KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCisgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4NCisgICAgICAgIDwvcHJvZmlsZT4NCisgICAgPC9wcm9maWxlcz4NCisgICAgDQorICAgIDxidWlsZD4NCisgICAgICAgIDxwbHVnaW5zPg0KKyAgICAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYW50cnVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4zPC92ZXJzaW9uPg0KKw0KKyAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGdyb3VwSWQ+YW50PC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFudC10cmF4PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuNi41PC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgICAgICAgICAgPCEtLSB0aGlzIEpEayBkZXBlbmRlbmN5IGlzIGEgd29ya2Fyb3VuZCBmb3IgTWF2ZW4gYnVnIC0gaHR0cDovL2ppcmEuY29kZWhhdXMub3JnL2Jyb3dzZS9NTkctMTMyMyAgLS0+DQorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5zdW4uamRrPC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPnRvb2xzPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuNjwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8c2NvcGU+c3lzdGVtPC9zY29wZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8c3lzdGVtUGF0aD4ke2phdmEuaG9tZX0vLi4vbGliL3Rvb2xzLmphcjwvc3lzdGVtUGF0aD4NCisgICAgICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+DQorDQorICAgICAgICAgICAgICAgIDxleGVjdXRpb25zPg0KKyAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+cnVuLXNhbXBsZXM8L2lkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwaGFzZT52ZXJpZnk8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YXNrcz4gDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0idHVzY2FueS52ZXJzaW9uIiB2YWx1ZT0iJHt2ZXJzaW9ufSIgLz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJqYXZhLmhvbWUiIHZhbHVlPSIke2phdmEuaG9tZX0iLz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbnQgYW50ZmlsZT0iLi9idWlsZC54bWwiIHRhcmdldD0icnVuIi8+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFza3M+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+DQorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICAgICAgICA8L3BsdWdpbj4NCisgICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3IvYnVpbGQueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3IvYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NTBmNzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy1ybWktY2FsY3VsYXRvci9idWlsZC54bWwKQEAgLTAsMCArMSwzOSBAQAorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3QgbmFtZT0iaXRlc3Qtc2FtcGxlcyIgZGVmYXVsdD0icnVuIj4gCisJCisJPCEtLSAKKwkgICAgY29tcGlsZSBhbmQgcnVuIGVhY2ggc2FtcGxlIGFzIHRob3VnaCB0aGUgdXNlciB3ZXJlIHJ1bm5pbmcKKwkgICAgc2FtcGxlcyBmcm9tIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uLiBIZXJlIHdlIHVzZSBhbnQgdGFyZ2V0cworCSAgICBpbiB0aGUgZmlyc3QgaW5zdGFuY2UgYnV0IGZvciBzb21lIHRlc3RzIHdlIG1heSB3YW50IHRvIHJ1biAKKwkgICAgamFycyBkaXJlY3RseSBvciBmaXJlIHVwIHdlYmFwcCBjb250YWluZXJzIGFuZCBkZXBsb3kgd2Fycy4gSW4gb3RoZXIgY2FzZXMKKwkgICAgd2UgbWF5IG5lZWQgdG8gcnVuIHR3byBzYW1wbGVzIHRvZ2V0aGVyIHRvIHByb3ZpZGUgcmVmZXJlbmNlIGFuZCAKKwkgICAgc2VydmljZSBzaWRlcyBvZiB0aGUgc2FtcGxlLgorCS0tPgorCisgICAgPHByb3BlcnR5IG5hbWU9ImRpc3Ryby5yb290IiB2YWx1ZT0iLi4vLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0ke3R1c2NhbnkudmVyc2lvbn0uZGlyL3R1c2Nhbnktc2NhLSR7dHVzY2FueS52ZXJzaW9ufSIgLz4KKworICAgIDx0YXJnZXQgbmFtZT0icnVuIj4gCisgICAgICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIgorICAgICAgICAgICAgIGRpcj0iJHtkaXN0cm8ucm9vdH0vc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctcm1pL2NhbGN1bGF0b3ItcmVmZXJlbmNlLWNvbnRyaWJ1dGlvbiIvPgorICAgICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIKKyAgICAgICAgICAgICBkaXI9IiR7ZGlzdHJvLnJvb3R9L3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXJtaS9jYWxjdWxhdG9yLXNlcnZpY2UtY29udHJpYnV0aW9uIi8+CisgICAgPC90YXJnZXQ+CisKKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy1ybWktY2FsY3VsYXRvci9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3IvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXJtaS1jYWxjdWxhdG9yL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXJtaS1jYWxjdWxhdG9yL3BvbS54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yL2J1aWxkLnhtbCBiL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTEzY2JhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IvYnVpbGQueG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0IG5hbWU9Iml0ZXN0LXNhbXBsZXMiIGRlZmF1bHQ9InJ1biI+IAorCQorCTxlY2hvPiR7amF2YS5ob21lfTwvZWNobz4KKwk8IS0tIAorCSAgICBjb21waWxlIGFuZCBydW4gZWFjaCBzYW1wbGUgYXMgdGhvdWdoIHRoZSB1c2VyIHdlcmUgcnVubmluZworCSAgICBzYW1wbGVzIGZyb20gdGhlIGJpbmFyeSBkaXN0cmlidXRpb24uIEhlcmUgd2UgdXNlIGFudCB0YXJnZXRzCisJICAgIGluIHRoZSBmaXJzdCBpbnN0YW5jZSBidXQgZm9yIHNvbWUgdGVzdHMgd2UgbWF5IHdhbnQgdG8gcnVuIAorCSAgICBqYXJzIGRpcmVjdGx5IG9yIGZpcmUgdXAgd2ViYXBwIGNvbnRhaW5lcnMgYW5kIGRlcGxveSB3YXJzLiBJbiBvdGhlciBjYXNlcworCSAgICB3ZSBtYXkgbmVlZCB0byBydW4gdHdvIHNhbXBsZXMgdG9nZXRoZXIgdG8gcHJvdmlkZSByZWZlcmVuY2UgYW5kIAorCSAgICBzZXJ2aWNlIHNpZGVzIG9mIHRoZSBzYW1wbGUuCisJLS0+CisKKyAgICA8cHJvcGVydHkgbmFtZT0iZGlzdHJvLnJvb3QiIHZhbHVlPSIuLi8uLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS5kaXIvdHVzY2FueS1zY2EtJHt0dXNjYW55LnZlcnNpb259IiAvPgorCisgICAgPHRhcmdldCBuYW1lPSJydW4iPiAKKyAgICAJCisgICAgICAgIDxhbnQgYW50ZmlsZT0iYnVpbGQueG1sIgorICAgIAkgICAgIGRpcj0iJHtkaXN0cm8ucm9vdH0vc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uIi8+CisgICAgCQorICAgIDwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3IvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvci9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvci9wb20ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL2J1aWxkLnhtbCBiL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IvYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiOTViZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yL2J1aWxkLnhtbApAQCAtMCwwICsxLDQwIEBACis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdCBuYW1lPSJpdGVzdC1zYW1wbGVzIiBkZWZhdWx0PSJydW4iPiAKKwkKKwk8ZWNobz4ke2phdmEuaG9tZX08L2VjaG8+CisJPCEtLSAKKwkgICAgY29tcGlsZSBhbmQgcnVuIGVhY2ggc2FtcGxlIGFzIHRob3VnaCB0aGUgdXNlciB3ZXJlIHJ1bm5pbmcKKwkgICAgc2FtcGxlcyBmcm9tIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uLiBIZXJlIHdlIHVzZSBhbnQgdGFyZ2V0cworCSAgICBpbiB0aGUgZmlyc3QgaW5zdGFuY2UgYnV0IGZvciBzb21lIHRlc3RzIHdlIG1heSB3YW50IHRvIHJ1biAKKwkgICAgamFycyBkaXJlY3RseSBvciBmaXJlIHVwIHdlYmFwcCBjb250YWluZXJzIGFuZCBkZXBsb3kgd2Fycy4gSW4gb3RoZXIgY2FzZXMKKwkgICAgd2UgbWF5IG5lZWQgdG8gcnVuIHR3byBzYW1wbGVzIHRvZ2V0aGVyIHRvIHByb3ZpZGUgcmVmZXJlbmNlIGFuZCAKKwkgICAgc2VydmljZSBzaWRlcyBvZiB0aGUgc2FtcGxlLgorCS0tPgorCisgICAgPHByb3BlcnR5IG5hbWU9ImRpc3Ryby5yb290IiB2YWx1ZT0iLi4vLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0ke3R1c2NhbnkudmVyc2lvbn0uZGlyL3R1c2Nhbnktc2NhLSR7dHVzY2FueS52ZXJzaW9ufSIgLz4KKworICAgIDx0YXJnZXQgbmFtZT0icnVuIj4gCisgICAgCQorICAgICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIKKyAgICAgICAgICAgICBkaXI9IiR7ZGlzdHJvLnJvb3R9L3NhbXBsZXMvbGVhcm5pbmctbW9yZS9iaW5kaW5nLXdzL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uIi8+CisKKyAgICA8L3RhcmdldD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3IvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWJpbmRpbmctd3MtY2FsY3VsYXRvci9wb20ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL2J1aWxkLnhtbCBiL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2NvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3IvYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3MDYxOWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL2J1aWxkLnhtbApAQCAtMCwwICsxLDQwIEBACis8IS0tCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdCBuYW1lPSJpdGVzdC1zYW1wbGVzIiBkZWZhdWx0PSJydW4iPiAKKwkKKwk8ZWNobz4ke2phdmEuaG9tZX08L2VjaG8+CisJPCEtLSAKKwkgICAgY29tcGlsZSBhbmQgcnVuIGVhY2ggc2FtcGxlIGFzIHRob3VnaCB0aGUgdXNlciB3ZXJlIHJ1bm5pbmcKKwkgICAgc2FtcGxlcyBmcm9tIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uLiBIZXJlIHdlIHVzZSBhbnQgdGFyZ2V0cworCSAgICBpbiB0aGUgZmlyc3QgaW5zdGFuY2UgYnV0IGZvciBzb21lIHRlc3RzIHdlIG1heSB3YW50IHRvIHJ1biAKKwkgICAgamFycyBkaXJlY3RseSBvciBmaXJlIHVwIHdlYmFwcCBjb250YWluZXJzIGFuZCBkZXBsb3kgd2Fycy4gSW4gb3RoZXIgY2FzZXMKKwkgICAgd2UgbWF5IG5lZWQgdG8gcnVuIHR3byBzYW1wbGVzIHRvZ2V0aGVyIHRvIHByb3ZpZGUgcmVmZXJlbmNlIGFuZCAKKwkgICAgc2VydmljZSBzaWRlcyBvZiB0aGUgc2FtcGxlLgorCS0tPgorCisgICAgPHByb3BlcnR5IG5hbWU9ImRpc3Ryby5yb290IiB2YWx1ZT0iLi4vLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0ke3R1c2NhbnkudmVyc2lvbn0uZGlyL3R1c2Nhbnktc2NhLSR7dHVzY2FueS52ZXJzaW9ufSIgLz4KKworICAgIDx0YXJnZXQgbmFtZT0icnVuIj4gCisgICAgCQorICAgICAgICA8YW50IGFudGZpbGU9ImJ1aWxkLnhtbCIKKyAgICAJICAgICBkaXI9IiR7ZGlzdHJvLnJvb3R9L3NhbXBsZXMvbGVhcm5pbmctbW9yZS9pbXBsZW1lbnRhdGlvbi1qYXZhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uIi8+CisgICAgCQorICAgIDwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kaXN0cmlidXRpb24vY29udHJpYnV0aW9uLWltcGxlbWVudGF0aW9uLWphdmEtY2FsY3VsYXRvci9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yL3BvbS54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2xhdW5jaGVyLWVtYmVkZGVkLWpzZS9idWlsZC54bWwgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9sYXVuY2hlci1lbWJlZGRlZC1qc2UvYnVpbGQueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzM1M2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9sYXVuY2hlci1lbWJlZGRlZC1qc2UvYnVpbGQueG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0IG5hbWU9Iml0ZXN0LXNhbXBsZXMiIGRlZmF1bHQ9InJ1biI+IAorCQorCTxlY2hvPiR7amF2YS5ob21lfTwvZWNobz4KKwk8IS0tIAorCSAgICBjb21waWxlIGFuZCBydW4gZWFjaCBzYW1wbGUgYXMgdGhvdWdoIHRoZSB1c2VyIHdlcmUgcnVubmluZworCSAgICBzYW1wbGVzIGZyb20gdGhlIGJpbmFyeSBkaXN0cmlidXRpb24uIEhlcmUgd2UgdXNlIGFudCB0YXJnZXRzCisJICAgIGluIHRoZSBmaXJzdCBpbnN0YW5jZSBidXQgZm9yIHNvbWUgdGVzdHMgd2UgbWF5IHdhbnQgdG8gcnVuIAorCSAgICBqYXJzIGRpcmVjdGx5IG9yIGZpcmUgdXAgd2ViYXBwIGNvbnRhaW5lcnMgYW5kIGRlcGxveSB3YXJzLiBJbiBvdGhlciBjYXNlcworCSAgICB3ZSBtYXkgbmVlZCB0byBydW4gdHdvIHNhbXBsZXMgdG9nZXRoZXIgdG8gcHJvdmlkZSByZWZlcmVuY2UgYW5kIAorCSAgICBzZXJ2aWNlIHNpZGVzIG9mIHRoZSBzYW1wbGUuCisJLS0+CisKKyAgICA8cHJvcGVydHkgbmFtZT0iZGlzdHJvLnJvb3QiIHZhbHVlPSIuLi8uLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS5kaXIvdHVzY2FueS1zY2EtJHt0dXNjYW55LnZlcnNpb259IiAvPgorCisgICAgPHRhcmdldCBuYW1lPSJydW4iPiAKKyAgICAJCisgICAgICAgIDxhbnQgZGlyPSIke2Rpc3Ryby5yb290fS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2UiCisgICAgICAgICAgICAgdGFyZ2V0PSJzYW1wbGUtYmluZGluZy1zY2EtY2FsY3VsYXRvci1jb250cmlidXRpb24iPgorICAgICAgICA8L2FudD4KKworICAgICAgICA8YW50IGRpcj0iJHtkaXN0cm8ucm9vdH0vc2FtcGxlcy9ydW5uaW5nLXR1c2NhbnkvZW1iZWRkZWQtanNlIgorICAgICAgICAgICAgIHRhcmdldD0ic2FtcGxlLWJpbmRpbmctd3MtY2FsY3VsYXRvci1jb250cmlidXRpb24iPgorICAgICAgICA8L2FudD4KKyAgICAgICAgICAgICAJCisgICAgICAgIDxhbnQgZGlyPSIke2Rpc3Ryby5yb290fS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2UiCisgICAgICAgICAgICAgdGFyZ2V0PSJzYW1wbGUtYmluZGluZy1ybWktY2FsY3VsYXRvci1jb250cmlidXRpb24iPgorICAgICAgICA8L2FudD4KKyAgICAgICAgICAgICAJCisgICAgICAgIDxhbnQgZGlyPSIke2Rpc3Ryby5yb290fS9zYW1wbGVzL3J1bm5pbmctdHVzY2FueS9lbWJlZGRlZC1qc2UiCisgICAgICAgICAgICAgdGFyZ2V0PSJzYW1wbGUtaW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yLWNvbnRyaWJ1dGlvbiI+CisgICAgICAgIDwvYW50PgorICAgIAkKKyAgICAgICAgPGFudCBkaXI9IiR7ZGlzdHJvLnJvb3R9L3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLWpzZSIKKyAgICAgICAgICAgICB0YXJnZXQ9InNhbXBsZS1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3ItYXN5bmMtY29udHJpYnV0aW9uIj4KKyAgICAgICAgPC9hbnQ+ICAgIAkgIAkKKworICAgIDwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vbGF1bmNoZXItZW1iZWRkZWQtanNlL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9sYXVuY2hlci1lbWJlZGRlZC1qc2UvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZGlzdHJpYnV0aW9uL2xhdW5jaGVyLWVtYmVkZGVkLWpzZS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9sYXVuY2hlci1lbWJlZGRlZC1qc2UvcG9tLnhtbApkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9idWlsZC54bWwgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL2J1aWxkLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDE1YjEzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9idWlsZC54bWwKQEAgLTAsMCArMSw0NSBAQAorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3QgbmFtZT0iaXRlc3Qtc2FtcGxlcyIgZGVmYXVsdD0icnVuIj4gCisJCisJPGVjaG8+JHtqYXZhLmhvbWV9PC9lY2hvPgorCTwhLS0gCisJICAgIGNvbXBpbGUgYW5kIHJ1biBlYWNoIHNhbXBsZSBhcyB0aG91Z2ggdGhlIHVzZXIgd2VyZSBydW5uaW5nCisJICAgIHNhbXBsZXMgZnJvbSB0aGUgYmluYXJ5IGRpc3RyaWJ1dGlvbi4gSGVyZSB3ZSB1c2UgYW50IHRhcmdldHMKKwkgICAgaW4gdGhlIGZpcnN0IGluc3RhbmNlIGJ1dCBmb3Igc29tZSB0ZXN0cyB3ZSBtYXkgd2FudCB0byBydW4gCisJICAgIGphcnMgZGlyZWN0bHkgb3IgZmlyZSB1cCB3ZWJhcHAgY29udGFpbmVycyBhbmQgZGVwbG95IHdhcnMuIEluIG90aGVyIGNhc2VzCisJICAgIHdlIG1heSBuZWVkIHRvIHJ1biB0d28gc2FtcGxlcyB0b2dldGhlciB0byBwcm92aWRlIHJlZmVyZW5jZSBhbmQgCisJICAgIHNlcnZpY2Ugc2lkZXMgb2YgdGhlIHNhbXBsZS4KKwktLT4KKworICAgIDxwcm9wZXJ0eSBuYW1lPSJkaXN0cm8ucm9vdCIgdmFsdWU9Ii4uLy4uLy4uLy4uL2Rpc3RyaWJ1dGlvbi9hbGwvdGFyZ2V0L2FwYWNoZS10dXNjYW55LXNjYS1hbGwtJHt0dXNjYW55LnZlcnNpb259LmRpci90dXNjYW55LXNjYS0ke3R1c2NhbnkudmVyc2lvbn0iIC8+CisKKyAgICA8dGFyZ2V0IG5hbWU9InJ1biI+IAorICAgIAkKKzwhLS0gU2VlbXMgdG8gYmUgaGFuZ2luZyBpbiB0aGUgY29uc29sZSBhdCB0aGUgZW5kIG9mIHRoZSBPU0dpIHJ1bgorICAgICBjb25maWd1cmUgaXQgdG8gcnVuIG5vIHRlc3RzIGZvciBub3cKKyAgICAgICAgPGFudCBkaXI9IiR7ZGlzdHJvLnJvb3R9L3NhbXBsZXMvbGF1bmNoZXItZW1iZWRkZWQtb3NnaSIKKyAgICAgICAgICAgICB0YXJnZXQ9InJ1bi1jb250cmlidXRpb24tYmluZGluZy1zY2EtY2FsY3VsYXRvciIvPgorLS0+CisKKyAgICAgICAgPGFudCBkaXI9IiR7ZGlzdHJvLnJvb3R9L3NhbXBsZXMvcnVubmluZy10dXNjYW55L2VtYmVkZGVkLW9zZ2kiLz4KKworICAgIDwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kaXN0cmlidXRpb24vbGF1bmNoZXItZW1iZWRkZWQtb3NnaS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9sYXVuY2hlci1lbWJlZGRlZC1vc2dpL3BvbS54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2xlZ2FsLWNoZWNrcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vbGVnYWwtY2hlY2tzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzZWZhOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2xlZ2FsLWNoZWNrcy9wb20ueG1sCkBAIC0wLDAgKzEsNzMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3QtZGlzdHJpYnV0aW9uPC9hcnRpZmFjdElkPgorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPgorICAgIDwvcGFyZW50PgorICAgIDxhcnRpZmFjdElkPml0ZXN0LWRpc3RyaWJ1dGlvbi1sZWdhbC1jaGVja3M8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IERpc3RyaWJ1dGlvbiBMZWdhbCBDaGVja3M8L25hbWU+CisKKyAgICA8cHJvZmlsZXM+CisgICAgICAgIDxwcm9maWxlPgorICAgICAgICAgICAgPGlkPmRpc3RyaWJ1dGlvbjwvaWQ+CisgICAgICAgICAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1iaW4tZGlzdHJvLXVuemlwPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+CisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICAKKyAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgorICAgICAgICA8L3Byb2ZpbGU+CisgICAgPC9wcm9maWxlcz4KKworICAgIDxidWlsZD4KKyAgICAgICAgICAgICAgICAgPHBsdWdpbnM+CisgICAgICAgICAgICAgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnJhdDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmFwYWNoZS1yYXQtcGx1Z2luPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MC42PC92ZXJzaW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+Y2hlY2s8L2dvYWw+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+CisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiYXNlZGlyPi4uLy4uLy4uLy4uL2Rpc3RyaWJ1dGlvbi9hbGwvdGFyZ2V0L2FwYWNoZS10dXNjYW55LXNjYS1hbGwtMi4wLUJldGExLmRpcjwvYmFzZWRpcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlU3ViUHJvamVjdHM+ZmFsc2U8L2V4Y2x1ZGVTdWJQcm9qZWN0cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlcz4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEvQ0hBTkdFUzwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPioqL01BTklGRVNULk1GPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovREVQRU5ERU5DSUVTPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovdGFyZ2V0LyoqLyoubG9nPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+KiovY29uZmlnLmluaTwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS9mZWF0dXJlcy9jb25maWd1cmF0aW9uL2NvbmZpZy5pbmk8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2xlZ2FsLWNoZWNrcy9zcmMvdGVzdC9qYXZhL2l0ZXN0L0phcnNJbkxJQ0VOU0VUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vbGVnYWwtY2hlY2tzL3NyYy90ZXN0L2phdmEvaXRlc3QvSmFyc0luTElDRU5TRVRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVlNjdmZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL2xlZ2FsLWNoZWNrcy9zcmMvdGVzdC9qYXZhL2l0ZXN0L0phcnNJbkxJQ0VOU0VUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMTYyIEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIGl0ZXN0OworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU3RyaW5nVG9rZW5pemVyOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogQ2hlY2tzIHRoYXQgYWxsIGphciBmaWxlcyBpbmNsdWRlZCBpbiB0aGUgZGlzdHJpYnV0aW9uIGFyZSBtZW50aW9uZWQgaW4gdGhlIExJQ0VOU0UgZmlsZQorICogYW5kIHRoYXQgYWxsIGphcnMgbWVudGlvbmVkIGluIHRoZSBMSUNFTlNFIGFyZSBpbiB0aGUgZGlzdHJpYnV0aW9uLgorICovCitwdWJsaWMgY2xhc3MgSmFyc0luTElDRU5TRVRlc3RDYXNlIHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEphcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgRmlsZSBkaXN0cm9Sb290ID0gZ2V0VW56aXBlZERpc3Ryb1Jvb3QoKTsKKworICAgICAgICBGaWxlIGxpY2Vuc2VGaWxlID0gbmV3IEZpbGUoZGlzdHJvUm9vdCwgIkxJQ0VOU0UiKTsKKyAgICAgICAgaWYgKCFsaWNlbnNlRmlsZS5leGlzdHMoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiY2FuJ3QgZmluZCBMSUNFTlNFIGZpbGUgYXQ6ICIgKyBsaWNlbnNlRmlsZS5nZXRBYnNvbHV0ZUZpbGUoKS50b1N0cmluZygpKTsKKyAgICAgICAgfQorCisgICAgICAgIEZpbGUgbGliRGlyZWN0b3J5ID0gbmV3IEZpbGUoZGlzdHJvUm9vdCwgIm1vZHVsZXMiKTsKKyAgICAgICAgaWYgKCFsaWJEaXJlY3RvcnkuZXhpc3RzKCkpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImNhbid0IGZpbmQgbW9kdWxlcyBmb2xkZXIgYXQ6ICIgKyBsaWJEaXJlY3RvcnkuZ2V0QWJzb2x1dGVGaWxlKCkudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKworICAgICAgICBMaXN0PFN0cmluZz4gamFycyA9IGdldEphcnNJbkRpc3RybyhsaWJEaXJlY3RvcnkpOworCisgICAgICAgIExpc3Q8U3RyaW5nPiBiYWQyID0gZ2V0TElDRU5TRUphcnNOb3RJbkRpc3RybyhsaWNlbnNlRmlsZSwgamFycyk7CisgICAgICAgIGlmIChiYWQyLnNpemUoKSA+IDApIHsKKyAgICAgICAgICAgIFN5c3RlbS5lcnIucHJpbnRsbigiSmFycyBpbiBMSUNFTlNFIGJ1dCBub3QgaW4gRGlzdHJpYnV0aW9uOiAiICsgYmFkMik7CisgICAgICAgIH0KKworICAgICAgICBMaXN0PFN0cmluZz4gYmFkMSA9IGdldEphcnNOb3RJbkxJQ0VOU0UoamFycywgbGljZW5zZUZpbGUpOworICAgICAgICBpZiAoYmFkMS5zaXplKCkgPiAwKSB7CisgICAgICAgICAgICBTeXN0ZW0uZXJyLnByaW50bG4oIkphcnMgaW4gZGlzdHJpYnV0aW9uIGJ1dCBub3QgaW4gTElDRU5TRTogIiArIGJhZDEpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoYmFkMS5zaXplKCkgPiAwIHx8IGJhZDIuc2l6ZSgpID4gMCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTElDRU5TRSBwcm9ibGVtcywgY2hlY2sgbG9nIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBnZXRMSUNFTlNFSmFyc05vdEluRGlzdHJvKEZpbGUgbGljZW5zZUZpbGUsIExpc3Q8U3RyaW5nPiBqYXJzKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBMaXN0PFN0cmluZz4gYmFkSmFycyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIobGljZW5zZUZpbGUpKTsKKyAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOworICAgICAgICB3aGlsZSAoKGxpbmUgPSByZWFkZXIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgbGluZSA9IGxpbmUudHJpbSgpOworICAgICAgICAgICAgaWYgKGxpbmUuY29udGFpbnMoIi5qYXIiKSkgeworICAgICAgICAgICAgICAgIFN0cmluZ1Rva2VuaXplciBzdCA9IG5ldyBTdHJpbmdUb2tlbml6ZXIobGluZSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKHN0Lmhhc01vcmVUb2tlbnMoKSkgeworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgcyA9IHN0Lm5leHRUb2tlbigpOworICAgICAgICAgICAgICAgICAgICBpZiAocy5jb250YWlucygiLmphciIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5zdGFydHNXaXRoKCIoIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzID0gcy5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocy5lbmRzV2l0aCgiLCIpIHx8IHMuZW5kc1dpdGgoIjoiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZygwLCBzLmxlbmd0aCgpLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMuZW5kc1dpdGgoIikiKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBzLnN1YnN0cmluZygwLCBzLmxlbmd0aCgpLTEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFqYXJzLmNvbnRhaW5zKHMpICYmICFzLnN0YXJ0c1dpdGgoInR1c2NhbnktIikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRKYXJzLmFkZChzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYmFkSmFyczsKKyAgICB9CisKKyAgICBwcml2YXRlIExpc3Q8U3RyaW5nPiBnZXRKYXJzTm90SW5MSUNFTlNFKExpc3Q8U3RyaW5nPiBqYXJzLCBGaWxlIGxpY2Vuc2VGaWxlKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBMaXN0PFN0cmluZz4gYmFkSmFycyA9IG5ldyBBcnJheUxpc3Q8U3RyaW5nPigpOworICAgICAgICBTdHJpbmcgbGljZW5zZVRleHQgPSByZWFkTElDRU5TRShsaWNlbnNlRmlsZSk7CisgICAgICAgIGZvciAoU3RyaW5nIGphciA6IGphcnMpIHsKKyAgICAgICAgICAgIGlmICghbGljZW5zZVRleHQuY29udGFpbnMoamFyKSkgeworICAgICAgICAgICAgICAgIGlmIChqYXIuc3RhcnRzV2l0aCgidHVzY2FueS0iKSB8fCBqYXIuc3RhcnRzV2l0aCgic2FtcGxlLSIpIHx8IGphci5zdGFydHNXaXRoKCJ0ZXN0LSIpIHx8IGphci5zdGFydHNXaXRoKCJpdGVzdC0iKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgdHVzY2FueSBqYXJzIGFzIHRoZXkncmUgbm90IG1lbnRpb25lZCBpbiB0aGUgTElDRU5TRSBmaWxlCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmFkSmFycy5hZGQoamFyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGJhZEphcnM7CisgICAgfQorCisgICAgcHJpdmF0ZSBMaXN0PFN0cmluZz4gZ2V0SmFyc0luRGlzdHJvKEZpbGUgZGlyZWN0b3J5KSB7CisgICAgICAgIExpc3Q8U3RyaW5nPiBqYXJzID0gbmV3IEFycmF5TGlzdDxTdHJpbmc+KCk7CisgICAgICAgIGZvciAoU3RyaW5nIGZuIDogZGlyZWN0b3J5Lmxpc3QoKSl7CisgICAgICAgICAgICBpZiAoZm4uZW5kc1dpdGgoIi5qYXIiKSkgeworICAgICAgICAgICAgICAgIGphcnMuYWRkKGZuKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgRmlsZSBmID0gbmV3IEZpbGUoZGlyZWN0b3J5LCBmbik7CisgICAgICAgICAgICAgICAgaWYgKGYuaXNEaXJlY3RvcnkoKSkgeworICAgICAgICAgICAgICAgICAgICBqYXJzLmFkZEFsbChnZXRKYXJzSW5EaXN0cm8oZikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gamFyczsKKyAgICB9CisKKyAgICBwcml2YXRlIEZpbGUgZ2V0VW56aXBlZERpc3Ryb1Jvb3QoKSB7CisgICAgICAgIEZpbGUgZGlzdHJvVGFyZ2V0ID0gbmV3IEZpbGUoIi4uLy4uLy4uLy4uL2Rpc3RyaWJ1dGlvbi9hbGwvdGFyZ2V0Iik7CisgICAgICAgIEZpbGUgcm9vdCA9IG51bGw7CisgICAgICAgIGZvciAoU3RyaW5nIGYgOiBkaXN0cm9UYXJnZXQubGlzdCgpKSB7CisgICAgICAgICAgICBpZiAoZi5lbmRzV2l0aCgiLmRpciIpKSB7CisgICAgICAgICAgICAgICAgcm9vdCA9ICBuZXcgRmlsZShkaXN0cm9UYXJnZXQsIGYpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChyb290ID09IG51bGwpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImNhbid0IGZpbmQgZGlzdHJvIHJvb3QiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocm9vdC5saXN0KCkubGVuZ3RoICE9IDEpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oImV4cGVjdGluZyBvbmUgZGlyZWN0b3J5IGluIGRpc3RybyByb290Iik7CisgICAgICAgIH0KKyAgICAgICAgcm9vdCA9IG5ldyBGaWxlKHJvb3QsIHJvb3QubGlzdCgpWzBdKTsKKyAgICAgICAgcmV0dXJuIHJvb3Q7CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHJlYWRMSUNFTlNFKEZpbGUgbGljZW5zZUZpbGUpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKKyAgICAgICAgU3RyaW5nQnVmZmVyIGZpbGVEYXRhID0gbmV3IFN0cmluZ0J1ZmZlcigpOworICAgICAgICBCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIobGljZW5zZUZpbGUpKTsKKyAgICAgICAgY2hhcltdIGJ1ZiA9IG5ldyBjaGFyWzEwMjRdOworICAgICAgICBpbnQgbnVtUmVhZCA9IDA7CisgICAgICAgIHdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKGJ1ZikpICE9IC0xKSB7CisgICAgICAgICAgICBTdHJpbmcgcmVhZERhdGEgPSBTdHJpbmcudmFsdWVPZihidWYsIDAsIG51bVJlYWQpOworICAgICAgICAgICAgZmlsZURhdGEuYXBwZW5kKHJlYWREYXRhKTsKKyAgICAgICAgICAgIGJ1ZiA9IG5ldyBjaGFyWzEwMjRdOworICAgICAgICB9CisgICAgICAgIHJlYWRlci5jbG9zZSgpOworICAgICAgICByZXR1cm4gZmlsZURhdGEudG9TdHJpbmcoKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZGMyNWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9wb20ueG1sCkBAIC0wLDAgKzEsODcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8cGFja2FnaW5nPnBvbTwvcGFja2FnaW5nPgorICAgIDxhcnRpZmFjdElkPml0ZXN0LWRpc3RyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgRGlzdHJpYnV0aW9uPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1kaXN0cmlidXRpb24tYWxsPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHR5cGU+cG9tPC90eXBlPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8cHJvZmlsZXM+CisgICAgICA8cHJvZmlsZT4KKyAgICAgICAgICA8aWQ+ZGVmYXVsdDwvaWQ+CisgICAgICAgICAgPGFjdGl2YXRpb24+CisgICAgICAgICAgICAgIDxhY3RpdmVCeURlZmF1bHQ+dHJ1ZTwvYWN0aXZlQnlEZWZhdWx0PgorICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICA8bW9kdWxlcz4KKyAgICAgICAgICAgIDxtb2R1bGU+bGVnYWwtY2hlY2tzPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1iaW5kaW5nLXNjYS1jYWxjdWxhdG9yPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1iaW5kaW5nLXdzLWNhbGN1bGF0b3I8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3I8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uLWJpbmRpbmctanNvbnJwYy1jYWxjdWxhdG9yPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1pbXBsZW1lbnRhdGlvbi1qYXZhLWNhbGN1bGF0b3I8L21vZHVsZT4KKyAgICAgICAgICAgIDxtb2R1bGU+bGF1bmNoZXItZW1iZWRkZWQtanNlPC9tb2R1bGU+CisgICAgICAgICAgICA8bW9kdWxlPmxhdW5jaGVyLWVtYmVkZGVkLW9zZ2k8L21vZHVsZT4KKyAgICAgICAgICA8L21vZHVsZXM+CisgICAgICA8L3Byb2ZpbGU+CisKKyAgICAgIDxwcm9maWxlPgorICAgICAgICAgIDxpZD5kaXN0cmlidXRpb248L2lkPgorICAgICAgICAgIDxhY3RpdmF0aW9uPgorICAgICAgICAgICAgICA8cHJvcGVydHk+CisgICAgICAgICAgICAgICAgIDxuYW1lPmJ1aWxkWmlwczwvbmFtZT4KKyAgICAgICAgICAgICAgICAgPHZhbHVlPnRydWU8L3ZhbHVlPgorICAgICAgICAgICAgICA8L3Byb3BlcnR5PgorICAgICAgICAgIDwvYWN0aXZhdGlvbj4KKyAgICAgICAgICA8bW9kdWxlcz4KKyAgICAgICAgICAgICAgPG1vZHVsZT5zcmMtZGlzdHJvLXVuemlwPC9tb2R1bGU+CisgICAgICAgICAgICAgIDxtb2R1bGU+c3JjLWRpc3Ryby1yYXQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgPG1vZHVsZT5iaW4tZGlzdHJvLXVuemlwPC9tb2R1bGU+CisgICAgICAgICAgICAgIDxtb2R1bGU+bGVnYWwtY2hlY2tzPC9tb2R1bGU+CisgICAgICAgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uLWJpbmRpbmctc2NhLWNhbGN1bGF0b3I8L21vZHVsZT4KKyAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24tYmluZGluZy13cy1jYWxjdWxhdG9yPC9tb2R1bGU+CisgICAgICAgICAgICAgIDxtb2R1bGU+Y29udHJpYnV0aW9uLWJpbmRpbmctcm1pLWNhbGN1bGF0b3I8L21vZHVsZT4KKyAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24tYmluZGluZy1qc29ucnBjLWNhbGN1bGF0b3I8L21vZHVsZT4KKyAgICAgICAgICAgICAgPG1vZHVsZT5jb250cmlidXRpb24taW1wbGVtZW50YXRpb24tamF2YS1jYWxjdWxhdG9yPC9tb2R1bGU+CisgICAgICAgICAgICAgIDxtb2R1bGU+bGF1bmNoZXItZW1iZWRkZWQtanNlPC9tb2R1bGU+CisgICAgICAgICAgICAgIDxtb2R1bGU+bGF1bmNoZXItZW1iZWRkZWQtb3NnaTwvbW9kdWxlPgorICAgICAgICAgIDwvbW9kdWxlcz4KKyAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPgorCisgICAgPGJ1aWxkPgorCTxkZWZhdWx0R29hbD5pbnN0YWxsPC9kZWZhdWx0R29hbD4KKyAgICA8L2J1aWxkPgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9zcmMtZGlzdHJvLXJhdC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby1yYXQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTYxYjA2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby1yYXQvcG9tLnhtbApAQCAtMCwwICsxLDkwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICogCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICogCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LWRpc3RyaWJ1dGlvbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1kaXN0cmlidXRpb24tc3JjLWRzaXRyby1yYXQ8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IERpc3RyaWJ1dGlvbiBTcmMgRGlzdHJvIFJBVDwvbmFtZT4KKworICAgIDxwcm9maWxlcz4KKyAgICAgICAgPHByb2ZpbGU+CisgICAgICAgICAgICA8aWQ+ZGlzdHJpYnV0aW9uPC9pZD4KKyAgICAgICAgICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgICAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LXNyYy1kaXN0cm8tdW56aXA8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgIDx0eXBlPnBvbTwvdHlwZT4KKyAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIAorICAgICAgICAgICAgPC9kZXBlbmRlbmNpZXM+CisgICAgICAgIDwvcHJvZmlsZT4KKyAgICA8L3Byb2ZpbGVzPgorCisgICAgPGJ1aWxkPgorICAgICAgICAgICAgICAgICA8cGx1Z2lucz4KKyAgICAgICAgICAgICAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUucmF0PC9ncm91cElkPgorICAgICAgICAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+YXBhY2hlLXJhdC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgICAgICAgICAgICAgICA8dmVyc2lvbj4wLjY8L3ZlcnNpb24+CisgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5jaGVjazwvZ29hbD4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJhc2VkaXI+Li4vLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0yLjAtQmV0YTEtc3JjLmRpcjwvYmFzZWRpcj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlU3ViUHJvamVjdHM+ZmFsc2U8L2V4Y2x1ZGVTdWJQcm9qZWN0cz4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlcz4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL0NIQU5HRVM8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT4qKi8qLk1GPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+dHVzY2FueS1zY2EtMi4wLUJldGExLXNyYy90ZXN0aW5nL2NvbXBsaWFuY2UtdGVzdHMvYmluZGluZy13cy9zY2FfdmFyaWFibGVzLmR0ZDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2ltcGxlbWVudGF0aW9uL3BvbGljaWVzL0NhbGN1bGF0b3JKYXNzLmNvbmZpZzwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9lbmdpbmUvcmVwb3NpdG9yeS9tb2R1bGVzL21vZHVsZXMubGlzdDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9iaW5kaW5nLXdzLXJ1bnRpbWUtYXhpczIvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9lbmdpbmUvcmVwb3NpdG9yeS9zZXJ2aWNlcy9zZXJ2aWNlcy5saXN0PC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+dHVzY2FueS1zY2EtMi4wLUJldGExLXNyYy9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy10aWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NwcmluZy5oYW5kbGVyczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctdGllL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcuc2NoZW1hczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc3ByaW5nLmhhbmRsZXJzPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+dHVzY2FueS1zY2EtMi4wLUJldGExLXNyYy9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXNwcmluZy1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zcHJpbmcuc2NoZW1hczwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbWF2ZW4vYXJjaGV0eXBlcy9iaW5kaW5nL3NyYy90ZXN0L3Jlc291cmNlcy9wcm9qZWN0cy9iYXNpYy9nb2FsLnR4dDwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9pbXBsZW1lbnRhdGlvbi1weXRob24tcnVudGltZS9zcmMvbWFpbi9yZXNvdXJjZXMvZGphbmdvL19faW5pdF9fLnB5PC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+dHVzY2FueS1zY2EtMi4wLUJldGExLXNyYy9tb2R1bGVzL2ltcGxlbWVudGF0aW9uLXB5dGhvbi1ydW50aW1lL3NyYy9tYWluL3Jlc291cmNlcy9kamFuZ28vdXRpbHMvX19pbml0X18ucHk8L2V4Y2x1ZGU+CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gdGhlc2Ugb25lcyB3ZSBuZWVkIHRvIGltcGxlbWVudCBSQVQgbGljZW5zZSBwcm9jZXNzb3JzIHRvIGhhbmRsZSB0aGUgbm9uLUFMIGhlYWRlcnMsIGp1c3QgZXhjbHVkZSBmb3Igbm93IC0tPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+dHVzY2FueS1zY2EtMi4wLUJldGExLXNyYy9tb2R1bGVzL2Fzc2VtYmx5LXhzZC8qKi8qLio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL21vZHVsZXMvc2NhLWFwaS8qKi8qLio8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL21vZHVsZXMvaW1wbGVtZW50YXRpb24td2ViLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS50bGQ8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL21vZHVsZXMvYXNzZW1ibHkteG1sL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtcG9saWN5LTEuMS1pbnRlbnRzLWRlZmluaXRpb25zLWNkMDMueG1sPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+dHVzY2FueS1zY2EtMi4wLUJldGExLXNyYy9tb2R1bGVzL3NjYS1jbGllbnQtaW1wbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvY2xpZW50L2ltcGwvU0NBQ2xpZW50RmFjdG9yeUZpbmRlckltcGwuamF2YTwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPnR1c2Nhbnktc2NhLTIuMC1CZXRhMS1zcmMvbW9kdWxlcy9iaW5kaW5nLWNvbWV0LXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2pxdWVyeS5qc29uLTIuMi5taW4uanM8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL21vZHVsZXMvaW1wbGVtZW50YXRpb24tcHl0aG9uLXJ1bnRpbWUvc3JjL21haW4vcmVzb3VyY2VzL2RqYW5nby91dGlscy9zaW1wbGVqc29uLyo8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZXhjbHVkZT50dXNjYW55LXNjYS0yLjAtQmV0YTEtc3JjL3Rlc3RpbmcvY29tcGxpYW5jZS10ZXN0cy9iaW5kaW5nLWptcy9zcmMvdGVzdC9yZXNvdXJjZXMvdHVzY2FueS1vYXNpcy1zY2EtdGVzdHMtZXJyb3JzLnByb3BlcnRpZXM8L2V4Y2x1ZGU+CisgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2V4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgICAgICAgICA8L3BsdWdpbnM+CisgICAgPC9idWlsZD4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL3NyYy1kaXN0cm8tdW56aXAvYnVpbGQueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby11bnppcC9idWlsZC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGI5ZmU0YQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvZGlzdHJpYnV0aW9uL3NyYy1kaXN0cm8tdW56aXAvYnVpbGQueG1sCkBAIC0wLDAgKzEsMjcgQEAKKzwhLS0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIAorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqIAorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxwcm9qZWN0IG5hbWU9Iml0ZXN0LXVuemlwIiBkZWZhdWx0PSJ1bnppcCI+IAorCisgICAgPHRhcmdldCBuYW1lPSJ1bnppcCI+CisgICAgICAgIDxkZWxldGUgZGlyPSIuLi8uLi8uLi8uLi9kaXN0cmlidXRpb24vYWxsL3RhcmdldC9hcGFjaGUtdHVzY2FueS1zY2EtYWxsLSR7dHVzY2FueS52ZXJzaW9ufS1zcmMuZGlyIi8+CisgICAgICAgIDx1bnppcCBzcmM9Ii4uLy4uLy4uLy4uL2Rpc3RyaWJ1dGlvbi9hbGwvdGFyZ2V0L2FwYWNoZS10dXNjYW55LXNjYS1hbGwtJHt0dXNjYW55LnZlcnNpb259LXNyYy56aXAiIAorICAgICAgICAgICAgICAgZGVzdD0iLi4vLi4vLi4vLi4vZGlzdHJpYnV0aW9uL2FsbC90YXJnZXQvYXBhY2hlLXR1c2Nhbnktc2NhLWFsbC0ke3R1c2NhbnkudmVyc2lvbn0tc3JjLmRpciIvPgorICAgIDwvdGFyZ2V0PgorCis8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9pdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby11bnppcC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby11bnppcC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kaXN0cmlidXRpb24vc3JjLWRpc3Ryby11bnppcC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2Rpc3RyaWJ1dGlvbi9zcmMtZGlzdHJvLXVuemlwL3BvbS54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvZG9tYWlucy9kaXN0cmlidXRlZC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kb21haW5zL2Rpc3RyaWJ1dGVkL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZmYWFjMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvZG9tYWlucy9kaXN0cmlidXRlZC9wb20ueG1sCkBAIC0wLDAgKzEsNTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vLi4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+aXRlc3QtZG9tYWlucy1kaXN0cmlidXRlZDwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGl0ZXN0IGRvbWFpbiBkaXN0cmlidXRlZDwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWUtbm9kZXA8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+anVuaXQ8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+NC44LjE8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICA8L2J1aWxkPg0KKw0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9kb21haW5zL2Rpc3RyaWJ1dGVkL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kb21haW5zL2Rpc3RyaWJ1dGVkL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kb21haW5zL2Rpc3RyaWJ1dGVkL3NyYy90ZXN0L2phdmEvaXRlc3QvSGVsbG93b3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RvbWFpbnMvZGlzdHJpYnV0ZWQvc3JjL3Rlc3QvamF2YS9pdGVzdC9IZWxsb3dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RvbWFpbnMvZGlzdHJpYnV0ZWQvc3JjL3Rlc3QvamF2YS9pdGVzdC9TdGFuZGFsb25lVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZG9tYWlucy9kaXN0cmlidXRlZC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1N0YW5kYWxvbmVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kb21haW5zL2Rpc3RyaWJ1dGVkL3NyYy90ZXN0L2phdmEvaXRlc3QvU3RhbmRhbG9uZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZG9tYWlucy9kaXN0cmlidXRlZC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1N0YW5kYWxvbmVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9kb21haW5zL2hlbGxvd29ybGQvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvZG9tYWlucy9oZWxsb3dvcmxkL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RvbWFpbnMvaGVsbG93b3JsZC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RvbWFpbnMvaGVsbG93b3JsZC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9kb21haW5zL2hlbGxvd29ybGQvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9kb21haW5zL2hlbGxvd29ybGQvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9kb21haW5zL2hlbGxvd29ybGQvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RvbWFpbnMvaGVsbG93b3JsZC9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2RvbWFpbnMvaGVsbG93b3JsZC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2RvbWFpbnMvaGVsbG93b3JsZC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RvbWFpbnMvaGVsbG93b3JsZC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZG9tYWlucy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvZG9tYWlucy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvZG9tYWlucy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZG9tYWlucy9oZWxsb3dvcmxkL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kb21haW5zL2hlbGxvd29ybGQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9kb21haW5zL2ludGVyZmFjZXMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvZG9tYWlucy9pbnRlcmZhY2VzL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RvbWFpbnMvaW50ZXJmYWNlcy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RvbWFpbnMvaW50ZXJmYWNlcy9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9kb21haW5zL2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2RvbWFpbnMvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZG9tYWlucy9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2RvbWFpbnMvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZG9tYWlucy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kb21haW5zL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2RvbWFpbnMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9kb21haW5zL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2RvbWFpbnMvc3RhbmRhbG9uZS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9kb21haW5zL3N0YW5kYWxvbmUvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZG9tYWlucy9zdGFuZGFsb25lL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZG9tYWlucy9zdGFuZGFsb25lL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2RvbWFpbnMvc3RhbmRhbG9uZS9zcmMvdGVzdC9qYXZhL2l0ZXN0L1N0YW5kYWxvbmVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9kb21haW5zL3N0YW5kYWxvbmUvc3JjL3Rlc3QvamF2YS9pdGVzdC9TdGFuZGFsb25lVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZG9tYWlucy9zdGFuZGFsb25lL3NyYy90ZXN0L2phdmEvaXRlc3QvU3RhbmRhbG9uZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZG9tYWlucy9zdGFuZGFsb25lL3NyYy90ZXN0L2phdmEvaXRlc3QvU3RhbmRhbG9uZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2VuZHBvaW50cy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9lbmRwb2ludHMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZW5kcG9pbnRzL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZW5kcG9pbnRzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvdGVzdC9FbmRwb2ludHNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS90ZXN0L0VuZHBvaW50c1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL3Rlc3QvRW5kcG9pbnRzVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS90ZXN0L0VuZHBvaW50c1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL3Rlc3QvTmVzdGVkRW5kcG9pbnRzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvdGVzdC9OZXN0ZWRFbmRwb2ludHNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS90ZXN0L05lc3RlZEVuZHBvaW50c1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvdGVzdC9OZXN0ZWRFbmRwb2ludHNUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS90ZXN0L1V0aWxzLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL3Rlc3QvVXRpbHMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvdGVzdC9VdGlscy5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL3Rlc3QvVXRpbHMuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9lbmRwb2ludHMvc3JjL3Rlc3QvcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9lbmRwb2ludHMvc3JjL3Rlc3QvcmVzb3VyY2VzL25lc3RlZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2VuZHBvaW50cy9zcmMvdGVzdC9yZXNvdXJjZXMvbmVzdGVkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZW5kcG9pbnRzL3NyYy90ZXN0L3Jlc291cmNlcy9uZXN0ZWQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2VuZHBvaW50cy9zcmMvdGVzdC9yZXNvdXJjZXMvbmVzdGVkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvZXhjZXB0aW9ucy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2V4Y2VwdGlvbnMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9DaGVja2VkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9DaGVja2VkLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9DaGVja2VkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL0NoZWNrZWQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL0V4Y2VwdGlvbkhhbmRsZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL0V4Y2VwdGlvbkhhbmRsZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL0V4Y2VwdGlvbkhhbmRsZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvRXhjZXB0aW9uSGFuZGxlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvRXhjZXB0aW9uUmVtb3RlVGhyb3dlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvRXhjZXB0aW9uUmVtb3RlVGhyb3dlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvRXhjZXB0aW9uUmVtb3RlVGhyb3dlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9FeGNlcHRpb25SZW1vdGVUaHJvd2VyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9FeGNlcHRpb25UaHJvd2VyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9FeGNlcHRpb25UaHJvd2VyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9FeGNlcHRpb25UaHJvd2VyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL0V4Y2VwdGlvblRocm93ZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL1VuQ2hlY2tlZC5qYXZhIGIvdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvVW5DaGVja2VkLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9VbkNoZWNrZWQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvVW5DaGVja2VkLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9pbXBsL0V4Y2VwdGlvbkhhbmRsZXJJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9pbXBsL0V4Y2VwdGlvbkhhbmRsZXJJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9pbXBsL0V4Y2VwdGlvbkhhbmRsZXJJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL2ltcGwvRXhjZXB0aW9uSGFuZGxlckltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL2ltcGwvRXhjZXB0aW9uUmVtb3RlVGhyb3dlckltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL2ltcGwvRXhjZXB0aW9uUmVtb3RlVGhyb3dlckltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL2ltcGwvRXhjZXB0aW9uUmVtb3RlVGhyb3dlckltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvaW1wbC9FeGNlcHRpb25SZW1vdGVUaHJvd2VySW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvaW1wbC9FeGNlcHRpb25UaHJvd2VySW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvaW1wbC9FeGNlcHRpb25UaHJvd2VySW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvaW1wbC9FeGNlcHRpb25UaHJvd2VySW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9pbXBsL0V4Y2VwdGlvblRocm93ZXJJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9pbXBsL1JlbW90ZUV4Y2VwdGlvbkhhbmRsZXJJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9pbXBsL1JlbW90ZUV4Y2VwdGlvbkhhbmRsZXJJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9pbXBsL1JlbW90ZUV4Y2VwdGlvbkhhbmRsZXJJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL2ltcGwvUmVtb3RlRXhjZXB0aW9uSGFuZGxlckltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvZXhjZXB0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvRXhjZXB0aW9uVGVzdC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2V4Y2VwdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL0V4Y2VwdGlvblRlc3QuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9FeGNlcHRpb25UZXN0LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9FeGNlcHRpb25UZXN0LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvZXhjZXB0aW9ucy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9leGNlcHRpb25zL0V4Y2VwdGlvbnNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvRXhjZXB0aW9uc1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2V4Y2VwdGlvbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvZXhjZXB0aW9ucy9FeGNlcHRpb25zVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9leGNlcHRpb25zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L2V4Y2VwdGlvbnMvRXhjZXB0aW9uc1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OGJhZDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9wb20ueG1sCkBAIC0wLDAgKzEsNTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKgorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLgorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1pbXBsZW1lbnRhdGlvbi1zcHJpbmc8L2FydGlmYWN0SWQ+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IFNwcmluZyBJbXBsZW1lbnRhdGlvbjwvbmFtZT4KKworICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pbXBsZW1lbnRhdGlvbi1zcHJpbmctcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPgorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgICAgIAorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5tb3J0YmF5LmpldHR5PC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+amV0dHk8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj42LjEuMTk8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2JpZ2Jhbmsvc3RvY2txdW90ZS9TdG9ja1F1b3RlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9iaWdiYW5rL3N0b2NrcXVvdGUvU3RvY2tRdW90ZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvYmlnYmFuay9zdG9ja3F1b3RlL1N0b2NrUXVvdGVJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvYmlnYmFuay9zdG9ja3F1b3RlL1N0b2NrUXVvdGVJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2JpZ2Jhbmsvc3RvY2txdW90ZS9TdG9ja1F1b3RlU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9iaWdiYW5rL3N0b2NrcXVvdGUvU3RvY2tRdW90ZVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvYmlnYmFuay9zdG9ja3F1b3RlL1N0b2NrUXVvdGVTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvYmlnYmFuay9zdG9ja3F1b3RlL1N0b2NrUXVvdGVTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQWRkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0FkZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9BZGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvQ2FsY3VsYXRvclNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL0RpdmlkZVNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9EaXZpZGVTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvRGl2aWRlU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL011bHRpcGx5U2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9NdWx0aXBseVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvTXVsdGlwbHlTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3IvU3VidHJhY3RTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL1N1YnRyYWN0U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9TdWJ0cmFjdFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3Ivc2VjdXJpdHkvQ2FsY3VsYXRvckNhbGxiYWNrSGFuZGxlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3NlY3VyaXR5L0NhbGN1bGF0b3JDYWxsYmFja0hhbmRsZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9zZWN1cml0eS9DYWxjdWxhdG9yQ2FsbGJhY2tIYW5kbGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9zZWN1cml0eS9DYWxjdWxhdG9yQ2FsbGJhY2tIYW5kbGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3Ivc2VjdXJpdHkvSmFhc0xvZ2luTW9kdWxlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3Ivc2VjdXJpdHkvSmFhc0xvZ2luTW9kdWxlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3Ivc2VjdXJpdHkvSmFhc0xvZ2luTW9kdWxlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9zZWN1cml0eS9KYWFzTG9naW5Nb2R1bGUuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY2FsY3VsYXRvci9zZWN1cml0eS9Vc2VyUHJpbmNpcGFsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2NhbGN1bGF0b3Ivc2VjdXJpdHkvVXNlclByaW5jaXBhbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3NlY3VyaXR5L1VzZXJQcmluY2lwYWwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jYWxjdWxhdG9yL3NlY3VyaXR5L1VzZXJQcmluY2lwYWwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY29udGV4dC9hY2Nlc3MvU0NBQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY29udGV4dC9hY2Nlc3MvU0NBQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvY29udGV4dC9hY2Nlc3MvU0NBQXBwbGljYXRpb25Db250ZXh0UHJvdmlkZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9jb250ZXh0L2FjY2Vzcy9TQ0FBcHBsaWNhdGlvbkNvbnRleHRQcm92aWRlci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL2hlbGxvd29ybGQvSGVsbG9Xb3JsZEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkUHJveHkuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkUHJveHkuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvaGVsbG93b3JsZC9IZWxsb1dvcmxkUHJveHkuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9oZWxsb3dvcmxkL0hlbGxvV29ybGRQcm94eS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9tb2NrL1Rlc3RCZWFuLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL21vY2svVGVzdEJlYW4uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvbW9jay9UZXN0QmVhbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL21vY2svVGVzdEJlYW4uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvbW9jay9UZXN0QmVhbkltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvbW9jay9UZXN0QmVhbkltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvbW9jay9UZXN0QmVhbkltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9tb2NrL1Rlc3RCZWFuSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9tb2NrL1Rlc3RIZWxsb1dvcmxkQmVhbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9tb2NrL1Rlc3RIZWxsb1dvcmxkQmVhbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9tb2NrL1Rlc3RIZWxsb1dvcmxkQmVhbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL21vY2svVGVzdEhlbGxvV29ybGRCZWFuLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL21vY2svVGVzdFJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9tb2NrL1Rlc3RSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvbW9jay9UZXN0UmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvbW9jay9UZXN0UmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL21vY2svVGVzdFJlZmVyZW5jZUJlYW4uamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvbW9jay9UZXN0UmVmZXJlbmNlQmVhbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9tb2NrL1Rlc3RSZWZlcmVuY2VCZWFuLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvbW9jay9UZXN0UmVmZXJlbmNlQmVhbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9tb2NrL1Rlc3RTQ0FQcm9wZXJ0eUJlYW4uamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvbW9jay9UZXN0U0NBUHJvcGVydHlCZWFuLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL21vY2svVGVzdFNDQVByb3BlcnR5QmVhbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL21vY2svVGVzdFNDQVByb3BlcnR5QmVhbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vamF2YS9zcHJpbmcvYW5ub3RhdGlvbnMvQ2FsY3VsYXRvclNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL3NwcmluZy9hbm5vdGF0aW9ucy9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL2phdmEvc3ByaW5nL2Fubm90YXRpb25zL0NhbGN1bGF0b3JTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9qYXZhL3NwcmluZy9hbm5vdGF0aW9ucy9DYWxjdWxhdG9yU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L2FjY2Vzcy9DYWxjdWxhdG9yU2VydmljZS1jb250ZXh0LnhtbCBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L2FjY2Vzcy9DYWxjdWxhdG9yU2VydmljZS1jb250ZXh0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L2FjY2Vzcy9DYWxjdWxhdG9yU2VydmljZS1jb250ZXh0LnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvYWNjZXNzL0NhbGN1bGF0b3JTZXJ2aWNlLWNvbnRleHQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvYWNjZXNzL0NvbnRleHRBY2Nlc3MuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvYWNjZXNzL0NvbnRleHRBY2Nlc3MuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvYWNjZXNzL0NvbnRleHRBY2Nlc3MuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9hY2Nlc3MvQ29udGV4dEFjY2Vzcy5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9pbXBvcnRzL0NvbnRleHRJbXBvcnRzLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L2ltcG9ydHMvQ29udGV4dEltcG9ydHMuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvaW1wb3J0cy9Db250ZXh0SW1wb3J0cy5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L2ltcG9ydHMvQ29udGV4dEltcG9ydHMuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvaW1wb3J0cy9NRVRBLUlORi9zcHJpbmcvQ2FsY3VsYXRvclNlcnZpY2UtY29udGV4dC54bWwgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9pbXBvcnRzL01FVEEtSU5GL3NwcmluZy9DYWxjdWxhdG9yU2VydmljZS1jb250ZXh0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L2ltcG9ydHMvTUVUQS1JTkYvc3ByaW5nL0NhbGN1bGF0b3JTZXJ2aWNlLWNvbnRleHQueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9pbXBvcnRzL01FVEEtSU5GL3NwcmluZy9DYWxjdWxhdG9yU2VydmljZS1jb250ZXh0LnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L2ltcG9ydHMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0ltcG9ydC1jb250ZXh0LnhtbCBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L2ltcG9ydHMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0ltcG9ydC1jb250ZXh0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L2ltcG9ydHMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0ltcG9ydC1jb250ZXh0LnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvaW1wb3J0cy9NRVRBLUlORi9zcHJpbmcvU3ByaW5nSW1wb3J0LWNvbnRleHQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvbXVsdGlwbGUvTXVsdGlwbGVDb250ZXh0LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L211bHRpcGxlL011bHRpcGxlQ29udGV4dC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9tdWx0aXBsZS9NdWx0aXBsZUNvbnRleHQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9tdWx0aXBsZS9NdWx0aXBsZUNvbnRleHQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvbXVsdGlwbGUvc3ByaW5nYXBwL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvbXVsdGlwbGUvc3ByaW5nYXBwL01FVEEtSU5GL01BTklGRVNULk1GCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvbXVsdGlwbGUvc3ByaW5nYXBwL01FVEEtSU5GL01BTklGRVNULk1GCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9tdWx0aXBsZS9zcHJpbmdhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9tdWx0aXBsZS9zcHJpbmdhcHAvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0hlbGxvV29ybGQtY29udGV4dC54bWwgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9tdWx0aXBsZS9zcHJpbmdhcHAvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0hlbGxvV29ybGQtY29udGV4dC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9tdWx0aXBsZS9zcHJpbmdhcHAvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0hlbGxvV29ybGQtY29udGV4dC54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L211bHRpcGxlL3NwcmluZ2FwcC9NRVRBLUlORi9zcHJpbmcvU3ByaW5nSGVsbG9Xb3JsZC1jb250ZXh0LnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L211bHRpcGxlL3NwcmluZ2FwcC9NRVRBLUlORi9zcHJpbmcvU3RvY2tRdW90ZVNlcnZpY2UtY29udGV4dC54bWwgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9tdWx0aXBsZS9zcHJpbmdhcHAvTUVUQS1JTkYvc3ByaW5nL1N0b2NrUXVvdGVTZXJ2aWNlLWNvbnRleHQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvbXVsdGlwbGUvc3ByaW5nYXBwL01FVEEtSU5GL3NwcmluZy9TdG9ja1F1b3RlU2VydmljZS1jb250ZXh0LnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvbXVsdGlwbGUvc3ByaW5nYXBwL01FVEEtSU5GL3NwcmluZy9TdG9ja1F1b3RlU2VydmljZS1jb250ZXh0LnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9jb250ZXh0L211bHRpcGxlL3NwcmluZ2FwcC9NRVRBLUlORi9zcHJpbmcvYmVhblJlZkNvbnRleHQueG1sIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvbXVsdGlwbGUvc3ByaW5nYXBwL01FVEEtSU5GL3NwcmluZy9iZWFuUmVmQ29udGV4dC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvY29udGV4dC9tdWx0aXBsZS9zcHJpbmdhcHAvTUVUQS1JTkYvc3ByaW5nL2JlYW5SZWZDb250ZXh0LnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2NvbnRleHQvbXVsdGlwbGUvc3ByaW5nYXBwL01FVEEtSU5GL3NwcmluZy9iZWFuUmVmQ29udGV4dC54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvQ2FsY3VsYXRvckphc3MuY29uZmlnIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2ltcGxlbWVudGF0aW9uL3BvbGljaWVzL0NhbGN1bGF0b3JKYXNzLmNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9DYWxjdWxhdG9ySmFzcy5jb25maWcKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9DYWxjdWxhdG9ySmFzcy5jb25maWcKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvQ2FsY3VsYXRvckxvZ01lc3NhZ2VzLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvQ2FsY3VsYXRvckxvZ01lc3NhZ2VzLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvQ2FsY3VsYXRvckxvZ01lc3NhZ2VzLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9DYWxjdWxhdG9yTG9nTWVzc2FnZXMucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9JbXBsZW1lbnRhdGlvblBvbGljaWVzLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9JbXBsZW1lbnRhdGlvblBvbGljaWVzLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9JbXBsZW1lbnRhdGlvblBvbGljaWVzLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2ltcGxlbWVudGF0aW9uL3BvbGljaWVzL0ltcGxlbWVudGF0aW9uUG9saWNpZXMuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2ltcGxlbWVudGF0aW9uL3BvbGljaWVzL01FVEEtSU5GL2RlZmluaXRpb25zLnhtbCBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9NRVRBLUlORi9kZWZpbml0aW9ucy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2ltcGxlbWVudGF0aW9uL3BvbGljaWVzL01FVEEtSU5GL3NwcmluZy9DYWxjdWxhdG9yU2VydmljZS1jb250ZXh0LnhtbCBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9NRVRBLUlORi9zcHJpbmcvQ2FsY3VsYXRvclNlcnZpY2UtY29udGV4dC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvTUVUQS1JTkYvc3ByaW5nL0NhbGN1bGF0b3JTZXJ2aWNlLWNvbnRleHQueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvTUVUQS1JTkYvc3ByaW5nL0NhbGN1bGF0b3JTZXJ2aWNlLWNvbnRleHQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvY2F0aW9uL2ZvbGRlci9TcHJpbmdGb2xkZXJMb2NhdGlvbi5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9jYXRpb24vZm9sZGVyL1NwcmluZ0ZvbGRlckxvY2F0aW9uLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2NhdGlvbi9mb2xkZXIvU3ByaW5nRm9sZGVyTG9jYXRpb24uY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9jYXRpb24vZm9sZGVyL1NwcmluZ0ZvbGRlckxvY2F0aW9uLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2NhdGlvbi9mb2xkZXIvc3ByaW5nYXBwL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvY2F0aW9uL2ZvbGRlci9zcHJpbmdhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9jYXRpb24vZm9sZGVyL3NwcmluZ2FwcC9NRVRBLUlORi9NQU5JRkVTVC5NRgpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvY2F0aW9uL2ZvbGRlci9zcHJpbmdhcHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9jYXRpb24vZm9sZGVyL3NwcmluZ2FwcC9NRVRBLUlORi9zcHJpbmcvU3ByaW5nU0NBUHJvcGVydHktY29udGV4dC54bWwgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9jYXRpb24vZm9sZGVyL3NwcmluZ2FwcC9NRVRBLUlORi9zcHJpbmcvU3ByaW5nU0NBUHJvcGVydHktY29udGV4dC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9jYXRpb24vZm9sZGVyL3NwcmluZ2FwcC9NRVRBLUlORi9zcHJpbmcvU3ByaW5nU0NBUHJvcGVydHktY29udGV4dC54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2NhdGlvbi9mb2xkZXIvc3ByaW5nYXBwL01FVEEtSU5GL3NwcmluZy9TcHJpbmdTQ0FQcm9wZXJ0eS1jb250ZXh0LnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2NhdGlvbi9qYXIvU3ByaW5nSmFyTG9jYXRpb24uY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvY2F0aW9uL2phci9TcHJpbmdKYXJMb2NhdGlvbi5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9jYXRpb24vamFyL1NwcmluZ0phckxvY2F0aW9uLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvY2F0aW9uL2phci9TcHJpbmdKYXJMb2NhdGlvbi5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvbG9jYXRpb24vamFyL3NwcmluZy1jb250ZXh0LmphciBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2NhdGlvbi9qYXIvc3ByaW5nLWNvbnRleHQuamFyCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL2xvY2F0aW9uL2phci9zcHJpbmctY29udGV4dC5qYXIKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9sb2NhdGlvbi9qYXIvc3ByaW5nLWNvbnRleHQuamFyCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0RlbGVnYXRpb25IZWxsb1dvcmxkLWNvbnRleHQueG1sIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL01FVEEtSU5GL3NwcmluZy9TcHJpbmdEZWxlZ2F0aW9uSGVsbG9Xb3JsZC1jb250ZXh0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9NRVRBLUlORi9zcHJpbmcvU3ByaW5nRGVsZWdhdGlvbkhlbGxvV29ybGQtY29udGV4dC54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9NRVRBLUlORi9zcHJpbmcvU3ByaW5nRGVsZWdhdGlvbkhlbGxvV29ybGQtY29udGV4dC54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0hlbGxvV29ybGQtY29udGV4dC54bWwgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0hlbGxvV29ybGQtY29udGV4dC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0hlbGxvV29ybGQtY29udGV4dC54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9NRVRBLUlORi9zcHJpbmcvU3ByaW5nSGVsbG9Xb3JsZC1jb250ZXh0LnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9TcHJpbmdEZWxlZ2F0aW9uSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvU3ByaW5nRGVsZWdhdGlvbkhlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL1NwcmluZ0RlbGVnYXRpb25IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL1NwcmluZ0RlbGVnYXRpb25IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9TcHJpbmdIZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9TcHJpbmdIZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9TcHJpbmdIZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL1NwcmluZ0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NjYS9yZWZlcmVuY2VzL01FVEEtSU5GL3NwcmluZy9TcHJpbmdFeHBsaWNpdFJlZmVyZW5jZS1jb250ZXh0LnhtbCBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2EvcmVmZXJlbmNlcy9NRVRBLUlORi9zcHJpbmcvU3ByaW5nRXhwbGljaXRSZWZlcmVuY2UtY29udGV4dC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3JlZmVyZW5jZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0V4cGxpY2l0UmVmZXJlbmNlLWNvbnRleHQueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3JlZmVyZW5jZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0V4cGxpY2l0UmVmZXJlbmNlLWNvbnRleHQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NjYS9yZWZlcmVuY2VzL01FVEEtSU5GL3NwcmluZy9TcHJpbmdJbXBsaWNpdFJlZmVyZW5jZS1jb250ZXh0LnhtbCBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2EvcmVmZXJlbmNlcy9NRVRBLUlORi9zcHJpbmcvU3ByaW5nSW1wbGljaXRSZWZlcmVuY2UtY29udGV4dC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3JlZmVyZW5jZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0ltcGxpY2l0UmVmZXJlbmNlLWNvbnRleHQueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3JlZmVyZW5jZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0ltcGxpY2l0UmVmZXJlbmNlLWNvbnRleHQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NjYS9yZWZlcmVuY2VzL1NwcmluZ0V4cGxpY2l0UmVmZXJlbmNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2EvcmVmZXJlbmNlcy9TcHJpbmdFeHBsaWNpdFJlZmVyZW5jZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3JlZmVyZW5jZXMvU3ByaW5nRXhwbGljaXRSZWZlcmVuY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3JlZmVyZW5jZXMvU3ByaW5nRXhwbGljaXRSZWZlcmVuY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NjYS9yZWZlcmVuY2VzL1NwcmluZ0ltcGxpY2l0UmVmZXJlbmNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2EvcmVmZXJlbmNlcy9TcHJpbmdJbXBsaWNpdFJlZmVyZW5jZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3JlZmVyZW5jZXMvU3ByaW5nSW1wbGljaXRSZWZlcmVuY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3JlZmVyZW5jZXMvU3ByaW5nSW1wbGljaXRSZWZlcmVuY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3NlcnZpY2VzL01FVEEtSU5GL3NwcmluZy9TcHJpbmdFeHBsaWNpdFNlcnZpY2UtY29udGV4dC54bWwgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3NlcnZpY2VzL01FVEEtSU5GL3NwcmluZy9TcHJpbmdFeHBsaWNpdFNlcnZpY2UtY29udGV4dC54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZlNTdlZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2Evc2VydmljZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0V4cGxpY2l0U2VydmljZS1jb250ZXh0LnhtbApAQCAtMCwwICsxLDQxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICogCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICogCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPCEtLSBBcHBsaWNhdGlvbiBjb250ZXh0IGZvciB0aGUgU3ByaW5nRXhwbGljaXRIZWxsb1dvcmxkIHRlc3RjYXNlIAorSW4gdGhpcyBjYXNlLCB0aGUgc2VydmljZSBvZmZlcmVkIGJ5IHRoZSBTcHJpbmcgYXBwbGljYXRpb24gaXMgc3BlY2lmaWVkCitleHBsaWNpdGx5IHVzaW5nIGFuIHNjYTpzZXJ2aWNlIGVsZW1lbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+Cis8YmVhbnMgeG1sbnM9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvYmVhbnMiCisgICAgICAgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIKKyAgICAgICB4bWxuczpzY2E9Imh0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvc2NhIgorICAgICAgIHhtbG5zOnNwZWM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICAgICB4c2k6c2NoZW1hTG9jYXRpb249IgoraHR0cDovL3d3dy5zcHJpbmdmcmFtZXdvcmsub3JnL3NjaGVtYS9iZWFucyBodHRwOi8vd3d3LnNwcmluZ2ZyYW1ld29yay5vcmcvc2NoZW1hL2JlYW5zL3NwcmluZy1iZWFucy54c2QKK2h0dHA6Ly93d3cuc3ByaW5nZnJhbWV3b3JrLm9yZy9zY2hlbWEvc2NhIGh0dHA6Ly93d3cub3NvYS5vcmcveG1sbnMvc2NhLzEuMC9zcHJpbmctc2NhLnhzZCI+CisKKyAgICA8c2NhOnNlcnZpY2UgbmFtZT0iZm9vU2VydmljZSIgCisgICAgICAgICAgICAgICAgIHR5cGU9ImhlbGxvd29ybGQuSGVsbG9Xb3JsZCIgCisgICAgICAgICAgICAgICAgIHRhcmdldD0idGVzdEJlYW4iLz4KKyAgICAgICAgICAgICAgICAgPCEtLSByZXF1aXJlcz0ic3BlYzpzZXJ2ZXJBdXRoZW50aWNhdGlvbiIgLS0+CisKKyAgICA8YmVhbiBpZD0idGVzdEJlYW4iIAorICAgICAgICAgIGNsYXNzPSJtb2NrLlRlc3RIZWxsb1dvcmxkQmVhbiIgCisgICAgICAgICAgbGF6eS1pbml0PSJ0cnVlIj4KKyAgICA8L2JlYW4+CisKKzwvYmVhbnM+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2Evc2VydmljZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0ltcGxpY2l0U2VydmljZS1jb250ZXh0LnhtbCBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2Evc2VydmljZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0ltcGxpY2l0U2VydmljZS1jb250ZXh0LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2Evc2VydmljZXMvTUVUQS1JTkYvc3ByaW5nL1NwcmluZ0ltcGxpY2l0U2VydmljZS1jb250ZXh0LnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NjYS9zZXJ2aWNlcy9NRVRBLUlORi9zcHJpbmcvU3ByaW5nSW1wbGljaXRTZXJ2aWNlLWNvbnRleHQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NjYS9zZXJ2aWNlcy9TcHJpbmdFeHBsaWNpdFNlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NjYS9zZXJ2aWNlcy9TcHJpbmdFeHBsaWNpdFNlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NjYS9zZXJ2aWNlcy9TcHJpbmdFeHBsaWNpdFNlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3NlcnZpY2VzL1NwcmluZ0V4cGxpY2l0U2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3NlcnZpY2VzL1NwcmluZ0ltcGxpY2l0U2VydmljZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3NlcnZpY2VzL1NwcmluZ0ltcGxpY2l0U2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NhL3NlcnZpY2VzL1NwcmluZ0ltcGxpY2l0U2VydmljZS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zY2Evc2VydmljZXMvU3ByaW5nSW1wbGljaXRTZXJ2aWNlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zcHJpbmcvYW5ub3RhdGlvbnMvQ2FsY3VsYXRvci5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc3ByaW5nL2Fubm90YXRpb25zL0NhbGN1bGF0b3IuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NwcmluZy9hbm5vdGF0aW9ucy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NwcmluZy9hbm5vdGF0aW9ucy9DYWxjdWxhdG9yLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy9tYWluL3Jlc291cmNlcy9zcHJpbmcvYW5ub3RhdGlvbnMvQ2FsY3VsYXRvclNlcnZpY2UtY29udGV4dC54bWwgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvbWFpbi9yZXNvdXJjZXMvc3ByaW5nL2Fubm90YXRpb25zL0NhbGN1bGF0b3JTZXJ2aWNlLWNvbnRleHQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NwcmluZy9hbm5vdGF0aW9ucy9DYWxjdWxhdG9yU2VydmljZS1jb250ZXh0LnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL21haW4vcmVzb3VyY2VzL3NwcmluZy9hbm5vdGF0aW9ucy9DYWxjdWxhdG9yU2VydmljZS1jb250ZXh0LnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvY29udGV4dC9hY2Nlc3MvQ2FsY3VsYXRvckNsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9jb250ZXh0L2FjY2Vzcy9DYWxjdWxhdG9yQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2NvbnRleHQvYWNjZXNzL0NhbGN1bGF0b3JDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9jb250ZXh0L2FjY2Vzcy9DYWxjdWxhdG9yQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2NvbnRleHQvYWNjZXNzL0NvbnRleHRBY2Nlc3NUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9jb250ZXh0L2FjY2Vzcy9Db250ZXh0QWNjZXNzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvY29udGV4dC9hY2Nlc3MvQ29udGV4dEFjY2Vzc1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvY29udGV4dC9hY2Nlc3MvQ29udGV4dEFjY2Vzc1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2NvbnRleHQvaW1wb3J0cy9DYWxjdWxhdG9yQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2NvbnRleHQvaW1wb3J0cy9DYWxjdWxhdG9yQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2NvbnRleHQvaW1wb3J0cy9DYWxjdWxhdG9yQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvY29udGV4dC9pbXBvcnRzL0NhbGN1bGF0b3JDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvY29udGV4dC9pbXBvcnRzL0NvbnRleHRJbXBvcnRzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvY29udGV4dC9pbXBvcnRzL0NvbnRleHRJbXBvcnRzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvY29udGV4dC9pbXBvcnRzL0NvbnRleHRJbXBvcnRzVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9jb250ZXh0L2ltcG9ydHMvQ29udGV4dEltcG9ydHNUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9jb250ZXh0L211bHRpcGxlL011bHRpcGxlQ29udGV4dFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2NvbnRleHQvbXVsdGlwbGUvTXVsdGlwbGVDb250ZXh0VGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvY29udGV4dC9tdWx0aXBsZS9NdWx0aXBsZUNvbnRleHRUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2NvbnRleHQvbXVsdGlwbGUvTXVsdGlwbGVDb250ZXh0VGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvY29udGV4dC9tdWx0aXBsZS9TdG9ja1F1b3RlU2VydmVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2NvbnRleHQvbXVsdGlwbGUvU3RvY2tRdW90ZVNlcnZlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9jb250ZXh0L211bHRpcGxlL1N0b2NrUXVvdGVTZXJ2ZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9jb250ZXh0L211bHRpcGxlL1N0b2NrUXVvdGVTZXJ2ZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvQ2FsY3VsYXRvckNsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9DYWxjdWxhdG9yQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2ltcGxlbWVudGF0aW9uL3BvbGljaWVzL0NhbGN1bGF0b3JDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9DYWxjdWxhdG9yQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2ltcGxlbWVudGF0aW9uL3BvbGljaWVzL0ltcGxlbWVudGF0aW9uUG9saWNpZXNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9pbXBsZW1lbnRhdGlvbi9wb2xpY2llcy9JbXBsZW1lbnRhdGlvblBvbGljaWVzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvSW1wbGVtZW50YXRpb25Qb2xpY2llc1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvaW1wbGVtZW50YXRpb24vcG9saWNpZXMvSW1wbGVtZW50YXRpb25Qb2xpY2llc1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2xvY2F0aW9uL2ZvbGRlci9TcHJpbmdGb2xkZXJMb2NhdGlvblRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2xvY2F0aW9uL2ZvbGRlci9TcHJpbmdGb2xkZXJMb2NhdGlvblRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL2xvY2F0aW9uL2ZvbGRlci9TcHJpbmdGb2xkZXJMb2NhdGlvblRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvbG9jYXRpb24vZm9sZGVyL1NwcmluZ0ZvbGRlckxvY2F0aW9uVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvbG9jYXRpb24vamFyL1NwcmluZ0phckxvY2F0aW9uVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvbG9jYXRpb24vamFyL1NwcmluZ0phckxvY2F0aW9uVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvbG9jYXRpb24vamFyL1NwcmluZ0phckxvY2F0aW9uVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9sb2NhdGlvbi9qYXIvU3ByaW5nSmFyTG9jYXRpb25UZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9BYnN0cmFjdEhlbGxvV29ybGRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9BYnN0cmFjdEhlbGxvV29ybGRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9BYnN0cmFjdEhlbGxvV29ybGRUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL0Fic3RyYWN0SGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL0Fic3RyYWN0U0NBVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvQWJzdHJhY3RTQ0FUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9BYnN0cmFjdFNDQVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvQWJzdHJhY3RTQ0FUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9IZWxsb1dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL0hlbGxvV29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvSGVsbG9Xb3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL0hlbGxvV29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvSGVsbG9Xb3JsZFByb3h5LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL0hlbGxvV29ybGRQcm94eS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9IZWxsb1dvcmxkUHJveHkuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9IZWxsb1dvcmxkUHJveHkuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvU3ByaW5nRGVsZWdhdGlvbkhlbGxvV29ybGRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9TcHJpbmdEZWxlZ2F0aW9uSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL1NwcmluZ0RlbGVnYXRpb25IZWxsb1dvcmxkVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9TcHJpbmdEZWxlZ2F0aW9uSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL1NwcmluZ0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9TcHJpbmdIZWxsb1dvcmxkVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvU3ByaW5nSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvU3ByaW5nSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL1Rlc3RIZWxsb1dvcmxkQmVhbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9UZXN0SGVsbG9Xb3JsZEJlYW4uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvVGVzdEhlbGxvV29ybGRCZWFuLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvVGVzdEhlbGxvV29ybGRCZWFuLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc3ByaW5nL1Rlc3RIZWxsb1dvcmxkRGVsZWdhdG9yQmVhbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NwcmluZy9UZXN0SGVsbG9Xb3JsZERlbGVnYXRvckJlYW4uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvVGVzdEhlbGxvV29ybGREZWxlZ2F0b3JCZWFuLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zcHJpbmcvVGVzdEhlbGxvV29ybGREZWxlZ2F0b3JCZWFuLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL3NjYS9yZWZlcmVuY2VzL1NwcmluZ0V4cGxpY2l0UmVmZXJlbmNlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvc2NhL3JlZmVyZW5jZXMvU3ByaW5nRXhwbGljaXRSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zY2EvcmVmZXJlbmNlcy9TcHJpbmdFeHBsaWNpdFJlZmVyZW5jZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvc2NhL3JlZmVyZW5jZXMvU3ByaW5nRXhwbGljaXRSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zY2EvcmVmZXJlbmNlcy9TcHJpbmdJbXBsaWNpdFJlZmVyZW5jZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL3NjYS9yZWZlcmVuY2VzL1NwcmluZ0ltcGxpY2l0UmVmZXJlbmNlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvc2NhL3JlZmVyZW5jZXMvU3ByaW5nSW1wbGljaXRSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL3NjYS9yZWZlcmVuY2VzL1NwcmluZ0ltcGxpY2l0UmVmZXJlbmNlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvc2NhL3NlcnZpY2VzL1NwcmluZ0V4cGxpY2l0U2VydmljZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL3NjYS9zZXJ2aWNlcy9TcHJpbmdFeHBsaWNpdFNlcnZpY2VUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zY2Evc2VydmljZXMvU3ByaW5nRXhwbGljaXRTZXJ2aWNlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zY2Evc2VydmljZXMvU3ByaW5nRXhwbGljaXRTZXJ2aWNlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvc2NhL3NlcnZpY2VzL1NwcmluZ0ltcGxpY2l0U2VydmljZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL3NjYS9zZXJ2aWNlcy9TcHJpbmdJbXBsaWNpdFNlcnZpY2VUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zY2Evc2VydmljZXMvU3ByaW5nSW1wbGljaXRTZXJ2aWNlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zY2Evc2VydmljZXMvU3ByaW5nSW1wbGljaXRTZXJ2aWNlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvc3ByaW5nL2Fubm90YXRpb25zL0NhbGN1bGF0b3JDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvc3ByaW5nL2Fubm90YXRpb25zL0NhbGN1bGF0b3JDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wbGVtZW50YXRpb24tc3ByaW5nL3NyYy90ZXN0L2phdmEvc3ByaW5nL2Fubm90YXRpb25zL0NhbGN1bGF0b3JDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zcHJpbmcvYW5ub3RhdGlvbnMvQ2FsY3VsYXRvckNsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zcHJpbmcvYW5ub3RhdGlvbnMvU3ByaW5nQW5ub3RhdGlvbnNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zcHJpbmcvYW5ub3RhdGlvbnMvU3ByaW5nQW5ub3RhdGlvbnNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBsZW1lbnRhdGlvbi1zcHJpbmcvc3JjL3Rlc3QvamF2YS9zcHJpbmcvYW5ub3RhdGlvbnMvU3ByaW5nQW5ub3RhdGlvbnNUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcGxlbWVudGF0aW9uLXNwcmluZy9zcmMvdGVzdC9qYXZhL3NwcmluZy9hbm5vdGF0aW9ucy9TcHJpbmdBbm5vdGF0aW9uc1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcG9ydC1leHBvcnQvZXhwb3J0cy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9pbXBvcnQtZXhwb3J0L2V4cG9ydHMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wb3J0LWV4cG9ydC9leHBvcnRzL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC9leHBvcnRzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcG9ydC1leHBvcnQvZXhwb3J0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZXhwb3J0cy9IZWxsb3dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ltcG9ydC1leHBvcnQvZXhwb3J0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZXhwb3J0cy9IZWxsb3dvcmxkLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcG9ydC1leHBvcnQvZXhwb3J0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvZXhwb3J0cy9IZWxsb3dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC9leHBvcnRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9leHBvcnRzL0hlbGxvd29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wb3J0LWV4cG9ydC9leHBvcnRzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC9leHBvcnRzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW1wb3J0LWV4cG9ydC9leHBvcnRzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBvcnQtZXhwb3J0L2V4cG9ydHMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBvcnQtZXhwb3J0L2ltcG9ydHMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC9pbXBvcnRzL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcG9ydC1leHBvcnQvaW1wb3J0cy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcG9ydC1leHBvcnQvaW1wb3J0cy9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBvcnQtZXhwb3J0L2ltcG9ydHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ltcG9ydHMvSGVsbG93b3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC9pbXBvcnRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbXBvcnRzL0hlbGxvd29ybGRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcG9ydC1leHBvcnQvaW1wb3J0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW1wb3J0cy9IZWxsb3dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcG9ydC1leHBvcnQvaW1wb3J0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW1wb3J0cy9IZWxsb3dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbXBvcnQtZXhwb3J0L2ltcG9ydHMvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9pbXBvcnQtZXhwb3J0L2ltcG9ydHMvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvd29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBvcnQtZXhwb3J0L2ltcG9ydHMvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvd29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ltcG9ydC1leHBvcnQvaW1wb3J0cy9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcG9ydC1leHBvcnQvaW1wb3J0cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ltcG9ydC1leHBvcnQvaW1wb3J0cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcG9ydC1leHBvcnQvaW1wb3J0cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC9pbXBvcnRzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvaW1wb3J0LWV4cG9ydC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9pbXBvcnQtZXhwb3J0L3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ltcG9ydC1leHBvcnQvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbXBvcnQtZXhwb3J0L3BvbS54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC90ZXN0cy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9pbXBvcnQtZXhwb3J0L3Rlc3RzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAxZTkzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC90ZXN0cy9wb20ueG1sCkBAIC0wLDAgKzEsNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1pbXBvcnQtZXhwb3J0LXRlc3RzPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSW1wb3J0IEV4cG9ydCBUZXN0czwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisgICAgDQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ltcG9ydC1leHBvcnQvdGVzdHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0cy9UZXN0VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC90ZXN0cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3RzL1Rlc3RUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbXBvcnQtZXhwb3J0L3Rlc3RzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdHMvVGVzdFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW1wb3J0LWV4cG9ydC90ZXN0cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3RzL1Rlc3RUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbnRlcmZhY2VzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW50ZXJmYWNlcy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9Mb2NhbENhbGxiYWNrSW50ZXJmYWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvTG9jYWxDYWxsYmFja0ludGVyZmFjZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL0xvY2FsQ2FsbGJhY2tJbnRlcmZhY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL0xvY2FsQ2FsbGJhY2tJbnRlcmZhY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9Mb2NhbENsaWVudENvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL0xvY2FsQ2xpZW50Q29tcG9uZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvTG9jYWxDbGllbnRDb21wb25lbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL0xvY2FsQ2xpZW50Q29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvTG9jYWxDbGllbnRDb21wb25lbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvTG9jYWxDbGllbnRDb21wb25lbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvTG9jYWxDbGllbnRDb21wb25lbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9Mb2NhbENsaWVudENvbXBvbmVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9Mb2NhbFNlcnZpY2VDb21wb25lbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9Mb2NhbFNlcnZpY2VDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9Mb2NhbFNlcnZpY2VDb21wb25lbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL0xvY2FsU2VydmljZUNvbXBvbmVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL0xvY2FsU2VydmljZUNvbXBvbmVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9Mb2NhbFNlcnZpY2VDb21wb25lbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvTG9jYWxTZXJ2aWNlQ29tcG9uZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvTG9jYWxTZXJ2aWNlQ29tcG9uZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1BhcmFtZXRlck9iamVjdC5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1BhcmFtZXRlck9iamVjdC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1BhcmFtZXRlck9iamVjdC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvUGFyYW1ldGVyT2JqZWN0LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvUmVtb3RlQ2FsbGJhY2tJbnRlcmZhY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9SZW1vdGVDYWxsYmFja0ludGVyZmFjZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1JlbW90ZUNhbGxiYWNrSW50ZXJmYWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9SZW1vdGVDYWxsYmFja0ludGVyZmFjZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1JlbW90ZUNsaWVudENvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1JlbW90ZUNsaWVudENvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1JlbW90ZUNsaWVudENvbXBvbmVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvUmVtb3RlQ2xpZW50Q29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvUmVtb3RlQ2xpZW50Q29tcG9uZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1JlbW90ZUNsaWVudENvbXBvbmVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9SZW1vdGVDbGllbnRDb21wb25lbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9SZW1vdGVDbGllbnRDb21wb25lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvUmVtb3RlU2VydmljZUNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1JlbW90ZVNlcnZpY2VDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9SZW1vdGVTZXJ2aWNlQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9SZW1vdGVTZXJ2aWNlQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvUmVtb3RlU2VydmljZUNvbXBvbmVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9SZW1vdGVTZXJ2aWNlQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL1JlbW90ZVNlcnZpY2VDb21wb25lbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9SZW1vdGVTZXJ2aWNlQ29tcG9uZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvaW52YWxpZC9JbnZhbGlkUmVtb3RlQXR0cmlidXRlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL2ludmFsaWQvSW52YWxpZFJlbW90ZUF0dHJpYnV0ZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9pbnZhbGlkL0ludmFsaWRSZW1vdGVBdHRyaWJ1dGUuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9pbnZhbGlkL0ludmFsaWRSZW1vdGVBdHRyaWJ1dGUuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvdmFsaWQvSW50ZXJmYWNlc1Rlc3QuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvdmFsaWQvSW50ZXJmYWNlc1Rlc3QuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9pbnRlcmZhY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvdmFsaWQvSW50ZXJmYWNlc1Rlc3QuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy92YWxpZC9JbnRlcmZhY2VzVGVzdC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ludGVyZmFjZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvSW50ZXJmYWNlc1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ludGVyZmFjZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvSW50ZXJmYWNlc1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ludGVyZmFjZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2ludGVyZmFjZXMvSW50ZXJmYWNlc1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9JbnRlcmZhY2VzVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvaW50ZXJmYWNlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9JbnZhbGlkUmVtb3RlQXR0cmlidXRlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvaW50ZXJmYWNlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9JbnZhbGlkUmVtb3RlQXR0cmlidXRlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvaW50ZXJmYWNlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvaW50ZXJmYWNlcy9JbnZhbGlkUmVtb3RlQXR0cmlidXRlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9pbnRlcmZhY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9pbnRlcmZhY2VzL0ludmFsaWRSZW1vdGVBdHRyaWJ1dGVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qYXh3cy1hc3luY2NsaWVudC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qYXh3cy1hc3luY2NsaWVudC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qYXh3cy1hc3luY2NsaWVudC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3NyYy9tYWluL2phdmEvc3RvY2svU3RvY2tRdW90ZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qYXh3cy1hc3luY2NsaWVudC9zcmMvbWFpbi9qYXZhL3N0b2NrL1N0b2NrUXVvdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL21haW4vamF2YS9zdG9jay9TdG9ja1F1b3RlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL21haW4vamF2YS9zdG9jay9TdG9ja1F1b3RlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3NyYy9tYWluL2phdmEvc3RvY2svU3RvY2tRdW90ZUNsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qYXh3cy1hc3luY2NsaWVudC9zcmMvbWFpbi9qYXZhL3N0b2NrL1N0b2NrUXVvdGVDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL21haW4vamF2YS9zdG9jay9TdG9ja1F1b3RlQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL21haW4vamF2YS9zdG9jay9TdG9ja1F1b3RlQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3NyYy9tYWluL2phdmEvc3RvY2svU3RvY2tRdW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL21haW4vamF2YS9zdG9jay9TdG9ja1F1b3RlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qYXh3cy1hc3luY2NsaWVudC9zcmMvbWFpbi9qYXZhL3N0b2NrL1N0b2NrUXVvdGVJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL21haW4vamF2YS9zdG9jay9TdG9ja1F1b3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qYXh3cy1hc3luY2NsaWVudC9zcmMvbWFpbi9qYXZhL3N0b2NrL1N0b2NrUXVvdGVSZWYuamF2YSBiL3Rlc3RpbmcvaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL21haW4vamF2YS9zdG9jay9TdG9ja1F1b3RlUmVmLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3NyYy9tYWluL2phdmEvc3RvY2svU3RvY2tRdW90ZVJlZi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3NyYy9tYWluL2phdmEvc3RvY2svU3RvY2tRdW90ZVJlZi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qYXh3cy1hc3luY2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL1N0b2NrUXVvdGUuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qYXh3cy1hc3luY2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvU3RvY2tRdW90ZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9TdG9ja1F1b3RlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qYXh3cy1hc3luY2NsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvU3RvY2tRdW90ZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2pheHdzLWFzeW5jY2xpZW50L3NyYy90ZXN0L2phdmEvaXRlc3QvQXN5bmNTZXJ2aWNlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL3Rlc3QvamF2YS9pdGVzdC9Bc3luY1NlcnZpY2VUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qYXh3cy1hc3luY2NsaWVudC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0FzeW5jU2VydmljZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvamF4d3MtYXN5bmNjbGllbnQvc3JjL3Rlc3QvamF2YS9pdGVzdC9Bc3luY1NlcnZpY2VUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qYXh3cy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qYXh3cy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qYXh3cy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2pheHdzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2pheHdzL3NyYy90ZXN0L2phdmEvc3RvY2svQXN5bmNTZXJ2aWNlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvamF4d3Mvc3JjL3Rlc3QvamF2YS9zdG9jay9Bc3luY1NlcnZpY2VUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qYXh3cy9zcmMvdGVzdC9qYXZhL3N0b2NrL0FzeW5jU2VydmljZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvamF4d3Mvc3JjL3Rlc3QvamF2YS9zdG9jay9Bc3luY1NlcnZpY2VUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qYXh3cy9zcmMvdGVzdC9qYXZhL3N0b2NrL1N0b2NrUXVvdGUuamF2YSBiL3Rlc3RpbmcvaXRlc3QvamF4d3Mvc3JjL3Rlc3QvamF2YS9zdG9jay9TdG9ja1F1b3RlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2pheHdzL3NyYy90ZXN0L2phdmEvc3RvY2svU3RvY2tRdW90ZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2pheHdzL3NyYy90ZXN0L2phdmEvc3RvY2svU3RvY2tRdW90ZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qYXh3cy9zcmMvdGVzdC9qYXZhL3N0b2NrL1N0b2NrUXVvdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2pheHdzL3NyYy90ZXN0L2phdmEvc3RvY2svU3RvY2tRdW90ZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvamF4d3Mvc3JjL3Rlc3QvamF2YS9zdG9jay9TdG9ja1F1b3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2pheHdzL3NyYy90ZXN0L2phdmEvc3RvY2svU3RvY2tRdW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvamF4d3Mvc3JjL3Rlc3QvcmVzb3VyY2VzL1N0b2NrUXVvdGUuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qYXh3cy9zcmMvdGVzdC9yZXNvdXJjZXMvU3RvY2tRdW90ZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2pheHdzL3NyYy90ZXN0L3Jlc291cmNlcy9TdG9ja1F1b3RlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qYXh3cy9zcmMvdGVzdC9yZXNvdXJjZXMvU3RvY2tRdW90ZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjBlN2JhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvRHluYW1pY1JlcGx5US9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1keW5hbWljLXJlcGx5cTwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyB3aXRoIGR5bmFtaWMgcmVwbHlxPC9uYW1lPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZENsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL3Jlc291cmNlcy9keW5hbWljL2NsaWVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL3Jlc291cmNlcy9keW5hbWljL2NsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL3Jlc291cmNlcy9keW5hbWljL2NsaWVudC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL21haW4vcmVzb3VyY2VzL2R5bmFtaWMvY2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3NlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3NlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3NlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy9tYWluL3Jlc291cmNlcy9zaW1wbGUvc2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9EeW5hbWljUmVwbHlRL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9EeW5hbWljUmVwbHlRVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0R5bmFtaWNSZXBseVFUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvRHluYW1pY1JlcGx5US9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRHluYW1pY1JlcGx5UVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL0R5bmFtaWNSZXBseVEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0R5bmFtaWNSZXBseVFUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9hcmdzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9hcmdzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWZjOTFmMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2FyZ3MvcG9tLnhtbApAQCAtMCwwICsxLDMyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtYXJnczwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBBcmdzPC9uYW1lPg0KKw0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9hcmdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9hcmdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9NeVNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2FyZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL015U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2FyZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL015U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2FyZ3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1NlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9hcmdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9hcmdzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9hcmdzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2FyZ3Mvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9hcmdzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmODJlYjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9hcmdzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzOCBAQAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorIyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorIyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyMjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorIyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisjIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMjIA0KKyMjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMjIA0KKyMjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisjIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyMjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyMjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisjIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjIFNUQVJUIFNOSVBQRVQ6IGpuZGkNCisNCitqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwgPSBvcmcuYXBhY2hlLmFjdGl2ZW1xLmpuZGkuQWN0aXZlTVFJbml0aWFsQ29udGV4dEZhY3RvcnkNCisNCisjIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBjb25uZWN0b3INCitqYXZhLm5hbWluZy5wcm92aWRlci51cmwgPSB2bTovL2xvY2FsaG9zdD9icm9rZXIucGVyc2lzdGVudD1mYWxzZSZicm9rZXIudXNlSm14PWZhbHNlJmJyb2tlci51c2VTaHV0ZG93bkhvb2s9ZmFsc2UNCisNCisjIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEpOREkgbmFtZSB0aGUgY29ubmVjdGlvbiBmYWN0b3J5DQorIyBzaG91bGQgYXBwZWFyIGFzLiANCisjY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IGNvbm5lY3Rpb25GYWN0b3J5LCBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LCB0b3BpY0Nvbm5lY3Rpb25GYWN0cnkNCitjb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gQ29ubmVjdGlvbkZhY3RvcnksIENvbm5lY3Rpb25GYWN0b3J5Mg0KKw0KKyMgcmVnaXN0ZXIgc29tZSBxdWV1ZXMgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KK3F1ZXVlLk15U2VydmljZSA9IE15U2VydmljZQ0KKw0KKyMgcmVnaXN0ZXIgc29tZSB0b3BpY3MgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KKyMgdG9waWMuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQorI3RvcGljLk15VG9waWMgPSBleGFtcGxlLk15VG9waWMNCit0b3BpYy5TZXJ2aWNlVG9waWMgPSBTZXJ2aWNlVG9waWMNCisNCisjIEVORCBTTklQUEVUOiBqbmRpDQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9yZXNvdXJjZXMvc2VsZWN0b3JzL3NlbGVjdG9ycy5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9hcmdzL3NyYy9tYWluL3Jlc291cmNlcy9zZWxlY3RvcnMvc2VsZWN0b3JzLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2RhNjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvYXJncy9zcmMvbWFpbi9yZXNvdXJjZXMvc2VsZWN0b3JzL3NlbGVjdG9ycy5jb21wb3NpdGUKQEAgLTAsMCArMSwzOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgLS0+DQorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiDQorICAgICAgICAgICBuYW1lPSJEZWZpbml0aW9uc1Rlc3RzIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJDbGllbnQxIj4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkNsaWVudEltcGwiLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZUEiPg0KKyAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOmpuZGk6TXlTZXJ2aWNlIiAvPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlNlcnZpY2UxIj4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLlNlcnZpY2VJbXBsIi8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJNeVNlcnZpY2UiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcyAvPg0KKyAgICAgICAgPC9zZXJ2aWNlPiANCisgICAgPC9jb21wb25lbnQ+ICAgICAgIA0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9hcmdzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9BcmdzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2FyZ3Mvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0FyZ3NUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvYXJncy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQXJnc1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2FyZ3Mvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0FyZ3NUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3MvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYzU2MmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3MvcG9tLnhtbApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtY2FsbGJhY2tzPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIFRlc3RzIEZvciBDYWxsYmFja3M8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0pNU0NsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0pNU0NsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0pNU1NlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0pNU1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TU2VydmljZUNhbGxiYWNrLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0pNU1NlcnZpY2VDYWxsYmFjay5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNTZXJ2aWNlQ2FsbGJhY2suamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNTZXJ2aWNlQ2FsbGJhY2suamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzRiMWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpAQCAtMCwwICsxLDQwIEBACisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisjIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisjIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorIyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisjIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyMjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyMgDQorIyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyMgDQorIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyMjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgU1RBUlQgU05JUFBFVDogam5kaQ0KKw0KK2phdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCA9IG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeQ0KKw0KKyMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGNvbm5lY3Rvcg0KK2phdmEubmFtaW5nLnByb3ZpZGVyLnVybCA9IHZtOi8vbG9jYWxob3N0P2Jyb2tlci5wZXJzaXN0ZW50PWZhbHNlJmJyb2tlci51c2VKbXg9ZmFsc2UmYnJva2VyLnVzZVNodXRkb3duSG9vaz1mYWxzZQ0KKw0KKyMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgSk5ESSBuYW1lIHRoZSBjb25uZWN0aW9uIGZhY3RvcnkNCisjIHNob3VsZCBhcHBlYXIgYXMuIA0KKyNjb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gY29ubmVjdGlvbkZhY3RvcnksIHF1ZXVlQ29ubmVjdGlvbkZhY3RvcnksIHRvcGljQ29ubmVjdGlvbkZhY3RyeQ0KK2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBDb25uZWN0aW9uRmFjdG9yeQ0KKw0KKyMgcmVnaXN0ZXIgc29tZSBxdWV1ZXMgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KKyMgcXVldWUuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQorcXVldWUuU2VydmljZVF1ZXVlID0gU2VydmljZVF1ZXVlDQorcXVldWUuVFFTZXJ2aWNlUXVldWUgPSBUUVNlcnZpY2VRdWV1ZQ0KK3F1ZXVlLkNhbGxiYWNrUXVldWUgPSBDYWxsYmFja1F1ZXVlDQorDQorIyByZWdpc3RlciBzb21lIHRvcGljcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQorIyB0b3BpYy5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCisjdG9waWMuTXlUb3BpYyA9IGV4YW1wbGUuTXlUb3BpYw0KKw0KKyMgRU5EIFNOSVBQRVQ6IGpuZGkNCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS9jbGllbnQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL3Jlc291cmNlcy9zaW1wbGUvY2xpZW50LmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGQ0NWYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy9tYWluL3Jlc291cmNlcy9zaW1wbGUvY2xpZW50LmNvbXBvc2l0ZQpAQCAtMCwwICsxLDQ0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAtLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCINCisgICAgICAgICAgIG5hbWU9IkNhbGxiYWNrQ2xpZW50Q29tcG9zaXRlIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJDbGllbnRDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TQ2xpZW50SW1wbCIgLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ibXlTZXJ2aWNlIj4NCisgICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6am5kaTpTZXJ2aWNlUXVldWUiLz4NCisgICAgICAgICAgICA8Y2FsbGJhY2s+DQorICAgICAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpqbmRpOkNhbGxiYWNrUXVldWUiLz4NCisgICAgICAgICAgICA8L2NhbGxiYWNrPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuSk1TU2VydmljZUltcGwiIC8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJKTVNTZXJ2aWNlIj4NCisgICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6am5kaTpTZXJ2aWNlUXVldWUiLz4NCisgICAgICAgICAgICA8Y2FsbGJhY2s+DQorICAgICAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpqbmRpOkNhbGxiYWNrUXVldWUiLz4NCisgICAgICAgICAgICA8L2NhbGxiYWNrPg0KKyAgICAgICAgPC9zZXJ2aWNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS90ZW1wcS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS90ZW1wcS5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjliY2NlZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3RlbXBxLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDUwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAtLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCINCisgICAgICAgICAgIG5hbWU9IkNhbGxiYWNrVGVtcFFDb21wb3NpdGUiPg0KKw0KKzwhLS0gDQorDQorVGhlIGNsaWVudCBjb21wb25lbnQgZG9lcyBub3QgZGVmaW5lIHRoZSBjYWxsYmFjayBkZXN0aW5hdGlvbiBzbyBhIHRlbXBvcmFyeSBxdWV1ZSBzaG91bGQgYmUgdXNlZA0KKw0KKy0tPg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlRRQ2xpZW50Q29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU0NsaWVudEltcGwiIC8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9Im15U2VydmljZSI+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOmpuZGk6VFFTZXJ2aWNlUXVldWUiLz4NCisgICAgICAgICAgICA8Y2FsbGJhY2s+DQorICAgICAgICAgICAgICAgIDxiaW5kaW5nLmptcyAvPg0KKyAgICAgICAgICAgIDwvY2FsbGJhY2s+DQorICAgICAgICA8L3JlZmVyZW5jZT4NCisgICAgPC9jb21wb25lbnQ+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iVFFTZXJ2aWNlQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkpNU1NlcnZpY2VJbXBsIiAvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iSk1TU2VydmljZSI+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOmpuZGk6VFFTZXJ2aWNlUXVldWUiLz4NCisgICAgICAgICAgICA8Y2FsbGJhY2s+DQorICAgICAgICAgICAgICAgIDxiaW5kaW5nLmptcyAvPg0KKyAgICAgICAgICAgIDwvY2FsbGJhY2s+DQorICAgICAgICA8L3NlcnZpY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NhbGxiYWNrVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DYWxsYmFja1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvY2FsbGJhY2tzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9UZW1wQ2FsbGJhY2tRVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2NhbGxiYWNrcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvVGVtcENhbGxiYWNrUVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1RlbXBDYWxsYmFja1FUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9jYWxsYmFja3Mvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1RlbXBDYWxsYmFja1FUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZhdWx0cy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZGVmYXVsdHMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmM5Nzg3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvZGVmYXVsdHMvcG9tLnhtbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZGVmYXVsdHM8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgd2l0aCBEZWZhdWx0czwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2RlZmF1bHRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZENsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2RlZmF1bHRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2RlZmF1bHRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2RlZmF1bHRzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmF1bHRzL2NsaWVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvZGVmYXVsdHMvY2xpZW50LmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmFmYmI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmF1bHRzL2NsaWVudC5jb21wb3NpdGUKQEAgLTAsMCArMSwzMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgLS0+DQorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiDQorICAgICAgICAgICBuYW1lPSJEZWZhdWx0Q2xpZW50Q29tcG9zaXRlIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkQ2xpZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkhlbGxvV29ybGRDbGllbnRJbXBsIi8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InNlcnZpY2VBIj4NCisgICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6am5kaTpIZWxsb1dvcmxkU2VydmljZSIgLz4NCisgICAgICAgIDwvcmVmZXJlbmNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmF1bHRzL3NlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmF1bHRzL3NlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmF1bHRzL3NlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvZGVmYXVsdHMvc2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL2RlZmF1bHRzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YjE4NmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCkBAIC0wLDAgKzEsMzggQEAKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyMjIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUgb3IgbW9yZQ0KKyMjIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aA0KKyMjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCisjIyBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZSB0byBZb3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMA0KKyMjICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoDQorIyMgdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisjIyANCisjIyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisjIyANCisjIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlDQorIyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywNCisjIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4NCisjIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kDQorIyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuDQorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorIyBTVEFSVCBTTklQUEVUOiBqbmRpDQorDQoramF2YS5uYW1pbmcuZmFjdG9yeS5pbml0aWFsID0gb3JnLmFwYWNoZS5hY3RpdmVtcS5qbmRpLkFjdGl2ZU1RSW5pdGlhbENvbnRleHRGYWN0b3J5DQorDQorIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBjb25maWd1cmUgdGhlIGRlZmF1bHQgY29ubmVjdG9yDQoramF2YS5uYW1pbmcucHJvdmlkZXIudXJsID0gdm06Ly9sb2NhbGhvc3Q/YnJva2VyLnBlcnNpc3RlbnQ9ZmFsc2UNCisNCisjIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEpOREkgbmFtZSB0aGUgY29ubmVjdGlvbiBmYWN0b3J5DQorIyBzaG91bGQgYXBwZWFyIGFzLiANCisjY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IGNvbm5lY3Rpb25GYWN0b3J5LCBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LCB0b3BpY0Nvbm5lY3Rpb25GYWN0cnkNCitjb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gQ29ubmVjdGlvbkZhY3RvcnkNCisNCisjIHJlZ2lzdGVyIHNvbWUgcXVldWVzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCisjIHF1ZXVlLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KK3F1ZXVlLkhlbGxvV29ybGRTZXJ2aWNlID0gSGVsbG9Xb3JsZFNlcnZpY2UNCisNCisjIHJlZ2lzdGVyIHNvbWUgdG9waWNzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCisjIHRvcGljLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KKyN0b3BpYy5NeVRvcGljID0gZXhhbXBsZS5NeVRvcGljDQorDQorIyBFTkQgU05JUFBFVDogam5kaQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9kZWZhdWx0cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRGVmYXVsdHNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZGVmYXVsdHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0RlZmF1bHRzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2RlZmF1bHRzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9EZWZhdWx0c1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2RlZmF1bHRzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9EZWZhdWx0c1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL2RlZmluaXRpb25zL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlMjFiNDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1kZWZpbml0aW9uczwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBUZXN0cyBGb3IgUHJvcGVydGllczwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2RlZmluaXRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5Q2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheUNsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheUNsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2RlZmluaXRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2RlZmluaXRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2RlZmluaXRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2RlZmluaXRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9kZWZpbml0aW9ucy54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvZGVmaW5pdGlvbnMueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmluaXRpb25zLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmluaXRpb25zLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2RlZmluaXRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9kZWZpbml0aW9ucy9kZWZpbml0aW9ucy5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvZGVmaW5pdGlvbnMvZGVmaW5pdGlvbnMuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmluaXRpb25zL2RlZmluaXRpb25zLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2RlZmluaXRpb25zL2RlZmluaXRpb25zLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2RlZmluaXRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2RlZmluaXRpb25zL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9EZWZpbml0aW9uc1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9kZWZpbml0aW9ucy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRGVmaW5pdGlvbnNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0RlZmluaXRpb25zVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZGVmaW5pdGlvbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0RlZmluaXRpb25zVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9ucy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9ucy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjYwMzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zL3BvbS54bWwKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LWptczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLW5vbnNjYWNsaWVudC1leGNlcHRpb25zPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIE5vblNDQSBDbGllbnQgRXhjZXB0aW9uczwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2hlY2tlZEV4Y3BldGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2hlY2tlZEV4Y3BldGlvbjJBcmdzLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DaGVja2VkRXhjcGV0aW9uMkFyZ3MuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb24yQXJncy5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DaGVja2VkRXhjcGV0aW9uMkFyZ3MuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb25DaGFpbmVkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DaGVja2VkRXhjcGV0aW9uQ2hhaW5lZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2hlY2tlZEV4Y3BldGlvbkNoYWluZWQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2hlY2tlZEV4Y3BldGlvbkNoYWluZWQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb25Ob0FyZ3MuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb25Ob0FyZ3MuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb25Ob0FyZ3MuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2hlY2tlZEV4Y3BldGlvbk5vQXJncy5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXhjZXB0aW9uU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXhjZXB0aW9uU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXhjZXB0aW9uU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9FeGNlcHRpb25TZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9FeGNlcHRpb25TZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXhjZXB0aW9uU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvblNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvblNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvZXhjZXB0aW9ucy9zZXJ2aWNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL21haW4vcmVzb3VyY2VzL2V4Y2VwdGlvbnMvc2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9leGNlcHRpb25zL3NlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9leGNlcHRpb25zL3NlcnZpY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvbnNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9ucy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXhjZXB0aW9uc1Rlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI2NjUxNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvbnNUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMjEwIEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zOw0KKw0KK2ltcG9ydCBzdGF0aWMgb3JnLmN1c3RvbW1vbmtleS54bWx1bml0LlhNTEFzc2VydC5hc3NlcnRYTUxFcXVhbDsNCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOw0KK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOw0KKw0KK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZhLnV0aWwuUHJvcGVydGllczsNCisNCitpbXBvcnQgamF2YXguam1zLkNvbm5lY3Rpb247DQoraW1wb3J0IGphdmF4Lmptcy5Db25uZWN0aW9uRmFjdG9yeTsNCitpbXBvcnQgamF2YXguam1zLkRlc3RpbmF0aW9uOw0KK2ltcG9ydCBqYXZheC5qbXMuSk1TRXhjZXB0aW9uOw0KK2ltcG9ydCBqYXZheC5qbXMuTWVzc2FnZTsNCitpbXBvcnQgamF2YXguam1zLk1lc3NhZ2VDb25zdW1lcjsNCitpbXBvcnQgamF2YXguam1zLk1lc3NhZ2VQcm9kdWNlcjsNCitpbXBvcnQgamF2YXguam1zLk9iamVjdE1lc3NhZ2U7DQoraW1wb3J0IGphdmF4Lmptcy5TZXNzaW9uOw0KK2ltcG9ydCBqYXZheC5qbXMuVGV4dE1lc3NhZ2U7DQoraW1wb3J0IGphdmF4Lm5hbWluZy5Jbml0aWFsQ29udGV4dDsNCitpbXBvcnQgamF2YXgubmFtaW5nLk5hbWluZ0V4Y2VwdGlvbjsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOw0KK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOw0KK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsNCitpbXBvcnQgb3JnLnhtbC5zYXguU0FYRXhjZXB0aW9uOw0KKw0KKy8qKg0KKyAqIFRoaXMgc2hvd3MgaG93IHRvIHRlc3QgdGhlIEpNUyBiaW5kaW5nIHVzaW5nIGEgc2ltcGxlIEhlbGxvV29ybGQgYXBwbGljYXRpb24uDQorICovDQorcHVibGljIGNsYXNzIEV4Y2VwdGlvbnNUZXN0Q2FzZSB7DQorDQorICAgIHByaXZhdGUgTm9kZSBub2RlOw0KKyAgICBwcml2YXRlIFNlc3Npb24gc2Vzc2lvbjsNCisgICAgcHJpdmF0ZSBJbml0aWFsQ29udGV4dCBjb250ZXh0Ow0KKyAgICBwcml2YXRlIENvbm5lY3Rpb24gY29ubmVjdGlvbjsNCisNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLRURfWE1MID0NCisgICAgICAgICI8bnMyOkNoZWNrZWRFeGNwZXRpb24geG1sbnM6bnMyPVwiaHR0cDovL2ptcy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvXCI+PG1lc3NhZ2U+Zm9vPC9tZXNzYWdlPjwvbnMyOkNoZWNrZWRFeGNwZXRpb24+IjsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLRURfTk9BUkdTX1hNTCA9ICI8bnMyOkNoZWNrZWRFeGNwZXRpb25Ob0FyZ3MgeG1sbnM6bnMyPVwiaHR0cDovL2ptcy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvXCIgLz4iOw0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ0hFQ0tFRF8yQVJHU19YTUwgPQ0KKyAgICAgICAgIjxuczI6Q2hlY2tlZEV4Y3BldGlvbjJBcmdzIHhtbG5zOm5zMj1cImh0dHA6Ly9qbXMuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnL1wiPjxtZXNzYWdlPmZvbzwvbWVzc2FnZT48L25zMjpDaGVja2VkRXhjcGV0aW9uMkFyZ3M+IjsNCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIENIRUNLRURfQ0hBSU5FRF9YTUwgPQ0KKyAgICAgICAgIjxuczI6Q2hlY2tlZEV4Y3BldGlvbkNoYWluZWQgeG1sbnM6bnMyPVwiaHR0cDovL2ptcy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvXCI+PG1lc3NhZ2U+amF2YS5sYW5nLkV4Y2VwdGlvbjogYmxhPC9tZXNzYWdlPjwvbnMyOkNoZWNrZWRFeGNwZXRpb25DaGFpbmVkPiI7DQorDQorICAgIEBCZWZvcmUNCisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsNCisgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoKS5zdGFydCgpOw0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RUZXh0Q2hlY2tlZCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQorICAgICAgICBzZW5kSk1TVGV4dFJlcXVlc3QoInRocm93Q2hlY2tlZCIpOw0KKyAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZUpNU1Jlc3BvbnNlKCk7DQorICAgICAgICBhc3NlcnRYTUxFcXVhbChDSEVDS0VEX1hNTCwgKChUZXh0TWVzc2FnZSltKS5nZXRUZXh0KCkpOw0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RUZXh0Q2hlY2tlZE5vQXJncygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQorICAgICAgICBzZW5kSk1TVGV4dFJlcXVlc3QoInRocm93Q2hlY2tlZE5vQXJncyIpOw0KKyAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZUpNU1Jlc3BvbnNlKCk7DQorICAgICAgICBhc3NlcnRYTUxFcXVhbChDSEVDS0VEX05PQVJHU19YTUwsICgoVGV4dE1lc3NhZ2UpbSkuZ2V0VGV4dCgpKTsNCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0VGV4dENoZWNrZWQyQXJncygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQorICAgICAgICBzZW5kSk1TVGV4dFJlcXVlc3QoInRocm93Q2hlY2tlZDJBcmdzIik7DQorICAgICAgICBNZXNzYWdlIG0gPSByZWNlaXZlSk1TUmVzcG9uc2UoKTsNCisgICAgICAgIGFzc2VydFhNTEVxdWFsKENIRUNLRURfMkFSR1NfWE1MLCAoKFRleHRNZXNzYWdlKW0pLmdldFRleHQoKSk7DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdFRleHRDaGVja2VkQ2hhaW5lZCgpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiwgU0FYRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7DQorICAgICAgICBzZW5kSk1TVGV4dFJlcXVlc3QoInRocm93Q2hlY2tlZENoYWluZWQiKTsNCisgICAgICAgIE1lc3NhZ2UgbSA9IHJlY2VpdmVKTVNSZXNwb25zZSgpOw0KKyAgICAgICAgYXNzZXJ0WE1MRXF1YWwoQ0hFQ0tFRF9DSEFJTkVEX1hNTCwgKChUZXh0TWVzc2FnZSltKS5nZXRUZXh0KCkpOw0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RUZXh0VW5DaGVja2VkKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSk1TRXhjZXB0aW9uLCBTQVhFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsNCisgICAgICAgIHNlbmRKTVNUZXh0UmVxdWVzdCgidGhyb3dVbkNoZWNrZWQiKTsNCisgICAgICAgIE1lc3NhZ2UgbSA9IHJlY2VpdmVKTVNSZXNwb25zZSgpOw0KKyAgICAgICAgDQorICAgICAgICAvLyBGSVhNRTogd2hhdCBzaG91bGQgdGhlIHJlc3BvbnNlIG1lc3NhZ2UgYmUgZm9yIHVuY2hlY2tlZCBleGNlcHRpb25zIHdpdGggd2lyZUZvcm1hdC50ZXh0WE1MPz8/DQorICAgICAgICBPYmplY3QgbyA9ICgoT2JqZWN0TWVzc2FnZSltKS5nZXRPYmplY3QoKTsNCisgICAgICAgIGFzc2VydFRydWUobyBpbnN0YW5jZW9mIFJ1bnRpbWVFeGNlcHRpb24pOw0KKyAgICAgICAgYXNzZXJ0VHJ1ZSgoKFJ1bnRpbWVFeGNlcHRpb24pbykuZ2V0TWVzc2FnZSgpLnN0YXJ0c1dpdGgoIk1lc3NhZ2UgPSBibGEiKSk7DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdE9iamVjdENoZWNrZWQoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uLCBKTVNFeGNlcHRpb24gew0KKyAgICAgICAgc2VuZEpNU09iamVjdFJlcXVlc3QoInRocm93Q2hlY2tlZCIpOw0KKyAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZUpNU1Jlc3BvbnNlKCk7DQorICAgICAgICBPYmplY3QgbyA9ICgoT2JqZWN0TWVzc2FnZSltKS5nZXRPYmplY3QoKTsNCisgICAgICAgIGFzc2VydFRydWUobyBpbnN0YW5jZW9mIENoZWNrZWRFeGNwZXRpb24pOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb28iLCAoKENoZWNrZWRFeGNwZXRpb24pbykuZ2V0TWVzc2FnZSgpKTsNCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0T2JqZWN0Q2hlY2tlZE5vQXJncygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiB7DQorICAgICAgICBzZW5kSk1TT2JqZWN0UmVxdWVzdCgidGhyb3dDaGVja2VkTm9BcmdzIik7DQorICAgICAgICBNZXNzYWdlIG0gPSByZWNlaXZlSk1TUmVzcG9uc2UoKTsNCisgICAgICAgIE9iamVjdCBvID0gKChPYmplY3RNZXNzYWdlKW0pLmdldE9iamVjdCgpOw0KKyAgICAgICAgYXNzZXJ0VHJ1ZShvIGluc3RhbmNlb2YgQ2hlY2tlZEV4Y3BldGlvbk5vQXJncyk7DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdE9iamVjdENoZWNrZWQyQXJncygpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiB7DQorICAgICAgICBzZW5kSk1TT2JqZWN0UmVxdWVzdCgidGhyb3dDaGVja2VkMkFyZ3MiKTsNCisgICAgICAgIE1lc3NhZ2UgbSA9IHJlY2VpdmVKTVNSZXNwb25zZSgpOw0KKyAgICAgICAgT2JqZWN0IG8gPSAoKE9iamVjdE1lc3NhZ2UpbSkuZ2V0T2JqZWN0KCk7DQorICAgICAgICBhc3NlcnRUcnVlKG8gaW5zdGFuY2VvZiBDaGVja2VkRXhjcGV0aW9uMkFyZ3MpOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb28iLCAoKENoZWNrZWRFeGNwZXRpb24yQXJncylvKS5nZXRNZXNzYWdlKCkpOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJibGEiLCAoKENoZWNrZWRFeGNwZXRpb24yQXJncylvKS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdE9iamVjdENoZWNrZWRDaGFpbmVkKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSk1TRXhjZXB0aW9uIHsNCisgICAgICAgIHNlbmRKTVNPYmplY3RSZXF1ZXN0KCJ0aHJvd0NoZWNrZWRDaGFpbmVkIik7DQorICAgICAgICBNZXNzYWdlIG0gPSByZWNlaXZlSk1TUmVzcG9uc2UoKTsNCisgICAgICAgIE9iamVjdCBvID0gKChPYmplY3RNZXNzYWdlKW0pLmdldE9iamVjdCgpOw0KKyAgICAgICAgYXNzZXJ0VHJ1ZShvIGluc3RhbmNlb2YgQ2hlY2tlZEV4Y3BldGlvbkNoYWluZWQpOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJibGEiLCAoKENoZWNrZWRFeGNwZXRpb25DaGFpbmVkKW8pLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsNCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0T2JqZWN0VW5DaGVja2VkKCkgdGhyb3dzIE5hbWluZ0V4Y2VwdGlvbiwgSk1TRXhjZXB0aW9uIHsNCisgICAgICAgIHNlbmRKTVNPYmplY3RSZXF1ZXN0KCJ0aHJvd1VuQ2hlY2tlZCIpOw0KKyAgICAgICAgTWVzc2FnZSBtID0gcmVjZWl2ZUpNU1Jlc3BvbnNlKCk7DQorICAgICAgICBPYmplY3QgbyA9ICgoT2JqZWN0TWVzc2FnZSltKS5nZXRPYmplY3QoKTsNCisgICAgICAgIGFzc2VydFRydWUobyBpbnN0YW5jZW9mIFJ1bnRpbWVFeGNlcHRpb24pOw0KKyAgICAgICAgYXNzZXJ0VHJ1ZSgoKFJ1bnRpbWVFeGNlcHRpb24pbykuZ2V0TWVzc2FnZSgpLnN0YXJ0c1dpdGgoIk1lc3NhZ2UgPSBibGEiKSk7DQorICAgIH0NCisNCisgICAgQEFmdGVyDQorICAgIHB1YmxpYyB2b2lkIGVuZCgpIHRocm93cyBKTVNFeGNlcHRpb24gew0KKyAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgew0KKyAgICAgICAgICAgIG5vZGUuc3RvcCgpOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNvbm5lY3Rpb24gIT0gbnVsbCkgew0KKyAgICAgICAgICAgIGNvbm5lY3Rpb24uY2xvc2UoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBwcml2YXRlIHZvaWQgc2VuZEpNU1RleHRSZXF1ZXN0KFN0cmluZyBvcGVyYXRpb25OYW1lKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uLCBKTVNFeGNlcHRpb24gew0KKyAgICAgICAgY29udGV4dCA9IG5ldyBJbml0aWFsQ29udGV4dChuZXcgUHJvcGVydGllcygpKTsNCisgICAgICAgIENvbm5lY3Rpb25GYWN0b3J5IGNmID0gKENvbm5lY3Rpb25GYWN0b3J5KWNvbnRleHQubG9va3VwKCJDb25uZWN0aW9uRmFjdG9yeSIpOw0KKyAgICAgICAgY29ubmVjdGlvbiA9IGNmLmNyZWF0ZUNvbm5lY3Rpb24oKTsNCisgICAgICAgIGNvbm5lY3Rpb24uc3RhcnQoKTsNCisNCisgICAgICAgIHNlc3Npb24gPSBjb25uZWN0aW9uLmNyZWF0ZVNlc3Npb24oZmFsc2UsIFNlc3Npb24uQVVUT19BQ0tOT1dMRURHRSk7DQorICAgICAgICBEZXN0aW5hdGlvbiB0b0Rlc3QgPSAoRGVzdGluYXRpb24pY29udGV4dC5sb29rdXAoIlRleHRFeGNlcHRpb25TZXJ2aWNlIik7DQorDQorICAgICAgICBUZXh0TWVzc2FnZSBtID0gc2Vzc2lvbi5jcmVhdGVUZXh0TWVzc2FnZSgpOw0KKyAgICAgICAgbS5zZXRTdHJpbmdQcm9wZXJ0eSgic2NhT3BlcmF0aW9uTmFtZSIsIG9wZXJhdGlvbk5hbWUpOw0KKyAgICAgICAgbS5zZXRKTVNSZXBseVRvKChEZXN0aW5hdGlvbiljb250ZXh0Lmxvb2t1cCgiUmVzcG9uc2VRdWV1ZSIpKTsNCisgICAgICAgIG0uc2V0VGV4dCgiPF9uc186IiArIG9wZXJhdGlvbk5hbWUgKyAiIHhtbG5zOl9uc189XCJodHRwOi8vam1zLmJpbmRpbmcuc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy9cIiAvPiIpOw0KKw0KKyAgICAgICAgTWVzc2FnZVByb2R1Y2VyIHByb2R1Y2VyID0gc2Vzc2lvbi5jcmVhdGVQcm9kdWNlcih0b0Rlc3QpOw0KKyAgICAgICAgcHJvZHVjZXIuc2VuZChtKTsNCisgICAgfQ0KKw0KKyAgICBwcml2YXRlIHZvaWQgc2VuZEpNU09iamVjdFJlcXVlc3QoU3RyaW5nIG9wZXJhdGlvbk5hbWUpIHRocm93cyBOYW1pbmdFeGNlcHRpb24sIEpNU0V4Y2VwdGlvbiB7DQorICAgICAgICBjb250ZXh0ID0gbmV3IEluaXRpYWxDb250ZXh0KG5ldyBQcm9wZXJ0aWVzKCkpOw0KKyAgICAgICAgQ29ubmVjdGlvbkZhY3RvcnkgY2YgPSAoQ29ubmVjdGlvbkZhY3RvcnkpY29udGV4dC5sb29rdXAoIkNvbm5lY3Rpb25GYWN0b3J5Iik7DQorICAgICAgICBjb25uZWN0aW9uID0gY2YuY3JlYXRlQ29ubmVjdGlvbigpOw0KKyAgICAgICAgY29ubmVjdGlvbi5zdGFydCgpOw0KKw0KKyAgICAgICAgc2Vzc2lvbiA9IGNvbm5lY3Rpb24uY3JlYXRlU2Vzc2lvbihmYWxzZSwgU2Vzc2lvbi5BVVRPX0FDS05PV0xFREdFKTsNCisgICAgICAgIERlc3RpbmF0aW9uIHRvRGVzdCA9IChEZXN0aW5hdGlvbiljb250ZXh0Lmxvb2t1cCgiT2JqZWN0RXhjZXB0aW9uU2VydmljZSIpOw0KKw0KKyAgICAgICAgT2JqZWN0TWVzc2FnZSBtID0gc2Vzc2lvbi5jcmVhdGVPYmplY3RNZXNzYWdlKCk7DQorICAgICAgICBtLnNldFN0cmluZ1Byb3BlcnR5KCJzY2FPcGVyYXRpb25OYW1lIiwgb3BlcmF0aW9uTmFtZSk7DQorICAgICAgICBtLnNldEpNU1JlcGx5VG8oKERlc3RpbmF0aW9uKWNvbnRleHQubG9va3VwKCJSZXNwb25zZVF1ZXVlIikpOw0KKyAgICAgICAgbS5zZXRPYmplY3QobmV3IE9iamVjdFswXSk7DQorDQorICAgICAgICBNZXNzYWdlUHJvZHVjZXIgcHJvZHVjZXIgPSBzZXNzaW9uLmNyZWF0ZVByb2R1Y2VyKHRvRGVzdCk7DQorICAgICAgICBwcm9kdWNlci5zZW5kKG0pOw0KKyAgICB9DQorDQorICAgIHByaXZhdGUgTWVzc2FnZSByZWNlaXZlSk1TUmVzcG9uc2UoKSB0aHJvd3MgTmFtaW5nRXhjZXB0aW9uLCBKTVNFeGNlcHRpb24gew0KKyAgICAgICAgRGVzdGluYXRpb24gcmVwbHlEZXN0ID0gKERlc3RpbmF0aW9uKWNvbnRleHQubG9va3VwKCJSZXNwb25zZVF1ZXVlIik7DQorICAgICAgICBNZXNzYWdlQ29uc3VtZXIgY29uc3VtZXIgPSBzZXNzaW9uLmNyZWF0ZUNvbnN1bWVyKHJlcGx5RGVzdCk7DQorICAgICAgICBNZXNzYWdlIG0gPSBjb25zdW1lci5yZWNlaXZlKDUwMDApOw0KKyAgICAgICAgaWYgKG0gPT0gbnVsbCkgew0KKyAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJObyByZXBseSBtZXNzYWdlIHJlY2VpdmVkIik7DQorICAgICAgICB9DQorICAgICAgICByZXR1cm4gbTsNCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDMxZDc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvcG9tLnhtbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZXhjZXB0aW9uczE8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgd2l0aCBFeGNlcHRpb25zMTwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DaGVja2VkRXhjcGV0aW9uLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2hlY2tlZEV4Y3BldGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb24uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DaGVja2VkRXhjcGV0aW9uMkFyZ3MuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DaGVja2VkRXhjcGV0aW9uMkFyZ3MuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DaGVja2VkRXhjcGV0aW9uMkFyZ3MuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb24yQXJncy5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb25DaGFpbmVkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2hlY2tlZEV4Y3BldGlvbkNoYWluZWQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DaGVja2VkRXhjcGV0aW9uQ2hhaW5lZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2hlY2tlZEV4Y3BldGlvbkNoYWluZWQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DaGVja2VkRXhjcGV0aW9uTm9BcmdzLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2hlY2tlZEV4Y3BldGlvbk5vQXJncy5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb25Ob0FyZ3MuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NoZWNrZWRFeGNwZXRpb25Ob0FyZ3MuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9FeGNlcHRpb25TZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXhjZXB0aW9uU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvblNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvblNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9FeGNlcHRpb25TZXJ2aWNlQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXhjZXB0aW9uU2VydmljZUNsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvblNlcnZpY2VDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvblNlcnZpY2VDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9FeGNlcHRpb25TZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvblNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXhjZXB0aW9uU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvblNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vcmVzb3VyY2VzL2V4Y2VwdGlvbnMvY2xpZW50LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL3Jlc291cmNlcy9leGNlcHRpb25zL2NsaWVudC5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODY0NTFkYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL3Jlc291cmNlcy9leGNlcHRpb25zL2NsaWVudC5jb21wb3NpdGUKQEAgLTAsMCArMSwzMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgLS0+DQorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiDQorICAgICAgICAgICBuYW1lPSJFeGNlcHRpb25DbGllbnRDb21wb3NpdGUiPg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkV4Y2VwdGlvblNlcnZpY2VDbGllbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuRXhjZXB0aW9uU2VydmljZUNsaWVudCIvPg0KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJzZXJ2aWNlIj4NCisgICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6am5kaTpFeGNlcHRpb25TZXJ2aWNlIiAvPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9yZXNvdXJjZXMvZXhjZXB0aW9ucy9zZXJ2aWNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL3Jlc291cmNlcy9leGNlcHRpb25zL3NlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vcmVzb3VyY2VzL2V4Y2VwdGlvbnMvc2VydmljZS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2V4Y2VwdGlvbnMxL3NyYy9tYWluL3Jlc291cmNlcy9leGNlcHRpb25zL3NlcnZpY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzg3NWI1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisjIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisjIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorIyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisjIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyMjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyMgDQorIyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyMgDQorIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyMjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgU1RBUlQgU05JUFBFVDogam5kaQ0KKw0KK2phdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCA9IG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeQ0KKw0KKyMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGNvbm5lY3Rvcg0KK2phdmEubmFtaW5nLnByb3ZpZGVyLnVybCA9IHZtOi8vbG9jYWxob3N0P2Jyb2tlci5wZXJzaXN0ZW50PWZhbHNlDQorDQorIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBKTkRJIG5hbWUgdGhlIGNvbm5lY3Rpb24gZmFjdG9yeQ0KKyMgc2hvdWxkIGFwcGVhciBhcy4gDQorI2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBjb25uZWN0aW9uRmFjdG9yeSwgcXVldWVDb25uZWN0aW9uRmFjdG9yeSwgdG9waWNDb25uZWN0aW9uRmFjdHJ5DQorY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IENvbm5lY3Rpb25GYWN0b3J5DQorDQorIyByZWdpc3RlciBzb21lIHF1ZXVlcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQorIyBxdWV1ZS5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCitxdWV1ZS5FeGNlcHRpb25TZXJ2aWNlID0gRXhjZXB0aW9uU2VydmljZQ0KKw0KKyMgcmVnaXN0ZXIgc29tZSB0b3BpY3MgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KKyMgdG9waWMuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQorI3RvcGljLk15VG9waWMgPSBleGFtcGxlLk15VG9waWMNCisNCisjIEVORCBTTklQUEVUOiBqbmRpDQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvbnNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZXhjZXB0aW9uczEvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4Y2VwdGlvbnNUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkM2E1NTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leGNlcHRpb25zMS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXhjZXB0aW9uc1Rlc3RDYXNlLmphdmEKQEAgLTAsMCArMSwxMTEgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXM7DQorDQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsNCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOw0KK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOw0KK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsNCisNCisvKioNCisgKiBUaGlzIHNob3dzIGhvdyB0byB0ZXN0IHRoZSBKTVMgYmluZGluZyB1c2luZyBhIHNpbXBsZSBIZWxsb1dvcmxkIGFwcGxpY2F0aW9uLg0KKyAqLw0KK3B1YmxpYyBjbGFzcyBFeGNlcHRpb25zVGVzdENhc2Ugew0KKw0KKyAgICBwcml2YXRlIHN0YXRpYyBOb2RlIG5vZGU7DQorDQorICAgIEBCZWZvcmUNCisgICAgcHVibGljIHZvaWQgaW5pdCgpIHsNCisgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoKS5zdGFydCgpOw0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RDaGVja2VkKCkgew0KKyAgICAgICAgRXhjZXB0aW9uU2VydmljZSBzZXJ2aWNlID0gbm9kZS5nZXRTZXJ2aWNlKEV4Y2VwdGlvblNlcnZpY2UuY2xhc3MsICJFeGNlcHRpb25TZXJ2aWNlQ2xpZW50Iik7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIHNlcnZpY2UudGhyb3dDaGVja2VkKCk7DQorICAgICAgICAgICAgZmFpbCgpOw0KKyAgICAgICAgfSBjYXRjaCAoQ2hlY2tlZEV4Y3BldGlvbiBlKSB7DQorICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKCJmb28iLCBlLmdldE1lc3NhZ2UoKSk7DQorICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgZSkgew0KKyAgICAgICAgICAgIGZhaWwoKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tlZE5vQXJncygpIHsNCisgICAgICAgIEV4Y2VwdGlvblNlcnZpY2Ugc2VydmljZSA9IG5vZGUuZ2V0U2VydmljZShFeGNlcHRpb25TZXJ2aWNlLmNsYXNzLCAiRXhjZXB0aW9uU2VydmljZUNsaWVudCIpOw0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICBzZXJ2aWNlLnRocm93Q2hlY2tlZE5vQXJncygpOw0KKyAgICAgICAgICAgIGZhaWwoKTsNCisgICAgICAgIH0gY2F0Y2ggKENoZWNrZWRFeGNwZXRpb25Ob0FyZ3MgZSkgew0KKyAgICAgICAgICAgIC8vIG9rDQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdENoZWNrZWQyQXJncygpIHsNCisgICAgICAgIEV4Y2VwdGlvblNlcnZpY2Ugc2VydmljZSA9IG5vZGUuZ2V0U2VydmljZShFeGNlcHRpb25TZXJ2aWNlLmNsYXNzLCAiRXhjZXB0aW9uU2VydmljZUNsaWVudCIpOw0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICBzZXJ2aWNlLnRocm93Q2hlY2tlZDJBcmdzKCk7DQorICAgICAgICAgICAgZmFpbCgpOw0KKyAgICAgICAgfSBjYXRjaCAoQ2hlY2tlZEV4Y3BldGlvbjJBcmdzIGUpIHsNCisgICAgICAgICAgICBhc3NlcnRFcXVhbHMoImZvbyIsIGUuZ2V0TWVzc2FnZSgpKTsNCisvLyBGSVhNRTogVFVTQ0FOWS0yODQ4OiBsb3N0IHRoZSBjYXVzZSEgICAgICAgICAgICANCisvLyAgICAgICAgICAgIGFzc2VydE5vdE51bGwoZS5nZXRDYXVzZSgpKTsNCisvLyAgICAgICAgICAgIGFzc2VydEVxdWFscygiYmxhIiwgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdENoZWNrZWRDaGFpbmVkKCkgew0KKyAgICAgICAgRXhjZXB0aW9uU2VydmljZSBzZXJ2aWNlID0gbm9kZS5nZXRTZXJ2aWNlKEV4Y2VwdGlvblNlcnZpY2UuY2xhc3MsICJFeGNlcHRpb25TZXJ2aWNlQ2xpZW50Iik7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIHNlcnZpY2UudGhyb3dDaGVja2VkQ2hhaW5lZCgpOw0KKyAgICAgICAgICAgIGZhaWwoKTsNCisgICAgICAgIH0gY2F0Y2ggKENoZWNrZWRFeGNwZXRpb25DaGFpbmVkIGUpIHsNCisgICAgICAgICAvLyBGSVhNRTogVFVTQ0FOWS0yODQ4OiBsb3N0IHRoZSBjYXVzZSEgICAgICAgICAgICANCisvLyAgICAgICAgICAgIGFzc2VydE5vdE51bGwoZS5nZXRDYXVzZSgpKTsNCisvLyAgICAgICAgICAgIGFzc2VydEVxdWFscygiYmxhIiwgZS5nZXRDYXVzZSgpLmdldE1lc3NhZ2UoKSk7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdFVuQ2hlY2tlZCgpIHsNCisgICAgICAgIEV4Y2VwdGlvblNlcnZpY2Ugc2VydmljZSA9IG5vZGUuZ2V0U2VydmljZShFeGNlcHRpb25TZXJ2aWNlLmNsYXNzLCAiRXhjZXB0aW9uU2VydmljZUNsaWVudCIpOw0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICBzZXJ2aWNlLnRocm93VW5DaGVja2VkKCk7DQorICAgICAgICAgICAgZmFpbCgpOw0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICBhc3NlcnRUcnVlKGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkuc3RhcnRzV2l0aCgiTWVzc2FnZSA9IGJsYSIpKTsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICBAQWZ0ZXINCisgICAgcHVibGljIHZvaWQgZW5kKCkgew0KKyAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkgew0KKyAgICAgICAgICAgIG5vZGUuc3RvcCgpOw0KKyAgICAgICAgfQ0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTM0MDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1leHRlcm5hbC1icm9rZXI8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgd2l0aCBFeHRlcm5hbCBKTVMgQnJva2VyPC9uYW1lPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZENsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZENsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvc3JjL21haW4vcmVzb3VyY2VzL2V4dGVybmFsL2NsaWVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9yZXNvdXJjZXMvZXh0ZXJuYWwvY2xpZW50LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL3Jlc291cmNlcy9leHRlcm5hbC9jbGllbnQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9yZXNvdXJjZXMvZXh0ZXJuYWwvY2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL3Jlc291cmNlcy9leHRlcm5hbC9zZXJ2aWNlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL3Jlc291cmNlcy9leHRlcm5hbC9zZXJ2aWNlLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL3Jlc291cmNlcy9leHRlcm5hbC9zZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvc3JjL21haW4vcmVzb3VyY2VzL2V4dGVybmFsL3NlcnZpY2UuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZXh0ZXJuYWxCcm9rZXIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0V4dGVybmFsQnJva2VyVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2V4dGVybmFsQnJva2VyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9FeHRlcm5hbEJyb2tlclRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXh0ZXJuYWxCcm9rZXJUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9leHRlcm5hbEJyb2tlci9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvRXh0ZXJuYWxCcm9rZXJUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjNDY0ZTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvcG9tLnhtbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZm9ybWF0LWptc2J5dGVzPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIE1lc3NhZ2UgRm9ybWF0IGptc2J5dGVzPC9uYW1lPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vcmVzb3VyY2VzL2ptc2J5dGVzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL3Jlc291cmNlcy9qbXNieXRlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvam1zYnl0ZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvam1zYnl0ZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlcy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TQnl0ZXNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TQnl0ZXNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TQnl0ZXNUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNCeXRlc1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyOGIxNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1mb3JtYXQtam1zYnl0ZXN4bWw8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTWVzc2FnZSBGb3JtYXQgam1zYnl0ZXN4bWw8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlc3htbC9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlc3htbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlc3htbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlc3htbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlc3htbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL21haW4vcmVzb3VyY2VzL2ptc2J5dGVzeG1sL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL3Jlc291cmNlcy9qbXNieXRlc3htbC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TQnl0ZXNYTUxUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TQnl0ZXNYTUxUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TQnl0ZXNYTUxUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNCeXRlc1hNTFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2J5dGVzeG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zYnl0ZXN4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNieXRlc3htbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmOTQ1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3BvbS54bWwKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LWptczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLWZvcm1hdC1qbXNkZWZhdWx0PC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIE1lc3NhZ2UgRm9ybWF0IGptc2RlZmF1bHQ8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvUGVyc29uLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9QZXJzb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL1BlcnNvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9QZXJzb24uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zZGVmYXVsdC9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL3Jlc291cmNlcy9qbXNkZWZhdWx0L2hlbGxvd29ybGQuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Mjg1YWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zZGVmYXVsdC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDk0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiDQorICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCisgICAgeG1sbnM6aHc9Imh0dHA6Ly9oZWxsb3dvcmxkIg0KKyAgICBuYW1lPSJoZWxsb3dvcmxkIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkUmVmZXJlbmNlQ29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdC5qbXNkZWZhdWx0LmhlbGxvd29ybGQuSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwiIC8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImhlbGxvV29ybGRTZXJ2aWNlMSIgPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcz4NCisgICAgICAgICAgICAgICAgPGRlc3RpbmF0aW9uIGpuZGlOYW1lPSJIZWxsb1dvcmxkU2VydmljZTEiLz4NCisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+ICANCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iaGVsbG9Xb3JsZFNlcnZpY2UyIiA+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zPg0KKyAgICAgICAgICAgICAgICA8d2lyZUZvcm1hdC5qbXNEZWZhdWx0Lz4NCisgICAgICAgICAgICAgICAgPGRlc3RpbmF0aW9uIGpuZGlOYW1lPSJIZWxsb1dvcmxkU2VydmljZTIiLz4NCisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImhlbGxvV29ybGRTZXJ2aWNlMyIgPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcz4NCisgICAgICAgICAgICAgICAgPHdpcmVGb3JtYXQuam1zRGVmYXVsdC8+DQorICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UzIi8+DQorICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCisgICAgICAgIDwvcmVmZXJlbmNlPiANCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0iaGVsbG9Xb3JsZFNlcnZpY2U0IiA+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zPg0KKyAgICAgICAgICAgICAgICA8d2lyZUZvcm1hdC5qbXNEZWZhdWx0Lz4NCisgICAgICAgICAgICAgICAgPGRlc3RpbmF0aW9uIGpuZGlOYW1lPSJIZWxsb1dvcmxkU2VydmljZTQiLz4NCisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+IA0KKyAgICA8L2NvbXBvbmVudD4NCisgICAgDQorICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2VDb21wb25lbnQxIj4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdC5qbXNkZWZhdWx0LmhlbGxvd29ybGQuSGVsbG9Xb3JsZFNlcnZpY2VJbXBsIiAvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcz4NCisgICAgICAgICAgICAgICAgPGRlc3RpbmF0aW9uIGpuZGlOYW1lPSJIZWxsb1dvcmxkU2VydmljZTEiLz4NCisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KKyAgICAgICAgPC9zZXJ2aWNlPg0KKyAgICA8L2NvbXBvbmVudD4gDQorICAgIA0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlQ29tcG9uZW50MiI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5mb3JtYXQuam1zZGVmYXVsdC5oZWxsb3dvcmxkLkhlbGxvV29ybGRTZXJ2aWNlSW1wbCIgLz4NCisgICAgICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIj4NCisgICAgICAgICAgICA8aW50ZXJmYWNlLmphdmEgaW50ZXJmYWNlPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdC5qbXNkZWZhdWx0LmhlbGxvd29ybGQuSGVsbG9Xb3JsZFNlcnZpY2UiIC8+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zPg0KKyAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlMiIvPg0KKyAgICAgICAgICAgIDwvYmluZGluZy5qbXM+DQorICAgICAgICA8L3NlcnZpY2U+DQorICAgIDwvY29tcG9uZW50PiAgICANCisgICAgICAgIA0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlQ29tcG9uZW50MyI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5mb3JtYXQuam1zZGVmYXVsdC5oZWxsb3dvcmxkLkhlbGxvV29ybGRTZXJ2aWNlSW1wbCIgLz4NCisJICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIj4NCisJICAgICAgICA8IS0taW50ZXJmYWNlLndzZGwgaW50ZXJmYWNlPSJodHRwOi8vaGVsbG93b3JsZC90ZXh0eG1sI3dzZGwuaW50ZXJmYWNlKEhlbGxvV29ybGQpIiAvLS0+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zPg0KKyAgICAgICAgICAgICAgICA8d2lyZUZvcm1hdC5qbXNEZWZhdWx0IC8+DQorICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UzIi8+DQorICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCisJICAgIDwvc2VydmljZT4NCisgICAgPC9jb21wb25lbnQ+DQorICAgIA0KKyAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlQ29tcG9uZW50NCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5mb3JtYXQuam1zZGVmYXVsdC5oZWxsb3dvcmxkLkhlbGxvV29ybGRTZXJ2aWNlSW1wbCIgLz4NCisgICAgICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIj4NCisgICAgICAgICAgICA8IS0taW50ZXJmYWNlLndzZGwgaW50ZXJmYWNlPSJodHRwOi8vaGVsbG93b3JsZC90ZXh0eG1sI3dzZGwuaW50ZXJmYWNlKEhlbGxvV29ybGQpIiAvLS0+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zPg0KKyAgICAgICAgICAgICAgICA8d2lyZUZvcm1hdC5qbXNEZWZhdWx0IC8+DQorICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2U0Ii8+DQorICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCisgICAgICAgIDwvc2VydmljZT4NCisgICAgPC9jb21wb25lbnQ+ICAgIA0KKyAgICANCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vcmVzb3VyY2VzL2ptc2RlZmF1bHQvaGVsbG93b3JsZC53c2RsIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vcmVzb3VyY2VzL2ptc2RlZmF1bHQvaGVsbG93b3JsZC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vcmVzb3VyY2VzL2ptc2RlZmF1bHQvaGVsbG93b3JsZC53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zZGVmYXVsdC9oZWxsb3dvcmxkLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zZGVmYXVsdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L0Zvcm1hdEpNU0RlZmF1bHRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc2RlZmF1bHQvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNEZWZhdWx0VGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TRGVmYXVsdFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNkZWZhdWx0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TRGVmYXVsdFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNTdmMzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1mb3JtYXQtam1zbWVzc2FnZTwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBNZXNzYWdlIEZvcm1hdCBqbXNtZXNzYWdlPC9uYW1lPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZVNpZGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlU2lkZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2VTaWRlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlU2lkZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvUkVBRE1FIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvUkVBRE1FCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9SRUFETUUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9qbXNtZXNzYWdlL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL2ptc21lc3NhZ2UvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvam1zbWVzc2FnZS9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL2ptc21lc3NhZ2UvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvam1zbWVzc2FnZS9oZWxsb3dvcmxkLndzZGwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvam1zbWVzc2FnZS9oZWxsb3dvcmxkLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvam1zbWVzc2FnZS9oZWxsb3dvcmxkLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9qbXNtZXNzYWdlL2hlbGxvd29ybGQud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNtZXNzYWdlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TTWVzc2FnZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zbWVzc2FnZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L0Zvcm1hdEpNU01lc3NhZ2VUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNNZXNzYWdlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc21lc3NhZ2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNNZXNzYWdlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMDQzYzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3BvbS54bWwKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LWptczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLWZvcm1hdC1qbXNvYmplY3Q8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTWVzc2FnZSBGb3JtYXQgam1zb2JqZWN0PC9uYW1lPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRkNGEwMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCkBAIC0wLDAgKzEsMTEyIEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdC5qbXNvYmplY3QuaGVsbG93b3JsZDsNCisNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuYW5ub3RhdGlvbi5SZWZlcmVuY2U7DQorDQorDQorcHVibGljIGNsYXNzIEhlbGxvV29ybGRSZWZlcmVuY2VJbXBsIGltcGxlbWVudHMgSGVsbG9Xb3JsZFJlZmVyZW5jZSB7DQorICAgIA0KKyAgICBAUmVmZXJlbmNlDQorICAgIHByb3RlY3RlZCBIZWxsb1dvcmxkU2VydmljZSBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGU7DQorICAgIA0KKyAgICBAUmVmZXJlbmNlDQorICAgIHByb3RlY3RlZCBIZWxsb1dvcmxkU2VydmljZSBoZWxsb1dvcmxkU2VydmljZURvbnRXcmFwU2luZ2xlOw0KKyAgICANCisgICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZ3NXcmFwU2luZ2xlKFN0cmluZyBmaXJzdE5hbWUsIFN0cmluZyBsYXN0TmFtZSl7IA0KKyAgICAJUGVyc29uIHBlcnNvbiA9IG5ldyBQZXJzb24oKTsNCisgICAgCXBlcnNvbi5zZXRGaXJzdE5hbWUoZmlyc3ROYW1lKTsNCisgICAgCXBlcnNvbi5zZXRMYXN0TmFtZShsYXN0TmFtZSk7DQorICAgIAkNCisgICAgCVN0cmluZyByZXR1cm5TdHJpbmcgPSAiIjsNCisgICAgCQ0KKyAgICAgICAgUGVyc29uIHJldHVyblBlcnNvbiA9ICBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGUuZ2V0UGVyc29uR3JlZXRpbmdzKHBlcnNvbik7DQorICAgICAgICByZXR1cm5TdHJpbmcgPSByZXR1cm5QZXJzb24uZ2V0Rmlyc3ROYW1lKCkgKyAiICIgKyByZXR1cm5QZXJzb24uZ2V0TGFzdE5hbWUoKTsNCisgICAgICAgIA0KKyAgICAgICAgUGVyc29uIHJldHVybk51bGxQZXJzb24gPSBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGUuZ2V0TnVsbFJldHVybkdyZWV0aW5ncyhwZXJzb24pOyANCisgICAgICAgIA0KKyAgICAgICAgaWYgKHJldHVybk51bGxQZXJzb24gPT0gbnVsbCl7DQorICAgICAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgSGVsbG8yIG51bGwiOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBTdHJpbmcgcmV0dXJuR3JlZXRpbmcgPSBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGUuZ2V0QXJyYXlHcmVldGluZyhuZXcgU3RyaW5nW117Zmlyc3ROYW1lLCBsYXN0TmFtZX0pOw0KKyAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOw0KKyAgICAgICAgDQorICAgICAgICByZXR1cm5HcmVldGluZyA9IGhlbGxvV29ybGRTZXJ2aWNlV3JhcFNpbmdsZS5nZXRNdWx0aUFycmF5R3JlZXRpbmdzKG5ldyBTdHJpbmdbXXtmaXJzdE5hbWUsIGZpcnN0TmFtZX0sbmV3IFN0cmluZ1tde2xhc3ROYW1lLCBsYXN0TmFtZX0pOw0KKyAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOw0KKyAgICAgICAgDQorICAgICAgICByZXR1cm5HcmVldGluZyA9IGhlbGxvV29ybGRTZXJ2aWNlV3JhcFNpbmdsZS5nZXRNdWx0aUdyZWV0aW5ncyhmaXJzdE5hbWUsIGxhc3ROYW1lKTsNCisgICAgICAgIHJldHVyblN0cmluZyArPSAiICIgKyByZXR1cm5HcmVldGluZzsgICAgICAgIA0KKw0KKyAgICAgICAgcmV0dXJuR3JlZXRpbmcgPSBoZWxsb1dvcmxkU2VydmljZVdyYXBTaW5nbGUuZ2V0T2JqZWN0R3JlZXRpbmcocGVyc29uKTsNCisgICAgICAgIHJldHVyblN0cmluZyArPSAiICIgKyByZXR1cm5HcmVldGluZzsgDQorICAgICAgICANCisgICAgICAgIHJldHVybkdyZWV0aW5nID0gaGVsbG9Xb3JsZFNlcnZpY2VXcmFwU2luZ2xlLmdldE9iamVjdEFycmF5R3JlZXRpbmcobmV3IE9iamVjdFtde3BlcnNvbn0pOw0KKyAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOyAgICAgIA0KKyAgICAgICAgDQorICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nOw0KKyAgICB9ICANCisgICAgDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JlZXRpbmdzRG9udFdyYXBTaW5nbGUoU3RyaW5nIGZpcnN0TmFtZSwgU3RyaW5nIGxhc3ROYW1lKXsgDQorICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbigpOw0KKyAgICAgICAgcGVyc29uLnNldEZpcnN0TmFtZShmaXJzdE5hbWUpOw0KKyAgICAgICAgcGVyc29uLnNldExhc3ROYW1lKGxhc3ROYW1lKTsNCisgICAgICAgIA0KKyAgICAgICAgU3RyaW5nIHJldHVyblN0cmluZyA9ICIiOw0KKyAgICAgICAgDQorICAgICAgICBQZXJzb24gcmV0dXJuUGVyc29uID0gIGhlbGxvV29ybGRTZXJ2aWNlRG9udFdyYXBTaW5nbGUuZ2V0UGVyc29uR3JlZXRpbmdzKHBlcnNvbik7DQorICAgICAgICByZXR1cm5TdHJpbmcgPSByZXR1cm5QZXJzb24uZ2V0Rmlyc3ROYW1lKCkgKyAiICIgKyByZXR1cm5QZXJzb24uZ2V0TGFzdE5hbWUoKTsNCisgICAgICAgIA0KKyAgICAgICAgUGVyc29uIHJldHVybk51bGxQZXJzb24gPSBoZWxsb1dvcmxkU2VydmljZURvbnRXcmFwU2luZ2xlLmdldE51bGxSZXR1cm5HcmVldGluZ3MocGVyc29uKTsgDQorICAgICAgICANCisgICAgICAgIGlmIChyZXR1cm5OdWxsUGVyc29uID09IG51bGwpew0KKyAgICAgICAgICAgIHJldHVyblN0cmluZyArPSAiIEhlbGxvMiBudWxsIjsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgU3RyaW5nIHJldHVybkdyZWV0aW5nID0gaGVsbG9Xb3JsZFNlcnZpY2VEb250V3JhcFNpbmdsZS5nZXRBcnJheUdyZWV0aW5nKG5ldyBTdHJpbmdbXXtmaXJzdE5hbWUsIGxhc3ROYW1lfSk7DQorICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiAiICsgcmV0dXJuR3JlZXRpbmc7DQorICAgICAgICANCisgICAgICAgIHJldHVybkdyZWV0aW5nID0gaGVsbG9Xb3JsZFNlcnZpY2VEb250V3JhcFNpbmdsZS5nZXRNdWx0aUFycmF5R3JlZXRpbmdzKG5ldyBTdHJpbmdbXXtmaXJzdE5hbWUsIGZpcnN0TmFtZX0sbmV3IFN0cmluZ1tde2xhc3ROYW1lLCBsYXN0TmFtZX0pOw0KKyAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOw0KKyAgICAgICAgDQorICAgICAgICByZXR1cm5HcmVldGluZyA9IGhlbGxvV29ybGRTZXJ2aWNlRG9udFdyYXBTaW5nbGUuZ2V0TXVsdGlHcmVldGluZ3MoZmlyc3ROYW1lLCBsYXN0TmFtZSk7DQorICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiAiICsgcmV0dXJuR3JlZXRpbmc7ICAgICAgICANCisNCisgICAgICAgIHJldHVybkdyZWV0aW5nID0gaGVsbG9Xb3JsZFNlcnZpY2VEb250V3JhcFNpbmdsZS5nZXRPYmplY3RHcmVldGluZyhwZXJzb24pOw0KKyAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOyANCisgICAgICAgIA0KKyAgICAgICAgcmV0dXJuR3JlZXRpbmcgPSBoZWxsb1dvcmxkU2VydmljZURvbnRXcmFwU2luZ2xlLmdldE9iamVjdEFycmF5R3JlZXRpbmcobmV3IE9iamVjdFtde3BlcnNvbn0pOw0KKyAgICAgICAgcmV0dXJuU3RyaW5nICs9ICIgIiArIHJldHVybkdyZWV0aW5nOw0KKyAgICAgICAgDQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIGhlbGxvV29ybGRTZXJ2aWNlRG9udFdyYXBTaW5nbGUudGhyb3dDaGVja2VkKHBlcnNvbik7DQorICAgICAgICB9IGNhdGNoIChDaGVja2VkRXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiAiICsgZS5nZXRNZXNzYWdlKCk7DQorICAgICAgICB9DQorICAgICAgICANCisgICAgICAgIHRyeSB7DQorICAgICAgICAgICAgaGVsbG9Xb3JsZFNlcnZpY2VEb250V3JhcFNpbmdsZS50aHJvd1VuQ2hlY2tlZChwZXJzb24pOw0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICByZXR1cm5TdHJpbmcgKz0gIiAiICsgKGUuZ2V0Q2F1c2UoKS5nZXRNZXNzYWdlKCkuc3RhcnRzV2l0aCgiTWVzc2FnZSA9IGJsYSIpID8gImJsYSIgOiBlLmdldENhdXNlKCkuZ2V0TWVzc2FnZSgpKTsNCisgICAgICAgIH0gICAgICAgICAgIA0KKyAgICAgICAgDQorICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nOw0KKyAgICB9ICAgICANCit9DQorDQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9QZXJzb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9QZXJzb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9QZXJzb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL1BlcnNvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vcmVzb3VyY2VzL2ptc29iamVjdC9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vcmVzb3VyY2VzL2ptc29iamVjdC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL21haW4vcmVzb3VyY2VzL2ptc29iamVjdC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zb2JqZWN0L2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zb2JqZWN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TT2JqZWN0VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNPYmplY3RUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc29iamVjdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L0Zvcm1hdEpNU09iamVjdFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXNvYmplY3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNPYmplY3RUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzYzYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvcG9tLnhtbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtZm9ybWF0LWptc3RleHQ8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTWVzc2FnZSBGb3JtYXQgam1zdGV4dDwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL3Jlc291cmNlcy9qbXN0ZXh0L2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vcmVzb3VyY2VzL2ptc3RleHQvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zdGV4dC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vcmVzb3VyY2VzL2ptc3RleHQvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L0Zvcm1hdEpNU1RleHRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHQvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNUZXh0VGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TVGV4dFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TVGV4dFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMjdhNTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1mb3JtYXQtam1zdGV4dHhtbDwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBNZXNzYWdlIEZvcm1hdCBqbXN0ZXh0eG1sPC9uYW1lPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9QZXJzb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL1BlcnNvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvUGVyc29uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL1BlcnNvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zdGV4dHhtbC9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL3Jlc291cmNlcy9qbXN0ZXh0eG1sL2hlbGxvd29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vcmVzb3VyY2VzL2ptc3RleHR4bWwvaGVsbG93b3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL3Jlc291cmNlcy9qbXN0ZXh0eG1sL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vcmVzb3VyY2VzL2ptc3RleHR4bWwvaGVsbG93b3JsZC53c2RsIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vcmVzb3VyY2VzL2ptc3RleHR4bWwvaGVsbG93b3JsZC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vcmVzb3VyY2VzL2ptc3RleHR4bWwvaGVsbG93b3JsZC53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zdGV4dHhtbC9oZWxsb3dvcmxkLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L0Zvcm1hdEpNU1RleHRYTUxUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNUZXh0WE1MVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TVGV4dFhNTFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1sL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TVGV4dFhNTFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzMwODU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0PC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIE1lc3NhZ2UgRm9ybWF0IGptc3RleHR4bWxpbmptc29iamVjdG91dDwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlcy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXMvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlc3htbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlc3htbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlc3htbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNieXRlc3htbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zYnl0ZXN4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2J5dGVzeG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zZGVmYXVsdC9oZWxsb3dvcmxkL1BlcnNvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc2RlZmF1bHQvaGVsbG93b3JsZC9QZXJzb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvUGVyc29uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNkZWZhdWx0L2hlbGxvd29ybGQvUGVyc29uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2VTaWRlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlU2lkZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZVNpZGUuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlZmVyZW5jZVNpZGUuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNtZXNzYWdlL2hlbGxvd29ybGQvUkVBRE1FIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zbWVzc2FnZS9oZWxsb3dvcmxkL1JFQURNRQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc21lc3NhZ2UvaGVsbG93b3JsZC9SRUFETUUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXNvYmplY3QvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL1BlcnNvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL1BlcnNvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc29iamVjdC9oZWxsb3dvcmxkL1BlcnNvbi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zb2JqZWN0L2hlbGxvd29ybGQvUGVyc29uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvQ2hlY2tlZEV4Y2VwdGlvbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0NoZWNrZWRFeGNlcHRpb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9DaGVja2VkRXhjZXB0aW9uLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1sL2hlbGxvd29ybGQvUGVyc29uLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbC9oZWxsb3dvcmxkL1BlcnNvbi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9QZXJzb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWwvaGVsbG93b3JsZC9QZXJzb24uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvaGVsbG93b3JsZC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWxpbmptc29iamVjdG91dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWxpbmptc29iamVjdG91dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWxpbmptc29iamVjdG91dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWxpbmptc29iamVjdG91dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWxpbmptc29iamVjdG91dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvZm9ybWF0L2ptc3RleHR4bWxpbmptc29iamVjdG91dC9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L2hlbGxvd29ybGQvUGVyc29uLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L2hlbGxvd29ybGQvUGVyc29uLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L2hlbGxvd29ybGQvUGVyc29uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvaGVsbG93b3JsZC9QZXJzb24uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL3Jlc291cmNlcy9qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvaGVsbG93b3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL3Jlc291cmNlcy9qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL3Jlc291cmNlcy9qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvaGVsbG93b3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vcmVzb3VyY2VzL2ptc3RleHR4bWxpbmptc29iamVjdG91dC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vcmVzb3VyY2VzL2ptc3RleHR4bWxpbmptc29iamVjdG91dC9oZWxsb3dvcmxkLndzZGwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy9tYWluL3Jlc291cmNlcy9qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvaGVsbG93b3JsZC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L2hlbGxvd29ybGQud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9yZXNvdXJjZXMvam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L2hlbGxvd29ybGQud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvZm9ybWF0LWptc3RleHR4bWxpbmptc29iamVjdG91dC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TVGV4dFhNTEluSk1TT2JqZWN0T3V0VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL2Zvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL2Zvcm1hdC9Gb3JtYXRKTVNUZXh0WE1MSW5KTVNPYmplY3RPdXRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjNGQzY2IKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9mb3JtYXQtam1zdGV4dHhtbGluam1zb2JqZWN0b3V0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9mb3JtYXQvRm9ybWF0Sk1TVGV4dFhNTEluSk1TT2JqZWN0T3V0VGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDY0IEBACisvKg0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorICovDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdDsNCisNCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLmZvcm1hdC5qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQuaGVsbG93b3JsZC5IZWxsb1dvcmxkU2VydmljZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5mb3JtYXQuam1zdGV4dHhtbGluam1zb2JqZWN0b3V0LmhlbGxvd29ybGQuUGVyc29uOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGVGYWN0b3J5Ow0KK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7DQoraW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7DQoraW1wb3J0IG9yZy5qdW5pdC5JZ25vcmU7DQoraW1wb3J0IG9yZy5qdW5pdC5UZXN0Ow0KKw0KKw0KKy8qKg0KKyAqIFRoaXMgc2hvd3MgaG93IHRvIHRlc3QgdGhlIEpNUyBiaW5kaW5nIHVzaW5nIGEgc2ltcGxlIEhlbGxvV29ybGQgYXBwbGljYXRpb24uDQorICovDQorcHVibGljIGNsYXNzIEZvcm1hdEpNU1RleHRYTUxJbkpNU09iamVjdE91dFRlc3RDYXNlIHsNCisNCisgICAgcHJpdmF0ZSBzdGF0aWMgTm9kZSBub2RlOw0KKw0KKyAgICBAQmVmb3JlDQorICAgIHB1YmxpYyB2b2lkIGluaXQoKSB7DQorICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCkuc3RhcnQoKTsNCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBASWdub3JlKCJUVVNDQU5ZLTM2NTQiKQ0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0SGVsbG9Xb3JsZENyZWF0ZSgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgSGVsbG9Xb3JsZFNlcnZpY2UgaGVsbG9Xb3JsZFNlcnZpY2UgPSBub2RlLmdldFNlcnZpY2UoSGVsbG9Xb3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb1dvcmxkUmVmZXJlbmNlQ29tcG9uZW50Iik7DQorICAgICAgICANCisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gRnJlZCBCbG9nZ3MiLCBoZWxsb1dvcmxkU2VydmljZS5nZXRHcmVldGluZ3MoIkZyZWQgQmxvZ2dzIikpOw0KKyAgICAgICAgDQorICAgICAgICBQZXJzb24gcGVyc29uID0gbmV3IFBlcnNvbigpOw0KKyAgICAgICAgcGVyc29uLnNldEZpcnN0TmFtZSgiRnJlZCIpOw0KKyAgICAgICAgcGVyc29uLnNldExhc3ROYW1lKCJCbG9nZ3MiKTsNCisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gRnJlZCBCbG9nZ3MiLCBoZWxsb1dvcmxkU2VydmljZS5nZXRQZXJzb25HcmVldGluZ3MocGVyc29uKSk7DQorICAgIH0NCisNCisgICAgQEFmdGVyDQorICAgIHB1YmxpYyB2b2lkIGVuZCgpIHsNCisgICAgICAgIGlmIChub2RlICE9IG51bGwpIHsNCisgICAgICAgICAgICBub2RlLnN0b3AoKTsNCisgICAgICAgIH0NCisgICAgfQ0KK30NCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDgwYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvcG9tLnhtbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtbm9uLXNjYS1jbGllbnQtYnJva2VyPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIHdpdGggTm9uIFNDQSBDbGllbnQ8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5T2JqZWN0U2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheU9iamVjdFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlPYmplY3RTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlPYmplY3RTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5T2JqZWN0U2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlPYmplY3RTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheU9iamVjdFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlPYmplY3RTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzY5MGIxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpAQCAtMCwwICsxLDM5IEBACisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisjIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisjIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorIyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisjIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyMjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyMgDQorIyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyMgDQorIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyMjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgU1RBUlQgU05JUFBFVDogam5kaQ0KKw0KK2phdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCA9IG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeQ0KKw0KKyMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGNvbm5lY3Rvcg0KK2phdmEubmFtaW5nLnByb3ZpZGVyLnVybCA9IHZtOi8vbG9jYWxob3N0P2Jyb2tlci5wZXJzaXN0ZW50PWZhbHNlDQorDQorIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBKTkRJIG5hbWUgdGhlIGNvbm5lY3Rpb24gZmFjdG9yeQ0KKyMgc2hvdWxkIGFwcGVhciBhcy4gDQorI2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBjb25uZWN0aW9uRmFjdG9yeSwgcXVldWVDb25uZWN0aW9uRmFjdG9yeSwgdG9waWNDb25uZWN0aW9uRmFjdHJ5DQorY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IENvbm5lY3Rpb25GYWN0b3J5DQorDQorIyByZWdpc3RlciBzb21lIHF1ZXVlcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQorIyBxdWV1ZS5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCitxdWV1ZS5UZXh0RGVzdCA9IFRleHREZXN0DQorcXVldWUuT2JqZWN0RGVzdCA9IE9iamVjdERlc3QNCisNCisjIHJlZ2lzdGVyIHNvbWUgdG9waWNzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCisjIHRvcGljLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KKyN0b3BpYy5NeVRvcGljID0gZXhhbXBsZS5NeVRvcGljDQorDQorIyBFTkQgU05JUFBFVDogam5kaQ0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9ub25TQ0FjbGllbnQvc2VydmljZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvbm9uU0NBY2xpZW50L3NlcnZpY2UuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ZDUwMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvbm9uU0NBY2xpZW50L3NlcnZpY2UuY29tcG9zaXRlCkBAIC0wLDAgKzEsNTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKg0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICoNCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuDQorIC0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KKyAgICAgICAgICAgbmFtZT0iU2VydmljZUNvbXBvc2l0ZSI+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iRGVmYXVsdFNlcnZpY2UiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuT25lV2F5U2VydmljZUltcGwiLz4NCisgICAgICAgIDxzZXJ2aWNlIG5hbWU9Ik9uZVdheVNlcnZpY2UiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcyBpbml0aWFsQ29udGV4dEZhY3Rvcnk9Im9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeSIgam5kaVVSTD0idGNwOi8vbG9jYWxob3N0OjYxNjIzIj4NCisgICAgICAgICAgICAgICAgPHR1c2Nhbnk6d2lyZUZvcm1hdC5qbXNUZXh0WE1MLz4NCisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KKyAgICAgICAgPC9zZXJ2aWNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJUZXh0U2VydmljZSI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5PbmVXYXlTZXJ2aWNlSW1wbCIvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iT25lV2F5U2VydmljZSI+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zIGluaXRpYWxDb250ZXh0RmFjdG9yeT0ib3JnLmFwYWNoZS5hY3RpdmVtcS5qbmRpLkFjdGl2ZU1RSW5pdGlhbENvbnRleHRGYWN0b3J5IiBqbmRpVVJMPSJ0Y3A6Ly9sb2NhbGhvc3Q6NjE2MjMiDQorICAgICAgICAgICAgICAgICAgICAgICAgIHVyaT0iam1zOmpuZGk6VGV4dERlc3QiPg0KKyAgICAgICAgICAgICAgICA8dHVzY2FueTp3aXJlRm9ybWF0Lmptc1RleHQvPg0KKyAgICAgICAgICAgIDwvYmluZGluZy5qbXM+DQorICAgICAgICA8L3NlcnZpY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9Ik9iamVjdFNlcnZpY2UiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuT25lV2F5T2JqZWN0U2VydmljZUltcGwiLz4NCisgICAgICAgIDxzZXJ2aWNlIG5hbWU9Ik9uZVdheU9iamVjdFNlcnZpY2UiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcyBpbml0aWFsQ29udGV4dEZhY3Rvcnk9Im9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeSIgam5kaVVSTD0idGNwOi8vbG9jYWxob3N0OjYxNjIzIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICB1cmk9ImptczpqbmRpOk9iamVjdERlc3QiPg0KKyAgICAgICAgICAgICAgICA8dHVzY2FueTp3aXJlRm9ybWF0Lmptc09iamVjdCAvPiA8IS0tIHRlc3QgdGhhdCB3cmFwU2luZ2xlIGRlZmF1bHQgd29ya3MgLS0+DQorICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCisgICAgICAgIDwvc2VydmljZT4NCisgICAgPC9jb21wb25lbnQ+DQorDQorPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL25vbi1zY2EtY2xpZW50L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Ob25TQ0FDbGllbnRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL05vblNDQUNsaWVudFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9ub24tc2NhLWNsaWVudC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTm9uU0NBQ2xpZW50VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvbm9uLXNjYS1jbGllbnQvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL05vblNDQUNsaWVudFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL25vcmVwbHl0by9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvbm9yZXBseXRvL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdmZDkxMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL25vcmVwbHl0by9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1ub3JlcGx5dG88L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTm8gcmVwbHlUbzwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvbm9yZXBseXRvL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvbm9yZXBseXRvL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9ub3JlcGx5dG8vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9ub3JlcGx5dG8vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvbm9yZXBseXRvL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9ub3JlcGx5dG8vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9ub3JlcGx5dG8vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvbm9yZXBseXRvL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy9ub3JlcGx5dG8vc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9ub3JlcGx5dG8vc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmljZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9ub3JlcGx5dG8vc3JjL21haW4vcmVzb3VyY2VzL3NlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvbm9yZXBseXRvL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvbm9yZXBseXRvL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2aWNlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTm9SZXBseVRvVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTm9SZXBseVRvVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL25vcmVwbHl0by9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTm9SZXBseVRvVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvbm9yZXBseXRvL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Ob1JlcGx5VG9UZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9udWxscy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvbnVsbHMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWNkYzMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvbnVsbHMvcG9tLnhtbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtbnVsbHM8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgTnVsbHM8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9udWxscy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL251bGxzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL251bGxzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9udWxscy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXlTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9udWxscy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXlTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9udWxscy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL251bGxzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9NeVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL251bGxzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1NlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9udWxscy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1NlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9udWxscy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9udWxscy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9udWxscy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL251bGxzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3Qvam1zL251bGxzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJhZGE1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL251bGxzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKQEAgLTAsMCArMSwzOSBAQAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorIyMgTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQorIyMgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoDQorIyMgdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLg0KKyMjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQorIyMgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgNCisjIyB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyMjIA0KKyMjIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyMjIA0KKyMjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUNCisjIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KKyMjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLg0KKyMjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQNCisjIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCisjIFNUQVJUIFNOSVBQRVQ6IGpuZGkNCisNCitqYXZhLm5hbWluZy5mYWN0b3J5LmluaXRpYWwgPSBvcmcuYXBhY2hlLmFjdGl2ZW1xLmpuZGkuQWN0aXZlTVFJbml0aWFsQ29udGV4dEZhY3RvcnkNCisNCisjIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIGNvbmZpZ3VyZSB0aGUgZGVmYXVsdCBjb25uZWN0b3INCitqYXZhLm5hbWluZy5wcm92aWRlci51cmwgPSB2bTovL2xvY2FsaG9zdD9icm9rZXIucGVyc2lzdGVudD1mYWxzZSZicm9rZXIudXNlSm14PWZhbHNlJmJyb2tlci51c2VTaHV0ZG93bkhvb2s9ZmFsc2UNCisNCisjIHVzZSB0aGUgZm9sbG93aW5nIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIEpOREkgbmFtZSB0aGUgY29ubmVjdGlvbiBmYWN0b3J5DQorIyBzaG91bGQgYXBwZWFyIGFzLiANCisjY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IGNvbm5lY3Rpb25GYWN0b3J5LCBxdWV1ZUNvbm5lY3Rpb25GYWN0b3J5LCB0b3BpY0Nvbm5lY3Rpb25GYWN0cnkNCitjb25uZWN0aW9uRmFjdG9yeU5hbWVzID0gQ29ubmVjdGlvbkZhY3RvcnksIENvbm5lY3Rpb25GYWN0b3J5Mg0KKw0KKyMgcmVnaXN0ZXIgc29tZSBxdWV1ZXMgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KK3F1ZXVlLk15U2VydmljZSA9IE15U2VydmljZQ0KK3F1ZXVlLk15U2VydmljZTIgPSBNeVNlcnZpY2UyDQorDQorIyByZWdpc3RlciBzb21lIHRvcGljcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQorIyB0b3BpYy5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCisjdG9waWMuTXlUb3BpYyA9IGV4YW1wbGUuTXlUb3BpYw0KK3RvcGljLlNlcnZpY2VUb3BpYyA9IFNlcnZpY2VUb3BpYw0KKw0KKyMgRU5EIFNOSVBQRVQ6IGpuZGkNCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9udWxscy9zcmMvbWFpbi9yZXNvdXJjZXMvbnVsbHMuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vcmVzb3VyY2VzL251bGxzLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWExNzgwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvbnVsbHMvc3JjL21haW4vcmVzb3VyY2VzL251bGxzLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDU3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAtLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiIA0KKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiDQorICAgICAgICAgICBuYW1lPSJOdWxscyI+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQ2xpZW50MSI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5DbGllbnRJbXBsIi8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InNlcnZpY2VBIj4NCisgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpqbmRpOk15U2VydmljZSIgLz4NCisgICAgICAgIDwvcmVmZXJlbmNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJTZXJ2aWNlMSI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5TZXJ2aWNlSW1wbCIvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iTXlTZXJ2aWNlIj4NCisgICAgICAgICAgICA8YmluZGluZy5qbXMgLz4NCisgICAgICAgIDwvc2VydmljZT4gDQorICAgIDwvY29tcG9uZW50PiAgICAgICANCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJDbGllbnQyIj4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkNsaWVudEltcGwiLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZUEiPg0KKyAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOmpuZGk6TXlTZXJ2aWNlMiI+DQorICAgICAgICAgICAgICA8dHVzY2FueTp3aXJlRm9ybWF0Lmptc09iamVjdC8+DQorICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlNlcnZpY2UyIj4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLlNlcnZpY2VJbXBsIi8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJNeVNlcnZpY2UiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpqbmRpOk15U2VydmljZTIiPg0KKyAgICAgICAgICAgICAgPHR1c2Nhbnk6d2lyZUZvcm1hdC5qbXNPYmplY3QvPg0KKyAgICAgICAgICAgPC9iaW5kaW5nLmptcz4NCisgICAgICAgIDwvc2VydmljZT4gDQorICAgIDwvY29tcG9uZW50PiAgICAgICANCisNCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvbnVsbHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL051bGxzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL251bGxzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9OdWxsc1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9udWxscy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTnVsbHNUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9udWxscy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTnVsbHNUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5LW5vY2YvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2EwNGU3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5LW5vY2YvcG9tLnhtbApAQCAtMCwwICsxLDM0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtb25ld2F5LW5vY2Y8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgZm9yIGEgb25ld2F5IHNlcnZpY2U8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5Q2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheUNsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvbWFpbi9yZXNvdXJjZXMvb25ld2F5L09uZVdheUNsaWVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvbWFpbi9yZXNvdXJjZXMvb25ld2F5L09uZVdheUNsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvbWFpbi9yZXNvdXJjZXMvb25ld2F5L09uZVdheUNsaWVudC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL3Jlc291cmNlcy9vbmV3YXkvT25lV2F5Q2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy9tYWluL3Jlc291cmNlcy9vbmV3YXkvT25lV2F5U2VydmljZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvbWFpbi9yZXNvdXJjZXMvb25ld2F5L09uZVdheVNlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL21haW4vcmVzb3VyY2VzL29uZXdheS9PbmVXYXlTZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL21haW4vcmVzb3VyY2VzL29uZXdheS9PbmVXYXlTZXJ2aWNlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL29uZXdheS1ub2NmL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9vbmV3YXktbm9jZi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5LW5vY2Yvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL29uZXdheS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5L3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0OWQzNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL29uZXdheS9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1vbmV3YXk8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgd2l0aCBPbmV3YXk8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheUNsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5Q2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5Q2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlPYmplY3RTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheU9iamVjdFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5T2JqZWN0U2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheU9iamVjdFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5T2JqZWN0U2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5T2JqZWN0U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5T2JqZWN0U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlPYmplY3RTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9yZXNvdXJjZXMvb25ld2F5L09uZVdheUNsaWVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vcmVzb3VyY2VzL29uZXdheS9PbmVXYXlDbGllbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL3Jlc291cmNlcy9vbmV3YXkvT25lV2F5Q2xpZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL3Jlc291cmNlcy9vbmV3YXkvT25lV2F5Q2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL29uZXdheS9zcmMvbWFpbi9yZXNvdXJjZXMvb25ld2F5L09uZVdheVNlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL3Jlc291cmNlcy9vbmV3YXkvT25lV2F5U2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9vbmV3YXkvc3JjL21haW4vcmVzb3VyY2VzL29uZXdheS9PbmVXYXlTZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvb25ld2F5L3NyYy9tYWluL3Jlc291cmNlcy9vbmV3YXkvT25lV2F5U2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9vbmV3YXkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9vbmV3YXkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL29uZXdheS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5VGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhZGYxZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3BvbS54bWwKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LWptczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLXBvbGljeS1oZWFkZXJzPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIHdpdGggUG9saWN5IEhlYWRlcnM8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ0NsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ0NsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ0NsaWVudFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dDbGllbnRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnQ2xpZW50U2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnQ2xpZW50U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ1NlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ1NlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9kZWZpbml0aW9ucy54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvZGVmaW5pdGlvbnMueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL2RlZmluaXRpb25zLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL2RlZmluaXRpb25zLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9wb2xpY3ktaGVhZGVycy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzIGIvdGVzdGluZy9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGI5ZmJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisjIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisjIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorIyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisjIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyMjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyMgDQorIyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyMgDQorIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyMjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgU1RBUlQgU05JUFBFVDogam5kaQ0KKw0KK2phdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCA9IG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeQ0KKw0KKyMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGNvbm5lY3Rvcg0KK2phdmEubmFtaW5nLnByb3ZpZGVyLnVybCA9IHZtOi8vbG9jYWxob3N0P2Jyb2tlci5wZXJzaXN0ZW50PWZhbHNlDQorDQorIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBKTkRJIG5hbWUgdGhlIGNvbm5lY3Rpb24gZmFjdG9yeQ0KKyMgc2hvdWxkIGFwcGVhciBhcy4gDQorI2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBjb25uZWN0aW9uRmFjdG9yeSwgcXVldWVDb25uZWN0aW9uRmFjdG9yeSwgdG9waWNDb25uZWN0aW9uRmFjdHJ5DQorY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IENvbm5lY3Rpb25GYWN0b3J5DQorDQorIyByZWdpc3RlciBzb21lIHF1ZXVlcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQorIyBxdWV1ZS5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCitxdWV1ZS5TZXJ2aWNlUXVldWUgPSBTZXJ2aWNlUXVldWUNCisNCisjIHJlZ2lzdGVyIHNvbWUgdG9waWNzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCisjIHRvcGljLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KKyN0b3BpYy5NeVRvcGljID0gZXhhbXBsZS5NeVRvcGljDQorDQorIyBFTkQgU05JUFBFVDogam5kaQ0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9wb2xpY3lIZWFkZXJzL3BvbGljeUhlYWRlcnMuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL21haW4vcmVzb3VyY2VzL3BvbGljeUhlYWRlcnMvcG9saWN5SGVhZGVycy5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhmOTM2NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy9tYWluL3Jlc291cmNlcy9wb2xpY3lIZWFkZXJzL3BvbGljeUhlYWRlcnMuY29tcG9zaXRlCkBAIC0wLDAgKzEsNDUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorIC0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KKyAgICAgICAgICAgbmFtZT0iUHJvcGVydGllc0NsaWVudENvbXBvc2l0ZSI+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQ2xpZW50Q29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLk1zZ0NsaWVudEltcGwiIC8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9Im15U2VydmljZSIgcmVxdWlyZXM9InByaW9yaXR5Lm1lZGl1bSI+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOmpuZGk6U2VydmljZVF1ZXVlIj4NCisgICAgICAgICAgICAgICA8aGVhZGVycyB0eXBlPSJteVR5cGUiDQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlNb2RlPSJwZXJzaXN0ZW50Ig0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVUb0xpdmU9IjQzMjEiCQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5PSI3Ij4NCisgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGVhZFAxIj5teUhlYWRQMTwvcHJvcGVydHk+ICAgIA0KKyAgICAgICAgICAgICAgIDwvaGVhZGVycz4NCisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlNlcnZpY2VDb21wb25lbnQiPg0KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMuTXNnU2VydmljZUltcGwiIC8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJNc2dTZXJ2aWNlIj4NCisgICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6am5kaTpTZXJ2aWNlUXVldWUiLz4NCisgICAgICAgIDwvc2VydmljZT4NCisgICAgPC9jb21wb25lbnQ+DQorDQorPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Qb2xpY3lIZWFkZXJzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Qb2xpY3lIZWFkZXJzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3BvbGljeS1oZWFkZXJzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Qb2xpY3lIZWFkZXJzVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcG9saWN5LWhlYWRlcnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1BvbGljeUhlYWRlcnNUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTc4N2FjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvcG9tLnhtbApAQCAtMCwwICsxLDk4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPHBhY2thZ2luZz5wb208L3BhY2thZ2luZz4NCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TPC9uYW1lPg0KKyAgICANCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgICAgICANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLWptcy1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuYWN0aXZlbXE8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+YWN0aXZlbXEtY29yZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj41LjIuMDwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisNCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPnhtbHVuaXQ8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+eG1sdW5pdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4xLjI8L3ZlcnNpb24+DQorICAgICAgICAgICAgPHNjb3BlPnRlc3Q8L3Njb3BlPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisNCisgIDxtb2R1bGVzPg0KKyAgICA8bW9kdWxlPmFyZ3M8L21vZHVsZT4NCisgICAgPG1vZHVsZT5jYWxsYmFja3M8L21vZHVsZT4NCisgICAgPG1vZHVsZT5kZWZhdWx0czwvbW9kdWxlPg0KKyAgICA8bW9kdWxlPkR5bmFtaWNSZXBseVE8L21vZHVsZT4NCisgICAgPG1vZHVsZT5leGNlcHRpb25zPC9tb2R1bGU+DQorICAgIDxtb2R1bGU+ZXhjZXB0aW9uczE8L21vZHVsZT4NCisgICAgPG1vZHVsZT5leHRlcm5hbEJyb2tlcjwvbW9kdWxlPg0KKyAgICA8bW9kdWxlPmZvcm1hdC1qbXNieXRlczwvbW9kdWxlPg0KKyAgICA8bW9kdWxlPmZvcm1hdC1qbXNieXRlc3htbDwvbW9kdWxlPg0KKyAgICA8bW9kdWxlPmZvcm1hdC1qbXNkZWZhdWx0PC9tb2R1bGU+DQorICAgIDxtb2R1bGU+Zm9ybWF0LWptc21lc3NhZ2U8L21vZHVsZT4NCisgICAgPG1vZHVsZT5mb3JtYXQtam1zb2JqZWN0PC9tb2R1bGU+DQorICAgIDxtb2R1bGU+Zm9ybWF0LWptc3RleHQ8L21vZHVsZT4NCisgICAgPG1vZHVsZT5mb3JtYXQtam1zdGV4dHhtbDwvbW9kdWxlPg0KKyAgICA8bW9kdWxlPmZvcm1hdC1qbXN0ZXh0eG1saW5qbXNvYmplY3RvdXQ8L21vZHVsZT4NCisgICAgPG1vZHVsZT5ub24tc2NhLWNsaWVudDwvbW9kdWxlPg0KKyAgICA8bW9kdWxlPm5vcmVwbHl0bzwvbW9kdWxlPg0KKyAgICA8bW9kdWxlPm51bGxzPC9tb2R1bGU+DQorICAgIDxtb2R1bGU+b25ld2F5PC9tb2R1bGU+DQorICAgIDxtb2R1bGU+b25ld2F5LW5vY2Y8L21vZHVsZT4NCisgICAgPG1vZHVsZT5wb2xpY3ktaGVhZGVyczwvbW9kdWxlPg0KKyAgICA8bW9kdWxlPnByb3BlcnRpZXM8L21vZHVsZT4NCisgICAgPG1vZHVsZT5yZXNwb25zZWNmPC9tb2R1bGU+DQorICAgIDxtb2R1bGU+cnBjPC9tb2R1bGU+DQorICAgIDxtb2R1bGU+c2VsZWN0b3JzPC9tb2R1bGU+DQorICAgIDxtb2R1bGU+dG9waWNzPC9tb2R1bGU+DQorICAgIDxtb2R1bGU+dHRsPC9tb2R1bGU+DQorICAgIDxtb2R1bGU+dXJpLXJwYzwvbW9kdWxlPg0KKw0KKzwhLS0gc3RpbGwgdG8gYnJpbmcgdXAgaW4gMi54DQorICAgIDxtb2R1bGU+ZGVmaW5pdGlvbnM8L21vZHVsZT4NCistLT4NCisNCisgIDwvbW9kdWxlcz4NCisNCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvcHJvcGVydGllcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvcHJvcGVydGllcy9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMjNhYmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3BvbS54bWwKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LWptczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLXByb3BlcnRpZXM8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgd2l0aCBQcm9wZXJ0aWVzPC9uYW1lPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSk1TQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0pNU0NsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9KTVNDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ0NsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ0NsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ0NsaWVudFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ0NsaWVudFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ0NsaWVudFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnQ2xpZW50U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Nc2dTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvTXNnU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ1NlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL01zZ1NlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0ZGEyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisjIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisjIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorIyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisjIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyMjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyMgDQorIyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyMgDQorIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyMjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgU1RBUlQgU05JUFBFVDogam5kaQ0KKw0KK2phdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCA9IG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeQ0KKw0KKyMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGNvbm5lY3Rvcg0KK2phdmEubmFtaW5nLnByb3ZpZGVyLnVybCA9IHZtOi8vbG9jYWxob3N0P2Jyb2tlci5wZXJzaXN0ZW50PWZhbHNlDQorDQorIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBKTkRJIG5hbWUgdGhlIGNvbm5lY3Rpb24gZmFjdG9yeQ0KKyMgc2hvdWxkIGFwcGVhciBhcy4gDQorI2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBjb25uZWN0aW9uRmFjdG9yeSwgcXVldWVDb25uZWN0aW9uRmFjdG9yeSwgdG9waWNDb25uZWN0aW9uRmFjdHJ5DQorY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IENvbm5lY3Rpb25GYWN0b3J5DQorDQorIyByZWdpc3RlciBzb21lIHF1ZXVlcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQorIyBxdWV1ZS5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCitxdWV1ZS5TZXJ2aWNlUXVldWUgPSBSZXF1ZXN0UXVldWUNCisNCisjIHJlZ2lzdGVyIHNvbWUgdG9waWNzIGluIEpOREkgdXNpbmcgdGhlIGZvcm0NCisjIHRvcGljLltqbmRpTmFtZV0gPSBbcGh5c2ljYWxOYW1lXQ0KKyN0b3BpYy5NeVRvcGljID0gZXhhbXBsZS5NeVRvcGljDQorDQorIyBFTkQgU05JUFBFVDogam5kaQ0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL3Byb3BlcnRpZXMvcHJvcGVydGllcy5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1YmFiYzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9wcm9wZXJ0aWVzL3Byb3BlcnRpZXMuY29tcG9zaXRlCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorIC0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KKyAgICAgICAgICAgbmFtZT0iUHJvcGVydGllc0NsaWVudENvbXBvc2l0ZSI+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQ2xpZW50Q29tcG9uZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLk1zZ0NsaWVudEltcGwiIC8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9Im15U2VydmljZSI+DQorICAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOmpuZGk6U2VydmljZVF1ZXVlIj4NCisgICAgICAgICAgICAgICA8aGVhZGVycyB0eXBlPSJteVR5cGUiDQorICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlNb2RlPSJwZXJzaXN0ZW50Ig0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVUb0xpdmU9IjQzMjEiCQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5PSI3Ij4NCisgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0iaGVhZFAxIj5teUhlYWRQMTwvcHJvcGVydHk+ICAgIA0KKyAgICAgICAgICAgICAgIDwvaGVhZGVycz4NCisgICAgICAgICAgICAgICA8b3BlcmF0aW9uUHJvcGVydGllcyBuYW1lPSJvcDIiIHNlbGVjdGVkT3BlcmF0aW9uPSJuYXRpdmVPcDIiPg0KKyAgICAgICAgICAgICAgICAgIDxoZWFkZXJzIHR5cGU9Im9wMlR5cGUiDQorICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlNb2RlPSJub25wZXJzaXN0ZW50Ig0KKyAgICAgICAgICAgICAgICAgICAgIHRpbWVUb0xpdmU9IjYwMDAiDQorICAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHk9IjgiPg0KKyAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJvcDJQMiI+Zm9vPC9wcm9wZXJ0eT4NCisgICAgICAgICAgICAgICAgICA8L2hlYWRlcnM+DQorICAgICAgICAgICAgICAgPC9vcGVyYXRpb25Qcm9wZXJ0aWVzPg0KKyAgICAgICAgICAgIDwvYmluZGluZy5qbXM+DQorICAgICAgICA8L3JlZmVyZW5jZT4NCisgICAgPC9jb21wb25lbnQ+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iU2VydmljZUNvbXBvbmVudCI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5Nc2dTZXJ2aWNlSW1wbCIgLz4NCisgICAgICAgIDxzZXJ2aWNlIG5hbWU9Ik1zZ1NlcnZpY2UiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpqbmRpOlNlcnZpY2VRdWV1ZSIvPg0KKyAgICAgICAgPC9zZXJ2aWNlPg0KKyAgICA8L2NvbXBvbmVudD4NCisNCis8L2NvbXBvc2l0ZT4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcHJvcGVydGllcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvUHJvcGVydGllc1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Qcm9wZXJ0aWVzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3Byb3BlcnRpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1Byb3BlcnRpZXNUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9wcm9wZXJ0aWVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Qcm9wZXJ0aWVzVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvcmVzcG9uc2VjZi9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvcmVzcG9uc2VjZi9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Yzk5Y2QKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9yZXNwb25zZWNmL3BvbS54bWwKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LWptczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLXJlc3BvbnNlY2Y8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgUmVzcG9uc2UgQ29ubmVjdGlvbkZhY3Rvcnk8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZENsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vcmVzb3VyY2VzL2NmL2NsaWVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL3Jlc291cmNlcy9jZi9jbGllbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvbWFpbi9yZXNvdXJjZXMvY2YvY2xpZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvbWFpbi9yZXNvdXJjZXMvY2YvY2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vcmVzb3VyY2VzL2NmL3NlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvbWFpbi9yZXNvdXJjZXMvY2Yvc2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL3Jlc291cmNlcy9jZi9zZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvbWFpbi9yZXNvdXJjZXMvY2Yvc2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3Jlc3BvbnNlY2Yvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1Jlc3BvbnNlQ0ZUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvUmVzcG9uc2VDRlRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9yZXNwb25zZWNmL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9SZXNwb25zZUNGVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcmVzcG9uc2VjZi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvUmVzcG9uc2VDRlRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL3JwYy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvcnBjL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZiMGE2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL3JwYy9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy1ycGM8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgd2l0aCBSUEM8L25hbWU+DQorDQorICAgIDxidWlsZD4NCisgICAgICAgPGZpbmFsTmFtZT4ke2FydGlmYWN0SWR9PC9maW5hbE5hbWU+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9ycGMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9ycGMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9ycGMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3JwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZENsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3JwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3JwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3JwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcnBjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcnBjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3JwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9ycGMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9ycGMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcnBjL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL3JwYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9ycGMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9ycGMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvcnBjL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy9ycGMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3JwYy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9ycGMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3JwYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL2NsaWVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy9ycGMvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS9jbGllbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvcnBjL3NyYy9tYWluL3Jlc291cmNlcy9zaW1wbGUvY2xpZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcnBjL3NyYy9tYWluL3Jlc291cmNlcy9zaW1wbGUvY2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3JwYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3NlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvcnBjL3NyYy9tYWluL3Jlc291cmNlcy9zaW1wbGUvc2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9ycGMvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS9zZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvcnBjL3NyYy9tYWluL3Jlc291cmNlcy9zaW1wbGUvc2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9ycGMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1JQQ1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9ycGMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1JQQ1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9ycGMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1JQQ1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3JwYy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvUlBDVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmFiOWYwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3BvbS54bWwKQEAgLTAsMCArMSwzNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LWptczwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zLXNlbGVjdG9yczwvYXJ0aWZhY3RJZD4NCisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIGlUZXN0IEpNUyBUZXN0cyBGb3IgU2VsZWN0b3JzPC9uYW1lPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvU2VsZWN0b3JTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1NlbGVjdG9yU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZWxlY3RvclNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZWxlY3RvclNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvU2VsZWN0b3JTZXJ2aWNlSW1wbDEuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvU2VsZWN0b3JTZXJ2aWNlSW1wbDEuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvU2VsZWN0b3JTZXJ2aWNlSW1wbDEuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZWxlY3RvclNlcnZpY2VJbXBsMS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZWxlY3RvclNlcnZpY2VJbXBsMi5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZWxlY3RvclNlcnZpY2VJbXBsMi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZWxlY3RvclNlcnZpY2VJbXBsMi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1NlbGVjdG9yU2VydmljZUltcGwyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1NlbGVjdG9yU2VydmljZUltcGwzLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1NlbGVjdG9yU2VydmljZUltcGwzLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1NlbGVjdG9yU2VydmljZUltcGwzLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvU2VsZWN0b3JTZXJ2aWNlSW1wbDMuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvb3BlcmF0aW9uc2VsZWN0b3Ivam1zZGVmYXVsdC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc2RlZmF1bHQvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvb3BlcmF0aW9uc2VsZWN0b3Ivam1zZGVmYXVsdC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc2RlZmF1bHQvSGVsbG9Xb3JsZFJlZmVyZW5jZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc2RlZmF1bHQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvb3BlcmF0aW9uc2VsZWN0b3Ivam1zZGVmYXVsdC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvb3BlcmF0aW9uc2VsZWN0b3Ivam1zZGVmYXVsdC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXNkZWZhdWx0L0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc2RlZmF1bHQvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc3VzZXJwcm9wL0hlbGxvV29ybGRSZWZlcmVuY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvb3BlcmF0aW9uc2VsZWN0b3Ivam1zdXNlcnByb3AvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXN1c2VycHJvcC9IZWxsb1dvcmxkUmVmZXJlbmNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvb3BlcmF0aW9uc2VsZWN0b3Ivam1zdXNlcnByb3AvSGVsbG9Xb3JsZFJlZmVyZW5jZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXN1c2VycHJvcC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXN1c2VycHJvcC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXN1c2VycHJvcC9IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc3VzZXJwcm9wL0hlbGxvV29ybGRSZWZlcmVuY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc3VzZXJwcm9wL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc3VzZXJwcm9wL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc3VzZXJwcm9wL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvb3BlcmF0aW9uc2VsZWN0b3Ivam1zdXNlcnByb3AvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvb3BlcmF0aW9uc2VsZWN0b3Ivam1zdXNlcnByb3AvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL29wZXJhdGlvbnNlbGVjdG9yL2ptc3VzZXJwcm9wL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXN1c2VycHJvcC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9vcGVyYXRpb25zZWxlY3Rvci9qbXN1c2VycHJvcC9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9qbXNkZWZhdWx0L2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9qbXNkZWZhdWx0L2hlbGxvd29ybGQuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YzlkMDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vcmVzb3VyY2VzL2ptc2RlZmF1bHQvaGVsbG93b3JsZC5jb21wb3NpdGUKQEAgLTAsMCArMSw2OSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhLS0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAqIAorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAgICAqIAorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLAorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgCistLT4KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCIKKyAgICB4bWxuczp0dXNjYW55PSJodHRwOi8vdHVzY2FueS5hcGFjaGUub3JnL3htbG5zL3NjYS8xLjEiCisgICAgeG1sbnM6aHc9Imh0dHA6Ly9oZWxsb3dvcmxkIgorICAgIG5hbWU9ImhlbGxvd29ybGQiPgorCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkUmVmZXJlbmNlQ29tcG9uZW50Ij4KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMub3BlcmF0aW9uc2VsZWN0b3Iuam1zZGVmYXVsdC5IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbCIgLz4KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJoZWxsb1dvcmxkU2VydmljZTEiID4KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcz4KKyAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlMSIvPgorICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4KKyAgICAgICAgPC9yZWZlcmVuY2U+IAorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9ImhlbGxvV29ybGRTZXJ2aWNlMiIgPgorICAgICAgICAgICAgPGJpbmRpbmcuam1zPgorICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UyIi8+CisgICAgICAgICAgICAgICAgPG9wZXJhdGlvblByb3BlcnRpZXMgbmFtZT0iZ2V0R3JlZXRpbmdzT25lIiA+CisgICAgICAgICAgICAgICAgICA8aGVhZGVycz4KKyAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJzY2FPcGVyYXRpb25OYW1lIj5nZXRHcmVldGluZ3NUaHJlZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICA8L2hlYWRlcnM+CisgICAgICAgICAgICAgICA8L29wZXJhdGlvblByb3BlcnRpZXM+CisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPgorICAgICAgICA8L3JlZmVyZW5jZT4gCisgICAgPC9jb21wb25lbnQ+CisgICAgCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkU2VydmljZUNvbXBvbmVudDEiPgorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5vcGVyYXRpb25zZWxlY3Rvci5qbXNkZWZhdWx0LkhlbGxvV29ybGRTZXJ2aWNlSW1wbCIgLz4KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiPgorICAgICAgICAgICAgPGJpbmRpbmcuam1zPgorICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UxIi8+CisgICAgICAgICAgICAgICAgPG9wZXJhdGlvblByb3BlcnRpZXMgbmFtZT0iZ2V0R3JlZXRpbmdzVGhyZWUiIHNlbGVjdGVkT3BlcmF0aW9uPSJnZXRHcmVldGluZ3NGb3VyIj4KKyAgICAgICAgICAgICAgICAgIDxoZWFkZXJzPgorICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJsYU5vdFVzZWQiPmdldEdyZWV0aW5nc1RocmVlPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgIDwvaGVhZGVycz4KKyAgICAgICAgICAgICAgICA8L29wZXJhdGlvblByb3BlcnRpZXM+CisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPgorICAgICAgICA8L3NlcnZpY2U+CisgICAgPC9jb21wb25lbnQ+IAorICAgIAorICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2VDb21wb25lbnQyIj4KKyAgICAgICAgPGltcGxlbWVudGF0aW9uLmphdmEgY2xhc3M9Im9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy5qbXMub3BlcmF0aW9uc2VsZWN0b3Iuam1zZGVmYXVsdC5IZWxsb1dvcmxkU2VydmljZUltcGwiIC8+CisgICAgICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIj4KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcz4KKyAgICAgICAgICAgICAgICA8b3BlcmF0aW9uU2VsZWN0b3Iuam1zRGVmYXVsdC8+CisgICAgICAgICAgICAgICAgPGRlc3RpbmF0aW9uIGpuZGlOYW1lPSJIZWxsb1dvcmxkU2VydmljZTIiLz4KKyAgICAgICAgICAgIDwvYmluZGluZy5qbXM+CisgICAgICAgIDwvc2VydmljZT4KKyAgICA8L2NvbXBvbmVudD4gICAgIAorICAgIAorPC9jb21wb3NpdGU+CmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vcmVzb3VyY2VzL2ptc3VzZXJwcm9wL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9qbXN1c2VycHJvcC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2YxZDA4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9qbXN1c2VycHJvcC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDY1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICogCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICogCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIgorICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0IgorICAgIHhtbG5zOnR1c2Nhbnk9Imh0dHA6Ly90dXNjYW55LmFwYWNoZS5vcmcveG1sbnMvc2NhLzEuMSIKKyAgICB4bWxuczpodz0iaHR0cDovL2hlbGxvd29ybGQiCisgICAgbmFtZT0iaGVsbG93b3JsZFVQIj4KKworICAgIDxjb21wb25lbnQgbmFtZT0iSGVsbG9Xb3JsZFJlZmVyZW5jZUNvbXBvbmVudDEiPgorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5vcGVyYXRpb25zZWxlY3Rvci5qbXN1c2VycHJvcC5IZWxsb1dvcmxkUmVmZXJlbmNlSW1wbCIgLz4KKyAgICAgICAgPHJlZmVyZW5jZSBuYW1lPSJoZWxsb1dvcmxkU2VydmljZTEiID4KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcz4KKyAgICAgICAgICAgICAgICA8ZGVzdGluYXRpb24gam5kaU5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlNCIvPgorICAgICAgICAgICAgICAgIDxvcGVyYXRpb25Qcm9wZXJ0aWVzIG5hbWU9ImdldEdyZWV0aW5nc09uZSIgPgorICAgICAgICAgICAgICAgICAgPGhlYWRlcnM+CisgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0ibXlQcm9wZXJ0eSI+Z2V0R3JlZXRpbmdzT25lPC9wcm9wZXJ0eT4KKyAgICAgICAgICAgICAgICAgIDwvaGVhZGVycz4KKyAgICAgICAgICAgICAgICA8L29wZXJhdGlvblByb3BlcnRpZXM+CisgICAgICAgICAgICAgICAgPG9wZXJhdGlvblByb3BlcnRpZXMgbmFtZT0iZ2V0R3JlZXRpbmdzVHdvIiA+CisgICAgICAgICAgICAgICAgICA8aGVhZGVycz4KKyAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJteVByb3BlcnR5Ij5nZXRHcmVldGluZ3NUaHJlZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICA8L2hlYWRlcnM+CisgICAgICAgICAgICAgICAgPC9vcGVyYXRpb25Qcm9wZXJ0aWVzPiAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDxvcGVyYXRpb25Qcm9wZXJ0aWVzIG5hbWU9ImdldEdyZWV0aW5nc1RocmVlIiA+CisgICAgICAgICAgICAgICAgICA8aGVhZGVycz4KKyAgICAgICAgICAgICAgICAgICAgIDxwcm9wZXJ0eSBuYW1lPSJteVByb3BlcnR5Ij5nZXRHcmVldGluZ3NUd288L3Byb3BlcnR5PgorICAgICAgICAgICAgICAgICAgPC9oZWFkZXJzPgorICAgICAgICAgICAgICAgIDwvb3BlcmF0aW9uUHJvcGVydGllcz4KKyAgICAgICAgICAgIDwvYmluZGluZy5qbXM+CisgICAgICAgIDwvcmVmZXJlbmNlPiAKKyAgICA8L2NvbXBvbmVudD4KKyAgICAKKyAgICA8Y29tcG9uZW50IG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlQ29tcG9uZW50MyI+CisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLm9wZXJhdGlvbnNlbGVjdG9yLmptc3VzZXJwcm9wLkhlbGxvV29ybGRTZXJ2aWNlSW1wbCIgLz4KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiPgorICAgICAgICAgICAgPGJpbmRpbmcuam1zPgorCQkJCTx0dXNjYW55Om9wZXJhdGlvblNlbGVjdG9yLmptc1VzZXJQcm9wIHByb3BlcnR5TmFtZT0ibXlQcm9wZXJ0eSIvPgorICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2U0Ii8+CisgICAgICAgICAgICAgICAgPG9wZXJhdGlvblByb3BlcnRpZXMgbmFtZT0iZ2V0R3JlZXRpbmdzVGhyZWUiIHNlbGVjdGVkT3BlcmF0aW9uPSJnZXRHcmVldGluZ3NGb3VyIj4KKyAgICAgICAgICAgICAgICAgIDxoZWFkZXJzPgorICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9ImJsYU5vdFVzZWQyIj5nZXRHcmVldGluZ3NUaHJlZTwvcHJvcGVydHk+CisgICAgICAgICAgICAgICAgICA8L2hlYWRlcnM+CisgICAgICAgICAgICAgICAgPC9vcGVyYXRpb25Qcm9wZXJ0aWVzPgorICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4KKyAgICAgICAgPC9zZXJ2aWNlPgorICAgIDwvY29tcG9uZW50PiAgICAgCisgICAgCis8L2NvbXBvc2l0ZT4KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL21haW4vcmVzb3VyY2VzL3NlbGVjdG9ycy9zZWxlY3RvcnMuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9zZWxlY3RvcnMvc2VsZWN0b3JzLmNvbXBvc2l0ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTQwOGRmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy9tYWluL3Jlc291cmNlcy9zZWxlY3RvcnMvc2VsZWN0b3JzLmNvbXBvc2l0ZQpAQCAtMCwwICsxLDY4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAtLT4NCis8Y29tcG9zaXRlIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiDQorICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9pdGVzdCINCisgICAgICAgICAgIHhtbG5zOml0ZXN0PSJodHRwOi8vam1zIg0KKyAgICAgICAgICAgbmFtZT0iU2VsZWN0b3JzIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJDbGllbnQxIj4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkNsaWVudEltcGwiLz4NCisgICAgICAgIDxyZWZlcmVuY2UgbmFtZT0ic2VydmljZUEiPg0KKyAgICAgICAgICAgPGJpbmRpbmcuam1zIHVyaT0iam1zOmpuZGk6U2VydmljZVRvcGljIiA+DQorICAgICAgICAgICAgICA8aGVhZGVycyB0eXBlPSJ0eXBlMSIgLz4NCisgICAgICAgICAgIDwvYmluZGluZy5qbXM+DQorICAgICAgICA8L3JlZmVyZW5jZT4NCisgICAgPC9jb21wb25lbnQ+DQorDQorICAgIDxjb21wb25lbnQgbmFtZT0iQ2xpZW50MiI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5DbGllbnRJbXBsIi8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InNlcnZpY2VBIj4NCisgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpqbmRpOlNlcnZpY2VUb3BpYyIgPg0KKyAgICAgICAgICAgICAgPGhlYWRlcnMgdHlwZT0idHlwZTIiIC8+DQorICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlNlcnZpY2UxIj4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLlNlbGVjdG9yU2VydmljZUltcGwxIi8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJTZWxlY3RvclNlcnZpY2UiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpqbmRpOlNlcnZpY2VUb3BpYyIgLz4NCisgICAgICAgIDwvc2VydmljZT4gDQorICAgIDwvY29tcG9uZW50PiAgICAgICANCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJTZXJ2aWNlMiI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5TZWxlY3RvclNlcnZpY2VJbXBsMiIvPg0KKyAgICAgICAgPHNlcnZpY2UgbmFtZT0iU2VsZWN0b3JTZXJ2aWNlIj4NCisgICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6am5kaTpTZXJ2aWNlVG9waWMiID4NCisgICAgICAgICAgICAgICA8bWVzc2FnZVNlbGVjdGlvbiBzZWxlY3Rvcj0iSk1TVHlwZSA9ICd0eXBlMSciLz4NCisgICAgICAgICAgICA8L2JpbmRpbmcuam1zPg0KKyAgICAgICAgPC9zZXJ2aWNlPiANCisgICAgPC9jb21wb25lbnQ+ICAgICAgIA0KKw0KKyAgICA8Y29tcG9uZW50IG5hbWU9IlNlcnZpY2UzIj4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLlNlbGVjdG9yU2VydmljZUltcGwzIi8+DQorICAgICAgICA8c2VydmljZSBuYW1lPSJTZWxlY3RvclNlcnZpY2UiPg0KKyAgICAgICAgICAgIDxiaW5kaW5nLmptcyB1cmk9ImptczpqbmRpOlNlcnZpY2VUb3BpYyIgPg0KKyAgICAgICAgICAgICAgIDxtZXNzYWdlU2VsZWN0aW9uIHNlbGVjdG9yPSJKTVNUeXBlID0gJ3R5cGUyJyIvPg0KKyAgICAgICAgICAgIDwvYmluZGluZy5qbXM+DQorICAgICAgICA8L3NlcnZpY2U+IA0KKyAgICA8L2NvbXBvbmVudD4gICAgICAgDQorDQorPC9jb21wb3NpdGU+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT3BlcmF0aW9uc2VsZWN0b3JKTVNEZWZhdWx0VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT3BlcmF0aW9uc2VsZWN0b3JKTVNEZWZhdWx0VGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT3BlcmF0aW9uc2VsZWN0b3JKTVNEZWZhdWx0VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PcGVyYXRpb25zZWxlY3RvckpNU0RlZmF1bHRUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PcGVyYXRpb25zZWxlY3RvckpNU1VzZXJQcm9wVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3NlbGVjdG9ycy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT3BlcmF0aW9uc2VsZWN0b3JKTVNVc2VyUHJvcFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09wZXJhdGlvbnNlbGVjdG9ySk1TVXNlclByb3BUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09wZXJhdGlvbnNlbGVjdG9ySk1TVXNlclByb3BUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZWxlY3RvcnNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZWxlY3RvcnNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvc2VsZWN0b3JzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9TZWxlY3RvcnNUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy9zZWxlY3RvcnMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1NlbGVjdG9yc1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL3RvcGljcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvdG9waWNzL3BvbS54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkYTExZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL3RvcGljcy9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy10b3BpY3M8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBKTVMgVGVzdHMgZm9yIHRvcGljczwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3RvcGljcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5Q2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlDbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy90b3BpY3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheUNsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy90b3BpY3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3RvcGljcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3RvcGljcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvT25lV2F5U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9PbmVXYXlTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy90b3BpY3Mvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL09uZVdheVNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy90b3BpY3Mvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3RvcGljcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3RvcGljcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy90b3BpY3Mvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3Qvam1zL3RvcGljcy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3RvcGljcy9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL3Jlc291cmNlcy90b3BpY3MvVG9waWNzQ2xpZW50LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3RvcGljcy9zcmMvbWFpbi9yZXNvdXJjZXMvdG9waWNzL1RvcGljc0NsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy90b3BpY3Mvc3JjL21haW4vcmVzb3VyY2VzL3RvcGljcy9Ub3BpY3NDbGllbnQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy90b3BpY3Mvc3JjL21haW4vcmVzb3VyY2VzL3RvcGljcy9Ub3BpY3NDbGllbnQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvdG9waWNzL3NyYy9tYWluL3Jlc291cmNlcy90b3BpY3MvVG9waWNzU2VydmljZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L2ptcy90b3BpY3Mvc3JjL21haW4vcmVzb3VyY2VzL3RvcGljcy9Ub3BpY3NTZXJ2aWNlLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3RvcGljcy9zcmMvbWFpbi9yZXNvdXJjZXMvdG9waWNzL1RvcGljc1NlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy90b3BpY3Mvc3JjL21haW4vcmVzb3VyY2VzL3RvcGljcy9Ub3BpY3NTZXJ2aWNlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3RvcGljcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvVG9waWNzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3RvcGljcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvVG9waWNzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3RvcGljcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvVG9waWNzVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvdG9waWNzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9Ub3BpY3NUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy90dGwvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL3R0bC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YWExMDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy90dGwvcG9tLnhtbApAQCAtMCwwICsxLDM1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtam1zPC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKw0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXMtdHRsPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIFRpbWUgVG8gTGl2ZTwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9qYXZhL2l0ZXN0L01vY2tJbml0aWFsQ29udGV4dEZhY3RvcnkuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9qYXZhL2l0ZXN0L01vY2tJbml0aWFsQ29udGV4dEZhY3RvcnkuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9qYXZhL2l0ZXN0L01vY2tJbml0aWFsQ29udGV4dEZhY3RvcnkuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvdHRsL3NyYy9tYWluL2phdmEvaXRlc3QvTW9ja0luaXRpYWxDb250ZXh0RmFjdG9yeS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvdHRsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DbGllbnRJZmFjZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvdHRsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DbGllbnRJZmFjZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvdHRsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DbGllbnRJZmFjZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy90dGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NsaWVudElmYWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy90dGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0NsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvdHRsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9DbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvdHRsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy90dGwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy90dGwvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvdHRsL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy90dGwvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9yZXNvdXJjZXMvam5kaS5wcm9wZXJ0aWVzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy90dGwvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9yZXNvdXJjZXMvdHRsLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9yZXNvdXJjZXMvdHRsLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3R0bC9zcmMvbWFpbi9yZXNvdXJjZXMvdHRsLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvdHRsL3NyYy9tYWluL3Jlc291cmNlcy90dGwuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9qbXMvdHRsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9UVExUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvdHRsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9UVExUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvdHRsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9UVExUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L2ptcy90dGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1RUTFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL3VyaS1ycGMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL3VyaS1ycGMvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWI0ZjhmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9qbXMvdXJpLXJwYy9wb20ueG1sCkBAIC0wLDAgKzEsMzUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1qbXM8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorDQorICAgIDxhcnRpZmFjdElkPml0ZXN0LWptcy11cmktcnBjPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgSk1TIHdpdGggVVJJIFJQQzwvbmFtZT4NCisNCisgICAgPGJ1aWxkPg0KKyAgICAgICA8ZmluYWxOYW1lPiR7YXJ0aWZhY3RJZH08L2ZpbmFsTmFtZT4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy91cmktcnBjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZENsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZENsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L2ptcy91cmktcnBjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL0hlbGxvV29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L2ptcy91cmktcnBjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9IZWxsb1dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvSGVsbG9Xb3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy91cmktcnBjL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L2ptcy91cmktcnBjL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L2ptcy91cmktcnBjL3NyYy9tYWluL3Jlc291cmNlcy9qbmRpLnByb3BlcnRpZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZkZmM4ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vcmVzb3VyY2VzL2puZGkucHJvcGVydGllcwpAQCAtMCwwICsxLDM4IEBACisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisjIyBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisjIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCisjIyB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuDQorIyMgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjANCisjIyAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aA0KKyMjIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorIyMgDQorIyMgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorIyMgDQorIyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQ0KKyMjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsDQorIyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuDQorIyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZA0KKyMjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KKyMgU1RBUlQgU05JUFBFVDogam5kaQ0KKw0KK2phdmEubmFtaW5nLmZhY3RvcnkuaW5pdGlhbCA9IG9yZy5hcGFjaGUuYWN0aXZlbXEuam5kaS5BY3RpdmVNUUluaXRpYWxDb250ZXh0RmFjdG9yeQ0KKw0KKyMgdXNlIHRoZSBmb2xsb3dpbmcgcHJvcGVydHkgdG8gY29uZmlndXJlIHRoZSBkZWZhdWx0IGNvbm5lY3Rvcg0KK2phdmEubmFtaW5nLnByb3ZpZGVyLnVybCA9IHZtOi8vbG9jYWxob3N0P2Jyb2tlci5wZXJzaXN0ZW50PWZhbHNlDQorDQorIyB1c2UgdGhlIGZvbGxvd2luZyBwcm9wZXJ0eSB0byBzcGVjaWZ5IHRoZSBKTkRJIG5hbWUgdGhlIGNvbm5lY3Rpb24gZmFjdG9yeQ0KKyMgc2hvdWxkIGFwcGVhciBhcy4gDQorI2Nvbm5lY3Rpb25GYWN0b3J5TmFtZXMgPSBjb25uZWN0aW9uRmFjdG9yeSwgcXVldWVDb25uZWN0aW9uRmFjdG9yeSwgdG9waWNDb25uZWN0aW9uRmFjdHJ5DQorY29ubmVjdGlvbkZhY3RvcnlOYW1lcyA9IENvbm5lY3Rpb25GYWN0b3J5DQorDQorIyByZWdpc3RlciBzb21lIHF1ZXVlcyBpbiBKTkRJIHVzaW5nIHRoZSBmb3JtDQorIyBxdWV1ZS5bam5kaU5hbWVdID0gW3BoeXNpY2FsTmFtZV0NCitxdWV1ZS5EZXN0UXVldWVBID0gRGVzdFF1ZXVlQQ0KKw0KKyMgcmVnaXN0ZXIgc29tZSB0b3BpY3MgaW4gSk5ESSB1c2luZyB0aGUgZm9ybQ0KKyMgdG9waWMuW2puZGlOYW1lXSA9IFtwaHlzaWNhbE5hbWVdDQorI3RvcGljLk15VG9waWMgPSBleGFtcGxlLk15VG9waWMNCisNCisjIEVORCBTTklQUEVUOiBqbmRpDQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3NlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3NlcnZpY2UuY29tcG9zaXRlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZWQyNDMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L2ptcy91cmktcnBjL3NyYy9tYWluL3Jlc291cmNlcy9zaW1wbGUvc2VydmljZS5jb21wb3NpdGUKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgLS0+DQorPGNvbXBvc2l0ZSB4bWxucz0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvbnMvb3BlbmNzYS9zY2EvMjAwOTEyIg0KKyAgICAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaXRlc3QiDQorICAgICAgICAgICBuYW1lPSJTaW1wbGVTZXJ2aWNlQ29tcG9zaXRlIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkU2VydmljZSI+DQorICAgICAgICA8aW1wbGVtZW50YXRpb24uamF2YSBjbGFzcz0ib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLmptcy5IZWxsb1dvcmxkU2VydmljZUltcGwiLz4NCisgICAgICAgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlIj4NCisgICAgICAgICAgICA8YmluZGluZy5qbXM+DQorICAgICAgICAgICAgICAgPGRlc3RpbmF0aW9uIGpuZGlOYW1lPSJEZXN0UXVldWVBIiA+IA0KKyAgICAgICAgICAgICAgIDwvZGVzdGluYXRpb24+DQorICAgICAgICAgICAgICAgPHJlc3BvbnNlPg0KKyAgICAgICAgICAgICAgICAgIDxkZXN0aW5hdGlvbiBqbmRpTmFtZT0iUmVzcFF1ZXVlQSIvPg0KKyAgICAgICAgICAgICAgIDwvcmVzcG9uc2U+DQorICAgICAgICAgICAgPC9iaW5kaW5nLmptcz4gIA0KKyAgICAgICAgPC9zZXJ2aWNlPiANCisgICAgPC9jb21wb25lbnQ+ICAgICAgIA0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS91cmljbGllbnQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2ltcGxlL3VyaWNsaWVudC5jb21wb3NpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODI5NWZiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL21haW4vcmVzb3VyY2VzL3NpbXBsZS91cmljbGllbnQuY29tcG9zaXRlCkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorIC0tPg0KKzxjb21wb3NpdGUgeG1sbnM9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiINCisgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL2l0ZXN0Ig0KKyAgICAgICAgICAgbmFtZT0iVVJJQ2xpZW50Q29tcG9zaXRlIj4NCisNCisgICAgPGNvbXBvbmVudCBuYW1lPSJIZWxsb1dvcmxkQ2xpZW50Ij4NCisgICAgICAgIDxpbXBsZW1lbnRhdGlvbi5qYXZhIGNsYXNzPSJvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcuam1zLkhlbGxvV29ybGRDbGllbnRJbXBsIi8+DQorICAgICAgICA8cmVmZXJlbmNlIG5hbWU9InNlcnZpY2VBIj4NCisgICAgICAgICAgICA8YmluZGluZy5qbXMgdXJpPSJqbXM6am5kaTpEZXN0UXVldWVBIiAvPg0KKyAgICAgICAgPC9yZWZlcmVuY2U+DQorICAgIDwvY29tcG9uZW50Pg0KKw0KKzwvY29tcG9zaXRlPg0KZGlmZiAtLWdpdCBhL2l0ZXN0L2ptcy91cmktcnBjL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL2ptcy9VUklSUENUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9qbXMvdXJpLXJwYy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9qbXMvVVJJUlBDVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvam1zL3VyaS1ycGMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1VSSVJQQ1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvam1zL3VyaS1ycGMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvam1zL1VSSVJQQ1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGUtbGF1bmNoZXItZXF1aW5veC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2RlLWxhdW5jaGVyLWVxdWlub3gvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGUtbGF1bmNoZXItZXF1aW5veC9zcmMvdGVzdC9qYXZhL2hlbGxvL0hlbGxvV29ybGQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L2phdmEvaGVsbG8vSGVsbG9Xb3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2RlLWxhdW5jaGVyLWVxdWlub3gvc3JjL3Rlc3QvamF2YS9oZWxsby9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L2phdmEvaGVsbG8vSGVsbG9Xb3JsZC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2RlLWxhdW5jaGVyLWVxdWlub3gvc3JjL3Rlc3QvamF2YS9oZWxsby9IZWxsb1dvcmxkQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGUtbGF1bmNoZXItZXF1aW5veC9zcmMvdGVzdC9qYXZhL2hlbGxvL0hlbGxvV29ybGRDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L2phdmEvaGVsbG8vSGVsbG9Xb3JsZENsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGUtbGF1bmNoZXItZXF1aW5veC9zcmMvdGVzdC9qYXZhL2hlbGxvL0hlbGxvV29ybGRDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L2phdmEvaGVsbG8vSGVsbG9Xb3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L2phdmEvaGVsbG8vSGVsbG9Xb3JsZEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L2phdmEvaGVsbG8vSGVsbG9Xb3JsZEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2RlLWxhdW5jaGVyLWVxdWlub3gvc3JjL3Rlc3QvamF2YS9oZWxsby9IZWxsb1dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2RlLWxhdW5jaGVyLWVxdWlub3gvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvZXF1aW5veC9sYXVuY2hlci9FcXVpbm94T1NHaUhvc3RUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2RlLWxhdW5jaGVyLWVxdWlub3gvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvZXF1aW5veC9sYXVuY2hlci9FcXVpbm94T1NHaUhvc3RUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2RlLWxhdW5jaGVyLWVxdWlub3gvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL25vZGUvZXF1aW5veC9sYXVuY2hlci9FcXVpbm94T1NHaUhvc3RUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGUtbGF1bmNoZXItZXF1aW5veC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9lcXVpbm94L2xhdW5jaGVyL0VxdWlub3hPU0dpSG9zdFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGUtbGF1bmNoZXItZXF1aW5veC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9lcXVpbm94L2xhdW5jaGVyL05vZGVMYXVuY2hlclRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGUtbGF1bmNoZXItZXF1aW5veC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9lcXVpbm94L2xhdW5jaGVyL05vZGVMYXVuY2hlclRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGUtbGF1bmNoZXItZXF1aW5veC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2Evbm9kZS9lcXVpbm94L2xhdW5jaGVyL05vZGVMYXVuY2hlclRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9ub2RlL2VxdWlub3gvbGF1bmNoZXIvTm9kZUxhdW5jaGVyVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L3Jlc291cmNlcy9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L3Jlc291cmNlcy9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZS1sYXVuY2hlci1lcXVpbm94L3NyYy90ZXN0L3Jlc291cmNlcy9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2RlLWxhdW5jaGVyLWVxdWlub3gvc3JjL3Rlc3QvcmVzb3VyY2VzL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3QvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDY2MjNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3QvcG9tLnhtbApAQCAtMCwwICsxLDczIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtbm9kZXMtYmluZGluZy1zY2EtaGF6ZWxjYXN0PC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgTm9kZXMgYmluZGluZy5zY2EgVXNpbmcgSGF6ZWxjYXN0IFJlZ2lzdHJ5PC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZG9tYWluLWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy13cy1ydW50aW1lLWF4aXMyPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ob3N0LWpldHR5PC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgICAgICA8c2NvcGU+cnVudGltZTwvc2NvcGU+DQorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgICAgICANCisgICAgPC9kZXBlbmRlbmNpZXM+DQorICAgIDxidWlsZD4NCisgICAgICAgICAgICA8cGx1Z2lucz4NCisgICAgICAgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjIuNTwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICAgICAgIDxjb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGluY2x1ZGU+KiovKlRlc3RDYXNlLmphdmE8L2luY2x1ZGU+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9pbmNsdWRlcz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8cmVwb3J0Rm9ybWF0PmJyaWVmPC9yZXBvcnRGb3JtYXQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHVzZUZpbGU+dHJ1ZTwvdXNlRmlsZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Zm9ya01vZGU+b25jZTwvZm9ya01vZGU+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGFyZ0xpbmU+LWVhIC1YbXgyNTZtPC9hcmdMaW5lPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxwYXJhbGxlbD5vZmY8L3BhcmFsbGVsPg0KKyAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICA8L3BsdWdpbj4NCisgICAgICAgICAgICA8L3BsdWdpbnM+DQorICAgIDwvYnVpbGQ+DQorPC9wcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DdXN0b21lci5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ3VzdG9tZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0N1c3RvbWVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0N1c3RvbWVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DdXN0b21lck5vdEZvdW5kRXhjZXB0aW9uLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DdXN0b21lck5vdEZvdW5kRXhjZXB0aW9uLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DdXN0b21lck5vdEZvdW5kRXhjZXB0aW9uLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0N1c3RvbWVyTm90Rm91bmRFeGNlcHRpb24uamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0xvY2FsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9Mb2NhbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvTG9jYWwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvTG9jYWwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0xvY2FsU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0xvY2FsU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0xvY2FsU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvTG9jYWxTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvUmVtb3RlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9SZW1vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1JlbW90ZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9SZW1vdGUuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1JlbW90ZVNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9SZW1vdGVTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvUmVtb3RlU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvUmVtb3RlU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1NDQUNsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1NDQUNsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1NDQUNsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvU0NBQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1NlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9TZXJ2aWNlLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvU2VydmljZS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvU2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvQXN5bmNoVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9Bc3luY2hUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL0FzeW5jaFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9Bc3luY2hUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL0NhbGxiYWNrVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9DYWxsYmFja1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL1Byb21vdGlvblRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvUHJvbW90aW9uVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9Qcm9tb3Rpb25UZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvUHJvbW90aW9uVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9TaW1wbGVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL1NpbXBsZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvU2ltcGxlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL1NpbXBsZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2FsbGJhY2tSZW1vdGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRDYWxsYmFja1JlbW90ZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENhbGxiYWNrUmVtb3RlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRDYWxsYmFja1JlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGUuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tSZW1vdGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tSZW1vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tSZW1vdGUuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUxvY2FsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZTIuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlMi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlMi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudENhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudENhbGxiYWNrUmVtb3RlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tSZW1vdGVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja1JlbW90ZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tSZW1vdGVJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRMb2NhbEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudExvY2FsSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50TG9jYWxJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudExvY2FsSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlMkltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudFJlbW90ZTJJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGUySW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGUySW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGVJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUxvY2FsSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUxvY2FsSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUxvY2FsSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTG9jYWxJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTXVsdGlwbGVTZXJ2aWNlc0ltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VNdWx0aXBsZVNlcnZpY2VzSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZU11bHRpcGxlU2VydmljZXNJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VNdWx0aXBsZVNlcnZpY2VzSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9Bc3luY2hUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9Bc3luY2hUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9Bc3luY2hUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL0FzeW5jaFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL0NhbGxiYWNrVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9DYWxsYmFja1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9Qcm9tb3Rpb25UZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9Qcm9tb3Rpb25UZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9Qcm9tb3Rpb25UZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL1Byb21vdGlvblRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL1NpbXBsZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL1NpbXBsZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL1NpbXBsZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvU2ltcGxlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2FsbGJhY2tSZW1vdGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2FsbGJhY2tSZW1vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2FsbGJhY2tSZW1vdGUuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDYWxsYmFja1JlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tSZW1vdGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlTG9jYWwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUxvY2FsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZTIuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZTIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZTIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlMi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudENhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudENhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudENhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tSZW1vdGVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tSZW1vdGVJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja1JlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRMb2NhbEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRMb2NhbEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRMb2NhbEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudExvY2FsSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudFJlbW90ZTJJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlMkltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGUySW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlMkltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudFJlbW90ZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudFJlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTG9jYWxJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUxvY2FsSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTXVsdGlwbGVTZXJ2aWNlc0ltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTXVsdGlwbGVTZXJ2aWNlc0ltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTXVsdGlwbGVTZXJ2aWNlc0ltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VNdWx0aXBsZVNlcnZpY2VzSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0JpbmRpbmdTQ0FUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQmluZGluZ1NDQVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9CaW5kaW5nU0NBVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQmluZGluZ1NDQVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnROb2RlU2hhcmVkQ3VzdG9tZXJUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50Tm9kZVNoYXJlZEN1c3RvbWVyVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudE5vZGVTaGFyZWRDdXN0b21lclRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudE5vZGVTaGFyZWRDdXN0b21lclRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnROb2RlU2hhcmVkTG9jYWxUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50Tm9kZVNoYXJlZExvY2FsVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudE5vZGVTaGFyZWRMb2NhbFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudE5vZGVTaGFyZWRMb2NhbFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnRTaGFyZWRDdXN0b21lclRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnRTaGFyZWRDdXN0b21lclRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnRTaGFyZWRDdXN0b21lclRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudFNoYXJlZEN1c3RvbWVyVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudFNoYXJlZExvY2FsVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudFNoYXJlZExvY2FsVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudFNoYXJlZExvY2FsVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50U2hhcmVkTG9jYWxUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvU2VydmljZU5vZGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1NlcnZpY2VOb2RlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9TZXJ2aWNlTm9kZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9TZXJ2aWNlTm9kZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvVGVzdENhc2VSdW5uZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1Rlc3RDYXNlUnVubmVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9UZXN0Q2FzZVJ1bm5lci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9UZXN0Q2FzZVJ1bm5lci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9jYWxsYmFja1JlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9jYWxsYmFja1JlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9jYWxsYmFja1NlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9jYWxsYmFja1NlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9jYWxsYmFja1NlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZENvbXBvbmVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25SZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25SZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25TZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25TZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25TZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvYXN5bmNoUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvYXN5bmNoUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvYXN5bmNoU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvYXN5bmNoU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvYXN5bmNoU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1JlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1JlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1JlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvY2FsbGJhY2tSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvY2FsbGJhY2tTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1NlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1NlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvY2FsbGJhY2tTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1NlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1NlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZENvbXBvbmVudC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZENvbXBvbmVudC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25SZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25SZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblNlcnZpY2UvSGVsbG9Xb3JsZENvbXBvbmVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25TZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3Mvc2ltcGxlUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3Mvc2ltcGxlUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3Mvc2ltcGxlU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS1oYXplbGNhc3Qvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3Mvc2ltcGxlU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtaGF6ZWxjYXN0L3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLWhhemVsY2FzdC9zcmMvdGVzdC9yZXNvdXJjZXMvd3Mvc2ltcGxlU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0N1c3RvbWVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DdXN0b21lci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ3VzdG9tZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ3VzdG9tZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0N1c3RvbWVyTm90Rm91bmRFeGNlcHRpb24uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0N1c3RvbWVyTm90Rm91bmRFeGNlcHRpb24uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0N1c3RvbWVyTm90Rm91bmRFeGNlcHRpb24uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ3VzdG9tZXJOb3RGb3VuZEV4Y2VwdGlvbi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvTG9jYWwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0xvY2FsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9Mb2NhbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9Mb2NhbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvTG9jYWxTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvTG9jYWxTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvTG9jYWxTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9Mb2NhbFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9SZW1vdGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1JlbW90ZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvUmVtb3RlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1JlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvUmVtb3RlU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1JlbW90ZVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9SZW1vdGVTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9SZW1vdGVTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvU0NBQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvU0NBQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvU0NBQ2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9TQ0FDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvU2VydmljZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1NlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9TZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9TZXJ2aWNlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9Bc3luY2hUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL0FzeW5jaFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvQXN5bmNoVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL0FzeW5jaFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL0NhbGxiYWNrVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9DYWxsYmFja1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9DYWxsYmFja1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvUHJvbW90aW9uVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9Qcm9tb3Rpb25UZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL1Byb21vdGlvblRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9Qcm9tb3Rpb25UZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL1NpbXBsZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvU2ltcGxlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9TaW1wbGVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvU2ltcGxlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRDYWxsYmFja1JlbW90ZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENhbGxiYWNrUmVtb3RlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2FsbGJhY2tSZW1vdGUuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENhbGxiYWNrUmVtb3RlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGUuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUxvY2FsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUxvY2FsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUxvY2FsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlTG9jYWwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlMi5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZTIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudENhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudENhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja1JlbW90ZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudENhbGxiYWNrUmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja1JlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudExvY2FsSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50TG9jYWxJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRMb2NhbEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50TG9jYWxJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGUySW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlMkltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudFJlbW90ZTJJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudFJlbW90ZTJJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGVJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudFJlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tSZW1vdGVJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTG9jYWxJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTG9jYWxJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTG9jYWxJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VNdWx0aXBsZVNlcnZpY2VzSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZU11bHRpcGxlU2VydmljZXNJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTXVsdGlwbGVTZXJ2aWNlc0ltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZU11bHRpcGxlU2VydmljZXNJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2EvYXhpczIvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL2F4aXMyL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGVJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9heGlzMi9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGVJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL0FzeW5jaFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL0FzeW5jaFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL0FzeW5jaFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvQXN5bmNoVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9DYWxsYmFja1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL0NhbGxiYWNrVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9DYWxsYmFja1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL1Byb21vdGlvblRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL1Byb21vdGlvblRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL1Byb21vdGlvblRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvUHJvbW90aW9uVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvU2ltcGxlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvU2ltcGxlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvU2ltcGxlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9TaW1wbGVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDYWxsYmFja1JlbW90ZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDYWxsYmFja1JlbW90ZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDYWxsYmFja1JlbW90ZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENhbGxiYWNrUmVtb3RlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tSZW1vdGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlTG9jYWwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUxvY2FsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZUxvY2FsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlMi5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlMi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlMi5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGUyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50Q2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja1JlbW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja1JlbW90ZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRDYWxsYmFja1JlbW90ZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudENhbGxiYWNrUmVtb3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudExvY2FsSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudExvY2FsSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudExvY2FsSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50TG9jYWxJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlMkltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGUySW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudFJlbW90ZTJJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGUySW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZENsaWVudFJlbW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRDbGllbnRSZW1vdGVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkQ2xpZW50UmVtb3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja09uZXdheVJlbW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tPbmV3YXlSZW1vdGVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrT25ld2F5UmVtb3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VDYWxsYmFja1JlbW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlQ2FsbGJhY2tSZW1vdGVJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUNhbGxiYWNrUmVtb3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VMb2NhbEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlTG9jYWxJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUxvY2FsSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZUxvY2FsSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VNdWx0aXBsZVNlcnZpY2VzSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VNdWx0aXBsZVNlcnZpY2VzSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VNdWx0aXBsZVNlcnZpY2VzSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZU11bHRpcGxlU2VydmljZXNJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy9zY2Evcm1pL2hlbGxvd29ybGQvaW1wbC9IZWxsb1dvcmxkU2VydmljZVJlbW90ZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvc2NhL3JtaS9oZWxsb3dvcmxkL2ltcGwvSGVsbG9Xb3JsZFNlcnZpY2VSZW1vdGVJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3NjYS9ybWkvaGVsbG93b3JsZC9pbXBsL0hlbGxvV29ybGRTZXJ2aWNlUmVtb3RlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQmluZGluZ1NDQVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9CaW5kaW5nU0NBVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0JpbmRpbmdTQ0FUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9CaW5kaW5nU0NBVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudE5vZGVTaGFyZWRDdXN0b21lclRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnROb2RlU2hhcmVkQ3VzdG9tZXJUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50Tm9kZVNoYXJlZEN1c3RvbWVyVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50Tm9kZVNoYXJlZEN1c3RvbWVyVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudE5vZGVTaGFyZWRMb2NhbFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnROb2RlU2hhcmVkTG9jYWxUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50Tm9kZVNoYXJlZExvY2FsVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50Tm9kZVNoYXJlZExvY2FsVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudFNoYXJlZEN1c3RvbWVyVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudFNoYXJlZEN1c3RvbWVyVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL0NsaWVudFNoYXJlZEN1c3RvbWVyVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50U2hhcmVkQ3VzdG9tZXJUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50U2hhcmVkTG9jYWxUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50U2hhcmVkTG9jYWxUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvQ2xpZW50U2hhcmVkTG9jYWxUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9DbGllbnRTaGFyZWRMb2NhbFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9TZXJ2aWNlTm9kZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvU2VydmljZU5vZGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1NlcnZpY2VOb2RlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1NlcnZpY2VOb2RlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvYmluZGluZ3NjYS9UZXN0Q2FzZVJ1bm5lci5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2JpbmRpbmdzY2EvVGVzdENhc2VSdW5uZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1Rlc3RDYXNlUnVubmVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9iaW5kaW5nc2NhL1Rlc3RDYXNlUnVubmVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvYXN5bmNoU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9hc3luY2hTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2FzeW5jaFNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9jYWxsYmFja1JlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9jYWxsYmFja1JlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9jYWxsYmFja1NlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9jYWxsYmFja1NlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvY2FsbGJhY2tTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL2NhbGxiYWNrU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZENvbXBvbmVudC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25SZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblNlcnZpY2UvSGVsbG9Xb3JsZENvbXBvbmVudC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3Byb21vdGlvblNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvcHJvbW90aW9uU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3JtaS9zaW1wbGVTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvcm1pL3NpbXBsZVNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy9ybWkvc2ltcGxlU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvYXN5bmNoUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvYXN5bmNoUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvYXN5bmNoU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvYXN5bmNoU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2FzeW5jaFNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9hc3luY2hTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvY2FsbGJhY2tSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvY2FsbGJhY2tSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvY2FsbGJhY2tSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvY2FsbGJhY2tSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1JlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1NlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvY2FsbGJhY2tTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9jYWxsYmFja1NlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvY2FsbGJhY2tTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL2NhbGxiYWNrU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25SZWZlcmVuY2UvSGVsbG9Xb3JsZENvbXBvbmVudC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uUmVmZXJlbmNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblJlZmVyZW5jZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25SZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uU2VydmljZS9IZWxsb1dvcmxkQ29tcG9uZW50LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblNlcnZpY2UvSGVsbG9Xb3JsZENvbXBvbmVudC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25TZXJ2aWNlL0hlbGxvV29ybGRDb21wb25lbnQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3Byb21vdGlvblNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9wcm9tb3Rpb25TZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3MvcHJvbW90aW9uU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVSZWZlcmVuY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3Mvc2ltcGxlUmVmZXJlbmNlL0hlbGxvV29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVJlZmVyZW5jZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVSZWZlcmVuY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3Mvc2ltcGxlUmVmZXJlbmNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVJlZmVyZW5jZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVTZXJ2aWNlL0hlbGxvV29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3Mvc2ltcGxlU2VydmljZS9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVNlcnZpY2UvSGVsbG9Xb3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2JpbmRpbmctc2NhLXRyaWJlcy9zcmMvdGVzdC9yZXNvdXJjZXMvd3Mvc2ltcGxlU2VydmljZS9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9iaW5kaW5nLXNjYS10cmliZXMvc3JjL3Rlc3QvcmVzb3VyY2VzL3dzL3NpbXBsZVNlcnZpY2UvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvYmluZGluZy1zY2EtdHJpYmVzL3NyYy90ZXN0L3Jlc291cmNlcy93cy9zaW1wbGVTZXJ2aWNlL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLWNsaWVudC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLWNsaWVudC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLWNsaWVudC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtY2xpZW50L3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtY2xpZW50L3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvSGVsbG93b3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1jbGllbnQvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9IZWxsb3dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLWNsaWVudC9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL0hlbGxvd29ybGRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1jbGllbnQvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9IZWxsb3dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtY2xpZW50LmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtY2xpZW50LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtY2xpZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1jbGllbnQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLWlmYWNlL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtaWZhY2UvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1pZmFjZS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtaWZhY2UvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1pZmFjZS9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL0hlbGxvd29ybGQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1pZmFjZS9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL0hlbGxvd29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1pZmFjZS9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL0hlbGxvd29ybGQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLWlmYWNlL3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvSGVsbG93b3JsZC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hL3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvSGVsbG93b3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWEvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9IZWxsb3dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYS9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL0hlbGxvd29ybGRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWEvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9IZWxsb3dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWEvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWEvc3JjL21haW4vcmVzb3VyY2VzL3NlcnZpY2UtYS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2aWNlLWEuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYS9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmljZS1hLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYS9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmljZS1hLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYW5kLWNsaWVudC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYW5kLWNsaWVudC9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL3NhYy9IZWxsb3dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hbmQtY2xpZW50L3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvc2FjL0hlbGxvd29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9zYWMvSGVsbG93b3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hbmQtY2xpZW50L3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvc2FjL0hlbGxvd29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9zYWMvSGVsbG93b3JsZENsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9zYWMvSGVsbG93b3JsZENsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9zYWMvSGVsbG93b3JsZENsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYW5kLWNsaWVudC9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL3NhYy9IZWxsb3dvcmxkQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYW5kLWNsaWVudC9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL3NhYy9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9zYWMvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hbmQtY2xpZW50L3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvc2FjL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hbmQtY2xpZW50L3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvc2FjL0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYW5kLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hbmQtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hbmQtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWFuZC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtc2VydmljZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1hbmQtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLXNlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYW5kLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1zZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYW5kLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1zZXJ2aWNlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWIvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWIvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWIvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYi9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYi9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL0hlbGxvd29ybGRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1iL3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvSGVsbG93b3JsZEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWIvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9IZWxsb3dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1iL3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvSGVsbG93b3JsZEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWIvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1iL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1iL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2aWNlLWIuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYi9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmljZS1iLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWIvc3JjL21haW4vcmVzb3VyY2VzL3NlcnZpY2UtYi5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWIvc3JjL21haW4vcmVzb3VyY2VzL3NlcnZpY2UtYi5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1jL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1jL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1jL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWMvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWMvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9IZWxsb3dvcmxkSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYy9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL0hlbGxvd29ybGRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1jL3NyYy9tYWluL2phdmEvaXRlc3Qvbm9kZXMvSGVsbG93b3JsZEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYy9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL0hlbGxvd29ybGRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1jL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UtYy9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmljZS1jLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlLWMvc3JjL21haW4vcmVzb3VyY2VzL3NlcnZpY2UtYy5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1jL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2aWNlLWMuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS1jL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2aWNlLWMuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2UvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2Uvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9IZWxsb3dvcmxkSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2Uvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9IZWxsb3dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2Uvc3JjL21haW4vamF2YS9pdGVzdC9ub2Rlcy9IZWxsb3dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS9zcmMvbWFpbi9qYXZhL2l0ZXN0L25vZGVzL0hlbGxvd29ybGRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvaGVsbG93b3JsZC1zZXJ2aWNlL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLXNlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2Uvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtc2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL2hlbGxvd29ybGQtc2VydmljZS9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1zZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9oZWxsb3dvcmxkLXNlcnZpY2Uvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtc2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3QtY2xpZW50L3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1qdm0taGF6ZWxjYXN0LWNsaWVudC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1YjYxMDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1qdm0taGF6ZWxjYXN0LWNsaWVudC9wb20ueG1sCkBAIC0wLDAgKzEsNTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQorPCEtLQ0KKyAgICAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAgICAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAgICAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgICAgKiANCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAgICAqIA0KKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAgICAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgICAgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPHByb2plY3Q+DQorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4NCisgICAgPHBhcmVudD4NCisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPg0KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+DQorICAgIDwvcGFyZW50Pg0KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1ub2Rlcy1vbmUtanZtLWhhemVsY2FzdC1jbGllbnQ8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBOb2RlcyBPbmUgSlZNIFVzaW5nIEhhemVsY2FzdCBhbmQgY2xpZW50PC9uYW1lPg0KKw0KKyAgICA8ZGVwZW5kZW5jaWVzPg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1ub2Rlcy1oZWxsb3dvcmxkLWlmYWNlPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iYXNlLXJ1bnRpbWU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1oYXplbGNhc3Q8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisgICAgPGJ1aWxkPg0KKyAgICA8L2J1aWxkPg0KKzwvcHJvamVjdD4NCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC1jbGllbnQvc3JjL3Rlc3QvamF2YS9pdGVzdC9DbGllbnRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC1jbGllbnQvc3JjL3Rlc3QvamF2YS9pdGVzdC9DbGllbnRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC1jbGllbnQvc3JjL3Rlc3QvamF2YS9pdGVzdC9DbGllbnRUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1qdm0taGF6ZWxjYXN0LWNsaWVudC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0NsaWVudFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3QvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3QvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTc5YjkxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC9wb20ueG1sCkBAIC0wLDAgKzEsNTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IS0tCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgICAgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgICAgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgKiAKKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgICAgKiAKKyAgICAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgICAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorLS0+Cis8cHJvamVjdD4KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CisgICAgPHBhcmVudD4KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC1ub2Rlcy1vbmUtanZtLWhhemVsY2FzdDwvYXJ0aWZhY3RJZD4KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgTm9kZXMgT25lIEpWTSBVc2luZyBIYXplbGNhc3QgUmVnaXN0cnk8L25hbWU+CisKKyAgICA8ZGVwZW5kZW5jaWVzPgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5pdGVzdC1ub2Rlcy1oZWxsb3dvcmxkLXNlcnZpY2UtYW5kLWNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtbm9kZXMtaGVsbG93b3JsZC1pZmFjZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1oYXplbGNhc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+CisgICAgICAgIDwvZGVwZW5kZW5jeT4KKyAgICA8L2RlcGVuZGVuY2llcz4KKzwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL29uZS1qdm0taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvT25lTm9kZU9uZUNvbnRyaWJ1dGlvblRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1qdm0taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvT25lTm9kZU9uZUNvbnRyaWJ1dGlvblRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL29uZS1qdm0taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvT25lTm9kZU9uZUNvbnRyaWJ1dGlvblRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlT25lQ29udHJpYnV0aW9uVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L09uZU5vZGVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b05vZGVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b05vZGVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b05vZGVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1qdm0taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvVHdvTm9kZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL29uZS1qdm0taGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvVHdvUmVtb3RlTm9kZXNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b1JlbW90ZU5vZGVzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9Ud29SZW1vdGVOb2Rlc1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9Ud29SZW1vdGVOb2Rlc1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL29uZS1qdm0tdHJpYmVzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1qdm0tdHJpYmVzL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL29uZS1qdm0tdHJpYmVzL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS10cmliZXMvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvb25lLWp2bS10cmliZXMvc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS10cmliZXMvc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvb25lLWp2bS10cmliZXMvc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtLXRyaWJlcy9zcmMvdGVzdC9qYXZhL2l0ZXN0L09uZU5vZGVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9vbmUtanZtLXRyaWJlcy9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b05vZGVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtLXRyaWJlcy9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b05vZGVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9vbmUtanZtLXRyaWJlcy9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b05vZGVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1qdm0tdHJpYmVzL3NyYy90ZXN0L2phdmEvaXRlc3QvVHdvTm9kZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL29uZS1qdm0tdHJpYmVzL3NyYy90ZXN0L2phdmEvaXRlc3QvVHdvUmVtb3RlTm9kZXNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtLXRyaWJlcy9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b1JlbW90ZU5vZGVzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvb25lLWp2bS10cmliZXMvc3JjL3Rlc3QvamF2YS9pdGVzdC9Ud29SZW1vdGVOb2Rlc1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS10cmliZXMvc3JjL3Rlc3QvamF2YS9pdGVzdC9Ud29SZW1vdGVOb2Rlc1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL29uZS1qdm0vcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9vbmUtanZtL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLWp2bS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9vbmUtanZtL3NyYy90ZXN0L2phdmEvaXRlc3QvT25lTm9kZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1qdm0vc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvb25lLWp2bS9zcmMvdGVzdC9qYXZhL2l0ZXN0L09uZU5vZGVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1qdm0vc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvb25lLWp2bS9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b05vZGVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtL3NyYy90ZXN0L2phdmEvaXRlc3QvVHdvTm9kZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL29uZS1qdm0vc3JjL3Rlc3QvamF2YS9pdGVzdC9Ud29Ob2RlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9vbmUtanZtL3NyYy90ZXN0L2phdmEvaXRlc3QvVHdvTm9kZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL29uZS1ub2RlLXRlc3QvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLW5vZGUtdGVzdC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy9vbmUtbm9kZS10ZXN0L3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvb25lLW5vZGUtdGVzdC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy9vbmUtbm9kZS10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvT25lTm9kZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1ub2RlLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvb25lLW5vZGUtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L09uZU5vZGVUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL29uZS1ub2RlLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9PbmVOb2RlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9idWlsZC54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L2J1aWxkLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3QvYnVpbGQueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L2J1aWxkLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3QvY2xpZW50LnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3QvY2xpZW50LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3QvY2xpZW50LnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9jbGllbnQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NlcnZlci54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NlcnZlci54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NlcnZlci54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3Qvc2VydmVyLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3Qvc2VydmljZS1hLWNvbmZpZy54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NlcnZpY2UtYS1jb25maWcueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zZXJ2aWNlLWEtY29uZmlnLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zZXJ2aWNlLWEtY29uZmlnLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3Qvc2VydmljZS1iLWNvbmZpZy54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NlcnZpY2UtYi1jb25maWcueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zZXJ2aWNlLWItY29uZmlnLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zZXJ2aWNlLWItY29uZmlnLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3Qvc2VydmljZS1jLWNvbmZpZy54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NlcnZpY2UtYy1jb25maWcueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zZXJ2aWNlLWMtY29uZmlnLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zZXJ2aWNlLWMtY29uZmlnLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TZXJ2aWNlQS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1NlcnZpY2VBLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU2VydmljZUEuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1NlcnZpY2VBLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU2VydmljZUIuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TZXJ2aWNlQi5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1NlcnZpY2VCLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TZXJ2aWNlQi5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy90aHJlZS1ub2Rlcy10aHJlZS12bXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1NlcnZpY2VDLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU2VydmljZUMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdGhyZWUtbm9kZXMtdGhyZWUtdm1zLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TZXJ2aWNlQy5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL3RocmVlLW5vZGVzLXRocmVlLXZtcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU2VydmljZUMuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXRlc3QvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXRlc3QvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXRlc3QvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdGVzdC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0NsaWVudE5vZGUuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9DbGllbnROb2RlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3R3by1ub2Rlcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvQ2xpZW50Tm9kZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvQ2xpZW50Tm9kZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1NlcnZpY2VOb2RlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU2VydmljZU5vZGUuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TZXJ2aWNlTm9kZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU2VydmljZU5vZGUuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TdG9wU3RhcnROb2Rlc1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU3RvcFN0YXJ0Tm9kZXNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90d28tbm9kZXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1N0b3BTdGFydE5vZGVzVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1N0b3BTdGFydE5vZGVzVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9UZXN0Q2FzZVJ1bm5lci5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1Rlc3RDYXNlUnVubmVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3R3by1ub2Rlcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvVGVzdENhc2VSdW5uZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1Rlc3RDYXNlUnVubmVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvVHdvTm9kZXNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1R3b05vZGVzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9Ud29Ob2Rlc1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9Ud29Ob2Rlc1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9idWlsZC54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9idWlsZC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9idWlsZC54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L2J1aWxkLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L2NsaWVudC1jb25maWcueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3QvY2xpZW50LWNvbmZpZy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9jbGllbnQtY29uZmlnLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3QvY2xpZW50LWNvbmZpZy54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9jbGllbnQueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3QvY2xpZW50LnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L2NsaWVudC54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L2NsaWVudC54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Njc4YmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9wb20ueG1sCkBAIC0wLDAgKzEsMTA5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtbm9kZXMtdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0PC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgTm9kZXMgVHdvIE5vZGVzIFR3byBWTXMgVGVzdCB1c2luZyBIYXplbGNhc3QgcmVnaXN0cnk8L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8IS0tZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktZG9tYWluLW5vZGU8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5LS0+ICAgIA0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1oYXplbGNhc3Q8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiANCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtbm9kZXMtaGVsbG93b3JsZC1pZmFjZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2Nhbnktbm9kZS1pbXBsPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1ub2RlLWxhdW5jaGVyPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gICAgICAgIA0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYS1jbGllbnQtaW1wbDwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaW1wbGVtZW50YXRpb24tamF2YS1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+DQorICAgICAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1iaW5kaW5nLXNjYS1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4gDQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmluZGluZy1ybWktcnVudGltZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaG9zdC1qZXR0eTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8L2RlcGVuZGVuY3k+ICAgDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KKyAgICA8L2RlcGVuZGVuY2llcz4NCisgICAgDQorICAgIDxidWlsZD4NCisgICAgICAgIDxwbHVnaW5zPg0KKyAgICAgICAgICAgIDxwbHVnaW4+DQorICAgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tYW50cnVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5ydW4tc2FtcGxlczwvaWQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnRlc3Q8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+cnVuPC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YXNrcyB1bmxlc3M9Im1hdmVuLnRlc3Quc2tpcCI+IA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByb3BlcnR5IG5hbWU9InR1c2NhbnkudmVyc2lvbiIgdmFsdWU9IiR7dmVyc2lvbn0iIC8+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJvcGVydHkgbmFtZT0icnVudGltZV9jbGFzc3BhdGgiIHJlZmlkPSJtYXZlbi5ydW50aW1lLmNsYXNzcGF0aCIvPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFudCBhbnRmaWxlPSIuL2J1aWxkLnhtbCIgdGFyZ2V0PSJydW4iLz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YXNrcz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgPC9leGVjdXRpb25zPg0KKyAgICAgICAgICAgIDwvcGx1Z2luPg0KKyAgICAgICAgPC9wbHVnaW5zPg0KKyAgICA8L2J1aWxkPiAgICANCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NjYWNsaWVudC54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9zY2FjbGllbnQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3Qvc2NhY2xpZW50LnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3Qvc2NhY2xpZW50LnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NlcnZlci1jb25maWcueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3Qvc2VydmVyLWNvbmZpZy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9zZXJ2ZXItY29uZmlnLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3Qvc2VydmVyLWNvbmZpZy54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9zZXJ2ZXIueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3Qvc2VydmVyLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NlcnZlci54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NlcnZlci54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0NsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9DbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1NDQUNsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TQ0FDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU0NBQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU0NBQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLWhhemVsY2FzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1NlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy1oYXplbGNhc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtaGF6ZWxjYXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L2J1aWxkLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9idWlsZC54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3QvYnVpbGQueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3QvYnVpbGQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L2NsaWVudC1jb25maWcueG1sIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L2NsaWVudC1jb25maWcueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L2NsaWVudC1jb25maWcueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3QvY2xpZW50LWNvbmZpZy54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3QvY2xpZW50LnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9jbGllbnQueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L2NsaWVudC54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9jbGllbnQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3QvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3QvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9zZXJ2ZXItY29uZmlnLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9zZXJ2ZXItY29uZmlnLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9zZXJ2ZXItY29uZmlnLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L3NlcnZlci1jb25maWcueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L3NlcnZlci54bWwgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3Qvc2VydmVyLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9zZXJ2ZXIueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3Qvc2VydmVyLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L0NsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9DbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9ub2Rlcy90d28tbm9kZXMtdHdvLXZtcy10ZXN0L3NyYy90ZXN0L2phdmEvaXRlc3QvQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L25vZGVzL3R3by1ub2Rlcy10d28tdm1zLXRlc3Qvc3JjL3Rlc3QvamF2YS9pdGVzdC9TZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvbm9kZXMvdHdvLW5vZGVzLXR3by12bXMtdGVzdC9zcmMvdGVzdC9qYXZhL2l0ZXN0L1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvb25ld2F5L2J1aWxkLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvb25ld2F5L2J1aWxkLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvb25ld2F5L2J1aWxkLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9vbmV3YXkvYnVpbGQueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9vbmV3YXkvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvb25ld2F5L3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L29uZXdheS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L29uZXdheS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L29uZXdheS9PbmVXYXlDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvb25ld2F5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9vbmV3YXkvT25lV2F5Q2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvb25ld2F5L09uZVdheUNsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvb25ld2F5L09uZVdheUNsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L29uZXdheS9PbmVXYXlTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvb25ld2F5L09uZVdheVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvb25ld2F5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9vbmV3YXkvT25lV2F5U2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvb25ld2F5L09uZVdheVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvb25ld2F5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9vbmV3YXkvaW1wbC9PbmVXYXlDbGllbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvb25ld2F5L2ltcGwvT25lV2F5Q2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L29uZXdheS9pbXBsL09uZVdheUNsaWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L29uZXdheS9pbXBsL09uZVdheUNsaWVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvb25ld2F5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9vbmV3YXkvaW1wbC9PbmVXYXlTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L29uZXdheS9pbXBsL09uZVdheVNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L29uZXdheS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvb25ld2F5L2ltcGwvT25lV2F5U2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9vbmV3YXkvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L29uZXdheS9pbXBsL09uZVdheVNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L29uZXdheS9zcmMvbWFpbi9yZXNvdXJjZXMvT25lV2F5Q29udHJpYnV0aW9uL01FVEEtSU5GL3NjYS1kZXBsb3lhYmxlcy9vbmVXYXkuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9vbmV3YXkvc3JjL21haW4vcmVzb3VyY2VzL09uZVdheUNvbnRyaWJ1dGlvbi9NRVRBLUlORi9zY2EtZGVwbG95YWJsZXMvb25lV2F5LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvb25ld2F5L3NyYy9tYWluL3Jlc291cmNlcy9PbmVXYXlDb250cmlidXRpb24vTUVUQS1JTkYvc2NhLWRlcGxveWFibGVzL29uZVdheS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvb25ld2F5L3NyYy9tYWluL3Jlc291cmNlcy9PbmVXYXlDb250cmlidXRpb24vTUVUQS1JTkYvc2NhLWRlcGxveWFibGVzL29uZVdheS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L29uZXdheS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvb25ld2F5L09uZVdheVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L29uZXdheS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvb25ld2F5L09uZVdheVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L29uZXdheS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvb25ld2F5L09uZVdheVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvb25ld2F5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9vbmV3YXkvT25lV2F5VGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvb3BlcmF0aW9uLW92ZXJsb2FkaW5nL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L29wZXJhdGlvbi1vdmVybG9hZGluZy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvb3BlcmF0aW9uLW92ZXJsb2FkaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L29wb3ZlcmxvYWQvT3ZlcmxvYWRBU291cmNlVGFyZ2V0LmphdmEgYi90ZXN0aW5nL2l0ZXN0L29wZXJhdGlvbi1vdmVybG9hZGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9vcG92ZXJsb2FkL092ZXJsb2FkQVNvdXJjZVRhcmdldC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3Qvb3BvdmVybG9hZC9PdmVybG9hZEFTb3VyY2VUYXJnZXQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3Qvb3BvdmVybG9hZC9PdmVybG9hZEFTb3VyY2VUYXJnZXQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvb3BlcmF0aW9uLW92ZXJsb2FkaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L29wb3ZlcmxvYWQvaW1wbC9PdmVybG9hZEFTb3VyY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvb3BlcmF0aW9uLW92ZXJsb2FkaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L29wb3ZlcmxvYWQvaW1wbC9PdmVybG9hZEFTb3VyY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvb3BlcmF0aW9uLW92ZXJsb2FkaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L29wb3ZlcmxvYWQvaW1wbC9PdmVybG9hZEFTb3VyY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3Qvb3BvdmVybG9hZC9pbXBsL092ZXJsb2FkQVNvdXJjZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3Qvb3BvdmVybG9hZC9pbXBsL092ZXJsb2FkQVRhcmdldC5qYXZhIGIvdGVzdGluZy9pdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3Qvb3BvdmVybG9hZC9pbXBsL092ZXJsb2FkQVRhcmdldC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3Qvb3BvdmVybG9hZC9pbXBsL092ZXJsb2FkQVRhcmdldC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L29wZXJhdGlvbi1vdmVybG9hZGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9vcG92ZXJsb2FkL2ltcGwvT3ZlcmxvYWRBVGFyZ2V0LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L29wZXJhdGlvbi1vdmVybG9hZGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvT3BlcmF0aW9uT3ZlcmxvYWQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvc3JjL21haW4vcmVzb3VyY2VzL09wZXJhdGlvbk92ZXJsb2FkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvb3BlcmF0aW9uLW92ZXJsb2FkaW5nL3NyYy9tYWluL3Jlc291cmNlcy9PcGVyYXRpb25PdmVybG9hZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvb3BlcmF0aW9uLW92ZXJsb2FkaW5nL3NyYy9tYWluL3Jlc291cmNlcy9PcGVyYXRpb25PdmVybG9hZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L29wZXJhdGlvbi1vdmVybG9hZGluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvdGVzdC9vcG92ZXJsb2FkL2ltcGwvT3ZlcmxvYWRBVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvb3BlcmF0aW9uLW92ZXJsb2FkaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L29wb3ZlcmxvYWQvaW1wbC9PdmVybG9hZEFUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9vcGVyYXRpb24tb3ZlcmxvYWRpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3Qvb3BvdmVybG9hZC9pbXBsL092ZXJsb2FkQVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvb3BlcmF0aW9uLW92ZXJsb2FkaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L29wb3ZlcmxvYWQvaW1wbC9PdmVybG9hZEFUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY2llcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9wb2xpY2llcy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY2llcy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9DcmVkaXRDYXJkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9DcmVkaXRDYXJkLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9DcmVkaXRDYXJkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL0NyZWRpdENhcmQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL0NyZWRpdENhcmRQYXltZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9DcmVkaXRDYXJkUGF5bWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvQ3JlZGl0Q2FyZFBheW1lbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvQ3JlZGl0Q2FyZFBheW1lbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL0N1c3RvbWVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9DdXN0b21lci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvQ3VzdG9tZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvQ3VzdG9tZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL0N1c3RvbWVyUmVnaXN0cnkuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL0N1c3RvbWVyUmVnaXN0cnkuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL0N1c3RvbWVyUmVnaXN0cnkuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvQ3VzdG9tZXJSZWdpc3RyeS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvUGF5bWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvUGF5bWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvUGF5bWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9QYXltZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9pbXBsL0NyZWRpdENhcmRQYXltZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvaW1wbC9DcmVkaXRDYXJkUGF5bWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL2ltcGwvQ3JlZGl0Q2FyZFBheW1lbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL2ltcGwvQ3JlZGl0Q2FyZFBheW1lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9pbXBsL0N1c3RvbWVyUmVnaXN0cnlJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9pbXBsL0N1c3RvbWVyUmVnaXN0cnlJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljaWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9pbXBsL0N1c3RvbWVyUmVnaXN0cnlJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL2ltcGwvQ3VzdG9tZXJSZWdpc3RyeUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL2ltcGwvUGF5bWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL2ltcGwvUGF5bWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWNpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL2ltcGwvUGF5bWVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvaW1wbC9QYXltZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9yZXNvdXJjZXMvQ3VzdG9tZXIuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9yZXNvdXJjZXMvQ3VzdG9tZXIuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9yZXNvdXJjZXMvQ3VzdG9tZXIuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL3Jlc291cmNlcy9DdXN0b21lci5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL3Jlc291cmNlcy9Mb2dnaW5nTWVzc2FnZXMucHJvcGVydGllcyBiL3Rlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vcmVzb3VyY2VzL0xvZ2dpbmdNZXNzYWdlcy5wcm9wZXJ0aWVzCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9yZXNvdXJjZXMvTG9nZ2luZ01lc3NhZ2VzLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vcmVzb3VyY2VzL0xvZ2dpbmdNZXNzYWdlcy5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9kZWZpbml0aW9ucy54bWwgYi90ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9kZWZpbml0aW9ucy54bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwNzgzMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL2RlZmluaXRpb25zLnhtbApAQCAtMCwwICsxLDgyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJBU0NJSSI/PgorPCEtLQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPGRlZmluaXRpb25zIHhtbG5zPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vcGVuY3NhL3NjYS8yMDA5MTIiCisgICAgICAgICAgICB4bWxuczpzY2E9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3JnL25zL29wZW5jc2Evc2NhLzIwMDkxMiIKKyAgICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIgorICAgICAgICAgICAgeG1sbnM6dHVzY2FueT0iaHR0cDovL3R1c2NhbnkuYXBhY2hlLm9yZy94bWxucy9zY2EvMS4xIj4KKworICAgIDxwb2xpY3lTZXQgbmFtZT0iSkRLTG9nZ2luZ1BvbGljeSIgCisgICAgICAgICAgICAgICBwcm92aWRlcz0idHVzY2FueTpsb2dnaW5nIiAKKyAgICAgICAgICAgICAgIGFwcGxpZXNUbz0iLy9iaW5kaW5nIHwgLy9pbXBsZW1lbnRhdGlvbiI+CisgICAgICAgIDx0dXNjYW55Ompka0xvZ2dlciBuYW1lPSJ0ZXN0LmxvZ2dlciI+CisgICAgICAgICAgICA8dHVzY2FueTpsb2dMZXZlbD5GSU5FPC90dXNjYW55OmxvZ0xldmVsPgorICAgICAgICAgICAgPHR1c2Nhbnk6cmVzb3VyY2VCdW5kbGU+TG9nZ2luZ01lc3NhZ2VzLnByb3BlcnRpZXM8L3R1c2Nhbnk6cmVzb3VyY2VCdW5kbGU+CisgICAgICAgIDwvdHVzY2FueTpqZGtMb2dnZXI+CisKKyAgICA8L3BvbGljeVNldD4KKyAgICAKKyAgICA8cG9saWN5U2V0IG5hbWU9IkpES0xvZ2dpbmdJbXBsUG9saWN5IiAKKyAgICAgICAgICAgICAgIHByb3ZpZGVzPSJ0dXNjYW55OmxvZ2dpbmciIAorICAgICAgICAgICAgICAgYXBwbGllc1RvPSIvL2ltcGxlbWVudGF0aW9uLmphdmEiCisgICAgICAgICAgICAgICBhdHRhY2hUbz0iLy9zY2E6Y29tcG9uZW50W0BuYW1lPSdDcmVkaXRDYXJkUGF5bWVudCddIj4KKyAgICAgICAgPHR1c2Nhbnk6amRrTG9nZ2VyIG5hbWU9InRlc3QubG9nZ2VyIj4KKyAgICAgICAgICAgIDx0dXNjYW55OmxvZ0xldmVsPklORk88L3R1c2Nhbnk6bG9nTGV2ZWw+CisgICAgICAgICAgICA8dHVzY2FueTpyZXNvdXJjZUJ1bmRsZT5Mb2dnaW5nTWVzc2FnZXMucHJvcGVydGllczwvdHVzY2FueTpyZXNvdXJjZUJ1bmRsZT4KKyAgICAgICAgPC90dXNjYW55Ompka0xvZ2dlcj4KKworICAgIDwvcG9saWN5U2V0PgorICAgIAorICAgIDwhLS0gQSBzZXQgb2YgcG9saWN5IHNldHMgaW50cm9kdWNlZCBqdXN0IHRvIGVuc3VyZSB0aGF0IGludGVudHMgYXJlIHJlc29sdmVkIC0tPgorICAgIAorICAgIDxwb2xpY3lTZXQgbmFtZT0iU3VzcGVuZHNUcmFuc2FjdGlvblBvbGljeSIgCisgICAgICAgICAgICAgICBwcm92aWRlcz0ic2NhOnN1c3BlbmRzVHJhbnNhY3Rpb24iIAorICAgICAgICAgICAgICAgYXBwbGllc1RvPSIvL2JpbmRpbmcuc2NhIHwgLy9pbXBsZW1lbnRhdGlvbi5qYXZhIgorICAgICAgICAgICAgICAgYXR0YWNoVG89IkludGVudFJlZnMoJ3NjYTpzdXNwZW5kc1RyYW5zYWN0aW9uJykiLz4gICAgCisgICAgICAgICAgICAgICAKKyAgICA8cG9saWN5U2V0IG5hbWU9IkF1dGhvcml6YXRpb25GaW5lR3JhaW5Qb2xpY3kiIAorICAgICAgICAgICAgICAgcHJvdmlkZXM9InNjYTphdXRob3JpemF0aW9uLmZpbmVHcmFpbiIgCisgICAgICAgICAgICAgICBhcHBsaWVzVG89Ii8vYmluZGluZy5zY2EgfCAvL2ltcGxlbWVudGF0aW9uLmphdmEiIAorICAgICAgICAgICAgICAgYXR0YWNoVG89IkludGVudFJlZnMoJ3NjYTphdXRob3JpemF0aW9uJykgfCBJbnRlbnRSZWZzKCdzY2E6YXV0aG9yaXphdGlvbi5maW5lR3JhaW4nKSIvPiAgIAorICAgICAgICAgICAgICAgCisgICAgPHBvbGljeVNldCBuYW1lPSJDb25maWRlbnRpYWxpdHlUcmFuc3BvcnRQb2xpY3kiIAorICAgICAgICAgICAgICAgcHJvdmlkZXM9InNjYTpjb25maWRlbnRpYWxpdHkudHJhbnNwb3J0IiAKKyAgICAgICAgICAgICAgIGFwcGxpZXNUbz0iLy9iaW5kaW5nLnNjYSB8IC8vaW1wbGVtZW50YXRpb24uamF2YSIKKyAgICAgICAgICAgICAgIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6Y29uZmlkZW50aWFsaXR5LnRyYW5zcG9ydCcpIi8+ICAgICAgICAgICAgICAgCisKKyAgICA8cG9saWN5U2V0IG5hbWU9IkNvbmZpZGVudGlhbGl0eU1lc3NhZ2VQb2xpY3kiIAorICAgICAgICAgICAgICAgcHJvdmlkZXM9InNjYTpjb25maWRlbnRpYWxpdHkubWVzc2FnZSIgCisgICAgICAgICAgICAgICBhcHBsaWVzVG89Ii8vYmluZGluZy5zY2EgfCAvL2ltcGxlbWVudGF0aW9uLmphdmEiCisgICAgICAgICAgICAgICBhdHRhY2hUbz0iSW50ZW50UmVmcygnc2NhOmNvbmZpZGVudGlhbGl0eS5tZXNzYWdlJykiLz4gICAKKyAgICAgICAgICAgICAgIAorICAgIDxwb2xpY3lTZXQgbmFtZT0iQ2xpZW50QXV0aGVudGljYXRpb25UcmFuc3BvcnRQb2xpY3kiIAorICAgICAgICAgICAgICAgcHJvdmlkZXM9InNjYTpjbGllbnRBdXRoZW50aWNhdGlvbi50cmFuc3BvcnQiIAorICAgICAgICAgICAgICAgYXBwbGllc1RvPSIvL2JpbmRpbmcuc2NhIHwgLy9pbXBsZW1lbnRhdGlvbi5qYXZhIgorICAgICAgICAgICAgICAgYXR0YWNoVG89IkludGVudFJlZnMoJ3NjYTpjbGllbnRBdXRoZW50aWNhdGlvbi50cmFuc3BvcnQnKSB8IC8vc2NhOnNlcnZpY2VbQG5hbWU9J0NyZWRpdENhcmRQYXltZW50J10iLz4gIAorICAgICAgICAgICAgICAgCisgICAgPHBvbGljeVNldCBuYW1lPSJJbnRlZ3JpdHlUcmFuc3BvcnRQb2xpY3kiIAorICAgICAgICAgICAgICAgcHJvdmlkZXM9InNjYTppbnRlZ3JpdHkudHJhbnNwb3J0IiAKKyAgICAgICAgICAgICAgIGFwcGxpZXNUbz0iLy9iaW5kaW5nLnNjYSB8IC8vaW1wbGVtZW50YXRpb24uamF2YSIKKyAgICAgICAgICAgICAgIGF0dGFjaFRvPSJJbnRlbnRSZWZzKCdzY2E6aW50ZWdyaXR5LnRyYW5zcG9ydCcpIi8+ICAgCisgICAgICAgICAgICAgICAKKwk8cG9saWN5U2V0IG5hbWU9Ik1hbmFnZWRUcmFuc2FjdGlvbkdsb2JhbFBvbGljeSIKKwkJCSAgIHByb3ZpZGVzPSJzY2E6bWFuYWdlZFRyYW5zYWN0aW9uLmdsb2JhbCIKKwkJCSAgIGFwcGxpZXNUbz0iLy9pbXBsZW1lbnRhdGlvbi5jb21wb3NpdGUgfCAvL2ltcGxlbWVudGF0aW9uLmphdmEiCisJCQkgICBhdHRhY2hUbz0iSW50ZW50UmVmcygnc2NhOm1hbmFnZWRUcmFuc2FjdGlvbi5nbG9iYWwnKSIvPgkgICAgICAgICAgICAgIAkgICAgICAgICAgICAgIAorPC9kZWZpbml0aW9ucz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWNpZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljaWVzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWNpZXMvc3JjL21haW4vcmVzb3VyY2VzL1BheW1lbnQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9yZXNvdXJjZXMvUGF5bWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljaWVzL3NyYy9tYWluL3Jlc291cmNlcy9QYXltZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY2llcy9zcmMvbWFpbi9yZXNvdXJjZXMvUGF5bWVudC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljaWVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY2llcy9QYXltZW50VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL1BheW1lbnRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY2llcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWNpZXMvUGF5bWVudFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWNpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljaWVzL1BheW1lbnRUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvcG9saWN5LXRyYW5zYWN0aW9uL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljeS10cmFuc2FjdGlvbi9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljeS10cmFuc2FjdGlvbi9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL21haW4vamF2YS9jdXN0b21lci9DdXN0b21lci5qYXZhIGIvdGVzdGluZy9pdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL21haW4vamF2YS9jdXN0b21lci9DdXN0b21lci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL21haW4vamF2YS9jdXN0b21lci9DdXN0b21lci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljeS10cmFuc2FjdGlvbi9zcmMvbWFpbi9qYXZhL2N1c3RvbWVyL0N1c3RvbWVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljeS10cmFuc2FjdGlvbi9zcmMvbWFpbi9qYXZhL2N1c3RvbWVyL0N1c3RvbWVyUmVnaXN0cnkuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcG9saWN5LXRyYW5zYWN0aW9uL3NyYy9tYWluL2phdmEvY3VzdG9tZXIvQ3VzdG9tZXJSZWdpc3RyeS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL21haW4vamF2YS9jdXN0b21lci9DdXN0b21lclJlZ2lzdHJ5LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWN5LXRyYW5zYWN0aW9uL3NyYy9tYWluL2phdmEvY3VzdG9tZXIvQ3VzdG9tZXJSZWdpc3RyeS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL21haW4vamF2YS9jdXN0b21lci9pbXBsL0N1c3RvbWVyUmVnaXN0cnlJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS10cmFuc2FjdGlvbi9zcmMvbWFpbi9qYXZhL2N1c3RvbWVyL2ltcGwvQ3VzdG9tZXJSZWdpc3RyeUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWN5LXRyYW5zYWN0aW9uL3NyYy9tYWluL2phdmEvY3VzdG9tZXIvaW1wbC9DdXN0b21lclJlZ2lzdHJ5SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljeS10cmFuc2FjdGlvbi9zcmMvbWFpbi9qYXZhL2N1c3RvbWVyL2ltcGwvQ3VzdG9tZXJSZWdpc3RyeUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5LXRyYW5zYWN0aW9uL3NyYy9tYWluL3Jlc291cmNlcy9DdXN0b21lci5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS10cmFuc2FjdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvQ3VzdG9tZXIuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL0N1c3RvbWVyLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL0N1c3RvbWVyLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5LXRyYW5zYWN0aW9uL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9wb2xpY3kvdHJhbnNhY3Rpb24vQ3VzdG9tZXJUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljeS90cmFuc2FjdGlvbi9DdXN0b21lclRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljeS10cmFuc2FjdGlvbi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcG9saWN5L3RyYW5zYWN0aW9uL0N1c3RvbWVyVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3ktdHJhbnNhY3Rpb24vc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3BvbGljeS90cmFuc2FjdGlvbi9DdXN0b21lclRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9wb2xpY3kvbWF0Y2hpbmcvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWN5L21hdGNoaW5nL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWN5L21hdGNoaW5nL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L21hdGNoaW5nL2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhIGIvdGVzdGluZy9pdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvbWF0Y2hpbmcvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvbWF0Y2hpbmcvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L21hdGNoaW5nL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvbWF0Y2hpbmcvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvbWF0Y2hpbmcvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L21hdGNoaW5nL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvbWF0Y2hpbmcvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvbWF0Y2hpbmcvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kZWZpbml0aW9ucy54bWwuRGVmaW5pdGlvbnMgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kZWZpbml0aW9ucy54bWwuRGVmaW5pdGlvbnMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kZWZpbml0aW9ucy54bWwuRGVmaW5pdGlvbnMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLnhtbC5EZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL2RlZmluaXRpb25zLnhtbCBiL3Rlc3RpbmcvaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL2RlZmluaXRpb25zLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL2RlZmluaXRpb25zLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L21hdGNoaW5nL2hlbGxvd29ybGQvZGVmaW5pdGlvbnMueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L21hdGNoaW5nL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvbWF0Y2hpbmcvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL2hlbGxvd29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvbWF0Y2hpbmcvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbCBiL3Rlc3RpbmcvaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L21hdGNoaW5nL2hlbGxvd29ybGQvaGVsbG93b3JsZC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY3kvbWF0Y2hpbmcvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS9tYXRjaGluZy9NYXRjaGluZ1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L21hdGNoaW5nL01hdGNoaW5nVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWN5L21hdGNoaW5nL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvbWF0Y2hpbmcvTWF0Y2hpbmdUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljeS9tYXRjaGluZy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L21hdGNoaW5nL01hdGNoaW5nVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3kvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L3dzcG9saWN5L3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS93c3BvbGljeS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3kvd3Nwb2xpY3kvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3dzcG9saWN5L2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3dzcG9saWN5L2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3dzcG9saWN5L2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvTG9nZ2luZ01lc3NhZ2VzLnByb3BlcnRpZXMgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvTG9nZ2luZ01lc3NhZ2VzLnByb3BlcnRpZXMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvTG9nZ2luZ01lc3NhZ2VzLnByb3BlcnRpZXMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL3Jlc291cmNlcy9Mb2dnaW5nTWVzc2FnZXMucHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zIGIvdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kZWZpbml0aW9ucy54bWwuRGVmaW5pdGlvbnMKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9kZWZpbml0aW9ucy54bWwgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9kZWZpbml0aW9ucy54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9kZWZpbml0aW9ucy54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9oZWxsb3dvcmxkL2RlZmluaXRpb25zLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9oZWxsb3dvcmxkL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3dzcG9saWN5L2hlbGxvd29ybGQvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3dzcG9saWN5L2hlbGxvd29ybGQvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9oZWxsb3dvcmxkLndzZGwgYi90ZXN0aW5nL2l0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9oZWxsb3dvcmxkLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvaGVsbG93b3JsZC9oZWxsb3dvcmxkLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3QvcG9saWN5L3dzcG9saWN5L3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9wb2xpY3kvd3Nwb2xpY3kvV1NQb2xpY3lUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9XU1BvbGljeVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3BvbGljeS93c3BvbGljeS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvcG9saWN5L3dzcG9saWN5L1dTUG9saWN5VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wb2xpY3kvd3Nwb2xpY3kvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3BvbGljeS93c3BvbGljeS9XU1BvbGljeVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3QvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3QvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjM1MmFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC9wb20ueG1sCkBAIC0wLDAgKzEsMTExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICogCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICogCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPjxwcm9qZWN0PgorICAgIDxtb2RlbFZlcnNpb24+NC4wLjA8L21vZGVsVmVyc2lvbj4KKyAgICA8cGFyZW50PgorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LXNjYTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPgorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uLy4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4KKyAgICA8L3BhcmVudD4KKyAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWl0ZXN0PC9hcnRpZmFjdElkPgorICAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CisgICAgPG5hbWU+QXBhY2hlIFR1c2NhbnkgU0NBIEludGVncmF0aW9uIFRlc3RzPC9uYW1lPgorICAgIAorICAgIDxkZXBlbmRlbmNpZXM+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+anVuaXQ8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qdW5pdDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjQuOC4xPC92ZXJzaW9uPgorICAgICAgICAgICAgPHNjb3BlPmNvbXBpbGU8L3Njb3BlPgorICAgICAgICA8L2RlcGVuZGVuY3k+CisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgPG1vZHVsZXM+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5iYXNlPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5idWlsZGVyPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5icGVsPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5jYWxsYmFjay1hcGk8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmNhbGxiYWNrLWJhc2ljPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5jYWxsYmFjay1jb21wbGV4LXR5cGU8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmNhbGxiYWNrLW11bHRpcGxlLXdpcmVzPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5jYWxsYmFjay1zZXBhcmF0ZXRocmVhZDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y2FsbGJhY2stdHdvLWNvbXBvc2l0ZXM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmNhbGxiYWNrLXR3by1ub2RlczwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+Y29tcG9uZW50LXR5cGU8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi1mb2xkZXI8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmNvbnRyaWJ1dGlvbi16aXA8L21vZHVsZT4KKzwhLS0gd2h5IGNvbW1lbnRlZCBvdXQ/ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICA8bW9kdWxlPmRlZmluaXRpb25zLW11bHRpcGxlPC9tb2R1bGU+CistLT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmRhdGFiaW5kaW5nczwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+ZGlzdHJpYnV0aW9uPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5leGNlcHRpb25zPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT5pbXBsZW1lbnRhdGlvbi1zcHJpbmc8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmltcG9ydC1leHBvcnQ8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmludGVyZmFjZXM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmptczwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+bm9kZXM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPm5vZGUtbGF1bmNoZXItZXF1aW5veDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+b25ld2F5PC9tb2R1bGU+Cis8IS0tIHdoeSBjb21tZW50ZWQgb3V0PworICAgICAgICAgICAgICAgIDxtb2R1bGU+b3BlcmF0aW9uLW92ZXJsb2FkaW5nPC9tb2R1bGU+CistLT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnBvbGljeTwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+cG9saWNpZXM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnBvbGljeS10cmFuc2FjdGlvbjwvbW9kdWxlPiAgCis8IS0tIHdhaXQgdW50aWwgZGF0YWJpbmRpbmctc2RvIGlzIGluCisgICAgICAgICAgICAgICAgPG1vZHVsZT5wcm9wZXJ0aWVzPC9tb2R1bGU+CistLT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnJlY3Vyc2l2ZS1tdWx0aS1sZXZlbDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+cmVmZXJlbmNlczwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+c2NhY2xpZW50LWFwaTwvbW9kdWxlPgorPCEtLSBUVVNDQU5ZLTM0MjQgLSBTQ0FDbGllbnQgaW4gSlNFIHdpdGggT1NHaSBydW50aW1lIG5vdCB5ZXQgc3VwcG9ydGVkCisgICAgICAgICAgICAgICAgPG1vZHVsZT5zY2FjbGllbnQtYXBpLWpzZS1vc2dpPC9tb2R1bGU+CistLT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnNjYWNsaWVudC1hcGktb3NnaTwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+c2NhY2xpZW50LWFwaS1yZW1vdGU8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnNjb3BlczwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+c2NkbDwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+c2VydmljZXM8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPnNlcnZpY2UtcmVmZXJlbmNlPC9tb2R1bGU+CisgICAgICAgICAgICAgICAgPG1vZHVsZT53aXJlczwvbW9kdWxlPiAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgPG1vZHVsZT53czwvbW9kdWxlPgorICAgICAgICAgICAgICAgIDxtb2R1bGU+d3MtamF4d3M8L21vZHVsZT4KKyAgICAgICAgICAgICAgICA8bW9kdWxlPmFzeW5jLWludGVyYWN0aW9uczwvbW9kdWxlPgorICA8L21vZHVsZXM+CisKKyAgPCEtLSBXZSBkb24ndCB3YW50IHRvIGRlcGxveSBhbnkgb2YgdGhlIHRlc3QgbW9kdWxlcyAtLT4KKyAgPHByb3BlcnRpZXM+CisgICAgIDxtYXZlbi5kZXBsb3kuc2tpcD50cnVlPC9tYXZlbi5kZXBsb3kuc2tpcD4KKyAgPC9wcm9wZXJ0aWVzPgorCisgIDxidWlsZD4KKyAgICAgPHBsdWdpbnM+CisgICAgICAgIDxwbHVnaW4+CisgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUubWF2ZW4ucGx1Z2luczwvZ3JvdXBJZD4KKyAgICAgICAgICAgPGFydGlmYWN0SWQ+bWF2ZW4tZGVwbG95LXBsdWdpbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgIDxza2lwPnRydWU8L3NraXA+CisgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4KKyAgICAgICAgPC9wbHVnaW4+CisgICAgIDwvcGx1Z2lucz4KKyAgPC9idWlsZD4KKworPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9pbXBsL015U2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvbXlzY2EvdGVzdC9teXNlcnZpY2UvaW1wbC9NeVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL215c2NhL3Rlc3QvbXlzZXJ2aWNlL2ltcGwvTXlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL215c2NhL3Rlc3QvbXlzZXJ2aWNlL2ltcGwvTXlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9pbXBsL015U2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL215c2NhL3Rlc3QvbXlzZXJ2aWNlL2ltcGwvTXlTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvbXlzY2EvdGVzdC9teXNlcnZpY2UvaW1wbC9NeVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL215c2NhL3Rlc3QvbXlzZXJ2aWNlL2ltcGwvTXlTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvbXlzY2EvdGVzdC9teXNlcnZpY2UvaW1wbC9NeVRvdGFsU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL215c2NhL3Rlc3QvbXlzZXJ2aWNlL2ltcGwvTXlUb3RhbFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9pbXBsL015VG90YWxTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9pbXBsL015VG90YWxTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9BQkNEQ29tcG9uZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0FCQ0RDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQUJDRENvbXBvbmVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0FCQ0RDb21wb25lbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQUJDRENvbXBvbmVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQUJDRENvbXBvbmVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQUJDRENvbXBvbmVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9BQkNEQ29tcG9uZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9BQkNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9BQkNvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9BQkNvbXBvbmVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0FCQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0FCQ29tcG9uZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9BQkNvbXBvbmVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQUJDb21wb25lbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQUJDb21wb25lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0NEQ29tcG9uZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0NEQ29tcG9uZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0NEQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQ0RDb21wb25lbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQ0RDb21wb25lbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0NEQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9DRENvbXBvbmVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9DRENvbXBvbmVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvQ29tcGxleFByb3BlcnR5QmVhbi5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9Db21wbGV4UHJvcGVydHlCZWFuLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L0NvbXBsZXhQcm9wZXJ0eUJlYW4uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9Db21wbGV4UHJvcGVydHlCZWFuLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L092ZXJyaWRlU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9PdmVycmlkZVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvT3ZlcnJpZGVTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvT3ZlcnJpZGVTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L092ZXJyaWRlU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvT3ZlcnJpZGVTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9PdmVycmlkZVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvT3ZlcnJpZGVTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9Qcm9wZXJ0eUNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9Qcm9wZXJ0eUNvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9Qcm9wZXJ0eUNvbXBvbmVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1Byb3BlcnR5Q29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1Byb3BlcnR5Q29tcG9uZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9Qcm9wZXJ0eUNvbXBvbmVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvUHJvcGVydHlDb21wb25lbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvUHJvcGVydHlDb21wb25lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1Byb3BlcnR5U2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9Qcm9wZXJ0eVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvUHJvcGVydHlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvUHJvcGVydHlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2NkaS9CYXIuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvY2RpL0Jhci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9jZGkvQmFyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvY2RpL0Jhci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9jZGkvRm9vMS5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9jZGkvRm9vMS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9jZGkvRm9vMS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2NkaS9Gb28xLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2NkaS9Gb28yLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2NkaS9Gb28yLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2NkaS9Gb28yLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvY2RpL0ZvbzIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvY2RpL0ZvbzMuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvY2RpL0ZvbzMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvY2RpL0ZvbzMuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9jZGkvRm9vMy5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvdGVzdC9qYXhiL3Byb3BzL09iamVjdEZhY3RvcnkuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL3Rlc3QvamF4Yi9wcm9wcy9PYmplY3RGYWN0b3J5LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS90ZXN0L2pheGIvcHJvcHMvT2JqZWN0RmFjdG9yeS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS90ZXN0L2pheGIvcHJvcHMvT2JqZWN0RmFjdG9yeS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvdGVzdC9qYXhiL3Byb3BzL1JldHVybkNvZGVQcm9wZXJ0aWVzLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS90ZXN0L2pheGIvcHJvcHMvUmV0dXJuQ29kZVByb3BlcnRpZXMuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL3Rlc3QvamF4Yi9wcm9wcy9SZXR1cm5Db2RlUHJvcGVydGllcy5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vamF2YS90ZXN0L2pheGIvcHJvcHMvUmV0dXJuQ29kZVByb3BlcnRpZXMuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL3Rlc3QvamF4Yi9wcm9wcy9wYWNrYWdlLWluZm8uamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL3Rlc3QvamF4Yi9wcm9wcy9wYWNrYWdlLWluZm8uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9qYXZhL3Rlc3QvamF4Yi9wcm9wcy9wYWNrYWdlLWluZm8uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL2phdmEvdGVzdC9qYXhiL3Byb3BzL3BhY2thZ2UtaW5mby5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9Db25zdHJ1Y3RvclByb3BlcnR5SW5qZWN0aW9uLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvQ29uc3RydWN0b3JQcm9wZXJ0eUluamVjdGlvbi5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL0NvbnN0cnVjdG9yUHJvcGVydHlJbmplY3Rpb24uY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL0NvbnN0cnVjdG9yUHJvcGVydHlJbmplY3Rpb24uY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9PdXRlci5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL091dGVyLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvT3V0ZXIuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL091dGVyLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvT3V0ZXJQcm9wZXJ0eVRlc3QuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9PdXRlclByb3BlcnR5VGVzdC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL091dGVyUHJvcGVydHlUZXN0LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9PdXRlclByb3BlcnR5VGVzdC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL1Byb3BlcnR5VGVzdC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL1Byb3BlcnR5VGVzdC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL1Byb3BlcnR5VGVzdC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvUHJvcGVydHlUZXN0LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvY3VzdG9tZXIueHNkIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9jdXN0b21lci54c2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL2N1c3RvbWVyLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9jdXN0b21lci54c2QKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL2ZpbGVQcm9wZXJ0eS50eHQgYi90ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL2ZpbGVQcm9wZXJ0eS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL2ZpbGVQcm9wZXJ0eS50eHQKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvZmlsZVByb3BlcnR5LnR4dApkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvZm9vLnhzZCBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvZm9vLnhzZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvZm9vLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9mb28ueHNkCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9tYW55VmFsdWVzRmlsZVByb3BlcnR5LnR4dCBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvbWFueVZhbHVlc0ZpbGVQcm9wZXJ0eS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL21hbnlWYWx1ZXNGaWxlUHJvcGVydHkudHh0CnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL21hbnlWYWx1ZXNGaWxlUHJvcGVydHkudHh0CmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9teVNpbXBsZVNlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9teVNpbXBsZVNlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9teVNpbXBsZVNlcnZpY2UuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL215U2ltcGxlU2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL3JjUHJvcHMudHh0IGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9yY1Byb3BzLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvcmNQcm9wcy50eHQKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvcmNQcm9wcy50eHQKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL21haW4vcmVzb3VyY2VzL3JjcHJvcHMueHNkIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy9tYWluL3Jlc291cmNlcy9yY3Byb3BzLnhzZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvcmNwcm9wcy54c2QKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvbWFpbi9yZXNvdXJjZXMvcmNwcm9wcy54c2QKZGlmZiAtLWdpdCBhL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L015VG90YWxTZXJ2aWNlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvTXlUb3RhbFNlcnZpY2VUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9wcm9wZXJ0aWVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9NeVRvdGFsU2VydmljZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvTXlUb3RhbFNlcnZpY2VUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9PdXRlclByb3BlcnR5VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcHJvcGVydGllcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvT3V0ZXJQcm9wZXJ0eVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L091dGVyUHJvcGVydHlUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L091dGVyUHJvcGVydHlUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9wcm9wZXJ0aWVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9Qcm9wZXJ0eVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1Byb3BlcnR5VGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcHJvcGVydGllcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvUHJvcGVydHlUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Byb3BlcnRpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1Byb3BlcnR5VGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcHJvcGVydGllcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvY2RpL0NvbnN0cnVjdG9yUHJvcGVydHlJbmplY3Rpb25UZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9jZGkvQ29uc3RydWN0b3JQcm9wZXJ0eUluamVjdGlvblRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Byb3BlcnRpZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L2NkaS9Db25zdHJ1Y3RvclByb3BlcnR5SW5qZWN0aW9uVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9wcm9wZXJ0aWVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9jZGkvQ29uc3RydWN0b3JQcm9wZXJ0eUluamVjdGlvblRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS1tdWx0aS1sZXZlbC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS1tdWx0aS1sZXZlbC9zcmMvbWFpbi9qYXZhL215c2NhL3Rlc3QvbXlzZXJ2aWNlL015U2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9NeVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL2phdmEvbXlzY2EvdGVzdC9teXNlcnZpY2UvTXlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL2phdmEvbXlzY2EvdGVzdC9teXNlcnZpY2UvTXlTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS1tdWx0aS1sZXZlbC9zcmMvbWFpbi9qYXZhL215c2NhL3Rlc3QvbXlzZXJ2aWNlL015U2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL2phdmEvbXlzY2EvdGVzdC9teXNlcnZpY2UvTXlTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9NeVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL2phdmEvbXlzY2EvdGVzdC9teXNlcnZpY2UvTXlTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9NeVNpbXBsZVRvdGFsU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9NeVNpbXBsZVRvdGFsU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9NeVNpbXBsZVRvdGFsU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS1tdWx0aS1sZXZlbC9zcmMvbWFpbi9qYXZhL215c2NhL3Rlc3QvbXlzZXJ2aWNlL015U2ltcGxlVG90YWxTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS1tdWx0aS1sZXZlbC9zcmMvbWFpbi9qYXZhL215c2NhL3Rlc3QvbXlzZXJ2aWNlL015U2ltcGxlVG90YWxTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL21haW4vamF2YS9teXNjYS90ZXN0L215c2VydmljZS9NeVNpbXBsZVRvdGFsU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL2phdmEvbXlzY2EvdGVzdC9teXNlcnZpY2UvTXlTaW1wbGVUb3RhbFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL2phdmEvbXlzY2EvdGVzdC9teXNlcnZpY2UvTXlTaW1wbGVUb3RhbFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS1tdWx0aS1sZXZlbC9zcmMvbWFpbi9yZXNvdXJjZXMvVG90YWxTZXJ2aWNlMUF1dG8uY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL21haW4vcmVzb3VyY2VzL1RvdGFsU2VydmljZTFBdXRvLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL3Jlc291cmNlcy9Ub3RhbFNlcnZpY2UxQXV0by5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL3Jlc291cmNlcy9Ub3RhbFNlcnZpY2UxQXV0by5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS1tdWx0aS1sZXZlbC9zcmMvbWFpbi9yZXNvdXJjZXMvVG90YWxTZXJ2aWNlMkF1dG8uY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL21haW4vcmVzb3VyY2VzL1RvdGFsU2VydmljZTJBdXRvLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL3Jlc291cmNlcy9Ub3RhbFNlcnZpY2UyQXV0by5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL3Jlc291cmNlcy9Ub3RhbFNlcnZpY2UyQXV0by5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS1tdWx0aS1sZXZlbC9zcmMvbWFpbi9yZXNvdXJjZXMvVG90YWxTZXJ2aWNlM0F1dG8uY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL21haW4vcmVzb3VyY2VzL1RvdGFsU2VydmljZTNBdXRvLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL3Jlc291cmNlcy9Ub3RhbFNlcnZpY2UzQXV0by5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy9tYWluL3Jlc291cmNlcy9Ub3RhbFNlcnZpY2UzQXV0by5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS1tdWx0aS1sZXZlbC9zcmMvdGVzdC9qYXZhL3Rlc3Qvc2NhL3Rlc3RzL011bHRpTGV2ZWxUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtbXVsdGktbGV2ZWwvc3JjL3Rlc3QvamF2YS90ZXN0L3NjYS90ZXN0cy9NdWx0aUxldmVsVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy90ZXN0L2phdmEvdGVzdC9zY2EvdGVzdHMvTXVsdGlMZXZlbFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLW11bHRpLWxldmVsL3NyYy90ZXN0L2phdmEvdGVzdC9zY2EvdGVzdHMvTXVsdGlMZXZlbFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3MvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9qYXZhL3BvbGljeS9UYXJnZXQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcG9saWN5L1RhcmdldC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9wb2xpY3kvVGFyZ2V0LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcG9saWN5L1RhcmdldC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9wb2xpY3kvVGFyZ2V0Q2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9wb2xpY3kvVGFyZ2V0Q2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9wb2xpY3kvVGFyZ2V0Q2xpZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9qYXZhL3BvbGljeS9UYXJnZXRDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9qYXZhL3BvbGljeS9UYXJnZXRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9wb2xpY3kvVGFyZ2V0U2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcG9saWN5L1RhcmdldFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcG9saWN5L1RhcmdldFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9qYXZhL3JlY3Vyc2l2ZS9Db21wb3Nlci5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9yZWN1cnNpdmUvQ29tcG9zZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9qYXZhL3JlY3Vyc2l2ZS9Db21wb3NlckNsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9yZWN1cnNpdmUvQ29tcG9zZXJDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyQ2xpZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9qYXZhL3JlY3Vyc2l2ZS9Db21wb3NlckNsaWVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyQ2xpZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9yZWN1cnNpdmUvQ29tcG9zZXJDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyQ2xpZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9yZWN1cnNpdmUvQ29tcG9zZXJJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9qYXZhL3JlY3Vyc2l2ZS9Db21wb3NlckltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcmVjdXJzaXZlL0NvbXBvc2VySW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9qYXZhL3JlY3Vyc2l2ZS9Db21wb3NlckltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyU2VydmVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9qYXZhL3JlY3Vyc2l2ZS9Db21wb3NlclNlcnZlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9yZWN1cnNpdmUvQ29tcG9zZXJTZXJ2ZXIuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vamF2YS9yZWN1cnNpdmUvQ29tcG9zZXJTZXJ2ZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9DbGllbnQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL0NsaWVudC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvQ2xpZW50LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL0NsaWVudC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvSW5uZXIuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL0lubmVyLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9Jbm5lci5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9Jbm5lci5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvT3V0ZXIuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL091dGVyLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9PdXRlci5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9PdXRlci5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZ292ZXJyaWRlL0lubmVyQ29tcG9zaXRlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9iaW5kaW5nb3ZlcnJpZGUvSW5uZXJDb21wb3NpdGUuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL2JpbmRpbmdvdmVycmlkZS9Jbm5lckNvbXBvc2l0ZS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9iaW5kaW5nb3ZlcnJpZGUvSW5uZXJDb21wb3NpdGUuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL2JpbmRpbmdvdmVycmlkZS9PdXRlckNvbXBvc2l0ZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZ292ZXJyaWRlL091dGVyQ29tcG9zaXRlLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9iaW5kaW5nb3ZlcnJpZGUvT3V0ZXJDb21wb3NpdGUuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvYmluZGluZ292ZXJyaWRlL091dGVyQ29tcG9zaXRlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9wb2xpY3kvUG9saWN5SW5uZXJDb21wb3NpdGUuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL3BvbGljeS9Qb2xpY3lJbm5lckNvbXBvc2l0ZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvcG9saWN5L1BvbGljeUlubmVyQ29tcG9zaXRlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL3BvbGljeS9Qb2xpY3lJbm5lckNvbXBvc2l0ZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvcG9saWN5L1BvbGljeU91dGVyQ29tcG9zaXRlLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9wb2xpY3kvUG9saWN5T3V0ZXJDb21wb3NpdGUuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL3BvbGljeS9Qb2xpY3lPdXRlckNvbXBvc2l0ZS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9wb2xpY3kvUG9saWN5T3V0ZXJDb21wb3NpdGUuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL21haW4vcmVzb3VyY2VzL3BvbGljeS9kZWZpbml0aW9ucy54bWwgYi90ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvcG9saWN5L2RlZmluaXRpb25zLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy9tYWluL3Jlc291cmNlcy9wb2xpY3kvZGVmaW5pdGlvbnMueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvbWFpbi9yZXNvdXJjZXMvcG9saWN5L2RlZmluaXRpb25zLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy90ZXN0L2phdmEvYmluZGluZ292ZXJyaWRlL0JpbmRpbmdPdmVycmlkZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvdGVzdC9qYXZhL2JpbmRpbmdvdmVycmlkZS9CaW5kaW5nT3ZlcnJpZGVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL3Rlc3QvamF2YS9iaW5kaW5nb3ZlcnJpZGUvQmluZGluZ092ZXJyaWRlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL3Rlc3QvamF2YS9iaW5kaW5nb3ZlcnJpZGUvQmluZGluZ092ZXJyaWRlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy90ZXN0L2phdmEvcG9saWN5L1BvbGljeVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvdGVzdC9qYXZhL3BvbGljeS9Qb2xpY3lUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL3Rlc3QvamF2YS9wb2xpY3kvUG9saWN5VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL3Rlc3QvamF2YS9wb2xpY3kvUG9saWN5VGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy90ZXN0L2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyQ2xpZW50VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy90ZXN0L2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyQ2xpZW50VGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy90ZXN0L2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyQ2xpZW50VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL3Rlc3QvamF2YS9yZWN1cnNpdmUvQ29tcG9zZXJDbGllbnRUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9yZWN1cnNpdmUtd3Mvc3JjL3Rlc3QvamF2YS9yZWN1cnNpdmUvQ29tcG9zZXJUZXN0U2VydmVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvdGVzdC9qYXZhL3JlY3Vyc2l2ZS9Db21wb3NlclRlc3RTZXJ2ZXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVjdXJzaXZlLXdzL3NyYy90ZXN0L2phdmEvcmVjdXJzaXZlL0NvbXBvc2VyVGVzdFNlcnZlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3JlY3Vyc2l2ZS13cy9zcmMvdGVzdC9qYXZhL3JlY3Vyc2l2ZS9Db21wb3NlclRlc3RTZXJ2ZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVmZXJlbmNlcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3JlZmVyZW5jZXMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQUNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0FDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9BQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9BQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQUNvbXBvbmVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9BQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0FDb21wb25lbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9BQ29tcG9uZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0JDb21wb25lbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9CQ29tcG9uZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQkNvbXBvbmVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQkNvbXBvbmVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0JDb21wb25lbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQkNvbXBvbmVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9CQ29tcG9uZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQkNvbXBvbmVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9CQ29tcG9uZW50V3JvbmdUYXJnZXRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQkNvbXBvbmVudFdyb25nVGFyZ2V0SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0JDb21wb25lbnRXcm9uZ1RhcmdldEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0JDb21wb25lbnRXcm9uZ1RhcmdldEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9DQ29tcG9uZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQ0NvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0NDb21wb25lbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0NDb21wb25lbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9DQ29tcG9uZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0NDb21wb25lbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQ0NvbXBvbmVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0NDb21wb25lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvRENvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0RDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9EQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9EQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvRENvbXBvbmVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9EQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0RDb21wb25lbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9EQ29tcG9uZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL3Jlc291cmNlcy9BdXRvV2lyZWRSZWZlcmVuY2VzVGVzdC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vcmVzb3VyY2VzL0F1dG9XaXJlZFJlZmVyZW5jZXNUZXN0LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvQXV0b1dpcmVkUmVmZXJlbmNlc1Rlc3QuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vcmVzb3VyY2VzL0F1dG9XaXJlZFJlZmVyZW5jZXNUZXN0LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvSW5uZXJSZWZlcmVuY2VzVGVzdC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vcmVzb3VyY2VzL0lubmVyUmVmZXJlbmNlc1Rlc3QuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL3Jlc291cmNlcy9Jbm5lclJlZmVyZW5jZXNUZXN0LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL3Jlc291cmNlcy9Jbm5lclJlZmVyZW5jZXNUZXN0LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVmZXJlbmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTWFudWFsV2lyZWRSZWZlcmVuY2VzVGVzdC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL21haW4vcmVzb3VyY2VzL01hbnVhbFdpcmVkUmVmZXJlbmNlc1Rlc3QuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL3Jlc291cmNlcy9NYW51YWxXaXJlZFJlZmVyZW5jZXNUZXN0LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy9tYWluL3Jlc291cmNlcy9NYW51YWxXaXJlZFJlZmVyZW5jZXNUZXN0LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3QvcmVmZXJlbmNlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9BdXRvV2lyZWRSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0F1dG9XaXJlZFJlZmVyZW5jZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3JlZmVyZW5jZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvQXV0b1dpcmVkUmVmZXJlbmNlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0F1dG9XaXJlZFJlZmVyZW5jZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvSW5uZXJSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL0lubmVyUmVmZXJlbmNlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVmZXJlbmNlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9Jbm5lclJlZmVyZW5jZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVmZXJlbmNlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9Jbm5lclJlZmVyZW5jZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3JlZmVyZW5jZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3JlZmVyZW5jZXMvTWFudWFsV2lyZWRSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9yZWZlcmVuY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9yZWZlcmVuY2VzL01hbnVhbFdpcmVkUmVmZXJlbmNlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3QvcmVmZXJlbmNlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9NYW51YWxXaXJlZFJlZmVyZW5jZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3QvcmVmZXJlbmNlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvcmVmZXJlbmNlcy9NYW51YWxXaXJlZFJlZmVyZW5jZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NhbXBsZXMvaGVsbG93b3JsZC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9zYW1wbGVzL2hlbGxvd29ybGQvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2FtcGxlcy9oZWxsb3dvcmxkL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2FtcGxlcy9oZWxsb3dvcmxkL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3NhbXBsZXMvaGVsbG93b3JsZC9zcmMvdGVzdC9qYXZhL2l0ZXN0L2hlbGxvd29ybGQvSGVsbG93b3JsZC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zYW1wbGVzL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9pdGVzdC9oZWxsb3dvcmxkL0hlbGxvd29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvaXRlc3QvaGVsbG93b3JsZC9IZWxsb3dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvaXRlc3QvaGVsbG93b3JsZC9IZWxsb3dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NhbXBsZXMvaGVsbG93b3JsZC9zcmMvdGVzdC9qYXZhL2l0ZXN0L2hlbGxvd29ybGQvSGVsbG93b3JsZERvbWFpbk5vZGVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9zYW1wbGVzL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9pdGVzdC9oZWxsb3dvcmxkL0hlbGxvd29ybGREb21haW5Ob2RlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvaXRlc3QvaGVsbG93b3JsZC9IZWxsb3dvcmxkRG9tYWluTm9kZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvaXRlc3QvaGVsbG93b3JsZC9IZWxsb3dvcmxkRG9tYWluTm9kZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NhbXBsZXMvaGVsbG93b3JsZC9zcmMvdGVzdC9qYXZhL2l0ZXN0L2hlbGxvd29ybGQvSGVsbG93b3JsZE5vZGVUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9zYW1wbGVzL2hlbGxvd29ybGQvc3JjL3Rlc3QvamF2YS9pdGVzdC9oZWxsb3dvcmxkL0hlbGxvd29ybGROb2RlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvaXRlc3QvaGVsbG93b3JsZC9IZWxsb3dvcmxkTm9kZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2FtcGxlcy9oZWxsb3dvcmxkL3NyYy90ZXN0L2phdmEvaXRlc3QvaGVsbG93b3JsZC9IZWxsb3dvcmxkTm9kZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGktanNlLW9zZ2kvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1qc2Utb3NnaS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY2FjbGllbnQtYXBpLWpzZS1vc2dpL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1qc2Utb3NnaS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC9zY2FjbGllbnQtYXBpLWpzZS1vc2dpL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1qc2Utb3NnaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjYWNsaWVudC1hcGktanNlLW9zZ2kvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktanNlLW9zZ2kvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zY2FjbGllbnQtYXBpLWpzZS1vc2dpL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktanNlLW9zZ2kvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2NhY2xpZW50LWFwaS1qc2Utb3NnaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktanNlLW9zZ2kvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1qc2Utb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG93b3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktanNlLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvd29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY2FjbGllbnQtYXBpLWpzZS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLWpzZS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb3dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1qc2Utb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktanNlLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY2FjbGllbnQtYXBpLWpzZS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLWpzZS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1qc2Utb3NnaS9zcmMvdGVzdC9qYXZhL3Rlc3Qvc2NhY2xpZW50L1NDQUNsaWVudFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktanNlLW9zZ2kvc3JjL3Rlc3QvamF2YS90ZXN0L3NjYWNsaWVudC9TQ0FDbGllbnRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY2FjbGllbnQtYXBpLWpzZS1vc2dpL3NyYy90ZXN0L2phdmEvdGVzdC9zY2FjbGllbnQvU0NBQ2xpZW50VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLWpzZS1vc2dpL3NyYy90ZXN0L2phdmEvdGVzdC9zY2FjbGllbnQvU0NBQ2xpZW50VGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1vc2dpL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLW9zZ2kvTUVUQS1JTkYvTUFOSUZFU1QuTUYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9NRVRBLUlORi9NQU5JRkVTVC5NRgpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLW9zZ2kvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLW9zZ2kvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2NhY2xpZW50LWFwaS1vc2dpL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1vc2dpL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1vc2dpL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1vc2dpL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY2FjbGllbnQtYXBpLW9zZ2kvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLW9zZ2kvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2NhY2xpZW50LWFwaS1vc2dpL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9zY2FjbGllbnQtYXBpLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY2FjbGllbnQtYXBpLW9zZ2kvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9zcmMvdGVzdC9qYXZhL3Rlc3Qvc2NhY2xpZW50L1NDQUNsaWVudFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9zcmMvdGVzdC9qYXZhL3Rlc3Qvc2NhY2xpZW50L1NDQUNsaWVudFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjYWNsaWVudC1hcGktb3NnaS9zcmMvdGVzdC9qYXZhL3Rlc3Qvc2NhY2xpZW50L1NDQUNsaWVudFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1vc2dpL3NyYy90ZXN0L2phdmEvdGVzdC9zY2FjbGllbnQvU0NBQ2xpZW50VGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLXJlbW90ZS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLXJlbW90ZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDcyNjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3BvbS54bWwKQEAgLTAsMCArMSw0NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCis8IS0tDQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAgICAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAgICAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAgICAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgICAgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAgICAqIA0KKyAgICAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICAgICogDQorICAgICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAgICAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICAgICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICAgICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8cHJvamVjdD4NCisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPg0KKyAgICA8cGFyZW50Pg0KKyAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+DQorICAgICAgICA8dmVyc2lvbj4yLjAtQmV0YTE8L3ZlcnNpb24+DQorICAgICAgICA8cmVsYXRpdmVQYXRoPi4uL3BvbS54bWw8L3JlbGF0aXZlUGF0aD4NCisgICAgPC9wYXJlbnQ+DQorICAgIDxhcnRpZmFjdElkPml0ZXN0LXNjYWNsaWVudC1hcGktcmVtb3RlPC9hcnRpZmFjdElkPg0KKyAgICA8bmFtZT5BcGFjaGUgVHVzY2FueSBTQ0EgaVRlc3QgU0NBQ2xpZW50IEFQSSB3aXRoIEhhemVsY2FzdCBjbGllbnQ8L25hbWU+DQorDQorICAgIDxkZXBlbmRlbmNpZXM+DQorICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktYmFzZS1ydW50aW1lPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDwvZGVwZW5kZW5jeT4NCisgICAgICAgIA0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWRvbWFpbi1oYXplbGNhc3Q8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKw0KKyAgICA8L2RlcGVuZGVuY2llcz4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1yZW1vdGUvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLXJlbW90ZS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLXJlbW90ZS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1yZW1vdGUvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS1yZW1vdGUvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLXJlbW90ZS9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpLXJlbW90ZS9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1yZW1vdGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY2FjbGllbnQtYXBpLXJlbW90ZS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1yZW1vdGUvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy90ZXN0L2phdmEvdGVzdC9zY2FjbGllbnQvU0NBQ2xpZW50VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS1yZW1vdGUvc3JjL3Rlc3QvamF2YS90ZXN0L3NjYWNsaWVudC9TQ0FDbGllbnRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzMmQ1MWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGktcmVtb3RlL3NyYy90ZXN0L2phdmEvdGVzdC9zY2FjbGllbnQvU0NBQ2xpZW50VGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDEyMSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2UgdGVzdC5zY2FjbGllbnQ7DQorDQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsNCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsNCitpbXBvcnQgaXRlc3QuSGVsbG93b3JsZFNlcnZpY2U7DQorDQoraW1wb3J0IGphdmEubmV0LlVSSTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOw0KK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsNCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZUNsYXNzOw0KK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuTm9TdWNoRG9tYWluRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5jbGllbnQuU0NBQ2xpZW50RmFjdG9yeTsNCisNCisvKioNCisgKiBUZXN0IFNDQURvbWFpbi5uZXdJbnN0YW5jZSBhbmQgaW52b2NhdGlvbiBvZiBhIHNlcnZpY2UuDQorICoNCisgKiBAdmVyc2lvbiAkUmV2OiA5MDQwNjQgJCAkRGF0ZTogMjAxMC0wMS0yOCAxMjozMTozNiArMDAwMCAoVGh1LCAyOCBKYW4gMjAxMCkgJA0KKyAqLw0KK3B1YmxpYyBjbGFzcyBTQ0FDbGllbnRUZXN0Q2FzZSB7DQorDQorICAgIHByaXZhdGUgTm9kZSBub2RlOw0KKyAgICANCisgICAgQEJlZm9yZUNsYXNzDQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRVcEJlZm9yZUNsYXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgIH0NCisgICAgDQorICAgIEBBZnRlckNsYXNzDQorICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB0ZWFyRG93bkFmdGVyQ2xhc3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24gew0KKw0KKyAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgoU3RyaW5nKW51bGwsIG5ldyBTdHJpbmdbXSB7InRhcmdldC9jbGFzc2VzIn0pOw0KKyAgICAgICAgbm9kZS5zdGFydCgpOw0KKw0KKyAgICAgICAgSGVsbG93b3JsZFNlcnZpY2Ugc2VydmljZSA9IFNDQUNsaWVudEZhY3RvcnkubmV3SW5zdGFuY2UoVVJJLmNyZWF0ZSgiZGVmYXVsdCIpKS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJIZWxsbyBwZXRyYSIsIHNlcnZpY2Uuc2F5SGVsbG8oInBldHJhIikpOw0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RVUkljb25maWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisNCisgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgidXJpOnNvbWVkb21haW4iKS5jcmVhdGVOb2RlKChTdHJpbmcpbnVsbCwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L2NsYXNzZXMifSk7DQorICAgICAgICBub2RlLnN0YXJ0KCk7DQorDQorICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gU0NBQ2xpZW50RmFjdG9yeS5uZXdJbnN0YW5jZShVUkkuY3JlYXRlKCJzb21lZG9tYWluIikpLmdldFNlcnZpY2UoSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50Iik7DQorICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgc2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIHNlcnZpY2UgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoIm5vc3VjaGRvbWFpbiIpKS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOw0KKyAgICAgICAgICAgIHNlcnZpY2Uuc2F5SGVsbG8oInBldHJhIik7DQorICAgICAgICAgICAgZmFpbCgpOw0KKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoRG9tYWluRXhjZXB0aW9uIGUpIHsNCisgICAgICAgICAgICAvL2V4cGVjdGVkDQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKFVSSS5jcmVhdGUoIm15Rm9vRG9tYWluIiksIG5ldyBTdHJpbmdbXSB7InRhcmdldC9jbGFzc2VzIn0pOw0KKyAgICAgICAgbm9kZS5zdGFydCgpOw0KKw0KKyAgICAgICAgSGVsbG93b3JsZFNlcnZpY2Ugc2VydmljZSA9IFNDQUNsaWVudEZhY3RvcnkubmV3SW5zdGFuY2UoVVJJLmNyZWF0ZSgibXlGb29Eb21haW4iKSkuZ2V0U2VydmljZShIZWxsb3dvcmxkU2VydmljZS5jbGFzcywgIkhlbGxvd29ybGRDb21wb25lbnQiKTsNCisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBzZXJ2aWNlLnNheUhlbGxvKCJwZXRyYSIpKTsNCisgICAgfQ0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0RXhwbGljaXRSZW1vdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgidXJpOm15Rm9vRG9tYWluP2JpbmQ9MTI3LjAuMC4xOjE0ODIxIikuY3JlYXRlTm9kZSgoU3RyaW5nKW51bGwsIG5ldyBTdHJpbmdbXSB7InRhcmdldC9jbGFzc2VzIn0pOw0KKyAgICAgICAgbm9kZS5zdGFydCgpOw0KKw0KKyAgICAgICAgLy8gVFVTQ0FOWS0zNjcwIC0gd2h5IGZhY3RvcnkgdGFrZXMgVVJJIHdoaWxlIG5vZGUgZmFjdG9yeSB0YWtlIGNvbmZpZ3VyYXRpb24gc3RyaW5nPw0KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgaGFja2VkIHRoaXMgZm9yIG5vdyB0byBtYWtlIHRoZSBjbGllbnQgZG9tYWluIG5hbWUgbWF0Y2ggdGhlIGRvbWFpbiANCisgICAgICAgIC8vICAgICAgICAgICAgICAgIG5hbWUgdGhhdCdzIHB1bGxlZCBvdXQgb2YgdGhlIGZhY3RvcnkgVVJJDQorICAgICAgICAvL0hlbGxvd29ybGRTZXJ2aWNlIHNlcnZpY2UgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoInVyaTpteUZvb0RvbWFpbj93a2E9MTI3LjAuMC4xOjE0ODIxIikpLmdldFNlcnZpY2UoSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50Iik7DQorICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gU0NBQ2xpZW50RmFjdG9yeS5uZXdJbnN0YW5jZShVUkkuY3JlYXRlKCJteUZvb0RvbWFpbiIpKS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJIZWxsbyBwZXRyYSIsIHNlcnZpY2Uuc2F5SGVsbG8oInBldHJhIikpOw0KKyAgICB9DQorDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RFeHBsaWNpdFJlbW90ZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5uZXdJbnN0YW5jZSgidXJpOm15Rm9vRG9tYWluP2JpbmQ9MTI3LjAuMC4xOjE0ODIxIikuY3JlYXRlTm9kZSgoU3RyaW5nKW51bGwsIG5ldyBTdHJpbmdbXSB7InRhcmdldC9jbGFzc2VzIn0pOw0KKyAgICAgICAgbm9kZS5zdGFydCgpOw0KKw0KKyAgICAgICAgLy8gVFVTQ0FOWS0zNjcwIC0gd2h5IGZhY3RvcnkgdGFrZXMgVVJJIHdoaWxlIG5vZGUgZmFjdG9yeSB0YWtlIGNvbmZpZ3VyYXRpb24gc3RyaW5nPw0KKyAgICAgICAgLy8gICAgICAgICAgICAgICAgaGFja2VkIHRoaXMgZm9yIG5vdyB0byBtYWtlIHRoZSBjbGllbnQgZG9tYWluIG5hbWUgbWF0Y2ggdGhlIGRvbWFpbiANCisgICAgICAgIC8vICAgICAgICAgICAgICAgIG5hbWUgdGhhdCdzIHB1bGxlZCBvdXQgb2YgdGhlIGZhY3RvcnkgVVJJDQorICAgICAgICAvL0hlbGxvd29ybGRTZXJ2aWNlIHNlcnZpY2UgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoInVyaTpteUZvb0RvbWFpbj93a2E9MTI3LjAuMC4xOjE0ODIxIikpLmdldFNlcnZpY2UoSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50Iik7DQorICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gU0NBQ2xpZW50RmFjdG9yeS5uZXdJbnN0YW5jZShVUkkuY3JlYXRlKCJteUZvb0RvbWFpbiIpKS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOyAgICAgICAgDQorICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgc2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7DQorICAgIH0NCisNCisgICAgQEFmdGVyDQorICAgIHB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICBub2RlLnN0b3AoKTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS9pdGVzdC9zY2FjbGllbnQtYXBpL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGkvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2NhY2xpZW50LWFwaS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGkvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGkvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY2FjbGllbnQtYXBpL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L0hlbGxvd29ybGRTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjYWNsaWVudC1hcGkvc3JjL21haW4vamF2YS9pdGVzdC9IZWxsb3dvcmxkU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpL3NyYy9tYWluL2phdmEvaXRlc3QvSGVsbG93b3JsZFNlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGkvc3JjL21haW4vamF2YS9pdGVzdC9SZW1vdGVIZWxsb3dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpL3NyYy9tYWluL2phdmEvaXRlc3QvUmVtb3RlSGVsbG93b3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L1JlbW90ZUhlbGxvd29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvbWFpbi9qYXZhL2l0ZXN0L1JlbW90ZUhlbGxvd29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGkvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG93b3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3NjYWNsaWVudC1hcGkvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9zY2FjbGllbnQtYXBpL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvc2NhY2xpZW50LWFwaS9zcmMvdGVzdC9qYXZhL3Rlc3Qvc2NhY2xpZW50L1NDQUNsaWVudFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGkvc3JjL3Rlc3QvamF2YS90ZXN0L3NjYWNsaWVudC9TQ0FDbGllbnRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NDM1MGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3NjYWNsaWVudC1hcGkvc3JjL3Rlc3QvamF2YS90ZXN0L3NjYWNsaWVudC9TQ0FDbGllbnRUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIHRlc3Quc2NhY2xpZW50OworCitpbXBvcnQgaXRlc3QuSGVsbG93b3JsZFNlcnZpY2U7CitpbXBvcnQgaXRlc3QuUmVtb3RlSGVsbG93b3JsZFNlcnZpY2U7CisKK2ltcG9ydCBqYXZhLm5ldC5VUkk7CisKK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7CisKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuTm9TdWNoRG9tYWluRXhjZXB0aW9uOworaW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLk5vU3VjaFNlcnZpY2VFeGNlcHRpb247CitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuY2xpZW50LlNDQUNsaWVudEZhY3Rvcnk7CisKKy8qKgorICogVGVzdCBTQ0FEb21haW4ubmV3SW5zdGFuY2UgYW5kIGludm9jYXRpb24gb2YgYSBzZXJ2aWNlLgorICoKKyAqIEB2ZXJzaW9uICRSZXYkICREYXRlJAorICovCitwdWJsaWMgY2xhc3MgU0NBQ2xpZW50VGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKyAgICBwcml2YXRlIE5vZGUgbm9kZTsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdERlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKworICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkuZ2V0SW5zdGFuY2UoKS5jcmVhdGVOb2RlKChTdHJpbmcpbnVsbCwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L2NsYXNzZXMifSk7CisgICAgICAgIG5vZGUuc3RhcnQoKTsKKworICAgICAgICBTQ0FDbGllbnRGYWN0b3J5IGNsaWVudEZhY3RvcnkgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoImRlZmF1bHQiKSk7CisgICAgICAgIEhlbGxvd29ybGRTZXJ2aWNlIHNlcnZpY2UgPSBjbGllbnRGYWN0b3J5LmdldFNlcnZpY2UoSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50L0hlbGxvd29ybGRTZXJ2aWNlIik7CisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBzZXJ2aWNlLnNheUhlbGxvKCJwZXRyYSIpKTsKKyAgICAgICAgCisgICAgICAgIFJlbW90ZUhlbGxvd29ybGRTZXJ2aWNlIHJlbW90ZVNlcnZpY2UgPSBjbGllbnRGYWN0b3J5LmdldFNlcnZpY2UoUmVtb3RlSGVsbG93b3JsZFNlcnZpY2UuY2xhc3MsICJIZWxsb3dvcmxkQ29tcG9uZW50L1JlbW90ZUhlbGxvd29ybGRTZXJ2aWNlIik7CisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCByZW1vdGVTZXJ2aWNlLnNheUhlbGxvUmVtb3RlKCJwZXRyYSIpKTsKKworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdEV4cGxpY2l0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoVVJJLmNyZWF0ZSgibXlGb29Eb21haW4iKSwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L2NsYXNzZXMifSk7CisgICAgICAgIG5vZGUuc3RhcnQoKTsKKworICAgICAgICBTQ0FDbGllbnRGYWN0b3J5IGNsaWVudEZhY3RvcnkgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoIm15Rm9vRG9tYWluIikpOworICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gY2xpZW50RmFjdG9yeS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudC9IZWxsb3dvcmxkU2VydmljZSIpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgc2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7CisgICAgICAgIAorICAgICAgICBSZW1vdGVIZWxsb3dvcmxkU2VydmljZSByZW1vdGVTZXJ2aWNlID0gY2xpZW50RmFjdG9yeS5nZXRTZXJ2aWNlKFJlbW90ZUhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudC9SZW1vdGVIZWxsb3dvcmxkU2VydmljZSIpOworICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgcmVtb3RlU2VydmljZS5zYXlIZWxsb1JlbW90ZSgicGV0cmEiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBzZXJ2aWNlLnNheUhlbGxvKCJwZXRyYSIpKTsKKyAgICB9CisKKy8vICAgIEBUZXN0CisvLyAgICBwdWJsaWMgdm9pZCB0ZXN0V2l0aG91dFNlcnZpY2VOYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisvLyAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5LmdldEluc3RhbmNlKCkuY3JlYXRlTm9kZShVUkkuY3JlYXRlKCJteUZvb0RvbWFpbiIpLCBuZXcgU3RyaW5nW10geyJ0YXJnZXQvY2xhc3NlcyJ9KTsKKy8vICAgICAgICBub2RlLnN0YXJ0KCk7CisvLworLy8gICAgICAgIFNDQUNsaWVudEZhY3RvcnkgY2xpZW50RmFjdG9yeSA9IFNDQUNsaWVudEZhY3RvcnkubmV3SW5zdGFuY2UoVVJJLmNyZWF0ZSgibXlGb29Eb21haW4iKSk7CisvLyAgICAgICAgSGVsbG93b3JsZFNlcnZpY2Ugc2VydmljZSA9IGNsaWVudEZhY3RvcnkuZ2V0U2VydmljZShIZWxsb3dvcmxkU2VydmljZS5jbGFzcywgIkhlbGxvd29ybGRDb21wb25lbnQiKTsKKy8vICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIHBldHJhIiwgc2VydmljZS5zYXlIZWxsbygicGV0cmEiKSk7CisvLyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RXaXRoQmFkU2VydmljZU5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5LmdldEluc3RhbmNlKCkuY3JlYXRlTm9kZShVUkkuY3JlYXRlKCJteUZvb0RvbWFpbiIpLCBuZXcgU3RyaW5nW10geyJ0YXJnZXQvY2xhc3NlcyJ9KTsKKyAgICAgICAgbm9kZS5zdGFydCgpOworCisgICAgICAgIFNDQUNsaWVudEZhY3RvcnkgY2xpZW50RmFjdG9yeSA9IFNDQUNsaWVudEZhY3RvcnkubmV3SW5zdGFuY2UoVVJJLmNyZWF0ZSgibXlGb29Eb21haW4iKSk7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgIGNsaWVudEZhY3RvcnkuZ2V0U2VydmljZShIZWxsb3dvcmxkU2VydmljZS5jbGFzcywgIkhlbGxvd29ybGRDb21wb25lbnQvZm9vIik7CisgICAgICAgICAgIGZhaWwoKTsKKyAgICAgICAgfSBjYXRjaCAoTm9TdWNoU2VydmljZUV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBleHBlY3RlZAorICAgICAgICB9CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0V2l0aEJhZERvbWFpbk5hbWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5LmdldEluc3RhbmNlKCkuY3JlYXRlTm9kZShVUkkuY3JlYXRlKCJteUZvb0RvbWFpbiIpLCBuZXcgU3RyaW5nW10geyJ0YXJnZXQvY2xhc3NlcyJ9KTsKKyAgICAgICAgbm9kZS5zdGFydCgpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBTQ0FDbGllbnRGYWN0b3J5IGNsaWVudEZhY3RvcnkgPSBTQ0FDbGllbnRGYWN0b3J5Lm5ld0luc3RhbmNlKFVSSS5jcmVhdGUoInNvbWVCYWREb21haW5OYW1lIikpOworICAgICAgICAgICAgZmFpbCgpOworICAgICAgICB9IGNhdGNoIChOb1N1Y2hEb21haW5FeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gZXhwZWN0ZWQKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyAgICBAVGVzdCBASWdub3JlCisvLyAgICBwdWJsaWMgdm9pZCB0ZXN0SFRUUFVSSSgpIHRocm93cyBFeGNlcHRpb24geworLy8gICAgICAgIG5vZGUgPSBOb2RlRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmNyZWF0ZU5vZGUoVVJJLmNyZWF0ZSgiaHR0cDovL2RlZmF1bHREb21haW4iKSwgbmV3IFN0cmluZ1tdIHsidGFyZ2V0L2NsYXNzZXMifSk7CisvLyAgICAgICAgbm9kZS5zdGFydCgpOworLy8KKy8vICAgICAgICBIZWxsb3dvcmxkU2VydmljZSBzZXJ2aWNlID0gU0NBQ2xpZW50RmFjdG9yeS5uZXdJbnN0YW5jZShVUkkuY3JlYXRlKCJodHRwOi8vZGVmYXVsdERvbWFpbiIpKS5nZXRTZXJ2aWNlKEhlbGxvd29ybGRTZXJ2aWNlLmNsYXNzLCAiSGVsbG93b3JsZENvbXBvbmVudCIpOworLy8gICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBzZXJ2aWNlLnNheUhlbGxvKCJwZXRyYSIpKTsKKy8vICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5vZGUuc3RvcCgpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NkbC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9zY2RsL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjZGwvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2RsL3BvbS54bWwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvc2NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2NkbC9Db250cmlidXRpb25UZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC9zY2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zY2RsL0NvbnRyaWJ1dGlvblRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1ODdjYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvc2NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2NkbC9Db250cmlidXRpb25UZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsODAgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuaXRlc3Quc2NkbDsNCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLm5ldC5VUkw7DQoraW1wb3J0IGphdmEudXRpbC5BcnJheXM7DQoraW1wb3J0IGphdmEudXRpbC5MaXN0Ow0KKw0KK2ltcG9ydCBqdW5pdC5mcmFtZXdvcmsuQXNzZXJ0Ow0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmFzc2VtYmx5LkNvbXBvbmVudDsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5hc3NlbWJseS5Db21wb3NpdGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuSW1wbGVtZW50YXRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYXNzZW1ibHkuUmVmZXJlbmNlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmNvbnRyaWJ1dGlvbi5Db250cmlidXRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVwbG95bWVudC5EZWZhdWx0RGVwbG95ZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVwbG95bWVudC5EZXBsb3llcjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pbXBsZW1lbnRhdGlvbi5qYXZhLkphdmFJbXBsZW1lbnRhdGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5tb25pdG9yLk1vbml0b3I7DQoraW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsNCitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsNCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7DQorDQorLyoqDQorICogVGVzdCBjYXNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIFNDREwNCisgKi8NCitwdWJsaWMgY2xhc3MgQ29udHJpYnV0aW9uVGVzdENhc2Ugew0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0UmVhZCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgRGVwbG95ZXIgZGVwbG95ZXIgPSBuZXcgRGVmYXVsdERlcGxveWVyKCk7DQorICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZSgiLi4vLi4vLi4vc2FtcGxlcy9sZWFybmluZy1tb3JlL2JpbmRpbmctc2NhL2NhbGN1bGF0b3ItY29udHJpYnV0aW9uL3RhcmdldC9zYW1wbGUtYmluZGluZy1zY2EtY2FsY3VsYXRvci1jb250cmlidXRpb24uamFyIik7DQorICAgICAgICBVUkwgdXJsID0gZmlsZS50b1VSSSgpLnRvVVJMKCk7DQorICAgICAgICBNb25pdG9yIG1vbml0b3IgPSBkZXBsb3llci5jcmVhdGVNb25pdG9yKCk7DQorICAgICAgICBDb250cmlidXRpb24gY29udHJpYnV0aW9uID0gZGVwbG95ZXIubG9hZENvbnRyaWJ1dGlvbih1cmwudG9VUkkoKSwgdXJsLCBtb25pdG9yKTsNCisgICAgICAgIGRlcGxveWVyLmJ1aWxkKEFycmF5cy5hc0xpc3QoY29udHJpYnV0aW9uKSwgQXJyYXlzLmFzTGlzdChjb250cmlidXRpb24pLCBudWxsLCBtb25pdG9yKTsNCisgICAgICAgIA0KKyAgICAgICAgLy8gRmVya2xlIGFyb3VuZCBpbiB0aGUgY29udHJpYnV0aW9uIHZlcmlmeWluZyBpdCBsb29rcyBhcyBleHBlY3RlZA0KKyAgICAgICAgQXNzZXJ0LmFzc2VydE5vdE51bGwoY29udHJpYnV0aW9uKTsNCisgICAgICAgIExpc3Q8Q29tcG9zaXRlPiBkZXBsb3lhYmxlcyA9IGNvbnRyaWJ1dGlvbi5nZXREZXBsb3lhYmxlcygpOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygyLCBkZXBsb3lhYmxlcy5zaXplKCkpOw0KKyAgICAgICAgQ29tcG9zaXRlIGNhbGN1bGF0b3JDb21wb3N0ZSA9IGRlcGxveWFibGVzLmdldCgwKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoIkNhbGN1bGF0b3IiLCBjYWxjdWxhdG9yQ29tcG9zdGUuZ2V0TmFtZSgpLmdldExvY2FsUGFydCgpKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNSwgY2FsY3VsYXRvckNvbXBvc3RlLmdldENvbXBvbmVudHMoKS5zaXplKCkpOw0KKyAgICAgICAgQ29tcG9uZW50IGNhbGNDb21wID0gY2FsY3VsYXRvckNvbXBvc3RlLmdldENvbXBvbmVudCgiQ2FsY3VsYXRvclNlcnZpY2VDb21wb25lbnQiKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnROb3ROdWxsKGNhbGNDb21wKTsNCisgICAgICAgIEFzc2VydC5hc3NlcnRFcXVhbHMoNCwgY2FsY0NvbXAuZ2V0UmVmZXJlbmNlcygpLnNpemUoKSk7DQorICAgICAgICBSZWZlcmVuY2UgcmVmID0gY2FsY0NvbXAuZ2V0UmVmZXJlbmNlKCJhZGRTZXJ2aWNlIik7DQorICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJBZGRTZXJ2aWNlQ29tcG9uZW50IiwgcmVmLmdldFRhcmdldHMoKS5nZXQoMCkuZ2V0TmFtZSgpKTsNCisgICAgICAgIEltcGxlbWVudGF0aW9uIGltcGwgPSBjYWxjQ29tcC5nZXRJbXBsZW1lbnRhdGlvbigpOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydFRydWUoaW1wbCBpbnN0YW5jZW9mIEphdmFJbXBsZW1lbnRhdGlvbik7DQorICAgICAgICBBc3NlcnQuYXNzZXJ0RXF1YWxzKCJjYWxjdWxhdG9yLkNhbGN1bGF0b3JTZXJ2aWNlSW1wbCIsICgoSmF2YUltcGxlbWVudGF0aW9uKWltcGwpLmdldEphdmFDbGFzcygpLmdldE5hbWUoKSk7DQorICAgIH0NCisNCisgICAgQEJlZm9yZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICB9DQorDQorICAgIEBBZnRlcg0KKyAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICB9DQorfQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L3NjZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NjZGwvU0NETFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NjZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NjZGwvU0NETFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NjZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NjZGwvU0NETFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2NkbC9TQ0RMVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC9zY2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zY2RsL1ZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2NkbC9WYWxpZGF0ZURlcGVuZGVuY2llc1Rlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkyMzQ5MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvc2NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2NkbC9WYWxpZGF0ZURlcGVuZGVuY2llc1Rlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw4NSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5pdGVzdC5zY2RsOw0KKw0KK2ltcG9ydCBqYXZhLmlvLkZpbGU7DQorDQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5Bc3NlcnQ7DQorDQoraW1wb3J0IG9yZy5qdW5pdC5UZXN0Ow0KKw0KKy8qKg0KKyAqIFRlc3QgY2FzZSBmb3IgdmVyaWZ5aW5nIG9ubHkgU0NETCBqYXJzIGFyZSBuZWVkZWQNCisgKiANCisgKiBVc2VzIG1hdmVuLWRlcGVuZGVuY3ktcGx1Z2luIGNvbmZpZyBpbiB0aGUgcG9tLnhtbA0KKyAqIA0KKyAqIEN1cnJlbnQgcmVxdWlyZWQgamFycyBhcmU6DQorICogDQorICogYWN0aXZhdGlvbi0xLjEuamFyDQorICogYXNtLTMuMS5qYXINCisgKiBnZXJvbmltby1zdGF4LWFwaV8xLjBfc3BlYy0xLjAuMS5qYXINCisgKiBqYXhiLWFwaS0yLjEuamFyDQorICogamF4Yi1pbXBsLTIuMS4xMi5qYXINCisgKiBqYXh3cy1hcGktMi4xLmphcg0KKyAqIGpzcjE4MS1hcGktMS4wLU1SMS5qYXINCisgKiBqc3IyNTAtYXBpLTEuMC5qYXINCisgKiBqdW5pdC00LjguMS5qYXINCisgKiB0dXNjYW55LWFzc2VtYmx5LTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LWFzc2VtYmx5LXhtbC0yLjAtU05BUFNIT1QuamFyDQorICogdHVzY2FueS1hc3NlbWJseS14c2QtMi4wLVNOQVBTSE9ULmphcg0KKyAqIHR1c2NhbnktYmluZGluZy1odHRwLTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LWJpbmRpbmctam1zLTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LWJpbmRpbmctanNvbnAtMi4wLVNOQVBTSE9ULmphcg0KKyAqIHR1c2NhbnktYmluZGluZy1ybWktMi4wLVNOQVBTSE9ULmphcg0KKyAqIHR1c2NhbnktYmluZGluZy13cy0yLjAtU05BUFNIT1QuamFyDQorICogdHVzY2FueS1idWlsZGVyLTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LWNvbW1vbi1qYXZhLTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LWNvbW1vbi14bWwtMi4wLVNOQVBTSE9ULmphcg0KKyAqIHR1c2NhbnktY29udHJpYnV0aW9uLTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LWNvcmUtc3BpLTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LWRhdGFiaW5kaW5nLTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LWRhdGFiaW5kaW5nLWpheGItMi4wLVNOQVBTSE9ULmphcg0KKyAqIHR1c2NhbnktZGVwbG95bWVudC0yLjAtU05BUFNIT1QuamFyDQorICogdHVzY2FueS1leHRlbnNpYmlsaXR5LTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LWltcGxlbWVudGF0aW9uLWphdmEtMi4wLVNOQVBTSE9ULmphcg0KKyAqIHR1c2NhbnktaW50ZXJmYWNlLWphdmEtMi4wLVNOQVBTSE9ULmphcg0KKyAqIHR1c2NhbnktaW50ZXJmYWNlLWphdmEtamF4d3MtMi4wLVNOQVBTSE9ULmphcg0KKyAqIHR1c2NhbnktaW50ZXJmYWNlLXdzZGwtMi4wLVNOQVBTSE9ULmphcg0KKyAqIHR1c2NhbnktbW9uaXRvci0yLjAtU05BUFNIT1QuamFyDQorICogdHVzY2FueS1zY2EtYXBpLTIuMC1TTkFQU0hPVC5qYXINCisgKiB0dXNjYW55LXhzZC0yLjAtU05BUFNIT1QuamFyDQorICogd3NkbDRqLTEuNi4yLmphcg0KKyAqIHdzdHgtYXNsLTMuMi40Lmphcg0KKyAqIFhtbFNjaGVtYS0xLjQuMy5qYXINCisgKiANCisgKiBUT0RPOiBXUyBiaW5kaW5nIGRyYWdzIGluIGFsbCBydW50aW1lDQorICovDQorcHVibGljIGNsYXNzIFZhbGlkYXRlRGVwZW5kZW5jaWVzVGVzdENhc2Ugew0KKw0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCBjb3VudERlcGVuZGVuY2llcygpIHsNCisNCisgICAgICAgIEZpbGUgZGVwZW5kZW5jaWVzRGlyID0gbmV3IEZpbGUoInRhcmdldC9kZXBlbmRlbmN5Iik7DQorICAgICAgICBBc3NlcnQuYXNzZXJ0VHJ1ZShkZXBlbmRlbmNpZXNEaXIuZXhpc3RzKCkpOw0KKyAgICAgICAgDQorICAgICAgICBGaWxlW10gZGVwZW5kZW5jeUZpbGVzID0gZGVwZW5kZW5jaWVzRGlyLmxpc3RGaWxlcygpOw0KKyAgICAgICAgQXNzZXJ0LmFzc2VydEVxdWFscygzNiwgZGVwZW5kZW5jeUZpbGVzLmxlbmd0aCk7DQorICAgIH0NCit9DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NkbC9zcmMvdGVzdC9yZXNvdXJjZXMvdGVzdC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3NjZGwvc3JjL3Rlc3QvcmVzb3VyY2VzL3Rlc3QuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY2RsL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY2RsL3NyYy90ZXN0L3Jlc291cmNlcy90ZXN0LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NvcGVzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3Njb3Blcy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY29wZXMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY29wZXMvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NvcGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zY29wZXMvQ29tcG9zaXRlU2NvcGVTdGF0ZVZlcmlmaWVySW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zY29wZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3Njb3Blcy9Db21wb3NpdGVTY29wZVN0YXRlVmVyaWZpZXJJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3Njb3Blcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2NvcGVzL0NvbXBvc2l0ZVNjb3BlU3RhdGVWZXJpZmllckltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY29wZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3Njb3Blcy9Db21wb3NpdGVTY29wZVN0YXRlVmVyaWZpZXJJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3Njb3Blcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2NvcGVzL1N0YXRlVmVyaWZpZXIuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2NvcGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zY29wZXMvU3RhdGVWZXJpZmllci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zY29wZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3Njb3Blcy9TdGF0ZVZlcmlmaWVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2NvcGVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zY29wZXMvU3RhdGVWZXJpZmllci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zY29wZXMvc3JjL21haW4vcmVzb3VyY2VzL3Njb3Blcy5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3Njb3Blcy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NvcGVzLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2NvcGVzL3NyYy9tYWluL3Jlc291cmNlcy9zY29wZXMuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3Njb3Blcy9zcmMvbWFpbi9yZXNvdXJjZXMvc2NvcGVzLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2NvcGVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L1Njb3BlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2NvcGVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L1Njb3BlVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2NvcGVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS90ZXN0L1Njb3BlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zY29wZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL3Rlc3QvU2NvcGVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0FDb21wb25lbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQUNvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9BQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQUNvbXBvbmVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9BQ29tcG9uZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9BQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9BQ29tcG9uZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0FDb21wb25lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0JDb21wb25lbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQkNvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9CQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQkNvbXBvbmVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9CQ29tcG9uZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9CQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9CQ29tcG9uZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0JDb21wb25lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0Jhc2U2NEJpbmFyeS5qYXZhIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9CYXNlNjRCaW5hcnkuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQmFzZTY0QmluYXJ5LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQmFzZTY0QmluYXJ5LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0NDb21wb25lbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQ0NvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9DQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQ0NvbXBvbmVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9DQ29tcG9uZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9DQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9DQ29tcG9uZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0NDb21wb25lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0RDb21wb25lbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvRENvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9EQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvRENvbXBvbmVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9EQ29tcG9uZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9EQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9EQ29tcG9uZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0RDb21wb25lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL3Jlc291cmNlcy9ub2RlQS9Db21wb3NpdGVBLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vcmVzb3VyY2VzL25vZGVBL0NvbXBvc2l0ZUEuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9yZXNvdXJjZXMvbm9kZUEvQ29tcG9zaXRlQS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vcmVzb3VyY2VzL25vZGVBL0NvbXBvc2l0ZUEuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9yZXNvdXJjZXMvbm9kZUIvQ29tcG9zaXRlQi5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL3Jlc291cmNlcy9ub2RlQi9Db21wb3NpdGVCLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vcmVzb3VyY2VzL25vZGVCL0NvbXBvc2l0ZUIuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL3Jlc291cmNlcy9ub2RlQi9Db21wb3NpdGVCLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL21haW4vcmVzb3VyY2VzL3NlcnZpY2VyZWZlcmVuY2UvU2VydmljZVJlZmVyZW5jZVRlc3QuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmljZXJlZmVyZW5jZS9TZXJ2aWNlUmVmZXJlbmNlVGVzdC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy9tYWluL3Jlc291cmNlcy9zZXJ2aWNlcmVmZXJlbmNlL1NlcnZpY2VSZWZlcmVuY2VUZXN0LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvbWFpbi9yZXNvdXJjZXMvc2VydmljZXJlZmVyZW5jZS9TZXJ2aWNlUmVmZXJlbmNlVGVzdC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL0NhbGxhYmxlUmVmZXJlbmNlUmVtb3RlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQ2FsbGFibGVSZWZlcmVuY2VSZW1vdGVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9DYWxsYWJsZVJlZmVyZW5jZVJlbW90ZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvQ2FsbGFibGVSZWZlcmVuY2VSZW1vdGVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlLXJlZmVyZW5jZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXJlZi9TZXJ2aWNlUmVmZXJlbmNlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2VydmljZS1yZWZlcmVuY2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VyZWYvU2VydmljZVJlZmVyZW5jZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL1NlcnZpY2VSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2UtcmVmZXJlbmNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcmVmL1NlcnZpY2VSZWZlcmVuY2VUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlcy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2VzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9BQ29tcG9uZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9BQ29tcG9uZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9BQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0FDb21wb25lbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0FDb21wb25lbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9BQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvQUNvbXBvbmVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvQUNvbXBvbmVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0JDb21wb25lbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0JDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0JDb21wb25lbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvQkNvbXBvbmVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvQkNvbXBvbmVudEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0JDb21wb25lbnRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9CQ29tcG9uZW50SW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9CQ29tcG9uZW50SW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvQ0NvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvQ0NvbXBvbmVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvQ0NvbXBvbmVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9DQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9DQ29tcG9uZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvQ0NvbXBvbmVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0NDb21wb25lbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0NDb21wb25lbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9EMUNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvRDFDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0QxQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0QxQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9EQ29tcG9uZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9EQ29tcG9uZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9EQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0RDb21wb25lbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL0RDb21wb25lbnRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9EQ29tcG9uZW50SW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvRENvbXBvbmVudEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3Qvc2VydmljZXMvRENvbXBvbmVudEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2VzL3NyYy9tYWluL3Jlc291cmNlcy9TZXJ2aWNlc1Rlc3QuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC9zZXJ2aWNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvU2VydmljZXNUZXN0LmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvc2VydmljZXMvc3JjL21haW4vcmVzb3VyY2VzL1NlcnZpY2VzVGVzdC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZXMvc3JjL21haW4vcmVzb3VyY2VzL1NlcnZpY2VzVGVzdC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3NlcnZpY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9TZXJ2aWNlc1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3NlcnZpY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9TZXJ2aWNlc1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3NlcnZpY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9zZXJ2aWNlcy9TZXJ2aWNlc1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvc2VydmljZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L3NlcnZpY2VzL1NlcnZpY2VzVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd2lyZXMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd2lyZXMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd2lyZXMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93aXJlcy9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvV2lyZUNsaWVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC93aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvV2lyZUNsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvV2lyZUNsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9XaXJlQ2xpZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9XaXJlQ2xpZW50SW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC93aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvV2lyZUNsaWVudEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1dpcmVDbGllbnRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1dpcmVDbGllbnRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9XaXJlU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvV2lyZVNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1dpcmVTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1dpcmVTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dpcmVzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9XaXJlU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1dpcmVTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93aXJlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvV2lyZVNlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd2lyZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1dpcmVTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93aXJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvV2lyZVRlc3QuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC93aXJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvV2lyZVRlc3QuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93aXJlcy9zcmMvbWFpbi9yZXNvdXJjZXMvV2lyZVRlc3QuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dpcmVzL3NyYy9tYWluL3Jlc291cmNlcy9XaXJlVGVzdC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3dpcmVzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9pdGVzdC9XaXJlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd2lyZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1dpcmVUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93aXJlcy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvaXRlc3QvV2lyZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd2lyZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2l0ZXN0L1dpcmVUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9SRUFETUUgYi90ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MtamF4d3MvUkVBRE1FCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL1JFQURNRQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3QvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3QvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3QvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9CYXIuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvQmFyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL0Jhci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL0Jhci5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9Gb28uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvRm9vLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL0Zvby5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL0Zvby5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9IZWxsb1dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL0hlbGxvV29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvSGVsbG9Xb3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL0hlbGxvV29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvSGVsbG9Xb3JsZEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvSGVsbG9Xb3JsZEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9IZWxsb1dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkIGIvdGVzdGluZy9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3QvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvaW1wbC9IZWxsb1dvcmxkSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9pbXBsL0hlbGxvV29ybGRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL2ltcGwvSGVsbG9Xb3JsZEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9pbXBsL0hlbGxvV29ybGRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC53c2RsIGIvdGVzdGluZy9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLXNjYS53c2RsIGIvdGVzdGluZy9pdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1zY2Eud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtc2NhLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtc2NhLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzLWpheHdzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy1qYXh3cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MtamF4d3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9leHRlcm5hbC1jbGllbnQvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvZXh0ZXJuYWwtY2xpZW50L3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2V4dGVybmFsLWNsaWVudC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2V4dGVybmFsLWNsaWVudC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvY2xpZW50L0hlbGxvV29ybGRDbGllbnRMYXVuY2hlci5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy1qYXh3cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvY2xpZW50L0hlbGxvV29ybGRDbGllbnRMYXVuY2hlci5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy1qYXh3cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvY2xpZW50L0hlbGxvV29ybGRDbGllbnRMYXVuY2hlci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2V4dGVybmFsLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9jbGllbnQvSGVsbG9Xb3JsZENsaWVudExhdW5jaGVyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzLWpheHdzL2V4dGVybmFsLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2V4dGVybmFsLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2V4dGVybmFsLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MtamF4d3MvZXh0ZXJuYWwtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Uud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MtamF4d3MvZXh0ZXJuYWwtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Vfc2NoZW1hMS54c2QgYi90ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2V4dGVybmFsLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTEueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy1qYXh3cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZV9zY2hlbWExLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy1qYXh3cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZV9zY2hlbWExLnhzZApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MtamF4d3MvZXh0ZXJuYWwtc2VydmljZS9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC93cy1qYXh3cy9leHRlcm5hbC1zZXJ2aWNlL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2V4dGVybmFsLXNlcnZpY2UvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy1qYXh3cy9leHRlcm5hbC1zZXJ2aWNlL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzLWpheHdzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy1qYXh3cy9leHRlcm5hbC1zZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL2V4dGVybmFsL3NlcnZpY2UvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MtamF4d3MvZXh0ZXJuYWwtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9zZXJ2aWNlL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MtamF4d3MvZXh0ZXJuYWwtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9zZXJ2aWNlL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzLWpheHdzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZUxhdW5jaGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZUxhdW5jaGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZUxhdW5jaGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MtamF4d3MvZXh0ZXJuYWwtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9zZXJ2aWNlL0hlbGxvV29ybGRTZXJ2aWNlTGF1bmNoZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MtamF4d3MvbGF1bmNoZXItcmkvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvbGF1bmNoZXItcmkvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MtamF4d3MvbGF1bmNoZXItcmkvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy1qYXh3cy9sYXVuY2hlci1yaS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy1qYXh3cy9sYXVuY2hlci1yaS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9sYXVuY2hlci9KYXZhRmlyc3RUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy1qYXh3cy9sYXVuY2hlci1yaS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9sYXVuY2hlci9KYXZhRmlyc3RUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy1qYXh3cy9sYXVuY2hlci1yaS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9sYXVuY2hlci9KYXZhRmlyc3RUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2xhdW5jaGVyLXJpL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL2xhdW5jaGVyL0phdmFGaXJzdFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzLWpheHdzL2xhdW5jaGVyLXJpL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL2xhdW5jaGVyL1dTRExGaXJzdFRlc3RDYXNlT0ZGLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzLWpheHdzL2xhdW5jaGVyLXJpL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL2xhdW5jaGVyL1dTRExGaXJzdFRlc3RDYXNlT0ZGLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzLWpheHdzL2xhdW5jaGVyLXJpL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL2xhdW5jaGVyL1dTRExGaXJzdFRlc3RDYXNlT0ZGLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MtamF4d3MvbGF1bmNoZXItcmkvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvbGF1bmNoZXIvV1NETEZpcnN0VGVzdENhc2VPRkYuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MtamF4d3MvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MtamF4d3MvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MtamF4d3MvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy1qYXh3cy9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9SRUFETUUgYi90ZXN0aW5nL2l0ZXN0L3dzL1JFQURNRQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvUkVBRE1FCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL1JFQURNRQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLnhtbC5EZWZpbml0aW9ucyBiL3Rlc3RpbmcvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kZWZpbml0aW9ucy54bWwuRGVmaW5pdGlvbnMKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zCmRpZmYgLS1naXQgYS9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvZGVmaW5pdGlvbnMueG1sIGIvdGVzdGluZy9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvZGVmaW5pdGlvbnMueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvZGVmaW5pdGlvbnMueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9kZWZpbml0aW9ucy54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL2hlbGxvd29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvaGVsbG93b3JsZC53c2RsIGIvdGVzdGluZy9pdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvaGVsbG93b3JsZC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9hdXRoZW50aWNhdGlvbi1iYXNpYy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvaGVsbG93b3JsZC53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9oZWxsb3dvcmxkLndzZGwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvd3MvYXV0aGVudGljYXRpb24tYmFzaWMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG93b3JsZFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MGZjNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3dzL2F1dGhlbnRpY2F0aW9uLWJhc2ljL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvd29ybGRUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKiAKKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKiAKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIAorICovCisKK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmF4aXMyOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmF4aXMyLmhlbGxvd29ybGQuSGVsbG9Xb3JsZDsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuQ29udHJpYnV0aW9uOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlOworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsKK2ltcG9ydCBvcmcuanVuaXQuSWdub3JlOworCisvL0BJZ25vcmUoIlRVU0NBTlktMzYzMSIpCitwdWJsaWMgY2xhc3MgSGVsbG93b3JsZFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgeworCisgICAgcHJpdmF0ZSBOb2RlIG5vZGU7CisgICAgcHJpdmF0ZSBIZWxsb1dvcmxkIGhlbGxvV29ybGQ7CisKKyAgICBwdWJsaWMgdm9pZCB0ZXN0Q2FsY3VsYXRvcigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBhc3NlcnRFcXVhbHMoIkhlbGxvIGZyZWQgbXluYW1lIiwgaGVsbG9Xb3JsZC5nZXRHcmVldGluZ3MoImZyZWQiKSk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZShuZXcgQ29udHJpYnV0aW9uKCJ0ZXN0IiwgInRhcmdldC9jbGFzc2VzIikpOworICAgICAgICBub2RlLnN0YXJ0KCk7CisgICAgICAgIGhlbGxvV29ybGQgPSBub2RlLmdldFNlcnZpY2UoSGVsbG9Xb3JsZC5jbGFzcywgIkhlbGxvV29ybGRDbGllbnQiKTsKKyAgICB9CisgICAgCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2suamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFjay5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFjay5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2VJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZvcndhcmRzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZm9yd2FyZHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mb3J3YXJkc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFjay5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2suamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2VJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZUltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRJbXBsLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stZnVsbHNwZWMvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1mdWxsc3BlYy9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLWZ1bGxzcGVjL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2suamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlSW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2VJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkSW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRJbXBsLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZGNhbGxiYWNrc2VydmljZS1ib3R0b20uY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkY2FsbGJhY2tzZXJ2aWNlLWJvdHRvbS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGRjYWxsYmFja3NlcnZpY2UtYm90dG9tLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2stcHJvbW90aW9uL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkY2FsbGJhY2tzZXJ2aWNlLWJvdHRvbS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGRzZXJ2aWNlLWJvdHRvbS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGRzZXJ2aWNlLWJvdHRvbS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay1wcm9tb3Rpb24vc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGRzZXJ2aWNlLWJvdHRvbS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrLXByb21vdGlvbi9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZHNlcnZpY2UtYm90dG9tLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2suamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFjay5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2suamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZENhbGxiYWNrU2VydmljZUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRDYWxsYmFja1NlcnZpY2VJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQ2FsbGJhY2tTZXJ2aWNlSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1jYWxsYmFjay9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWNhbGxiYWNrL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tY2FsbGJhY2svc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkMUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkMUltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkMUltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQxSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQySW1wbC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQySW1wbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQySW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZDJJbXBsLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1kb2NsaXQud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLWRvY2xpdC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtZG9jbGl0LndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLWRvY2xpdC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtZG9jbGl0MS54c2QgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1kb2NsaXQxLnhzZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLWRvY2xpdDEueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1kb2NsaXQxLnhzZApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLWRvY2xpdDIueHNkIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtZG9jbGl0Mi54c2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1kb2NsaXQyLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtZG9jbGl0Mi54c2QKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC13cmFwcGVkL3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQtd3JhcHBlZC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0LXdyYXBwZWQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkMUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZDFJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQxSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQxSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkMkltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZDJJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQySW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQySW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQmFyZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQmFyZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkQmFyZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGRCYXJlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtZG9jbGl0LndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtZG9jbGl0LndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtZG9jbGl0LndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1kb2NsaXQud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1kb2NsaXQxLnhzZCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1kb2NsaXQxLnhzZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1kb2NsaXQxLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLWRvY2xpdDEueHNkCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLWRvY2xpdDIueHNkIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLWRvY2xpdDIueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLWRvY2xpdDIueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtZG9jbGl0Mi54c2QKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tZG9jLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWRvYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1kb2MtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3QvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3QvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3QvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLWphdmEtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1qYXZhLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tamF2YS1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L1JFQURNRSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvUkVBRE1FCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9SRUFETUUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvUkVBRE1FCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkMUltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZDFJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQxSW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQxSW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkMkltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZDJJbXBsLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQySW1wbC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQySW1wbC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLXJwY2xpdC53c2RsIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLXJwY2xpdC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLXJwY2xpdC53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtcnBjbGl0LndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtcnBjbGl0MS54c2QgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtcnBjbGl0MS54c2QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2UtcnBjbGl0MS54c2QKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1ycGNsaXQxLnhzZApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1ycGNsaXQyLnhzZCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1ycGNsaXQyLnhzZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS1ycGNsaXQyLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLXJwY2xpdDIueHNkCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXJwYy1saXQvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2NvbnRyaWJ1dGlvbi1ycGMtbGl0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24tcnBjLWxpdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3QvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3QvcG9tLnhtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2QyODk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9wb20ueG1sCkBAIC0wLDAgKzEsMTI1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KKzwhLS0NCisgICAgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICAgICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgICAgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAgICAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgICAgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICAgICogDQorICAgICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgICAgKiANCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICAgICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgICAgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgICAgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICAgICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzxwcm9qZWN0Pg0KKyAgICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+DQorICAgIDxwYXJlbnQ+DQorICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPg0KKyAgICAgICAgPGFydGlmYWN0SWQ+dHVzY2FueS1pdGVzdDwvYXJ0aWZhY3RJZD4NCisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4NCisgICAgICAgIDxyZWxhdGl2ZVBhdGg+Li4vcG9tLnhtbDwvcmVsYXRpdmVQYXRoPg0KKyAgICA8L3BhcmVudD4NCisNCisgICAgPGFydGlmYWN0SWQ+aXRlc3Qtd3MtY29udHJpYnV0aW9uLXdzZGwtZmlyc3Q8L2FydGlmYWN0SWQ+DQorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBXUyBDb250cmlidXRpb24gV1NETCBGaXJzdDwvbmFtZT4NCisNCisgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgIA0KKyAgICAgICAgPGRlcGVuZGVuY3k+DQorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4NCisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWZlYXR1cmUtY29yZTwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICA8dHlwZT5wb208L3R5cGU+DQorICAgICAgICAgICAgPHZlcnNpb24+Mi4wLUJldGExPC92ZXJzaW9uPg0KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICANCisgICAgICAgICAgICAgICAgDQorICAgIDwvZGVwZW5kZW5jaWVzPg0KKw0KKyAgICA8YnVpbGQ+DQorICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPg0KKyAgICAgICAgPHBsdWdpbnM+DQorICAgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmJ1aWxkLWhlbHBlci1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQorICAgICAgICAgICAgICAgICAgICA8ZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxpZD5hZGQtc291cmNlPC9pZD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+Z2VuZXJhdGUtc291cmNlczwvcGhhc2U+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWxzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbD5hZGQtdGVzdC1zb3VyY2U8L2dvYWw+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNvdXJjZXM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c291cmNlPnRhcmdldC9qYXh3cy1zb3VyY2U8L3NvdXJjZT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zb3VyY2VzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uPg0KKyAgICAgICAgICAgICAgICA8L2V4ZWN1dGlvbnM+DQorICAgICAgICAgICAgPC9wbHVnaW4+DQorICAgICAgICAgICAgPHBsdWdpbj4NCisgICAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmNvZGVoYXVzLm1vam88L2dyb3VwSWQ+DQorICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpheHdzLW1hdmVuLXBsdWdpbjwvYXJ0aWZhY3RJZD4NCisgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4xMjwvdmVyc2lvbj4NCisgICAgICAgICAgICAgICAgPCEtLSBFeHBsaWNpdGx5IGFkZCB0aGUgdHJhbnNpdGl2ZSBkZXBlbmRlbmNpZXMgZm9yIGpheHdzLWFwaQ0KKyAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly9qaXJhLmNvZGVoYXVzLm9yZy9icm93c2UvTUVWLTQ5OA0KKyAgICAgICAgICAgICAgICAtLT4NCisgICAgICAgICAgICAgICAgPGRlcGVuZGVuY2llcz4NCisgICAgICAgICAgICAgICAgICAgIDxkZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxncm91cElkPmphdmF4Lmp3czwvZ3JvdXBJZD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5qc3IxODEtYXBpPC9hcnRpZmFjdElkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjEuMC1NUjE8L3ZlcnNpb24+DQorICAgICAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY3k+DQorICAgICAgICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5qYXZheC5hbm5vdGF0aW9uPC9ncm91cElkPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxhcnRpZmFjdElkPmpzcjI1MC1hcGk8L2FydGlmYWN0SWQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPC9kZXBlbmRlbmN5Pg0KKyAgICAgICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4NCisgICAgICAgICAgICAgICAgPGV4ZWN1dGlvbnM+DQorICAgICAgICAgICAgICAgICAgICA8IS0tIGV4ZWN1dGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICA8aWQ+d3NpbXBvcnQxPC9pZD4NCisgICAgICAgICAgICAgICAgICAgICAgICA8cGhhc2U+cHJvY2Vzcy1yZXNvdXJjZXM8L3BoYXNlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDxnb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGdvYWw+d3NpbXBvcnQ8L2dvYWw+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9nb2Fscz4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Y29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhY2thZ2VOYW1lPm9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5zY2E8L3BhY2thZ2VOYW1lPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbERpcmVjdG9yeT4ke2Jhc2VkaXJ9L3RhcmdldC9jbGFzc2VzPC93c2RsRGlyZWN0b3J5Pg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbEZpbGVzPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHdzZGxGaWxlPkhlbGxvV29ybGRJbXBsU2VydmljZS53c2RsPC93c2RsRmlsZT4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC93c2RsRmlsZXM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdGFsZUZpbGU+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vamF4d3Mvc3RhbGUvLndzaW1wb3J0MVN0YWxlRmxhZzwvc3RhbGVGaWxlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9uLS0+ICANCisgICAgICAgICAgICAgICAgICAgIDxleGVjdXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGlkPndzaW1wb3J0MjwvaWQ+DQorICAgICAgICAgICAgICAgICAgICAgICAgPHBoYXNlPnByb2Nlc3MtcmVzb3VyY2VzPC9waGFzZT4NCisgICAgICAgICAgICAgICAgICAgICAgICA8Z29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnb2FsPndzaW1wb3J0PC9nb2FsPg0KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvZ29hbHM+DQorICAgICAgICAgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYWNrYWdlTmFtZT5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3MuZXh0ZXJuYWwuc2VydmljZS5pZmFjZTwvcGFja2FnZU5hbWU+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsRGlyZWN0b3J5PiR7YmFzZWRpcn0vdGFyZ2V0L2NsYXNzZXM8L3dzZGxEaXJlY3Rvcnk+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx3c2RsRmlsZXM+DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8d3NkbEZpbGU+aGVsbG93b3JsZC1leHRlcm5hbC1zZXJ2aWNlLndzZGw8L3dzZGxGaWxlPg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3dzZGxGaWxlcz4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0YWxlRmlsZT4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9qYXh3cy9zdGFsZS8ud3NpbXBvcnQyU3RhbGVGbGFnPC9zdGFsZUZpbGU+DQorICAgICAgICAgICAgICAgICAgICAgICAgPC9jb25maWd1cmF0aW9uPg0KKyAgICAgICAgICAgICAgICAgICAgPC9leGVjdXRpb24+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQorICAgICAgICAgICAgICAgIDwvZXhlY3V0aW9ucz4NCisgICAgICAgICAgICAgICAgPGNvbmZpZ3VyYXRpb24+DQorICAgICAgICAgICAgICAgICAgICA8dGFyZ2V0PjIuMTwvdGFyZ2V0Pg0KKyAgICAgICAgICAgICAgICAgICAgPHNvdXJjZURlc3REaXI+JHtwcm9qZWN0LmJ1aWxkLmRpcmVjdG9yeX0vamF4d3Mtc291cmNlPC9zb3VyY2VEZXN0RGlyPg0KKyAgICAgICAgICAgICAgICAgICAgPHZlcmJvc2U+dHJ1ZTwvdmVyYm9zZT4NCisgICAgICAgICAgICAgICAgICAgIDx4bm9jb21waWxlPnRydWU8L3hub2NvbXBpbGU+DQorICAgICAgICAgICAgICAgIDwvY29uZmlndXJhdGlvbj4NCisgICAgICAgICAgICA8L3BsdWdpbj4gICAgICAgICAgICAgICAgICAgICANCisgICAgICAgIDwvcGx1Z2lucz4NCisgICAgPC9idWlsZD4NCis8L3Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL0hlbGxvV29ybGQuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWMxMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkLmphdmEKQEAgLTAsMCArMSwzNyBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzOw0KKw0KK2ltcG9ydCBqYXZheC5qd3MuV2ViTWV0aG9kOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3MuZXh0ZXJuYWwuc2VydmljZS5pZmFjZS5Gb287DQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLlNlcnZpY2VSdW50aW1lRXhjZXB0aW9uOw0KK2ltcG9ydCBvcmcub2FzaXNvcGVuLnNjYS5hbm5vdGF0aW9uLlJlbW90YWJsZTsNCisNCitAUmVtb3RhYmxlDQorcHVibGljIGludGVyZmFjZSBIZWxsb1dvcmxkIHsNCisgICAgDQorICAgIFN0cmluZyBnZXRHcmVldGluZ3MoU3RyaW5nIHMpOw0KKyAgICBTdHJpbmcgZ2V0R3JlZXRpbmdzRXhjZXB0aW9uKFN0cmluZyBzKSB0aHJvd3MgU2VydmljZVJ1bnRpbWVFeGNlcHRpb247DQorICAgIEZvbyBnZXRHcmVldGluZ3NDb21wbGV4KEZvbyBmb28pOw0KKyAgICANCisgICAgQFdlYk1ldGhvZChvcGVyYXRpb25OYW1lID0gIkdldEdyZWV0aW5nc0NhcHMiKQ0KKyAgICBTdHJpbmcgZ2V0R3JlZXRpbmdzQ2FwcyhTdHJpbmcgcyk7DQorfQ0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvSGVsbG9Xb3JsZEltcGwuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODhhNzY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9IZWxsb1dvcmxkSW1wbC5qYXZhCkBAIC0wLDAgKzEsNjAgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53czsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLmV4dGVybmFsLnNlcnZpY2UuaWZhY2UuRm9vOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3MuZXh0ZXJuYWwuc2VydmljZS5pZmFjZS5IZWxsb1dvcmxkU2VydmljZTsNCitpbXBvcnQgb3JnLm9hc2lzb3Blbi5zY2EuU2VydmljZVJ1bnRpbWVFeGNlcHRpb247DQoraW1wb3J0IG9yZy5vYXNpc29wZW4uc2NhLmFubm90YXRpb24uUmVmZXJlbmNlOw0KKw0KK3B1YmxpYyBjbGFzcyBIZWxsb1dvcmxkSW1wbCBpbXBsZW1lbnRzIEhlbGxvV29ybGQgew0KKw0KKyAgICBAUmVmZXJlbmNlDQorICAgIHB1YmxpYyBIZWxsb1dvcmxkU2VydmljZSBoZWxsb1dvcmxkRXh0ZXJuYWw7DQorICAgIA0KKyAgICBwdWJsaWMgU3RyaW5nIGdldEdyZWV0aW5ncyhTdHJpbmcgcykgew0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlcmluZyBTQ0EgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3M6ICIgKyBzKTsNCisgICAgICAgIFN0cmluZyByZXNwb25zZSA9IGhlbGxvV29ybGRFeHRlcm5hbC5nZXRHcmVldGluZ3Mocyk7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXZpbmcgU0NBIEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzOiAiICsgcmVzcG9uc2UpOw0KKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOw0KKyAgICB9DQorICAgIA0KKyAgICBwdWJsaWMgU3RyaW5nIGdldEdyZWV0aW5nc0V4Y2VwdGlvbihTdHJpbmcgcykgdGhyb3dzIFNlcnZpY2VSdW50aW1lRXhjZXB0aW9uIHsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXJpbmcgU0NBIEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzRXhjZXB0aW9uOiAiICsgcyk7DQorICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSBoZWxsb1dvcmxkRXh0ZXJuYWwuZ2V0R3JlZXRpbmdzKHMpOw0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZWF2aW5nIFNDQSBIZWxsb1dvcmxkLmdldEdyZWV0aW5nczogIiArIHJlc3BvbnNlKTsNCisgICAgICAgIHRocm93IG5ldyBTZXJ2aWNlUnVudGltZUV4Y2VwdGlvbihyZXNwb25zZSk7DQorICAgIH0gIA0KKw0KKyAgICBwdWJsaWMgRm9vIGdldEdyZWV0aW5nc0NvbXBsZXgoRm9vIGZvbyl7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyaW5nIFNDQSBIZWxsb1dvcmxkLmdldEdyZWV0aW5nc0NvbXBsZXg6ICIgKyBmb28uZ2V0QmFycygpLmdldCgwKS5nZXRTKCkpOw0KKyAgICAgICAgRm9vIHJlc3BvbnNlID0gaGVsbG9Xb3JsZEV4dGVybmFsLmdldEdyZWV0aW5nc0NvbXBsZXgoZm9vKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGVhdmluZyBTQ0EgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3NDb21wbGV4OiAiICsgZm9vLmdldEJhcnMoKS5nZXQoMCkuZ2V0UygpKTsNCisgICAgICAgIHJldHVybiByZXNwb25zZTsNCisgICAgfSANCisgICAgDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JlZXRpbmdzQ2FwcyhTdHJpbmcgcykgew0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlcmluZyBTQ0EgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3NDYXBzOiAiICsgcyk7DQorICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSBoZWxsb1dvcmxkRXh0ZXJuYWwuZ2V0R3JlZXRpbmdzQ2FwcyhzKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGVhdmluZyBTQ0EgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3NDYXBzOiAiICsgcmVzcG9uc2UpOw0KKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOw0KKyAgICB9DQorICAgDQorfQ0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS53c2RsIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlLndzZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmY2U5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS53c2RsCkBAIC0wLDAgKzEsMTI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPGRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3dzLmJpbmRpbmcuc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iIA0KKyAgICAgICAgICAgICBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiIA0KKyAgICAgICAgICAgICB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIA0KKyAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiANCisgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgDQorICAgICAgICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPg0KKyAgPHR5cGVzPg0KKyAgICA8eHNkOnNjaGVtYT4NCisgICAgICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiANCisgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTEueHNkIi8+DQorICAgIDwveHNkOnNjaGVtYT4NCisgIDwvdHlwZXM+DQorICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3MiPg0KKyAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzIi8+DQorICA8L21lc3NhZ2U+DQorICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NSZXNwb25zZSI+DQorICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NSZXNwb25zZSIvPg0KKyAgPC9tZXNzYWdlPg0KKyAgPG1lc3NhZ2UgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIj4NCisgICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvbiIvPg0KKyAgPC9tZXNzYWdlPg0KKyAgPG1lc3NhZ2UgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiPg0KKyAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiLz4NCisgIDwvbWVzc2FnZT4NCisgIDxtZXNzYWdlIG5hbWU9IkV4Y2VwdGlvbiI+DQorICAgIDxwYXJ0IG5hbWU9ImZhdWx0IiBlbGVtZW50PSJ0bnM6RXhjZXB0aW9uIi8+DQorICA8L21lc3NhZ2U+DQorICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCisgICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCisgIDwvbWVzc2FnZT4NCisgIDxtZXNzYWdlIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSI+DQorICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCisgIDwvbWVzc2FnZT4NCisgIDxtZXNzYWdlIG5hbWU9IkdldEdyZWV0aW5nc0NhcHMiPg0KKyAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6R2V0R3JlZXRpbmdzQ2FwcyIvPg0KKyAgPC9tZXNzYWdlPg0KKyAgPG1lc3NhZ2UgbmFtZT0iR2V0R3JlZXRpbmdzQ2Fwc1Jlc3BvbnNlIj4NCisgICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOkdldEdyZWV0aW5nc0NhcHNSZXNwb25zZSIvPg0KKyAgPC9tZXNzYWdlPiAgIA0KKyAgPHBvcnRUeXBlIG5hbWU9IkhlbGxvV29ybGRJbXBsIj4NCisgICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3MiPg0KKyAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6Z2V0R3JlZXRpbmdzIi8+DQorICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6Z2V0R3JlZXRpbmdzUmVzcG9uc2UiLz4NCisgICAgPC9vcGVyYXRpb24+DQorICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIj4NCisgICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvbiIvPg0KKyAgICAgIDxvdXRwdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvblJlc3BvbnNlIi8+DQorICAgICAgPGZhdWx0IG1lc3NhZ2U9InRuczpFeGNlcHRpb24iIG5hbWU9IkV4Y2VwdGlvbiIvPg0KKyAgICA8L29wZXJhdGlvbj4NCisgICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCisgICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCisgICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCisgICAgPC9vcGVyYXRpb24+DQorICAgIDxvcGVyYXRpb24gbmFtZT0iR2V0R3JlZXRpbmdzQ2FwcyI+DQorICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpHZXRHcmVldGluZ3NDYXBzIi8+DQorICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6R2V0R3JlZXRpbmdzQ2Fwc1Jlc3BvbnNlIi8+DQorICAgIDwvb3BlcmF0aW9uPiAgICAgICANCisgIDwvcG9ydFR5cGU+DQorICA8YmluZGluZyBuYW1lPSJIZWxsb1dvcmxkSW1wbFBvcnRCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG9Xb3JsZEltcGwiPg0KKyAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0iZG9jdW1lbnQiLz4NCisgICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3MiPg0KKyAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4NCisgICAgICA8aW5wdXQ+DQorICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KKyAgICAgIDwvaW5wdXQ+DQorICAgICAgPG91dHB1dD4NCisgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQorICAgICAgPC9vdXRwdXQ+DQorICAgIDwvb3BlcmF0aW9uPg0KKyAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5nc0V4Y2VwdGlvbiI+DQorICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPg0KKyAgICAgIDxpbnB1dD4NCisgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQorICAgICAgPC9pbnB1dD4NCisgICAgICA8b3V0cHV0Pg0KKyAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCisgICAgICA8L291dHB1dD4NCisgICAgICA8ZmF1bHQgbmFtZT0iRXhjZXB0aW9uIj4NCisgICAgICAgIDxzb2FwOmZhdWx0IG5hbWU9IkV4Y2VwdGlvbiIgdXNlPSJsaXRlcmFsIi8+DQorICAgICAgPC9mYXVsdD4NCisgICAgPC9vcGVyYXRpb24+DQorICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleCI+DQorICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPg0KKyAgICAgIDxpbnB1dD4NCisgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQorICAgICAgPC9pbnB1dD4NCisgICAgICA8b3V0cHV0Pg0KKyAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCisgICAgICA8L291dHB1dD4NCisgICAgPC9vcGVyYXRpb24+DQorICAgIDxvcGVyYXRpb24gbmFtZT0iR2V0R3JlZXRpbmdzQ2FwcyI+DQorICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPg0KKyAgICAgIDxpbnB1dD4NCisgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQorICAgICAgPC9pbnB1dD4NCisgICAgICA8b3V0cHV0Pg0KKyAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCisgICAgICA8L291dHB1dD4NCisgICAgPC9vcGVyYXRpb24+ICAgICANCisgIDwvYmluZGluZz4NCisgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRJbXBsU2VydmljZSI+DQorICAgIDxwb3J0IG5hbWU9IkhlbGxvV29ybGRJbXBsUG9ydCIgYmluZGluZz0idG5zOkhlbGxvV29ybGRJbXBsUG9ydEJpbmRpbmciPg0KKyAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9IZWxsb1dvcmxkU2VydmljZS9IZWxsb1dvcmxkIi8+DQorICAgIDwvcG9ydD4NCisgIDwvc2VydmljZT4NCis8L2RlZmluaXRpb25zPg0KKw0KKw0KKw0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZV9zY2hlbWExLnhzZCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZV9zY2hlbWExLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDhhZGYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTEueHNkCkBAIC0wLDAgKzEsOTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8eHM6c2NoZW1hIHZlcnNpb249IjEuMCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3MuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIgDQorICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnRucz0iaHR0cDovL3dzLmJpbmRpbmcuc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iIA0KKyAgICAgICAgICAgICAgICAgICAgICAgICB4bWxuczp0bnMyPSJodHRwOi8vaGVsbG93b3JsZC9leHRlcm5hbCINCisgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4NCisgICAgICAgICAgICAgICAgICAgICAgICAgDQorICA8eHM6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiIHNjaGVtYUxvY2F0aW9uPSIuL0hlbGxvV29ybGRJbXBsU2VydmljZV9zY2hlbWEyLnhzZCIvPiAgICAgICAgICAgICAgICAgICAgICAgICANCisNCisgIDx4czplbGVtZW50IG5hbWU9IkV4Y2VwdGlvbiIgdHlwZT0idG5zOkV4Y2VwdGlvbiIvPg0KKw0KKyAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0R3JlZXRpbmdzIiB0eXBlPSJ0bnM6Z2V0R3JlZXRpbmdzIi8+DQorDQorICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4IiB0eXBlPSJ0bnM6Z2V0R3JlZXRpbmdzQ29tcGxleCIvPg0KKw0KKyAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleFJlc3BvbnNlIiB0eXBlPSJ0bnM6Z2V0R3JlZXRpbmdzQ29tcGxleFJlc3BvbnNlIi8+DQorDQorICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb24iIHR5cGU9InRuczpnZXRHcmVldGluZ3NFeGNlcHRpb24iLz4NCisNCisgIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc0V4Y2VwdGlvblJlc3BvbnNlIiB0eXBlPSJ0bnM6Z2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiLz4NCisNCisgIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc1Jlc3BvbnNlIiB0eXBlPSJ0bnM6Z2V0R3JlZXRpbmdzUmVzcG9uc2UiLz4NCisgIA0KKyAgPHhzOmVsZW1lbnQgbmFtZT0iR2V0R3JlZXRpbmdzQ2FwcyIgdHlwZT0idG5zOkdldEdyZWV0aW5nc0NhcHMiLz4NCisNCisgIDx4czplbGVtZW50IG5hbWU9IkdldEdyZWV0aW5nc0NhcHNSZXNwb25zZSIgdHlwZT0idG5zOkdldEdyZWV0aW5nc0NhcHNSZXNwb25zZSIvPiAgICANCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb24iPg0KKyAgICA8eHM6c2VxdWVuY2U+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYXJnMCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4NCisgICAgPC94czpzZXF1ZW5jZT4NCisgIDwveHM6Y29tcGxleFR5cGU+DQorDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiPg0KKyAgICA8eHM6c2VxdWVuY2U+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4NCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJFeGNlcHRpb24iPg0KKyAgICA8eHM6c2VxdWVuY2U+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ibWVzc2FnZSIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4NCisgICAgPC94czpzZXF1ZW5jZT4NCisgIDwveHM6Y29tcGxleFR5cGU+DQorDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzIj4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9ImFyZzAiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQorICAgIDwveHM6c2VxdWVuY2U+DQorICA8L3hzOmNvbXBsZXhUeXBlPg0KKw0KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5nc1Jlc3BvbnNlIj4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9InJldHVybiIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4NCisgICAgPC94czpzZXF1ZW5jZT4NCisgIDwveHM6Y29tcGxleFR5cGU+DQorDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleCI+DQorICAgIDx4czpzZXF1ZW5jZT4NCisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhcmcwIiB0eXBlPSJ0bnMyOmZvbyIgbWluT2NjdXJzPSIwIi8+DQorICAgIDwveHM6c2VxdWVuY2U+DQorICA8L3hzOmNvbXBsZXhUeXBlPg0KKw0KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSI+DQorICAgIDx4czpzZXF1ZW5jZT4NCisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJyZXR1cm4iIHR5cGU9InRuczI6Zm9vIiBtaW5PY2N1cnM9IjAiLz4NCisgICAgPC94czpzZXF1ZW5jZT4NCisgIDwveHM6Y29tcGxleFR5cGU+DQorICANCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJHZXRHcmVldGluZ3NDYXBzIj4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9ImFyZzAiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQorICAgIDwveHM6c2VxdWVuY2U+DQorICA8L3hzOmNvbXBsZXhUeXBlPg0KKw0KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkdldEdyZWV0aW5nc0NhcHNSZXNwb25zZSI+DQorICAgIDx4czpzZXF1ZW5jZT4NCisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJyZXR1cm4iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQorICAgIDwveHM6c2VxdWVuY2U+DQorICA8L3hzOmNvbXBsZXhUeXBlPiAgICANCis8L3hzOnNjaGVtYT4NCisNCmRpZmYgLS1naXQgYS9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTIueHNkIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTIueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTIueHNkCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Vfc2NoZW1hMi54c2QKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRTZXJ2aWNlU2VydmljZV9zY2hlbWExLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjdlZWI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZFNlcnZpY2VTZXJ2aWNlX3NjaGVtYTEueHNkCkBAIC0wLDAgKzEsODYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCis8IS0tDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCistLT4NCis8eHM6c2NoZW1hIHZlcnNpb249IjEuMCIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vaGVsbG93b3JsZC9leHRlcm5hbCIgeG1sbnM6dG5zPSJodHRwOi8vaGVsbG93b3JsZC9leHRlcm5hbCIgeG1sbnM6eHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4NCisNCisgIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5ncyIgdHlwZT0idG5zOmdldEdyZWV0aW5ncyIvPg0KKyAgDQorICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NSZXNwb25zZSIgdHlwZT0idG5zOmdldEdyZWV0aW5nc1Jlc3BvbnNlIi8+ICANCisNCisgIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXgiIHR5cGU9InRuczpnZXRHcmVldGluZ3NDb21wbGV4Ii8+DQorDQorICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiIHR5cGU9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCisNCisgIDx4czplbGVtZW50IG5hbWU9IkdldEdyZWV0aW5nc0NhcHMiIHR5cGU9InRuczpHZXRHcmVldGluZ3NDYXBzIi8+DQorDQorICA8eHM6ZWxlbWVudCBuYW1lPSJHZXRHcmVldGluZ3NDYXBzUmVzcG9uc2UiIHR5cGU9InRuczpHZXRHcmVldGluZ3NDYXBzUmVzcG9uc2UiLz4gIA0KKw0KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5ncyI+DQorICAgIDx4czpzZXF1ZW5jZT4NCisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJ4czpzdHJpbmciIGZvcm09InF1YWxpZmllZCIgbWluT2NjdXJzPSIwIi8+DQorICAgIDwveHM6c2VxdWVuY2U+DQorICA8L3hzOmNvbXBsZXhUeXBlPg0KKw0KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5nc1Jlc3BvbnNlIj4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc1JldHVybiIgdHlwZT0ieHM6c3RyaW5nIiBmb3JtPSJxdWFsaWZpZWQiIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4NCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9ImFyZzAiIHR5cGU9InRuczpmb28iIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4NCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJmb28iPg0KKyAgICA8eHM6c2VxdWVuY2U+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYmFycyIgdHlwZT0idG5zOmJhciIgbmlsbGFibGU9InRydWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4NCisgICAgPC94czpzZXF1ZW5jZT4NCisgIDwveHM6Y29tcGxleFR5cGU+DQorDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYmFyIj4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9ImIiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIvPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9InMiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ieCIgdHlwZT0ieHM6aW50Ii8+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ieSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiLz4NCisgICAgPC94czpzZXF1ZW5jZT4NCisgIDwveHM6Y29tcGxleFR5cGU+DQorDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleFJlc3BvbnNlIj4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9InJldHVybiIgdHlwZT0idG5zOmZvbyIgbWluT2NjdXJzPSIwIi8+DQorICAgIDwveHM6c2VxdWVuY2U+DQorICA8L3hzOmNvbXBsZXhUeXBlPg0KKyAgDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iR2V0R3JlZXRpbmdzQ2FwcyI+DQorICAgIDx4czpzZXF1ZW5jZT4NCisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhcmcwIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4NCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJHZXRHcmVldGluZ3NDYXBzUmVzcG9uc2UiPg0KKyAgICA8eHM6c2VxdWVuY2U+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4gIA0KKzwveHM6c2NoZW1hPg0KKw0KKw0KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQtZXh0ZXJuYWwtc2VydmljZS53c2RsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzOGY2MjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLWV4dGVybmFsLXNlcnZpY2Uud3NkbApAQCAtMCwwICsxLDk5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPCEtLSBHZW5lcmF0ZWQgYnkgSkFYLVdTIFJJIGF0IGh0dHA6Ly9qYXgtd3MuZGV2LmphdmEubmV0LiBSSSdzIHZlcnNpb24gaXMgSkFYLVdTIFJJIDIuMS43LWIwMS0uIC0tPg0KKzxkZWZpbml0aW9ucyB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9oZWxsb3dvcmxkL2V4dGVybmFsIiBuYW1lPSJIZWxsb1dvcmxkU2VydmljZVNlcnZpY2UiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy93c2RsLyIgeG1sbnM6dG5zPSJodHRwOi8vaGVsbG93b3JsZC9leHRlcm5hbCIgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6c29hcD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC9zb2FwLyI+DQorICA8dHlwZXM+DQorICAgIDx4c2Q6c2NoZW1hPg0KKyAgICAgIDx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiIHNjaGVtYUxvY2F0aW9uPSJIZWxsb1dvcmxkU2VydmljZVNlcnZpY2Vfc2NoZW1hMS54c2QiLz4NCisgICAgPC94c2Q6c2NoZW1hPg0KKyAgPC90eXBlcz4NCisgIDxtZXNzYWdlIG5hbWU9ImdldEdyZWV0aW5ncyI+DQorICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3MiLz4NCisgIDwvbWVzc2FnZT4NCisgIDxtZXNzYWdlIG5hbWU9ImdldEdyZWV0aW5nc1Jlc3BvbnNlIj4NCisgICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc1Jlc3BvbnNlIi8+DQorICA8L21lc3NhZ2U+DQorICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCisgICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCisgIDwvbWVzc2FnZT4NCisgIDxtZXNzYWdlIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSI+DQorICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCisgIDwvbWVzc2FnZT4NCisgIDxtZXNzYWdlIG5hbWU9IkdldEdyZWV0aW5nc0NhcHMiPg0KKyAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6R2V0R3JlZXRpbmdzQ2FwcyIvPg0KKyAgPC9tZXNzYWdlPg0KKyAgPG1lc3NhZ2UgbmFtZT0iR2V0R3JlZXRpbmdzQ2Fwc1Jlc3BvbnNlIj4NCisgICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOkdldEdyZWV0aW5nc0NhcHNSZXNwb25zZSIvPg0KKyAgPC9tZXNzYWdlPiAgDQorICA8cG9ydFR5cGUgbmFtZT0iSGVsbG9Xb3JsZFNlcnZpY2UiPg0KKyAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5ncyI+DQorICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3MiLz4NCisgICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NSZXNwb25zZSIvPg0KKyAgICA8L29wZXJhdGlvbj4NCisgICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCisgICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCisgICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCisgICAgPC9vcGVyYXRpb24+DQorICAgIDxvcGVyYXRpb24gbmFtZT0iR2V0R3JlZXRpbmdzQ2FwcyI+DQorICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpHZXRHcmVldGluZ3NDYXBzIi8+DQorICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6R2V0R3JlZXRpbmdzQ2Fwc1Jlc3BvbnNlIi8+DQorICAgIDwvb3BlcmF0aW9uPiAgICANCisgIDwvcG9ydFR5cGU+DQorICA8YmluZGluZyBuYW1lPSJIZWxsb1dvcmxkU2VydmljZVBvcnRCaW5kaW5nIiB0eXBlPSJ0bnM6SGVsbG9Xb3JsZFNlcnZpY2UiPg0KKyAgICA8c29hcDpiaW5kaW5nIHRyYW5zcG9ydD0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvc29hcC9odHRwIiBzdHlsZT0iZG9jdW1lbnQiLz4NCisgICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3MiPg0KKyAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4NCisgICAgICA8aW5wdXQ+DQorICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KKyAgICAgIDwvaW5wdXQ+DQorICAgICAgPG91dHB1dD4NCisgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQorICAgICAgPC9vdXRwdXQ+DQorICAgIDwvb3BlcmF0aW9uPg0KKyAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXgiPg0KKyAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4NCisgICAgICA8aW5wdXQ+DQorICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KKyAgICAgIDwvaW5wdXQ+DQorICAgICAgPG91dHB1dD4NCisgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQorICAgICAgPC9vdXRwdXQ+DQorICAgIDwvb3BlcmF0aW9uPg0KKyAgICA8b3BlcmF0aW9uIG5hbWU9IkdldEdyZWV0aW5nc0NhcHMiPg0KKyAgICAgIDxzb2FwOm9wZXJhdGlvbiBzb2FwQWN0aW9uPSIiLz4NCisgICAgICA8aW5wdXQ+DQorICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KKyAgICAgIDwvaW5wdXQ+DQorICAgICAgPG91dHB1dD4NCisgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQorICAgICAgPC9vdXRwdXQ+DQorICAgIDwvb3BlcmF0aW9uPiAgICANCisgIDwvYmluZGluZz4NCisgIDxzZXJ2aWNlIG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlU2VydmljZSI+DQorICAgIDxwb3J0IG5hbWU9IkhlbGxvV29ybGRTZXJ2aWNlUG9ydCIgYmluZGluZz0idG5zOkhlbGxvV29ybGRTZXJ2aWNlUG9ydEJpbmRpbmciPg0KKyAgICAgIDxzb2FwOmFkZHJlc3MgbG9jYXRpb249Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4Ni9FeHRlcm5hbC9IZWxsb1dvcmxkIi8+DQorICAgIDwvcG9ydD4NCisgIDwvc2VydmljZT4gICAgDQorICA8c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiPiAgICANCisgICAgPHBvcnQgbmFtZT0iSGVsbG9Xb3JsZEltcGxQb3J0IiBiaW5kaW5nPSJ0bnM6SGVsbG9Xb3JsZFNlcnZpY2VQb3J0QmluZGluZyI+DQorICAgICAgPHNvYXA6YWRkcmVzcyBsb2NhdGlvbj0iaHR0cDovL2xvY2FsaG9zdDo4MDg1L0hlbGxvV29ybGRTZXJ2aWNlL0hlbGxvV29ybGQiLz4NCisgICAgPC9wb3J0PiAgICANCisgIDwvc2VydmljZT4NCis8L2RlZmluaXRpb25zPg0KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2NvbnRyaWJ1dGlvbi13c2RsLWZpcnN0L3NyYy9tYWluL3Jlc291cmNlcy9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9jb250cmlidXRpb24td3NkbC1maXJzdC9zcmMvbWFpbi9yZXNvdXJjZXMvaGVsbG93b3JsZC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvY29udHJpYnV0aW9uLXdzZGwtZmlyc3Qvc3JjL21haW4vcmVzb3VyY2VzL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC93cy9kZWZhdWx0cy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9kZWZhdWx0cy9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9kZWZhdWx0cy9wb20ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2RlZmF1bHRzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0Jhci5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9kZWZhdWx0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9CYXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvQmFyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvQmFyLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0Zvby5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9kZWZhdWx0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9Gb28uamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvRm9vLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvRm9vLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9kZWZhdWx0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9kZWZhdWx0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRDbGllbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZENsaWVudC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9kZWZhdWx0cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC93cy9kZWZhdWx0cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2RlZmF1bHRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC93cy9kZWZhdWx0cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9EZWZhdWx0c1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0RlZmF1bHRzVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZGVmYXVsdHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvRGVmYXVsdHNUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2RlZmF1bHRzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0RlZmF1bHRzVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50LXJlZmVyZW5jZXMvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50LXJlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50LXJlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZENvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRDb21wb25lbnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50LXJlZmVyZW5jZXMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkU2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50LXJlZmVyZW5jZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50LXJlZmVyZW5jZXMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZW5kcG9pbnQtcmVmZXJlbmNlcy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9lbmRwb2ludC1yZWZlcmVuY2VzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50LXJlZmVyZW5jZXMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50cy9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvcG9tLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZW5kcG9pbnRzL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnRzL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkTXVsdGlTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkTXVsdGlTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkTXVsdGlTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRNdWx0aVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRPTS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZE9NLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT00uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZE9NLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT00yLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT00yLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT00yLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRPTTIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRPTUNvbXBvbmVudC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZE9NQ29tcG9uZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT01Db21wb25lbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZE9NQ29tcG9uZW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT01TZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT01TZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT01TZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRPTVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvRGVmYXVsdE11bHRpU2VydmljZS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0RlZmF1bHRNdWx0aVNlcnZpY2UuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9EZWZhdWx0TXVsdGlTZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9EZWZhdWx0TXVsdGlTZXJ2aWNlLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvRGVmYXVsdFNpbmdsZVNlcnZpY2UuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9EZWZhdWx0U2luZ2xlU2VydmljZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0RlZmF1bHRTaW5nbGVTZXJ2aWNlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9EZWZhdWx0U2luZ2xlU2VydmljZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL1dTRExFeHBsaWNpdFVSSS5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL1dTRExFeHBsaWNpdFVSSS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL1dTRExFeHBsaWNpdFVSSS5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvV1NETEV4cGxpY2l0VVJJLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvV1NETFJlbGF0aXZlVVJJLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvV1NETFJlbGF0aXZlVVJJLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvV1NETFJlbGF0aXZlVVJJLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9XU0RMUmVsYXRpdmVVUkkuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLW9tLXJlbGF0aXZlLXVyaS53c2RsIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLW9tLXJlbGF0aXZlLXVyaS53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLW9tLXJlbGF0aXZlLXVyaS53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQtb20tcmVsYXRpdmUtdXJpLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQtb20tdXJpLndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQtb20tdXJpLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQtb20tdXJpLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC1vbS11cmkud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC1vbS53c2RsIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLW9tLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQtb20ud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLW9tLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9BYnN0cmFjdEhlbGxvV29ybGRPTVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9BYnN0cmFjdEhlbGxvV29ybGRPTVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9BYnN0cmFjdEhlbGxvV29ybGRPTVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0Fic3RyYWN0SGVsbG9Xb3JsZE9NVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0RlZmF1bHRNdWx0aVNlcnZpY2VUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvRGVmYXVsdE11bHRpU2VydmljZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9EZWZhdWx0TXVsdGlTZXJ2aWNlVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvRGVmYXVsdE11bHRpU2VydmljZVRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9EZWZhdWx0U2luZ2xlU2VydmljZVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9EZWZhdWx0U2luZ2xlU2VydmljZVRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9EZWZhdWx0U2luZ2xlU2VydmljZVRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0RlZmF1bHRTaW5nbGVTZXJ2aWNlVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL1dTRExFeHBsaWNpdFVSSVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9XU0RMRXhwbGljaXRVUklUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvV1NETEV4cGxpY2l0VVJJVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvV1NETEV4cGxpY2l0VVJJVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZW5kcG9pbnRzL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL1dTRExSZWxhdGl2ZVVSSVRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2VuZHBvaW50cy9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9XU0RMUmVsYXRpdmVVUklUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvV1NETFJlbGF0aXZlVVJJVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9lbmRwb2ludHMvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvV1NETFJlbGF0aXZlVVJJVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZXh0ZXJuYWwtY2xpZW50L3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzL2V4dGVybmFsLWNsaWVudC9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9leHRlcm5hbC1jbGllbnQvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvcG9tLnhtbApkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvY2xpZW50L0hlbGxvV29ybGRDbGllbnRMYXVuY2hlci5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvY2xpZW50L0hlbGxvV29ybGRDbGllbnRMYXVuY2hlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjZWNmNTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3dzL2V4dGVybmFsLWNsaWVudC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9jbGllbnQvSGVsbG9Xb3JsZENsaWVudExhdW5jaGVyLmphdmEKQEAgLTAsMCArMSw5MSBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICoNCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLg0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLmV4dGVybmFsLmNsaWVudDsNCisNCitpbXBvcnQgamF2YS5pby5GaWxlOw0KK2ltcG9ydCBqYXZhLm5ldC5VUkw7DQorDQoraW1wb3J0IGphdmF4LnhtbC5uYW1lc3BhY2UuUU5hbWU7DQoraW1wb3J0IGphdmF4LnhtbC53cy5TZXJ2aWNlOw0KKw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3Muc2NhLkV4Y2VwdGlvbl9FeGNlcHRpb247DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5zY2EuRm9vOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3Muc2NhLkhlbGxvV29ybGRJbXBsOw0KKw0KK3B1YmxpYyBjbGFzcyBIZWxsb1dvcmxkQ2xpZW50TGF1bmNoZXIgew0KKyAgICANCisgICAgcHVibGljIEhlbGxvV29ybGRJbXBsIHdzUHJveHk7DQorICAgIA0KKyAgICBwdWJsaWMgSGVsbG9Xb3JsZENsaWVudExhdW5jaGVyKCl7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyB2b2lkIGNyZWF0ZUNsaWVudCgpIHRocm93cyBFeGNlcHRpb257DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIj4+PiBTdGFydGluZyBleHRlcm5hbCBKQVhXUyBjbGllbnQgIik7DQorICAgICAgICANCisgICAgICAgIC8vIGRlZmF1bHQgSlZNIEpBWFdTIHN1cHBvcnQNCisgICAgICAgIFFOYW1lIHNlcnZpY2VOYW1lID0gbmV3IFFOYW1lKCJodHRwOi8vd3MuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIsICJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiKTsNCisgICAgICAgIFFOYW1lIHBvcnROYW1lID0gbmV3IFFOYW1lKCJodHRwOi8vd3MuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIsICJIZWxsb1dvcmxkSW1wbFBvcnQiKTsNCisgICAgICAgIC8vVVJMIHdzZGxMb2NhdGlvbiA9IG5ldyBGaWxlKCIuLi9leHRlcm5hbC1jbGllbnQvdGFyZ2V0L2NsYXNzZXMvaGVsbG93b3JsZC1zY2Eud3NkbCIpLnRvVVJMKCk7DQorICAgICAgICBVUkwgd3NkbExvY2F0aW9uID0gbmV3IEZpbGUoIi4uL2V4dGVybmFsLWNsaWVudC90YXJnZXQvY2xhc3Nlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Uud3NkbCIpLnRvVVJMKCk7DQorICAgICAgICBqYXZheC54bWwud3MuU2VydmljZSB3ZWJTZXJ2aWNlID0gU2VydmljZS5jcmVhdGUod3NkbExvY2F0aW9uLCBzZXJ2aWNlTmFtZSk7DQorICAgICAgICB3c1Byb3h5ID0gKEhlbGxvV29ybGRJbXBsKSB3ZWJTZXJ2aWNlLmdldFBvcnQocG9ydE5hbWUsIEhlbGxvV29ybGRJbXBsLmNsYXNzKTsNCisgICAgfQ0KKyAgICANCisgICAgcHVibGljIHZvaWQgZGVzdHJveUNsaWVudCgpew0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCI+Pj4gU3RvcHBpbmcgZXh0ZXJuYWwgSkFYV1MgY2xpZW50OiAiKTsNCisgICAgICAgIC8vIFRPRE8gDQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JlZXRpbmdzKFN0cmluZyBuYW1lKXsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXJpbmcgRXh0ZXJuYWwgQ2xpZW50IEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzOiAiICsgbmFtZSk7DQorICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSB3c1Byb3h5LmdldEdyZWV0aW5ncyhuYW1lKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGVhdmluZyBFeHRlcm5hbCBDbGllbnQgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3M6ICIgKyByZXNwb25zZSk7DQorICAgICAgICByZXR1cm4gcmVzcG9uc2U7DQorICAgIH0NCisgICAgDQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0R3JlZXRpbmdzRXhjZXB0aW9uKFN0cmluZyBuYW1lKSB0aHJvd3MgRXhjZXB0aW9uX0V4Y2VwdGlvbiB7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyaW5nIEV4dGVybmFsIENsaWVudCBIZWxsb1dvcmxkLmdldEdyZWV0aW5nc0V4Y2VwdGlvbjogIiArIG5hbWUpOw0KKyAgICAgICAgU3RyaW5nIHJlc3BvbnNlID0gIHdzUHJveHkuZ2V0R3JlZXRpbmdzRXhjZXB0aW9uKG5hbWUpOw0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJMZWF2aW5nIEV4dGVybmFsIENsaWVudCBIZWxsb1dvcmxkLmdldEdyZWV0aW5nc0V4Y2VwdGlvbjogIiArIHJlc3BvbnNlKTsNCisgICAgICAgIHJldHVybiByZXNwb25zZTsNCisgICAgfSAgDQorICAgIA0KKyAgICBwdWJsaWMgRm9vIGdldEdyZWV0aW5nc0NvbXBsZXgoRm9vIGYpIHRocm93cyBFeGNlcHRpb25fRXhjZXB0aW9uIHsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiRW50ZXJpbmcgRXh0ZXJuYWwgQ2xpZW50IEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzQ29tcGxleDogIiArIGYuZ2V0QmFycygpLmdldCgwKS5nZXRTKCkpOw0KKyAgICAgICAgRm9vIHJlc3BvbnNlID0gIHdzUHJveHkuZ2V0R3JlZXRpbmdzQ29tcGxleChmKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGVhdmluZyBFeHRlcm5hbCBDbGllbnQgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3NDb21wbGV4OiAiICsgcmVzcG9uc2UuZ2V0QmFycygpLmdldCgwKS5nZXRTKCkpOw0KKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlOw0KKyAgICB9ICAgIA0KKyAgICANCisgICAgcHVibGljIFN0cmluZyBnZXRHcmVldGluZ3NDYXBzKFN0cmluZyBzKSB0aHJvd3MgRXhjZXB0aW9uX0V4Y2VwdGlvbiB7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyaW5nIEV4dGVybmFsIENsaWVudCBIZWxsb1dvcmxkLmdldEdyZWV0aW5nc0NhcHM6ICIgKyBzKTsNCisgICAgICAgIFN0cmluZyByZXNwb25zZSA9ICB3c1Byb3h5LmdldEdyZWV0aW5nc0NhcHMocyk7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXZpbmcgRXh0ZXJuYWwgQ2xpZW50IEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzQ2FwczogIiArIHJlc3BvbnNlKTsNCisgICAgICAgIHJldHVybiByZXNwb25zZTsNCisgICAgfSAgICAgDQorICAgIA0KKyAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIEhlbGxvV29ybGRDbGllbnRMYXVuY2hlciBsYXVuY2hlciA9IG5ldyBIZWxsb1dvcmxkQ2xpZW50TGF1bmNoZXIoKTsNCisgICAgICAgIGxhdW5jaGVyLmNyZWF0ZUNsaWVudCgpOw0KKyAgICAgICAgbGF1bmNoZXIuZ2V0R3JlZXRpbmdzKCJGcmVkIik7DQorICAgICAgICBsYXVuY2hlci5kZXN0cm95Q2xpZW50KCk7DQorICAgIH0NCisgICAgDQorfQ0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvd3MvZXh0ZXJuYWwtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Uud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvZXh0ZXJuYWwtY2xpZW50L3NyYy9tYWluL3Jlc291cmNlcy9IZWxsb1dvcmxkSW1wbFNlcnZpY2Uud3NkbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTc1NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZS53c2RsCkBAIC0wLDAgKzEsMTI4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQorPCEtLQ0KKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUNCisgKiBvciBtb3JlIGNvbnRyaWJ1dG9yIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFNlZSB0aGUgTk9USUNFIGZpbGUNCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbg0KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUNCisgKiB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlDQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQ0KKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQNCisgKiANCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMA0KKyAqIA0KKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywNCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbg0KKyAqICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQ0KKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQ0KKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMNCisgKiB1bmRlciB0aGUgTGljZW5zZS4gICAgDQorLS0+DQorPGRlZmluaXRpb25zIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3dzLmJpbmRpbmcuc2NhLnR1c2NhbnkuYXBhY2hlLm9yZy8iIA0KKyAgICAgICAgICAgICBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiIA0KKyAgICAgICAgICAgICB4bWxucz0iaHR0cDovL3NjaGVtYXMueG1sc29hcC5vcmcvd3NkbC8iIA0KKyAgICAgICAgICAgICB4bWxuczp0bnM9Imh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiANCisgICAgICAgICAgICAgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgDQorICAgICAgICAgICAgIHhtbG5zOnNvYXA9Imh0dHA6Ly9zY2hlbWFzLnhtbHNvYXAub3JnL3dzZGwvc29hcC8iPg0KKyAgPHR5cGVzPg0KKyAgICA8eHNkOnNjaGVtYT4NCisgICAgICA8eHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiANCisgICAgICAgICAgICAgICAgICBzY2hlbWFMb2NhdGlvbj0iSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTEueHNkIi8+DQorICAgIDwveHNkOnNjaGVtYT4NCisgIDwvdHlwZXM+DQorICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3MiPg0KKyAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzIi8+DQorICA8L21lc3NhZ2U+DQorICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NSZXNwb25zZSI+DQorICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NSZXNwb25zZSIvPg0KKyAgPC9tZXNzYWdlPg0KKyAgPG1lc3NhZ2UgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIj4NCisgICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvbiIvPg0KKyAgPC9tZXNzYWdlPg0KKyAgPG1lc3NhZ2UgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiPg0KKyAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6Z2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiLz4NCisgIDwvbWVzc2FnZT4NCisgIDxtZXNzYWdlIG5hbWU9IkV4Y2VwdGlvbiI+DQorICAgIDxwYXJ0IG5hbWU9ImZhdWx0IiBlbGVtZW50PSJ0bnM6RXhjZXB0aW9uIi8+DQorICA8L21lc3NhZ2U+DQorICA8bWVzc2FnZSBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCisgICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCisgIDwvbWVzc2FnZT4NCisgIDxtZXNzYWdlIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSI+DQorICAgIDxwYXJ0IG5hbWU9InBhcmFtZXRlcnMiIGVsZW1lbnQ9InRuczpnZXRHcmVldGluZ3NDb21wbGV4UmVzcG9uc2UiLz4NCisgIDwvbWVzc2FnZT4NCisgIDxtZXNzYWdlIG5hbWU9IkdldEdyZWV0aW5nc0NhcHMiPg0KKyAgICA8cGFydCBuYW1lPSJwYXJhbWV0ZXJzIiBlbGVtZW50PSJ0bnM6R2V0R3JlZXRpbmdzQ2FwcyIvPg0KKyAgPC9tZXNzYWdlPg0KKyAgPG1lc3NhZ2UgbmFtZT0iR2V0R3JlZXRpbmdzQ2Fwc1Jlc3BvbnNlIj4NCisgICAgPHBhcnQgbmFtZT0icGFyYW1ldGVycyIgZWxlbWVudD0idG5zOkdldEdyZWV0aW5nc0NhcHNSZXNwb25zZSIvPg0KKyAgPC9tZXNzYWdlPiAgDQorICA8cG9ydFR5cGUgbmFtZT0iSGVsbG9Xb3JsZEltcGwiPg0KKyAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5ncyI+DQorICAgICAgPGlucHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3MiLz4NCisgICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpnZXRHcmVldGluZ3NSZXNwb25zZSIvPg0KKyAgICA8L29wZXJhdGlvbj4NCisgICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb24iPg0KKyAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6Z2V0R3JlZXRpbmdzRXhjZXB0aW9uIi8+DQorICAgICAgPG91dHB1dCBtZXNzYWdlPSJ0bnM6Z2V0R3JlZXRpbmdzRXhjZXB0aW9uUmVzcG9uc2UiLz4NCisgICAgICA8ZmF1bHQgbWVzc2FnZT0idG5zOkV4Y2VwdGlvbiIgbmFtZT0iRXhjZXB0aW9uIi8+DQorICAgIDwvb3BlcmF0aW9uPg0KKyAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXgiPg0KKyAgICAgIDxpbnB1dCBtZXNzYWdlPSJ0bnM6Z2V0R3JlZXRpbmdzQ29tcGxleCIvPg0KKyAgICAgIDxvdXRwdXQgbWVzc2FnZT0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSIvPg0KKyAgICA8L29wZXJhdGlvbj4NCisgICAgPG9wZXJhdGlvbiBuYW1lPSJHZXRHcmVldGluZ3NDYXBzIj4NCisgICAgICA8aW5wdXQgbWVzc2FnZT0idG5zOkdldEdyZWV0aW5nc0NhcHMiLz4NCisgICAgICA8b3V0cHV0IG1lc3NhZ2U9InRuczpHZXRHcmVldGluZ3NDYXBzUmVzcG9uc2UiLz4NCisgICAgPC9vcGVyYXRpb24+ICAgIA0KKyAgPC9wb3J0VHlwZT4NCisgIDxiaW5kaW5nIG5hbWU9IkhlbGxvV29ybGRJbXBsUG9ydEJpbmRpbmciIHR5cGU9InRuczpIZWxsb1dvcmxkSW1wbCI+DQorICAgIDxzb2FwOmJpbmRpbmcgdHJhbnNwb3J0PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2h0dHAiIHN0eWxlPSJkb2N1bWVudCIvPg0KKyAgICA8b3BlcmF0aW9uIG5hbWU9ImdldEdyZWV0aW5ncyI+DQorICAgICAgPHNvYXA6b3BlcmF0aW9uIHNvYXBBY3Rpb249IiIvPg0KKyAgICAgIDxpbnB1dD4NCisgICAgICAgIDxzb2FwOmJvZHkgdXNlPSJsaXRlcmFsIi8+DQorICAgICAgPC9pbnB1dD4NCisgICAgICA8b3V0cHV0Pg0KKyAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCisgICAgICA8L291dHB1dD4NCisgICAgPC9vcGVyYXRpb24+DQorICAgIDxvcGVyYXRpb24gbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIj4NCisgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+DQorICAgICAgPGlucHV0Pg0KKyAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCisgICAgICA8L2lucHV0Pg0KKyAgICAgIDxvdXRwdXQ+DQorICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KKyAgICAgIDwvb3V0cHV0Pg0KKyAgICAgIDxmYXVsdCBuYW1lPSJFeGNlcHRpb24iPg0KKyAgICAgICAgPHNvYXA6ZmF1bHQgbmFtZT0iRXhjZXB0aW9uIiB1c2U9ImxpdGVyYWwiLz4NCisgICAgICA8L2ZhdWx0Pg0KKyAgICA8L29wZXJhdGlvbj4NCisgICAgPG9wZXJhdGlvbiBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCisgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+DQorICAgICAgPGlucHV0Pg0KKyAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCisgICAgICA8L2lucHV0Pg0KKyAgICAgIDxvdXRwdXQ+DQorICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KKyAgICAgIDwvb3V0cHV0Pg0KKyAgICA8L29wZXJhdGlvbj4NCisgICAgPG9wZXJhdGlvbiBuYW1lPSJHZXRHcmVldGluZ3NDYXBzIj4NCisgICAgICA8c29hcDpvcGVyYXRpb24gc29hcEFjdGlvbj0iIi8+DQorICAgICAgPGlucHV0Pg0KKyAgICAgICAgPHNvYXA6Ym9keSB1c2U9ImxpdGVyYWwiLz4NCisgICAgICA8L2lucHV0Pg0KKyAgICAgIDxvdXRwdXQ+DQorICAgICAgICA8c29hcDpib2R5IHVzZT0ibGl0ZXJhbCIvPg0KKyAgICAgIDwvb3V0cHV0Pg0KKyAgICA8L29wZXJhdGlvbj4gICAgDQorICA8L2JpbmRpbmc+DQorICA8c2VydmljZSBuYW1lPSJIZWxsb1dvcmxkSW1wbFNlcnZpY2UiPg0KKyAgICA8cG9ydCBuYW1lPSJIZWxsb1dvcmxkSW1wbFBvcnQiIGJpbmRpbmc9InRuczpIZWxsb1dvcmxkSW1wbFBvcnRCaW5kaW5nIj4NCisgICAgICA8c29hcDphZGRyZXNzIGxvY2F0aW9uPSJodHRwOi8vbG9jYWxob3N0OjgwODUvSGVsbG9Xb3JsZFNlcnZpY2UvSGVsbG9Xb3JsZCIvPg0KKyAgICA8L3BvcnQ+DQorICA8L3NlcnZpY2U+DQorPC9kZWZpbml0aW9ucz4NCisNCisNCisNCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L3dzL2V4dGVybmFsLWNsaWVudC9zcmMvbWFpbi9yZXNvdXJjZXMvSGVsbG9Xb3JsZEltcGxTZXJ2aWNlX3NjaGVtYTEueHNkIGIvdGVzdGluZy9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZV9zY2hlbWExLnhzZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWMwYWNiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC93cy9leHRlcm5hbC1jbGllbnQvc3JjL21haW4vcmVzb3VyY2VzL0hlbGxvV29ybGRJbXBsU2VydmljZV9zY2hlbWExLnhzZApAQCAtMCwwICsxLDExMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KKzwhLS0NCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKy0tPg0KKzx4czpzY2hlbWEgdmVyc2lvbj0iMS4wIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiANCisgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM6dG5zPSJodHRwOi8vd3MuYmluZGluZy5zY2EudHVzY2FueS5hcGFjaGUub3JnLyIgDQorICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSI+DQorDQorICA8eHM6ZWxlbWVudCBuYW1lPSJFeGNlcHRpb24iIHR5cGU9InRuczpFeGNlcHRpb24iLz4NCisNCisgIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5ncyIgdHlwZT0idG5zOmdldEdyZWV0aW5ncyIvPg0KKw0KKyAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleCIgdHlwZT0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXgiLz4NCisNCisgIDx4czplbGVtZW50IG5hbWU9ImdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSIgdHlwZT0idG5zOmdldEdyZWV0aW5nc0NvbXBsZXhSZXNwb25zZSIvPg0KKw0KKyAgPHhzOmVsZW1lbnQgbmFtZT0iZ2V0R3JlZXRpbmdzRXhjZXB0aW9uIiB0eXBlPSJ0bnM6Z2V0R3JlZXRpbmdzRXhjZXB0aW9uIi8+DQorDQorICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb25SZXNwb25zZSIgdHlwZT0idG5zOmdldEdyZWV0aW5nc0V4Y2VwdGlvblJlc3BvbnNlIi8+DQorDQorICA8eHM6ZWxlbWVudCBuYW1lPSJnZXRHcmVldGluZ3NSZXNwb25zZSIgdHlwZT0idG5zOmdldEdyZWV0aW5nc1Jlc3BvbnNlIi8+DQorICANCisgIDx4czplbGVtZW50IG5hbWU9IkdldEdyZWV0aW5nc0NhcHMiIHR5cGU9InRuczpHZXRHcmVldGluZ3NDYXBzIi8+DQorDQorICA8eHM6ZWxlbWVudCBuYW1lPSJHZXRHcmVldGluZ3NDYXBzUmVzcG9uc2UiIHR5cGU9InRuczpHZXRHcmVldGluZ3NDYXBzUmVzcG9uc2UiLz4gIA0KKw0KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9ImdldEdyZWV0aW5nc0V4Y2VwdGlvbiI+DQorICAgIDx4czpzZXF1ZW5jZT4NCisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhcmcwIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4NCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3NFeGNlcHRpb25SZXNwb25zZSI+DQorICAgIDx4czpzZXF1ZW5jZT4NCisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJyZXR1cm4iIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQorICAgIDwveHM6c2VxdWVuY2U+DQorICA8L3hzOmNvbXBsZXhUeXBlPg0KKw0KKyAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9IkV4Y2VwdGlvbiI+DQorICAgIDx4czpzZXF1ZW5jZT4NCisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJtZXNzYWdlIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4NCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3MiPg0KKyAgICA8eHM6c2VxdWVuY2U+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYXJnMCIgdHlwZT0ieHM6c3RyaW5nIiBtaW5PY2N1cnM9IjAiLz4NCisgICAgPC94czpzZXF1ZW5jZT4NCisgIDwveHM6Y29tcGxleFR5cGU+DQorDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzUmVzcG9uc2UiPg0KKyAgICA8eHM6c2VxdWVuY2U+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4NCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJnZXRHcmVldGluZ3NDb21wbGV4Ij4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9ImFyZzAiIHR5cGU9InRuczpmb28iIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4NCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJmb28iPg0KKyAgICA8eHM6c2VxdWVuY2U+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0iYmFycyIgdHlwZT0idG5zOmJhciIgbmlsbGFibGU9InRydWUiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiLz4NCisgICAgPC94czpzZXF1ZW5jZT4NCisgIDwveHM6Y29tcGxleFR5cGU+DQorDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iYmFyIj4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9ImIiIHR5cGU9InhzOmJvb2xlYW4iIG1pbk9jY3Vycz0iMCIvPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9InMiIHR5cGU9InhzOnN0cmluZyIgbWluT2NjdXJzPSIwIi8+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ieCIgdHlwZT0ieHM6aW50Ii8+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0ieSIgdHlwZT0ieHM6aW50IiBtaW5PY2N1cnM9IjAiLz4NCisgICAgPC94czpzZXF1ZW5jZT4NCisgIDwveHM6Y29tcGxleFR5cGU+DQorDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iZ2V0R3JlZXRpbmdzQ29tcGxleFJlc3BvbnNlIj4NCisgICAgPHhzOnNlcXVlbmNlPg0KKyAgICAgIDx4czplbGVtZW50IG5hbWU9InJldHVybiIgdHlwZT0idG5zOmZvbyIgbWluT2NjdXJzPSIwIi8+DQorICAgIDwveHM6c2VxdWVuY2U+DQorICA8L3hzOmNvbXBsZXhUeXBlPg0KKyAgDQorICA8eHM6Y29tcGxleFR5cGUgbmFtZT0iR2V0R3JlZXRpbmdzQ2FwcyI+DQorICAgIDx4czpzZXF1ZW5jZT4NCisgICAgICA8eHM6ZWxlbWVudCBuYW1lPSJhcmcwIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4NCisNCisgIDx4czpjb21wbGV4VHlwZSBuYW1lPSJHZXRHcmVldGluZ3NDYXBzUmVzcG9uc2UiPg0KKyAgICA8eHM6c2VxdWVuY2U+DQorICAgICAgPHhzOmVsZW1lbnQgbmFtZT0icmV0dXJuIiB0eXBlPSJ4czpzdHJpbmciIG1pbk9jY3Vycz0iMCIvPg0KKyAgICA8L3hzOnNlcXVlbmNlPg0KKyAgPC94czpjb21wbGV4VHlwZT4gIA0KKzwveHM6c2NoZW1hPg0KKw0KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2UvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvZXh0ZXJuYWwtc2VydmljZS9wb20ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9leHRlcm5hbC1zZXJ2aWNlL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZXh0ZXJuYWwtc2VydmljZS9wb20ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9leHRlcm5hbC1zZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL2V4dGVybmFsL3NlcnZpY2UvQmFyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9CYXIuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvZXh0ZXJuYWwtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9zZXJ2aWNlL0Jhci5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9CYXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvZXh0ZXJuYWwtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9zZXJ2aWNlL0Zvby5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9leHRlcm5hbC1zZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL2V4dGVybmFsL3NlcnZpY2UvRm9vLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9Gb28uamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9leHRlcm5hbC1zZXJ2aWNlL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2pheHdzL2V4dGVybmFsL3NlcnZpY2UvRm9vLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvd3MvZXh0ZXJuYWwtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9zZXJ2aWNlL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyOTM2NWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZS5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5leHRlcm5hbC5zZXJ2aWNlOw0KKw0KK2ltcG9ydCBqYXZheC5qd3MuV2ViTWV0aG9kOw0KK2ltcG9ydCBqYXZheC5qd3MuV2ViUGFyYW07DQoraW1wb3J0IGphdmF4Lmp3cy5XZWJSZXN1bHQ7DQoraW1wb3J0IGphdmF4Lmp3cy5XZWJTZXJ2aWNlOw0KK2ltcG9ydCBqYXZheC54bWwud3MuUmVxdWVzdFdyYXBwZXI7DQoraW1wb3J0IGphdmF4LnhtbC53cy5SZXNwb25zZVdyYXBwZXI7DQorDQorQFdlYlNlcnZpY2UobmFtZSA9ICJIZWxsb1dvcmxkU2VydmljZSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vaGVsbG93b3JsZC9leHRlcm5hbCIpDQorcHVibGljIGNsYXNzIEhlbGxvV29ybGRTZXJ2aWNlIHsNCisNCisgICAgQFdlYk1ldGhvZA0KKyAgICBAV2ViUmVzdWx0KG5hbWUgPSAiZ2V0R3JlZXRpbmdzUmV0dXJuIiwgdGFyZ2V0TmFtZXNwYWNlID0gImh0dHA6Ly9oZWxsb3dvcmxkL2V4dGVybmFsIikNCisgICAgQFJlcXVlc3RXcmFwcGVyKGxvY2FsTmFtZSA9ICJnZXRHcmVldGluZ3MiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiLCBjbGFzc05hbWUgPSAib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLmV4dGVybmFsLnNlcnZpY2UuR2V0R3JlZXRpbmdzIikNCisgICAgQFJlc3BvbnNlV3JhcHBlcihsb2NhbE5hbWUgPSAiZ2V0R3JlZXRpbmdzUmVzcG9uc2UiLCB0YXJnZXROYW1lc3BhY2UgPSAiaHR0cDovL2hlbGxvd29ybGQvZXh0ZXJuYWwiLCBjbGFzc05hbWUgPSAib3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLmV4dGVybmFsLnNlcnZpY2UuR2V0R3JlZXRpbmdzUmVzcG9uc2UiKQ0KKyAgICBwdWJsaWMgU3RyaW5nIGdldEdyZWV0aW5ncyggQFdlYlBhcmFtKG5hbWUgPSAibmFtZSIsIHRhcmdldE5hbWVzcGFjZSA9ICJodHRwOi8vaGVsbG93b3JsZC9leHRlcm5hbCIpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSkgew0KKyAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJFbnRlcmluZyBFeHRlcm5hbCBTZXJ2aWNlIEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzOiAiICsgbmFtZSk7DQorICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSAiSGVsbG8gIiArIG5hbWU7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXZpbmcgRXh0ZXJuYWwgU2VydmljZSBIZWxsb1dvcmxkLmdldEdyZWV0aW5nczogIiArIHJlc3BvbnNlKTsNCisgICAgICAgIHJldHVybiByZXNwb25zZTsNCisgICAgfQ0KKw0KKyAgICBwdWJsaWMgRm9vIGdldEdyZWV0aW5nc0NvbXBsZXgoRm9vIGZvbyl7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyaW5nIEV4dGVybmFsIFNlcnZpY2UgSGVsbG9Xb3JsZC5nZXRHcmVldGluZ3NDb21wbGV4OiAiICsgZm9vLmdldEJhcnMoKS5nZXQoMCkuZ2V0UygpKTsNCisgICAgICAgIEZvbyByZXNwb25zZSA9IGZvbzsNCisgICAgICAgIEJhciBiMyA9IG5ldyBCYXIoKTsNCisgICAgICAgIGIzLnNldFMoInNpbW9uIik7DQorICAgICAgICBiMy5zZXRYKDcpOw0KKyAgICAgICAgYjMuc2V0WShuZXcgSW50ZWdlcig4KSk7DQorICAgICAgICBiMy5zZXRCKEJvb2xlYW4uVFJVRSk7DQorICAgICAgICByZXNwb25zZS5nZXRCYXJzKCkuYWRkKGIzKTsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiTGVhdmluZyBFeHRlcm5hbCBTZXJ2aWNlIEhlbGxvV29ybGQuZ2V0R3JlZXRpbmdzQ29tcGxleDogIiArIGZvby5nZXRCYXJzKCkuZ2V0KDApLmdldFMoKSk7DQorICAgICAgICByZXR1cm4gcmVzcG9uc2U7DQorICAgIH0gIA0KKyAgICANCisgICAgcHVibGljIFN0cmluZyBHZXRHcmVldGluZ3NDYXBzKFN0cmluZyBuYW1lKSB7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkVudGVyaW5nIEV4dGVybmFsIFNlcnZpY2UgSGVsbG9Xb3JsZC5HZXRHcmVldGluZ3NDYXBzOiAiICsgbmFtZSk7DQorICAgICAgICBTdHJpbmcgcmVzcG9uc2UgPSAiSGVsbG8gIiArIG5hbWU7DQorICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIkxlYXZpbmcgRXh0ZXJuYWwgU2VydmljZSBIZWxsb1dvcmxkLkdldEdyZWV0aW5nc0NhcHM6ICIgKyByZXNwb25zZSk7DQorICAgICAgICByZXR1cm4gcmVzcG9uc2U7DQorICAgIH0gICAgDQorDQorfQ0KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZUxhdW5jaGVyLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZUxhdW5jaGVyLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2V4dGVybmFsLXNlcnZpY2Uvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvamF4d3MvZXh0ZXJuYWwvc2VydmljZS9IZWxsb1dvcmxkU2VydmljZUxhdW5jaGVyLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvZXh0ZXJuYWwtc2VydmljZS9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9qYXh3cy9leHRlcm5hbC9zZXJ2aWNlL0hlbGxvV29ybGRTZXJ2aWNlTGF1bmNoZXIuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvaHR0cC1zc2wvUkVBRE1FIGIvdGVzdGluZy9pdGVzdC93cy9odHRwLXNzbC9SRUFETUUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2h0dHAtc3NsL1JFQURNRQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9odHRwLXNzbC9SRUFETUUKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2h0dHAtc3NsL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2h0dHAtc3NsL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvaHR0cC1zc2wvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkQ2xpZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZENsaWVudC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRDbGllbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zY2EtY29udHJpYnV0aW9uLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2NhLWNvbnRyaWJ1dGlvbi54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NjYS1jb250cmlidXRpb24ueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9yZXNvdXJjZXMvTUVUQS1JTkYvc2VydmljZXMvb3JnLmFwYWNoZS50dXNjYW55LnNjYS5kZWZpbml0aW9ucy54bWwuRGVmaW5pdGlvbnMgYi90ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLnhtbC5EZWZpbml0aW9ucwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL01FVEEtSU5GL3NlcnZpY2VzL29yZy5hcGFjaGUudHVzY2FueS5zY2EuZGVmaW5pdGlvbnMueG1sLkRlZmluaXRpb25zCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL3Jlc291cmNlcy9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmRlZmluaXRpb25zLnhtbC5EZWZpbml0aW9ucwpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL2RlZmluaXRpb25zLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL2RlZmluaXRpb25zLnhtbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL2RlZmluaXRpb25zLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvZGVmaW5pdGlvbnMueG1sCmRpZmYgLS1naXQgYS9pdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvaGVsbG93b3JsZC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL2hlbGxvd29ybGQuY29tcG9zaXRlCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC9oZWxsb3dvcmxkLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL2hlbGxvd29ybGQud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvaGVsbG93b3JsZC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC93cy9odHRwLXNzbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQvdHVzY2FueS5qa3MgYi90ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC90dXNjYW55LmprcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkL3R1c2NhbnkuamtzCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC90dXNjYW55LmprcwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hUVFBTVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvaHR0cC1zc2wvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSFRUUFNUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1OGY3NjEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3dzL2h0dHAtc3NsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hUVFBTVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDU5IEBACisvKgorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICogCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICogCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKyAqLworCitwYWNrYWdlIG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5heGlzMjsKKworaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKKworaW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5heGlzMi5oZWxsb3dvcmxkLkhlbGxvV29ybGQ7CitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CitpbXBvcnQgb3JnLmp1bml0Lklnbm9yZTsKKworQElnbm9yZSgiVFVTQ0FOWS0zNjMyIikKK3B1YmxpYyBjbGFzcyBIVFRQU1Rlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgeworCisgICAgcHJpdmF0ZSBOb2RlIG5vZGU7CisgICAgcHJpdmF0ZSBIZWxsb1dvcmxkIGhlbGxvV29ybGQ7CisgICAgcHJpdmF0ZSBIZWxsb1dvcmxkIGhlbGxvV29ybGQyOworICAgIHByaXZhdGUgSGVsbG9Xb3JsZCBoZWxsb1dvcmxkMzsKKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKG5ldyBDb250cmlidXRpb24oInRlc3QiLCAidGFyZ2V0L2NsYXNzZXMiKSk7CisgICAgICAgIG5vZGUuc3RhcnQoKTsKKyAgICAgICAgaGVsbG9Xb3JsZCA9IG5vZGUuZ2V0U2VydmljZShIZWxsb1dvcmxkLmNsYXNzLCAiSGVsbG9Xb3JsZENsaWVudCIpOworICAgICAgICBoZWxsb1dvcmxkMiA9IG5vZGUuZ2V0U2VydmljZShIZWxsb1dvcmxkLmNsYXNzLCAiSGVsbG9Xb3JsZENsaWVudDIiKTsKKyAgICAgICAgaGVsbG9Xb3JsZDMgPSBub2RlLmdldFNlcnZpY2UoSGVsbG9Xb3JsZC5jbGFzcywgIkhlbGxvV29ybGRDbGllbnQzIik7CisgICAgfQorICAgIAorICAgIHB1YmxpYyB2b2lkIHRlc3RDYWxjdWxhdG9yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBoZWxsb1dvcmxkLmdldEdyZWV0aW5ncygicGV0cmEiKSk7CisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gcGV0cmEiLCBoZWxsb1dvcmxkMi5nZXRHcmVldGluZ3MoInBldHJhIikpOworICAgICAgICAvLyBUT0RPIC0gY2hlY2sgcG9saWN5IG1hdGNoaW5nIGZvciB1bmNvbmZpZ3VyZSByZWZlcmVuY2UgCisgICAgICAgIC8vYXNzZXJ0RXF1YWxzKCJIZWxsbyBwZXRyYSIsIGhlbGxvV29ybGQzLmdldEdyZWV0aW5ncygicGV0cmEiKSk7CisgICAgfSAgICAKKyAgICAKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBub2RlLnN0b3AoKTsKKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvQ2FsbGJhY2tGb3J3YXJkU3BlY1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL0NhbGxiYWNrRm9yd2FyZFNwZWNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9DYWxsYmFja0ZvcndhcmRTcGVjVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9DYWxsYmFja0ZvcndhcmRTcGVjVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvQ2FsbGJhY2tGdWxsU3BlY1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL0NhbGxiYWNrRnVsbFNwZWNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9DYWxsYmFja0Z1bGxTcGVjVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9DYWxsYmFja0Z1bGxTcGVjVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvQ2FsbGJhY2tQcm9tb3Rpb25UZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9DYWxsYmFja1Byb21vdGlvblRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL0NhbGxiYWNrUHJvbW90aW9uVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9DYWxsYmFja1Byb21vdGlvblRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL0NhbGxiYWNrVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9DYWxsYmFja1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvQ2FsbGJhY2tUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9Eb2NMaXRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9Eb2NMaXRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9Eb2NMaXRUZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL0RvY0xpdFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL0RvY0xpdFdyYXBwZWRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9Eb2NMaXRXcmFwcGVkVGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvRG9jTGl0V3JhcHBlZFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvRG9jTGl0V3JhcHBlZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL0phdmFGaXJzdFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL0phdmFGaXJzdFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL0phdmFGaXJzdFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvSmF2YUZpcnN0VGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvUnBjTGl0VGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvUnBjTGl0VGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvUnBjTGl0VGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1heGlzMi9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9heGlzMi9ScGNMaXRUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL1dTRExGaXJzdFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWF4aXMyL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2F4aXMyL1dTRExGaXJzdFRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkNDgyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYXhpczIvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYXhpczIvV1NETEZpcnN0VGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDEzMCBAQAorLyoNCisgKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lDQorICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlDQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24NCisgKiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4gIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlDQorICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQ0KKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UNCisgKiB3aXRoIHRoZSBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0DQorICogDQorICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjANCisgKiANCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsDQorICogc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4NCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkNCisgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUNCisgKiBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zDQorICogdW5kZXIgdGhlIExpY2Vuc2UuICAgIA0KKyAqLw0KKw0KK3BhY2thZ2Ugb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmxhdW5jaGVyLmF4aXMyOw0KKw0KK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7DQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7DQoraW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmZhaWw7DQoraW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsNCisNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5iaW5kaW5nLndzLmpheHdzLmV4dGVybmFsLmNsaWVudC5IZWxsb1dvcmxkQ2xpZW50TGF1bmNoZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5leHRlcm5hbC5zZXJ2aWNlLkhlbGxvV29ybGRTZXJ2aWNlTGF1bmNoZXI7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2EuYmluZGluZy53cy5qYXh3cy5zY2EuQmFyOw0KK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuamF4d3Muc2NhLkZvbzsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsNCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLk5vZGU7DQoraW1wb3J0IG9yZy5hcGFjaGUudHVzY2FueS5zY2Eubm9kZS5Ob2RlRmFjdG9yeTsNCitpbXBvcnQgb3JnLmp1bml0LkFmdGVyOw0KK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOw0KK2ltcG9ydCBvcmcuanVuaXQuSWdub3JlOw0KK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsNCisNCitwdWJsaWMgY2xhc3MgV1NETEZpcnN0VGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7DQorDQorICAgIHByaXZhdGUgTm9kZSBub2RlOw0KKyAgICBwcml2YXRlIEhlbGxvV29ybGRTZXJ2aWNlTGF1bmNoZXIgZXh0ZXJuYWxTZXJ2aWNlOw0KKyAgICBwcml2YXRlIEhlbGxvV29ybGRDbGllbnRMYXVuY2hlciBleHRlcm5hbENsaWVudDsNCisNCisgICAgQEJlZm9yZQ0KKyAgICBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgLy8gU3RhcnQgdGhlIGV4dGVybmFsIHNlcnZpY2UNCisgICAgICAgIGV4dGVybmFsU2VydmljZSA9IG5ldyBIZWxsb1dvcmxkU2VydmljZUxhdW5jaGVyKCk7DQorICAgICAgICBleHRlcm5hbFNlcnZpY2UuY3JlYXRlU2VydmljZSgpOw0KKyAgICAgICANCisgICAgICAgIC8vIFN0YXJ0IHRoZSBTQ0EgY29udHJpYnV0aW9uDQorICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKG5ldyBDb250cmlidXRpb24oIndzZGwtZmlyc3QiLCAiLi4vY29udHJpYnV0aW9uLXdzZGwtZmlyc3QvdGFyZ2V0L2l0ZXN0LXdzLWNvbnRyaWJ1dGlvbi13c2RsLWZpcnN0LmphciIpKTsNCisgICAgICAgIG5vZGUuc3RhcnQoKTsNCisgICAgICAgIA0KKyAgICAgICAgLy8gc3RhcnQgdGhlIGV4dGVybmFsIGNsaWVudA0KKyAgICAgICAgdHJ5IHsNCisgICAgICAgICAgICBleHRlcm5hbENsaWVudCA9IG5ldyBIZWxsb1dvcmxkQ2xpZW50TGF1bmNoZXIoKTsNCisgICAgICAgICAgICBleHRlcm5hbENsaWVudC5jcmVhdGVDbGllbnQoKTsNCisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBleCkgew0KKyAgICAgICAgICAgIGV4LnByaW50U3RhY2tUcmFjZSgpOw0KKyAgICAgICAgICAgIHRocm93IGV4Ow0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorLyoNCisgICAgQFRlc3QNCisgICAgcHVibGljIHZvaWQgdGVzdFdhaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiUHJlc3MgYSBrZXkiKTsNCisgICAgICAgIFN5c3RlbS5pbi5yZWFkKCk7DQorICAgIH0NCisqLw0KKyAgDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRHcmVldGluZ3MoKSB0aHJvd3MgRXhjZXB0aW9uIHsNCisgICAgICAgIGFzc2VydEVxdWFscygiSGVsbG8gRnJlZCIsIGV4dGVybmFsQ2xpZW50LmdldEdyZWV0aW5ncygiRnJlZCIpKTsNCisgICAgfQ0KKyAgICANCisgICAgQFRlc3QNCisgICAgQElnbm9yZQ0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0R3JlZXRpbmdzRXhjZXB0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7DQorICAgICAgICB0cnkgew0KKyAgICAgICAgICAgIGV4dGVybmFsQ2xpZW50LmdldEdyZWV0aW5nc0V4Y2VwdGlvbigiRnJlZCIpOw0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGV4KSB7DQorICAgICAgICAgICAgcmV0dXJuOw0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBmYWlsKCJleHBlY3RpbmcgZXhjZXB0aW9uIik7DQorICAgIH0NCisgICAgDQorICAgIEBUZXN0DQorICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRHcmVldGluZ3NDb21wbGV4KCkgdGhyb3dzIEV4Y2VwdGlvbiB7ICAgICAgICANCisgICAgICAgIEZvbyBmID0gbmV3IEZvbygpOw0KKyAgICAgICAgQmFyIGIxID0gbmV3IEJhcigpOw0KKyAgICAgICAgYjEuc2V0UygicGV0cmEiKTsNCisgICAgICAgIGIxLnNldFgoMSk7DQorICAgICAgICBiMS5zZXRZKG5ldyBJbnRlZ2VyKDIpKTsNCisgICAgICAgIGIxLnNldEIoQm9vbGVhbi5UUlVFKTsNCisgICAgICAgIEJhciBiMiA9IG5ldyBCYXIoKTsNCisgICAgICAgIGIyLnNldFMoImJlYXRlIik7DQorICAgICAgICBiMi5zZXRYKDMpOw0KKyAgICAgICAgYjIuc2V0WShuZXcgSW50ZWdlcig0KSk7DQorICAgICAgICBiMi5zZXRCKEJvb2xlYW4uRkFMU0UpOw0KKyAgICAgICAgZi5nZXRCYXJzKCkuYWRkKGIxKTsNCisgICAgICAgIGYuZ2V0QmFycygpLmFkZChiMik7DQorICAgICAgIA0KKyAgICAgICAgRm9vIGYyID0gZXh0ZXJuYWxDbGllbnQuZ2V0R3JlZXRpbmdzQ29tcGxleChmKTsNCisNCisgICAgICAgIGFzc2VydEVxdWFscygicGV0cmEiLCBmMi5nZXRCYXJzKCkuZ2V0KDApLmdldFMoKSk7DQorICAgICAgICBhc3NlcnRFcXVhbHMoMSwgZjIuZ2V0QmFycygpLmdldCgwKS5nZXRYKCkpOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIGYyLmdldEJhcnMoKS5nZXQoMCkuZ2V0WSgpLmludFZhbHVlKCkpOw0KKyAgICAgICAgYXNzZXJ0VHJ1ZShmMi5nZXRCYXJzKCkuZ2V0KDApLmlzQigpKTsNCisgICAgICAgIGFzc2VydEVxdWFscygic2ltb24iLCBmMi5nZXRCYXJzKCkuZ2V0KDIpLmdldFMoKSk7DQorICAgICAgICBhc3NlcnRFcXVhbHMoNywgZjIuZ2V0QmFycygpLmdldCgyKS5nZXRYKCkpOw0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKDgsIGYyLmdldEJhcnMoKS5nZXQoMikuZ2V0WSgpLmludFZhbHVlKCkpOw0KKyAgICAgICAgYXNzZXJ0VHJ1ZShmMi5nZXRCYXJzKCkuZ2V0KDIpLmlzQigpLmJvb2xlYW5WYWx1ZSgpKTsNCisgICAgfSAgDQorICAgIA0KKyAgICBAVGVzdA0KKyAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0R3JlZXRpbmdzQ2FwcygpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJIZWxsbyBGcmVkIiwgZXh0ZXJuYWxDbGllbnQuZ2V0R3JlZXRpbmdzQ2FwcygiRnJlZCIpKTsNCisgICAgfSAgICANCisgICAgDQorICAgIEBBZnRlcg0KKyAgICBwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gew0KKyAgICAgICAgbm9kZS5zdG9wKCk7DQorICAgICAgICBleHRlcm5hbENsaWVudC5kZXN0cm95Q2xpZW50KCk7DQorICAgICAgICBleHRlcm5hbFNlcnZpY2UuZGVzdG9yeVNlcnZpY2UoKTsNCisgICAgfQ0KKw0KK30NCmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2UvcG9tLnhtbCBiL3Rlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9wb20ueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxNTY2OWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2UvcG9tLnhtbApAQCAtMCwwICsxLDU5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCEtLQorICAgICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQorICAgICogb3IgbW9yZSBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlCisgICAgKiBkaXN0cmlidXRlZCB3aXRoIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQorICAgICogdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZQorICAgICogIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZQorICAgICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICogCisgICAgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICAgICogCisgICAgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsCisgICAgKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbgorICAgICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCisgICAgKiBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUKKyAgICAqIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMKKyAgICAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICAKKy0tPgorPHByb2plY3Q+CisgICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgorICAgIDxwYXJlbnQ+CisgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPnR1c2NhbnktaXRlc3Q8L2FydGlmYWN0SWQ+CisgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPHJlbGF0aXZlUGF0aD4uLi9wb20ueG1sPC9yZWxhdGl2ZVBhdGg+CisgICAgPC9wYXJlbnQ+CisKKyAgICA8YXJ0aWZhY3RJZD5pdGVzdC13cy1sYXVuY2hlci1iYXNlPC9hcnRpZmFjdElkPgorICAgIDxuYW1lPkFwYWNoZSBUdXNjYW55IFNDQSBpVGVzdCBXUyBMYXVuY2hlciBCYXNlPC9uYW1lPgorCisgICAgPGRlcGVuZGVuY2llcz4KKyAgICAgICA8ZGVwZW5kZW5jeT4KKyAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUudHVzY2FueS5zY2E8L2dyb3VwSWQ+CisgICAgICAgICAgICA8YXJ0aWZhY3RJZD50dXNjYW55LWJhc2UtcnVudGltZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorCisgICAgICAgIDwhLS0gVGVzdCByZXNvdXJjZXMgLS0+CisgICAgICAgIDxkZXBlbmRlbmN5PgorICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS50dXNjYW55LnNjYTwvZ3JvdXBJZD4KKyAgICAgICAgICAgIDxhcnRpZmFjdElkPml0ZXN0LXdzLWV4dGVybmFsLWNsaWVudDwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PgorICAgICAgICAKKyAgICAgICAgPGRlcGVuZGVuY3k+CisgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnR1c2Nhbnkuc2NhPC9ncm91cElkPgorICAgICAgICAgICAgPGFydGlmYWN0SWQ+aXRlc3Qtd3MtZXh0ZXJuYWwtc2VydmljZTwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICAgIDx2ZXJzaW9uPjIuMC1CZXRhMTwvdmVyc2lvbj4KKyAgICAgICAgPC9kZXBlbmRlbmN5PiAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgPC9kZXBlbmRlbmNpZXM+CisKKyAgICA8YnVpbGQ+CisgICAgICAgIDxmaW5hbE5hbWU+JHthcnRpZmFjdElkfTwvZmluYWxOYW1lPgorICAgICAgICAKKyAgICA8L2J1aWxkPgorICAgIAorPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9iYXNlL0NhbGxiYWNrRm9yd2FyZFNwZWNUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvQ2FsbGJhY2tGb3J3YXJkU3BlY1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2xhdW5jaGVyLWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYmFzZS9DYWxsYmFja0ZvcndhcmRTcGVjVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvQ2FsbGJhY2tGb3J3YXJkU3BlY1Rlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYmFzZS9DYWxsYmFja0Z1bGxTcGVjVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9iYXNlL0NhbGxiYWNrRnVsbFNwZWNUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvQ2FsbGJhY2tGdWxsU3BlY1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9iYXNlL0NhbGxiYWNrRnVsbFNwZWNUZXN0Q2FzZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvQ2FsbGJhY2tQcm9tb3Rpb25UZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvQ2FsbGJhY2tQcm9tb3Rpb25UZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvQ2FsbGJhY2tQcm9tb3Rpb25UZXN0Q2FzZS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYmFzZS9DYWxsYmFja1Byb21vdGlvblRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYmFzZS9DYWxsYmFja1Rlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYmFzZS9DYWxsYmFja1Rlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2xhdW5jaGVyLWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYmFzZS9DYWxsYmFja1Rlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9iYXNlL0NhbGxiYWNrVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9iYXNlL0RvY0xpdFdyYXBwZWRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvRG9jTGl0V3JhcHBlZFRlc3RDYXNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL2xhdW5jaGVyLWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYmFzZS9Eb2NMaXRXcmFwcGVkVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvRG9jTGl0V3JhcHBlZFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYmFzZS9KYXZhRmlyc3RUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvSmF2YUZpcnN0VGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9iYXNlL0phdmFGaXJzdFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9iYXNlL0phdmFGaXJzdFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL2xhdW5jaGVyLWJhc2Uvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvbGF1bmNoZXIvYmFzZS9XU0RMRmlyc3RUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy9sYXVuY2hlci1iYXNlL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2xhdW5jaGVyL2Jhc2UvV1NETEZpcnN0VGVzdENhc2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9iYXNlL1dTRExGaXJzdFRlc3RDYXNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvbGF1bmNoZXItYmFzZS9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9sYXVuY2hlci9iYXNlL1dTRExGaXJzdFRlc3RDYXNlLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL3BvbS54bWwgYi90ZXN0aW5nL2l0ZXN0L3dzL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3BvbS54bWwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3MvcG9tLnhtbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9wb20ueG1sIGIvdGVzdGluZy9pdGVzdC93cy93c2RsL3BvbS54bWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3dzZGwvcG9tLnhtbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3BvbS54bWwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvQWNjb3VudC5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0FjY291bnQuamF2YQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9BY2NvdW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9BY2NvdW50LmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvQWNjb3VudFNlcnZpY2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9BY2NvdW50U2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0FjY291bnRTZXJ2aWNlLmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9BY2NvdW50U2VydmljZS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0N1c3RvbWVyUHJvZmlsZURhdGEuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9DdXN0b21lclByb2ZpbGVEYXRhLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvQ3VzdG9tZXJQcm9maWxlRGF0YS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvQ3VzdG9tZXJQcm9maWxlRGF0YS5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGQuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZC5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZC5qYXZhCmRpZmYgLS1naXQgYS9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRPTS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRPTS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRPTS5qYXZhCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZE9NLmphdmEKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZE9NQ29tcG9uZW50LmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZE9NQ29tcG9uZW50LmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZE9NQ29tcG9uZW50LmphdmEKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT01Db21wb25lbnQuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkT01TZXJ2aWNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZE9NU2VydmljZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRPTVNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRPTVNlcnZpY2UuamF2YQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkU2VydmljZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3dzZGwvc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZFNlcnZpY2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRTZXJ2aWNlLmphdmEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9wYWNrYWdlLWluZm8uamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9wYWNrYWdlLWluZm8uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDVhNTE1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3BhY2thZ2UtaW5mby5qYXZhCkBAIC0wLDAgKzEsMjEgQEAKKy8qDQorICogTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZQ0KKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQ0KKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyB3b3JrIGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorICogcmVnYXJkaW5nIGNvcHlyaWdodCBvd25lcnNoaXAuICBUaGUgQVNGIGxpY2Vuc2VzIHRoaXMgZmlsZQ0KKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUNCisgKiAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlDQorICogd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdA0KKyAqIA0KKyAqICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wDQorICogDQorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLA0KKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuDQorICogIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZDQorICogS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlDQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucw0KKyAqIHVuZGVyIHRoZSBMaWNlbnNlLiAgICANCisgKi8NCisNCitAamF2YXgueG1sLmJpbmQuYW5ub3RhdGlvbi5YbWxTY2hlbWEobmFtZXNwYWNlID0gImh0dHA6Ly9hY2NvdW50cyIpDQorcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuYXhpczI7DQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2N1c3RvbWVyZGF0YS54c2QgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9jdXN0b21lcmRhdGEueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvY3VzdG9tZXJkYXRhLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvY3VzdG9tZXJkYXRhLnhzZApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2N1c3RvbWVyZGVmcy54c2QgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9jdXN0b21lcmRlZnMueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvY3VzdG9tZXJkZWZzLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvY3VzdG9tZXJkZWZzLnhzZApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2N1c3RvbWVyaW5mby54c2QgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9jdXN0b21lcmluZm8ueHNkCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvY3VzdG9tZXJpbmZvLnhzZApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvY3VzdG9tZXJpbmZvLnhzZApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQtb20tbWVyZ2VkLmNvbXBvc2l0ZSBiL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQtb20tbWVyZ2VkLmNvbXBvc2l0ZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQtb20tbWVyZ2VkLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC1vbS1tZXJnZWQuY29tcG9zaXRlCmRpZmYgLS1naXQgYS9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC1vbS1tZXJnZWQud3NkbCBiL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL2hlbGxvd29ybGQtb20tbWVyZ2VkLndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLW9tLW1lcmdlZC53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLW9tLW1lcmdlZC53c2RsCmRpZmYgLS1naXQgYS9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC53c2RsIGIvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvaGVsbG93b3JsZC53c2RsCnJlbmFtZSB0byB0ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9oZWxsb3dvcmxkLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstaW1wb3J0LW5lc3RlZC53c2RsIGIvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLWltcG9ydC1uZXN0ZWQud3NkbApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3F1ZXN0aW9ubWFyay1pbXBvcnQtbmVzdGVkLndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3F1ZXN0aW9ubWFyay1pbXBvcnQtbmVzdGVkLndzZGwKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstaW1wb3J0LndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstaW1wb3J0LndzZGwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstaW1wb3J0LndzZGwKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3F1ZXN0aW9ubWFyay1pbXBvcnQud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3F1ZXN0aW9ubWFyay1pbmNsdWRlLndzZGwgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstaW5jbHVkZS53c2RsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLWluY2x1ZGUud3NkbApyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLWluY2x1ZGUud3NkbApkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3F1ZXN0aW9ubWFyay13c2RsLWltcG9ydC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstd3NkbC1pbXBvcnQuY29tcG9zaXRlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLXdzZGwtaW1wb3J0LmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLXdzZGwtaW1wb3J0LmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3F1ZXN0aW9ubWFyay13c2RsLWluY2x1ZGUuY29tcG9zaXRlIGIvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLXdzZGwtaW5jbHVkZS5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstd3NkbC1pbmNsdWRlLmNvbXBvc2l0ZQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy9tYWluL3Jlc291cmNlcy9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLXdzZGwtaW5jbHVkZS5jb21wb3NpdGUKZGlmZiAtLWdpdCBhL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstd3NkbC5jb21wb3NpdGUgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstd3NkbC5jb21wb3NpdGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGl0ZXN0L3dzL3dzZGwvc3JjL21haW4vcmVzb3VyY2VzL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9xdWVzdGlvbm1hcmstd3NkbC5jb21wb3NpdGUKcmVuYW1lIHRvIHRlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvbWFpbi9yZXNvdXJjZXMvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3F1ZXN0aW9ubWFyay13c2RsLmNvbXBvc2l0ZQpkaWZmIC0tZ2l0IGEvaXRlc3Qvd3Mvd3NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9IZWxsb1dvcmxkV1NETE1lcmdlZFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvSGVsbG9Xb3JsZFdTRExNZXJnZWRUZXN0Q2FzZS5qYXZhCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpdGVzdC93cy93c2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRXU0RMTWVyZ2VkVGVzdENhc2UuamF2YQpyZW5hbWUgdG8gdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL0hlbGxvV29ybGRXU0RMTWVyZ2VkVGVzdENhc2UuamF2YQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL1F1ZXN0aW9uTWFya1dTRExJbXBvcnRUZXN0Q2FzZS5qYXZhIGIvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL1F1ZXN0aW9uTWFya1dTRExJbXBvcnRUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OGUxYmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvUXVlc3Rpb25NYXJrV1NETEltcG9ydFRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuYXhpczI7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247CitpbXBvcnQgamF2YXgud3NkbC5Qb3J0OworaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKK2ltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKK2ltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7CitpbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CisKKy8qKgorICogVGVzdCA/d3NkbCB3b3JrcyBhbmQgdGhhdCB0aGUgcmV0dXJuZWQgV1NETCBoYXMgdGhlIGNvcnJlY3QgZW5kcG9pbnQKKyAqCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFF1ZXN0aW9uTWFya1dTRExJbXBvcnRUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKKworICAgIHByaXZhdGUgTm9kZSBub2RlOworCisgICAgLyoqCisgICAgICogVGVzdHMgP3dzZGwgd29ya3MgYW5kIHJldHVybnMgdGhlIGNvcnJlY3QgcG9ydCBlbmRwb2ludCBmcm9tIHRoZSBXU0RMCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdFdTRExJbXBvcnRQb3J0RW5kcG9pbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgSW5wdXRTdHJlYW0gaW5wID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDg2L0FjY291bnRTZXJ2aWNlP3dzZGwiKS5vcGVuU3RyZWFtKCk7CisgICAgICAgIEJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnApKTsKKyAgICAgICAgU3RyaW5nIGxpbmU7CisgICAgICAgIHdoaWxlKChsaW5lID0gYnIucmVhZExpbmUoKSkgIT0gbnVsbCkgeworICAgICAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGxpbmUpOworICAgICAgICB9CisgICAgICAgIGJyLmNsb3NlKCk7CisKKyAgICAgICAgV1NETFJlYWRlciB3c2RsUmVhZGVyID0gV1NETEZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdXU0RMUmVhZGVyKCk7CisgICAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZSgiamF2YXgud3NkbC52ZXJib3NlIiwgZmFsc2UpOworICAgICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoImphdmF4LndzZGwuaW1wb3J0RG9jdW1lbnRzIiwgdHJ1ZSk7CisKKyAgICAgICAgRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gd3NkbFJlYWRlci5yZWFkV1NETCgiaHR0cDovL2xvY2FsaG9zdDo4MDg2L0FjY291bnRTZXJ2aWNlP3dzZGwiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKKyAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL2FjY291bnQyL0FjY291bnRTZXJ2aWNlL0FjY291bnQiLCAiQWNjb3VudCIpKTsKKyAgICAgICAgUG9ydCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KCJBY2NvdW50U09BUDExUG9ydCIpOworCisgICAgICAgIFN0cmluZyBlbmRwb2ludCA9IGdldEVuZHBvaW50KHBvcnQpOworICAgICAgIC8vIFN0cmluZyBpcCA9IEh0dHBVdGlscy5nZXRJcEFkZHJlc3MoKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJodHRwOi8vbG9jYWxob3N0OjgwODYvQWNjb3VudFNlcnZpY2UiLCBlbmRwb2ludCk7CisgICAgfQorCisgICAgcHJpdmF0ZSBTdHJpbmcgZ2V0RW5kcG9pbnQoUG9ydCBwb3J0KSB7CisgICAgICAgIExpc3Qgd3NkbFBvcnRFeHRlbnNpb25zID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKKyAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgZXh0ZW5zaW9uIDogd3NkbFBvcnRFeHRlbnNpb25zKSB7CisgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKChTT0FQQWRkcmVzcykgZXh0ZW5zaW9uKS5nZXRMb2NhdGlvblVSSSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJubyBTT0FQQWRkcmVzcyIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBjb250cmlidXRpb24gPSAidGFyZ2V0L2NsYXNzZXMiOworICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJvcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLXdzZGwtaW1wb3J0LmNvbXBvc2l0ZSIsIG5ldyBDb250cmlidXRpb24oInRlc3QiLCBjb250cmlidXRpb24pKTsKKyAgICAgICAgbm9kZS5zdGFydCgpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIG5vZGUuc3RvcCgpOworICAgIH0KKworfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9pdGVzdC93cy93c2RsL3NyYy90ZXN0L2phdmEvb3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL1F1ZXN0aW9uTWFya1dTRExJbmNsdWRlVGVzdENhc2UuamF2YSBiL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9RdWVzdGlvbk1hcmtXU0RMSW5jbHVkZVRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTczZDk1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9RdWVzdGlvbk1hcmtXU0RMSW5jbHVkZVRlc3RDYXNlLmphdmEKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuYXhpczI7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247CitpbXBvcnQgamF2YXgud3NkbC5Qb3J0OworaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKK2ltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKK2ltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7CitpbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CisKKy8qKgorICogVGVzdCA/d3NkbCB3b3JrcyBhbmQgdGhhdCB0aGUgcmV0dXJuZWQgV1NETCBoYXMgdGhlIGNvcnJlY3QgZW5kcG9pbnQKKyAqCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFF1ZXN0aW9uTWFya1dTRExJbmNsdWRlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7CisKKyAgICBwcml2YXRlIE5vZGUgbm9kZTsKKworICAgIC8qKgorICAgICAqIFRlc3RzID93c2RsIHdvcmtzIGFuZCByZXR1cm5zIHRoZSBjb3JyZWN0IHBvcnQgZW5kcG9pbnQgZnJvbSB0aGUgV1NETAorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRlc3RXU0RMSW5jbHVkZVBvcnRFbmRwb2ludCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBJbnB1dFN0cmVhbSBpbnAgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvQWNjb3VudFNlcnZpY2U/d3NkbCIpLm9wZW5TdHJlYW0oKTsKKyAgICAgICAgQnVmZmVyZWRSZWFkZXIgYnIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IElucHV0U3RyZWFtUmVhZGVyKGlucCkpOworICAgICAgICBTdHJpbmcgbGluZTsKKyAgICAgICAgd2hpbGUoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisgICAgICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obGluZSk7CisgICAgICAgIH0KKyAgICAgICAgYnIuY2xvc2UoKTsKKworICAgICAgICBXU0RMUmVhZGVyIHdzZGxSZWFkZXIgPSBXU0RMRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1dTRExSZWFkZXIoKTsKKyAgICAgICAgd3NkbFJlYWRlci5zZXRGZWF0dXJlKCJqYXZheC53c2RsLnZlcmJvc2UiLCBmYWxzZSk7CisgICAgICAgIHdzZGxSZWFkZXIuc2V0RmVhdHVyZSgiamF2YXgud3NkbC5pbXBvcnREb2N1bWVudHMiLCB0cnVlKTsKKworICAgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsUmVhZGVyLnJlYWRXU0RMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvQWNjb3VudFNlcnZpY2U/d3NkbCIpOworICAgICAgICBhc3NlcnROb3ROdWxsKGRlZmluaXRpb24pOworICAgICAgICBTZXJ2aWNlIHNlcnZpY2UgPSBkZWZpbml0aW9uLmdldFNlcnZpY2UobmV3IFFOYW1lKCJodHRwOi8vYWNjb3VudHMvQWNjb3VudFNlcnZpY2UvQWNjb3VudCIsICJBY2NvdW50IikpOworICAgICAgICBQb3J0IHBvcnQgPSBzZXJ2aWNlLmdldFBvcnQoIkFjY291bnRTT0FQMTFQb3J0Iik7CisKKyAgICAgICAgU3RyaW5nIGVuZHBvaW50ID0gZ2V0RW5kcG9pbnQocG9ydCk7CisgICAgICAgIGFzc2VydEVxdWFscygiaHR0cDovL2xvY2FsaG9zdDo4MDg1L0FjY291bnRTZXJ2aWNlIiwgZW5kcG9pbnQpOworICAgIH0KKworICAgIHByaXZhdGUgU3RyaW5nIGdldEVuZHBvaW50KFBvcnQgcG9ydCkgeworICAgICAgICBMaXN0IHdzZGxQb3J0RXh0ZW5zaW9ucyA9IHBvcnQuZ2V0RXh0ZW5zaWJpbGl0eUVsZW1lbnRzKCk7CisgICAgICAgIGZvciAoZmluYWwgT2JqZWN0IGV4dGVuc2lvbiA6IHdzZGxQb3J0RXh0ZW5zaW9ucykgeworICAgICAgICAgICAgaWYgKGV4dGVuc2lvbiBpbnN0YW5jZW9mIFNPQVBBZGRyZXNzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICgoU09BUEFkZHJlc3MpIGV4dGVuc2lvbikuZ2V0TG9jYXRpb25VUkkoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigibm8gU09BUEFkZHJlc3MiKTsKKyAgICB9CisKKyAgICBAT3ZlcnJpZGUKKyAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBTdHJpbmcgY29udHJpYnV0aW9uID0gInRhcmdldC9jbGFzc2VzIjsKKyAgICAgICAgbm9kZSA9IE5vZGVGYWN0b3J5Lm5ld0luc3RhbmNlKCkuY3JlYXRlTm9kZSgib3JnL2FwYWNoZS90dXNjYW55L3NjYS9iaW5kaW5nL3dzL2F4aXMyL3F1ZXN0aW9ubWFyay13c2RsLWluY2x1ZGUuY29tcG9zaXRlIiwgbmV3IENvbnRyaWJ1dGlvbigidGVzdCIsIGNvbnRyaWJ1dGlvbikpOworICAgICAgICBub2RlLnN0YXJ0KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgfQorCit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvUXVlc3Rpb25NYXJrV1NETFRlc3RDYXNlLmphdmEgYi90ZXN0aW5nL2l0ZXN0L3dzL3dzZGwvc3JjL3Rlc3QvamF2YS9vcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvUXVlc3Rpb25NYXJrV1NETFRlc3RDYXNlLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM1YzQ5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvaXRlc3Qvd3Mvd3NkbC9zcmMvdGVzdC9qYXZhL29yZy9hcGFjaGUvdHVzY2FueS9zY2EvYmluZGluZy93cy9heGlzMi9RdWVzdGlvbk1hcmtXU0RMVGVzdENhc2UuamF2YQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIExpY2Vuc2VkIHRvIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoQVNGKSB1bmRlciBvbmUKKyAqIG9yIG1vcmUgY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHdvcmsgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24KKyAqIHJlZ2FyZGluZyBjb3B5cmlnaHQgb3duZXJzaGlwLiAgVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUKKyAqIHRvIHlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUKKyAqICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2UKKyAqIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywKKyAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuCisgKiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAqIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZQorICogc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucworICogdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLmJpbmRpbmcud3MuYXhpczI7CisKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBqYXZheC53c2RsLkRlZmluaXRpb247CitpbXBvcnQgamF2YXgud3NkbC5Qb3J0OworaW1wb3J0IGphdmF4LndzZGwuU2VydmljZTsKK2ltcG9ydCBqYXZheC53c2RsLmV4dGVuc2lvbnMuc29hcC5TT0FQQWRkcmVzczsKK2ltcG9ydCBqYXZheC53c2RsLmZhY3RvcnkuV1NETEZhY3Rvcnk7CitpbXBvcnQgamF2YXgud3NkbC54bWwuV1NETFJlYWRlcjsKK2ltcG9ydCBqYXZheC54bWwubmFtZXNwYWNlLlFOYW1lOworCitpbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOworCitpbXBvcnQgb3JnLmFwYWNoZS50dXNjYW55LnNjYS5ub2RlLkNvbnRyaWJ1dGlvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnR1c2Nhbnkuc2NhLm5vZGUuTm9kZUZhY3Rvcnk7CisKKy8qKgorICogVGVzdCA/d3NkbCB3b3JrcyBhbmQgdGhhdCB0aGUgcmV0dXJuZWQgV1NETCBoYXMgdGhlIGNvcnJlY3QgZW5kcG9pbnQKKyAqCisgKiBAdmVyc2lvbiAkUmV2JCAkRGF0ZSQKKyAqLworcHVibGljIGNsYXNzIFF1ZXN0aW9uTWFya1dTRExUZXN0Q2FzZSBleHRlbmRzIFRlc3RDYXNlIHsKKworICAgIHByaXZhdGUgTm9kZSBub2RlOworCisgICAgLyoqCisgICAgICogVGVzdHMgP3dzZGwgd29ya3MgYW5kIHJldHVybnMgdGhlIGNvcnJlY3QgcG9ydCBlbmRwb2ludCBmcm9tIHRoZSBXU0RMCisgICAgICovCisgICAgcHVibGljIHZvaWQgdGVzdFdTRExQb3J0RW5kcG9pbnQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgSW5wdXRTdHJlYW0gaW5wID0gbmV3IFVSTCgiaHR0cDovL2xvY2FsaG9zdDo4MDg1L3NlcnZpY2VzL0hlbGxvV29ybGRXZWJTZXJ2aWNlMj93c2RsIikub3BlblN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wKSk7CisgICAgICAgIFN0cmluZyBsaW5lOworICAgICAgICB3aGlsZSgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgfQorICAgICAgICBici5jbG9zZSgpOworCisgICAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IFdTRExGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3V1NETFJlYWRlcigpOworICAgICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoImphdmF4LndzZGwudmVyYm9zZSIsZmFsc2UpOworICAgICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoImphdmF4LndzZGwuaW1wb3J0RG9jdW1lbnRzIix0cnVlKTsKKworICAgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsUmVhZGVyLnJlYWRXU0RMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvc2VydmljZXMvSGVsbG9Xb3JsZFdlYlNlcnZpY2UyP3dzZGwiKTsKKyAgICAgICAgYXNzZXJ0Tm90TnVsbChkZWZpbml0aW9uKTsKKyAgICAgICAgU2VydmljZSBzZXJ2aWNlID0gZGVmaW5pdGlvbi5nZXRTZXJ2aWNlKG5ldyBRTmFtZSgiaHR0cDovL2hlbGxvd29ybGQvSGVsbG9Xb3JsZFNlcnZpY2UvSGVsbG9Xb3JsZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkhlbGxvV29ybGQiKSk7ICAgICAgICAKKyAgICAgICAgUG9ydCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KCJlcDJTT0FQMTFQb3J0Iik7CisKKyAgICAgICAgU3RyaW5nIGVuZHBvaW50ID0gZ2V0RW5kcG9pbnQocG9ydCk7CisgICAgICAgIGFzc2VydEVxdWFscygiaHR0cDovL2xvY2FsaG9zdDo4MDg1L3NlcnZpY2VzL0hlbGxvV29ybGRXZWJTZXJ2aWNlMiIsIGVuZHBvaW50KTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBUZXN0cyA/d3NkbCB3b3JrcyBhbmQgcmV0dXJucyB0aGUgY29ycmVjdCBwb3J0IGVuZHBvaW50IGZyb20gYmluZGluZy53cyB3aXRoIGEgY3VzdG9tIFVSSQorICAgICAqLworICAgIHB1YmxpYyB2b2lkIHRlc3RDdXN0b21FbmRwb2ludCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBJbnB1dFN0cmVhbSBpbnAgPSBuZXcgVVJMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvZm9vL2Jhcj93c2RsIikub3BlblN0cmVhbSgpOworICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5wKSk7CisgICAgICAgIFN0cmluZyBsaW5lOworICAgICAgICB3aGlsZSgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpIHsKKyAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaW5lKTsKKyAgICAgICAgfQorICAgICAgICBici5jbG9zZSgpOworCisgICAgICAgIFdTRExSZWFkZXIgd3NkbFJlYWRlciA9IFdTRExGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3V1NETFJlYWRlcigpOworICAgICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoImphdmF4LndzZGwudmVyYm9zZSIsZmFsc2UpOworICAgICAgICB3c2RsUmVhZGVyLnNldEZlYXR1cmUoImphdmF4LndzZGwuaW1wb3J0RG9jdW1lbnRzIix0cnVlKTsKKworICAgICAgICBEZWZpbml0aW9uIGRlZmluaXRpb24gPSB3c2RsUmVhZGVyLnJlYWRXU0RMKCJodHRwOi8vbG9jYWxob3N0OjgwODUvZm9vL2Jhcj93c2RsIik7CisgICAgICAgIGFzc2VydE5vdE51bGwoZGVmaW5pdGlvbik7CisgICAgICAgIFNlcnZpY2Ugc2VydmljZSA9IGRlZmluaXRpb24uZ2V0U2VydmljZShuZXcgUU5hbWUoImh0dHA6Ly9heGlzMi53cy5iaW5kaW5nLnNjYS50dXNjYW55LmFwYWNoZS5vcmcvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSGVsbG9Xb3JsZCIpKTsKKyAgICAgICAgUG9ydCBwb3J0ID0gc2VydmljZS5nZXRQb3J0KCJlcDFTT0FQMTFQb3J0Iik7CisKKyAgICAgICAgU3RyaW5nIGVuZHBvaW50ID0gZ2V0RW5kcG9pbnQocG9ydCk7CisgICAgICAgIC8vIFRPRE8gLSB1c2VkIHRvIGdldCB0aGUgcmVhbCBob3N0IGhlcmUgYnV0IFdTREwgc2VlbXMgdG8gaGF2ZSBsb2NhbGhvc3QgaW4gaXQgYXRtPworICAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly9sb2NhbGhvc3Q6ODA4NS9mb28vYmFyIiwgZW5kcG9pbnQpOworICAgIH0KKworICAgIHByb3RlY3RlZCBTdHJpbmcgZ2V0RW5kcG9pbnQoUG9ydCBwb3J0KSB7CisgICAgICAgIExpc3Qgd3NkbFBvcnRFeHRlbnNpb25zID0gcG9ydC5nZXRFeHRlbnNpYmlsaXR5RWxlbWVudHMoKTsKKyAgICAgICAgZm9yIChmaW5hbCBPYmplY3QgZXh0ZW5zaW9uIDogd3NkbFBvcnRFeHRlbnNpb25zKSB7CisgICAgICAgICAgICBpZiAoZXh0ZW5zaW9uIGluc3RhbmNlb2YgU09BUEFkZHJlc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gKChTT0FQQWRkcmVzcykgZXh0ZW5zaW9uKS5nZXRMb2NhdGlvblVSSSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCJubyBTT0FQQWRkcmVzcyIpOworICAgIH0KKworICAgIEBPdmVycmlkZQorICAgIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0cmluZyBjb250cmlidXRpb24gPSAidGFyZ2V0L2NsYXNzZXMiOworICAgICAgICBub2RlID0gTm9kZUZhY3RvcnkubmV3SW5zdGFuY2UoKS5jcmVhdGVOb2RlKCJvcmcvYXBhY2hlL3R1c2Nhbnkvc2NhL2JpbmRpbmcvd3MvYXhpczIvcXVlc3Rpb25tYXJrLXdzZGwuY29tcG9zaXRlIiwgbmV3IENvbnRyaWJ1dGlvbigidGVzdCIsIGNvbnRyaWJ1dGlvbikpOworICAgICAgICBub2RlLnN0YXJ0KCk7CisgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgbm9kZS5zdG9wKCk7CisgICAgfQorCit9Cg==