ZGlmZiAtLWdpdCBhLy5iYXplbHJjIGIvLmJhemVscmMKaW5kZXggZTI0YmU4OC4uOGMzMjY2MSAxMDA2NDQKLS0tIGEvLmJhemVscmMKKysrIGIvLmJhemVscmMKQEAgLTMsOCArMywzMyBAQAogYnVpbGQgLS1leHBlcmltZW50YWxfc3RyaWN0X2FjdGlvbl9lbnYKIGJ1aWxkIC0tYWN0aW9uX2Vudj1QQVRICiBidWlsZCAtLWRpc2tfY2FjaGU9fi8uZ2Vycml0Y29kZXJldmlldy9iYXplbC1jYWNoZS9jYXMKLWJ1aWxkIC0tamF2YV90b29sY2hhaW4gLy90b29sczplcnJvcl9wcm9uZV93YXJuaW5nc190b29sY2hhaW4KKworIyBCdWlsZHMgdXNpbmcgcmVtb3RlX2pkazExLCBleGVjdXRlcyB1c2luZyByZW1vdGVfamRrMTEgb3IgbG9jYWxfamRrCitidWlsZCAtLWphdmFfbGFuZ3VhZ2VfdmVyc2lvbj0xMQorYnVpbGQgLS1qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTEKK2J1aWxkIC0tdG9vbF9qYXZhX2xhbmd1YWdlX3ZlcnNpb249MTEKK2J1aWxkIC0tdG9vbF9qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTEKKworIyBCdWlsZHMgYW5kIGV4ZWN1dGVzIG9uIFJCRSB1c2luZyByZW1vdGVqZGtfMTEKK2J1aWxkOnJlbW90ZSAtLWphdmFfbGFuZ3VhZ2VfdmVyc2lvbj0xMQorYnVpbGQ6cmVtb3RlIC0tamF2YV9ydW50aW1lX3ZlcnNpb249cmVtb3RlamRrXzExCitidWlsZDpyZW1vdGUgLS10b29sX2phdmFfbGFuZ3VhZ2VfdmVyc2lvbj0xMQorYnVpbGQ6cmVtb3RlIC0tdG9vbF9qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTEKKworIyBCdWlsZHMgdXNpbmcgcmVtb3RlX2pkazE3LCBleGVjdXRlcyB1c2luZyByZW1vdGVfamRrMTEgb3IgbG9jYWxfamRrCitidWlsZDpqYXZhMTcgLS1qYXZhX2xhbmd1YWdlX3ZlcnNpb249MTcKK2J1aWxkOmphdmExNyAtLWphdmFfcnVudGltZV92ZXJzaW9uPXJlbW90ZWpka18xNworYnVpbGQ6amF2YTE3IC0tdG9vbF9qYXZhX2xhbmd1YWdlX3ZlcnNpb249MTcKK2J1aWxkOmphdmExNyAtLXRvb2xfamF2YV9ydW50aW1lX3ZlcnNpb249cmVtb3RlamRrXzE3CisKKyMgQnVpbGRzIGFuZCBleGVjdXRlcyBvbiBSQkUgdXNpbmcgcmVtb3RlamRrXzE3CitidWlsZDpyZW1vdGUxNyAtLWphdmFfbGFuZ3VhZ2VfdmVyc2lvbj0xNworYnVpbGQ6cmVtb3RlMTcgLS1qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTcKK2J1aWxkOnJlbW90ZTE3IC0tdG9vbF9qYXZhX2xhbmd1YWdlX3ZlcnNpb249MTcKK2J1aWxkOnJlbW90ZTE3IC0tdG9vbF9qYXZhX3J1bnRpbWVfdmVyc2lvbj1yZW1vdGVqZGtfMTcKIAogdGVzdCAtLWJ1aWxkX3Rlc3RzX29ubHkKIHRlc3QgLS10ZXN0X291dHB1dD1lcnJvcnMKIAoraW1wb3J0ICV3b3Jrc3BhY2UlL3Rvb2xzL3JlbW90ZS1iYXplbHJjCisKZGlmZiAtLWdpdCBhLy5iYXplbHZlcnNpb24gYi8uYmF6ZWx2ZXJzaW9uCmluZGV4IGZjZGIyZTEuLjAwNjJhYzkgMTAwNjQ0Ci0tLSBhLy5iYXplbHZlcnNpb24KKysrIGIvLmJhemVsdmVyc2lvbgpAQCAtMSArMSBAQAotNC4wLjAKKzUuMC4wCmRpZmYgLS1naXQgYS8ubWFpbG1hcCBiLy5tYWlsbWFwCmluZGV4IGYwYmM5OTAuLmYwYWY0OWIgMTAwNjQ0Ci0tLSBhLy5tYWlsbWFwCisrKyBiLy5tYWlsbWFwCkBAIC0xMiw2ICsxMiw3IEBACiBTYcWhYSDFvWl2a292IDxzYXNhLnppdmtvdkBzYXAuY29tPiAgICAgICAgICAgICAgICAgICAgICAgICAgIFNhc2EgWml2a292IDxzYXNhLnppdmtvdkBzYXAuY29tPgogU2HFoWEgxb1pdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICBTYcWhYSDFvWl2a292IDx6aXZrb3ZAZ21haWwuY29tPgogU2HFoWEgxb1pdmtvdiA8c2FzYS56aXZrb3ZAc2FwLmNvbT4gICAgICAgICAgICAgICAgICAgICAgICAgICBTYXNhIFppdmtvdiA8eml2a292QGdtYWlsLmNvbT4KK1NlYmFzdGlhbiBTY2h1YmVydGggPHNzY2h1YmVydGhAZ21haWwuY29tPiAgICAgICAgICAgICAgICAgIFNlYmFzdGlhbiBTY2h1YmVydGggPHNlYmFzdGlhbi5zY2h1YmVydGhAYm9zY2guaW8+CiBTaGF3biBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+ICAgICAgICAgICAgICAgICAgICAgICAgICBTaGF3biBPLiBQZWFyY2UgPHNvcEBnb29nbGUuY29tPgogU2hhd24gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPiAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhd24gUGVhcmNlIDxzb3BAZ29vZ2xlLmNvbT4KIFNoYXduIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4gICAgICAgICAgICAgICAgICAgICAgICAgIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KZGlmZiAtLWdpdCBhL0RFUEVOREVOQ0lFUyBiL0RFUEVOREVOQ0lFUwppbmRleCBlYmJlNDgwLi45M2ZhODUwIDEwMDY0NAotLS0gYS9ERVBFTkRFTkNJRVMKKysrIGIvREVQRU5ERU5DSUVTCkBAIC0xLDY5ICsxLDY4IEBACiBtYXZlbi9tYXZlbmNlbnRyYWwvYXJnczRqL2FyZ3M0ai8yLjMzLCBNSVQsIGFwcHJvdmVkLCBDUTExMDY4Ci1tYXZlbi9tYXZlbmNlbnRyYWwvY29tLmdvb2dsZS5jb2RlLmdzb24vZ3Nvbi8yLjguNywgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMjM0OTYKLW1hdmVuL21hdmVuY2VudHJhbC9jb20uZ29vZ2xlY29kZS5qYXZhZXdhaC9KYXZhRVdBSC8xLjEuMTIsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTExNjU4CittYXZlbi9tYXZlbmNlbnRyYWwvY29tLmdvb2dsZS5jb2RlLmdzb24vZ3Nvbi8yLjguOSwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMjM0OTYKK21hdmVuL21hdmVuY2VudHJhbC9jb20uZ29vZ2xlY29kZS5qYXZhZXdhaC9KYXZhRVdBSC8xLjEuMTMsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTExNjU4CiBtYXZlbi9tYXZlbmNlbnRyYWwvY29tLmpjcmFmdC9qc2NoLzAuMS41NSwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgQ1ExOTQzNQogbWF2ZW4vbWF2ZW5jZW50cmFsL2NvbS5qY3JhZnQvanpsaWIvMS4xLjEsIEJTRC0yLUNsYXVzZSwgYXBwcm92ZWQsIENRNjIxOAogbWF2ZW4vbWF2ZW5jZW50cmFsL2NvbW1vbnMtY29kZWMvY29tbW9ucy1jb2RlYy8xLjExLCBBcGFjaGUtMi4wIEFORCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCBDUTE1OTcxCiBtYXZlbi9tYXZlbmNlbnRyYWwvY29tbW9ucy1sb2dnaW5nL2NvbW1vbnMtbG9nZ2luZy8xLjIsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTEwMTYyCi1tYXZlbi9tYXZlbmNlbnRyYWwvamF2YXguc2VydmxldC9qYXZheC5zZXJ2bGV0LWFwaS8zLjEuMCwgQXBhY2hlLTIuMCBBTkQgKENEREwtMS4xIE9SIEdQTC0yLjAgV0lUSCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMCksIGFwcHJvdmVkLCBDUTcyNDgKLW1hdmVuL21hdmVuY2VudHJhbC9qdW5pdC9qdW5pdC80LjEzLCAsIGFwcHJvdmVkLCBDUTIyNzk2Ci1tYXZlbi9tYXZlbmNlbnRyYWwvbG9nNGovbG9nNGovMS4yLjE1LCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgQ1E3ODM3CittYXZlbi9tYXZlbmNlbnRyYWwvamF2YXguc2VydmxldC9qYXZheC5zZXJ2bGV0LWFwaS80LjAuMCwgLCBhcHByb3ZlZCwgQ1ExNjEyNQorbWF2ZW4vbWF2ZW5jZW50cmFsL2p1bml0L2p1bml0LzQuMTMuMiwgRVBMLTIuMCwgYXBwcm92ZWQsIENRMjM2MzYKIG1hdmVuL21hdmVuY2VudHJhbC9uZXQuYnl0ZWJ1ZGR5L2J5dGUtYnVkZHktYWdlbnQvMS45LjAsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBjbGVhcmx5ZGVmaW5lZAogbWF2ZW4vbWF2ZW5jZW50cmFsL25ldC5ieXRlYnVkZHkvYnl0ZS1idWRkeS8xLjkuMCwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIGNsZWFybHlkZWZpbmVkCiBtYXZlbi9tYXZlbmNlbnRyYWwvbmV0LmkycC5jcnlwdG8vZWRkc2EvMC4zLjAsIENDMC0xLjAsIGFwcHJvdmVkLCBDUTIyNTM3CittYXZlbi9tYXZlbmNlbnRyYWwvbmV0LmphdmEuZGV2LmpuYS9qbmEtcGxhdGZvcm0vNS44LjAsIEFwYWNoZS0yLjAgT1IgTEdQTC0yLjEtb3ItbGF0ZXIsIGFwcHJvdmVkLCBDUTIzMjE4CittYXZlbi9tYXZlbmNlbnRyYWwvbmV0LmphdmEuZGV2LmpuYS9qbmEvNS44LjAsIEFwYWNoZS0yLjAgT1IgTEdQTC0yLjEtb3ItbGF0ZXIsIGFwcHJvdmVkLCBDUTIzMjE3CiBtYXZlbi9tYXZlbmNlbnRyYWwvbmV0LnNmLmpvcHQtc2ltcGxlL2pvcHQtc2ltcGxlLzQuNiwgTUlULCBhcHByb3ZlZCwgY2xlYXJseWRlZmluZWQKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuYXBhY2hlLmFudC9hbnQtbGF1bmNoZXIvMS4xMC4xMCwgQXBhY2hlLTIuMCBBTkQgVzNDIEFORCBMaWNlbnNlUmVmLVB1YmxpYy1Eb21haW4sIGFwcHJvdmVkLCBDUTE1NTYwCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5hbnQvYW50LzEuMTAuMTAsIEFwYWNoZS0yLjAgQU5EIFczQyBBTkQgTGljZW5zZVJlZi1QdWJsaWMtRG9tYWluLCBhcHByb3ZlZCwgQ1ExNTU2MAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuY29tbW9ucy9jb21tb25zLWNvbXByZXNzLzEuMjAsIEFwYWNoZS0yLjAgQU5EIEJTRC0zLUNsYXVzZSBBTkQgTGljZW5zZVJlZi1QdWJsaWMtRG9tYWluLCBhcHByb3ZlZCwgQ1EyMTc3MQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuYW50L2FudC1sYXVuY2hlci8xLjEwLjEyLCBBcGFjaGUtMi4wIEFORCBXM0MgQU5EIExpY2Vuc2VSZWYtUHVibGljLURvbWFpbiwgYXBwcm92ZWQsIENRMTU1NjAKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuYXBhY2hlLmFudC9hbnQvMS4xMC4xMiwgQXBhY2hlLTIuMCBBTkQgVzNDIEFORCBMaWNlbnNlUmVmLVB1YmxpYy1Eb21haW4sIGFwcHJvdmVkLCBDUTE1NTYwCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5jb21tb25zL2NvbW1vbnMtY29tcHJlc3MvMS4yMSwgQXBhY2hlLTIuMCBBTkQgQlNELTMtQ2xhdXNlIEFORCBiemlwMi0xLjAuNiBBTkQgTGljZW5zZVJlZi1QdWJsaWMtRG9tYWluLCBhcHByb3ZlZCwgQ1EyMzcxMAogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuY29tbW9ucy9jb21tb25zLW1hdGgzLzMuMiwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIGNsZWFybHlkZWZpbmVkCiBtYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy9odHRwY2xpZW50LzQuNS4xMywgQXBhY2hlLTIuMCBBTkQgTGljZW5zZVJlZi1QdWJsaWMtRG9tYWluLCBhcHByb3ZlZCwgQ1EyMzUyNwogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMvaHR0cGNvcmUvNC40LjE0LCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgQ1EyMzUyOAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuc3NoZC9zc2hkLWNvbW1vbi8yLjcuMCwgQXBhY2hlLTIuMCBhbmQgSVNDLCBhcHByb3ZlZCwgQ1EyMzQ2OQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuc3NoZC9zc2hkLWNvcmUvMi43LjAsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTIzNDY5Ci1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5zc2hkL3NzaGQtb3NnaS8yLjcuMCwgQXBhY2hlLTIuMCBhbmQgSVNDLCBhcHByb3ZlZCwgQ1EyMzQ2OQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hcGFjaGUuc3NoZC9zc2hkLXNmdHAvMi43LjAsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTIzNDcwCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmFwYWNoZS5zc2hkL3NzaGQtb3NnaS8yLjguMCwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMjM4OTIKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuYXBhY2hlLnNzaGQvc3NoZC1zZnRwLzIuOC4wLCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgQ1EyMzg5MwogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5hc3NlcnRqL2Fzc2VydGotY29yZS8zLjIwLjIsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBjbGVhcmx5ZGVmaW5lZAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5ib3VuY3ljYXN0bGUvYmNwZy1qZGsxNW9uLzEuNjksIE1JVCBhbmQgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMjM0NzIKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjcGtpeC1qZGsxNW9uLzEuNjksIE1JVCwgYXBwcm92ZWQsIENRMjM0NzMKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjcHJvdi1qZGsxNW9uLzEuNjksIE1JVCwgYXBwcm92ZWQsIENRMjM0NzEKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjdXRpbC1qZGsxNW9uLzEuNjksIE1JVCwgYXBwcm92ZWQsIENRMjM0NzQKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1odHRwLzkuNC40My52MjAyMTA2MjksICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1pby85LjQuNDMudjIwMjEwNjI5LCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VjdXJpdHkvOS40LjQzLnYyMDIxMDYyOSwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlcnZlci85LjQuNDMudjIwMjEwNjI5LCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktc2VydmxldC85LjQuNDMudjIwMjEwNjI5LCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktdXRpbC1hamF4LzkuNC40My52MjAyMTA2MjksICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS11dGlsLzkuNC40My52MjAyMTA2MjksICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmFudC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0LzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQucGdtLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC50ZXN0LzUuMTMuMC1TTkFQU0hPVCwgLCBhcHByb3ZlZCwgZWNsaXBzZQotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC51aS81LjEzLjAtU05BUFNIT1QsICwgYXBwcm92ZWQsIGVjbGlwc2UKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQvNS4xMy4wLVNOQVBTSE9ULCAsIGFwcHJvdmVkLCBlY2xpcHNlCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmhhbWNyZXN0L2hhbWNyZXN0LWNvcmUvMS4zLCBCU0QtMi1DbGF1c2UsIGFwcHJvdmVkLCBDUTcwNjMKLW1hdmVuL21hdmVuY2VudHJhbC9vcmcuaGFtY3Jlc3QvaGFtY3Jlc3QvMi4yLCBCU0QtMi1DbGF1c2UsIGFwcHJvdmVkLCBjbGVhcmx5ZGVmaW5lZAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5tb2NraXRvL21vY2tpdG8tY29yZS8yLjIzLjAsIE1JVCwgYXBwcm92ZWQsIENRMTc5NzYKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjcGctamRrMTVvbi8xLjcwLCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgIzE3MTMKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuYm91bmN5Y2FzdGxlL2JjcGtpeC1qZGsxNW9uLzEuNzAsIE1JVCwgYXBwcm92ZWQsIGNsZWFybHlkZWZpbmVkCittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmJvdW5jeWNhc3RsZS9iY3Byb3YtamRrMTVvbi8xLjcwLCBNSVQsIGFwcHJvdmVkLCAjMTcxMgorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5ib3VuY3ljYXN0bGUvYmN1dGlsLWpkazE1b24vMS43MCwgTUlULCBhcHByb3ZlZCwgY2xlYXJseWRlZmluZWQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS50b29sY2hhaW4vamV0dHktc2VydmxldC1hcGkvNC4wLjYsIEVQTC0yLjAgT1IgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIHJ0LmpldHR5CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktaHR0cC8xMC4wLjYsIEVQTC0yLjAgT1IgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIHJ0LmpldHR5CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamV0dHkvamV0dHktaW8vMTAuMC42LCBFUEwtMi4wIE9SIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBydC5qZXR0eQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlY3VyaXR5LzEwLjAuNiwgRVBMLTIuMCBPUiBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgcnQuamV0dHkKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZXR0eS9qZXR0eS1zZXJ2ZXIvMTAuMC42LCBFUEwtMi4wIE9SIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBydC5qZXR0eQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXNlcnZsZXQvMTAuMC42LCBFUEwtMi4wIE9SIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBydC5qZXR0eQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpldHR5L2pldHR5LXV0aWwvMTAuMC42LCBFUEwtMi4wIE9SIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBydC5qZXR0eQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmFudC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQubGZzLzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5wZ20vNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5lY2xpcHNlLmpnaXQvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0LzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQudGVzdC82LjEuMC1TTkFQU0hPVCwgQlNELTMtQ2xhdXNlLCBhcHByb3ZlZCwgdGVjaG5vbG9neS5qZ2l0CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLmVjbGlwc2UuamdpdC9vcmcuZWNsaXBzZS5qZ2l0LnVpLzYuMS4wLVNOQVBTSE9ULCBCU0QtMy1DbGF1c2UsIGFwcHJvdmVkLCB0ZWNobm9sb2d5LmpnaXQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuZWNsaXBzZS5qZ2l0L29yZy5lY2xpcHNlLmpnaXQvNi4xLjAtU05BUFNIT1QsIEJTRC0zLUNsYXVzZSwgYXBwcm92ZWQsIHRlY2hub2xvZ3kuamdpdAorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5oYW1jcmVzdC9oYW1jcmVzdC1jb3JlLzEuMywgQlNELTItQ2xhdXNlLCBhcHByb3ZlZCwgQ1ExMTQyOQorbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5tb2NraXRvL21vY2tpdG8tY29yZS8yLjIzLjAsIEFwYWNoZS0yLjAgQU5EIE1JVCwgYXBwcm92ZWQsICM5NTgKIG1hdmVuL21hdmVuY2VudHJhbC9vcmcub2JqZW5lc2lzL29iamVuZXNpcy8yLjYsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTE1NDc4Ci1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLm9wZW5qZGsuam1oL2ptaC1jb3JlLzEuMzIsIEdQTC0yLjAsIGFwcHJvdmVkLCBDUTIzNDk5Ci1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLm9wZW5qZGsuam1oL2ptaC1nZW5lcmF0b3ItYW5ucHJvY2Vzcy8xLjMyLCBHUEwtMi4wLCBhcHByb3ZlZCwgQ1EyMzUwMAotbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5vc2dpL29yZy5vc2dpLmNvcmUvNC4zLjEsIEFwYWNoZS0yLjAsIGFwcHJvdmVkLCBDUTEwMTExCi1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLnNsZjRqL2pjbC1vdmVyLXNsZjRqLzEuNy4zMCwgQXBhY2hlLTIuMCwgYXBwcm92ZWQsIENRMTI4NDMKK21hdmVuL21hdmVuY2VudHJhbC9vcmcub3Blbmpkay5qbWgvam1oLWNvcmUvMS4zMiwgR1BMLTIuMC1vbmx5IHdpdGggQ2xhc3NwYXRoLWV4Y2VwdGlvbi0yLjAsIGFwcHJvdmVkLCAjOTU5CittYXZlbi9tYXZlbmNlbnRyYWwvb3JnLm9wZW5qZGsuam1oL2ptaC1nZW5lcmF0b3ItYW5ucHJvY2Vzcy8xLjMyLCBHUEwtMi4wLW9ubHkgd2l0aCBDbGFzc3BhdGgtZXhjZXB0aW9uLTIuMCwgYXBwcm92ZWQsICM5NjIKK21hdmVuL21hdmVuY2VudHJhbC9vcmcub3NnaS9vcmcub3NnaS5jb3JlLzYuMC4wLCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgIzE3OTQKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuc2xmNGovamNsLW92ZXItc2xmNGovMS43LjMyLCBBcGFjaGUtMi4wLCBhcHByb3ZlZCwgQ1ExMjg0MwogbWF2ZW4vbWF2ZW5jZW50cmFsL29yZy5zbGY0ai9zbGY0ai1hcGkvMS43LjMwLCBNSVQsIGFwcHJvdmVkLCBDUTEzMzY4Ci1tYXZlbi9tYXZlbmNlbnRyYWwvb3JnLnNsZjRqL3NsZjRqLWxvZzRqMTIvMS43LjMwLCBNSVQsIGFwcHJvdmVkLCBDUTc2NjUKK21hdmVuL21hdmVuY2VudHJhbC9vcmcuc2xmNGovc2xmNGotc2ltcGxlLzEuNy4zMCwgTUlULCBhcHByb3ZlZCwgQ1E3OTUyCiBtYXZlbi9tYXZlbmNlbnRyYWwvb3JnLnR1a2FhbmkveHovMS45LCBMaWNlbnNlUmVmLVB1YmxpYy1Eb21haW4sIGFwcHJvdmVkLCBDUTIzNDk4CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy1vcHRpb25zLm1kIGIvRG9jdW1lbnRhdGlvbi9jb25maWctb3B0aW9ucy5tZAppbmRleCBiNGEwYzFkLi42MTJiODQ1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NvbmZpZy1vcHRpb25zLm1kCisrKyBiL0RvY3VtZW50YXRpb24vY29uZmlnLW9wdGlvbnMubWQKQEAgLTQ1LDcgKzQ1LDggQEAKIHwgYGNvcmUuc3RyZWFtRmlsZVRocmVzaG9sZGAgfCBgNTAgTWlCYCB8ICYjeDIwREU7IHwgVGhlIHNpemUgdGhyZXNob2xkIGJleW9uZCB3aGljaCBvYmplY3RzIG11c3QgYmUgc3RyZWFtZWQuIHwKIHwgYGNvcmUuc3VwcG9ydHNBdG9taWNGaWxlQ3JlYXRpb25gIHwgYHRydWVgIHwgJiN4MjBERTsgfCBXaGV0aGVyIHRoZSBmaWxlc3lzdGVtIHN1cHBvcnRzIGF0b21pYyBmaWxlIGNyZWF0aW9uLiB8CiB8IGBjb3JlLnN5bWxpbmtzYCB8IEF1dG8gZGV0ZWN0IGlmIGZpbGVzeXN0ZW0gc3VwcG9ydHMgc3ltbGlua3N8ICYjeDI3MDU7IHwgSWYgZmFsc2UsIHN5bWJvbGljIGxpbmtzIGFyZSBjaGVja2VkIG91dCBhcyBzbWFsbCBwbGFpbiBmaWxlcyB0aGF0IGNvbnRhaW4gdGhlIGxpbmsgdGV4dC4gfAotfCBgY29yZS50cnVzdEZvbGRlclN0YXRgIHwgYHRydWVgIHwgJiN4MjBERTsgfCBXaGV0aGVyIHRvIHRydXN0IHRoZSBwYWNrIGZvbGRlcidzIG1vZGlmaWNhdGlvbiB0aW1lLiBJZiBgZmFsc2VgIEpHaXQgd2lsbCBhbHdheXMgc2NhbiB0aGUgYC5naXQvb2JqZWN0cy9wYWNrYCBmb2xkZXIgdG8gY2hlY2sgZm9yIG5ldyBwYWNrIGZpbGVzLiBUaGlzIGNhbiBoZWxwIHRvIHdvcmthcm91bmQgY2FjaGluZyBpc3N1ZXMgb24gTkZTLCBidXQgcmVkdWNlcyBwZXJmb3JtYW5jZS4gSWYgc2V0IHRvIGB0cnVlYCBpdCB1c2VzIHRoZSBgbGFzdG1vZGlmaWVkYCBhdHRyaWJ1dGUgb2YgdGhlIGZvbGRlciBhbmQgYXNzdW1lcyB0aGF0IG5vIG5ldyBwYWNrIGZpbGVzIGNhbiBiZSBpbiB0aGlzIGZvbGRlciBpZiBpdHMgbW9kaWZpY2F0aW9uIHRpbWUgaGFzIG5vdCBjaGFuZ2VkLiB8Cit8IGBjb3JlLnRydXN0Rm9sZGVyU3RhdGAgfCBgdHJ1ZWAgfCAmI3gyMERFOyB8IFdoZXRoZXIgdG8gdHJ1c3QgdGhlIHBhY2sgZm9sZGVyJ3MsIHBhY2tlZC1yZWZzIGZpbGUncyBhbmQgbG9vc2Utb2JqZWN0cyBmb2xkZXIncyBmaWxlIGF0dHJpYnV0ZXMgKEphdmEgZXF1aXZhbGVudCBvZiBzdGF0IGNvbW1hbmQgb24gKm5peCkuIFdoZW4gbG9va2luZyBmb3IgcGFjayBmaWxlcywgaWYgYGZhbHNlYCBKR2l0IHdpbGwgYWx3YXlzIHNjYW4gdGhlIGAuZ2l0L29iamVjdHMvcGFja2AgZm9sZGVyIGFuZCBpZiBzZXQgdG8gYHRydWVgIGl0IGFzc3VtZXMgdGhhdCBwYWNrIGZpbGVzIGFyZSB1bmNoYW5nZWQgaWYgdGhlIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgcGFjayBmb2xkZXIgYXJlIHVuY2hhbmdlZC4gV2hlbiBnZXR0aW5nIHRoZSBsaXN0IG9mIHBhY2tlZCByZWZzLCBpZiBgZmFsc2VgIEpHaXQgd2lsbCBhbHdheXMgcmVhZCB0aGUgcGFja2VkLXJlZnMgZmlsZSBhbmQgaWYgc2V0IHRvIGB0cnVlYCBpdCB1c2VzIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIHBhY2tlZC1yZWZzIGZpbGUgYW5kIHdpbGwgb25seSByZWFkIGl0IGlmIGEgZmlsZSBhdHRyaWJ1dGUgaGFzIGNoYW5nZWQuIFdoZW4gbG9va2luZyBmb3IgbG9vc2Ugb2JqZWN0cywgaWYgYGZhbHNlYCBhbmQgaWYgYSBsb29zZSBvYmplY3QgaXMgbm90IGZvdW5kLCBKR2l0IHdpbGwgb3BlbiBhbmQgY2xvc2UgYSBzdHJlYW0gdG8gYC5naXQvb2JqZWN0c2AgZm9sZGVyICh3aGljaCBjYW4gcmVmcmVzaCBpdHMgZGlyZWN0b3J5IGxpc3RpbmcsIGF0IGxlYXN0IG9uIHNvbWUgTkZTIGNsaWVudHMpIGFuZCByZXRyeSBsb29raW5nIGZvciB0aGF0IGxvb3NlIG9iamVjdC4gU2V0dGluZyB0aGlzIG9wdGlvbiB0byBgZmFsc2VgIGNhbiBoZWxwIHRvIHdvcmthcm91bmQgY2FjaGluZyBpc3N1ZXMgb24gTkZTLCBidXQgcmVkdWNlcyBwZXJmb3JtYW5jZS4gfAorfCBgY29yZS50cnVzdFBhY2tlZFJlZnNTdGF0YCB8IGB1bnNldGAgfCAmI3gyMERFOyB8IFdoZXRoZXIgdG8gdHJ1c3QgdGhlIGZpbGUgYXR0cmlidXRlcyAoSmF2YSBlcXVpdmFsZW50IG9mIHN0YXQgY29tbWFuZCBvbiAqbml4KSBvZiB0aGUgcGFja2VkLXJlZnMgZmlsZS4gSWYgYG5ldmVyYCBKR2l0IHdpbGwgaWdub3JlIHRoZSBmaWxlIGF0dHJpYnV0ZXMgb2YgdGhlIHBhY2tlZC1yZWZzIGZpbGUgYW5kIGFsd2F5cyByZWFkIGl0LiBJZiBgYWx3YXlzYCBKR2l0IHdpbGwgdHJ1c3QgdGhlIGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgcGFja2VkLXJlZnMgZmlsZSBhbmQgd2lsbCBvbmx5IHJlYWQgaXQgaWYgYSBmaWxlIGF0dHJpYnV0ZSBoYXMgY2hhbmdlZC4gYGFmdGVyX29wZW5gIGJlaGF2ZXMgdGhlIHNhbWUgYXMgYGFsd2F5c2AsIGV4Y2VwdCB0aGF0IHRoZSBwYWNrZWQtcmVmcyBmaWxlIGlzIG9wZW5lZCBhbmQgY2xvc2VkIGJlZm9yZSBpdHMgZmlsZSBhdHRyaWJ1dGVzIGFyZSBjb25zaWRlcmVkLiBBbiBvcGVuL2Nsb3NlIG9mIHRoZSBwYWNrZWQtcmVmcyBmaWxlIGlzIGtub3duIHRvIHJlZnJlc2ggaXRzIGZpbGUgYXR0cmlidXRlcywgYXQgbGVhc3Qgb24gc29tZSBORlMgY2xpZW50cy4gSWYgYHVuc2V0YCwgSkdpdCB3aWxsIHVzZSB0aGUgYmVoYXZpb3IgZGVzY3JpYmVkIGluIGB0cnVzdEZvbGRlclN0YXRgLiB8CiB8IGBjb3JlLndvcmt0cmVlYCB8IFJvb3QgZGlyZWN0b3J5IG9mIHRoZSB3b3JraW5nIHRyZWUgaWYgaXQgaXMgbm90IHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBgLmdpdGAgZGlyZWN0b3J5IHwgJiN4MjcwNTsgfCBUaGUgcGF0aCB0byB0aGUgcm9vdCBvZiB0aGUgd29ya2luZyB0cmVlLiB8CiAKICMjIF9fZ2NfXyBvcHRpb25zCmRpZmYgLS1naXQgYS9XT1JLU1BBQ0UgYi9XT1JLU1BBQ0UKaW5kZXggNTFhODE1ZS4uMDQwNjE3ZSAxMDA2NDQKLS0tIGEvV09SS1NQQUNFCisrKyBiL1dPUktTUEFDRQpAQCAtMSwyMyArMSw2IEBACiB3b3Jrc3BhY2UobmFtZSA9ICJqZ2l0IikKIAogbG9hZCgiQGJhemVsX3Rvb2xzLy90b29scy9idWlsZF9kZWZzL3JlcG86aHR0cC5iemwiLCAiaHR0cF9hcmNoaXZlIikKLQotaHR0cF9hcmNoaXZlKAotICAgIG5hbWUgPSAiYmF6ZWxfc2t5bGliIiwKLSAgICBzaGEyNTYgPSAiMmVhOGE1ZWQyYjQ0OGJhZjRhNjg1NWQzY2UwNDljNGM0NTJhNjQ3MGIxZWZkMTUwNGZkYjdjMWMxMzRkMjIwYSIsCi0gICAgc3RyaXBfcHJlZml4ID0gImJhemVsLXNreWxpYi0wLjguMCIsCi0gICAgdXJscyA9IFsiaHR0cHM6Ly9naXRodWIuY29tL2JhemVsYnVpbGQvYmF6ZWwtc2t5bGliL2FyY2hpdmUvMC44LjAudGFyLmd6Il0sCi0pCi0KLSMgQ2hlY2sgQmF6ZWwgdmVyc2lvbiB3aGVuIGludm9rZWQgYnkgQmF6ZWwgZGlyZWN0bHkKLWxvYWQoIi8vdG9vbHM6YmF6ZWxpc2tfdmVyc2lvbi5iemwiLCAiYmF6ZWxpc2tfdmVyc2lvbiIpCi0KLWJhemVsaXNrX3ZlcnNpb24obmFtZSA9ICJiYXplbGlza192ZXJzaW9uIikKLQotbG9hZCgiQGJhemVsaXNrX3ZlcnNpb24vLzpjaGVjay5iemwiLCAiY2hlY2tfYmF6ZWxfdmVyc2lvbiIpCi0KLWNoZWNrX2JhemVsX3ZlcnNpb24oKQotCiBsb2FkKCIvL3Rvb2xzOmJhemxldHMuYnpsIiwgImxvYWRfYmF6bGV0cyIpCiAKIGxvYWRfYmF6bGV0cyhjb21taXQgPSAiZjMwYTk5MmRhOWZjODU1ZGNlODE5ODc1YWZiNTlmOWRkNmY4NjBjZCIpCkBAIC0yOCwzMiArMTEsMTggQEAKICkKIAogaHR0cF9hcmNoaXZlKAotICAgIG5hbWUgPSAib3BlbmpkazE1X2xpbnV4X2FyY2hpdmUiLAotICAgIGJ1aWxkX2ZpbGVfY29udGVudCA9ICIiIgotamF2YV9ydW50aW1lKG5hbWUgPSAncnVudGltZScsIHNyY3MgPSAgZ2xvYihbJyoqJ10pLCB2aXNpYmlsaXR5ID0gWycvL3Zpc2liaWxpdHk6cHVibGljJ10pCi1leHBvcnRzX2ZpbGVzKFsiV09SS1NQQUNFIl0sIHZpc2liaWxpdHkgPSBbIi8vdmlzaWJpbGl0eTpwdWJsaWMiXSkKLSIiIiwKLSAgICBzaGEyNTYgPSAiMGEzOGYxMTM4YzE1YTRmMjQzYjc1ZWI4MmY4ZWY0MDg1NWFmY2M0MDJlM2MyYTZkZTk3Y2U4MjM1MDExYjFhZCIsCi0gICAgc3RyaXBfcHJlZml4ID0gInp1bHUxNS4yNy4xNy1jYS1qZGsxNS4wLjAtbGludXhfeDY0IiwKKyAgICBuYW1lID0gInJiZV9qZGsxMSIsCisgICAgc2hhMjU2ID0gIjc2Njc5NmRlNzE5MTYxMThlNTI4YjlmNDMzNGMyOWM5YzliNGU5MjYyMjdiZjMyNjRkZWU1NTVlNmE0MzA2YzgiLAorICAgIHN0cmlwX3ByZWZpeCA9ICJyYmVfYXV0b2NvbmZpZy0yLjAuMCIsCiAgICAgdXJscyA9IFsKLSAgICAgICAgImh0dHBzOi8vbWlycm9yLmJhemVsLmJ1aWxkL2Nkbi5henVsLmNvbS96dWx1L2Jpbi96dWx1MTUuMjcuMTctY2EtamRrMTUuMC4wLWxpbnV4X3g2NC50YXIuZ3oiLAotICAgICAgICAiaHR0cHM6Ly9jZG4uYXp1bC5jb20venVsdS9iaW4venVsdTE1LjI3LjE3LWNhLWpkazE1LjAuMC1saW51eF94NjQudGFyLmd6IiwKKyAgICAgICAgImh0dHBzOi8vZ2Vycml0LWJhemVsLnN0b3JhZ2UuZ29vZ2xlYXBpcy5jb20vcmJlX2F1dG9jb25maWcvdjIuMC4wLnRhci5neiIsCisgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vZGF2aWRvL3JiZV9hdXRvY29uZmlnL2FyY2hpdmUvdjIuMC4wLnRhci5neiIsCiAgICAgXSwKICkKIAotaHR0cF9hcmNoaXZlKAotICAgIG5hbWUgPSAib3BlbmpkazE1X2Rhcndpbl9hcmNoaXZlIiwKLSAgICBidWlsZF9maWxlX2NvbnRlbnQgPSAiIiIKLWphdmFfcnVudGltZShuYW1lID0gJ3J1bnRpbWUnLCBzcmNzID0gIGdsb2IoWycqKiddKSwgdmlzaWJpbGl0eSA9IFsnLy92aXNpYmlsaXR5OnB1YmxpYyddKQotZXhwb3J0c19maWxlcyhbIldPUktTUEFDRSJdLCB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0pCi0iIiIsCi0gICAgc2hhMjU2ID0gImY4MGIyZTA1MTJkOWQ4YTkyYmUyNDQ5NzMzNGM5NzRiZmVjYzhjODk4ZmMyMTVjZTBlNzY1OTRmMDA0Mzc0ODIiLAotICAgIHN0cmlwX3ByZWZpeCA9ICJ6dWx1MTUuMjcuMTctY2EtamRrMTUuMC4wLW1hY29zeF94NjQiLAotICAgIHVybHMgPSBbCi0gICAgICAgICJodHRwczovL21pcnJvci5iYXplbC5idWlsZC9jZG4uYXp1bC5jb20venVsdS9iaW4venVsdTE1LjI3LjE3LWNhLWpkazE1LjAuMC1tYWNvc3hfeDY0LnRhci5neiIsCi0gICAgICAgICJodHRwczovL2Nkbi5henVsLmNvbS96dWx1L2Jpbi96dWx1MTUuMjcuMTctY2EtamRrMTUuMC4wLW1hY29zeF94NjQudGFyLmd6IiwKLSAgICBdLAotKQorcmVnaXN0ZXJfdG9vbGNoYWlucygiLy90b29sczplcnJvcl9wcm9uZV93YXJuaW5nc190b29sY2hhaW5famF2YTExX2RlZmluaXRpb24iKQorCityZWdpc3Rlcl90b29sY2hhaW5zKCIvL3Rvb2xzOmVycm9yX3Byb25lX3dhcm5pbmdzX3Rvb2xjaGFpbl9qYXZhMTdfZGVmaW5pdGlvbiIpCiAKIEpNSF9WRVJTID0gIjEuMzIiCiAKQEAgLTEyMywxNCArOTIsMTQgQEAKIAogbWF2ZW5famFyKAogICAgIG5hbWUgPSAic3NoZC1vc2dpIiwKLSAgICBhcnRpZmFjdCA9ICJvcmcuYXBhY2hlLnNzaGQ6c3NoZC1vc2dpOjIuNy4wIiwKLSAgICBzaGExID0gImExMDFhYWQwZjc5YWQ0MjQ0OTgwOThmN2U5MWMzOWQzZDkyMTc3YzEiLAorICAgIGFydGlmYWN0ID0gIm9yZy5hcGFjaGUuc3NoZDpzc2hkLW9zZ2k6Mi44LjAiLAorICAgIHNoYTEgPSAiYjJhNTliNzNjMDQ1ZjQwZDU3MjJiOTE2MGQ0ZjkwOWE2NDZkODZjOSIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gInNzaGQtc2Z0cCIsCi0gICAgYXJ0aWZhY3QgPSAib3JnLmFwYWNoZS5zc2hkOnNzaGQtc2Z0cDoyLjcuMCIsCi0gICAgc2hhMSA9ICIwYzllZmY3MTQ1ZTIwYjMzOGMxZGQ2YWNhMzZiYTkzZWQ3YzAxNDdjIiwKKyAgICBhcnRpZmFjdCA9ICJvcmcuYXBhY2hlLnNzaGQ6c3NoZC1zZnRwOjIuOC4wIiwKKyAgICBzaGExID0gImQzY2Q5YmM4ZDMzNWIzZWQxYTg2ZDI5NjVkZWI0ZDIwMmRlMjc0NDIiLAogKQogCiBtYXZlbl9qYXIoCkBAIC0yMzksOCArMjA4LDggQEAKIAogbWF2ZW5famFyKAogICAgIG5hbWUgPSAiZ3NvbiIsCi0gICAgYXJ0aWZhY3QgPSAiY29tLmdvb2dsZS5jb2RlLmdzb246Z3NvbjoyLjguOCIsCi0gICAgc2hhMSA9ICI0MzFmYzNjYmMwZmY4MWFiZGJmZGUwNzAwNjI3NDEwODljM2JhODc0IiwKKyAgICBhcnRpZmFjdCA9ICJjb20uZ29vZ2xlLmNvZGUuZ3Nvbjpnc29uOjIuOC45IiwKKyAgICBzaGExID0gIjhhNDMyYzFkNjgyNTc4MWUyMWEwMmRiMmUyYzMzYzVmZGUyODMzYjkiLAogKQogCiBKRVRUWV9WRVIgPSAiMTAuMC42IgpAQCAtMjk0LDMyICsyNjMsMzIgQEAKICAgICBzcmNfc2hhMSA9ICJmMzVmNTUyNWE1ZDMwZGMxMjM3Yjg1NDU3ZDc1OGQ1NzhlM2NlOGQwIiwKICkKIAotQk9VTkNZQ0FTVExFX1ZFUiA9ICIxLjY5IgorQk9VTkNZQ0FTVExFX1ZFUiA9ICIxLjcwIgogCiBtYXZlbl9qYXIoCiAgICAgbmFtZSA9ICJiY3BnIiwKICAgICBhcnRpZmFjdCA9ICJvcmcuYm91bmN5Y2FzdGxlOmJjcGctamRrMTVvbjoiICsgQk9VTkNZQ0FTVExFX1ZFUiwKLSAgICBzaGExID0gImQ5OWEwOGMzZjY1MWIyNmU4ZWI2NjhlOTQxYjBiYmQyYzA5ZWNlMDgiLAotICAgIHNyY19zaGExID0gImRlMWZjMjYxYjQ0YThlYjYwNTgzNDEzYTMxZmZjOThjZTNkY2UzOGIiLAorICAgIHNoYTEgPSAiMDYyZjcyZWMwNmYzMWE2YzMxYTNmMzM1NWZjZTAzODRiMjExMjZkNyIsCisgICAgc3JjX3NoYTEgPSAiOWRlZTczYWQ5MjY3NTJlZTNiNDIxYTdkYzQ1MzEyODcxNjZjY2YzNiIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gImJjcHJvdiIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmJvdW5jeWNhc3RsZTpiY3Byb3YtamRrMTVvbjoiICsgQk9VTkNZQ0FTVExFX1ZFUiwKLSAgICBzaGExID0gIjkxZTE2MjgyNTFjZjNjYTkwMDkzY2U5ZDBmZTY3ZTViN2RhYjM4NTAiLAotICAgIHNyY19zaGExID0gIjY3ZGM2NDc2ODQ1ZjZiMjljYjUyMGI1ZGY2MWRiNjVhZTU2NzE4ZTQiLAorICAgIHNoYTEgPSAiNDYzNmEwZDAxZjc0YWNhZjI4MDgyZmI2MmIzMTdmMTA4MDExODM3MSIsCisgICAgc3JjX3NoYTEgPSAiNjI0NWUxNWRkNDdlNWZjMzNjZmYyNzVkZjYxNjYyZTBhOGU1OTU4ZiIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gImJjdXRpbCIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmJvdW5jeWNhc3RsZTpiY3V0aWwtamRrMTVvbjoiICsgQk9VTkNZQ0FTVExFX1ZFUiwKLSAgICBzaGExID0gImMzZWRmOTNkMzQ2ZTk3ZjY0ZjA0MWU0NDhlNzQ1NWMzOWM3ZWZmNjQiLAotICAgIHNyY19zaGExID0gImRlZWIzZmJiZjM3M2UwNWUyYTIwOTQxZjlhOGNlOTBlOWFlYWIzZDIiLAorICAgIHNoYTEgPSAiNTQyODBlNzE5NWE3NDMwZDc5MTFkZWQ5M2ZjMDFlMDczMDBiOTUyNiIsCisgICAgc3JjX3NoYTEgPSAiNGFmNGE2YzkyYjhlYTA3ODg1YjI3ZDg1MzZiODFiODU1NDk3ZjRlYiIsCiApCiAKIG1hdmVuX2phcigKICAgICBuYW1lID0gImJjcGtpeCIsCiAgICAgYXJ0aWZhY3QgPSAib3JnLmJvdW5jeWNhc3RsZTpiY3BraXgtamRrMTVvbjoiICsgQk9VTkNZQ0FTVExFX1ZFUiwKLSAgICBzaGExID0gIjQ1YzM2ZmI3MmZhZmIwYjY4OGM2YWY3OTVlNmNjODAzZjZmNzllZTUiLAotICAgIHNyY19zaGExID0gIjhiYzUyMTQ0MDE0NTliZDkxZWVhODE2YjUxNjA3OWRhMzgzNzRlOTAiLAorICAgIHNoYTEgPSAiZjgxZTVhZjQ5NTcxYTlkNWExMDlhODhmMjM5YTczY2U4NzA1NTQxNyIsCisgICAgc3JjX3NoYTEgPSAiNDJmOWRlNTNhOTFiMjBiYzA2ZTg4NDgyYzU3ZmQ5N2U1YTg0MjUwZCIsCiApCmRpZmYgLS1naXQgYS9saWIvQlVJTEQgYi9saWIvQlVJTEQKaW5kZXggOTQ0MjdmNi4uNmJlOWU1NyAxMDA2NDQKLS0tIGEvbGliL0JVSUxECisrKyBiL2xpYi9CVUlMRApAQCAtOTcsNyArOTcsNyBAQAogamF2YV9saWJyYXJ5KAogICAgIG5hbWUgPSAiam5hIiwKICAgICB2aXNpYmlsaXR5ID0gWwotICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50Ol9fcGtnX18iLAorICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQ6X19wa2dfXyIsCiAgICAgXSwKICAgICBleHBvcnRzID0gWyJAam5hLy9qYXIiXSwKICkKQEAgLTEwNSw3ICsxMDUsNyBAQAogamF2YV9saWJyYXJ5KAogICAgIG5hbWUgPSAiam5hLXBsYXRmb3JtIiwKICAgICB2aXNpYmlsaXR5ID0gWwotICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50Ol9fcGtnX18iLAorICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQ6X19wa2dfXyIsCiAgICAgXSwKICAgICBleHBvcnRzID0gWyJAam5hLXBsYXRmb3JtLy9qYXIiXSwKICkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDk0MzM2NTguLjA5OTc1NzAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtNSwxMyArNSwxMyBAQAogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0CiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLnRvb2xzLmFudCwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFudC50YXNrczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFudC50YXNrczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuaGFtY3Jlc3QuY29yZTt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQudGVzdC9wb20ueG1sCmluZGV4IDZhZDY0MTUuLmJhNDczZWYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0L3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmFudC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAxMGJmYmQyLi42MDAzYTMxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywxMyArMywxMyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFudAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBvcmcuYXBhY2hlLnRvb2xzLmFudCwKLSAgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIKKyAgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFudDt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbnQudGFza3M7dmVyc2lvbj0iNi4wLjEiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW50O3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFudC50YXNrczt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuYXBhY2hlLnRvb2xzLmFudCwKICAgIG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IGMzZWJmYjMuLmQwZGM1YzggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hbnQgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmFudC5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuYW50O3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5hbnQ7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuYW50L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmFudC9wb20ueG1sCmluZGV4IDQ0NDhmMmUuLmE3ZjI1OGIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYW50L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5hbnQvcG9tLnhtbApAQCAtMTUsNyArMTUsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYW50PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDYyZmU1YTUuLjNmYzhkZjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZQogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCkBAIC0xMywxNyArMTMsMTcgQEAKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMuYnppcDI7dmVyc2lvbj0iWzEuNCwyLjApIiwKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMuZ3ppcDt2ZXJzaW9uPSJbMS40LDIuMCkiLAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5jb21wcmVzc29ycy54ejt2ZXJzaW9uPSJbMS40LDIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcub3NnaS5mcmFtZXdvcms7dmVyc2lvbj0iWzEuMy4wLDIuMC4wKSIKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUuRm9ybWF0QWN0aXZhdG9yCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249IjYuMC4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmU7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmFwaSwKICAgIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5hcmNoaXZlcnMsCiAgICBvcmcub3NnaS5mcmFtZXdvcmsiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS5pbnRlcm5hbDt2ZXJzaW9uPSI2LjAuMSI7eC1pbnRlcm5hbDo9dHJ1ZQorIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS5pbnRlcm5hbDt2ZXJzaW9uPSI2LjEuMSI7eC1pbnRlcm5hbDo9dHJ1ZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggZGVhYjJmYS4uOGM3ZmQwNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZSAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZS5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbAppbmRleCA0NWYxMWRhLi4xMmYzZTY4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuYmVuY2htYXJrcy9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5iZW5jaG1hcmtzL3BvbS54bWwKaW5kZXggNTVjODBjNi4uYWMxZDZiZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5iZW5jaG1hcmtzL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5iZW5jaG1hcmtzL3BvbS54bWwKQEAgLTE0LDcgKzE0LDcgQEAKICAgPG1vZGVsVmVyc2lvbj40LjAuMDwvbW9kZWxWZXJzaW9uPgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+Ci0gIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5iZW5jaG1hcmtzPC9hcnRpZmFjdElkPgogICA8cGFja2FnaW5nPmphcjwvcGFja2FnaW5nPgogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmNvdmVyYWdlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmNvdmVyYWdlL3BvbS54bWwKaW5kZXggNjNlYWQyNy4uYWJjMzdlYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5jb3ZlcmFnZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuY292ZXJhZ2UvcG9tLnhtbApAQCAtMTQsNyArMTQsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogICA8bW9kZWxWZXJzaW9uPjQuMC4wPC9tb2RlbFZlcnNpb24+CiAKQEAgLTI3LDg4ICsyNyw4OCBAQAogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LmFudDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGU8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyPC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnM8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnBnbTwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudWk8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGU8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KIAogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQudGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICAgIDxkZXBlbmRlbmN5PgogICAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0PC9hcnRpZmFjdElkPgotICAgICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgICA8L2RlcGVuZGVuY3k+CiAgICAgPGRlcGVuZGVuY3k+CiAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3Q8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdDwvYXJ0aWZhY3RJZD4KLSAgICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgICAgPC9kZXBlbmRlbmN5PgogICA8L2RlcGVuZGVuY2llcz4KIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9CVUlMRCBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvQlVJTEQKaW5kZXggMzViMTI1Zi4uOWU1ODEzYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9CVUlMRAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L0JVSUxECkBAIC0xMCw4ICsxMCw4IEBACiBqdW5pdF90ZXN0cygKICAgICBuYW1lID0gImJjIiwKICAgICBzcmNzID0gZ2xvYihbInRzdC8qKi8qLmphdmEiXSksCi0gICAgcmVzb3VyY2VfamFycyA9IFsiOnRzdF9yc3JjIl0sCiAgICAgdGFncyA9IFsiYmMiXSwKKyAgICBydW50aW1lX2RlcHMgPSBbIjp0c3RfcnNyYyJdLAogICAgIGRlcHMgPSBbCiAgICAgICAgICIvL2xpYjpiY3BnIiwKICAgICAgICAgIi8vbGliOmJjcHJvdiIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBkNzAzNDMyLi5iYjliMzkzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKQEAgLTEyLDkgKzEyLDkgQEAKICBvcmcuYm91bmN5Y2FzdGxlLm9wZW5wZ3Aub3BlcmF0b3I7dmVyc2lvbj0iWzEuNjUuMCwyLjAuMCkiLAogIG9yZy5ib3VuY3ljYXN0bGUub3BlbnBncC5vcGVyYXRvci5qY2FqY2U7dmVyc2lvbj0iWzEuNjUuMCwyLjAuMCkiLAogIG9yZy5ib3VuY3ljYXN0bGUudXRpbC5lbmNvZGVyczt2ZXJzaW9uPSJbMS42NS4wLDIuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuaW50ZXJuYWwua2V5czt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5pbnRlcm5hbC5rZXlzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5oYW1jcmVzdDt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVubmVyO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0L3BvbS54bWwKaW5kZXggYWQ5NTViMC4uOTU2OGM2OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMudGVzdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3Q8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDc0ZTMzMDUuLjUzNDU2OGQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDEwICszLDEwIEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYztzaW5nbGV0b246PXRydWUKLUZyYWdtZW50LUhvc3Q6IG9yZy5lY2xpcHNlLmpnaXQ7YnVuZGxlLXZlcnNpb249Ils2LjAuMSw2LjEuMCkiCitGcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0O2J1bmRsZS12ZXJzaW9uPSJbNi4xLjEsNi4yLjApIgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xMQogSW1wb3J0LVBhY2thZ2U6IG9yZy5ib3VuY3ljYXN0bGUuYXNuMTt2ZXJzaW9uPSJbMS42OS4wLDIuMC4wKSIsCiAgb3JnLmJvdW5jeWNhc3RsZS5hc24xLmNyeXB0bGliO3ZlcnNpb249IlsxLjY5LjAsMi4wLjApIiwKQEAgLTI5LDkgKzI5LDkgQEAKICBvcmcuYm91bmN5Y2FzdGxlLnV0aWw7dmVyc2lvbj0iWzEuNjkuMCwyLjAuMCkiLAogIG9yZy5ib3VuY3ljYXN0bGUudXRpbC5lbmNvZGVyczt2ZXJzaW9uPSJbMS42OS4wLDIuMC4wKSIsCiAgb3JnLmJvdW5jeWNhc3RsZS51dGlsLmlvO3ZlcnNpb249IlsxLjY5LjAsMi4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuc2xmNGo7dmVyc2lvbj0iWzEuNy4wLDIuMC4wKSIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYzt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmludGVybmFsLmtleXM7dmVyc2lvbj0iNi4wLjEiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QiCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmludGVybmFsO3ZlcnNpb249IjYuMS4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0IiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5pbnRlcm5hbC5rZXlzO3ZlcnNpb249IjYuMS4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy50ZXN0IgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IGRlNDk2MmIuLjIwZTJkMDEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjO3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5ncGcuYmM7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy9wb20ueG1sCmluZGV4IDRiZjgyYzYuLjEzOGY0ZTggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYzUxYTg3ZS4uYWZjYWE3OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDcgKzMsNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCkBAIC0yNSwxMSArMjUsMTEgQEAKICBvcmcuYXBhY2hlLmh0dHAuaW1wbC5jb25uO3ZlcnNpb249Ils0LjQuMCw1LjAuMCkiLAogIG9yZy5hcGFjaGUuaHR0cC5wYXJhbXM7dmVyc2lvbj0iWzQuMy4wLDUuMC4wKSIsCiAgb3JnLmFwYWNoZS5odHRwLnNzbDt2ZXJzaW9uPSJbNC4zLjAsNS4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuYXBhY2hlLmh0dHAuY2xpZW50LAogICAgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cCwKICAgIG9yZy5hcGFjaGUuaHR0cC5lbnRpdHksCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDlkNGY1ZjIuLjdiOGUxNDkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZTt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUvcG9tLnhtbAppbmRleCA2ZTVmMjYwLi5iZDM1NTg5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS9wb20ueG1sCkBAIC0xNSw3ICsxNSw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvLnNldHRpbmdzLy5hcGlfZmlsdGVycyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvLnNldHRpbmdzLy5hcGlfZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzMyYzk4Ci0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/PgorPGNvbXBvbmVudCBpZD0ib3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlciIgdmVyc2lvbj0iMiI+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tFcnJvckhhbmRsZXIuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5VcGxvYWRQYWNrRXJyb3JIYW5kbGVyIj4KKyAgICAgICAgPGZpbHRlciBpZD0iMTIxMDA1NjcwNyI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IjYuMS4xIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InN0YXR1c0NvZGVGb3JUaHJvd2FibGUoVGhyb3dhYmxlKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKzwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggNTEwYzQzOS4uNGJmNjZhMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDEzICszLDEzIEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyO3ZlcnNpb249IjYuMC4xIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLmdsdWU7dmVyc2lvbj0iNi4wLjEiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuZ2x1ZTt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJqYXZheC5zZXJ2bGV0LGphdmF4LnNlcnZsZXQuaHR0cCIsCi0gb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5yZXNvbHZlcjt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5yZXNvbHZlcjt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCkBAIC0xOCwxNCArMTgsMTQgQEAKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBqYXZheC5zZXJ2bGV0O3ZlcnNpb249IlsyLjUuMCw1LjAuMCkiLAogIGphdmF4LnNlcnZsZXQuaHR0cDt2ZXJzaW9uPSJbMi41LjAsNS4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQucGFyc2VyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIKKyBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQucGFyc2VyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggNzQ1M2NiOC4uMmI0NzA1NSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlciAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyO3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9wb20ueG1sCmluZGV4IGIwMWM3OTEuLjZhNzg4ZTIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3BvbS54bWwKQEAgLTE5LDcgKzE5LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9odHRwL3NlcnZlci9HaXRTbWFydEh0dHBUb29scy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9odHRwL3NlcnZlci9HaXRTbWFydEh0dHBUb29scy5qYXZhCmluZGV4IDAxMmY5YTMuLmYxMTU1ZGMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvaHR0cC9zZXJ2ZXIvR2l0U21hcnRIdHRwVG9vbHMuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL0dpdFNtYXJ0SHR0cFRvb2xzLmphdmEKQEAgLTE1OCwxMSArMTU4LDExIEBAIHB1YmxpYyBzdGF0aWMgdm9pZCBzZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKIAkJfQogCiAJCWlmIChpc0luZm9SZWZzKHJlcSkpIHsKLQkJCXNlbmRJbmZvUmVmc0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0KTsKKwkJCXNlbmRJbmZvUmVmc0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0LCBodHRwU3RhdHVzKTsKIAkJfSBlbHNlIGlmIChpc1VwbG9hZFBhY2socmVxKSkgewotCQkJc2VuZFVwbG9hZFBhY2tFcnJvcihyZXEsIHJlcywgdGV4dEZvckdpdCk7CisJCQlzZW5kVXBsb2FkUGFja0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0LCBodHRwU3RhdHVzKTsKIAkJfSBlbHNlIGlmIChpc1JlY2VpdmVQYWNrKHJlcSkpIHsKLQkJCXNlbmRSZWNlaXZlUGFja0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0KTsKKwkJCXNlbmRSZWNlaXZlUGFja0Vycm9yKHJlcSwgcmVzLCB0ZXh0Rm9yR2l0LCBodHRwU3RhdHVzKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChodHRwU3RhdHVzIDwgNDAwKQogCQkJCVNlcnZsZXRVdGlscy5jb25zdW1lUmVxdWVzdEJvZHkocmVxKTsKQEAgLTE3MSwyOSArMTcxLDMyIEBAIHB1YmxpYyBzdGF0aWMgdm9pZCBzZW5kRXJyb3IoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKIAl9CiAKIAlwcml2YXRlIHN0YXRpYyB2b2lkIHNlbmRJbmZvUmVmc0Vycm9yKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsCi0JCQlIdHRwU2VydmxldFJlc3BvbnNlIHJlcywgU3RyaW5nIHRleHRGb3JHaXQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCQlIdHRwU2VydmxldFJlc3BvbnNlIHJlcywgU3RyaW5nIHRleHRGb3JHaXQsIGludCBodHRwU3RhdHVzKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ1ZiA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oMTI4KTsKIAkJUGFja2V0TGluZU91dCBwY2sgPSBuZXcgUGFja2V0TGluZU91dChidWYpOwogCQlTdHJpbmcgc3ZjID0gcmVxLmdldFBhcmFtZXRlcigic2VydmljZSIpOwogCQlwY2sud3JpdGVTdHJpbmcoIiMgc2VydmljZT0iICsgc3ZjICsgIlxuIik7CiAJCXBjay5lbmQoKTsKIAkJcGNrLndyaXRlU3RyaW5nKCJFUlIgIiArIHRleHRGb3JHaXQpOwotCQlzZW5kKHJlcSwgcmVzLCBpbmZvUmVmc1Jlc3VsdFR5cGUoc3ZjKSwgYnVmLnRvQnl0ZUFycmF5KCkpOworCQlzZW5kKHJlcSwgcmVzLCBpbmZvUmVmc1Jlc3VsdFR5cGUoc3ZjKSwgYnVmLnRvQnl0ZUFycmF5KCksIGh0dHBTdGF0dXMpOwogCX0KIAogCXByaXZhdGUgc3RhdGljIHZvaWQgc2VuZFVwbG9hZFBhY2tFcnJvcihIdHRwU2VydmxldFJlcXVlc3QgcmVxLAotCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyB0ZXh0Rm9yR2l0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyB0ZXh0Rm9yR2l0LCBpbnQgaHR0cFN0YXR1cykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCS8vIERvIG5vdCB1c2Ugc2lkZWJhbmQuIFNpZGViYW5kIGlzIGFjY2VwdGFibGUgb25seSB3aGlsZSBwYWNrZmlsZSBpcwogCQkvLyBiZWluZyBzZW50LiBPdGhlciBwbGFjZXMsIGxpa2UgYWNrbm93bGVkZ2VtZW50IHNlY3Rpb24sIGRvIG5vdAogCQkvLyBzdXBwb3J0IHNpZGViYW5kLiBVc2UgYW4gZXJyb3IgcGFja2V0LgogCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnVmID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgxMjgpOwogCQlQYWNrZXRMaW5lT3V0IHBja091dCA9IG5ldyBQYWNrZXRMaW5lT3V0KGJ1Zik7CiAJCXdyaXRlUGFja2V0KHBja091dCwgdGV4dEZvckdpdCk7Ci0JCXNlbmQocmVxLCByZXMsIFVQTE9BRF9QQUNLX1JFU1VMVF9UWVBFLCBidWYudG9CeXRlQXJyYXkoKSk7CisJCXNlbmQocmVxLCByZXMsIFVQTE9BRF9QQUNLX1JFU1VMVF9UWVBFLCBidWYudG9CeXRlQXJyYXkoKSwgaHR0cFN0YXR1cyk7CiAJfQogCiAJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzZW5kUmVjZWl2ZVBhY2tFcnJvcihIdHRwU2VydmxldFJlcXVlc3QgcmVxLAotCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyB0ZXh0Rm9yR2l0KSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsIFN0cmluZyB0ZXh0Rm9yR2l0LCBpbnQgaHR0cFN0YXR1cykKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBidWYgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKDEyOCk7CiAJCVBhY2tldExpbmVPdXQgcGNrT3V0ID0gbmV3IFBhY2tldExpbmVPdXQoYnVmKTsKIApAQCAtMjEyLDcgKzIxNSw3IEBAIHByaXZhdGUgc3RhdGljIHZvaWQgc2VuZFJlY2VpdmVQYWNrRXJyb3IoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKIAkJCXdyaXRlU2lkZUJhbmQoYnVmLCB0ZXh0Rm9yR2l0KTsKIAkJZWxzZQogCQkJd3JpdGVQYWNrZXQocGNrT3V0LCB0ZXh0Rm9yR2l0KTsKLQkJc2VuZChyZXEsIHJlcywgUkVDRUlWRV9QQUNLX1JFU1VMVF9UWVBFLCBidWYudG9CeXRlQXJyYXkoKSk7CisJCXNlbmQocmVxLCByZXMsIFJFQ0VJVkVfUEFDS19SRVNVTFRfVFlQRSwgYnVmLnRvQnl0ZUFycmF5KCksIGh0dHBTdGF0dXMpOwogCX0KIAogCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNSZWNlaXZlUGFja1NpZGVCYW5kKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEpIHsKQEAgLTI0Niw5ICsyNDksOSBAQCBwcml2YXRlIHN0YXRpYyB2b2lkIHdyaXRlUGFja2V0KFBhY2tldExpbmVPdXQgcGNrT3V0LCBTdHJpbmcgdGV4dEZvckdpdCkKIAl9CiAKIAlwcml2YXRlIHN0YXRpYyB2b2lkIHNlbmQoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwgSHR0cFNlcnZsZXRSZXNwb25zZSByZXMsCi0JCQlTdHJpbmcgdHlwZSwgYnl0ZVtdIGJ1ZikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCVN0cmluZyB0eXBlLCBieXRlW10gYnVmLCBpbnQgaHR0cFN0YXR1cykgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJU2VydmxldFV0aWxzLmNvbnN1bWVSZXF1ZXN0Qm9keShyZXEpOwotCQlyZXMuc2V0U3RhdHVzKEh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfT0spOworCQlyZXMuc2V0U3RhdHVzKGh0dHBTdGF0dXMpOwogCQlyZXMuc2V0Q29udGVudFR5cGUodHlwZSk7CiAJCXJlcy5zZXRDb250ZW50TGVuZ3RoKGJ1Zi5sZW5ndGgpOwogCQl0cnkgKE91dHB1dFN0cmVhbSBvcyA9IHJlcy5nZXRPdXRwdXRTdHJlYW0oKSkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9odHRwL3NlcnZlci9VcGxvYWRQYWNrRXJyb3JIYW5kbGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tFcnJvckhhbmRsZXIuamF2YQppbmRleCAwM2JlMDg3Li4yYWFkYmJjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tFcnJvckhhbmRsZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tFcnJvckhhbmRsZXIuamF2YQpAQCAtOSwxMyArOSwxOSBAQAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7CiAKK2ltcG9ydCBzdGF0aWMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfRk9SQklEREVOOworaW1wb3J0IHN0YXRpYyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19JTlRFUk5BTF9TRVJWRVJfRVJST1I7CitpbXBvcnQgc3RhdGljIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLlNDX09LOworCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIAogaW1wb3J0IGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlcXVlc3Q7CiBpbXBvcnQgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2U7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5QYWNrUHJvdG9jb2xFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuU2VydmljZU1heU5vdENvbnRpbnVlRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlVwbG9hZFBhY2s7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXIuU2VydmljZU5vdEVuYWJsZWRFeGNlcHRpb247CiAKIC8qKgogICogSGFuZGxlIGdpdC11cGxvYWQtcGFjayBlcnJvcnMuCkBAIC0zNSw2ICs0MSwyNCBAQAogICovCiBwdWJsaWMgaW50ZXJmYWNlIFVwbG9hZFBhY2tFcnJvckhhbmRsZXIgewogCS8qKgorCSAqIE1hcHMgYSB0aHJvd24gZ2l0IHJlbGF0ZWQgRXhjZXB0aW9uIHRvIGFuIGFwcHJvcHJpYXRlIEhUVFAgc3RhdHVzIGNvZGUuCisJICoKKwkgKiBAcGFyYW0gZXJyb3IKKwkgKiAgICAgICAgICAgIFRoZSB0aHJvd24gRXhjZXB0aW9uLgorCSAqIEByZXR1cm4gdGhlIEhUVFAgc3RhdHVzIGNvZGUgYXMgYW4gaW50CisJICogQHNpbmNlIDYuMS4xCisJICovCisJcHVibGljIHN0YXRpYyBpbnQgc3RhdHVzQ29kZUZvclRocm93YWJsZShUaHJvd2FibGUgZXJyb3IpIHsKKwkJaWYgKGVycm9yIGluc3RhbmNlb2YgU2VydmljZU5vdEVuYWJsZWRFeGNlcHRpb24pIHsKKwkJCXJldHVybiBTQ19GT1JCSURERU47CisJCX0KKwkJaWYgKGVycm9yIGluc3RhbmNlb2YgUGFja1Byb3RvY29sRXhjZXB0aW9uKSB7CisJCQkvLyBJbnRlcm5hbCBnaXQgZXJyb3JzIGFyZSBub3QgZXJyb3JzIGZyb20gYW4gSFRUUCBzdGFuZHBvaW50LgorCQkJcmV0dXJuIFNDX09LOworCQl9CisJCXJldHVybiBTQ19JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisJfQorCS8qKgogCSAqIEBwYXJhbSByZXEKIAkgKiAgICAgICAgICAgIFRoZSBIVFRQIHJlcXVlc3QKIAkgKiBAcGFyYW0gcnNwCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tTZXJ2bGV0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvc2VydmVyL1VwbG9hZFBhY2tTZXJ2bGV0LmphdmEKaW5kZXggYzRmODQ1ZS4uYjBhMDdmMSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci9zcmMvb3JnL2VjbGlwc2UvamdpdC9odHRwL3NlcnZlci9VcGxvYWRQYWNrU2VydmxldC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIvc3JjL29yZy9lY2xpcHNlL2pnaXQvaHR0cC9zZXJ2ZXIvVXBsb2FkUGFja1NlcnZsZXQuamF2YQpAQCAtMTEsNyArMTEsNiBAQAogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyOwogCiBpbXBvcnQgc3RhdGljIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLlNDX0ZPUkJJRERFTjsKLWltcG9ydCBzdGF0aWMgamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVzcG9uc2UuU0NfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogaW1wb3J0IHN0YXRpYyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZS5TQ19VTkFVVEhPUklaRUQ7CiBpbXBvcnQgc3RhdGljIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlLlNDX1VOU1VQUE9SVEVEX01FRElBX1RZUEU7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuR2l0U21hcnRIdHRwVG9vbHMuVVBMT0FEX1BBQ0s7CkBAIC0yMiw2ICsyMSw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuU2VydmxldFV0aWxzLmNvbnN1bWVSZXF1ZXN0Qm9keTsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5TZXJ2bGV0VXRpbHMuZ2V0SW5wdXRTdHJlYW07CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuU2VydmxldFV0aWxzLmdldFJlcG9zaXRvcnk7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuVXBsb2FkUGFja0Vycm9ySGFuZGxlci5zdGF0dXNDb2RlRm9yVGhyb3dhYmxlOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQuSERSX1VTRVJfQUdFTlQ7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpAQCAtMTY5LDYgKzE2OSw3IEBAIHB1YmxpYyB2b2lkIGRvUG9zdChIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBIdHRwU2VydmxldFJlc3BvbnNlIHJzcCkKIAogCQlVcGxvYWRQYWNrUnVubmFibGUgciA9ICgpIC0+IHsKIAkJCVVwbG9hZFBhY2sgdXAgPSAoVXBsb2FkUGFjaykgcmVxLmdldEF0dHJpYnV0ZShBVFRSSUJVVEVfSEFORExFUik7CisJCQkvLyB0byBiZSBleHBsaWNpdGx5IGNsb3NlZCBieSBjYWxsZXIKIAkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCiAJCQlTbWFydE91dHB1dFN0cmVhbSBvdXQgPSBuZXcgU21hcnRPdXRwdXRTdHJlYW0ocmVxLCByc3AsIGZhbHNlKSB7CiAJCQkJQE92ZXJyaWRlCkBAIC0yMTcsOSArMjE4LDEyIEBAIHByaXZhdGUgdm9pZCBkZWZhdWx0VXBsb2FkUGFja0hhbmRsZXIoSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcSwKIAkJCWxvZyh1cC5nZXRSZXBvc2l0b3J5KCksIGUpOwogCQkJaWYgKCFyc3AuaXNDb21taXR0ZWQoKSkgewogCQkJCXJzcC5yZXNldCgpOwotCQkJCVN0cmluZyBtc2cgPSBlIGluc3RhbmNlb2YgUGFja1Byb3RvY29sRXhjZXB0aW9uID8gZS5nZXRNZXNzYWdlKCkKLQkJCQkJCTogbnVsbDsKLQkJCQlzZW5kRXJyb3IocmVxLCByc3AsIFNDX0lOVEVSTkFMX1NFUlZFUl9FUlJPUiwgbXNnKTsKKwkJCQlTdHJpbmcgbXNnID0gbnVsbDsKKwkJCQlpZiAoZSBpbnN0YW5jZW9mIFBhY2tQcm90b2NvbEV4Y2VwdGlvbgorCQkJCQkJfHwgZSBpbnN0YW5jZW9mIFNlcnZpY2VOb3RFbmFibGVkRXhjZXB0aW9uKSB7CisJCQkJCW1zZyA9IGUuZ2V0TWVzc2FnZSgpOworCQkJCX0KKwkJCQlzZW5kRXJyb3IocmVxLCByc3AsIHN0YXR1c0NvZGVGb3JUaHJvd2FibGUoZSksIG1zZyk7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDNhNjUxN2MuLjQxNTBiZGIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDcgKzMsNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKQEAgLTI2LDI2ICsyNiwyNiBAQAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwubG9nO3ZlcnNpb249IlsxMC4wLjAsMTEuMC4wKSIsCiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbC5zZWN1cml0eTt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwudGhyZWFkO3ZlcnNpb249IlsxMC4wLjAsMTEuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLmdsdWU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlci5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuYXBhY2hlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuZ2x1ZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLnJlc29sdmVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5oYW1jcmVzdDt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuaGFtY3Jlc3QuY29yZTt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC9wb20ueG1sCmluZGV4IDc2OTRjNDQuLjMzNmY0M2IgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvcG9tLnhtbApAQCAtMTgsNyArMTgsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L0hvb2tNZXNzYWdlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L0hvb2tNZXNzYWdlVGVzdC5qYXZhCmluZGV4IGRiOWYyYWUuLjIwZGUyNTYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9Ib29rTWVzc2FnZVRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9odHRwL3Rlc3QvSG9va01lc3NhZ2VUZXN0LmphdmEKQEAgLTk3LDYgKzk3LDcgQEAgcHVibGljIFJlY2VpdmVQYWNrIGNyZWF0ZShIdHRwU2VydmxldFJlcXVlc3QgcmVxLCBSZXBvc2l0b3J5IGRiKQogCQlzZXJ2ZXIuc2V0VXAoKTsKIAogCQlyZW1vdGVSZXBvc2l0b3J5ID0gc3JjLmdldFJlcG9zaXRvcnkoKTsKKwkJYWRkUmVwb1RvQ2xvc2UocmVtb3RlUmVwb3NpdG9yeSk7CiAJCXJlbW90ZVVSSSA9IHRvVVJJaXNoKGFwcCwgc3JjTmFtZSk7CiAKIAkJU3RvcmVkQ29uZmlnIGNmZyA9IHJlbW90ZVJlcG9zaXRvcnkuZ2V0Q29uZmlnKCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9odHRwL3Rlc3QvSHR0cENsaWVudFRlc3RzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9odHRwL3Rlc3QvSHR0cENsaWVudFRlc3RzLmphdmEKaW5kZXggZGYwOTNjMS4uMzQzOGM1MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L0h0dHBDbGllbnRUZXN0cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9IdHRwQ2xpZW50VGVzdHMuamF2YQpAQCAtMjMsNiArMjMsNyBAQAogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOwogaW1wb3J0IGphdmEubmV0LlVSSTsKIGltcG9ydCBqYXZhLm5ldC5VUkw7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIGltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0OwpAQCAtMzA4LDcgKzMwOSwxMCBAQCBwdWJsaWMgdm9pZCB0ZXN0TGlzdFJlbW90ZV9TbWFydF9VcGxvYWRQYWNrRGlzYWJsZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCQlmYWlsKCJjb25uZWN0aW9uIG9wZW5lZCBldmVuIHRob3VnaCBzZXJ2aWNlIGRpc2FibGVkIik7CiAJCQl9IGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZXJyKSB7CiAJCQkJU3RyaW5nIGV4cCA9IHNtYXJ0QXV0aE5vbmVVUkkgKyAiOiAiCi0JCQkJCQkrIEpHaXRUZXh0LmdldCgpLnNlcnZpY2VOb3RFbmFibGVkTm9OYW1lOworCQkJCQkJKyBNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCQkJSkdpdFRleHQuZ2V0KCkuc2VydmljZU5vdFBlcm1pdHRlZCwKKwkJCQkJCQkJc21hcnRBdXRoTm9uZVVSSS50b1N0cmluZygpICsgIi8iLAorCQkJCQkJCQkiZ2l0LXVwbG9hZC1wYWNrIik7CiAJCQkJYXNzZXJ0RXF1YWxzKGV4cCwgZXJyLmdldE1lc3NhZ2UoKSk7CiAJCQl9CiAJCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9NZWFzdXJlUGFja1NpemVUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9odHRwL3Rlc3QvTWVhc3VyZVBhY2tTaXplVGVzdC5qYXZhCmluZGV4IDlmZmExOWUuLjAwMGVlY2QgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9NZWFzdXJlUGFja1NpemVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L01lYXN1cmVQYWNrU2l6ZVRlc3QuamF2YQpAQCAtOTAsNiArOTAsNyBAQCBwdWJsaWMgUmVjZWl2ZVBhY2sgY3JlYXRlKEh0dHBTZXJ2bGV0UmVxdWVzdCByZXEsIFJlcG9zaXRvcnkgZGIpCiAJCXNlcnZlci5zZXRVcCgpOwogCiAJCXJlbW90ZVJlcG9zaXRvcnkgPSBzcmMuZ2V0UmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShyZW1vdGVSZXBvc2l0b3J5KTsKIAkJcmVtb3RlVVJJID0gdG9VUklpc2goYXBwLCBzcmNOYW1lKTsKIAogCQlTdG9yZWRDb25maWcgY2ZnID0gcmVtb3RlUmVwb3NpdG9yeS5nZXRDb25maWcoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2h0dHAvdGVzdC9TbWFydENsaWVudFNtYXJ0U2VydmVyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L1NtYXJ0Q2xpZW50U21hcnRTZXJ2ZXJUZXN0LmphdmEKaW5kZXggODg3ZTk3MC4uYjliMTBiNCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L1NtYXJ0Q2xpZW50U21hcnRTZXJ2ZXJUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaHR0cC90ZXN0L1NtYXJ0Q2xpZW50U21hcnRTZXJ2ZXJUZXN0LmphdmEKQEAgLTU3LDcgKzU3LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRIb2xkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuR2l0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLlRyYW5zcG9ydENvbmZpZ0NhbGxiYWNrOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlJlbW90ZVJlcG9zaXRvcnlFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTm9SZW1vdGVSZXBvc2l0b3J5RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5VbnN1cHBvcnRlZENyZWRlbnRpYWxJdGVtOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIuR2l0U2VydmxldDsKQEAgLTQ5Niw4ICs0OTYsOSBAQCBwdWJsaWMgdm9pZCB0ZXN0TGlzdFJlbW90ZV9CYWROYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBVUklTeW50YXhFeGNlcHRpb24gewogCQkJdHJ5IHsKIAkJCQl0Lm9wZW5GZXRjaCgpOwogCQkJCWZhaWwoImZldGNoIGNvbm5lY3Rpb24gb3BlbmVkIik7Ci0JCQl9IGNhdGNoIChSZW1vdGVSZXBvc2l0b3J5RXhjZXB0aW9uIG5vdEZvdW5kKSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKHVyaSArICI6IEdpdCByZXBvc2l0b3J5IG5vdCBmb3VuZCIsCisJCQl9IGNhdGNoIChOb1JlbW90ZVJlcG9zaXRvcnlFeGNlcHRpb24gbm90Rm91bmQpIHsKKwkJCQlhc3NlcnRFcXVhbHModXJpICsgIjogIiArIHVyaQorCQkJCQkJKyAiL2luZm8vcmVmcz9zZXJ2aWNlPWdpdC11cGxvYWQtcGFjayBub3QgZm91bmQ6IE5vdCBGb3VuZCIsCiAJCQkJCQlub3RGb3VuZC5nZXRNZXNzYWdlKCkpOwogCQkJfQogCQl9CkBAIC01MTAsNyArNTExLDcgQEAgcHVibGljIHZvaWQgdGVzdExpc3RSZW1vdGVfQmFkTmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgVVJJU3ludGF4RXhjZXB0aW9uIHsKIAkJYXNzZXJ0RXF1YWxzKGpvaW4odXJpLCAiaW5mby9yZWZzIiksIGluZm8uZ2V0UGF0aCgpKTsKIAkJYXNzZXJ0RXF1YWxzKDEsIGluZm8uZ2V0UGFyYW1ldGVycygpLnNpemUoKSk7CiAJCWFzc2VydEVxdWFscygiZ2l0LXVwbG9hZC1wYWNrIiwgaW5mby5nZXRQYXJhbWV0ZXIoInNlcnZpY2UiKSk7Ci0JCWFzc2VydEVxdWFscygyMDAsIGluZm8uZ2V0U3RhdHVzKCkpOworCQlhc3NlcnRFcXVhbHMoNDA0LCBpbmZvLmdldFN0YXR1cygpKTsKIAkJYXNzZXJ0RXF1YWxzKCJhcHBsaWNhdGlvbi94LWdpdC11cGxvYWQtcGFjay1hZHZlcnRpc2VtZW50IiwKIAkJCQlpbmZvLmdldFJlc3BvbnNlSGVhZGVyKEhEUl9DT05URU5UX1RZUEUpKTsKIAl9CkBAIC01MzgsNiArNTM5LDcgQEAgcHVibGljIHZvaWQgdGVzdEZldGNoQnlTSEExVW5yZWFjaGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCWFzc2VydFRydWUoZS5nZXRNZXNzYWdlKCkuY29udGFpbnMoCiAJCQkJCSJ3YW50ICIgKyB1bnJlYWNoYWJsZUNvbW1pdC5uYW1lKCkgKyAiIG5vdCB2YWxpZCIpKTsKIAkJfQorCQlhc3NlcnRMYXN0UmVxdWVzdFN0YXR1c0NvZGUoMjAwKTsKIAl9CiAKIAlAVGVzdApAQCAtNTYwLDYgKzU2Miw3IEBAIHByb3RlY3RlZCBNYXA8U3RyaW5nLCBSZWY+IGdldEFkdmVydGlzZWRSZWZzKFJlcG9zaXRvcnkgcmVwb3NpdG9yeSwKIAkJCWFzc2VydFRydWUoCiAJCQkJCWUuZ2V0TWVzc2FnZSgpLmNvbnRhaW5zKCJ3YW50ICIgKyBBLm5hbWUoKSArICIgbm90IHZhbGlkIikpOwogCQl9CisJCWFzc2VydExhc3RSZXF1ZXN0U3RhdHVzQ29kZSgyMDApOwogCX0KIAogCUBUZXN0CkBAIC05MTYsNiArOTE5LDcgQEAgcHVibGljIHZvaWQgdGVzdEluaXRpYWxDbG9uZV9SZWRpcmVjdE9uUG9zdEZvcmJpZGRlbigpIHRocm93cyBFeGNlcHRpb24gewogCQl9IGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZSkgewogCQkJYXNzZXJ0VHJ1ZShlLmdldE1lc3NhZ2UoKS5jb250YWlucygiMzAxIikpOwogCQl9CisJCWFzc2VydExhc3RSZXF1ZXN0U3RhdHVzQ29kZSgzMDEpOwogCX0KIAogCUBUZXN0CkBAIC05MzQsNiArOTM4LDcgQEAgcHVibGljIHZvaWQgdGVzdEluaXRpYWxDbG9uZV9SZWRpcmVjdEZvcmJpZGRlbigpIHRocm93cyBFeGNlcHRpb24gewogCQkJYXNzZXJ0VHJ1ZSgKIAkJCQkJZS5nZXRNZXNzYWdlKCkuY29udGFpbnMoImh0dHAuZm9sbG93UmVkaXJlY3RzIGlzIGZhbHNlIikpOwogCQl9CisJCWFzc2VydExhc3RSZXF1ZXN0U3RhdHVzQ29kZSgzMDEpOwogCX0KIAogCXByaXZhdGUgdm9pZCBhc3NlcnRGZXRjaFJlcXVlc3RzKExpc3Q8QWNjZXNzRXZlbnQ+IHJlcXVlc3RzLCBpbnQgaW5kZXgpIHsKQEAgLTE2MDcsNiArMTYxMiw3IEBAIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkV2FudCgpIHRocm93cyBFeGNlcHRpb24gewogCQkJYXNzZXJ0VHJ1ZShlcnIuZ2V0TWVzc2FnZSgpCiAJCQkJCS5jb250YWlucygid2FudCAiICsgaWQubmFtZSgpICsgIiBub3QgdmFsaWQiKSk7CiAJCX0KKwkJYXNzZXJ0TGFzdFJlcXVlc3RTdGF0dXNDb2RlKDIwMCk7CiAJfQogCiAJQFRlc3QKQEAgLTE2NTAsNyArMTY1Niw3IEBAIHB1YmxpYyB2b2lkIHRlc3RGZXRjaF9SZWZzVW5yZWFkYWJsZU9uVXBsb2FkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQkJZmFpbCgiU3VjY2Vzc2Z1bGx5IHNlcnZlZCByZWYgd2l0aCB2YWx1ZSAiICsgYy5nZXRSZWYobWFzdGVyKSk7CiAJCQl9IGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gZXJyKSB7CiAJCQkJYXNzZXJ0VHJ1ZSgiVW5leHBlY3RlZCBleGNlcHRpb24gbWVzc2FnZSAiICsgZXJyLmdldE1lc3NhZ2UoKSwKLQkJCQkJCWVyci5nZXRNZXNzYWdlKCkuY29udGFpbnMoIkludGVybmFsIHNlcnZlciBlcnJvciIpKTsKKwkJCQkJCWVyci5nZXRNZXNzYWdlKCkuY29udGFpbnMoIlNlcnZlciBFcnJvciIpKTsKIAkJCX0KIAkJfSBmaW5hbGx5IHsKIAkJCW5vUmVmU2VydmVyLnRlYXJEb3duKCk7CkBAIC0xODIxLDYgKzE4MjcsMTEgQEAgcHVibGljIHZvaWQgdGVzdFB1c2hfQ2h1bmtlZEVuY29kaW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQkJLmdldFJlc3BvbnNlSGVhZGVyKEhEUl9DT05URU5UX1RZUEUpKTsKIAl9CiAKKwlwcml2YXRlIHZvaWQgYXNzZXJ0TGFzdFJlcXVlc3RTdGF0dXNDb2RlKGludCBzdGF0dXNDb2RlKSB7CisJCUxpc3Q8QWNjZXNzRXZlbnQ+IHJlcXVlc3RzID0gZ2V0UmVxdWVzdHMoKTsKKwkJYXNzZXJ0RXF1YWxzKHN0YXR1c0NvZGUsIHJlcXVlc3RzLmdldChyZXF1ZXN0cy5zaXplKCkgLSAxKS5nZXRTdGF0dXMoKSk7CisJfQorCiAJcHJpdmF0ZSB2b2lkIGVuYWJsZVJlY2VpdmVQYWNrKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJZmluYWwgU3RvcmVkQ29uZmlnIGNmZyA9IHJlbW90ZVJlcG9zaXRvcnkuZ2V0Q29uZmlnKCk7CiAJCWNmZy5zZXRCb29sZWFuKCJodHRwIiwgbnVsbCwgInJlY2VpdmVwYWNrIiwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggYzIxZjgzNS4uZDAzNTA3MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CkBAIC0yMSwxNyArMjEsMTcgQEAKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmxvZzt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzEwLjAuMCwxMS4wLjApIiwKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnNzbDt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5odHRwLnNlcnZlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuc2xmNGouaGVscGVyczt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSI2LjAuMSI7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LAogICAgb3JnLmVjbGlwc2UuamdpdC5qdW5pdCwKICAgIGphdmF4LnNlcnZsZXQuaHR0cCwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDk4ZmRlMDYuLjE5MTQyYzUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3BvbS54bWwKaW5kZXggYjY2OTkxZi4uZDg4M2UwMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQtcGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHA8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Lmh0dHAvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvaHR0cC9IdHRwVGVzdENhc2UuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9odHRwL0h0dHBUZXN0Q2FzZS5qYXZhCmluZGV4IDNlN2M4NGYuLjg3N2I5MTggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9odHRwL0h0dHBUZXN0Q2FzZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9odHRwL0h0dHBUZXN0Q2FzZS5qYXZhCkBAIC0yMiw2ICsyMiw3IEBACiBpbXBvcnQgamF2YS51dGlsLlNldDsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpldHR5LnNlcnZsZXQuU2VydmxldENvbnRleHRIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlLkZpbGVSZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuTG9jYWxEaXNrUmVwb3NpdG9yeVRlc3RDYXNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuVGVzdFJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQW55T2JqZWN0SWQ7CkBAIC04MCw3ICs4MSw5IEBAIHByb3RlY3RlZCBBcHBTZXJ2ZXIgY3JlYXRlU2VydmVyKCkgewogCSAqLwogCXByb3RlY3RlZCBUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBjcmVhdGVUZXN0UmVwb3NpdG9yeSgpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gbmV3IFRlc3RSZXBvc2l0b3J5PD4oY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSk7CisJCWZpbmFsIEZpbGVSZXBvc2l0b3J5IHJlcG9zaXRvcnkgPSBjcmVhdGVCYXJlUmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShyZXBvc2l0b3J5KTsKKwkJcmV0dXJuIG5ldyBUZXN0UmVwb3NpdG9yeTw+KHJlcG9zaXRvcnkpOwogCX0KIAogCS8qKgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCA4ZDYyOWVkLi42MDg1OGQ4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw0NiArMyw0NiBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1JbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS5zc2hkLmNvbW1vbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNvbmZpZy5rZXlzO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZmlsZS52aXJ0dWFsZnM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5oZWxwZXJzO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uaW87dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXg7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXlwcm92aWRlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNlc3Npb247dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zaWduYXR1cmU7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwubG9nZ2luZzt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnRocmVhZHM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvcmU7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLmF1dGg7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5hdXRoLmdzczt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLmF1dGgua2V5Ym9hcmQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5hdXRoLnBhc3N3b3JkO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuY29tbWFuZDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLnNlc3Npb247dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5zaGVsbDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLnN1YnN5c3RlbTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2Z0cDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zZXJ2ZXI7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUuc3NoZC5jb21tb247dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb25maWcua2V5czt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmZpbGUudmlydHVhbGZzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uaGVscGVyczt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmlvO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V5cHJvdmlkZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zZXNzaW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2lnbmF0dXJlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5idWZmZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmxvZ2dpbmc7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnNlY3VyaXR5O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC50aHJlYWRzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb3JlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5hdXRoO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuYXV0aC5nc3M7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5hdXRoLmtleWJvYXJkO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuYXV0aC5wYXNzd29yZDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLmNvbW1hbmQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5zZXNzaW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuc2hlbGw7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5zdWJzeXN0ZW07dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNmdHA7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNmdHAuc2VydmVyO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQuZXhwZXJpbWVudGFsLnRoZW9yaWVzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLnNsZjRqO3ZlcnNpb249IlsxLjcuMCwyLjAuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iNi4wLjEiCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iNi4xLjEiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggNzEzMmI1Yi4uNDEyNDZiYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaCAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaDt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuc3NoL3BvbS54bWwKaW5kZXggNzZiZGNhMS4uMDdkMDIxOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2gvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g8L2FydGlmYWN0SWQ+CkBAIC01NSw2ICs1NSwxNiBAQAogICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zc2hkPC9ncm91cElkPgogICAgICAgPGFydGlmYWN0SWQ+c3NoZC1zZnRwPC9hcnRpZmFjdElkPgogICAgICAgPHZlcnNpb24+JHthcGFjaGUtc3NoZC12ZXJzaW9ufTwvdmVyc2lvbj4KKyAgICAgIDxleGNsdXNpb25zPgorICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc3NoZDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3NoZC1jb3JlPC9hcnRpZmFjdElkPgorICAgICAgICAgIDwvZXhjbHVzaW9uPgorICAgICAgICAgIDxleGNsdXNpb24+CisgICAgICAgICAgICAgIDxncm91cElkPm9yZy5hcGFjaGUuc3NoZDwvZ3JvdXBJZD4KKyAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+c3NoZC1jb21tb248L2FydGlmYWN0SWQ+CisgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICA8L2V4Y2x1c2lvbnM+CiAgICAgPC9kZXBlbmRlbmN5PgogCiAgICAgPGRlcGVuZGVuY3k+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Ly5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Ly5zZXR0aW5ncy8uYXBpX2ZpbHRlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE3YTcyZgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycwpAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxjb21wb25lbnQgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuanVuaXQiIHZlcnNpb249IjIiPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9Mb2NhbERpc2tSZXBvc2l0b3J5VGVzdENhc2UuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5qdW5pdC5Mb2NhbERpc2tSZXBvc2l0b3J5VGVzdENhc2UiPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzY2NTg0ODEiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LkxvY2FsRGlza1JlcG9zaXRvcnlUZXN0Q2FzZSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJjdXJyZW50VGVzdCIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI2LjAuMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJjdXJyZW50VGVzdCIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKzwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggMWYwMjFkYS4uN2EzYjIwMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDM1ICszLDM1IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5CiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwudGltZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVsZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVubmVyO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LnJ1bm5lcnM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVubmVycy5tb2RlbDt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5zbGY0ajt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iNi4wLjEiOworRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZSwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLApAQCAtNDQsNCArNDQsNCBAQAogICAgb3JnLmp1bml0LnJ1bm5lcnMubW9kZWwsCiAgICBvcmcuanVuaXQucnVubmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLnRpbWUiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQudGltZTt2ZXJzaW9uPSI2LjAuMSI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lIgorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQudGltZTt2ZXJzaW9uPSI2LjEuMSI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCAxNTZlNTlhLi4yNTg3NmM3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0IC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249IjYuMS4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3BvbS54bWwKaW5kZXggZWYyYjk0Ni4uMmMyNjBlMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvcG9tLnhtbApAQCAtMTksNyArMTksNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuanVuaXQ8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L0xvY2FsRGlza1JlcG9zaXRvcnlUZXN0Q2FzZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9qdW5pdC9Mb2NhbERpc2tSZXBvc2l0b3J5VGVzdENhc2UuamF2YQppbmRleCA0OTRkMmYzLi41OTY2MmNlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2p1bml0L0xvY2FsRGlza1JlcG9zaXRvcnlUZXN0Q2FzZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvanVuaXQvTG9jYWxEaXNrUmVwb3NpdG9yeVRlc3RDYXNlLmphdmEKQEAgLTQ1LDYgKzQ1LDggQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3lzdGVtUmVhZGVyOwogaW1wb3J0IG9yZy5qdW5pdC5BZnRlcjsKIGltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworaW1wb3J0IG9yZy5qdW5pdC5SdWxlOworaW1wb3J0IG9yZy5qdW5pdC5ydWxlcy5UZXN0TmFtZTsKIAogLyoqCiAgKiBKVW5pdCBUZXN0Q2FzZSB3aXRoIHNwZWNpYWxpemVkIHN1cHBvcnQgZm9yIHRlbXBvcmFyeSBsb2NhbCByZXBvc2l0b3J5LgpAQCAtODQsMTggKzg2LDM1IEBAIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBMb2NhbERpc2tSZXBvc2l0b3J5VGVzdENhc2UgewogCXByaXZhdGUgRmlsZSB0bXA7CiAKIAkvKioKKwkgKiBUaGUgY3VycmVudCB0ZXN0IG5hbWUuCisJICoKKwkgKiBAc2luY2UgNi4wLjEKKwkgKi8KKwlAUnVsZQorCXB1YmxpYyBUZXN0TmFtZSBjdXJyZW50VGVzdCA9IG5ldyBUZXN0TmFtZSgpOworCisJcHJpdmF0ZSBTdHJpbmcgZ2V0VGVzdE5hbWUoKSB7CisJCVN0cmluZyBuYW1lID0gY3VycmVudFRlc3QuZ2V0TWV0aG9kTmFtZSgpOworCQluYW1lID0gbmFtZS5yZXBsYWNlQWxsKCJbXmEtekEtWjAtOV0iLCAiXyIpOworCQluYW1lID0gbmFtZS5yZXBsYWNlQWxsKCJfXysiLCAiXyIpOworCQlpZiAobmFtZS5zdGFydHNXaXRoKCJfIikpIHsKKwkJCW5hbWUgPSBuYW1lLnN1YnN0cmluZygxKTsKKwkJfQorCQlyZXR1cm4gbmFtZTsKKwl9CisKKwkvKioKIAkgKiBTZXR1cCB0ZXN0CiAJICoKIAkgKiBAdGhyb3dzIEV4Y2VwdGlvbgogCSAqLwogCUBCZWZvcmUKIAlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQl0bXAgPSBGaWxlLmNyZWF0ZVRlbXBGaWxlKCJqZ2l0X3Rlc3RfIiwgIl90bXAiKTsKKwkJdG1wID0gRmlsZS5jcmVhdGVUZW1wRmlsZSgiamdpdF8iICsgZ2V0VGVzdE5hbWUoKSArICdfJywgIl90bXAiKTsKIAkJQ2xlYW51cFRocmVhZC5kZWxldGVPblNodXRkb3duKHRtcCk7CiAJCWlmICghdG1wLmRlbGV0ZSgpIHx8ICF0bXAubWtkaXIoKSkgewogCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKCJDYW5ub3QgY3JlYXRlICIgKyB0bXApOwogCQl9Ci0KIAkJbW9ja1N5c3RlbVJlYWRlciA9IG5ldyBNb2NrU3lzdGVtUmVhZGVyKCk7CiAJCVN5c3RlbVJlYWRlci5zZXRJbnN0YW5jZShtb2NrU3lzdGVtUmVhZGVyKTsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBiMmE4MmMyLi5jYmI4MTM1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCkBAIC0yNiwyNCArMjYsMjQgQEAKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLmxvZzt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzEwLjAuMCwxMS4wLjApIiwKICBvcmcuZWNsaXBzZS5qZXR0eS51dGlsLnRocmVhZDt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuaGFtY3Jlc3QuY29yZTt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVsZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC9wb20ueG1sCmluZGV4IGVmODc1MWUuLjFiYWI2MjAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9QdXNoVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL3NlcnZlci9mcy9QdXNoVGVzdC5qYXZhCmluZGV4IDcwYzA0NjMuLjA2NzA4YjMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9zZXJ2ZXIvZnMvUHVzaFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvc2VydmVyL2ZzL1B1c2hUZXN0LmphdmEKQEAgLTExLDYgKzExLDcgQEAKIAogaW1wb3J0IHN0YXRpYyBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzg7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CkBAIC0yOSw2ICszMCw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2V2FsazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZS5GaWxlUmVwb3NpdG9yeUJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVmU3BlYzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5VUklpc2g7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5UcmVlV2FsazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlci5QYXRoRmlsdGVyOwpAQCAtMTI4LDQgKzEzMCwxOCBAQCBwdWJsaWMgdm9pZCB0ZXN0UHVzaFNpbXBsZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkJCXNlcnZlci5nZXRSZXF1ZXN0cygpLnRvU3RyaW5nKCkpOwogCX0KIAorCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlbGV0ZUJyYW5jaCgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgYnJhbmNoID0gIm5ldy1icmFuY2giOworCQlnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZShicmFuY2gpLmNhbGwoKTsKKworCQlTdHJpbmcgZGVzdFJlZiA9IENvbnN0YW50cy5SX0hFQURTICsgYnJhbmNoOworCQlnaXQucHVzaCgpLnNldFJlZlNwZWNzKG5ldyBSZWZTcGVjKCkuc2V0U291cmNlKGJyYW5jaCkuc2V0RGVzdGluYXRpb24oZGVzdFJlZikpLmNhbGwoKTsKKworCQkvLyBTaG91bGQgbm90IGZhaWwgb24gcHVzaC4KKwkJZ2l0LmJyYW5jaERlbGV0ZSgpLnNldEJyYW5jaE5hbWVzKGJyYW5jaCkuc2V0Rm9yY2UodHJ1ZSkuY2FsbCgpOworCQlnaXQucHVzaCgpLnNldFJlZlNwZWNzKG5ldyBSZWZTcGVjKCkuc2V0U291cmNlKG51bGwpLnNldERlc3RpbmF0aW9uKGRlc3RSZWYpKS5jYWxsKCk7CisKKwkJYXNzZXJ0VHJ1ZShzZXJ2ZXIuZ2V0UmVxdWVzdHMoKS5pc0VtcHR5KCkpOworCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCAzYTQ0NDhiLi5jZDhiZGUzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDE5ICszLDE5IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcgogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249IjYuMC4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXI7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0iamF2YXguc2VydmxldC5odHRwLAogICAgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuZnM7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJqYXZheC5zZXJ2bGV0LAogICAgamF2YXguc2VydmxldC5odHRwLAogICAgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnMzO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuaW50ZXJuYWw7dmVyc2lvbj0iNi4xLjEiO3gtaW50ZXJuYWw6PXRydWUsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLnMzO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYiIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKQEAgLTI0LDE1ICsyNCwxNSBAQAogIGphdmF4LnNlcnZsZXQuYW5ub3RhdGlvbjt2ZXJzaW9uPSJbMy4xLjAsNS4wLjApIiwKICBqYXZheC5zZXJ2bGV0Lmh0dHA7dmVyc2lvbj0iWzMuMS4wLDUuMC4wKSIsCiAgb3JnLmFwYWNoZS5odHRwO3ZlcnNpb249Ils0LjMuMCw1LjAuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5hcGFjaGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5zbGY0ajt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggNTAxMWEyMi4uNWE1YjIzYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlciAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcG9tLnhtbAppbmRleCBjMmQ2NTk2Li5hZTI3MTUzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlcjwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IGI4NzA3OTQuLmUzYzBhZjggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMywyNCArMywyNyBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKK0ltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCiAgb3JnLmhhbWNyZXN0LmNvcmU7dmVyc2lvbj0iWzEuMS4wLDMuMC4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LnJ1bm5lcjt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLAogIG9yZy5qdW5pdC5ydW5uZXJzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIKLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0O3ZlcnNpb249IjYuMC4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdCIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0O3ZlcnNpb249IjYuMS4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdCIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvcG9tLnhtbAppbmRleCBhODhjYTk0Li4xZDc4MmU2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL0xmc0NvbmZpZ0dpdFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL0xmc0NvbmZpZ0dpdFRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGEwNzEyCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzQ29uZmlnR2l0VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyLCBNYXR0aGlhcyBGcm9tbWUgPG1mcm9tbWVAZHNwYWNlLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnM7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLkdpdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5SZXNldENvbW1hbmQuUmVzZXRUeXBlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWwuTGZzQ29ubmVjdGlvbkZhY3Rvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5TdG9yZWRDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cC5IdHRwQ29ubmVjdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQ7CitpbXBvcnQgb3JnLmp1bml0LkFmdGVyQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LkJlZm9yZTsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlQ2xhc3M7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKKy8qKgorICogVGVzdCBpZiB0aGUgbGZzIGNvbmZpZyBpcyB1c2VkIGluIHRoZSBjb3JyZWN0IHdheSBkdXJpbmcgY2hlY2tvdXQuCisgKgorICogVHdvIGxmcy1maWxlcyBhcmUgY3JlYXRlZCwgb25lIHRoYXQgY29tZXMgYmVmb3JlIC5naXRhdHRyaWJ1dGVzIGFuZAorICogLmxmc2NvbmZpZyBpbiBnaXQgb3JkZXIgKCIuYWFhLnR4dCIpIGFuZCBvbmUgdGhhdCBjb21lcyBhZnRlciAoInp6ei50eHQiKS4KKyAqCisgKiBEdXJpbmcgY2hlY2tvdXQvcmVzZXQgaXQgaXMgdGVzdGVkIGlmIHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgdGhlIGxmcyBjb25maWcKKyAqIGlzIHVzZWQuCisgKgorICogVE9ETzogVGhlIGN1cnJlbnQgYmVoYXZpb3Igc2VlbXMgYSBsaXR0bGUgYml0IHN0cmFuZ2UvdW5pbnR1aXRpdmUuIFNvbWUgZmlsZXMKKyAqIGFyZSBjaGVja2VkIG91dCBiZWZvcmUgYW5kIHNvbWUgYWZ0ZXIgdGhlIGNvbmZpZyBmaWxlcy4gVGhpcyBsZWFkcyB0byB0aGUKKyAqIGJlaGF2aW9yLCB0aGF0IGR1cmluZyBhIHNpbmdsZSBjb21tYW5kIHRoZSBjb25maWcgY2hhbmdlcy4gU2luY2UgdGhpcyBzZWVtcworICogdG8gYmUgdGhlIHNhbWUgd2F5IGluIG5hdGl2ZSBnaXQsIHRoZSBiZWhhdmlvciBpcyBhY2NlcHRlZCBmb3Igbm93LgorICoKKyAqLworcHVibGljIGNsYXNzIExmc0NvbmZpZ0dpdFRlc3QgZXh0ZW5kcyBSZXBvc2l0b3J5VGVzdENhc2UgeworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNNVURHRV9OQU1FID0gb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkJVSUxUSU5fRklMVEVSX1BSRUZJWAorCQkJKyBDb25zdGFudHMuQVRUUl9GSUxURVJfRFJJVkVSX1BSRUZJWAorCQkJKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuQVRUUl9GSUxURVJfVFlQRV9TTVVER0U7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTEZTX1NFUlZFUl9VUkkxID0gImh0dHBzOi8vbGZzLnNlcnZlcjEvdGVzdC91cmkiOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEVYUEVDVEVEX1NFUlZFUl9VUkwxID0gTEZTX1NFUlZFUl9VUkkxCisJCQkrIFByb3RvY29sLk9CSkVDVFNfTEZTX0VORFBPSU5UOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIExGU19TRVJWRVJfVVJJMiA9ICJodHRwczovL2xmcy5zZXJ2ZXIyL3Rlc3QvdXJpIjsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBFWFBFQ1RFRF9TRVJWRVJfVVJMMiA9IExGU19TRVJWRVJfVVJJMgorCQkJKyBQcm90b2NvbC5PQkpFQ1RTX0xGU19FTkRQT0lOVDsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMRlNfU0VSVkVSX1VSSTMgPSAiaHR0cHM6Ly9sZnMuc2VydmVyMy90ZXN0L3VyaSI7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhQRUNURURfU0VSVkVSX1VSTDMgPSBMRlNfU0VSVkVSX1VSSTMKKwkJCSsgUHJvdG9jb2wuT0JKRUNUU19MRlNfRU5EUE9JTlQ7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRkFLRV9MRlNfUE9JTlRFUjEgPSAidmVyc2lvbiBodHRwczovL2dpdC1sZnMuZ2l0aHViLmNvbS9zcGVjL3YxXG4iCisJCQkrICJvaWQgc2hhMjU2OjZjZTlmYWI1MmVlOWE2YzRjMDk3ZGVmNGUwNDljNmFjZGViYTQ0Yzk5ZDI2ZTgzYmE4MGFkZWMxNDczYzliMmRcbiIKKwkJCSsgInNpemUgMjUzOTUyXG4iOworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZBS0VfTEZTX1BPSU5URVIyID0gInZlcnNpb24gaHR0cHM6Ly9naXQtbGZzLmdpdGh1Yi5jb20vc3BlYy92MVxuIgorCQkJKyAib2lkIHNoYTI1NjphNGI3MTFjZDk4OTg2M2FlMjAzODc1OGE2MjY3MjEzODM0N2FiYmJhZTQwNzZhN2FkM2E1NDVmZGE3ZDA4ZjgyXG4iCisJCQkrICJzaXplIDY3MDcyXG4iOworCisJcHJpdmF0ZSBzdGF0aWMgTGlzdDxTdHJpbmc+IGNoZWNrb3V0VVJMcyA9IG5ldyBBcnJheUxpc3Q8PigpOworCisJc3RhdGljIGNsYXNzIFNtdWRnZUZpbHRlck1vY2sgZXh0ZW5kcyBGaWx0ZXJDb21tYW5kIHsKKwkJcHVibGljIFNtdWRnZUZpbHRlck1vY2soUmVwb3NpdG9yeSBkYiwgSW5wdXRTdHJlYW0gaW4sCisJCQkJT3V0cHV0U3RyZWFtIG91dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCXN1cGVyKGluLCBvdXQpOworCQkJSHR0cENvbm5lY3Rpb24gbGZzU2VydmVyQ29ubiA9IExmc0Nvbm5lY3Rpb25GYWN0b3J5LmdldExmc0Nvbm5lY3Rpb24oZGIsCisJCQkJCUh0dHBTdXBwb3J0Lk1FVEhPRF9QT1NULCBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQpOworCQkJY2hlY2tvdXRVUkxzLmFkZChsZnNTZXJ2ZXJDb25uLmdldFVSTCgpLnRvU3RyaW5nKCkpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgcnVuKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJCS8vIFN0dXBpZCBubyBpbXBsCisJCQlpbi50cmFuc2ZlclRvKG91dCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlAQmVmb3JlQ2xhc3MKKwlwdWJsaWMgc3RhdGljIHZvaWQgaW5zdGFsbExmcygpIHsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKFNNVURHRV9OQU1FLCBTbXVkZ2VGaWx0ZXJNb2NrOjpuZXcpOworCX0KKworCUBBZnRlckNsYXNzCisJcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZUxmcygpIHsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnVucmVnaXN0ZXIoU01VREdFX05BTUUpOworCX0KKworCXByaXZhdGUgR2l0IGdpdDsKKworCUBPdmVycmlkZQorCUBCZWZvcmUKKwlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCQlnaXQgPSBuZXcgR2l0KGRiKTsKKwkJLy8gY29tbWl0IHNvbWV0aGluZworCQl3cml0ZVRyYXNoRmlsZSgiVGVzdC50eHQiLCAiSGVsbG8gd29ybGQiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJUZXN0LnR4dCIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCQkvLyBwcmVwYXJlIHRoZSBjb25maWcgZm9yIExGUworCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJY29uZmlnLnNldFN0cmluZygiZmlsdGVyIiwgImxmcyIsICJzbXVkZ2UiLCBTTVVER0VfTkFNRSk7CisJCWNvbmZpZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sIG51bGwsCisJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQVVUT0NSTEYsICJmYWxzZSIpOworCQljb25maWcuc2F2ZSgpOworCisJCWZpbGVCZWZvcmUgPSBudWxsOworCQlmaWxlQWZ0ZXIgPSBudWxsOworCQljb25maWdGaWxlID0gbnVsbDsKKwkJZ2l0QXR0cmlidXRlc0ZpbGUgPSBudWxsOworCX0KKworCUZpbGUgZmlsZUJlZm9yZTsKKworCUZpbGUgZmlsZUFmdGVyOworCisJRmlsZSBjb25maWdGaWxlOworCisJRmlsZSBnaXRBdHRyaWJ1dGVzRmlsZTsKKworCXByaXZhdGUgdm9pZCBjcmVhdGVMZnNGaWxlcyhTdHJpbmcgbGZzUG9pbnRlcikgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCS8qCisJCSAqIEZpbGVOYW1lcyAiLmFhYS50eHQiIGFuZCAienp6LnR4dCIgc2VlbSB0byBiZSBzdWZmaWNpZW50IHRvIGdldCB0aGUKKwkJICogZGVzaXJlZCBjaGVja291dCBvcmRlciBiZWZvcmUgYW5kIGFmdGVyICIubGZzY29uZmlnIiwgYXQgbGVhc3QgaW4gYQorCQkgKiBudW1iZXIgb2YgbWFudWFsIHRyaWVzLiBTaW5jZSB0aGUgZmlsZXMgdG8gY2hlY2tvdXQgYXJlIGNvbnRhaW5lZCBpbgorCQkgKiBhIHNldCAoc2VlIERpckNhY2hlQ2hlY2tvdXQ6OmRvQ2hlY2tvdXQpIHRoZSBvcmRlciBjYW5ub3QgYmUKKwkJICogZ3VhcmFudGVlZC4KKwkJICovCisKKwkJLy9GaWxlIHRvIGJlIGNoZWNrZWQgb3V0IGJlZm9yZSBsZnMgY29uZmlnCisJCVN0cmluZyBmaWxlTmFtZUJlZm9yZSA9ICIuYWFhLnR4dCI7CisJCWZpbGVCZWZvcmUgPSB3cml0ZVRyYXNoRmlsZShmaWxlTmFtZUJlZm9yZSwgbGZzUG9pbnRlcik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihmaWxlTmFtZUJlZm9yZSkuY2FsbCgpOworCisJCS8vIEZpbGUgdG8gYmUgY2hlY2tlZCBvdXQgYWZ0ZXIgbGZzIGNvbmZpZworCQlTdHJpbmcgZmlsZU5hbWVBZnRlciA9ICJ6enoudHh0IjsKKwkJZmlsZUFmdGVyID0gd3JpdGVUcmFzaEZpbGUoZmlsZU5hbWVBZnRlciwgbGZzUG9pbnRlcik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihmaWxlTmFtZUFmdGVyKS5jYWxsKCk7CisKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkNvbW1pdCBMRlMgUG9pbnRlciBmaWxlcyIpLmNhbGwoKTsKKwl9CisKKworCXByaXZhdGUgU3RyaW5nIGFkZExmc0NvbmZpZ0ZpbGVzKFN0cmluZyBsZnNTZXJ2ZXJVcmwpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBBZGQgY29uZmlnIGZpbGVzIHRvIHRoZSByZXBvCisJCVN0cmluZyBsZnNDb25maWcxID0gY3JlYXRlTGZzQ29uZmlnKGxmc1NlcnZlclVybCk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihDb25zdGFudHMuRE9UX0xGU19DT05GSUcpLmNhbGwoKTsKKwkJLy8gTW9kaWZ5IGdpdGF0dHJpYnV0ZXMgb24gc2Vjb25kIGNhbGwsIHRvIGZvcmNlIGNoZWNrb3V0IHRvby4KKwkJaWYgKGdpdEF0dHJpYnV0ZXNGaWxlID09IG51bGwpIHsKKwkJCWdpdEF0dHJpYnV0ZXNGaWxlID0gd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwKKwkJCQkiKi50eHQgZmlsdGVyPWxmcyIpOworCQl9IGVsc2UgeworCQkJZ2l0QXR0cmlidXRlc0ZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiLmdpdGF0dHJpYnV0ZXMiLAorCQkJCQkiKi50eHQgZmlsdGVyPWxmc1xuIik7CisJCX0KKworCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oIi5naXRhdHRyaWJ1dGVzIikuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiQ29tbWl0IGNvbmZpZyBmaWxlcyIpLmNhbGwoKTsKKwkJcmV0dXJuIGxmc0NvbmZpZzE7CisJfQorCisJcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTGZzQ29uZmlnKFN0cmluZyBsZnNTZXJ2ZXJVcmwpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZyBsZnNDb25maWcxID0gIltsZnNdXG4gICAgdXJsID0gIiArIGxmc1NlcnZlclVybDsKKwkJY29uZmlnRmlsZSA9IHdyaXRlVHJhc2hGaWxlKENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRywgbGZzQ29uZmlnMSk7CisJCXJldHVybiBsZnNDb25maWcxOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgY2hlY2tvdXRMZnNPYmplY3RzX3Jlc2V0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNyZWF0ZUxmc0ZpbGVzKEZBS0VfTEZTX1BPSU5URVIxKTsKKwkJU3RyaW5nIGxmc0NvbmZpZzEgPSBhZGRMZnNDb25maWdGaWxlcyhMRlNfU0VSVkVSX1VSSTEpOworCisJCS8vIERlbGV0ZSBmaWxlcyB0byBmb3JjZSBhY3Rpb24gb24gcmVzZXQKKwkJYXNzZXJ0VHJ1ZShjb25maWdGaWxlLmRlbGV0ZSgpKTsKKwkJYXNzZXJ0VHJ1ZShmaWxlQmVmb3JlLmRlbGV0ZSgpKTsKKwkJYXNzZXJ0VHJ1ZShmaWxlQWZ0ZXIuZGVsZXRlKCkpOworCisJCWFzc2VydFRydWUoZ2l0QXR0cmlidXRlc0ZpbGUuZGVsZXRlKCkpOworCisJCS8vIGNyZWF0ZSBjb25maWcgZmlsZSB3aXRoIGRpZmZlcmVudCB1cmwKKwkJY3JlYXRlTGZzQ29uZmlnKExGU19TRVJWRVJfVVJJMyk7CisKKwkJY2hlY2tvdXRVUkxzLmNsZWFyKCk7CisJCWdpdC5yZXNldCgpLnNldE1vZGUoUmVzZXRUeXBlLkhBUkQpLmNhbGwoKTsKKworCQljaGVja0ZpbGUoY29uZmlnRmlsZSwgbGZzQ29uZmlnMSk7CisJCWNoZWNrRmlsZShmaWxlQmVmb3JlLCBGQUtFX0xGU19QT0lOVEVSMSk7CisJCWNoZWNrRmlsZShmaWxlQWZ0ZXIsIEZBS0VfTEZTX1BPSU5URVIxKTsKKworCQlhc3NlcnRFcXVhbHMoMiwgY2hlY2tvdXRVUkxzLnNpemUoKSk7CisJCS8vIFRPRE86IFNob3VsZCBtYXkgYmUgRVhQRUNURURfU0VSVlJfVVJMMQorCQlhc3NlcnRFcXVhbHMoRVhQRUNURURfU0VSVkVSX1VSTDMsIGNoZWNrb3V0VVJMcy5nZXQoMCkpOworCQlhc3NlcnRFcXVhbHMoRVhQRUNURURfU0VSVkVSX1VSTDEsIGNoZWNrb3V0VVJMcy5nZXQoMSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgY2hlY2tvdXRMZnNPYmplY3RzX0JyYW5jaFN3aXRjaCgpIHRocm93cyBFeGNlcHRpb24geworCQkvLyBDcmVhdGUgYSBuZXcgYnJhbmNoICJVUkwxIiBhbmQgYWRkIGNvbmZpZyBmaWxlcworCQlnaXQuY2hlY2tvdXQoKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuc2V0TmFtZSgiVVJMMSIpLmNhbGwoKTsKKworCQljcmVhdGVMZnNGaWxlcyhGQUtFX0xGU19QT0lOVEVSMSk7CisJCVN0cmluZyBsZnNDb25maWcxID0gYWRkTGZzQ29uZmlnRmlsZXMoTEZTX1NFUlZFUl9VUkkxKTsKKworCQkvLyBDcmVhdGUgYSBzZWNvbmQgbmV3IGJyYW5jaCAiVVJMMiIgYW5kIGFkZCBjb25maWcgZmlsZXMKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLnNldE5hbWUoIlVSTDIiKS5jYWxsKCk7CisKKwkJY3JlYXRlTGZzRmlsZXMoRkFLRV9MRlNfUE9JTlRFUjIpOworCQlTdHJpbmcgbGZzQ29uZmlnMiA9IGFkZExmc0NvbmZpZ0ZpbGVzKExGU19TRVJWRVJfVVJJMik7CisKKwkJY2hlY2tGaWxlKGNvbmZpZ0ZpbGUsIGxmc0NvbmZpZzIpOworCQljaGVja0ZpbGUoZmlsZUJlZm9yZSwgRkFLRV9MRlNfUE9JTlRFUjIpOworCQljaGVja0ZpbGUoZmlsZUFmdGVyLCBGQUtFX0xGU19QT0lOVEVSMik7CisKKwkJY2hlY2tvdXRVUkxzLmNsZWFyKCk7CisJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIlVSTDEiKS5jYWxsKCk7CisKKwkJY2hlY2tGaWxlKGNvbmZpZ0ZpbGUsIGxmc0NvbmZpZzEpOworCQljaGVja0ZpbGUoZmlsZUJlZm9yZSwgRkFLRV9MRlNfUE9JTlRFUjEpOworCQljaGVja0ZpbGUoZmlsZUFmdGVyLCBGQUtFX0xGU19QT0lOVEVSMSk7CisKKwkJYXNzZXJ0RXF1YWxzKDIsIGNoZWNrb3V0VVJMcy5zaXplKCkpOworCQkvLyBUT0RPOiBTaG91bGQgbWF5IGJlIEVYUEVDVEVEX1NFUlZSX1VSTDEKKwkJYXNzZXJ0RXF1YWxzKEVYUEVDVEVEX1NFUlZFUl9VUkwyLCBjaGVja291dFVSTHMuZ2V0KDApKTsKKwkJYXNzZXJ0RXF1YWxzKEVYUEVDVEVEX1NFUlZFUl9VUkwxLCBjaGVja291dFVSTHMuZ2V0KDEpKTsKKworCQljaGVja291dFVSTHMuY2xlYXIoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiVVJMMiIpLmNhbGwoKTsKKworCQljaGVja0ZpbGUoY29uZmlnRmlsZSwgbGZzQ29uZmlnMik7CisJCWNoZWNrRmlsZShmaWxlQmVmb3JlLCBGQUtFX0xGU19QT0lOVEVSMik7CisJCWNoZWNrRmlsZShmaWxlQWZ0ZXIsIEZBS0VfTEZTX1BPSU5URVIyKTsKKworCQlhc3NlcnRFcXVhbHMoMiwgY2hlY2tvdXRVUkxzLnNpemUoKSk7CisJCS8vIFRPRE86IFNob3VsZCBtYXkgYmUgRVhQRUNURURfU0VSVlJfVVJMMgorCQlhc3NlcnRFcXVhbHMoRVhQRUNURURfU0VSVkVSX1VSTDEsIGNoZWNrb3V0VVJMcy5nZXQoMCkpOworCQlhc3NlcnRFcXVhbHMoRVhQRUNURURfU0VSVkVSX1VSTDIsIGNoZWNrb3V0VVJMcy5nZXQoMSkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgY2hlY2tvdXRMZnNPYmplY3RzX0JyYW5jaFN3aXRjaF9Nb2RpZmllZExvY2FsKCkKKwkJCXRocm93cyBFeGNlcHRpb24geworCisJCS8vIENyZWF0ZSBhIG5ldyBicmFuY2ggIlVSTDEiIGFuZCBhZGQgY29uZmlnIGZpbGVzCisJCWdpdC5jaGVja291dCgpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5zZXROYW1lKCJVUkwxIikuY2FsbCgpOworCisJCWNyZWF0ZUxmc0ZpbGVzKEZBS0VfTEZTX1BPSU5URVIxKTsKKwkJYWRkTGZzQ29uZmlnRmlsZXMoTEZTX1NFUlZFUl9VUkkxKTsKKworCQkvLyBDcmVhdGUgYSBzZWNvbmQgbmV3IGJyYW5jaCAiVVJMMiIgYW5kIGFkZCBjb25maWcgZmlsZXMKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLnNldE5hbWUoIlVSTDIiKS5jYWxsKCk7CisKKwkJY3JlYXRlTGZzRmlsZXMoRkFLRV9MRlNfUE9JTlRFUjIpOworCQlhZGRMZnNDb25maWdGaWxlcyhMRlNfU0VSVkVSX1VSSTEpOworCisJCS8vIGNyZWF0ZSBjb25maWcgZmlsZSB3aXRoIGRpZmZlcmVudCB1cmwKKwkJYXNzZXJ0VHJ1ZShjb25maWdGaWxlLmRlbGV0ZSgpKTsKKwkJU3RyaW5nIGxmc0NvbmZpZzMgPSBjcmVhdGVMZnNDb25maWcoTEZTX1NFUlZFUl9VUkkzKTsKKworCQljaGVja0ZpbGUoY29uZmlnRmlsZSwgbGZzQ29uZmlnMyk7CisJCWNoZWNrRmlsZShmaWxlQmVmb3JlLCBGQUtFX0xGU19QT0lOVEVSMik7CisJCWNoZWNrRmlsZShmaWxlQWZ0ZXIsIEZBS0VfTEZTX1BPSU5URVIyKTsKKworCQljaGVja291dFVSTHMuY2xlYXIoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiVVJMMSIpLmNhbGwoKTsKKworCQljaGVja0ZpbGUoZmlsZUJlZm9yZSwgRkFLRV9MRlNfUE9JTlRFUjEpOworCQljaGVja0ZpbGUoZmlsZUFmdGVyLCBGQUtFX0xGU19QT0lOVEVSMSk7CisJCWNoZWNrRmlsZShjb25maWdGaWxlLCBsZnNDb25maWczKTsKKworCQlhc3NlcnRFcXVhbHMoMiwgY2hlY2tvdXRVUkxzLnNpemUoKSk7CisKKwkJYXNzZXJ0RXF1YWxzKEVYUEVDVEVEX1NFUlZFUl9VUkwzLCBjaGVja291dFVSTHMuZ2V0KDApKTsKKwkJYXNzZXJ0RXF1YWxzKEVYUEVDVEVEX1NFUlZFUl9VUkwzLCBjaGVja291dFVSTHMuZ2V0KDEpKTsKKworCQljaGVja291dFVSTHMuY2xlYXIoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiVVJMMiIpLmNhbGwoKTsKKworCQljaGVja0ZpbGUoZmlsZUJlZm9yZSwgRkFLRV9MRlNfUE9JTlRFUjIpOworCQljaGVja0ZpbGUoZmlsZUFmdGVyLCBGQUtFX0xGU19QT0lOVEVSMik7CisJCWNoZWNrRmlsZShjb25maWdGaWxlLCBsZnNDb25maWczKTsKKworCQlhc3NlcnRFcXVhbHMoMiwgY2hlY2tvdXRVUkxzLnNpemUoKSk7CisJCWFzc2VydEVxdWFscyhFWFBFQ1RFRF9TRVJWRVJfVVJMMywgY2hlY2tvdXRVUkxzLmdldCgwKSk7CisJCWFzc2VydEVxdWFscyhFWFBFQ1RFRF9TRVJWRVJfVVJMMywgY2hlY2tvdXRVUkxzLmdldCgxKSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzR2l0VGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzR2l0VGVzdC5qYXZhCmluZGV4IDg5NjQzMTAuLjNlODNjOGUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL0xmc0dpdFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9MZnNHaXRUZXN0LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxLCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDIxLCAyMDIyIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC02OCw2ICs2OCwyNyBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCX0KIAogCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEJyYW5jaFN3aXRjaCgpIHRocm93cyBFeGNlcHRpb24geworCQlnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZSgiYWJyYW5jaCIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYWJyYW5jaCIpLmNhbGwoKTsKKwkJRmlsZSBhRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJhLmJpbiIsICJhYWEiKTsKKwkJd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImEuYmluIGZpbHRlcj1sZnMiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWNvbW1pdCIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOworCQlnaXQuYnJhbmNoQ3JlYXRlKCkuc2V0TmFtZSgiYmJyYW5jaCIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYmJyYW5jaCIpLmNhbGwoKTsKKwkJRmlsZSBiRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJiLmJpbiIsICJiYmIiKTsKKwkJd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImIuYmluIGZpbHRlcj1sZnMiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYmNvbW1pdCIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYWJyYW5jaCIpLmNhbGwoKTsKKwkJY2hlY2tGaWxlKGFGaWxlLCAiYWFhIik7CisJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJicmFuY2giKS5jYWxsKCk7CisJCWNoZWNrRmlsZShiRmlsZSwgImJiYiIpOworCX0KKworCUBUZXN0CiAJcHVibGljIHZvaWQgY2hlY2tvdXROb25MZnNQb2ludGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVN0cmluZyBjb250ZW50ID0gInNpemVfdFxuc29tZV9mdW5jdGlvbih2b2lkKiBwdHIpO1xuIjsKIAkJRmlsZSBzbWFsbEZpbGUgPSB3cml0ZVRyYXNoRmlsZSgiVGVzdC50eHQiLCBjb250ZW50KTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0Nvbm5lY3Rpb25GYWN0b3J5VGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29ubmVjdGlvbkZhY3RvcnlUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkY2I3ZAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0Nvbm5lY3Rpb25GYWN0b3J5VGVzdC5qYXZhCkBAIC0wLDAgKzEsMzE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyIE5haWwgU2FtYXRvdiA8c2FuYWlsQHlhbmRleC5ydT4gYW5kIG90aGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUU7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRocm93czsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKK2ltcG9ydCBqYXZhLmlvLlN0cmluZ1dyaXRlcjsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLkdpdDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5SZW1vdGVBZGRDb21tYW5kOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5GaWx0ZXJDb21tYW5kUmVnaXN0cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuQ2xlYW5GaWx0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuUHJvdG9jb2w7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5sZnMuU211ZGdlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9ycy5MZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuU3RvcmVkQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlVSSWlzaDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLkh0dHBDb25uZWN0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5IdHRwU3VwcG9ydDsKK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXJDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmVDbGFzczsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIExmc0Nvbm5lY3Rpb25GYWN0b3J5VGVzdCBleHRlbmRzIFJlcG9zaXRvcnlUZXN0Q2FzZSB7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgU01VREdFX05BTUUgPSBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuQlVJTFRJTl9GSUxURVJfUFJFRklYCisJCQkrIENvbnN0YW50cy5BVFRSX0ZJTFRFUl9EUklWRVJfUFJFRklYCisJCQkrIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5BVFRSX0ZJTFRFUl9UWVBFX1NNVURHRTsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDTEVBTl9OQU1FID0gb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkJVSUxUSU5fRklMVEVSX1BSRUZJWAorCQkJKyBDb25zdGFudHMuQVRUUl9GSUxURVJfRFJJVkVSX1BSRUZJWAorCQkJKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuQVRUUl9GSUxURVJfVFlQRV9DTEVBTjsKKworCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBMRlNfU0VSVkVSX1VSTDEgPSAiaHR0cHM6Ly9sZnMuc2VydmVyMS90ZXN0L3VyaSI7CisKKwlwcml2YXRlIGZpbmFsIHN0YXRpYyBTdHJpbmcgTEZTX1NFUlZFUl9VUkwyID0gImh0dHBzOi8vbGZzLnNlcnZlcjIvdGVzdC91cmkiOworCisJcHJpdmF0ZSBmaW5hbCBzdGF0aWMgU3RyaW5nIE9SSUdJTl9VUkwgPSAiaHR0cHM6Ly9naXQuc2VydmVyL3Rlc3QvdXJpIjsKKworCXByaXZhdGUgR2l0IGdpdDsKKworCUBCZWZvcmVDbGFzcworCXB1YmxpYyBzdGF0aWMgdm9pZCBpbnN0YWxsTGZzKCkgeworCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkucmVnaXN0ZXIoU01VREdFX05BTUUsIFNtdWRnZUZpbHRlci5GQUNUT1JZKTsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKENMRUFOX05BTUUsIENsZWFuRmlsdGVyLkZBQ1RPUlkpOworCX0KKworCUBBZnRlckNsYXNzCisJcHVibGljIHN0YXRpYyB2b2lkIHJlbW92ZUxmcygpIHsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnVucmVnaXN0ZXIoU01VREdFX05BTUUpOworCQlGaWx0ZXJDb21tYW5kUmVnaXN0cnkudW5yZWdpc3RlcihDTEVBTl9OQU1FKTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlAQmVmb3JlCisJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJZ2l0ID0gbmV3IEdpdChkYik7CisKKwkJLy8gSnVzdCB0byBoYXZlIGEgbm9uIGVtcHR5IHJlcG8KKwkJd3JpdGVUcmFzaEZpbGUoIlRlc3QudHh0IiwgIkhlbGxvIHdvcmxkIGZyb20gdGhlIExGUyBGYWN0b3J5IFRlc3QiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJUZXN0LnR4dCIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkluaXRpYWwgY29tbWl0IikuY2FsbCgpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgbGZzVXJsRnJvbVJlbW90ZVVybFdpdGhEb3RHaXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYWRkUmVtb3RlVXJsKCJodHRwczovL2xvY2FsaG9zdC9yZXBvLmdpdCIpOworCQljaGVja0xmc1VybCgiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwby5naXQvaW5mby9sZnMiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGxmc1VybEZyb21SZW1vdGVVcmxXaXRob3V0RG90R2l0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFkZFJlbW90ZVVybCgiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwbyIpOworCQljaGVja0xmc1VybCgiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwby5naXQvaW5mby9sZnMiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGxmc1VybEZyb21Mb2NhbENvbmZpZygpIHRocm93cyBFeGNlcHRpb24geworCQlhZGRSZW1vdGVVcmwoImh0dHBzOi8vbG9jYWxob3N0L3JlcG8iKTsKKworCQlTdG9yZWRDb25maWcgY2ZnID0gKChSZXBvc2l0b3J5KSBkYikuZ2V0Q29uZmlnKCk7CisJCWNmZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19TRUNUSU9OX0xGUywKKwkJCQludWxsLAorCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1VSTCwKKwkJCQkiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwby9sZnMiKTsKKwkJY2ZnLnNhdmUoKTsKKworCQljaGVja0xmc1VybCgiaHR0cHM6Ly9sb2NhbGhvc3QvcmVwby9sZnMiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGxmc1VybEZyb21PcmlnaW5Db25maWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYWRkUmVtb3RlVXJsKCJodHRwczovL2xvY2FsaG9zdC9yZXBvIik7CisKKwkJU3RvcmVkQ29uZmlnIGNmZyA9ICgoUmVwb3NpdG9yeSkgZGIpLmdldENvbmZpZygpOworCQljZmcuc2V0U3RyaW5nKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfU0VDVElPTl9MRlMsCisJCQkJb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUUsCisJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVVJMLAorCQkJCSJodHRwczovL2xvY2FsaG9zdC9yZXBvL2xmcyIpOworCQljZmcuc2F2ZSgpOworCisJCWNoZWNrTGZzVXJsKCJodHRwczovL2xvY2FsaG9zdC9yZXBvL2xmcyIpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgbGZzVXJsTm90Q29uZmlndXJlZCgpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRUaHJvd3MoTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbi5jbGFzcywKKwkJCQkoKSAtPiBMZnNDb25uZWN0aW9uRmFjdG9yeS5nZXRMZnNDb25uZWN0aW9uKGRiLAorCQkJCUh0dHBTdXBwb3J0Lk1FVEhPRF9QT1NULCBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9sZnN1cmxfbGZzY29uZmlnRnJvbVdvcmtpbmdEaXIoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlTGZzQ29uZmlnKCk7CisJCWNoZWNrTGZzVXJsKExGU19TRVJWRVJfVVJMMSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBjaGVja0dldExmc0Nvbm5lY3Rpb25fbGZzdXJsX2xmc2NvbmZpZ0Zyb21JbmRleCgpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVMZnNDb25maWcoKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRykuY2FsbCgpOworCQlkZWxldGVUcmFzaEZpbGUoQ29uc3RhbnRzLkRPVF9MRlNfQ09ORklHKTsKKwkJY2hlY2tMZnNVcmwoTEZTX1NFUlZFUl9VUkwxKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9sZnN1cmxfbGZzY29uZmlnRnJvbUhFQUQoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlTGZzQ29uZmlnKCk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihDb25zdGFudHMuRE9UX0xGU19DT05GSUcpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkNvbW1pdCBMRlMgQ29uZmlnIikuY2FsbCgpOworCisJCS8qCisJCSAqIHJlYWRpbmcgLmxmc2NvbmZpZyBmcm9tIEhFQUQgc2VlbXMgb25seSB0ZXN0YWJsZSB1c2luZyBhIGJhcmUgcmVwbywKKwkJICogc2luY2Ugb3RoZXJ3aXNlIHdvcmtpbmcgdHJlZSBvciBpbmRleCBhcmUgdXNlZAorCQkgKi8KKwkJRmlsZSBkaXJlY3RvcnkgPSBjcmVhdGVUZW1wRGlyZWN0b3J5KCJ0ZXN0QmFyZVJlcG8iKTsKKwkJdHJ5IChSZXBvc2l0b3J5IGJhcmVSZXBvRGIgPSBHaXQuY2xvbmVSZXBvc2l0b3J5KCkKKwkJCQkuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSkKKwkJCQkuc2V0VVJJKGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKSkuc2V0QmFyZSh0cnVlKQorCQkJCS5jYWxsKCkuZ2V0UmVwb3NpdG9yeSgpKSB7CisKKwkJCWNoZWNrTGZzVXJsKExGU19TRVJWRVJfVVJMMSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9yZW1vdGVfbGZzY29uZmlnRnJvbVdvcmtpbmdEaXIoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFkZFJlbW90ZVVybChPUklHSU5fVVJMKTsKKwkJd3JpdGVMZnNDb25maWcoTEZTX1NFUlZFUl9VUkwxLCAibGZzIiwgREVGQVVMVF9SRU1PVEVfTkFNRSwgInVybCIpOworCQljaGVja0xmc1VybChMRlNfU0VSVkVSX1VSTDEpOworCX0KKworCS8qKgorCSAqIFRlc3QgdGhlIGNvbmZpZyBmaWxlIHByZWNlZGVuY2UuCisJICoKKwkgKiBDaGVja2luZyBvbmx5IHdpdGggdGhlIGxvY2FsIHJlcG9zaXRvcnkgY29uZmlnIGlzIHN1ZmZpY2llbnQgc2luY2UgZnJvbQorCSAqIHRoYXQgcG9pbnQgdGhlICJub3JtYWwiIHByZWNlZGVuY2UgaXMgdXNlZC4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBjaGVja0dldExmc0Nvbm5lY3Rpb25fQ29uZmlnRmlsZVByZWNlZGVuY2VfbGZzY29uZmlnRnJvbVdvcmtpbmdEaXIoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlTGZzQ29uZmlnKCk7CisJCWNoZWNrTGZzVXJsKExGU19TRVJWRVJfVVJMMSk7CisKKwkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCWNvbmZpZy5zZXRTdHJpbmcoQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19TRUNUSU9OX0xGUywgbnVsbCwKKwkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9VUkwsIExGU19TRVJWRVJfVVJMMik7CisJCWNvbmZpZy5zYXZlKCk7CisKKwkJY2hlY2tMZnNVcmwoTEZTX1NFUlZFUl9VUkwyKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9JbnZhbGlkTGZzQ29uZmlnX1dvcmtpbmdEaXIoKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXdyaXRlSW52YWxpZExmc0NvbmZpZygpOworCQlMZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uIGFjdHVhbEV4Y2VwdGlvbiA9IGFzc2VydFRocm93cygKKwkJCQlMZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uLmNsYXNzLCAoKSAtPiB7CisJCQlMZnNDb25uZWN0aW9uRmFjdG9yeS5nZXRMZnNDb25uZWN0aW9uKGRiLCBIdHRwU3VwcG9ydC5NRVRIT0RfUE9TVCwKKwkJCQkJUHJvdG9jb2wuT1BFUkFUSU9OX0RPV05MT0FEKTsKKwkJfSk7CisJCWFzc2VydFRydWUoZ2V0U3RhY2tUcmFjZShhY3R1YWxFeGNlcHRpb24pCisJCQkJLmNvbnRhaW5zKCJJbnZhbGlkIGxpbmUgaW4gY29uZmlnIGZpbGUiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBjaGVja0dldExmc0Nvbm5lY3Rpb25fSW52YWxpZExmc0NvbmZpZ19JbmRleCgpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVJbnZhbGlkTGZzQ29uZmlnKCk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihDb25zdGFudHMuRE9UX0xGU19DT05GSUcpLmNhbGwoKTsKKwkJZGVsZXRlVHJhc2hGaWxlKENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRyk7CisJCUxmc0NvbmZpZ0ludmFsaWRFeGNlcHRpb24gYWN0dWFsRXhjZXB0aW9uID0gYXNzZXJ0VGhyb3dzKAorCQkJCUxmc0NvbmZpZ0ludmFsaWRFeGNlcHRpb24uY2xhc3MsICgpIC0+IHsKKwkJCUxmc0Nvbm5lY3Rpb25GYWN0b3J5LmdldExmc0Nvbm5lY3Rpb24oZGIsIEh0dHBTdXBwb3J0Lk1FVEhPRF9QT1NULAorCQkJCQlQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQpOworCQl9KTsKKwkJYXNzZXJ0VHJ1ZShnZXRTdGFja1RyYWNlKGFjdHVhbEV4Y2VwdGlvbikKKwkJCQkuY29udGFpbnMoIkludmFsaWQgbGluZSBpbiBjb25maWcgZmlsZSIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNoZWNrR2V0TGZzQ29ubmVjdGlvbl9JbnZhbGlkTGZzQ29uZmlnX0hFQUQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVJbnZhbGlkTGZzQ29uZmlnKCk7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihDb25zdGFudHMuRE9UX0xGU19DT05GSUcpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkNvbW1pdCBMRlMgQ29uZmlnIikuY2FsbCgpOworCisJCS8qCisJCSAqIHJlYWRpbmcgLmxmc2NvbmZpZyBmcm9tIEhFQUQgc2VlbXMgb25seSB0ZXN0YWJsZSB1c2luZyBhIGJhcmUgcmVwbywKKwkJICogc2luY2Ugb3RoZXJ3aXNlIHdvcmtpbmcgdHJlZSBvciBpbmRleCBhcmUgdXNlZAorCQkgKi8KKwkJRmlsZSBkaXJlY3RvcnkgPSBjcmVhdGVUZW1wRGlyZWN0b3J5KCJ0ZXN0QmFyZVJlcG8iKTsKKwkJdHJ5IChSZXBvc2l0b3J5IGJhcmVSZXBvRGIgPSBHaXQuY2xvbmVSZXBvc2l0b3J5KCkKKwkJCQkuc2V0RGlyZWN0b3J5KGRpcmVjdG9yeSkKKwkJCQkuc2V0VVJJKGRiLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9TdHJpbmcoKSkuc2V0QmFyZSh0cnVlKQorCQkJCS5jYWxsKCkuZ2V0UmVwb3NpdG9yeSgpKSB7CisJCQlMZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uIGFjdHVhbEV4Y2VwdGlvbiA9IGFzc2VydFRocm93cygKKwkJCQkJTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJKCkgLT4geworCQkJCQkJTGZzQ29ubmVjdGlvbkZhY3RvcnkuZ2V0TGZzQ29ubmVjdGlvbihkYiwKKwkJCQkJCQkJSHR0cFN1cHBvcnQuTUVUSE9EX1BPU1QsCisJCQkJCQkJCVByb3RvY29sLk9QRVJBVElPTl9ET1dOTE9BRCk7CisJCQkJCX0pOworCQkJYXNzZXJ0VHJ1ZShnZXRTdGFja1RyYWNlKGFjdHVhbEV4Y2VwdGlvbikKKwkJCQkJLmNvbnRhaW5zKCJJbnZhbGlkIGxpbmUgaW4gY29uZmlnIGZpbGUiKSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgYWRkUmVtb3RlVXJsKFN0cmluZyByZW1vdFVybCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVJlbW90ZUFkZENvbW1hbmQgYWRkID0gZ2l0LnJlbW90ZUFkZCgpOworCQlhZGQuc2V0VXJpKG5ldyBVUklpc2gocmVtb3RVcmwpKTsKKwkJYWRkLnNldE5hbWUob3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUUpOworCQlhZGQuY2FsbCgpOworCX0KKworCS8qKgorCSAqIFJldHVybnMgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBwcm92aWRlZCBleGNlcHRpb24gYXMgc3RyaW5nCisJICoKKwkgKiBAcGFyYW0gYWN0dWFsRXhjZXB0aW9uCisJICogQHJldHVybiBUaGUgZXhjZXB0aW9uIHN0YWNrIHRyYWNlIGFzIHN0cmluZworCSAqLworCXByaXZhdGUgU3RyaW5nIGdldFN0YWNrVHJhY2UoRXhjZXB0aW9uIGFjdHVhbEV4Y2VwdGlvbikgeworCQlTdHJpbmdXcml0ZXIgc3cgPSBuZXcgU3RyaW5nV3JpdGVyKCk7CisJCVByaW50V3JpdGVyIHB3ID0gbmV3IFByaW50V3JpdGVyKHN3KTsKKwkJYWN0dWFsRXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZShwdyk7CisJCXJldHVybiBzdy50b1N0cmluZygpOworCX0KKworCXByaXZhdGUgdm9pZCB3cml0ZUxmc0NvbmZpZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXdyaXRlTGZzQ29uZmlnKExGU19TRVJWRVJfVVJMMSwgImxmcyIsICJ1cmwiKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgd3JpdGVMZnNDb25maWcoU3RyaW5nIGxmc1VybCwgU3RyaW5nIHNlY3Rpb24sIFN0cmluZyBuYW1lKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJd3JpdGVMZnNDb25maWcobGZzVXJsLCBzZWN0aW9uLCBudWxsLCBuYW1lKTsKKwl9CisKKwkvKgorCSAqIFdyaXRlIHNpbXBsZSBsZnMgY29uZmlnIHdpdGggc2luZ2xlIGVudHJ5LiBEbyBub3QgdXNlIEZpbGVCYXNlZENvbmZpZyB0bworCSAqIGF2b2lkIGludHJvZHVjaW5nIG5ldyBkZXBlbmRlbmN5IChmb3Igbm93KS4KKwkgKi8KKwlwcml2YXRlIHZvaWQgd3JpdGVMZnNDb25maWcoU3RyaW5nIGxmc1VybCwgU3RyaW5nIHNlY3Rpb24sCisJCQlTdHJpbmcgc3Vic2VjdGlvbiwgU3RyaW5nIG5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZ0J1aWxkZXIgY29uZmlnID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJY29uZmlnLmFwcGVuZCgiWyIpOworCQljb25maWcuYXBwZW5kKHNlY3Rpb24pOworCQlpZiAoc3Vic2VjdGlvbiAhPSBudWxsKSB7CisJCQljb25maWcuYXBwZW5kKCIgXCIiKTsKKwkJCWNvbmZpZy5hcHBlbmQoc3Vic2VjdGlvbik7CisJCQljb25maWcuYXBwZW5kKCJcIiIpOworCQl9CisJCWNvbmZpZy5hcHBlbmQoIl1cbiIpOworCQljb25maWcuYXBwZW5kKCIgICAgIik7CisJCWNvbmZpZy5hcHBlbmQobmFtZSk7CisJCWNvbmZpZy5hcHBlbmQoIiA9ICIpOworCQljb25maWcuYXBwZW5kKGxmc1VybCk7CisJCXdyaXRlVHJhc2hGaWxlKENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRywgY29uZmlnLnRvU3RyaW5nKCkpOworCX0KKworCXByaXZhdGUgdm9pZCB3cml0ZUludmFsaWRMZnNDb25maWcoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl3cml0ZVRyYXNoRmlsZShDb25zdGFudHMuRE9UX0xGU19DT05GSUcsCisJCQkJIntsZnNdXG4gICAgdXJsID0gIiArIExGU19TRVJWRVJfVVJMMSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIGNoZWNrTGZzVXJsKFN0cmluZyBsZnNVcmwpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCUh0dHBDb25uZWN0aW9uIGxmc1NlcnZlckNvbm47CisJCWxmc1NlcnZlckNvbm4gPSBMZnNDb25uZWN0aW9uRmFjdG9yeS5nZXRMZnNDb25uZWN0aW9uKGRiLAorCQkJCUh0dHBTdXBwb3J0Lk1FVEhPRF9QT1NULCBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQpOworCisJCWFzc2VydEVxdWFscyhsZnNVcmwgKyBQcm90b2NvbC5PQkpFQ1RTX0xGU19FTkRQT0lOVCwKKwkJCQlsZnNTZXJ2ZXJDb25uLmdldFVSTCgpLnRvU3RyaW5nKCkpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZmJhNThmOC4uMDlmZmZmYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMzEgKzMsMzMgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQubGZzCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLmVycm9yczt2ZXJzaW9uPSI2LjAuMSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMuaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiO3gtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQubGZzLnRlc3Qsb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyLmZzLG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlciIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMubGliO3ZlcnNpb249IjYuMC4xIgorRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnM7dmVyc2lvbj0iNi4xLjEiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmludGVybmFsO3ZlcnNpb249IjYuMS4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0LG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mcyxvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLmxpYjt2ZXJzaW9uPSI2LjEuMSIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBjb20uZ29vZ2xlLmdzb247dmVyc2lvbj0iWzIuOC4yLDMuMC4wKSIsCiAgY29tLmdvb2dsZS5nc29uLnN0cmVhbTt2ZXJzaW9uPSJbMi44LjIsMy4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiO3Jlc29sdXRpb246PW9wdGlvbmFsLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiCisgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIjtyZXNvbHV0aW9uOj1vcHRpb25hbCwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlmZjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHA7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5zbGY0ajt2ZXJzaW9uPSJbMS43LjAsMi4wLjApIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IGE3MTViZTYuLjdhMmE0NDYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5sZnMgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zb3VyY2UKIEJ1bmRsZS1WZW5kb3I6IEVjbGlwc2Uub3JnIC0gSkdpdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgotRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9wb20ueG1sCmluZGV4IGViNTdkYjMuLjk0OWM1NjggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQubGZzPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc1RleHQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LnByb3BlcnRpZXMKaW5kZXggMGUwMGYxNC4uNjQyYjgzZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc1RleHQucHJvcGVydGllcworKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzVGV4dC5wcm9wZXJ0aWVzCkBAIC0xLDE5ICsxLDE5IEBACiBjb3JydXB0TG9uZ09iamVjdD1UaGUgY29udGVudCBoYXNoICcnezB9Jycgb2YgdGhlIGxvbmcgb2JqZWN0ICcnezF9JycgZG9lc24nJ3QgbWF0Y2ggaXRzIGlkLCB0aGUgY29ycnVwdCBvYmplY3Qgd2lsbCBiZSBkZWxldGVkLgotaW5jb3JyZWN0TE9OR19PQkpFQ1RfSURfTEVOR1RIPUluY29ycmVjdCBMT05HX09CSkVDVF9JRF9MRU5HVEguCi1pbmNvbnNpc3RlbnRNZWRpYWZpbGVMZW5ndGg9TWVkaWFmaWxlIHswfSBoYXMgdW5leHBlY3RlZCBsZW5ndGg7IGV4cGVjdGVkIHsxfSBidXQgZm91bmQgezJ9LgorZG90TGZzQ29uZmlnUmVhZEZhaWxlZD1SZWFkaW5nIC5sZnNjb25maWcgZmFpbGVkCiBpbmNvbnNpc3RlbnRDb250ZW50TGVuZ3RoPVVuZXhwZWN0ZWQgY29udGVudCBsZW5ndGggcmVwb3J0ZWQgYnkgTEZTIHNlcnZlciAoezB9KSwgZXhwZWN0ZWQgezF9IGJ1dCByZXBvcnRlZCB3YXMgezJ9CitpbmNvbnNpc3RlbnRNZWRpYWZpbGVMZW5ndGg9TWVkaWFmaWxlIHswfSBoYXMgdW5leHBlY3RlZCBsZW5ndGg7IGV4cGVjdGVkIHsxfSBidXQgZm91bmQgezJ9LgoraW5jb3JyZWN0TE9OR19PQkpFQ1RfSURfTEVOR1RIPUluY29ycmVjdCBMT05HX09CSkVDVF9JRF9MRU5HVEguCiBpbnZhbGlkTG9uZ0lkPUludmFsaWQgaWQ6IHswfQogaW52YWxpZExvbmdJZExlbmd0aD1JbnZhbGlkIGlkIGxlbmd0aCB7MH07IHNob3VsZCBiZSB7MX0KLWxmc1VuYXZhaWxhYmxlPUxGUyBpcyBub3QgYXZhaWxhYmxlIGZvciByZXBvc2l0b3J5IHswfQotcHJvdG9jb2xFcnJvcj1MRlMgUHJvdG9jb2wgRXJyb3IgezB9OiB7MX0KLXJlcXVpcmVkSGFzaEZ1bmN0aW9uTm90QXZhaWxhYmxlPVJlcXVpcmVkIGhhc2ggZnVuY3Rpb24gezB9IG5vdCBhdmFpbGFibGUuCi1yZXBvc2l0b3J5Tm90Rm91bmQ9UmVwb3NpdG9yeSB7MH0gbm90IGZvdW5kCi1yZXBvc2l0b3J5UmVhZE9ubHk9UmVwb3NpdG9yeSB7MH0gaXMgcmVhZC1vbmx5Ci1sZnNVbmF2YWlsYWJsZT1MRlMgaXMgbm90IGF2YWlsYWJsZSBmb3IgcmVwb3NpdG9yeSB7MH0KLWxmc1VuYXRob3JpemVkPU5vdCBhdXRob3JpemVkIHRvIHBlcmZvcm0gb3BlcmF0aW9uIHswfSBvbiByZXBvc2l0b3J5IHsxfQogbGZzRmFpbGVkVG9HZXRSZXBvc2l0b3J5PWZhaWxlZCB0byBnZXQgcmVwb3NpdG9yeSB7MH0KIGxmc05vRG93bmxvYWRVcmw9Ik5lZWQgdG8gZG93bmxvYWQgb2JqZWN0IGZyb20gTEZTIHNlcnZlciBidXQgY291bGRuJ3QgZGV0ZXJtaW5lIExGUyBzZXJ2ZXIgVVJMIgorbGZzVW5hdXRob3JpemVkPU5vdCBhdXRob3JpemVkIHRvIHBlcmZvcm0gb3BlcmF0aW9uIHswfSBvbiByZXBvc2l0b3J5IHsxfQorbGZzVW5hdmFpbGFibGU9TEZTIGlzIG5vdCBhdmFpbGFibGUgZm9yIHJlcG9zaXRvcnkgezB9CittaXNzaW5nTG9jYWxPYmplY3Q9IkxvY2FsIE9iamVjdCB7MH0gaXMgbWlzc2luZyIKK3Byb3RvY29sRXJyb3I9TEZTIFByb3RvY29sIEVycm9yIHswfTogezF9CityZXBvc2l0b3J5Tm90Rm91bmQ9UmVwb3NpdG9yeSB7MH0gbm90IGZvdW5kCityZXBvc2l0b3J5UmVhZE9ubHk9UmVwb3NpdG9yeSB7MH0gaXMgcmVhZC1vbmx5CityZXF1aXJlZEhhc2hGdW5jdGlvbk5vdEF2YWlsYWJsZT1SZXF1aXJlZCBoYXNoIGZ1bmN0aW9uIHswfSBub3QgYXZhaWxhYmxlLgogc2VydmVyRmFpbHVyZT1XaGVuIHRyeWluZyB0byBvcGVuIGEgY29ubmVjdGlvbiB0byB7MH0gdGhlIHNlcnZlciByZXNwb25kZWQgd2l0aCBhbiBlcnJvciBjb2RlLiByYz17MX0KLXdyb25nQW1vdXRPZkRhdGFSZWNlaXZlZD1XaGlsZSBkb3dubG9hZGluZyBkYXRhIGZyb20gdGhlIGNvbnRlbnQgc2VydmVyIHswfSB7MX0gYnl0ZXMgaGF2ZSBiZWVuIHJlY2VpdmVkIHdoaWxlIHsyfSBoYXZlIGJlZW4gZXhwZWN0ZWQKIHVzZXJDb25maWdJbnZhbGlkPSJVc2VyIGNvbmZpZyBmaWxlIHswfSBpbnZhbGlkIHsxfSIKLW1pc3NpbmdMb2NhbE9iamVjdD0iTG9jYWwgT2JqZWN0IHswfSBpcyBtaXNzaW5nIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK3dyb25nQW1vdW50T2ZEYXRhUmVjZWl2ZWQ9V2hpbGUgZG93bmxvYWRpbmcgZGF0YSBmcm9tIHRoZSBjb250ZW50IHNlcnZlciB7MH0gezF9IGJ5dGVzIGhhdmUgYmVlbiByZWNlaXZlZCB3aGlsZSB7Mn0gaGF2ZSBiZWVuIGV4cGVjdGVkClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL0xmc1ByZVB1c2hIb29rLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzUHJlUHVzaEhvb2suamF2YQppbmRleCBkNmNlODU1Li5lYmY0NmUwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzUHJlUHVzaEhvb2suamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvTGZzUHJlUHVzaEhvb2suamF2YQpAQCAtMTEzLDYgKzExMyw5IEBAIHByaXZhdGUgU2V0PExmc1BvaW50ZXI+IGZpbmRPYmplY3RzVG9QdXNoKCkgdGhyb3dzIElPRXhjZXB0aW9uLAogCiAJCXRyeSAoT2JqZWN0V2FsayB3YWxrID0gbmV3IE9iamVjdFdhbGsoZ2V0UmVwb3NpdG9yeSgpKSkgewogCQkJZm9yIChSZW1vdGVSZWZVcGRhdGUgdXAgOiByZWZzKSB7CisJCQkJaWYgKHVwLmlzRGVsZXRlKCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQogCQkJCXdhbGsuc2V0UmV3cml0ZVBhcmVudHMoZmFsc2UpOwogCQkJCWV4Y2x1ZGVSZW1vdGVSZWZzKHdhbGspOwogCQkJCXdhbGsubWFya1N0YXJ0KHdhbGsucGFyc2VDb21taXQodXAuZ2V0TmV3T2JqZWN0SWQoKSkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL1NtdWRnZUZpbHRlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL1NtdWRnZUZpbHRlci5qYXZhCmluZGV4IDM0MTE4ODcuLmMyNmExYmYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9TbXVkZ2VGaWx0ZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvU211ZGdlRmlsdGVyLmphdmEKQEAgLTIwNSw3ICsyMDUsNyBAQCBwdWJsaWMgc3RhdGljIENvbGxlY3Rpb248UGF0aD4gZG93bmxvYWRMZnNSZXNvdXJjZShMZnMgbGZzLCBSZXBvc2l0b3J5IGRiLAogCQkJCQlsb25nIGJ5dGVzQ29waWVkID0gRmlsZXMuY29weShjb250ZW50SW4sIHBhdGgpOwogCQkJCQlpZiAoYnl0ZXNDb3BpZWQgIT0gby5zaXplKSB7CiAJCQkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCi0JCQkJCQkJCUxmc1RleHQuZ2V0KCkud3JvbmdBbW91dE9mRGF0YVJlY2VpdmVkLAorCQkJCQkJCQlMZnNUZXh0LmdldCgpLndyb25nQW1vdW50T2ZEYXRhUmVjZWl2ZWQsCiAJCQkJCQkJCWNvbnRlbnRTZXJ2ZXJDb25uLmdldFVSTCgpLAogCQkJCQkJCQlMb25nLnZhbHVlT2YoYnl0ZXNDb3BpZWQpLAogCQkJCQkJCQlMb25nLnZhbHVlT2Yoby5zaXplKSkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9MZnNVbmF1dGhvcml6ZWQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9lcnJvcnMvTGZzVW5hdXRob3JpemVkLmphdmEKaW5kZXggMzY4ODlkYi4uMGRjNmFlYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2Vycm9ycy9MZnNVbmF1dGhvcml6ZWQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvZXJyb3JzL0xmc1VuYXV0aG9yaXplZC5qYXZhCkBAIC0zMSw3ICszMSw3IEBAIHB1YmxpYyBjbGFzcyBMZnNVbmF1dGhvcml6ZWQgZXh0ZW5kcyBMZnNFeGNlcHRpb24gewogCSAqICAgICAgICAgICAgdGhlIHJlcG9zaXRvcnkgbmFtZS4KIAkgKi8KIAlwdWJsaWMgTGZzVW5hdXRob3JpemVkKFN0cmluZyBvcGVyYXRpb24sIFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KExmc1RleHQuZ2V0KCkubGZzVW5hdGhvcml6ZWQsIG9wZXJhdGlvbiwKKwkJc3VwZXIoTWVzc2FnZUZvcm1hdC5mb3JtYXQoTGZzVGV4dC5nZXQoKS5sZnNVbmF1dGhvcml6ZWQsIG9wZXJhdGlvbiwKIAkJCQluYW1lKSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0NvbmZpZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0NvbmZpZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDM5NWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29uZmlnLmphdmEKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIsIE1hdHRoaWFzIEZyb21tZSA8bWZyb21tZUBkc3BhY2UuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5pbnRlcm5hbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5OdWxsYWJsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlRW50cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuQ29uZmlnSW52YWxpZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5lcnJvcnMuTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkJsb2JCYXNlZENvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZUcmVlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZXYWxrOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVCYXNlZENvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOworCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5IRUFEOworCisvKioKKyAqIEVuY2Fwc3VsYXRlIGFjY2VzcyB0byB0aGUgLmxmc2NvbmZpZy4KKyAqCisgKiBBY2NvcmRpbmcgdG8gdGhlIGRvY3VtZW50CisgKiBodHRwczovL2dpdGh1Yi5jb20vZ2l0LWxmcy9naXQtbGZzL2Jsb2IvbWFpbi9kb2NzL21hbi9naXQtbGZzLWNvbmZpZy41LnJvbm4KKyAqIHRoZSBvcmRlciB0byBmaW5kIHRoZSAubGZzY29uZmlnIGZpbGUgaXM6CisgKgorICogPHByZT4KKyAqICAgMS4gaW4gdGhlIHJvb3Qgb2YgdGhlIHdvcmtpbmcgdHJlZQorICogICAyLiBpbiB0aGUgaW5kZXgKKyAqICAgMy4gaW4gdGhlIEhFQUQsIGZvciBiYXJlIHJlcG9zaXRvcmllcyB0aGlzIGlzIHRoZSBvbmx5IHBsYWNlCisgKiAgICAgIHRoYXQgaXMgc2VhcmNoZWQKKyAqIDwvcHJlPgorICoKKyAqIFZhbHVlcyBmcm9tIHRoZSAubGZzY29uZmlnIGFyZSB1c2VkIG9ubHkgaWYgbm90IHNwZWNpZmllZCBpbiBhbm90aGVyIGdpdAorICogY29uZmlnIGZpbGUgdG8gYWxsb3cgbG9jYWwgb3ZlcnJpZGUgd2l0aG91dCBtb2RpZmljdGlvbiBvZiBhIGNvbW1pdHRlZCBmaWxlLgorICovCitwdWJsaWMgY2xhc3MgTGZzQ29uZmlnIHsKKwlwcml2YXRlIFJlcG9zaXRvcnkgZGI7CisJcHJpdmF0ZSBDb25maWcgZGVsZWdhdGU7CisKKwkvKioKKwkgKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIExmc0NvbmZpZy4KKwkgKgorCSAqIEBwYXJhbSBkYgorCSAqICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgcmVwbworCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlwdWJsaWMgTGZzQ29uZmlnKFJlcG9zaXRvcnkgZGIpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRoaXMuZGIgPSBkYjsKKwkJZGVsZWdhdGUgPSB0aGlzLmxvYWQoKTsKKwl9CisKKwkvKioKKwkgKiBSZWFkIHRoZSAubGZzY29uZmlnIGZpbGUgZnJvbSB0aGUgcmVwb3NpdG9yeQorCSAqCisJICogQHJldHVybiBUaGUgbG9hZGVkIGxmcyBjb25maWcgb3IgbnVsbCBpZiBpdCBkb2VzIG5vdCBleGlzdAorCSAqCisJICogQHRocm93cyBJT0V4Y2VwdGlvbgorCSAqLworCXByaXZhdGUgQ29uZmlnIGxvYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlDb25maWcgcmVzdWx0ID0gbnVsbDsKKworCQlpZiAoIWRiLmlzQmFyZSgpKSB7CisJCQlyZXN1bHQgPSBsb2FkRnJvbVdvcmtpbmdUcmVlKCk7CisJCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCQlyZXN1bHQgPSBsb2FkRnJvbUluZGV4KCk7CisJCQl9CisJCX0KKworCQlpZiAocmVzdWx0ID09IG51bGwpIHsKKwkJCXJlc3VsdCA9IGxvYWRGcm9tSGVhZCgpOworCQl9CisKKwkJaWYgKHJlc3VsdCA9PSBudWxsKSB7CisJCQlyZXN1bHQgPSBlbXB0eUNvbmZpZygpOworCQl9CisKKwkJcmV0dXJuIHJlc3VsdDsKKwl9CisKKwkvKioKKwkgKiBUcnkgdG8gcmVhZCB0aGUgbGZzIGNvbmZpZyBmcm9tIGEgZmlsZSBjYWxsZWQgLmxmc2NvbmZpZyBhdCB0aGUgdG9wIGxldmVsCisJICogb2YgdGhlIHdvcmtpbmcgdHJlZS4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGNvbmZpZywgb3IgPGNvZGU+bnVsbDwvY29kZT4KKwkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCisJICovCisJQE51bGxhYmxlCisJcHJpdmF0ZSBDb25maWcgbG9hZEZyb21Xb3JraW5nVHJlZSgpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlGaWxlIGxmc0NvbmZpZyA9IGRiLmdldEZTKCkucmVzb2x2ZShkYi5nZXRXb3JrVHJlZSgpLAorCQkJCUNvbnN0YW50cy5ET1RfTEZTX0NPTkZJRyk7CisJCWlmIChsZnNDb25maWcuZXhpc3RzKCkgJiYgbGZzQ29uZmlnLmlzRmlsZSgpKSB7CisJCQlGaWxlQmFzZWRDb25maWcgY29uZmlnID0gbmV3IEZpbGVCYXNlZENvbmZpZyhsZnNDb25maWcsIGRiLmdldEZTKCkpOworCQkJdHJ5IHsKKwkJCQljb25maWcubG9hZCgpOworCQkJCXJldHVybiBjb25maWc7CisJCQl9IGNhdGNoIChDb25maWdJbnZhbGlkRXhjZXB0aW9uIGUpIHsKKwkJCQl0aHJvdyBuZXcgTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbigKKwkJCQkJCUxmc1RleHQuZ2V0KCkuZG90TGZzQ29uZmlnUmVhZEZhaWxlZCwgZSk7CisJCQl9CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogVHJ5IHRvIHJlYWQgdGhlIGxmcyBjb25maWcgZnJvbSBhbiBlbnRyeSBjYWxsZWQgLmxmc2NvbmZpZyBjb250YWluZWQgaW4KKwkgKiB0aGUgaW5kZXguCisJICoKKwkgKiBAcmV0dXJuIHRoZSBjb25maWcsIG9yIDxjb2RlPm51bGw8L2NvZGU+IGlmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlATnVsbGFibGUKKwlwcml2YXRlIENvbmZpZyBsb2FkRnJvbUluZGV4KCkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlEaXJDYWNoZUVudHJ5IGVudHJ5ID0gZGIucmVhZERpckNhY2hlKCkKKwkJCQkJLmdldEVudHJ5KENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRyk7CisJCQlpZiAoZW50cnkgIT0gbnVsbCkgeworCQkJCXJldHVybiBuZXcgQmxvYkJhc2VkQ29uZmlnKG51bGwsIGRiLCBlbnRyeS5nZXRPYmplY3RJZCgpKTsKKwkJCX0KKwkJfSBjYXRjaCAoQ29uZmlnSW52YWxpZEV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgTGZzQ29uZmlnSW52YWxpZEV4Y2VwdGlvbigKKwkJCQkJTGZzVGV4dC5nZXQoKS5kb3RMZnNDb25maWdSZWFkRmFpbGVkLCBlKTsKKwkJfQorCQlyZXR1cm4gbnVsbDsKKwl9CisKKwkvKioKKwkgKiBUcnkgdG8gcmVhZCB0aGUgbGZzIGNvbmZpZyBmcm9tIGFuIGVudHJ5IGNhbGxlZCAubGZzY29uZmlnIGNvbnRhaW5lZCBpbgorCSAqIHRoZSBoZWFkIHJldmlzaW9uLgorCSAqCisJICogQHJldHVybiB0aGUgY29uZmlnLCBvciA8Y29kZT5udWxsPC9jb2RlPiBpZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdAorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKi8KKwlATnVsbGFibGUKKwlwcml2YXRlIENvbmZpZyBsb2FkRnJvbUhlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0cnkgKFJldldhbGsgcmV2V2FsayA9IG5ldyBSZXZXYWxrKGRiKSkgeworCQkJT2JqZWN0SWQgaGVhZENvbW1pdElkID0gZGIucmVzb2x2ZShIRUFEKTsKKwkJCWlmIChoZWFkQ29tbWl0SWQgPT0gbnVsbCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJUmV2Q29tbWl0IGNvbW1pdCA9IHJldldhbGsucGFyc2VDb21taXQoaGVhZENvbW1pdElkKTsKKwkJCVJldlRyZWUgdHJlZSA9IGNvbW1pdC5nZXRUcmVlKCk7CisJCQlUcmVlV2FsayB0cmVld2FsayA9IFRyZWVXYWxrLmZvclBhdGgoZGIsIENvbnN0YW50cy5ET1RfTEZTX0NPTkZJRywKKwkJCQkJdHJlZSk7CisJCQlpZiAodHJlZXdhbGsgIT0gbnVsbCkgeworCQkJCXJldHVybiBuZXcgQmxvYkJhc2VkQ29uZmlnKG51bGwsIGRiLCB0cmVld2Fsay5nZXRPYmplY3RJZCgwKSk7CisJCQl9CisJCX0gY2F0Y2ggKENvbmZpZ0ludmFsaWRFeGNlcHRpb24gZSkgeworCQkJdGhyb3cgbmV3IExmc0NvbmZpZ0ludmFsaWRFeGNlcHRpb24oCisJCQkJCUxmc1RleHQuZ2V0KCkuZG90TGZzQ29uZmlnUmVhZEZhaWxlZCwgZSk7CisJCX0KKwkJcmV0dXJuIG51bGw7CisJfQorCisJLyoqCisJICogQ3JlYXRlIGFuIGVtcHR5IGNvbmZpZyBhcyBmYWxsYmFjayB0byBhdm9pZCBudWxsIHBvaW50ZXIgY2hlY2tzLgorCSAqCisJICogQHJldHVybiBhbiBlbXB0eSBjb25maWcKKwkgKi8KKwlwcml2YXRlIENvbmZpZyBlbXB0eUNvbmZpZygpIHsKKwkJcmV0dXJuIG5ldyBDb25maWcoKTsKKwl9CisKKwkvKioKKwkgKiBHZXQgc3RyaW5nIHZhbHVlIG9yIG51bGwgaWYgbm90IGZvdW5kLgorCSAqCisJICogRmlyc3QgdHJpZXMgdG8gZmluZCB0aGUgdmFsdWUgaW4gdGhlIGdpdCBjb25maWcgZmlsZXMuIElmIG5vdCBmb3VuZCB0cmllcworCSAqIHRvIGZpbmQgZGF0YSBpbiAubGZzY29uZmlnLgorCSAqCisJICogQHBhcmFtIHNlY3Rpb24KKwkgKiAgICAgICAgICAgIHRoZSBzZWN0aW9uCisJICogQHBhcmFtIHN1YnNlY3Rpb24KKwkgKiAgICAgICAgICAgIHRoZSBzdWJzZWN0aW9uIGZvciB0aGUgdmFsdWUKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgdGhlIGtleSBuYW1lCisJICogQHJldHVybiBhIFN0cmluZyB2YWx1ZSBmcm9tIHRoZSBjb25maWcsIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBmb3VuZAorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0U3RyaW5nKGZpbmFsIFN0cmluZyBzZWN0aW9uLCBmaW5hbCBTdHJpbmcgc3Vic2VjdGlvbiwKKwkJCWZpbmFsIFN0cmluZyBuYW1lKSB7CisJCVN0cmluZyByZXN1bHQgPSBkYi5nZXRDb25maWcoKS5nZXRTdHJpbmcoc2VjdGlvbiwgc3Vic2VjdGlvbiwgbmFtZSk7CisJCWlmIChyZXN1bHQgPT0gbnVsbCkgeworCQkJcmVzdWx0ID0gZGVsZWdhdGUuZ2V0U3RyaW5nKHNlY3Rpb24sIHN1YnNlY3Rpb24sIG5hbWUpOworCQl9CisJCXJldHVybiByZXN1bHQ7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc0Nvbm5lY3Rpb25GYWN0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29ubmVjdGlvbkZhY3RvcnkuamF2YQppbmRleCBlMjIxOTEzLi4xMmI2ODhkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29ubmVjdGlvbkZhY3RvcnkuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzQ29ubmVjdGlvbkZhY3RvcnkuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcsIE1hcmt1cyBEdWZ0IDxtYXJrdXMuZHVmdEBzc2ktc2NoYWVmZXIuY29tPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIDIwMjIgTWFya3VzIER1ZnQgPG1hcmt1cy5kdWZ0QHNzaS1zY2hhZWZlci5jb20+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTM5LDEyICszOSwxMiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0Lmh0dHAuSHR0cENvbm5lY3Rpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkh0dHBTdXBwb3J0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5Tc2hTdXBwb3J0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TdHJpbmdVdGlsczsKIAogLyoqCiAgKiBQcm92aWRlcyBtZWFucyB0byBnZXQgYSB2YWxpZCBMRlMgY29ubmVjdGlvbiBmb3IgYSBnaXZlbiByZXBvc2l0b3J5LgogICovCiBwdWJsaWMgY2xhc3MgTGZzQ29ubmVjdGlvbkZhY3RvcnkgewotCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IFNTSF9BVVRIX1RJTUVPVVRfU0VDT05EUyA9IDMwOwogCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTQ0hFTUVfSFRUUFMgPSAiaHR0cHMiOyAvLyROT04tTkxTLTEkCiAJcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFNDSEVNRV9TU0ggPSAic3NoIjsgLy8kTk9OLU5MUy0xJApAQCAtNjQsNyArNjQsNyBAQCBwdWJsaWMgY2xhc3MgTGZzQ29ubmVjdGlvbkZhY3RvcnkgewogCSAqICAgICAgICAgICAgYmUgdXNlZCBmb3IKIAkgKiBAcGFyYW0gcHVycG9zZQogCSAqICAgICAgICAgICAgdGhlIGFjdGlvbiwgZS5nLiBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQKLQkgKiBAcmV0dXJuIHRoZSB1cmwgZm9yIHRoZSBsZnMgc2VydmVyLiBlLmcuCisJICogQHJldHVybiB0aGUgY29ubmVjdGlvbiBmb3IgdGhlIGxmcyBzZXJ2ZXIuIGUuZy4KIAkgKiAgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2dpdC1sZnMuZ2l0L2luZm8vbGZzIgogCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KIAkgKi8KQEAgLTkyLDEzICs5MiwzMCBAQCBwdWJsaWMgc3RhdGljIEh0dHBDb25uZWN0aW9uIGdldExmc0Nvbm5lY3Rpb24oUmVwb3NpdG9yeSBkYiwgU3RyaW5nIG1ldGhvZCwKIAkJcmV0dXJuIGNvbm5lY3Rpb247CiAJfQogCisJLyoqCisJICogR2V0IExGUyBTZXJ2ZXIgVVJMLgorCSAqCisJICogQHBhcmFtIGRiCisJICogICAgICAgICAgICB0aGUgcmVwb3NpdG9yeSB0byB3b3JrIHdpdGgKKwkgKiBAcGFyYW0gcHVycG9zZQorCSAqICAgICAgICAgICAgdGhlIGFjdGlvbiwgZS5nLiBQcm90b2NvbC5PUEVSQVRJT05fRE9XTkxPQUQKKwkgKiBAcGFyYW0gYWRkaXRpb25hbEhlYWRlcnMKKwkgKiAgICAgICAgICAgIGFkZGl0aW9uYWwgaGVhZGVycyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNvbm5lY3QgdG8gTEZTIHNlcnZlcgorCSAqIEByZXR1cm4gdGhlIFVSTCBmb3IgdGhlIExGUyBzZXJ2ZXIuIGUuZy4KKwkgKiAgICAgICAgICJodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2dpdC1sZnMuZ2l0L2luZm8vbGZzIgorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgTEZTIGNvbmZpZyBpcyBpbnZhbGlkIG9yIGNhbm5vdCBiZSBhY2Nlc3NlZAorCSAqIEBzZWUgPGEgaHJlZj0KKwkgKiAgICAgICJodHRwczovL2dpdGh1Yi5jb20vZ2l0LWxmcy9naXQtbGZzL2Jsb2IvbWFpbi9kb2NzL2FwaS9zZXJ2ZXItZGlzY292ZXJ5Lm1kIj4KKwkgKiAgICAgIFNlcnZlciBEaXNjb3ZlcnkgZG9jdW1lbnRhdGlvbjwvYT4KKwkgKi8KIAlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZ2V0TGZzVXJsKFJlcG9zaXRvcnkgZGIsIFN0cmluZyBwdXJwb3NlLAogCQkJTWFwPFN0cmluZywgU3RyaW5nPiBhZGRpdGlvbmFsSGVhZGVycykKLQkJCXRocm93cyBMZnNDb25maWdJbnZhbGlkRXhjZXB0aW9uIHsKLQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGRiLmdldENvbmZpZygpOworCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJTGZzQ29uZmlnIGNvbmZpZyA9IG5ldyBMZnNDb25maWcoZGIpOwogCQlTdHJpbmcgbGZzVXJsID0gY29uZmlnLmdldFN0cmluZyhDb25maWdDb25zdGFudHMuQ09ORklHX1NFQ1RJT05fTEZTLAotCQkJCW51bGwsCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVVJMKTsKKwkJCQludWxsLCBDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9VUkwpOworCiAJCUV4Y2VwdGlvbiBleCA9IG51bGw7CiAJCWlmIChsZnNVcmwgPT0gbnVsbCkgewogCQkJU3RyaW5nIHJlbW90ZVVybCA9IG51bGw7CkBAIC0xMDYsNiArMTIzLDcgQEAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldExmc1VybChSZXBvc2l0b3J5IGRiLCBTdHJpbmcgcHVycG9zZSwKIAkJCQlsZnNVcmwgPSBjb25maWcuZ2V0U3RyaW5nKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfU0VDVElPTl9MRlMsCiAJCQkJCQlyZW1vdGUsCiAJCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9VUkwpOworCiAJCQkJLy8gVGhpcyBjb3VsZCBiZSBkb25lIGJldHRlciAobW9yZSBwcmVjaXNlIGxvZ2ljKSwgYnV0IGFjY29yZGluZwogCQkJCS8vIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9naXQtbGZzL2dpdC1sZnMvaXNzdWVzLzE3NTkgZ2l0LWxmcwogCQkJCS8vIGdlbmVyYWxseSBvbmx5IHN1cHBvcnRzICdvcmlnaW4nIGluIGFuIGludGVncmF0ZWQgd29ya2Zsb3cuCkBAIC0xMjUsOCArMTQzLDYgQEAgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldExmc1VybChSZXBvc2l0b3J5IGRiLCBTdHJpbmcgcHVycG9zZSwKIAkJCQkJCXwgQ29tbWFuZEZhaWxlZEV4Y2VwdGlvbiBlKSB7CiAJCQkJCWV4ID0gZTsKIAkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWxmc1VybCA9IGxmc1VybCArIFByb3RvY29sLklORk9fTEZTX0VORFBPSU5UOwogCQkJfQogCQl9CiAJCWlmIChsZnNVcmwgPT0gbnVsbCkgewpAQCAtMTQ5LDcgKzE2NSw4IEBAIHByaXZhdGUgc3RhdGljIFN0cmluZyBkaXNjb3Zlckxmc1VybChSZXBvc2l0b3J5IGRiLCBTdHJpbmcgcHVycG9zZSwKIAkJCWFkZGl0aW9uYWxIZWFkZXJzLnB1dEFsbChhY3Rpb24uaGVhZGVyKTsKIAkJCXJldHVybiBhY3Rpb24uaHJlZjsKIAkJfQotCQlyZXR1cm4gcmVtb3RlVXJsICsgUHJvdG9jb2wuSU5GT19MRlNfRU5EUE9JTlQ7CisJCXJldHVybiBTdHJpbmdVdGlscy5uYW1lV2l0aERvdEdpdChyZW1vdGVVcmwpCisJCQkJKyBQcm90b2NvbC5JTkZPX0xGU19FTkRQT0lOVDsKIAl9CiAKIAlwcml2YXRlIHN0YXRpYyBQcm90b2NvbC5FeHBpcmluZ0FjdGlvbiBnZXRTc2hBdXRoZW50aWNhdGlvbigKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvaW50ZXJuYWwvTGZzVGV4dC5qYXZhCmluZGV4IDFjYTM3YTkuLjA2MjM0YzEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9pbnRlcm5hbC9MZnNUZXh0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2ludGVybmFsL0xmc1RleHQuamF2YQpAQCAtMjgsMjEgKzI4LDIyIEBAIHB1YmxpYyBzdGF0aWMgTGZzVGV4dCBnZXQoKSB7CiAKIAkvLyBAZm9ybWF0dGVyOm9mZgogCS8qKiovIHB1YmxpYyBTdHJpbmcgY29ycnVwdExvbmdPYmplY3Q7Ci0JLyoqKi8gcHVibGljIFN0cmluZyBpbmNvbnNpc3RlbnRNZWRpYWZpbGVMZW5ndGg7CisJLyoqKi8gcHVibGljIFN0cmluZyBkb3RMZnNDb25maWdSZWFkRmFpbGVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgaW5jb25zaXN0ZW50Q29udGVudExlbmd0aDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGluY29uc2lzdGVudE1lZGlhZmlsZUxlbmd0aDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGluY29ycmVjdExPTkdfT0JKRUNUX0lEX0xFTkdUSDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGludmFsaWRMb25nSWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkTG9uZ0lkTGVuZ3RoOwotCS8qKiovIHB1YmxpYyBTdHJpbmcgbGZzVW5hdmFpbGFibGU7Ci0JLyoqKi8gcHVibGljIFN0cmluZyBwcm90b2NvbEVycm9yOwotCS8qKiovIHB1YmxpYyBTdHJpbmcgcmVxdWlyZWRIYXNoRnVuY3Rpb25Ob3RBdmFpbGFibGU7Ci0JLyoqKi8gcHVibGljIFN0cmluZyByZXBvc2l0b3J5Tm90Rm91bmQ7Ci0JLyoqKi8gcHVibGljIFN0cmluZyByZXBvc2l0b3J5UmVhZE9ubHk7Ci0JLyoqKi8gcHVibGljIFN0cmluZyBsZnNVbmF0aG9yaXplZDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGxmc0ZhaWxlZFRvR2V0UmVwb3NpdG9yeTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGxmc05vRG93bmxvYWRVcmw7Ci0JLyoqKi8gcHVibGljIFN0cmluZyBzZXJ2ZXJGYWlsdXJlOwotCS8qKiovIHB1YmxpYyBTdHJpbmcgd3JvbmdBbW91dE9mRGF0YVJlY2VpdmVkOwotCS8qKiovIHB1YmxpYyBTdHJpbmcgdXNlckNvbmZpZ0ludmFsaWQ7CisJLyoqKi8gcHVibGljIFN0cmluZyBsZnNVbmF1dGhvcml6ZWQ7CisJLyoqKi8gcHVibGljIFN0cmluZyBsZnNVbmF2YWlsYWJsZTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIG1pc3NpbmdMb2NhbE9iamVjdDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHByb3RvY29sRXJyb3I7CisJLyoqKi8gcHVibGljIFN0cmluZyByZXBvc2l0b3J5Tm90Rm91bmQ7CisJLyoqKi8gcHVibGljIFN0cmluZyByZXBvc2l0b3J5UmVhZE9ubHk7CisJLyoqKi8gcHVibGljIFN0cmluZyByZXF1aXJlZEhhc2hGdW5jdGlvbk5vdEF2YWlsYWJsZTsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHNlcnZlckZhaWx1cmU7CisJLyoqKi8gcHVibGljIFN0cmluZyB1c2VyQ29uZmlnSW52YWxpZDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHdyb25nQW1vdW50T2ZEYXRhUmVjZWl2ZWQ7CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0NvbnN0YW50cy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5sZnMvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGZzL2xpYi9Db25zdGFudHMuamF2YQppbmRleCAzMjEyYTYzLi45YjQxZWMzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy9zcmMvb3JnL2VjbGlwc2UvamdpdC9sZnMvbGliL0NvbnN0YW50cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQubGZzL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xmcy9saWIvQ29uc3RhbnRzLmphdmEKQEAgLTgyLDYgKzgyLDEzIEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDb25zdGFudHMgewogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFUVFJfRklMVEVSX0RSSVZFUl9QUkVGSVggPSAibGZzLyI7CiAKIAkvKioKKwkgKiBDb25maWcgZmlsZSBuYW1lIGZvciBsZnMgc3BlY2lmaWMgY29uZmlndXJhdGlvbgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIERPVF9MRlNfQ09ORklHID0gIi5sZnNjb25maWciOworCisJLyoqCiAJICogQ3JlYXRlIGEgbmV3IGRpZ2VzdCBmdW5jdGlvbiBmb3Igb2JqZWN0cy4KIAkgKgogCSAqIEByZXR1cm4gYSBuZXcgZGlnZXN0IG9iamVjdC4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBjYzFiZjg1Li5jZDIyZTI0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0IgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjYuMC4xLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjYuMS4xLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL3BvbS54bWwKaW5kZXggODc0YjI3NC4uNTRmZWI5ZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCBiZTAyNjYyLi4yMDYxOTQ4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjIgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjYuMC4xLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjYuMS4xLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KQEAgLTIzLDcgKzIzLDcgQEAKICAgIDwvdXJsPgogCiAgICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4wLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LmdwZy5iYy5mZWF0dXJlL3BvbS54bWwKaW5kZXggMjkwOWU4MC4uNzYwOTAzZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9mZWF0dXJlLnhtbAppbmRleCA4OTM3YTgzLi5lODk5YWQ1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlIgogICAgICAgbGFiZWw9IiVmZWF0dXJlTmFtZSIKLSAgICAgIHZlcnNpb249IjYuMC4xLnF1YWxpZmllciIKKyAgICAgIHZlcnNpb249IjYuMS4xLnF1YWxpZmllciIKICAgICAgIHByb3ZpZGVyLW5hbWU9IiVwcm92aWRlck5hbWUiPgogCiAgICA8ZGVzY3JpcHRpb24gdXJsPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2pnaXQvIj4KQEAgLTIzLDcgKzIzLDcgQEAKICAgIDwvdXJsPgogCiAgICA8cmVxdWlyZXM+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4wLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuYXBhY2hlLmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCmluZGV4IDIyOTJjMmUuLmI3MjVkZmYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuaHR0cC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IDZlZWU3Y2QuLjk5MDczZTQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuanVuaXQiCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpAQCAtMjQsNyArMjQsNyBAQAogCiAgICA8cmVxdWlyZXM+CiAgICAgICA8aW1wb3J0IHBsdWdpbj0iY29tLmpjcmFmdC5qc2NoIi8+Ci0gICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4wLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CisgICAgICA8aW1wb3J0IHBsdWdpbj0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LmZlYXR1cmUvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sCmluZGV4IGRjNDE1OWIuLjM1NjZkYmIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuZmVhdHVyZS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdC5mZWF0dXJlPC9ncm91cElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggZjBhNDg4NC4uYzA0MDUxYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0LmxmcyIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjAuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5mZWF0dXJlL3BvbS54bWwKaW5kZXggZTM0NGMxOS4uNTAzMzhhNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5sZnMuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQubGZzLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL2ZlYXR1cmUueG1sCmluZGV4IGY1ODg5ZTUuLjM5MzlmNTEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5wZ20iCiAgICAgICBsYWJlbD0iJWZlYXR1cmVOYW1lIgotICAgICAgdmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIgorICAgICAgdmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIgogICAgICAgcHJvdmlkZXItbmFtZT0iJXByb3ZpZGVyTmFtZSI+CiAKICAgIDxkZXNjcmlwdGlvbiB1cmw9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvamdpdC8iPgpAQCAtMzUsOSArMzUsOSBAQAogICAgICAgICAgdmVyc2lvbj0iMC4wLjAiLz4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjAuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KLSAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdC5sZnMiIHZlcnNpb249IjYuMC4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUiIHZlcnNpb249IjYuMC4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjEuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdC5sZnMiIHZlcnNpb249IjYuMS4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUiIHZlcnNpb249IjYuMS4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgogICAgPC9yZXF1aXJlcz4KIAogICAgPHBsdWdpbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5wZ20uZmVhdHVyZS9wb20ueG1sCmluZGV4IGFlOTU3MDQuLjRiMGUyNmEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucGdtLmZlYXR1cmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5mZWF0dXJlL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnJlcG9zaXRvcnkvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sCmluZGV4IGUxMmU1OTkuLjljY2YzOWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQucmVwb3NpdG9yeS9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5qZ2l0LnR5Y2hvLnBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5yZXBvc2l0b3J5PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9mZWF0dXJlLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggZDVkMTU1NC4uZDNlNjYyYiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9mZWF0dXJlLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL2ZlYXR1cmUueG1sCkBAIC0yLDcgKzIsNyBAQAogPGZlYXR1cmUKICAgICAgIGlkPSJvcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZSIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjAuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZS5mZWF0dXJlL3BvbS54bWwKaW5kZXggYTIwNjQ1ZS4uZDhiNWRlMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zb3VyY2UuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc291cmNlLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KQEAgLTMwLDcgKzMwLDcgQEAKICAgICA8ZGVwZW5kZW5jeT4KICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KICAgICAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQ8L2FydGlmYWN0SWQ+Ci0gICAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICAgIDwvZGVwZW5kZW5jeT4KICAgPC9kZXBlbmRlbmNpZXM+CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5mZWF0dXJlL2ZlYXR1cmUueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggYWU2MmZhMC4uZTAzOTY0NyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmZlYXR1cmUvZmVhdHVyZS54bWwKQEAgLTIsNyArMiw3IEBACiA8ZmVhdHVyZQogICAgICAgaWQ9Im9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZSIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBmZWF0dXJlPSJvcmcuZWNsaXBzZS5qZ2l0IiB2ZXJzaW9uPSI2LjAuMSIgbWF0Y2g9ImVxdWl2YWxlbnQiLz4KKyAgICAgIDxpbXBvcnQgZmVhdHVyZT0ib3JnLmVjbGlwc2UuamdpdCIgdmVyc2lvbj0iNi4xLjEiIG1hdGNoPSJlcXVpdmFsZW50Ii8+CiAgICA8L3JlcXVpcmVzPgogCiAgICA8cGx1Z2luCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmZlYXR1cmUvcG9tLnhtbAppbmRleCA2ZjEyYWZhLi41OTFiNDQ4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuZmVhdHVyZS9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5mZWF0dXJlL3BvbS54bWwKQEAgLTE3LDcgKzE3LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0LmZlYXR1cmU8L2dyb3VwSWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvZmVhdHVyZS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvZmVhdHVyZS54bWwKaW5kZXggZGY0MmU5My4uM2RmNGE5MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC5mZWF0dXJlL2ZlYXR1cmUueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2guZmVhdHVyZS9mZWF0dXJlLnhtbApAQCAtMiw3ICsyLDcgQEAKIDxmZWF0dXJlCiAgICAgICBpZD0ib3JnLmVjbGlwc2UuamdpdC5zc2guanNjaCIKICAgICAgIGxhYmVsPSIlZmVhdHVyZU5hbWUiCi0gICAgICB2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiCisgICAgICB2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiCiAgICAgICBwcm92aWRlci1uYW1lPSIlcHJvdmlkZXJOYW1lIj4KIAogICAgPGRlc2NyaXB0aW9uIHVybD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9qZ2l0LyI+CkBAIC0yMyw3ICsyMyw3IEBACiAgICA8L3VybD4KIAogICAgPHJlcXVpcmVzPgotICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjYuMC4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgorICAgICAgPGltcG9ydCBwbHVnaW49Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjYuMS4xIiBtYXRjaD0iZXF1aXZhbGVudCIvPgogICAgPC9yZXF1aXJlcz4KIAogICAgPHBsdWdpbgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC5mZWF0dXJlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvcG9tLnhtbAppbmRleCAzN2FkYTVkLi5lNDYxYmZmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLmZlYXR1cmUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+amdpdC50eWNoby5wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQuZmVhdHVyZTwvZ3JvdXBJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZDMxY2QzNy4uNWQ2MWVlZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsNCArMiw0IEBACiBCdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCiBCdW5kbGUtTmFtZTogSkdpdCBUYXJnZXQgUGxhdGZvcm0gQnVuZGxlCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnRhcmdldAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNy50YXJnZXQKaW5kZXggOTEzNzBjYy4uNGU0MDIzMiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTcudGFyZ2V0CkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC4xNyIgc2VxdWVuY2VOdW1iZXI9IjE2NDEzOTM5NTQiPgorPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTciIHNlcXVlbmNlTnVtYmVyPSIxNjQ2MjU2NjUzIj4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJqYWthcnRhLnNlcnZsZXQtYXBpIiB2ZXJzaW9uPSI0LjAuMCIvPgpAQCAtMjMsOCArMjMsOCBAQAogICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTEwLjAueCIgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS9qZXR0eS8xMC4wLjYvIi8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC44LnYyMDIxMTAyOS0wODM4Ii8+Ci0gICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uLnNvdXJjZSIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC45LnYyMDIyMDExMS0xNDA5Ii8+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uLnNvdXJjZSIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2giIHZlcnNpb249IjAuMS41NS52MjAxOTA0MDQtMTkwMiIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaC5zb3VyY2UiIHZlcnNpb249IjAuMS41NS52MjAxOTA0MDQtMTkwMiIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanpsaWIiIHZlcnNpb249IjEuMS4xLnYyMDEyMDUxMDIzMDUiLz4KQEAgLTUxLDIyICs1MSwyMiBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLnNvdXJjZSIgdmVyc2lvbj0iMS4yLjAudjIwMTgwNDA5LTE1MDIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnQiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudC5zb3VyY2UiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUuc291cmNlIiB2ZXJzaW9uPSI0LjQuMTQudjIwMjEwMTI4LTIyMjUiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaS5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUuc291cmNlIiB2ZXJzaW9uPSI0LjQuMTUudjIwMjIwMjA5LTIzNDUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaS5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqIiB2ZXJzaW9uPSIzLjIwLjIudjIwMjEwNzA2LTExMDQiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXNzZXJ0ai5zb3VyY2UiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZyIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnLnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXgiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4LnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3YiIHZlcnNpb249IjEuNjkuMC52MjAyMTA5MjMtMTQwMSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92LnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsLnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QiIHZlcnNpb249IjIuMi4wLnYyMDIxMDcxMS0wODIxIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmhhbWNyZXN0LnNvdXJjZSIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QuY29yZSIgdmVyc2lvbj0iMS4zLjAudjIwMTgwNDIwLTE1MTkiLz4KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuc2xmNGouYmluZGluZy5zaW1wbGUuc291cmNlIiB2ZXJzaW9uPSIxLjcuMzAudjIwMjAwMjA0LTIxNTAiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54eiIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54ei5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDIxMDYyNC0xMjU5Ii8+Ci0gICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjExMjEzMTczODEzL3JlcG9zaXRvcnkiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMjAzMDIxNzIyMzMvcmVwb3NpdG9yeSIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgdmVyc2lvbj0iMC4wLjAiLz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNy50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTcudHBkCmluZGV4IGMyYjEzY2MuLmRiYjQ1MGEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xNy50cGQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE3LnRwZApAQCAtMSw3ICsxLDcgQEAKIHRhcmdldCAiamdpdC00LjE3IiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS0xMC4wLngudHBkIgotaW5jbHVkZSAib3JiaXQvUjIwMjExMjEzMTczODEzLTIwMjEtMTIudHBkIgoraW5jbHVkZSAib3JiaXQvUjIwMjIwMzAyMTcyMjMzLTIwMjItMDMudHBkIgogCiBsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDIwLTA5LyIgewogCW9yZy5lY2xpcHNlLm9zZ2kgbGF6eQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE4LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50YXJnZXQKaW5kZXggMjgyMDRmNS4uMTYyODIxNyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE4LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTgudGFyZ2V0CkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC4xOCIgc2VxdWVuY2VOdW1iZXI9IjE2NDEzOTQxMjIiPgorPHRhcmdldCBuYW1lPSJqZ2l0LTQuMTgiIHNlcXVlbmNlTnVtYmVyPSIxNjQ2MjU2NjUzIj4KICAgPGxvY2F0aW9ucz4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJqYWthcnRhLnNlcnZsZXQtYXBpIiB2ZXJzaW9uPSI0LjAuMCIvPgpAQCAtMjMsOCArMjMsOCBAQAogICAgICAgPHJlcG9zaXRvcnkgaWQ9ImpldHR5LTEwLjAueCIgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvZWNsaXBzZS9qZXR0eS8xMC4wLjYvIi8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC44LnYyMDIxMTAyOS0wODM4Ii8+Ci0gICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uLnNvdXJjZSIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24iIHZlcnNpb249IjIuOC45LnYyMDIyMDExMS0xNDA5Ii8+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uLnNvdXJjZSIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2giIHZlcnNpb249IjAuMS41NS52MjAxOTA0MDQtMTkwMiIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaC5zb3VyY2UiIHZlcnNpb249IjAuMS41NS52MjAxOTA0MDQtMTkwMiIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanpsaWIiIHZlcnNpb249IjEuMS4xLnYyMDEyMDUxMDIzMDUiLz4KQEAgLTUxLDIyICs1MSwyMiBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLnNvdXJjZSIgdmVyc2lvbj0iMS4yLjAudjIwMTgwNDA5LTE1MDIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnQiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudC5zb3VyY2UiIHZlcnNpb249IjQuNS4xMy52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUuc291cmNlIiB2ZXJzaW9uPSI0LjQuMTQudjIwMjEwMTI4LTIyMjUiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaS5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNvcmUuc291cmNlIiB2ZXJzaW9uPSI0LjQuMTUudjIwMjIwMjA5LTIzNDUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQub3NnaS5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqIiB2ZXJzaW9uPSIzLjIwLjIudjIwMjEwNzA2LTExMDQiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXNzZXJ0ai5zb3VyY2UiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZyIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnLnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXgiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4LnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3YiIHZlcnNpb249IjEuNjkuMC52MjAyMTA5MjMtMTQwMSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92LnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsLnNvdXJjZSIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QiIHZlcnNpb249IjIuMi4wLnYyMDIxMDcxMS0wODIxIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmhhbWNyZXN0LnNvdXJjZSIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3QuY29yZSIgdmVyc2lvbj0iMS4zLjAudjIwMTgwNDIwLTE1MTkiLz4KQEAgLTg3LDcgKzg3LDcgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuc2xmNGouYmluZGluZy5zaW1wbGUuc291cmNlIiB2ZXJzaW9uPSIxLjcuMzAudjIwMjAwMjA0LTIxNTAiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54eiIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KICAgICAgIDx1bml0IGlkPSJvcmcudHVrYWFuaS54ei5zb3VyY2UiIHZlcnNpb249IjEuOS4wLnYyMDIxMDYyNC0xMjU5Ii8+Ci0gICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjExMjEzMTczODEzL3JlcG9zaXRvcnkiLz4KKyAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMjAzMDIxNzIyMzMvcmVwb3NpdG9yeSIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0ib3JnLmVjbGlwc2Uub3NnaSIgdmVyc2lvbj0iMC4wLjAiLz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTgudHBkCmluZGV4IGZmNjc0MWQuLjkxMWM2N2MgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOC50cGQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE4LnRwZApAQCAtMSw3ICsxLDcgQEAKIHRhcmdldCAiamdpdC00LjE4IiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS0xMC4wLngudHBkIgotaW5jbHVkZSAib3JiaXQvUjIwMjExMjEzMTczODEzLTIwMjEtMTIudHBkIgoraW5jbHVkZSAib3JiaXQvUjIwMjIwMzAyMTcyMjMzLTIwMjItMDMudHBkIgogCiBsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9yZWxlYXNlcy8yMDIwLTEyLyIgewogCW9yZy5lY2xpcHNlLm9zZ2kgbGF6eQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE5LnRhcmdldCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOS50YXJnZXQKaW5kZXggMjBiMDUyOS4uYWIxOGY3YiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE5LnRhcmdldAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTkudGFyZ2V0CkBAIC0xLDcgKzEsNyBAQAogPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CiA8P3BkZT8+CiA8IS0tIGdlbmVyYXRlZCB3aXRoIGh0dHBzOi8vZ2l0aHViLmNvbS9lY2xpcHNlLWNiaS90YXJnZXRwbGF0Zm9ybS1kc2wgLS0+Ci08dGFyZ2V0IG5hbWU9ImpnaXQtNC4xOS1zdGFnaW5nIiBzZXF1ZW5jZU51bWJlcj0iMTY0MTM5NDE0MSI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4xOS1zdGFnaW5nIiBzZXF1ZW5jZU51bWJlcj0iMTY0NjI1NjY1MyI+CiAgIDxsb2NhdGlvbnM+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+CiAgICAgICA8dW5pdCBpZD0iamFrYXJ0YS5zZXJ2bGV0LWFwaSIgdmVyc2lvbj0iNC4wLjAiLz4KQEAgLTIzLDggKzIzLDggQEAKICAgICAgIDxyZXBvc2l0b3J5IGlkPSJqZXR0eS0xMC4wLngiIGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL2VjbGlwc2UvamV0dHkvMTAuMC42LyIvPgogICAgIDwvbG9jYXRpb24+CiAgICAgPGxvY2F0aW9uIGluY2x1ZGVNb2RlPSJzbGljZXIiIGluY2x1ZGVBbGxQbGF0Zm9ybXM9ImZhbHNlIiBpbmNsdWRlU291cmNlPSJ0cnVlIiBpbmNsdWRlQ29uZmlndXJlUGhhc2U9InRydWUiIHR5cGU9Ikluc3RhbGxhYmxlVW5pdCI+Ci0gICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguOC52MjAyMTEwMjktMDgzOCIvPgotICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3Nvbi5zb3VyY2UiIHZlcnNpb249IjIuOC44LnYyMDIxMTAyOS0wODM4Ii8+CisgICAgICA8dW5pdCBpZD0iY29tLmdvb2dsZS5nc29uIiB2ZXJzaW9uPSIyLjguOS52MjAyMjAxMTEtMTQwOSIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3Nvbi5zb3VyY2UiIHZlcnNpb249IjIuOC45LnYyMDIyMDExMS0xNDA5Ii8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoIiB2ZXJzaW9uPSIwLjEuNTUudjIwMTkwNDA0LTE5MDIiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0LmpzY2guc291cmNlIiB2ZXJzaW9uPSIwLjEuNTUudjIwMTkwNDA0LTE5MDIiLz4KICAgICAgIDx1bml0IGlkPSJjb20uamNyYWZ0Lmp6bGliIiB2ZXJzaW9uPSIxLjEuMS52MjAxMjA1MTAyMzA1Ii8+CkBAIC01MSwyMiArNTEsMjIgQEAKICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmNvbW1vbnMubG9nZ2luZy5zb3VyY2UiIHZlcnNpb249IjEuMi4wLnYyMDE4MDQwOS0xNTAyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50IiB2ZXJzaW9uPSI0LjUuMTMudjIwMjEwMTI4LTIyMjUiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjbGllbnQuc291cmNlIiB2ZXJzaW9uPSI0LjUuMTMudjIwMjEwMTI4LTIyMjUiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlIiB2ZXJzaW9uPSI0LjQuMTQudjIwMjEwMTI4LTIyMjUiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlLnNvdXJjZSIgdmVyc2lvbj0iNC40LjE0LnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLm9zZ2kiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLm9zZ2kuc291cmNlIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5zZnRwIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5zZnRwLnNvdXJjZSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlIiB2ZXJzaW9uPSI0LjQuMTUudjIwMjIwMjA5LTIzNDUiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlLnNvdXJjZSIgdmVyc2lvbj0iNC40LjE1LnYyMDIyMDIwOS0yMzQ1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLm9zZ2kiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5zc2hkLm9zZ2kuc291cmNlIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5zZnRwIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5zZnRwLnNvdXJjZSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuYXNzZXJ0aiIgdmVyc2lvbj0iMy4yMC4yLnYyMDIxMDcwNi0xMTA0Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFzc2VydGouc291cmNlIiB2ZXJzaW9uPSIzLjIwLjIudjIwMjEwNzA2LTExMDQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGciIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4IiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeC5zb3VyY2UiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwOTIzLTE0MDEiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdi5zb3VyY2UiIHZlcnNpb249IjEuNjkuMC52MjAyMTA5MjMtMTQwMSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UiIHZlcnNpb249IjEuNjkuMC52MjAyMTA3MTMtMTkyNCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZyIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnLnNvdXJjZSIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXgiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4LnNvdXJjZSIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3YiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92LnNvdXJjZSIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CisgICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsLnNvdXJjZSIgdmVyc2lvbj0iMS43MC4wLnYyMDIyMDEwNS0xNTIyIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmhhbWNyZXN0IiB2ZXJzaW9uPSIyLjIuMC52MjAyMTA3MTEtMDgyMSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5zb3VyY2UiIHZlcnNpb249IjIuMi4wLnYyMDIxMDcxMS0wODIxIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmhhbWNyZXN0LmNvcmUiIHZlcnNpb249IjEuMy4wLnYyMDE4MDQyMC0xNTE5Ii8+CkBAIC04Nyw3ICs4Nyw3IEBACiAgICAgICA8dW5pdCBpZD0ib3JnLnNsZjRqLmJpbmRpbmcuc2ltcGxlLnNvdXJjZSIgdmVyc2lvbj0iMS43LjMwLnYyMDIwMDIwNC0yMTUwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHoiIHZlcnNpb249IjEuOS4wLnYyMDIxMDYyNC0xMjU5Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLnR1a2FhbmkueHouc291cmNlIiB2ZXJzaW9uPSIxLjkuMC52MjAyMTA2MjQtMTI1OSIvPgotICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIxMTIxMzE3MzgxMy9yZXBvc2l0b3J5Ii8+CisgICAgICA8cmVwb3NpdG9yeSBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy90b29scy9vcmJpdC9kb3dubG9hZHMvZHJvcHMvUjIwMjIwMzAyMTcyMjMzL3JlcG9zaXRvcnkiLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Im9yZy5lY2xpcHNlLm9zZ2kiIHZlcnNpb249IjAuMC4wIi8+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTkudHBkIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjE5LnRwZAppbmRleCA4ZmNhYTQ3Li5mZGI4YjExIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMTkudHBkCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4xOS50cGQKQEAgLTEsNyArMSw3IEBACiB0YXJnZXQgImpnaXQtNC4xOS1zdGFnaW5nIiB3aXRoIHNvdXJjZSBjb25maWd1cmVQaGFzZQogCiBpbmNsdWRlICJwcm9qZWN0cy9qZXR0eS0xMC4wLngudHBkIgotaW5jbHVkZSAib3JiaXQvUjIwMjExMjEzMTczODEzLTIwMjEtMTIudHBkIgoraW5jbHVkZSAib3JiaXQvUjIwMjIwMzAyMTcyMjMzLTIwMjItMDMudHBkIgogCiBsb2NhdGlvbiAiaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9zdGFnaW5nLzIwMjEtMDMvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjAudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRhcmdldAppbmRleCAxNTMzMTRkLi40Yzg0MGRjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjAudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMC50YXJnZXQKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjIwIiBzZXF1ZW5jZU51bWJlcj0iMTY0MTM5NDE1MiI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4yMCIgc2VxdWVuY2VOdW1iZXI9IjE2NDYyNTY2NTMiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Impha2FydGEuc2VydmxldC1hcGkiIHZlcnNpb249IjQuMC4wIi8+CkBAIC0yMyw4ICsyMyw4IEBACiAgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktMTAuMC54IiBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL2pldHR5LzEwLjAuNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOC52MjAyMTEwMjktMDgzOCIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOS52MjAyMjAxMTEtMTQwOSIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaCIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoLnNvdXJjZSIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qemxpYiIgdmVyc2lvbj0iMS4xLjEudjIwMTIwNTEwMjMwNSIvPgpAQCAtNTEsMjIgKzUxLDIyIEBACiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuc291cmNlIiB2ZXJzaW9uPSIxLjIuMC52MjAxODA0MDktMTUwMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudCIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE0LnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE1LnYyMDIyMDIwOS0yMzQ1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFzc2VydGoiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqLnNvdXJjZSIgdmVyc2lvbj0iMy4yMC4yLnYyMDIxMDcwNi0xMTA0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwOTIzLTE0MDEiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGciIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdi5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdCIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3Quc291cmNlIiB2ZXJzaW9uPSIyLjIuMC52MjAyMTA3MTEtMDgyMSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5jb3JlIiB2ZXJzaW9uPSIxLjMuMC52MjAxODA0MjAtMTUxOSIvPgpAQCAtODcsNyArODcsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLnNpbXBsZS5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDAyMDQtMjE1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjkuMC52MjAyMTA2MjQtMTI1OSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTEyMTMxNzM4MTMvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIyMDMwMjE3MjIzMy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMC50cGQKaW5kZXggMzNhZGI3Mi4uMTIwZWU2NCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIwLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjAudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMjAiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTEwLjAueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTEyMTMxNzM4MTMtMjAyMS0xMi50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMjEtMDYvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjEudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIxLnRhcmdldAppbmRleCAwN2RlMWFmLi43ZThjZDkxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjEudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMS50YXJnZXQKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjIxIiBzZXF1ZW5jZU51bWJlcj0iMTY0MTM5NDE3MCI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4yMSIgc2VxdWVuY2VOdW1iZXI9IjE2NDYyNTY2NTMiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Impha2FydGEuc2VydmxldC1hcGkiIHZlcnNpb249IjQuMC4wIi8+CkBAIC0yMyw4ICsyMyw4IEBACiAgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktMTAuMC54IiBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL2pldHR5LzEwLjAuNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOC52MjAyMTEwMjktMDgzOCIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOS52MjAyMjAxMTEtMTQwOSIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaCIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoLnNvdXJjZSIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qemxpYiIgdmVyc2lvbj0iMS4xLjEudjIwMTIwNTEwMjMwNSIvPgpAQCAtNTEsMjIgKzUxLDIyIEBACiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuc291cmNlIiB2ZXJzaW9uPSIxLjIuMC52MjAxODA0MDktMTUwMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudCIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE0LnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE1LnYyMDIyMDIwOS0yMzQ1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFzc2VydGoiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqLnNvdXJjZSIgdmVyc2lvbj0iMy4yMC4yLnYyMDIxMDcwNi0xMTA0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwOTIzLTE0MDEiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGciIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdi5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdCIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3Quc291cmNlIiB2ZXJzaW9uPSIyLjIuMC52MjAyMTA3MTEtMDgyMSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5jb3JlIiB2ZXJzaW9uPSIxLjMuMC52MjAxODA0MjAtMTUxOSIvPgpAQCAtODcsNyArODcsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLnNpbXBsZS5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDAyMDQtMjE1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjkuMC52MjAyMTA2MjQtMTI1OSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTEyMTMxNzM4MTMvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIyMDMwMjE3MjIzMy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIxLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMS50cGQKaW5kZXggYWRmNjJkNS4uMGVjMmE1MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIxLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjEudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMjEiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTEwLjAueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTEyMTMxNzM4MTMtMjAyMS0xMi50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMjEtMDkvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjIudGFyZ2V0IGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIyLnRhcmdldAppbmRleCA5N2I1ZmI2Li5iMjI5ZGExIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjIudGFyZ2V0CisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMi50YXJnZXQKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KIDw/cGRlPz4KIDwhLS0gZ2VuZXJhdGVkIHdpdGggaHR0cHM6Ly9naXRodWIuY29tL2VjbGlwc2UtY2JpL3RhcmdldHBsYXRmb3JtLWRzbCAtLT4KLTx0YXJnZXQgbmFtZT0iamdpdC00LjIyIiBzZXF1ZW5jZU51bWJlcj0iMTY0MTM5NDE3NyI+Cis8dGFyZ2V0IG5hbWU9ImpnaXQtNC4yMiIgc2VxdWVuY2VOdW1iZXI9IjE2NDYyNTY2NTMiPgogICA8bG9jYXRpb25zPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgogICAgICAgPHVuaXQgaWQ9Impha2FydGEuc2VydmxldC1hcGkiIHZlcnNpb249IjQuMC4wIi8+CkBAIC0yMyw4ICsyMyw4IEBACiAgICAgICA8cmVwb3NpdG9yeSBpZD0iamV0dHktMTAuMC54IiBsb2NhdGlvbj0iaHR0cHM6Ly9kb3dubG9hZC5lY2xpcHNlLm9yZy9lY2xpcHNlL2pldHR5LzEwLjAuNi8iLz4KICAgICA8L2xvY2F0aW9uPgogICAgIDxsb2NhdGlvbiBpbmNsdWRlTW9kZT0ic2xpY2VyIiBpbmNsdWRlQWxsUGxhdGZvcm1zPSJmYWxzZSIgaW5jbHVkZVNvdXJjZT0idHJ1ZSIgaW5jbHVkZUNvbmZpZ3VyZVBoYXNlPSJ0cnVlIiB0eXBlPSJJbnN0YWxsYWJsZVVuaXQiPgotICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjgudjIwMjExMDI5LTA4MzgiLz4KLSAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOC52MjAyMTEwMjktMDgzOCIvPgorICAgICAgPHVuaXQgaWQ9ImNvbS5nb29nbGUuZ3NvbiIgdmVyc2lvbj0iMi44LjkudjIwMjIwMTExLTE0MDkiLz4KKyAgICAgIDx1bml0IGlkPSJjb20uZ29vZ2xlLmdzb24uc291cmNlIiB2ZXJzaW9uPSIyLjguOS52MjAyMjAxMTEtMTQwOSIvPgogICAgICAgPHVuaXQgaWQ9ImNvbS5qY3JhZnQuanNjaCIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qc2NoLnNvdXJjZSIgdmVyc2lvbj0iMC4xLjU1LnYyMDE5MDQwNC0xOTAyIi8+CiAgICAgICA8dW5pdCBpZD0iY29tLmpjcmFmdC5qemxpYiIgdmVyc2lvbj0iMS4xLjEudjIwMTIwNTEwMjMwNSIvPgpAQCAtNTEsMjIgKzUxLDIyIEBACiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcuc291cmNlIiB2ZXJzaW9uPSIxLjIuMC52MjAxODA0MDktMTUwMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudCIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50LnNvdXJjZSIgdmVyc2lvbj0iNC41LjEzLnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE0LnYyMDIxMDEyOC0yMjI1Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNC52MjAyMTAxMjgtMjIyNSIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjcuMC52MjAyMTA2MjMtMDYxOCIvPgotICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi43LjAudjIwMjEwNjIzLTA2MTgiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuNy4wLnYyMDIxMDYyMy0wNjE4Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSIgdmVyc2lvbj0iNC40LjE1LnYyMDIyMDIwOS0yMzQ1Ii8+CisgICAgICA8dW5pdCBpZD0ib3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZS5zb3VyY2UiIHZlcnNpb249IjQuNC4xNS52MjAyMjAyMDktMjM0NSIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpIiB2ZXJzaW9uPSIyLjguMC52MjAyMTEyMjctMTc1MCIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5hcGFjaGUuc3NoZC5vc2dpLnNvdXJjZSIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cCIgdmVyc2lvbj0iMi44LjAudjIwMjExMjI3LTE3NTAiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYXBhY2hlLnNzaGQuc2Z0cC5zb3VyY2UiIHZlcnNpb249IjIuOC4wLnYyMDIxMTIyNy0xNzUwIi8+CiAgICAgICA8dW5pdCBpZD0ib3JnLmFzc2VydGoiIHZlcnNpb249IjMuMjAuMi52MjAyMTA3MDYtMTEwNCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5hc3NlcnRqLnNvdXJjZSIgdmVyc2lvbj0iMy4yMC4yLnYyMDIxMDcwNi0xMTA0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BnIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGcuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdiIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDkyMy0xNDAxIi8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3Byb3Yuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwOTIzLTE0MDEiLz4KLSAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCIgdmVyc2lvbj0iMS42OS4wLnYyMDIxMDcxMy0xOTI0Ii8+Ci0gICAgICA8dW5pdCBpZD0ib3JnLmJvdW5jeWNhc3RsZS5iY3V0aWwuc291cmNlIiB2ZXJzaW9uPSIxLjY5LjAudjIwMjEwNzEzLTE5MjQiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGciIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwa2l4IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcGtpeC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjcHJvdi5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgorICAgICAgPHVuaXQgaWQ9Im9yZy5ib3VuY3ljYXN0bGUuYmN1dGlsIiB2ZXJzaW9uPSIxLjcwLjAudjIwMjIwMTA1LTE1MjIiLz4KKyAgICAgIDx1bml0IGlkPSJvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UiIHZlcnNpb249IjEuNzAuMC52MjAyMjAxMDUtMTUyMiIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdCIgdmVyc2lvbj0iMi4yLjAudjIwMjEwNzExLTA4MjEiLz4KICAgICAgIDx1bml0IGlkPSJvcmcuaGFtY3Jlc3Quc291cmNlIiB2ZXJzaW9uPSIyLjIuMC52MjAyMTA3MTEtMDgyMSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy5oYW1jcmVzdC5jb3JlIiB2ZXJzaW9uPSIxLjMuMC52MjAxODA0MjAtMTUxOSIvPgpAQCAtODcsNyArODcsNyBAQAogICAgICAgPHVuaXQgaWQ9Im9yZy5zbGY0ai5iaW5kaW5nLnNpbXBsZS5zb3VyY2UiIHZlcnNpb249IjEuNy4zMC52MjAyMDAyMDQtMjE1MCIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6IiB2ZXJzaW9uPSIxLjkuMC52MjAyMTA2MjQtMTI1OSIvPgogICAgICAgPHVuaXQgaWQ9Im9yZy50dWthYW5pLnh6LnNvdXJjZSIgdmVyc2lvbj0iMS45LjAudjIwMjEwNjI0LTEyNTkiLz4KLSAgICAgIDxyZXBvc2l0b3J5IGxvY2F0aW9uPSJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy9kcm9wcy9SMjAyMTEyMTMxNzM4MTMvcmVwb3NpdG9yeSIvPgorICAgICAgPHJlcG9zaXRvcnkgbG9jYXRpb249Imh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIyMDMwMjE3MjIzMy9yZXBvc2l0b3J5Ii8+CiAgICAgPC9sb2NhdGlvbj4KICAgICA8bG9jYXRpb24gaW5jbHVkZU1vZGU9InNsaWNlciIgaW5jbHVkZUFsbFBsYXRmb3Jtcz0iZmFsc2UiIGluY2x1ZGVTb3VyY2U9InRydWUiIGluY2x1ZGVDb25maWd1cmVQaGFzZT0idHJ1ZSIgdHlwZT0iSW5zdGFsbGFibGVVbml0Ij4KICAgICAgIDx1bml0IGlkPSJvcmcuZWNsaXBzZS5vc2dpIiB2ZXJzaW9uPSIwLjAuMCIvPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIyLnRwZCBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L2pnaXQtNC4yMi50cGQKaW5kZXggMzdjOTNhNy4uZWIxNzIzYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvamdpdC00LjIyLnRwZAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9qZ2l0LTQuMjIudHBkCkBAIC0xLDcgKzEsNyBAQAogdGFyZ2V0ICJqZ2l0LTQuMjIiIHdpdGggc291cmNlIGNvbmZpZ3VyZVBoYXNlCiAKIGluY2x1ZGUgInByb2plY3RzL2pldHR5LTEwLjAueC50cGQiCi1pbmNsdWRlICJvcmJpdC9SMjAyMTEyMTMxNzM4MTMtMjAyMS0xMi50cGQiCitpbmNsdWRlICJvcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQiCiAKIGxvY2F0aW9uICJodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3JlbGVhc2VzLzIwMjEtMTIvIiB7CiAJb3JnLmVjbGlwc2Uub3NnaSBsYXp5CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9vcmJpdC9SMjAyMjAzMDIxNzIyMzMtMjAyMi0wMy50cGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmYzY4OQotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L29yYml0L1IyMDIyMDMwMjE3MjIzMy0yMDIyLTAzLnRwZApAQCAtMCwwICsxLDY5IEBACit0YXJnZXQgIlIyMDIyMDMwMjE3MjIzMyIgd2l0aCBzb3VyY2UgY29uZmlndXJlUGhhc2UKKy8vIHNlZSBodHRwczovL2Rvd25sb2FkLmVjbGlwc2Uub3JnL3Rvb2xzL29yYml0L2Rvd25sb2Fkcy8KKworbG9jYXRpb24gImh0dHBzOi8vZG93bmxvYWQuZWNsaXBzZS5vcmcvdG9vbHMvb3JiaXQvZG93bmxvYWRzL2Ryb3BzL1IyMDIyMDMwMjE3MjIzMy9yZXBvc2l0b3J5IiB7CisJY29tLmdvb2dsZS5nc29uIFsyLjguOS52MjAyMjAxMTEtMTQwOSwyLjguOS52MjAyMjAxMTEtMTQwOV0KKwljb20uZ29vZ2xlLmdzb24uc291cmNlIFsyLjguOS52MjAyMjAxMTEtMTQwOSwyLjguOS52MjAyMjAxMTEtMTQwOV0KKwljb20uamNyYWZ0LmpzY2ggWzAuMS41NS52MjAxOTA0MDQtMTkwMiwwLjEuNTUudjIwMTkwNDA0LTE5MDJdCisJY29tLmpjcmFmdC5qc2NoLnNvdXJjZSBbMC4xLjU1LnYyMDE5MDQwNC0xOTAyLDAuMS41NS52MjAxOTA0MDQtMTkwMl0KKwljb20uamNyYWZ0Lmp6bGliIFsxLjEuMS52MjAxMjA1MTAyMzA1LDEuMS4xLnYyMDEyMDUxMDIzMDVdCisJY29tLmpjcmFmdC5qemxpYi5zb3VyY2UgWzEuMS4xLnYyMDEyMDUxMDIzMDUsMS4xLjEudjIwMTIwNTEwMjMwNV0KKwljb20uc3VuLmpuYSBbNS44LjAudjIwMjEwNTAzLTAzNDMsNS44LjAudjIwMjEwNTAzLTAzNDNdCisJY29tLnN1bi5qbmEuc291cmNlIFs1LjguMC52MjAyMTA1MDMtMDM0Myw1LjguMC52MjAyMTA1MDMtMDM0M10KKwljb20uc3VuLmpuYS5wbGF0Zm9ybSBbNS44LjAudjIwMjEwNDA2LTEwMDQsNS44LjAudjIwMjEwNDA2LTEwMDRdCisJY29tLnN1bi5qbmEucGxhdGZvcm0uc291cmNlIFs1LjguMC52MjAyMTA0MDYtMTAwNCw1LjguMC52MjAyMTA0MDYtMTAwNF0KKwlqYXZhZXdhaCBbMS4xLjEzLnYyMDIxMTAyOS0wODM5LDEuMS4xMy52MjAyMTEwMjktMDgzOV0KKwlqYXZhZXdhaC5zb3VyY2UgWzEuMS4xMy52MjAyMTEwMjktMDgzOSwxLjEuMTMudjIwMjExMDI5LTA4MzldCisJbmV0LmJ5dGVidWRkeS5ieXRlLWJ1ZGR5IFsxLjkuMC52MjAxODExMDctMTQxMCwxLjkuMC52MjAxODExMDctMTQxMF0KKwluZXQuYnl0ZWJ1ZGR5LmJ5dGUtYnVkZHktYWdlbnQgWzEuOS4wLnYyMDE4MTEwNi0xNTM0LDEuOS4wLnYyMDE4MTEwNi0xNTM0XQorCW5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS1hZ2VudC5zb3VyY2UgWzEuOS4wLnYyMDE4MTEwNi0xNTM0LDEuOS4wLnYyMDE4MTEwNi0xNTM0XQorCW5ldC5ieXRlYnVkZHkuYnl0ZS1idWRkeS5zb3VyY2UgWzEuOS4wLnYyMDE4MTEwNy0xNDEwLDEuOS4wLnYyMDE4MTEwNy0xNDEwXQorCW5ldC5pMnAuY3J5cHRvLmVkZHNhIFswLjMuMC52MjAyMTA5MjMtMTQwMSwwLjMuMC52MjAyMTA5MjMtMTQwMV0KKwluZXQuaTJwLmNyeXB0by5lZGRzYS5zb3VyY2UgWzAuMy4wLnYyMDIxMDkyMy0xNDAxLDAuMy4wLnYyMDIxMDkyMy0xNDAxXQorCW9yZy5hcGFjaGUuYW50IFsxLjEwLjEyLnYyMDIxMTEwMi0xNDUyLDEuMTAuMTIudjIwMjExMTAyLTE0NTJdCisJb3JnLmFwYWNoZS5hbnQuc291cmNlIFsxLjEwLjEyLnYyMDIxMTEwMi0xNDUyLDEuMTAuMTIudjIwMjExMTAyLTE0NTJdCisJb3JnLmFwYWNoZS5jb21tb25zLmNvZGVjIFsxLjE0LjAudjIwMjAwODE4LTE0MjIsMS4xNC4wLnYyMDIwMDgxOC0xNDIyXQorCW9yZy5hcGFjaGUuY29tbW9ucy5jb2RlYy5zb3VyY2UgWzEuMTQuMC52MjAyMDA4MTgtMTQyMiwxLjE0LjAudjIwMjAwODE4LTE0MjJdCisJb3JnLmFwYWNoZS5jb21tb25zLmNvbXByZXNzIFsxLjIxLjAudjIwMjExMTAzLTIxMDAsMS4yMS4wLnYyMDIxMTEwMy0yMTAwXQorCW9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5zb3VyY2UgWzEuMjEuMC52MjAyMTExMDMtMjEwMCwxLjIxLjAudjIwMjExMTAzLTIxMDBdCisJb3JnLmFwYWNoZS5jb21tb25zLmxvZ2dpbmcgWzEuMi4wLnYyMDE4MDQwOS0xNTAyLDEuMi4wLnYyMDE4MDQwOS0xNTAyXQorCW9yZy5hcGFjaGUuY29tbW9ucy5sb2dnaW5nLnNvdXJjZSBbMS4yLjAudjIwMTgwNDA5LTE1MDIsMS4yLjAudjIwMTgwNDA5LTE1MDJdCisJb3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY2xpZW50IFs0LjUuMTMudjIwMjEwMTI4LTIyMjUsNC41LjEzLnYyMDIxMDEyOC0yMjI1XQorCW9yZy5hcGFjaGUuaHR0cGNvbXBvbmVudHMuaHR0cGNsaWVudC5zb3VyY2UgWzQuNS4xMy52MjAyMTAxMjgtMjIyNSw0LjUuMTMudjIwMjEwMTI4LTIyMjVdCisJb3JnLmFwYWNoZS5odHRwY29tcG9uZW50cy5odHRwY29yZSBbNC40LjE1LnYyMDIyMDIwOS0yMzQ1LDQuNC4xNS52MjAyMjAyMDktMjM0NV0KKwlvcmcuYXBhY2hlLmh0dHBjb21wb25lbnRzLmh0dHBjb3JlLnNvdXJjZSBbNC40LjE1LnYyMDIyMDIwOS0yMzQ1LDQuNC4xNS52MjAyMjAyMDktMjM0NV0KKwlvcmcuYXBhY2hlLnNzaGQub3NnaSBbMi44LjAudjIwMjExMjI3LTE3NTAsMi44LjAudjIwMjExMjI3LTE3NTBdCisJb3JnLmFwYWNoZS5zc2hkLm9zZ2kuc291cmNlIFsyLjguMC52MjAyMTEyMjctMTc1MCwyLjguMC52MjAyMTEyMjctMTc1MF0KKwlvcmcuYXBhY2hlLnNzaGQuc2Z0cCBbMi44LjAudjIwMjExMjI3LTE3NTAsMi44LjAudjIwMjExMjI3LTE3NTBdCisJb3JnLmFwYWNoZS5zc2hkLnNmdHAuc291cmNlIFsyLjguMC52MjAyMTEyMjctMTc1MCwyLjguMC52MjAyMTEyMjctMTc1MF0KKwlvcmcuYXNzZXJ0aiBbMy4yMC4yLnYyMDIxMDcwNi0xMTA0LDMuMjAuMi52MjAyMTA3MDYtMTEwNF0KKwlvcmcuYXNzZXJ0ai5zb3VyY2UgWzMuMjAuMi52MjAyMTA3MDYtMTEwNCwzLjIwLjIudjIwMjEwNzA2LTExMDRdCisJb3JnLmJvdW5jeWNhc3RsZS5iY3BnIFsxLjcwLjAudjIwMjIwMTA1LTE1MjIsMS43MC4wLnYyMDIyMDEwNS0xNTIyXQorCW9yZy5ib3VuY3ljYXN0bGUuYmNwZy5zb3VyY2UgWzEuNzAuMC52MjAyMjAxMDUtMTUyMiwxLjcwLjAudjIwMjIwMTA1LTE1MjJdCisJb3JnLmJvdW5jeWNhc3RsZS5iY3BraXggWzEuNzAuMC52MjAyMjAxMDUtMTUyMiwxLjcwLjAudjIwMjIwMTA1LTE1MjJdCisJb3JnLmJvdW5jeWNhc3RsZS5iY3BraXguc291cmNlIFsxLjcwLjAudjIwMjIwMTA1LTE1MjIsMS43MC4wLnYyMDIyMDEwNS0xNTIyXQorCW9yZy5ib3VuY3ljYXN0bGUuYmNwcm92IFsxLjcwLjAudjIwMjIwMTA1LTE1MjIsMS43MC4wLnYyMDIyMDEwNS0xNTIyXQorCW9yZy5ib3VuY3ljYXN0bGUuYmNwcm92LnNvdXJjZSBbMS43MC4wLnYyMDIyMDEwNS0xNTIyLDEuNzAuMC52MjAyMjAxMDUtMTUyMl0KKwlvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbCBbMS43MC4wLnYyMDIyMDEwNS0xNTIyLDEuNzAuMC52MjAyMjAxMDUtMTUyMl0KKwlvcmcuYm91bmN5Y2FzdGxlLmJjdXRpbC5zb3VyY2UgWzEuNzAuMC52MjAyMjAxMDUtMTUyMiwxLjcwLjAudjIwMjIwMTA1LTE1MjJdCisJb3JnLmhhbWNyZXN0IFsyLjIuMC52MjAyMTA3MTEtMDgyMSwyLjIuMC52MjAyMTA3MTEtMDgyMV0KKwlvcmcuaGFtY3Jlc3Quc291cmNlIFsyLjIuMC52MjAyMTA3MTEtMDgyMSwyLjIuMC52MjAyMTA3MTEtMDgyMV0KKwlvcmcuaGFtY3Jlc3QuY29yZSBbMS4zLjAudjIwMTgwNDIwLTE1MTksMS4zLjAudjIwMTgwNDIwLTE1MTldCisJb3JnLmhhbWNyZXN0LmNvcmUuc291cmNlIFsxLjMuMC52MjAxODA0MjAtMTUxOSwxLjMuMC52MjAxODA0MjAtMTUxOV0KKwlvcmcuaGFtY3Jlc3QubGlicmFyeSBbMS4zLjAudjIwMTgwNTI0LTIyNDYsMS4zLjAudjIwMTgwNTI0LTIyNDZdCisJb3JnLmhhbWNyZXN0LmxpYnJhcnkuc291cmNlIFsxLjMuMC52MjAxODA1MjQtMjI0NiwxLjMuMC52MjAxODA1MjQtMjI0Nl0KKwlvcmcuanVuaXQgWzQuMTMuMi52MjAyMTEwMTgtMTk1Niw0LjEzLjIudjIwMjExMDE4LTE5NTZdCisJb3JnLmp1bml0LnNvdXJjZSBbNC4xMy4yLnYyMDIxMTAxOC0xOTU2LDQuMTMuMi52MjAyMTEwMTgtMTk1Nl0KKwlvcmcua29oc3VrZS5hcmdzNGogWzIuMzMuMC52MjAxNjAzMjMtMjIxOCwyLjMzLjAudjIwMTYwMzIzLTIyMThdCisJb3JnLmtvaHN1a2UuYXJnczRqLnNvdXJjZSBbMi4zMy4wLnYyMDE2MDMyMy0yMjE4LDIuMzMuMC52MjAxNjAzMjMtMjIxOF0KKwlvcmcubW9ja2l0byBbMi4yMy4wLnYyMDIwMDMxMC0xNjQyLDIuMjMuMC52MjAyMDAzMTAtMTY0Ml0KKwlvcmcubW9ja2l0by5zb3VyY2UgWzIuMjMuMC52MjAyMDAzMTAtMTY0MiwyLjIzLjAudjIwMjAwMzEwLTE2NDJdCisJb3JnLm9iamVuZXNpcyBbMi42LjAudjIwMTgwNDIwLTE1MTksMi42LjAudjIwMTgwNDIwLTE1MTldCisJb3JnLm9iamVuZXNpcy5zb3VyY2UgWzIuNi4wLnYyMDE4MDQyMC0xNTE5LDIuNi4wLnYyMDE4MDQyMC0xNTE5XQorCW9yZy5zbGY0ai5hcGkgWzEuNy4zMC52MjAyMDAyMDQtMjE1MCwxLjcuMzAudjIwMjAwMjA0LTIxNTBdCisJb3JnLnNsZjRqLmFwaS5zb3VyY2UgWzEuNy4zMC52MjAyMDAyMDQtMjE1MCwxLjcuMzAudjIwMjAwMjA0LTIxNTBdCisJb3JnLnNsZjRqLmJpbmRpbmcuc2ltcGxlIFsxLjcuMzAudjIwMjAwMjA0LTIxNTAsMS43LjMwLnYyMDIwMDIwNC0yMTUwXQorCW9yZy5zbGY0ai5iaW5kaW5nLnNpbXBsZS5zb3VyY2UgWzEuNy4zMC52MjAyMDAyMDQtMjE1MCwxLjcuMzAudjIwMjAwMjA0LTIxNTBdCisJb3JnLnR1a2FhbmkueHogWzEuOS4wLnYyMDIxMDYyNC0xMjU5LDEuOS4wLnYyMDIxMDYyNC0xMjU5XQorCW9yZy50dWthYW5pLnh6LnNvdXJjZSBbMS45LjAudjIwMjEwNjI0LTEyNTksMS45LjAudjIwMjEwNjI0LTEyNTldCit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9wb20ueG1sIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvb3JnLmVjbGlwc2UuamdpdC50YXJnZXQvcG9tLnhtbAppbmRleCA4YmVlMWZjLi4yYTk1MDQyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL29yZy5lY2xpcHNlLmpnaXQudGFyZ2V0L3BvbS54bWwKQEAgLTE2LDcgKzE2LDcgQEAKICAgPHBhcmVudD4KICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZ2l0PC9ncm91cElkPgogICAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICAgIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICAgIDx2ZXJzaW9uPjYuMS4xLVNOQVBTSE9UPC92ZXJzaW9uPgogICA8L3BhcmVudD4KIAogICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LnRhcmdldDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy9wb20ueG1sCmluZGV4IDgwYTY0YmQuLmI2NTA1OTggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGFja2FnaW5nL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wYWNrYWdpbmcvcG9tLnhtbApAQCAtMTYsNyArMTYsNyBAQAogCiAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgIDxhcnRpZmFjdElkPmpnaXQudHljaG8ucGFyZW50PC9hcnRpZmFjdElkPgotICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+CiAKICAgPG5hbWU+SkdpdCBUeWNobyBQYXJlbnQ8L25hbWU+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBhZjAwYjBhLi5mNWM0ZGU0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMjggKzMsMzAgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdAotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLUFjdGl2YXRpb25Qb2xpY3k6IGxhenkKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKLUltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5vcHQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKK0ltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI2LjEuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtLm9wdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5oYW1jcmVzdC5jb3JlO2J1bmRsZS12ZXJzaW9uPSJbMi4yLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQucnVsZXM7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvcG9tLnhtbAppbmRleCBjZDJiYjYzLi5jODI0Nzg4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0Rlc2NyaWJlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vRGVzY3JpYmVUZXN0LmphdmEKaW5kZXggNGJhZDczYi4uYzc4NTQ0MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vRGVzY3JpYmVUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9wZ20vRGVzY3JpYmVUZXN0LmphdmEKQEAgLTg5LDYgKzg5LDMxIEBAIHB1YmxpYyB2b2lkIHRlc3REZXNjcmliZUNvbW1pdE1hdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJfQogCiAJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVzY3JpYmVDb21taXRNYXRjaEFiYnJldigpIHRocm93cyBFeGNlcHRpb24geworCQlpbml0aWFsQ29tbWl0QW5kVGFnKCk7CisJCXNlY29uZENvbW1pdCgpOworCQlhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10geyAidjEuMC0xLWc1NmY2Y2ViZGYzZjUiLCAiIiB9LAorCQkJCWV4ZWN1dGUoImdpdCBkZXNjcmliZSAtLWFiYnJldiAxMiAtLW1hdGNoIHYxLioiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVzY3JpYmVDb21taXRNYXRjaEFiYnJldk1pbigpIHRocm93cyBFeGNlcHRpb24geworCQlpbml0aWFsQ29tbWl0QW5kVGFnKCk7CisJCXNlY29uZENvbW1pdCgpOworCQlhc3NlcnRBcnJheUVxdWFscyhuZXcgU3RyaW5nW10geyAidjEuMC0xLWc1NmY2IiwgIiIgfSwKKwkJCQlleGVjdXRlKCJnaXQgZGVzY3JpYmUgLS1hYmJyZXYgLTUgLS1tYXRjaCB2MS4qIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlc2NyaWJlQ29tbWl0TWF0Y2hBYmJyZXZNYXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJaW5pdGlhbENvbW1pdEFuZFRhZygpOworCQlzZWNvbmRDb21taXQoKTsKKwkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IFN0cmluZ1tdIHsKKwkJCQkidjEuMC0xLWc1NmY2Y2ViZGYzZjVjZWVlY2Q4MDMzNjVhYmYwOTk2ZmIxZmEwMDZkIiwgIiIgfSwKKwkJCQlleGVjdXRlKCJnaXQgZGVzY3JpYmUgLS1hYmJyZXYgNTAgLS1tYXRjaCB2MS4qIikpOworCX0KKworCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdERlc2NyaWJlQ29tbWl0TWF0Y2gyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWluaXRpYWxDb21taXRBbmRUYWcoKTsKIAkJc2Vjb25kQ29tbWl0KCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EaWZmVG9vbFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0RpZmZUb29sVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YmY0ODQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EaWZmVG9vbFRlc3QuamF2YQpAQCAtMCwwICsxLDIwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSwgU2ltZW9uIEFuZHJlZXYgPHNpbWVvbi5kYW5haWxvdi5hbmRyZWV2QGdtYWlsLmNvbT4gYW5kIG90aGVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQucGdtOworCitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworCitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuR2l0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sLkNvbW1hbmRMaW5lRGlmZlRvb2w7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ0xJUmVwb3NpdG9yeVRlc3RDYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGdtLm9wdC5DbWRMaW5lUGFyc2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucGdtLm9wdC5TdWJjb21tYW5kSGFuZGxlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuRmlsZVRyZWVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLlRyZWVXYWxrOworaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmtvaHN1a2UuYXJnczRqLkFyZ3VtZW50OworCisvKioKKyAqIFRlc3RpbmcgdGhlIHtAY29kZSBkaWZmdG9vbH0gY29tbWFuZC4KKyAqLworcHVibGljIGNsYXNzIERpZmZUb29sVGVzdCBleHRlbmRzIENMSVJlcG9zaXRvcnlUZXN0Q2FzZSB7CisJcHVibGljIHN0YXRpYyBjbGFzcyBHaXRDbGlKR2l0V3JhcHBlclBhcnNlciB7CisJCUBBcmd1bWVudChpbmRleCA9IDAsIG1ldGFWYXIgPSAibWV0YVZhcl9jb21tYW5kIiwgcmVxdWlyZWQgPSB0cnVlLCBoYW5kbGVyID0gU3ViY29tbWFuZEhhbmRsZXIuY2xhc3MpCisJCVRleHRCdWlsdGluIHN1YmNvbW1hbmQ7CisKKwkJQEFyZ3VtZW50KGluZGV4ID0gMSwgbWV0YVZhciA9ICJtZXRhVmFyX2FyZyIpCisJCUxpc3Q8U3RyaW5nPiBhcmd1bWVudHMgPSBuZXcgQXJyYXlMaXN0PD4oKTsKKwl9CisKKwlwcml2YXRlIFN0cmluZ1tdIHJ1bkFuZENhcHR1cmVVc2luZ0luaXRSYXcoU3RyaW5nLi4uIGFyZ3MpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJQ0xJR2l0Q29tbWFuZC5SZXN1bHQgcmVzdWx0ID0gbmV3IENMSUdpdENvbW1hbmQuUmVzdWx0KCk7CisKKwkJR2l0Q2xpSkdpdFdyYXBwZXJQYXJzZXIgYmVhbiA9IG5ldyBHaXRDbGlKR2l0V3JhcHBlclBhcnNlcigpOworCQlDbWRMaW5lUGFyc2VyIGNscCA9IG5ldyBDbWRMaW5lUGFyc2VyKGJlYW4pOworCQljbHAucGFyc2VBcmd1bWVudChhcmdzKTsKKworCQlUZXh0QnVpbHRpbiBjbWQgPSBiZWFuLnN1YmNvbW1hbmQ7CisJCWNtZC5pbml0UmF3KGRiLCBudWxsLCBudWxsLCByZXN1bHQub3V0LCByZXN1bHQuZXJyKTsKKwkJY21kLmV4ZWN1dGUoYmVhbi5hcmd1bWVudHMudG9BcnJheShuZXcgU3RyaW5nW2JlYW4uYXJndW1lbnRzLnNpemUoKV0pKTsKKwkJaWYgKGNtZC5nZXRPdXRwdXRXcml0ZXIoKSAhPSBudWxsKSB7CisJCQljbWQuZ2V0T3V0cHV0V3JpdGVyKCkuZmx1c2goKTsKKwkJfQorCQlpZiAoY21kLmdldEVycm9yV3JpdGVyKCkgIT0gbnVsbCkgeworCQkJY21kLmdldEVycm9yV3JpdGVyKCkuZmx1c2goKTsKKwkJfQorCQlyZXR1cm4gcmVzdWx0Lm91dExpbmVzKCkudG9BcnJheShuZXcgU3RyaW5nWzBdKTsKKwl9CisKKwlwcml2YXRlIEdpdCBnaXQ7CisKKwlAT3ZlcnJpZGUKKwlAQmVmb3JlCisJcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc3VwZXIuc2V0VXAoKTsKKwkJZ2l0ID0gbmV3IEdpdChkYik7CisJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RUb29sKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVJldkNvbW1pdCBjb21taXQgPSBjcmVhdGVVbnN0YWdlZENoYW5nZXMoKTsKKwkJTGlzdDxEaWZmRW50cnk+IGNoYW5nZXMgPSBnZXRSZXBvc2l0b3J5Q2hhbmdlcyhjb21taXQpOworCQlTdHJpbmdbXSBleHBlY3RlZE91dHB1dCA9IGdldEV4cGVjdGVkRGlmZlRvb2xPdXRwdXQoY2hhbmdlcyk7CisKKwkJU3RyaW5nW10gb3B0aW9ucyA9IHsKKwkJCQkiLS10b29sIiwKKwkJCQkiLXQiLAorCQl9OworCisJCWZvciAoU3RyaW5nIG9wdGlvbiA6IG9wdGlvbnMpIHsKKwkJCWFzc2VydEFycmF5T2ZMaW5lc0VxdWFscygiSW5jb3JyZWN0IG91dHB1dCBmb3Igb3B0aW9uOiAiICsgb3B0aW9uLAorCQkJCQlleHBlY3RlZE91dHB1dCwKKwkJCQkJcnVuQW5kQ2FwdHVyZVVzaW5nSW5pdFJhdygiZGlmZnRvb2wiLCBvcHRpb24sCisJCQkJCQkJInNvbWVfdG9vbCIpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFRvb2xUcnVzdEV4aXRDb2RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVJldkNvbW1pdCBjb21taXQgPSBjcmVhdGVVbnN0YWdlZENoYW5nZXMoKTsKKwkJTGlzdDxEaWZmRW50cnk+IGNoYW5nZXMgPSBnZXRSZXBvc2l0b3J5Q2hhbmdlcyhjb21taXQpOworCQlTdHJpbmdbXSBleHBlY3RlZE91dHB1dCA9IGdldEV4cGVjdGVkRGlmZlRvb2xPdXRwdXQoY2hhbmdlcyk7CisKKwkJU3RyaW5nW10gb3B0aW9ucyA9IHsgIi0tdG9vbCIsICItdCIsIH07CisKKwkJZm9yIChTdHJpbmcgb3B0aW9uIDogb3B0aW9ucykgeworCQkJYXNzZXJ0QXJyYXlPZkxpbmVzRXF1YWxzKCJJbmNvcnJlY3Qgb3V0cHV0IGZvciBvcHRpb246ICIgKyBvcHRpb24sCisJCQkJCWV4cGVjdGVkT3V0cHV0LCBydW5BbmRDYXB0dXJlVXNpbmdJbml0UmF3KCJkaWZmdG9vbCIsCisJCQkJCQkJIi0tdHJ1c3QtZXhpdC1jb2RlIiwgb3B0aW9uLCAic29tZV90b29sIikpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VG9vbE5vR3VpTm9Qcm9tcHROb1RydXN0RXhpdGNvZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJUmV2Q29tbWl0IGNvbW1pdCA9IGNyZWF0ZVVuc3RhZ2VkQ2hhbmdlcygpOworCQlMaXN0PERpZmZFbnRyeT4gY2hhbmdlcyA9IGdldFJlcG9zaXRvcnlDaGFuZ2VzKGNvbW1pdCk7CisJCVN0cmluZ1tdIGV4cGVjdGVkT3V0cHV0ID0gZ2V0RXhwZWN0ZWREaWZmVG9vbE91dHB1dChjaGFuZ2VzKTsKKworCQlTdHJpbmdbXSBvcHRpb25zID0geyAiLS10b29sIiwgIi10IiwgfTsKKworCQlmb3IgKFN0cmluZyBvcHRpb24gOiBvcHRpb25zKSB7CisJCQlhc3NlcnRBcnJheU9mTGluZXNFcXVhbHMoIkluY29ycmVjdCBvdXRwdXQgZm9yIG9wdGlvbjogIiArIG9wdGlvbiwKKwkJCQkJZXhwZWN0ZWRPdXRwdXQsIHJ1bkFuZENhcHR1cmVVc2luZ0luaXRSYXcoImRpZmZ0b29sIiwKKwkJCQkJCQkiLS1uby1ndWkiLCAiLS1uby1wcm9tcHQiLCAiLS1uby10cnVzdC1leGl0LWNvZGUiLAorCQkJCQkJCW9wdGlvbiwgInNvbWVfdG9vbCIpKTsKKwkJfQorCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFRvb2xDYWNoZWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJUmV2Q29tbWl0IGNvbW1pdCA9IGNyZWF0ZVN0YWdlZENoYW5nZXMoKTsKKwkJTGlzdDxEaWZmRW50cnk+IGNoYW5nZXMgPSBnZXRSZXBvc2l0b3J5Q2hhbmdlcyhjb21taXQpOworCQlTdHJpbmdbXSBleHBlY3RlZE91dHB1dCA9IGdldEV4cGVjdGVkRGlmZlRvb2xPdXRwdXQoY2hhbmdlcyk7CisKKwkJU3RyaW5nW10gb3B0aW9ucyA9IHsgIi0tY2FjaGVkIiwgIi0tc3RhZ2VkIiwgfTsKKworCQlmb3IgKFN0cmluZyBvcHRpb24gOiBvcHRpb25zKSB7CisJCQlhc3NlcnRBcnJheU9mTGluZXNFcXVhbHMoIkluY29ycmVjdCBvdXRwdXQgZm9yIG9wdGlvbjogIiArIG9wdGlvbiwKKwkJCQkJZXhwZWN0ZWRPdXRwdXQsIHJ1bkFuZENhcHR1cmVVc2luZ0luaXRSYXcoImRpZmZ0b29sIiwKKwkJCQkJCQlvcHRpb24sICItLXRvb2wiLCAic29tZV90b29sIikpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VG9vbEhlbHAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJQ29tbWFuZExpbmVEaWZmVG9vbFtdIGRlZmF1bHRUb29scyA9IENvbW1hbmRMaW5lRGlmZlRvb2wudmFsdWVzKCk7CisJCUxpc3Q8U3RyaW5nPiBleHBlY3RlZE91dHB1dCA9IG5ldyBBcnJheUxpc3Q8PigpOworCQlleHBlY3RlZE91dHB1dC5hZGQoImdpdCBkaWZmdG9vbCAtLXRvb2w9PHRvb2w+IG1heSBiZSBzZXQgdG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6Iik7CisJCWZvciAoQ29tbWFuZExpbmVEaWZmVG9vbCBkZWZhdWx0VG9vbCA6IGRlZmF1bHRUb29scykgeworCQkJU3RyaW5nIHRvb2xOYW1lID0gZGVmYXVsdFRvb2wubmFtZSgpOworCQkJZXhwZWN0ZWRPdXRwdXQuYWRkKHRvb2xOYW1lKTsKKwkJfQorCQlTdHJpbmdbXSB1c2VyRGVmaW5lZFRvb2xzSGVscCA9IHsKKwkJCQkidXNlci1kZWZpbmVkOiIsCisJCQkJIlRoZSBmb2xsb3dpbmcgdG9vbHMgYXJlIHZhbGlkLCBidXQgbm90IGN1cnJlbnRseSBhdmFpbGFibGU6IiwKKwkJCQkiU29tZSBvZiB0aGUgdG9vbHMgbGlzdGVkIGFib3ZlIG9ubHkgd29yayBpbiBhIHdpbmRvd2VkIiwKKwkJCQkiZW52aXJvbm1lbnQuIElmIHJ1biBpbiBhIHRlcm1pbmFsLW9ubHkgc2Vzc2lvbiwgdGhleSB3aWxsIGZhaWwuIiwKKwkJfTsKKwkJZXhwZWN0ZWRPdXRwdXQuYWRkQWxsKEFycmF5cy5hc0xpc3QodXNlckRlZmluZWRUb29sc0hlbHApKTsKKworCQlTdHJpbmcgb3B0aW9uID0gIi0tdG9vbC1oZWxwIjsKKwkJYXNzZXJ0QXJyYXlPZkxpbmVzRXF1YWxzKCJJbmNvcnJlY3Qgb3V0cHV0IGZvciBvcHRpb246ICIgKyBvcHRpb24sCisJCQkJZXhwZWN0ZWRPdXRwdXQudG9BcnJheShuZXcgU3RyaW5nWzBdKSwgcnVuQW5kQ2FwdHVyZVVzaW5nSW5pdFJhdygiZGlmZnRvb2wiLCBvcHRpb24pKTsKKwl9CisKKwlwcml2YXRlIFJldkNvbW1pdCBjcmVhdGVVbnN0YWdlZENoYW5nZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJd3JpdGVUcmFzaEZpbGUoImEiLCAiSGVsbG8gd29ybGQgYSIpOworCQl3cml0ZVRyYXNoRmlsZSgiYiIsICJIZWxsbyB3b3JsZCBiIik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJmaWxlcyBhICYgYiIpLmNhbGwoKTsKKwkJd3JpdGVUcmFzaEZpbGUoImEiLCAiTmV3IEhlbGxvIHdvcmxkIGEiKTsKKwkJd3JpdGVUcmFzaEZpbGUoImIiLCAiTmV3IEhlbGxvIHdvcmxkIGIiKTsKKwkJcmV0dXJuIGNvbW1pdDsKKwl9CisKKwlwcml2YXRlIFJldkNvbW1pdCBjcmVhdGVTdGFnZWRDaGFuZ2VzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVJldkNvbW1pdCBjb21taXQgPSBjcmVhdGVVbnN0YWdlZENoYW5nZXMoKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQlyZXR1cm4gY29tbWl0OworCX0KKworCXByaXZhdGUgTGlzdDxEaWZmRW50cnk+IGdldFJlcG9zaXRvcnlDaGFuZ2VzKFJldkNvbW1pdCBjb21taXQpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJVHJlZVdhbGsgdHcgPSBuZXcgVHJlZVdhbGsoZGIpOworCQl0dy5hZGRUcmVlKGNvbW1pdC5nZXRUcmVlKCkpOworCQlGaWxlVHJlZUl0ZXJhdG9yIG1vZGlmaWVkVHJlZSA9IG5ldyBGaWxlVHJlZUl0ZXJhdG9yKGRiKTsKKwkJdHcuYWRkVHJlZShtb2RpZmllZFRyZWUpOworCQlMaXN0PERpZmZFbnRyeT4gY2hhbmdlcyA9IERpZmZFbnRyeS5zY2FuKHR3KTsKKwkJcmV0dXJuIGNoYW5nZXM7CisJfQorCisJcHJpdmF0ZSBTdHJpbmdbXSBnZXRFeHBlY3RlZERpZmZUb29sT3V0cHV0KExpc3Q8RGlmZkVudHJ5PiBjaGFuZ2VzKSB7CisJCVN0cmluZ1tdIGV4cGVjdGVkVG9vbE91dHB1dCA9IG5ldyBTdHJpbmdbY2hhbmdlcy5zaXplKCldOworCQlmb3IgKGludCBpID0gMDsgaSA8IGNoYW5nZXMuc2l6ZSgpOyArK2kpIHsKKwkJCURpZmZFbnRyeSBjaGFuZ2UgPSBjaGFuZ2VzLmdldChpKTsKKwkJCVN0cmluZyBuZXdQYXRoID0gY2hhbmdlLmdldE5ld1BhdGgoKTsKKwkJCVN0cmluZyBvbGRQYXRoID0gY2hhbmdlLmdldE9sZFBhdGgoKTsKKwkJCVN0cmluZyBuZXdJZE5hbWUgPSBjaGFuZ2UuZ2V0TmV3SWQoKS5uYW1lKCk7CisJCQlTdHJpbmcgb2xkSWROYW1lID0gY2hhbmdlLmdldE9sZElkKCkubmFtZSgpOworCQkJU3RyaW5nIGV4cGVjdGVkTGluZSA9ICJNXHQiICsgbmV3UGF0aCArICIgKCIgKyBuZXdJZE5hbWUgKyAiKSIKKwkJCQkJKyAiXHQiICsgb2xkUGF0aCArICIgKCIgKyBvbGRJZE5hbWUgKyAiKSI7CisJCQlleHBlY3RlZFRvb2xPdXRwdXRbaV0gPSBleHBlY3RlZExpbmU7CisJCX0KKwkJcmV0dXJuIGV4cGVjdGVkVG9vbE91dHB1dDsKKwl9CisKKwlwcml2YXRlIHN0YXRpYyB2b2lkIGFzc2VydEFycmF5T2ZMaW5lc0VxdWFscyhTdHJpbmcgZmFpbE1lc3NhZ2UsCisJCQlTdHJpbmdbXSBleHBlY3RlZCwgU3RyaW5nW10gYWN0dWFsKSB7CisJCWFzc2VydEVxdWFscyhmYWlsTWVzc2FnZSwgdG9TdHJpbmcoZXhwZWN0ZWQpLCB0b1N0cmluZyhhY3R1YWwpKTsKKwl9Cit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9GZXRjaFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0ZldGNoVGVzdC5qYXZhCmluZGV4IDU2NGJkNWYuLjFjNmI3ODMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0ZldGNoVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvcGdtL0ZldGNoVGVzdC5qYXZhCkBAIC0zMyw2ICszMyw3IEBAIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJpbml0aWFsIGNvbW1pdCIpLmNhbGwoKTsKIAogCQlSZXBvc2l0b3J5IHJlbW90ZVJlcG9zaXRvcnkgPSBjcmVhdGVXb3JrUmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShyZW1vdGVSZXBvc2l0b3J5KTsKIAkJcmVtb3RlR2l0ID0gbmV3IEdpdChyZW1vdGVSZXBvc2l0b3J5KTsKIAogCQkvLyBzZXR1cCB0aGUgZmlyc3QgcmVwb3NpdG9yeSB0byBmZXRjaCBmcm9tIHRoZSBzZWNvbmQgcmVwb3NpdG9yeQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9NQU5JRkVTVC5NRgppbmRleCBmZmFhZmMxLi5lZDk4MGI1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtMyw3ICszLDcgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5wZ20KIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQucGdtCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCkBAIC0xNCw0NyArMTQsNDkgQEAKICBvcmcuZWNsaXBzZS5qZXR0eS5zZXJ2bGV0O3ZlcnNpb249IlsxMC4wLjAsMTEuMC4wKSIsCiAgb3JnLmVjbGlwc2UuamV0dHkudXRpbDt2ZXJzaW9uPSJbMTAuMC4wLDExLjAuMCkiLAogIG9yZy5lY2xpcHNlLmpldHR5LnV0aWwuY29tcG9uZW50O3ZlcnNpb249IlsxMC4wLjAsMTEuMC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXJjaGl2ZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYmxhbWU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuczM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2guanNjaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ibGFtZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnMuc2VydmVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGZzLnNlcnZlci5mczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIuczM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwLmFwYWNoZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2guanNjaDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcua29oc3VrZS5hcmdzNGo7dmVyc2lvbj0iWzIuMzMuMCwzLjAuMCkiLAogIG9yZy5rb2hzdWtlLmFyZ3M0ai5zcGk7dmVyc2lvbj0iWzIuMzMuMCwzLjAuMCkiCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5jb25zb2xlO3ZlcnNpb249IjYuMC4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmNvbnNvbGU7dmVyc2lvbj0iNi4xLjEiOwogIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW8sCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpLApAQCAtNjYsMTQgKzY4LDE0IEBACiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC5hcGksCiAgICBqYXZheC5zd2luZyIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20uZGVidWc7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQucGdtLmRlYnVnO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbywKICAgIG9yZy5lY2xpcHNlLmpnaXQucGdtLAogICAgb3JnLmVjbGlwc2UuamV0dHkuc2VydmxldCIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249IjYuMS4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5wZ20udGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5wZ20ub3B0O3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5vcHQ7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmtvaHN1a2UuYXJnczRqLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKaW5kZXggMjYyNjlkNy4uMGE1ZGQ4OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnBnbSAtIFNvdXJjZXMKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQucGdtLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5wZ207dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSI2LjEuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vTUVUQS1JTkYvc2VydmljZXMvb3JnLmVjbGlwc2UuamdpdC5wZ20uVGV4dEJ1aWx0aW4gYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgppbmRleCBlNjQ1MjU1Li44YzQ0NzY0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9NRVRBLUlORi9zZXJ2aWNlcy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS5UZXh0QnVpbHRpbgpAQCAtMTIsNiArMTIsNyBAQAogb3JnLmVjbGlwc2UuamdpdC5wZ20uRGFlbW9uCiBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5EZXNjcmliZQogb3JnLmVjbGlwc2UuamdpdC5wZ20uRGlmZgorb3JnLmVjbGlwc2UuamdpdC5wZ20uRGlmZlRvb2wKIG9yZy5lY2xpcHNlLmpnaXQucGdtLkRpZmZUcmVlCiBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5GZXRjaAogb3JnLmVjbGlwc2UuamdpdC5wZ20uR2MKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9wb20ueG1sCmluZGV4IDA1ZTBiY2MuLmMxODlkYzcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQucGdtPC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LnByb3BlcnRpZXMKaW5kZXggOTc0NTAwMy4uZmRhMGJmNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQucHJvcGVydGllcworKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5wcm9wZXJ0aWVzCkBAIC01OCw2ICs1OCw5IEBACiBkYXRlSW5mbz1EYXRlOiAgIHswfQogZGVsZXRlZEJyYW5jaD1EZWxldGVkIGJyYW5jaCB7MH0KIGRlbGV0ZWRSZW1vdGVCcmFuY2g9RGVsZXRlZCByZW1vdGUgYnJhbmNoIHswfQorZGlmZlRvb2xIZWxwU2V0VG9Gb2xsb3dpbmc9J2dpdCBkaWZmdG9vbCAtLXRvb2w9PHRvb2w+JyBtYXkgYmUgc2V0IHRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOlxuezB9XG5cdHVzZXItZGVmaW5lZDpcbnsxfVxuVGhlIGZvbGxvd2luZyB0b29scyBhcmUgdmFsaWQsIGJ1dCBub3QgY3VycmVudGx5IGF2YWlsYWJsZTpcbnsyfVxuU29tZSBvZiB0aGUgdG9vbHMgbGlzdGVkIGFib3ZlIG9ubHkgd29yayBpbiBhIHdpbmRvd2VkXG5lbnZpcm9ubWVudC4gSWYgcnVuIGluIGEgdGVybWluYWwtb25seSBzZXNzaW9uLCB0aGV5IHdpbGwgZmFpbC4KK2RpZmZUb29sTGF1bmNoPVZpZXdpbmcgKHswfS97MX0pOiAnezJ9J1xuTGF1bmNoICd7M30nIFtZL25dPworZGlmZlRvb2xEaWVkPWV4dGVybmFsIGRpZmYgZGllZCwgc3RvcHBpbmcgYXQgezB9CiBkb2VzTm90RXhpc3Q9ezB9IGRvZXMgbm90IGV4aXN0CiBkb250T3ZlcndyaXRlTG9jYWxDaGFuZ2VzPWVycm9yOiBZb3VyIGxvY2FsIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBmaWxlIHdvdWxkIGJlIG92ZXJ3cml0dGVuIGJ5IG1lcmdlOgogZXZlcnl0aGluZ1VwVG9EYXRlPUV2ZXJ5dGhpbmcgdXAtdG8tZGF0ZQpAQCAtMTQ1LDYgKzE0OCw3IEBACiBtZXRhVmFyX3NlY29uZHM9U0VDT05EUwogbWV0YVZhcl9zZXJ2aWNlPVNFUlZJQ0UKIG1ldGFWYXJfdGFnTG9jYWxVc2VyPTxHUEcga2V5IElEPgorbWV0YVZhcl90b29sPVRPT0wKIG1ldGFWYXJfdHJlZWlzaD10cmVlLWlzaAogbWV0YVZhcl91cmlpc2g9dXJpLWlzaAogbWV0YVZhcl91cmw9VVJMCkBAIC0yMjUsNiArMjI5LDcgQEAKIHVuc3VwcG9ydGVkT3BlcmF0aW9uPVVuc3VwcG9ydGVkIG9wZXJhdGlvbjogezB9CiB1bnRyYWNrZWRGaWxlcz1VbnRyYWNrZWQgZmlsZXM6CiB1cGRhdGluZz1VcGRhdGluZyB7MH0uLnsxfQordXNhZ2VfQWJicmV2PUluc3RlYWQgb2YgdXNpbmcgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGhleGFkZWNpbWFsIGRpZ2l0cyAod2hpY2ggd2lsbCB2YXJ5IGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHJlcG9zaXRvcnkgd2l0aCBhIGRlZmF1bHQgb2YgNykgb2YgdGhlIGFiYnJldmlhdGVkIG9iamVjdCBuYW1lLCB1c2UgPG4+IGRpZ2l0cywgb3IgYXMgbWFueSBkaWdpdHMgYXMgbmVlZGVkIHRvIGZvcm0gYSB1bmlxdWUgb2JqZWN0IG5hbWUuIEFuIDxuPiBvZiAwIHdpbGwgc3VwcHJlc3MgbG9uZyBmb3JtYXQsIG9ubHkgc2hvd2luZyB0aGUgY2xvc2VzdCB0YWcuCiB1c2FnZV9BZ2dyZXNzaXZlPVRoaXMgb3B0aW9uIHdpbGwgY2F1c2UgZ2MgdG8gbW9yZSBhZ2dyZXNzaXZlbHkgb3B0aW1pemUgdGhlIHJlcG9zaXRvcnkgYXQgdGhlIGV4cGVuc2Ugb2YgdGFraW5nIG11Y2ggbW9yZSB0aW1lCiB1c2FnZV9BbHdheXNGYWxsYmFjaz1TaG93IHVuaXF1ZWx5IGFiYnJldmlhdGVkIGNvbW1pdCBvYmplY3QgYXMgZmFsbGJhY2sKIHVzYWdlX2JhcmVDbG9uZT1NYWtlIGEgYmFyZSBHaXQgcmVwb3NpdG9yeS4gVGhhdCBpcywgaW5zdGVhZCBvZiBjcmVhdGluZyBbRElSRUNUT1JZXSBhbmQgcGxhY2luZyB0aGUgYWRtaW5pc3RyYXRpdmUgZmlsZXMgaW4gW0RJUkVDVE9SWV0vLmdpdCwgbWFrZSB0aGUgW0RJUkVDVE9SWV0gaXRzZWxmIHRoZSAkR0lUX0RJUi4KQEAgLTI0OSw2ICsyNTQsOCBAQAogdXNhZ2VfRGlzcGxheVRoZVZlcnNpb25PZkpnaXQ9RGlzcGxheSB0aGUgdmVyc2lvbiBvZiBqZ2l0CiB1c2FnZV9HYz1DbGVhbnVwIHVubmVjZXNzYXJ5IGZpbGVzIGFuZCBvcHRpbWl6ZSB0aGUgbG9jYWwgcmVwb3NpdG9yeQogdXNhZ2VfR2xvZz1WaWV3IGNvbW1pdCBoaXN0b3J5IGFzIGEgZ3JhcGgKK3VzYWdlX0RpZmZHdWlUb29sPVdoZW4gZ2l0LWRpZmZ0b29sIGlzIGludm9rZWQgd2l0aCB0aGUgLWcgb3IgLS1ndWkgb3B0aW9uIHRoZSBkZWZhdWx0IGRpZmYgdG9vbCB3aWxsIGJlIHJlYWQgZnJvbSB0aGUgY29uZmlndXJlZCBkaWZmLmd1aXRvb2wgdmFyaWFibGUgaW5zdGVhZCBvZiBkaWZmLnRvb2wuCit1c2FnZV9ub0d1aT1UaGUgLS1uby1ndWkgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIC1nIG9yIC0tZ3VpIHNldHRpbmcuCiB1c2FnZV9JbmRleFBhY2s9QnVpbGQgcGFjayBpbmRleCBmaWxlIGZvciBhbiBleGlzdGluZyBwYWNrZWQgYXJjaGl2ZQogdXNhZ2VfTEZTRGlyZWN0b3J5PURpcmVjdG9yeSB0byBzdG9yZSBsYXJnZSBvYmplY3RzCiB1c2FnZV9MRlNQb3J0PVNlcnZlciBodHRwIHBvcnQKQEAgLTI5NSw2ICszMDIsNyBAQAogdXNhZ2VfU3RhdHVzPVNob3cgdGhlIHdvcmtpbmcgdHJlZSBzdGF0dXMKIHVzYWdlX1N0b3BUcmFja2luZ0FGaWxlPVN0b3AgdHJhY2tpbmcgYSBmaWxlCiB1c2FnZV9UZXh0SGFzaEZ1bmN0aW9ucz1TY2FuIHJlcG9zaXRvcnkgdG8gY29tcHV0ZSBtYXhpbXVtIG51bWJlciBvZiBjb2xsaXNpb25zIGZvciBoYXNoIGZ1bmN0aW9ucwordXNhZ2VfVG9vbEZvckRpZmY9VXNlIHRoZSBkaWZmIHRvb2wgc3BlY2lmaWVkIGJ5IDx0b29sPi4gUnVuIGdpdCBkaWZmdG9vbCAtLXRvb2wtaGVscCBmb3IgdGhlIGxpc3Qgb2YgdmFsaWQgPHRvb2w+IHNldHRpbmdzLlxuSWYgYSBkaWZmIHRvb2wgaXMgbm90IHNwZWNpZmllZCwgZ2l0IGRpZmZ0b29sIHdpbGwgdXNlIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGRpZmYudG9vbC4KIHVzYWdlX1VwZGF0ZVJlbW90ZVJlcG9zaXRvcnlGcm9tTG9jYWxSZWZzPVVwZGF0ZSByZW1vdGUgcmVwb3NpdG9yeSBmcm9tIGxvY2FsIHJlZnMKIHVzYWdlX1VzZUFsbD1Vc2UgYWxsIHJlZnMgZm91bmQgaW4gcmVmcy8KIHVzYWdlX1VzZVRhZ3M9VXNlIGFueSB0YWcgaW5jbHVkaW5nIGxpZ2h0d2VpZ2h0IHRhZ3MKQEAgLTM0MSw2ICszNDksNyBAQAogdXNhZ2VfZGF0ZT1kYXRlIGZvcm1hdCwgb25lIG9mIGRlZmF1bHQsIHJmYywgbG9jYWwsIGlzbywgc2hvcnQsIHJhdyAoYXMgZGVmaW5lZCBieSBnaXQtbG9nKDEpICksIGxvY2FsZSBvciBsb2NhbGVsb2NhbCAoamdpdCBleHRlbnNpb25zKQogdXNhZ2VfZGV0ZWN0UmVuYW1lcz1kZXRlY3QgcmVuYW1lZCBmaWxlcwogdXNhZ2VfZGlmZkFsZ29yaXRobT10aGUgZGlmZiBhbGdvcml0aG0gdG8gdXNlLiBDdXJyZW50bHkgc3VwcG9ydGVkIGFyZTogJ215ZXJzJywgJ2hpc3RvZ3JhbScKK3VzYWdlX0RpZmZUb29sPWdpdCBkaWZmdG9vbCBpcyBhIEdpdCBjb21tYW5kIHRoYXQgYWxsb3dzIHlvdSB0byBjb21wYXJlIGFuZCBlZGl0IGZpbGVzIGJldHdlZW4gcmV2aXNpb25zIHVzaW5nIGNvbW1vbiBkaWZmIHRvb2xzLlxuZ2l0IGRpZmZ0b29sIGlzIGEgZnJvbnRlbmQgdG8gZ2l0IGRpZmYgYW5kIGFjY2VwdHMgdGhlIHNhbWUgb3B0aW9ucyBhbmQgYXJndW1lbnRzLgogdXNhZ2VfZGlyZWN0b3JpZXNUb0V4cG9ydD1kaXJlY3RvcmllcyB0byBleHBvcnQKIHVzYWdlX2Rpc2FibGVUaGVTZXJ2aWNlSW5BbGxSZXBvc2l0b3JpZXM9ZGlzYWJsZSB0aGUgc2VydmljZSBpbiBhbGwgcmVwb3NpdG9yaWVzCiB1c2FnZV9kaXNwbGF5QUxpc3RPZkFsbFJlZ2lzdGVyZWRKZ2l0Q29tbWFuZHM9RGlzcGxheSBhIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgamdpdCBjb21tYW5kcwpAQCAtMzk1LDYgKzQwNCw4IEBACiB1c2FnZV9wZXJmb3JtRnNja1N0eWxlQ2hlY2tzT25SZWNlaXZlPXBlcmZvcm0gZnNjayBzdHlsZSBjaGVja3Mgb24gcmVjZWl2ZQogdXNhZ2VfcG9ydE51bWJlclRvTGlzdGVuT249cG9ydCBudW1iZXIgdG8gbGlzdGVuIG9uCiB1c2FnZV9wcmludE9ubHlCcmFuY2hlc1RoYXRDb250YWluVGhlQ29tbWl0PXByaW50IG9ubHkgYnJhbmNoZXMgdGhhdCBjb250YWluIHRoZSBjb21taXQKK3VzYWdlX3Byb21wdD1Qcm9tcHQgYmVmb3JlIGVhY2ggaW52b2NhdGlvbiBvZiB0aGUgZGlmZiB0b29sLiBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91cjsgdGhlIG9wdGlvbiBpcyBwcm92aWRlZCB0byBvdmVycmlkZSBhbnkgY29uZmlndXJhdGlvbiBzZXR0aW5ncy4KK3VzYWdlX25vUHJvbXB0PURvIG5vdCBwcm9tcHQgYmVmb3JlIGxhdW5jaGluZyBhIGRpZmYgdG9vbC4KIHVzYWdlX3BydW5lU3RhbGVUcmFja2luZ1JlZnM9cHJ1bmUgc3RhbGUgdHJhY2tpbmcgcmVmcwogdXNhZ2VfcHVzaFVybHM9cHVzaCBVUkxzIGFyZSBtYW5pcHVsYXRlZAogdXNhZ2VfcXVpZXQ9ZG9uJ3Qgc2hvdyBwcm9ncmVzcyBtZXNzYWdlcwpAQCAtNDIyLDYgKzQzMyw4IEBACiB1c2FnZV9zc2hEcml2ZXI9U2VsZWN0cyB0aGUgYnVpbHQtaW4gc3NoIGxpYnJhcnkgdG8gdXNlLCBKU2NoIG9yIEFwYWNoZSBNSU5BIHNzaGQuCiB1c2FnZV9zeW1ib2xpY1ZlcnNpb25Gb3JUaGVQcm9qZWN0PVN5bWJvbGljIHZlcnNpb24gZm9yIHRoZSBwcm9qZWN0CiB1c2FnZV90YWdzPWZldGNoIGFsbCB0YWdzCit1c2FnZV90cnVzdEV4aXRDb2RlPWdpdC1kaWZmdG9vbCBpbnZva2VzIGEgZGlmZiB0b29sIGluZGl2aWR1YWxseSBvbiBlYWNoIGZpbGUuIEVycm9ycyByZXBvcnRlZCBieSB0aGUgZGlmZiB0b29sIGFyZSBpZ25vcmVkIGJ5IGRlZmF1bHQuIFVzZSAtLXRydXN0LWV4aXQtY29kZSB0byBtYWtlIGdpdC1kaWZmdG9vbCBleGl0IHdoZW4gYW4gaW52b2tlZCBkaWZmIHRvb2wgcmV0dXJucyBhIG5vbi16ZXJvIGV4aXQgY29kZS5cbmdpdC1kaWZmdG9vbCB3aWxsIGZvcndhcmQgdGhlIGV4aXQgY29kZSBvZiB0aGUgaW52b2tlZCB0b29sIHdoZW4gLS10cnVzdC1leGl0LWNvZGUgaXMgdXNlZC4KK3VzYWdlX25vVHJ1c3RFeGl0Q29kZT1UaGlzIG9wdGlvbiBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSAtLXRydXN0LWV4aXQtY29kZSBzZXR0aW5nLgogdXNhZ2Vfbm90YWdzPWRvIG5vdCBmZXRjaCB0YWdzCiB1c2FnZV90YWdBbm5vdGF0ZWQ9Y3JlYXRlIGFuIGFubm90YXRlZCB0YWcsIHVuc2lnbmVkIHVubGVzcyAtcyBvciAtdSBhcmUgZ2l2ZW4sIG9yIGNvbmZpZyB0YWcuZ3BnU2lnbiBpcyB0cnVlCiB1c2FnZV90YWdEZWxldGU9ZGVsZXRlIHRhZwpAQCAtNDMwLDYgKzQ0Myw3IEBACiB1c2FnZV90YWdTaWduPWNyZWF0ZSBhIHNpZ25lZCBhbm5vdGF0ZWQgdGFnCiB1c2FnZV90YWdOb1NpZ249c3VwcHJlc3Mgc2lnbmluZyB0aGUgdGFnCiB1c2FnZV90YWdWZXJpZnk9VmVyaWZ5IHRoZSBHUEcgc2lnbmF0dXJlCit1c2FnZV90b29sSGVscD1QcmludCBhIGxpc3Qgb2YgZGlmZiB0b29scyB0aGF0IG1heSBiZSB1c2VkIHdpdGggLS10b29sLgogdXNhZ2VfdW50cmFja2VkRmlsZXNNb2RlPXNob3cgdW50cmFja2VkIGZpbGVzCiB1c2FnZV91cGRhdGVSZWY9cmVmZXJlbmNlIHRvIHVwZGF0ZQogdXNhZ2VfdXBkYXRlUmVtb3RlUmVmc0Zyb21Bbm90aGVyUmVwb3NpdG9yeT1VcGRhdGUgcmVtb3RlIHJlZnMgZnJvbSBhbm90aGVyIHJlcG9zaXRvcnkKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9CbGFtZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0JsYW1lLmphdmEKaW5kZXggMmI0OWNmNy4uMWEzYTJmNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0JsYW1lLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0JsYW1lLmphdmEKQEAgLTE1LDYgKzE1LDcgQEAKIAogaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuSW50ZWdlci52YWx1ZU9mOwogaW1wb3J0IHN0YXRpYyBqYXZhLmxhbmcuTG9uZy52YWx1ZU9mOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX1NUUklOR19MRU5HVEg7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwpAQCAtMTE2LDcgKzExNyw4IEBAIHByb3RlY3RlZCB2b2lkIHJ1bigpIHsKIAogCQlib29sZWFuIGF1dG9BYmJyZXYgPSBhYmJyZXYgPT0gMDsKIAkJaWYgKGFiYnJldiA9PSAwKSB7Ci0JCQlhYmJyZXYgPSBkYi5nZXRDb25maWcoKS5nZXRJbnQoImNvcmUiLCAiYWJicmV2IiwgNyk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJYWJicmV2ID0gZGIuZ2V0Q29uZmlnKCkuZ2V0SW50KCJjb3JlIiwgImFiYnJldiIsIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQlPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpOwogCQl9CiAJCWlmICghc2hvd0JsYW5rQm91bmRhcnkpIHsKIAkJCXJvb3QgPSBkYi5nZXRDb25maWcoKS5nZXRCb29sZWFuKCJibGFtZSIsICJibGFua2JvdW5kYXJ5IiwgZmFsc2UpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EZXNjcmliZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0Rlc2NyaWJlLmphdmEKaW5kZXggOGFhMTE5YS4uMTE2ZGIwMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0Rlc2NyaWJlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0Rlc2NyaWJlLmphdmEKQEAgLTQ0LDYgKzQ0LDkgQEAgY2xhc3MgRGVzY3JpYmUgZXh0ZW5kcyBUZXh0QnVpbHRpbiB7CiAJQE9wdGlvbihuYW1lID0gIi0tbWF0Y2giLCB1c2FnZSA9ICJ1c2FnZV9NYXRjaCIsIG1ldGFWYXIgPSAibWV0YVZhcl9wYXR0ZXJuIikKIAlwcml2YXRlIExpc3Q8U3RyaW5nPiBwYXR0ZXJucyA9IG5ldyBBcnJheUxpc3Q8PigpOwogCisJQE9wdGlvbihuYW1lID0gIi0tYWJicmV2IiwgdXNhZ2UgPSAidXNhZ2VfQWJicmV2IikKKwlwcml2YXRlIEludGVnZXIgYWJicmV2OworCiAJLyoqIHtAaW5oZXJpdERvY30gKi8KIAlAT3ZlcnJpZGUKIAlwcm90ZWN0ZWQgdm9pZCBydW4oKSB7CkBAIC01Nyw2ICs2MCw5IEBAIHByb3RlY3RlZCB2b2lkIHJ1bigpIHsKIAkJCWNtZC5zZXRUYWdzKHVzZVRhZ3MpOwogCQkJY21kLnNldEFsd2F5cyhhbHdheXMpOwogCQkJY21kLnNldE1hdGNoKHBhdHRlcm5zLnRvQXJyYXkobmV3IFN0cmluZ1swXSkpOworCQkJaWYgKGFiYnJldiAhPSBudWxsKSB7CisJCQkJY21kLnNldEFiYnJldihhYmJyZXYuaW50VmFsdWUoKSk7CisJCQl9CiAJCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKIAkJCXRyeSB7CiAJCQkJcmVzdWx0ID0gY21kLmNhbGwoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EaWZmVG9vbC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL0RpZmZUb29sLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4ODgxNwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9EaWZmVG9vbC5qYXZhCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEsIEFuZHJlIEJvc3NlcnQgPGFuZHJlLmJvc3NlcnRAc2llbWVucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQucGdtOworCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5IRUFEOworCitpbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKK2ltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5UaW1lVW5pdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaWZmLkRpZmZGb3JtYXR0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZS5EaXJDYWNoZUl0ZXJhdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLkFtYmlndW91c09iamVjdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5JbmNvcnJlY3RPYmplY3RUeXBlRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlJldmlzaW9uU3ludGF4RXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbC5EaWZmVG9vbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sLkV4dGVybmFsRGlmZlRvb2w7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0UmVhZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuVGV4dFByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbC5Cb29sZWFuVHJpU3RhdGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5wZ20uaW50ZXJuYWwuQ0xJVGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5vcHQuUGF0aFRyZWVGaWx0ZXJIYW5kbGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuQWJzdHJhY3RUcmVlSXRlcmF0b3I7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5DYW5vbmljYWxUcmVlUGFyc2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuRmlsZVRyZWVJdGVyYXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlci5UcmVlRmlsdGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TdHJpbmdVdGlsczsKK2ltcG9ydCBvcmcua29oc3VrZS5hcmdzNGouQXJndW1lbnQ7CitpbXBvcnQgb3JnLmtvaHN1a2UuYXJnczRqLk9wdGlvbjsKKworQENvbW1hbmQobmFtZSA9ICJkaWZmdG9vbCIsIGNvbW1vbiA9IHRydWUsIHVzYWdlID0gInVzYWdlX0RpZmZUb29sIikKK2NsYXNzIERpZmZUb29sIGV4dGVuZHMgVGV4dEJ1aWx0aW4geworCXByaXZhdGUgRGlmZkZvcm1hdHRlciBkaWZmRm10OworCisJcHJpdmF0ZSBEaWZmVG9vbHMgZGlmZlRvb2xzOworCisJQEFyZ3VtZW50KGluZGV4ID0gMCwgbWV0YVZhciA9ICJtZXRhVmFyX3RyZWVpc2giKQorCXByaXZhdGUgQWJzdHJhY3RUcmVlSXRlcmF0b3Igb2xkVHJlZTsKKworCUBBcmd1bWVudChpbmRleCA9IDEsIG1ldGFWYXIgPSAibWV0YVZhcl90cmVlaXNoIikKKwlwcml2YXRlIEFic3RyYWN0VHJlZUl0ZXJhdG9yIG5ld1RyZWU7CisKKwlAT3B0aW9uKG5hbWUgPSAiLS10b29sIiwgYWxpYXNlcyA9IHsKKwkJCSItdCIgfSwgbWV0YVZhciA9ICJtZXRhVmFyX3Rvb2wiLCB1c2FnZSA9ICJ1c2FnZV9Ub29sRm9yRGlmZiIpCisJcHJpdmF0ZSBTdHJpbmcgdG9vbE5hbWU7CisKKwlAT3B0aW9uKG5hbWUgPSAiLS1jYWNoZWQiLCBhbGlhc2VzID0geyAiLS1zdGFnZWQiIH0sIHVzYWdlID0gInVzYWdlX2NhY2hlZCIpCisJcHJpdmF0ZSBib29sZWFuIGNhY2hlZDsKKworCXByaXZhdGUgQm9vbGVhblRyaVN0YXRlIHByb21wdCA9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVDsKKworCUBPcHRpb24obmFtZSA9ICItLXByb21wdCIsIHVzYWdlID0gInVzYWdlX3Byb21wdCIpCisJdm9pZCBzZXRQcm9tcHQoQFN1cHByZXNzV2FybmluZ3MoInVudXNlZCIpIGJvb2xlYW4gb24pIHsKKwkJcHJvbXB0ID0gQm9vbGVhblRyaVN0YXRlLlRSVUU7CisJfQorCisJQE9wdGlvbihuYW1lID0gIi0tbm8tcHJvbXB0IiwgYWxpYXNlcyA9IHsgIi15IiB9LCB1c2FnZSA9ICJ1c2FnZV9ub1Byb21wdCIpCisJdm9pZCBub1Byb21wdChAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikgYm9vbGVhbiBvbikgeworCQlwcm9tcHQgPSBCb29sZWFuVHJpU3RhdGUuRkFMU0U7CisJfQorCisJQE9wdGlvbihuYW1lID0gIi0tdG9vbC1oZWxwIiwgdXNhZ2UgPSAidXNhZ2VfdG9vbEhlbHAiKQorCXByaXZhdGUgYm9vbGVhbiB0b29sSGVscDsKKworCXByaXZhdGUgQm9vbGVhblRyaVN0YXRlIGd1aSA9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVDsKKworCUBPcHRpb24obmFtZSA9ICItLWd1aSIsIGFsaWFzZXMgPSB7ICItZyIgfSwgdXNhZ2UgPSAidXNhZ2VfRGlmZkd1aVRvb2wiKQorCXZvaWQgc2V0R3VpKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBib29sZWFuIG9uKSB7CisJCWd1aSA9IEJvb2xlYW5UcmlTdGF0ZS5UUlVFOworCX0KKworCUBPcHRpb24obmFtZSA9ICItLW5vLWd1aSIsIHVzYWdlID0gInVzYWdlX25vR3VpIikKKwl2b2lkIG5vR3VpKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBib29sZWFuIG9uKSB7CisJCWd1aSA9IEJvb2xlYW5UcmlTdGF0ZS5GQUxTRTsKKwl9CisKKwlwcml2YXRlIEJvb2xlYW5UcmlTdGF0ZSB0cnVzdEV4aXRDb2RlID0gQm9vbGVhblRyaVN0YXRlLlVOU0VUOworCisJQE9wdGlvbihuYW1lID0gIi0tdHJ1c3QtZXhpdC1jb2RlIiwgdXNhZ2UgPSAidXNhZ2VfdHJ1c3RFeGl0Q29kZSIpCisJdm9pZCBzZXRUcnVzdEV4aXRDb2RlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBib29sZWFuIG9uKSB7CisJCXRydXN0RXhpdENvZGUgPSBCb29sZWFuVHJpU3RhdGUuVFJVRTsKKwl9CisKKwlAT3B0aW9uKG5hbWUgPSAiLS1uby10cnVzdC1leGl0LWNvZGUiLCB1c2FnZSA9ICJ1c2FnZV9ub1RydXN0RXhpdENvZGUiKQorCXZvaWQgbm9UcnVzdEV4aXRDb2RlKEBTdXBwcmVzc1dhcm5pbmdzKCJ1bnVzZWQiKSBib29sZWFuIG9uKSB7CisJCXRydXN0RXhpdENvZGUgPSBCb29sZWFuVHJpU3RhdGUuRkFMU0U7CisJfQorCisJQE9wdGlvbihuYW1lID0gIi0tIiwgbWV0YVZhciA9ICJtZXRhVmFyX3BhdGhzIiwgaGFuZGxlciA9IFBhdGhUcmVlRmlsdGVySGFuZGxlci5jbGFzcykKKwlwcml2YXRlIFRyZWVGaWx0ZXIgcGF0aEZpbHRlciA9IFRyZWVGaWx0ZXIuQUxMOworCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgaW5pdChSZXBvc2l0b3J5IHJlcG9zaXRvcnksIFN0cmluZyBnaXREaXIpIHsKKwkJc3VwZXIuaW5pdChyZXBvc2l0b3J5LCBnaXREaXIpOworCQlkaWZmRm10ID0gbmV3IERpZmZGb3JtYXR0ZXIobmV3IEJ1ZmZlcmVkT3V0cHV0U3RyZWFtKG91dHMpKTsKKwkJZGlmZlRvb2xzID0gbmV3IERpZmZUb29scyhyZXBvc2l0b3J5KTsKKwl9CisKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgdm9pZCBydW4oKSB7CisJCXRyeSB7CisJCQlpZiAodG9vbEhlbHApIHsKKwkJCQlzaG93VG9vbEhlbHAoKTsKKwkJCX0gZWxzZSB7CisJCQkJYm9vbGVhbiBzaG93UHJvbXB0ID0gZGlmZlRvb2xzLmlzSW50ZXJhY3RpdmUoKTsKKwkJCQlpZiAocHJvbXB0ICE9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVCkgeworCQkJCQlzaG93UHJvbXB0ID0gcHJvbXB0ID09IEJvb2xlYW5UcmlTdGF0ZS5UUlVFOworCQkJCX0KKwkJCQlTdHJpbmcgdG9vbE5hbWVQcm9tcHQgPSB0b29sTmFtZTsKKwkJCQlpZiAoc2hvd1Byb21wdCkgeworCQkJCQlpZiAoU3RyaW5nVXRpbHMuaXNFbXB0eU9yTnVsbCh0b29sTmFtZVByb21wdCkpIHsKKwkJCQkJCXRvb2xOYW1lUHJvbXB0ID0gZGlmZlRvb2xzLmdldERlZmF1bHRUb29sTmFtZShndWkpOworCQkJCQl9CisJCQkJfQorCQkJCS8vIGdldCB0aGUgY2hhbmdlZCBmaWxlcworCQkJCUxpc3Q8RGlmZkVudHJ5PiBmaWxlcyA9IGdldEZpbGVzKCk7CisJCQkJaWYgKGZpbGVzLnNpemUoKSA+IDApIHsKKwkJCQkJY29tcGFyZShmaWxlcywgc2hvd1Byb21wdCwgdG9vbE5hbWVQcm9tcHQpOworCQkJCX0KKwkJCX0KKwkJCW91dHcuZmx1c2goKTsKKwkJfSBjYXRjaCAoUmV2aXNpb25TeW50YXhFeGNlcHRpb24gfCBJT0V4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBkaWUoZS5nZXRNZXNzYWdlKCksIGUpOworCQl9IGZpbmFsbHkgeworCQkJZGlmZkZtdC5jbG9zZSgpOworCQl9CisJfQorCisJcHJpdmF0ZSB2b2lkIGNvbXBhcmUoTGlzdDxEaWZmRW50cnk+IGZpbGVzLCBib29sZWFuIHNob3dQcm9tcHQsCisJCQlTdHJpbmcgdG9vbE5hbWVQcm9tcHQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWZvciAoaW50IGZpbGVJbmRleCA9IDA7IGZpbGVJbmRleCA8IGZpbGVzLnNpemUoKTsgZmlsZUluZGV4KyspIHsKKwkJCURpZmZFbnRyeSBlbnQgPSBmaWxlcy5nZXQoZmlsZUluZGV4KTsKKwkJCVN0cmluZyBtZXJnZWRGaWxlUGF0aCA9IGVudC5nZXROZXdQYXRoKCk7CisJCQlpZiAobWVyZ2VkRmlsZVBhdGguZXF1YWxzKERpZmZFbnRyeS5ERVZfTlVMTCkpIHsKKwkJCQltZXJnZWRGaWxlUGF0aCA9IGVudC5nZXRPbGRQYXRoKCk7CisJCQl9CisJCQkvLyBjaGVjayBpZiB1c2VyIHdhbnRzIHRvIGxhdW5jaCBjb21wYXJlCisJCQlib29sZWFuIGxhdW5jaENvbXBhcmUgPSB0cnVlOworCQkJaWYgKHNob3dQcm9tcHQpIHsKKwkJCQlsYXVuY2hDb21wYXJlID0gaXNMYXVuY2hDb21wYXJlKGZpbGVJbmRleCArIDEsIGZpbGVzLnNpemUoKSwKKwkJCQkJCW1lcmdlZEZpbGVQYXRoLCB0b29sTmFtZVByb21wdCk7CisJCQl9CisJCQlpZiAobGF1bmNoQ29tcGFyZSkgeworCQkJCXN3aXRjaCAoZW50LmdldENoYW5nZVR5cGUoKSkgeworCQkJCWNhc2UgTU9ESUZZOgorCQkJCQlvdXR3LnByaW50bG4oIk1cdCIgKyBlbnQuZ2V0TmV3UGF0aCgpIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkrICIgKCIgKyBlbnQuZ2V0TmV3SWQoKS5uYW1lKCkgKyAiKSIgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCQkJKyAiXHQiICsgZW50LmdldE9sZFBhdGgoKSAvLyROT04tTkxTLTEkCisJCQkJCQkJKyAiICgiICsgZW50LmdldE9sZElkKCkubmFtZSgpICsgIikiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCWludCByZXQgPSBkaWZmVG9vbHMuY29tcGFyZShlbnQuZ2V0TmV3UGF0aCgpLAorCQkJCQkJCWVudC5nZXRPbGRQYXRoKCksIGVudC5nZXROZXdJZCgpLm5hbWUoKSwKKwkJCQkJCQllbnQuZ2V0T2xkSWQoKS5uYW1lKCksIHRvb2xOYW1lLCBwcm9tcHQsIGd1aSwKKwkJCQkJCQl0cnVzdEV4aXRDb2RlKTsKKwkJCQkJaWYgKHJldCAhPSAwKSB7CisJCQkJCQl0aHJvdyBkaWUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJCUNMSVRleHQuZ2V0KCkuZGlmZlRvb2xEaWVkLCBtZXJnZWRGaWxlUGF0aCkpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlAU3VwcHJlc3NXYXJuaW5ncygiYm94aW5nIikKKwlwcml2YXRlIGJvb2xlYW4gaXNMYXVuY2hDb21wYXJlKGludCBmaWxlSW5kZXgsIGludCBmaWxlQ291bnQsCisJCQlTdHJpbmcgZmlsZU5hbWUsIFN0cmluZyB0b29sTmFtZVByb21wdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJYm9vbGVhbiBsYXVuY2hDb21wYXJlID0gdHJ1ZTsKKwkJb3V0dy5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KENMSVRleHQuZ2V0KCkuZGlmZlRvb2xMYXVuY2gsCisJCQkJZmlsZUluZGV4LCBmaWxlQ291bnQsIGZpbGVOYW1lLCB0b29sTmFtZVByb21wdCkpOworCQlvdXR3LmZsdXNoKCk7CisJCUJ1ZmZlcmVkUmVhZGVyIGJyID0gbmV3IEJ1ZmZlcmVkUmVhZGVyKAorCQkJCW5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnMsIFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpKTsKKwkJU3RyaW5nIGxpbmUgPSBudWxsOworCQlpZiAoKGxpbmUgPSBici5yZWFkTGluZSgpKSAhPSBudWxsKSB7CisJCQlpZiAoIWxpbmUuZXF1YWxzSWdub3JlQ2FzZSgiWSIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlsYXVuY2hDb21wYXJlID0gZmFsc2U7CisJCQl9CisJCX0KKwkJcmV0dXJuIGxhdW5jaENvbXBhcmU7CisJfQorCisJcHJpdmF0ZSB2b2lkIHNob3dUb29sSGVscCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZ0J1aWxkZXIgYXZhaWxhYmxlVG9vbE5hbWVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKKwkJZm9yIChTdHJpbmcgbmFtZSA6IGRpZmZUb29scy5nZXRBdmFpbGFibGVUb29scygpLmtleVNldCgpKSB7CisJCQlhdmFpbGFibGVUb29sTmFtZXMuYXBwZW5kKFN0cmluZy5mb3JtYXQoIlx0XHQlc1xuIiwgbmFtZSkpOyAvLyROT04tTkxTLTEkCisJCX0KKwkJU3RyaW5nQnVpbGRlciBub3RBdmFpbGFibGVUb29sTmFtZXMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlmb3IgKFN0cmluZyBuYW1lIDogZGlmZlRvb2xzLmdldE5vdEF2YWlsYWJsZVRvb2xzKCkua2V5U2V0KCkpIHsKKwkJCW5vdEF2YWlsYWJsZVRvb2xOYW1lcy5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiXHRcdCVzXG4iLCBuYW1lKSk7IC8vJE5PTi1OTFMtMSQKKwkJfQorCQlTdHJpbmdCdWlsZGVyIHVzZXJUb29sTmFtZXMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQlNYXA8U3RyaW5nLCBFeHRlcm5hbERpZmZUb29sPiB1c2VyVG9vbHMgPSBkaWZmVG9vbHMKKwkJCQkuZ2V0VXNlckRlZmluZWRUb29scygpOworCQlmb3IgKFN0cmluZyBuYW1lIDogdXNlclRvb2xzLmtleVNldCgpKSB7CisJCQl1c2VyVG9vbE5hbWVzLmFwcGVuZChTdHJpbmcuZm9ybWF0KCJcdFx0JXMuY21kICVzXG4iLCAvLyROT04tTkxTLTEkCisJCQkJCW5hbWUsIHVzZXJUb29scy5nZXQobmFtZSkuZ2V0Q29tbWFuZCgpKSk7CisJCX0KKwkJb3V0dy5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCUNMSVRleHQuZ2V0KCkuZGlmZlRvb2xIZWxwU2V0VG9Gb2xsb3dpbmcsIGF2YWlsYWJsZVRvb2xOYW1lcywKKwkJCQl1c2VyVG9vbE5hbWVzLCBub3RBdmFpbGFibGVUb29sTmFtZXMpKTsKKwl9CisKKwlwcml2YXRlIExpc3Q8RGlmZkVudHJ5PiBnZXRGaWxlcygpCisJCQl0aHJvd3MgUmV2aXNpb25TeW50YXhFeGNlcHRpb24sIEFtYmlndW91c09iamVjdEV4Y2VwdGlvbiwKKwkJCUluY29ycmVjdE9iamVjdFR5cGVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJZGlmZkZtdC5zZXRSZXBvc2l0b3J5KGRiKTsKKwkJaWYgKGNhY2hlZCkgeworCQkJaWYgKG9sZFRyZWUgPT0gbnVsbCkgeworCQkJCU9iamVjdElkIGhlYWQgPSBkYi5yZXNvbHZlKEhFQUQgKyAiXnt0cmVlfSIpOyAvLyROT04tTkxTLTEkCisJCQkJaWYgKGhlYWQgPT0gbnVsbCkgeworCQkJCQlkaWUoTWVzc2FnZUZvcm1hdC5mb3JtYXQoQ0xJVGV4dC5nZXQoKS5ub3RBVHJlZSwgSEVBRCkpOworCQkJCX0KKwkJCQlDYW5vbmljYWxUcmVlUGFyc2VyIHAgPSBuZXcgQ2Fub25pY2FsVHJlZVBhcnNlcigpOworCQkJCXRyeSAoT2JqZWN0UmVhZGVyIHJlYWRlciA9IGRiLm5ld09iamVjdFJlYWRlcigpKSB7CisJCQkJCXAucmVzZXQocmVhZGVyLCBoZWFkKTsKKwkJCQl9CisJCQkJb2xkVHJlZSA9IHA7CisJCQl9CisJCQluZXdUcmVlID0gbmV3IERpckNhY2hlSXRlcmF0b3IoZGIucmVhZERpckNhY2hlKCkpOworCQl9IGVsc2UgaWYgKG9sZFRyZWUgPT0gbnVsbCkgeworCQkJb2xkVHJlZSA9IG5ldyBEaXJDYWNoZUl0ZXJhdG9yKGRiLnJlYWREaXJDYWNoZSgpKTsKKwkJCW5ld1RyZWUgPSBuZXcgRmlsZVRyZWVJdGVyYXRvcihkYik7CisJCX0gZWxzZSBpZiAobmV3VHJlZSA9PSBudWxsKSB7CisJCQluZXdUcmVlID0gbmV3IEZpbGVUcmVlSXRlcmF0b3IoZGIpOworCQl9CisKKwkJVGV4dFByb2dyZXNzTW9uaXRvciBwbSA9IG5ldyBUZXh0UHJvZ3Jlc3NNb25pdG9yKGVycncpOworCQlwbS5zZXREZWxheVN0YXJ0KDIsIFRpbWVVbml0LlNFQ09ORFMpOworCQlkaWZmRm10LnNldFByb2dyZXNzTW9uaXRvcihwbSk7CisJCWRpZmZGbXQuc2V0UGF0aEZpbHRlcihwYXRoRmlsdGVyKTsKKworCQlMaXN0PERpZmZFbnRyeT4gZmlsZXMgPSBkaWZmRm10LnNjYW4ob2xkVHJlZSwgbmV3VHJlZSk7CisJCXJldHVybiBmaWxlczsKKwl9CisKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9NZXJnZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKaW5kZXggY2E0ODc3Zi4uMjdhM2Q5MCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL01lcmdlLmphdmEKQEAgLTEwLDYgKzEwLDggQEAKIAogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTsKIAoraW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOworCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwpAQCAtMTQ0LDggKzE0NiwxMCBAQCBwcm90ZWN0ZWQgdm9pZCBydW4oKSB7CiAJCQljYXNlIEZBU1RfRk9SV0FSRDoKIAkJCQlPYmplY3RJZCBvbGRIZWFkSWQgPSBvbGRIZWFkLmdldE9iamVjdElkKCk7CiAJCQkJaWYgKG9sZEhlYWRJZCAhPSBudWxsKSB7Ci0JCQkJCVN0cmluZyBvbGRJZCA9IG9sZEhlYWRJZC5hYmJyZXZpYXRlKDcpLm5hbWUoKTsKLQkJCQkJU3RyaW5nIG5ld0lkID0gcmVzdWx0LmdldE5ld0hlYWQoKS5hYmJyZXZpYXRlKDcpLm5hbWUoKTsKKwkJCQkJU3RyaW5nIG9sZElkID0gb2xkSGVhZElkCisJCQkJCQkJLmFiYnJldmlhdGUoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKS5uYW1lKCk7CisJCQkJCVN0cmluZyBuZXdJZCA9IHJlc3VsdC5nZXROZXdIZWFkKCkKKwkJCQkJCQkuYWJicmV2aWF0ZShPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpLm5hbWUoKTsKIAkJCQkJb3V0dy5wcmludGxuKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KENMSVRleHQuZ2V0KCkudXBkYXRpbmcsCiAJCQkJCQkJb2xkSWQsIG5ld0lkKSk7CiAJCQkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL1JlZmxvZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL1JlZmxvZy5qYXZhCmluZGV4IDAzMDExOWUuLmM2MzUzMmQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9SZWZsb2cuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vUmVmbG9nLmphdmEKQEAgLTksNiArOSw4IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5wZ207CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLk9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKKwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CiAKQEAgLTQ1LDcgKzQ3LDggQEAgcHJvdGVjdGVkIHZvaWQgcnVuKCkgewogCiAJcHJpdmF0ZSBTdHJpbmcgdG9TdHJpbmcoUmVmbG9nRW50cnkgZW50cnksIGludCBpKSB7CiAJCWZpbmFsIFN0cmluZ0J1aWxkZXIgcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCXMuYXBwZW5kKGVudHJ5LmdldE5ld0lkKCkuYWJicmV2aWF0ZSg3KS5uYW1lKCkpOworCQlzLmFwcGVuZChlbnRyeS5nZXROZXdJZCgpLmFiYnJldmlhdGUoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKQorCQkJCS5uYW1lKCkpOwogCQlzLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCiAJCXMuYXBwZW5kKHJlZiA9PSBudWxsID8gQ29uc3RhbnRzLkhFQUQgOiBSZXBvc2l0b3J5LnNob3J0ZW5SZWZOYW1lKHJlZikpOwogCQlzLmFwcGVuZCgiQHsiICsgaSArICJ9OiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnBnbS9zcmMvb3JnL2VjbGlwc2UvamdpdC9wZ20vaW50ZXJuYWwvQ0xJVGV4dC5qYXZhCmluZGV4IDhlNDlhNzYuLjdmZTViMGYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQucGdtL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3BnbS9pbnRlcm5hbC9DTElUZXh0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5wZ20vc3JjL29yZy9lY2xpcHNlL2pnaXQvcGdtL2ludGVybmFsL0NMSVRleHQuamF2YQpAQCAtMTM2LDYgKzEzNiw5IEBAIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGZhdGFsRXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGRhdGVJbmZvOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgZGVsZXRlZEJyYW5jaDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGRlbGV0ZWRSZW1vdGVCcmFuY2g7CisJLyoqKi8gcHVibGljIFN0cmluZyBkaWZmVG9vbEhlbHBTZXRUb0ZvbGxvd2luZzsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGRpZmZUb29sTGF1bmNoOworCS8qKiovIHB1YmxpYyBTdHJpbmcgZGlmZlRvb2xEaWVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgZG9lc05vdEV4aXN0OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgZG9udE92ZXJ3cml0ZUxvY2FsQ2hhbmdlczsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGV2ZXJ5dGhpbmdVcFRvRGF0ZTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9CVUlMRCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9CVUlMRAppbmRleCAwYzhjZjgzLi5mMmU0ZDU1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvQlVJTEQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L0JVSUxECkBAIC0xNyw2ICsxNyw2IEBACiAgICAgICAgICIvL2xpYjpzbGY0ai1hcGkiLAogICAgICAgICAiLy9saWI6c3NoZC1vc2dpIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdDpqZ2l0IiwKLSAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlOnNzaC1hcGFjaGUiCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZTpzc2gtYXBhY2hlIiwKICAgICBdLAogKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDNmZDBmNTIuLjFhNTc0NmQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTIsMTUgKzIsMTUgQEAKIEJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudDtzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCi1GcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGU7YnVuZGxlLXZlcnNpb249Ils2LjAuMSw2LjEuMCkiCitGcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGU7YnVuZGxlLXZlcnNpb249Ils2LjEuMSw2LjIuMCkiCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKLUltcG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIgorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiCiBSZXF1aXJlLUJ1bmRsZTogY29tLnN1bi5qbmE7YnVuZGxlLXZlcnNpb249Ils1LjguMCw2LjAuMCkiLAogIGNvbS5zdW4uam5hLnBsYXRmb3JtO2J1bmRsZS12ZXJzaW9uPSJbNS44LjAsNi4wLjApIgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuYWdlbnQuY29ubmVjdG9yO3ZlcnNpb249IjYuMC4xIjt4LWludGVybmFsOj10cnVlCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5hZ2VudC5jb25uZWN0b3I7dmVyc2lvbj0iNi4xLjEiO3gtaW50ZXJuYWw6PXRydWUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDgwOGRlNTMuLmQwNmU2YjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgpAQCAtMyw1ICszLDUgQEAKIEJ1bmRsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQuc291cmNlCiBCdW5kbGUtVmVuZG9yOiBFY2xpcHNlLm9yZyAtIEpHaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKLUVjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQ7dmVyc2lvbj0iNi4wLjEucXVhbGlmaWVyIjtyb290cz0iLiIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKK0VjbGlwc2UtU291cmNlQnVuZGxlOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQ7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9SRUFETUUubWQgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNjJhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvUkVBRE1FLm1kCkBAIC0wLDAgKzEsODIgQEAKKyMgSkdpdCBTU0ggYWdlbnQgdHJhbnNwb3J0IHN1cHBvcnQgZm9yIEFwYWNoZSBNSU5BIHNzaGQKKworVGhpcyBidW5kbGUgcHJvdmlkZXMgb3B0aW9uYWwgc3VwcG9ydCBmb3IgY29tbXVuaWNhdGluZyB3aXRoIGFuIFNTSCBhZ2VudAorZm9yIFNTSCBvciBTRlRQIGF1dGhlbnRpY2F0aW9uLiBJdCBpcyBhbiBPU0dpIGZyYWdtZW50IGZvciBidW5kbGUKK1tvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGVdKC4uL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9SRUFETUUubWQpLAorYW5kIGl0IHByb3ZpZGVzIHRyYW5zcG9ydHMgZm9yIGxvY2FsIGNvbW11bmljYXRpb24gd2l0aCBTU0ggYWdlbnRzLgorCisjIyBTdXBwb3J0ZWQgU1NIIGFnZW50IHRyYW5zcG9ydHMKKworIyMjIExpbnV4LCBPUyBYLCBCU0QKKworT24gTGludXgsIE9TIFgsIGFuZCBCU0QsIHRoZSBvbmx5IHRyYW5zcG9ydCBtZWNoYW5pc20gc3VwcG9ydGVkIGlzIHRoZSB1c3VhbAorY29tbXVuaWNhdGlvbiB2aWEgYSBVbml4IGRvbWFpbiBzb2NrZXQuIFRoaXMgaXMgdGhlIG9ubHkgcHJvdG9jb2wgdGhlIE9wZW5TU0gKK1NTSCBhZ2VudCBzdXBwb3J0cy4gQSBVbml4IGRvbWFpbiBzb2NrZXQgYXBwZWFycyBhcyBhIHNwZWNpYWwgZmlsZSBpbiB0aGUgZmlsZQorc3lzdGVtOyB0aGlzIGZpbGUgbmFtZSBpcyB0eXBpY2FsbHkgYXZhaWxhYmxlIGluIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorYFNTSF9BVVRIX1NPQ0tgLgorCitUaGUgU1NIIGNvbmZpZyBgSWRlbnRpdHlBZ2VudGAgY2FuIGJlIHNldCB0byB0aGlzIHNvY2tldCBmaWxlbmFtZSB0byBzcGVjaWZ5CitleGFjdGx5IHdoaWNoIFVuaXggZG9tYWluIHNvY2tldCB0byB1c2UsIG9yIGl0IGNhbiBiZSBzZXQgdG8gYFNTSF9BVVRIX1NPQ0tgCit0byB1c2UgdGhlIHZhbHVlIGZyb20gdGhhdCBlbnZpcm9ubWVudCB2YXJpYWJsZS4gSWYgYElkZW50aXR5QWdlbnRgIGlzIG5vdCBzZXQKK2F0IGFsbCwgSkdpdCB1c2VzIGBTU0hfQVVUSF9TT0NLYCBieSBkZWZhdWx0LiBJZiB0aGUgdmFyaWFibGUgaXMgbm90IHNldCwgbm8KK1NTSCBhZ2VudCB3aWxsIGJlIHVzZWQuIGBJZGVudGl0eUFnZW50YCBjYW4gYWxzbyBiZSBzZXQgdG8gYG5vbmVgIHRvIG5vdCB1c2UKK2FueSBTU0ggYWdlbnQuCisKKyMjIyBXaW5kb3dzCisKK09uIFdpbmRvd3MsIHR3byBkaWZmZXJlbnQgdHJhbnNwb3J0cyBhcmUgc3VwcG9ydGVkOgorCisqIEEgdHJhbnNwb3J0IG92ZXIgYSBXaW5kb3dzIG5hbWVkIHBpcGUuIFRoaXMgaXMgdXNlZCBieSBXaW4zMi1PcGVuU1NILCBhbmQgaXMgYXZhaWxhYmxlIGZvciBQYWdlYW50IHNpbmNlIHZlcnNpb24gMC43NS4KKyogQSBQYWdlYW50LXNwZWNpZmljIGxlZ2FjeSB0cmFuc3BvcnQgdmlhIHNoYXJlZCBtZW1vcnk7IHVzZWZ1bCBmb3IgUGFnZWFudCBhbmQgR1BHJ3MgZ3BnLWFnZW50LgorCitQb3NzaWJsZSBzZXR0aW5ncyBvZiBgSWRlbnRpdHlBZ2VudGAgdG8gc2VsZWN0IGEgcGFydGljdWxhciB0cmFuc3BvcnQgYXJlCisKKyogYC8vLi9waXBlL29wZW5zc2gtc3NoLWFnZW50YDogdGhlIFdpbmRvd3MgbmFtZWQgcGlwZSBvZiBXaW4zMi1PcGVuU1NILgorKiBgLy8uL3BhZ2VhbnRgOiB0aGUgc2hhcmVkLW1lbW9yeSBtZWNoYW5pc20gb2YgUGFnZWFudC4KKyogYG5vbmVgOiBkbyBub3QgdXNlIGFueSBTU0ggYWdlbnQuCisqIGAvLy4vcGlwZS8mbHQ7YW55X3ZhbGlkX3BpcGVfbmFtZT5gOiB1c2UgYSBzcGVjaWZpYyBXaW5kb3dzIG5hbWVkIHBpcGUuCisKK1RoZSBkZWZhdWx0IHRyYW5zcG9ydCBvbiBXaW5kb3dzIGlmIGBJZGVudGl0eUFnZW50YCBpcyBub3Qgc2V0IGF0IGFsbCBpcyB0aGUKK1BhZ2VhbnQgc2hhcmVkLW1lbW9yeSB0cmFuc3BvcnQuIEVudmlyb25tZW50IHZhcmlhYmxlIGBTU0hfQVVUSF9TT0NLYCBuZWVkcworbm90IGJlIHNldCBmb3IgUGFnZWFudCwgYW5kIF9tdXN0IG5vdF8gYmUgc2V0IGZvciBXaW4zMi1PcGVuU1NILgorCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHVzZSBhIG5hbWVkIHBpcGUgYXMgdHJhbnNwb3J0IGZvciBQYWdlYW50IChhcyBvZgordmVyc2lvbiAwLjc1KS4gVW5mb3J0dW5hdGVseSwgUGFnZWFudCB1bm5lY2Vzc2FyaWx5IGNyeXB0b2dyYXBoaWNhbGx5CitvYmZ1c2NhdGVzIHRoZSBwaXBlIG5hbWUsIHNvIGl0IGlzIG5vdCBwb3NzaWJsZSBmb3IgSkdpdCB0byBkZXRlcm1pbmUgaXQKK2F1dG9tYXRpY2FsbHkuIFRoZSBwaXBlIG5hbWUgaXMgYHBhZ2VhbnQuPHVzZXIgbmFtZT4uPHNoYTI1Nj5gLCBmb3IgaW5zdGFuY2UKK2BwYWdlYW50Lm15c2VsZi5jNTY4NzczNmJhNzU1YTcwYjAwMDk1NWNiMTkxNjk4YWVkN2RiMjIxYzJiMDcxMDE5OWViMWY1Mjk4OTIyYWI1YC4KK0EgdXNlciBjYW4gbG9vayB1cCB0aGUgbmFtZSBieSBzdGFydGluZyBQYWdlYW50IGFuZCB0aGVuIHJ1bm5pbmcgdGhlCitjb21tYW5kIGBkaXIgXFwuXHBpcGVcXGAgaW4gYSBjb21tYW5kIHNoZWxsLiBPbmNlIHRoZSBuYW1lIGlzIGtub3duLCBzZXR0aW5nCitgSWRlbnRpdHlBZ2VudGAgdG8gdGhlIHBpcGUgbmFtZSBhcworYC8vLi9waXBlL3BhZ2VhbnQubXlzZWxmLmM1Njg3NzM2YmE3NTVhNzBiMDAwOTU1Y2IxOTE2OThhZWQ3ZGIyMjFjMmIwNzEwMTk5ZWIxZjUyOTg5MjJhYjVgCittYWtlcyBKR2l0IHVzZSB0aGlzIFdpbmRvd3MgbmFtZWQgcGlwZSBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIFBhZ2VhbnQuCisKKyhZb3UgY2FuIHVzZSBmb3J3YXJkIHNsYXNoZXMgaW4gdGhlIGB+Ly5zc2gvY29uZmlnYCBmaWxlLiBTU0ggY29uZmlnIGZpbGUKK3BhcnNpbmcgaGFzIGl0cyBvd24gcnVsZXMgYWJvdXQgYmFja3NsYXNoZXMgaW4gY29uZmlnIGZpbGVzOyB3aGljaCBhcmUKK3RyZWF0ZWQgYXMgZXNjYXBlIGNoYXJhY3RlcnMgaW4gc29tZSBjb250ZXh0cy4gV2l0aCBiYWNrc2xhc2hlcyBvbmUgd291bGQKK2hhdmUgdG8gd3JpdGUsIGUuZy4sIGBcXFxcLlxwaXBlXG9wZW5zc2gtc3NoLWFnZW50YC4pCisKK1dpdGggdGhlc2UgdHdvIHRyYW5zcG9ydCBtZWNoYW5pc21zLCBQYWdlYW50IGFuZCBXaW4zMi1PcGVuU1NIIGFyZSBzdXBwb3J0ZWQuCitBcyBmb3IgR1BHOiB0aGUgZ3BnLWFnZW50IGNhbiBiZSBjb25maWd1cmVkIHRvIGVtdWxhdGUgc3NoLWFnZW50IChwcmVzdW1hYmx5Cit2aWEgYSBXaW5Tb2NrZXRzMiAiVW5peCBkb21haW4gc29ja2V0IiBvbiBXaW5kb3dzKSBvciB0byBlbXVsYXRlIFBhZ2VhbnQKKyh1c2luZyB0aGUgc2hhcmVkIG1lbW9yeSBtZWNoYW5pc20pLiBSdW5uaW5nIGdwZy1hZ2VudCB3aXRoIHRoZQorYGVuYWJsZS1zc2gtc3VwcG9ydGAgb3B0aW9uIGlzCitbcmVwb3J0ZWQgbm90IHRvIHdvcmsgb24gV2luZG93c10oaHR0cHM6Ly9kZXYuZ251cGcub3JnL1QzODgzKSwgdGhvdWdoLiBCdXQKK3RoZSBQdVRUWSBlbXVsYXRpb24gaW4gZ3BnLWFnZW50IChvcHRpb24gYGVuYWJsZS1wdXR0eS1zdXBwb3J0YCkgX3Nob3VsZF8gd29yaywKK3NvIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgZ3BnLWFnZW50IGluc3RlYWQgb2YgUGFnZWFudC4KKworTmVpdGhlciBQYWdlYW50IChhcyBvZiB2ZXJzaW9uIDAuNzYpIG5vciBXaW4zMi1PcGVuU1NIIChhcyBvZiB2ZXJzaW9uIDguNikKK3N1cHBvcnQgdGhlIGBjb25maXJtYCBvciBsaWZldGltZSBjb25zdHJhaW50cyBmb3IgYEFkZEtleXNUb0FnZW50YC4gZ3BnLWFnZW50CithcHBhcmVudGx5IGRvZXMsIGV2ZW4gd2hlbiBjb21tdW5pY2F0aW5nIG92ZXIgdGhlIFBhZ2VhbnQgc2hhcmVkIG1lbW9yeQorbWVjaGFuaXNtLgorCitUaGUgc3NoLWFnZW50IGZyb20gZ2l0IGJhc2ggb24gV2luZG93cyBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4gSXQgd291bGQKK25lZWQgYSBjb25uZWN0b3IgaGFuZGxpbmcgQ3lnd2luIHNvY2tldCBmaWxlcyBhbmQgdGhlIEN5Z3dpbiBoYW5kc2hha2Ugb3ZlcgorYSBUQ1Agc3RyZWFtIHNvY2tldCBib3VuZCB0byB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlLiBUaGUgQ3lnd2luIHNvY2tldCBmaWxlCitfaXNfIGV4cG9zZWQgaW4gdGhlIFdpbmRvd3MgZmlsZSBzeXN0ZW0gYXQgJVRFTVAlXHNzaC1YWFhYWFhYWFhYXGFnZW50LiZsdDtudW1iZXI+LAorYnV0IGl0IGRvZXMgbm90IGhhdmUgYSBmaXhlZCBuYW1lICh0aGUgWCdzIGFuZCB0aGUgbnVtYmVyIGFyZSB2YXJpYWJsZSBhbmQKK2NoYW5nZSBlYWNoIHRpbWUgc3NoLWFnZW50IGlzIHN0YXJ0ZWQpLgorCisjIyBJbXBsZW1lbnRhdGlvbgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgYWxsIHRyYW5zcG9ydHMgdXNlcyBKTkEuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcG9tLnhtbAppbmRleCAxYmQzZmFkLi43N2I5Yzk1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudDwvYXJ0aWZhY3RJZD4KQEAgLTEzMiw3ICsxMzIsNiBAQAogICAgICAgICA8L2NvbmZpZ3VyYXRpb24+CiAgICAgICA8L3BsdWdpbj4KIAotICAgICAgPCEtLSBOZXcgaW4gNi4wOyB1bmNvbW1lbnQgaW4gNi4xCiAgICAgICA8cGx1Z2luPgogICAgICAgICAgIDxncm91cElkPmNvbS5naXRodWIuc2lvbTc5LmphcGljbXA8L2dyb3VwSWQ+CiAgICAgICAgICAgPGFydGlmYWN0SWQ+amFwaWNtcC1tYXZlbi1wbHVnaW48L2FydGlmYWN0SWQ+CkBAIC0xNTUsNiArMTU0LDkgQEAKICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlcz4KICAgICAgICAgICAgICAgICAgICAgICA8aW5jbHVkZT5vcmcuZWNsaXBzZS5qZ2l0Lio8L2luY2x1ZGU+CiAgICAgICAgICAgICAgICAgICA8L2luY2x1ZGVzPgorICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGVzPgorICAgICAgICAgICAgICAgICAgICAgIDxleGNsdWRlPiouaW50ZXJuYWwuKjwvZXhjbHVkZT4KKyAgICAgICAgICAgICAgICAgIDwvZXhjbHVkZXM+CiAgICAgICAgICAgICAgICAgICA8YWNjZXNzTW9kaWZpZXI+cHVibGljPC9hY2Nlc3NNb2RpZmllcj4KICAgICAgICAgICAgICAgICAgIDxicmVha0J1aWxkT25Nb2RpZmljYXRpb25zPmZhbHNlPC9icmVha0J1aWxkT25Nb2RpZmljYXRpb25zPgogICAgICAgICAgICAgICAgICAgPGJyZWFrQnVpbGRPbkJpbmFyeUluY29tcGF0aWJsZU1vZGlmaWNhdGlvbnM+ZmFsc2U8L2JyZWFrQnVpbGRPbkJpbmFyeUluY29tcGF0aWJsZU1vZGlmaWNhdGlvbnM+CkBAIC0xNzQsMTEgKzE3Niw5IEBACiAgICAgICAgICAgPC9leGVjdXRpb24+CiAgICAgICAgIDwvZXhlY3V0aW9ucz4KICAgICAgIDwvcGx1Z2luPgotICAgICAgLS0+CiAgICAgPC9wbHVnaW5zPgogICA8L2J1aWxkPgogCi0gIDwhLS0gTmV3IGluIDYuMCwgdW5jb21tZW50IGluIDYuMQogICA8cmVwb3J0aW5nPgogICAgIDxwbHVnaW5zPgogICAgICAgPHBsdWdpbj4KQEAgLTIxMCw2ICsyMTAsOSBAQAogICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5lY2xpcHNlLmpnaXQuKjwvaW5jbHVkZT4KICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Ki5pbnRlcm5hbC4qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgICAgICAgICAgIDxhY2Nlc3NNb2RpZmllcj5wdWJsaWM8L2FjY2Vzc01vZGlmaWVyPgogICAgICAgICAgICAgICAgICAgPGJyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+ZmFsc2U8L2JyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+CiAgICAgICAgICAgICAgICAgICA8YnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz5mYWxzZTwvYnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz4KQEAgLTIyMyw1ICsyMjYsNCBAQAogICAgICAgPC9wbHVnaW4+CiAgICAgPC9wbHVnaW5zPgogICA8L3JlcG9ydGluZz4KLSAgLS0+CiA8L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1RleHRzLnByb3BlcnRpZXMgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1RleHRzLnByb3BlcnRpZXMKaW5kZXggNmZjZTA4My4uYTNiNGU5MSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9UZXh0cy5wcm9wZXJ0aWVzCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvVGV4dHMucHJvcGVydGllcwpAQCAtMiw5ICsyLDExIEBACiBlcnJMYXN0RXJyb3I9U3lzdGVtIG1lc3NhZ2UgZm9yIGVycm9yIHswfSBjb3VsZCBub3QgYmUgcmV0cmlldmVkLCBnb3QgezF9CiBlcnJSZWxlYXNlU2hhcmVkTWVtb3J5PUNhbm5vdCByZWxlYXNlIHNoYXJlZCBtZW1vcnk6IHswfSAtIHsxfQogZXJyVW5rbm93bj11bmtub3duIGVycm9yCitlcnJVbmtub3duSWRlbnRpdHlBZ2VudD1JZGVudGl0eUFnZW50ICcnezB9JycgdW5rbm93bgogbG9nRXJyb3JMb2FkTGlicmFyeT1DYW5ub3QgbG9hZCBzb2NrZXQgbGlicmFyeTsgU1NIIGFnZW50IHN1cHBvcnQgaXMgc3dpdGNoZWQgb2ZmCiBtc2dDbG9zZUZhaWxlZD1DYW5ub3QgY2xvc2UgU1NIIGFnZW50IHNvY2tldCB7MH0KIG1zZ0Nvbm5lY3RGYWlsZWQ9Q291bGQgbm90IGNvbm5lY3QgdG8gU1NIIGFnZW50IHZpYSBzb2NrZXQgJyd7MH0nJworbXNnQ29ubmVjdFBpcGVGYWlsZWQ9Q291bGQgbm90IGNvbm5lY3QgdG8gU1NIIGFnZW50IHZpYSBwaXBlICcnezB9JycKIG1zZ05vTWFwcGVkRmlsZT1Db3VsZCBub3QgY3JlYXRlIGZpbGUgbWFwcGluZzogezB9IC0gezF9CiBtc2dOb1NoYXJlZE1lbW9yeT1Db3VsZCBub3QgaW5pdGlhbGl6ZSBzaGFyZWQgbWVtb3J5OiB7MH0gLSB7MX0KIG1zZ1BhZ2VhbnRVbmF2YWlsYWJsZT1Db3VsZCBub3QgY29ubmVjdCB0byBQYWdlYW50CkBAIC0xNSwzICsxNyw0IEBACiBtc2dTaG9ydFJlYWQ9U2hvcnQgcmVhZCBmcm9tIFNTSCBhZ2VudCwgZXhwZWN0ZWQgezB9oGJ5dGVzLCBnb3QgezF9IGJ5dGVzOyBsYXN0IHJlYWQoKSByZXR1cm5lZCB7Mn0KIHBhZ2VhbnQ9UGFnZWFudAogdW5peERlZmF1bHRBZ2VudD1zc2gtYWdlbnQKK3dpbk9wZW5Tc2g9V2luMzIgT3BlblNTSApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9GYWN0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL0ZhY3RvcnkuamF2YQppbmRleCBkNzQwOWIwLi4xY2VlMWJlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL0ZhY3RvcnkuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL0ZhY3RvcnkuamF2YQpAQCAtMTEsMTEgKzExLDE1IEBACiAKIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQuQ29ubmVjdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQuQ29ubmVjdG9yRmFjdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3RyaW5nVXRpbHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlN5c3RlbVJlYWRlcjsKIAogLyoqCkBAIC0yOSw3ICszMywyMCBAQCBwdWJsaWMgY2xhc3MgRmFjdG9yeSBpbXBsZW1lbnRzIENvbm5lY3RvckZhY3RvcnkgewogCXB1YmxpYyBDb25uZWN0b3IgY3JlYXRlKFN0cmluZyBpZGVudGl0eUFnZW50LCBGaWxlIGhvbWVEaXIpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQlpZiAoU3lzdGVtUmVhZGVyLmdldEluc3RhbmNlKCkuaXNXaW5kb3dzKCkpIHsKLQkJCXJldHVybiBuZXcgUGFnZWFudENvbm5lY3RvcigpOworCQkJaWYgKFN0cmluZ1V0aWxzLmlzRW1wdHlPck51bGwoaWRlbnRpdHlBZ2VudCkpIHsKKwkJCQkvLyBEZWZhdWx0LgorCQkJCXJldHVybiBuZXcgUGFnZWFudENvbm5lY3RvcigpOworCQkJfQorCQkJU3RyaW5nIHdpblBhdGggPSBpZGVudGl0eUFnZW50LnJlcGxhY2UoJy8nLCAnXFwnKTsKKwkJCWlmIChQYWdlYW50Q29ubmVjdG9yLkRFU0NSSVBUT1IuZ2V0SWRlbnRpdHlBZ2VudCgpCisJCQkJCS5lcXVhbHNJZ25vcmVDYXNlKHdpblBhdGgpKSB7CisJCQkJcmV0dXJuIG5ldyBQYWdlYW50Q29ubmVjdG9yKCk7CisJCQl9CisJCQlpZiAod2luUGF0aC50b0xvd2VyQ2FzZShMb2NhbGUuUk9PVCkuc3RhcnRzV2l0aCgiXFxcXC5cXHBpcGVcXCIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlyZXR1cm4gbmV3IFdpblBpcGVDb25uZWN0b3Iod2luUGF0aCk7CisJCQl9CisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCVRleHRzLmdldCgpLmVyclVua25vd25JZGVudGl0eUFnZW50LCBpZGVudGl0eUFnZW50KSk7CiAJCX0KIAkJcmV0dXJuIG5ldyBVbml4RG9tYWluU29ja2V0Q29ubmVjdG9yKGlkZW50aXR5QWdlbnQpOwogCX0KQEAgLTU1LDcgKzcyLDExIEBAIHB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKIAkgKi8KIAlAT3ZlcnJpZGUKIAlwdWJsaWMgQ29sbGVjdGlvbjxDb25uZWN0b3JEZXNjcmlwdG9yPiBnZXRTdXBwb3J0ZWRDb25uZWN0b3JzKCkgewotCQlyZXR1cm4gQ29sbGVjdGlvbnMuc2luZ2xldG9uKGdldERlZmF1bHRDb25uZWN0b3IoKSk7CisJCWlmIChTeXN0ZW1SZWFkZXIuZ2V0SW5zdGFuY2UoKS5pc1dpbmRvd3MoKSkgeworCQkJcmV0dXJuIExpc3Qub2YoUGFnZWFudENvbm5lY3Rvci5ERVNDUklQVE9SLAorCQkJCQlXaW5QaXBlQ29ubmVjdG9yLkRFU0NSSVBUT1IpOworCQl9CisJCXJldHVybiBDb2xsZWN0aW9ucy5zaW5nbGV0b24oVW5peERvbWFpblNvY2tldENvbm5lY3Rvci5ERVNDUklQVE9SKTsKIAl9CiAKIAlAT3ZlcnJpZGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvTGlicmFyeUhvbGRlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9MaWJyYXJ5SG9sZGVyLmphdmEKaW5kZXggYjA5YjU1Zi4uMGE1OTJkMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9MaWJyYXJ5SG9sZGVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9MaWJyYXJ5SG9sZGVyLmphdmEKQEAgLTUzLDYgKzUzLDEwIEBAIHByaXZhdGUgTGlicmFyeUhvbGRlcigpIHsKIAkJa2VybmVsID0gS2VybmVsMzIuSU5TVEFOQ0U7CiAJfQogCisJU3RyaW5nIHN5c3RlbUVycm9yKCkgeworCQlyZXR1cm4gc3lzdGVtRXJyb3IoIlt7MH1dIC0gezF9Iik7IC8vJE5PTi1OTFMtMSQKKwl9CisKIAlTdHJpbmcgc3lzdGVtRXJyb3IoU3RyaW5nIHBhdHRlcm4pIHsKIAkJaW50IGxhc3RFcnJvciA9IGtlcm5lbC5HZXRMYXN0RXJyb3IoKTsKIAkJU3RyaW5nIG1zZzsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvUGFnZWFudENvbm5lY3Rvci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9QYWdlYW50Q29ubmVjdG9yLmphdmEKaW5kZXggYjBlM2JjZS4uMTk2ODRlYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9QYWdlYW50Q29ubmVjdG9yLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9QYWdlYW50Q29ubmVjdG9yLmphdmEKQEAgLTI2LDcgKzI2LDEwIEBAIHB1YmxpYyBjbGFzcyBQYWdlYW50Q29ubmVjdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25uZWN0b3IgewogCiAJCUBPdmVycmlkZQogCQlwdWJsaWMgU3RyaW5nIGdldElkZW50aXR5QWdlbnQoKSB7Ci0JCQlyZXR1cm4gInBhZ2VhbnQiOyAvLyROT04tTkxTLTEkCisJCQkvLyBUaGlzIG11c3QgYmUgYW4gYWJzb2x1dGUgV2luZG93cyBwYXRoIG5hbWUgdG8gYXZvaWQgdGhhdAorCQkJLy8gT3BlblNzaENvbmZpZ0ZpbGUgdHJlYXRzIGl0IGFzIGEgcmVsYXRpdmUgcGF0aCBuYW1lLiBVc2UgYW4gVU5DCisJCQkvLyBuYW1lIG9uIGxvY2FsaG9zdCwgbGlrZSBmb3IgcGlwZXMuCisJCQlyZXR1cm4gIlxcXFwuXFxwYWdlYW50IjsgLy8kTk9OLU5MUy0xJAogCQl9CiAKIAkJQE92ZXJyaWRlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1NvY2tldHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvU29ja2V0cy5qYXZhCmluZGV4IDNkOTViZGIuLjUyY2Y1ZjIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvU29ja2V0cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvU29ja2V0cy5qYXZhCkBAIC0yNCwxMSArMjQsNiBAQCBwcml2YXRlIFNvY2tldHMoKSB7CiAJfQogCiAJLyoqCi0JICogRGVmYXVsdCBTU0ggYWdlbnQgc29ja2V0IGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWUuCi0JICovCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgRU5WX1NTSF9BVVRIX1NPQ0sgPSAiU1NIX0FVVEhfU09DSyI7IC8vJE5PTi1OTFMtMSQKLQotCS8qKgogCSAqIERvbWFpbiBmb3IgVW5peCBkb21haW4gc29ja2V0cy4KIAkgKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBBRl9VTklYID0gMTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvVGV4dHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvVGV4dHMuamF2YQppbmRleCBmYjQ1YjMwLi5mMzg3Yzc2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1RleHRzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9UZXh0cy5qYXZhCkBAIC0zMSw5ICszMSwxMSBAQCBwdWJsaWMgc3RhdGljIFRleHRzIGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGVyckxhc3RFcnJvcjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGVyclJlbGVhc2VTaGFyZWRNZW1vcnk7CiAJLyoqKi8gcHVibGljIFN0cmluZyBlcnJVbmtub3duOworCS8qKiovIHB1YmxpYyBTdHJpbmcgZXJyVW5rbm93bklkZW50aXR5QWdlbnQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBsb2dFcnJvckxvYWRMaWJyYXJ5OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgbXNnQ2xvc2VGYWlsZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBtc2dDb25uZWN0RmFpbGVkOworCS8qKiovIHB1YmxpYyBTdHJpbmcgbXNnQ29ubmVjdFBpcGVGYWlsZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBtc2dOb01hcHBlZEZpbGU7CiAJLyoqKi8gcHVibGljIFN0cmluZyBtc2dOb1NoYXJlZE1lbW9yeTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIG1zZ1BhZ2VhbnRVbmF2YWlsYWJsZTsKQEAgLTQ0LDUgKzQ2LDYgQEAgcHVibGljIHN0YXRpYyBUZXh0cyBnZXQoKSB7CiAJLyoqKi8gcHVibGljIFN0cmluZyBtc2dTaG9ydFJlYWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwYWdlYW50OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgdW5peERlZmF1bHRBZ2VudDsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHdpbk9wZW5Tc2g7CiAKIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvVW5peERvbWFpblNvY2tldENvbm5lY3Rvci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9Vbml4RG9tYWluU29ja2V0Q29ubmVjdG9yLmphdmEKaW5kZXggM2I3NWYzYS4uOTVhYzM0ZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9Vbml4RG9tYWluU29ja2V0Q29ubmVjdG9yLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L2Nvbm5lY3Rvci9Vbml4RG9tYWluU29ja2V0Q29ubmVjdG9yLmphdmEKQEAgLTExLDEwICsxMSwxMCBAQAogCiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuYWdlbnQuY29ubmVjdG9yLlNvY2tldHMuQUZfVU5JWDsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5hZ2VudC5jb25uZWN0b3IuU29ja2V0cy5ERUZBVUxUX1BST1RPQ09MOwotaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50LmNvbm5lY3Rvci5Tb2NrZXRzLkVOVl9TU0hfQVVUSF9TT0NLOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50LmNvbm5lY3Rvci5Tb2NrZXRzLlNPQ0tfU1RSRUFNOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50LmNvbm5lY3Rvci5Vbml4U29ja2V0cy5GRF9DTE9FWEVDOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50LmNvbm5lY3Rvci5Vbml4U29ja2V0cy5GX1NFVEZEOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5Tc2hDb25zdGFudHMuRU5WX1NTSF9BVVRIX1NPQ0tFVDsKIAogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOwpAQCAtNDYsNyArNDYsNyBAQCBwdWJsaWMgY2xhc3MgVW5peERvbWFpblNvY2tldENvbm5lY3RvciBleHRlbmRzIEFic3RyYWN0Q29ubmVjdG9yIHsKIAogCQlAT3ZlcnJpZGUKIAkJcHVibGljIFN0cmluZyBnZXRJZGVudGl0eUFnZW50KCkgewotCQkJcmV0dXJuIEVOVl9TU0hfQVVUSF9TT0NLOworCQkJcmV0dXJuIEVOVl9TU0hfQVVUSF9TT0NLRVQ7CiAJCX0KIAogCQlAT3ZlcnJpZGUKQEAgLTkxLDggKzkxLDkgQEAgcHJpdmF0ZSBzdGF0aWMgc3luY2hyb25pemVkIFVuaXhTb2NrZXRzIGdldExpYnJhcnkoKSB7CiAJcHVibGljIFVuaXhEb21haW5Tb2NrZXRDb25uZWN0b3IoU3RyaW5nIHNvY2tldEZpbGUpIHsKIAkJc3VwZXIoKTsKIAkJU3RyaW5nIGZpbGUgPSBzb2NrZXRGaWxlOwotCQlpZiAoU3RyaW5nVXRpbHMuaXNFbXB0eU9yTnVsbChmaWxlKSkgewotCQkJZmlsZSA9IFN5c3RlbVJlYWRlci5nZXRJbnN0YW5jZSgpLmdldGVudihFTlZfU1NIX0FVVEhfU09DSyk7CisJCWlmIChTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKGZpbGUpCisJCQkJfHwgRU5WX1NTSF9BVVRIX1NPQ0tFVC5lcXVhbHMoZmlsZSkpIHsKKwkJCWZpbGUgPSBTeXN0ZW1SZWFkZXIuZ2V0SW5zdGFuY2UoKS5nZXRlbnYoRU5WX1NTSF9BVVRIX1NPQ0tFVCk7CiAJCX0KIAkJdGhpcy5zb2NrZXRGaWxlID0gZmlsZTsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1dpblBpcGVDb25uZWN0b3IuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9jb25uZWN0b3IvV2luUGlwZUNvbm5lY3Rvci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYWQ5MGYKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvY29ubmVjdG9yL1dpblBpcGVDb25uZWN0b3IuamF2YQpAQCAtMCwwICsxLDIxNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSwgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuYWdlbnQuY29ubmVjdG9yOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNCb29sZWFuOworCitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5Tc2hFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoZC5hZ2VudC5BYnN0cmFjdENvbm5lY3RvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50LkNvbm5lY3RvckZhY3RvcnkuQ29ubmVjdG9yRGVzY3JpcHRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3RyaW5nVXRpbHM7CisKK2ltcG9ydCBjb20uc3VuLmpuYS5MYXN0RXJyb3JFeGNlcHRpb247CitpbXBvcnQgY29tLnN1bi5qbmEucGxhdGZvcm0ud2luMzIuV2luQmFzZTsKK2ltcG9ydCBjb20uc3VuLmpuYS5wbGF0Zm9ybS53aW4zMi5XaW5FcnJvcjsKK2ltcG9ydCBjb20uc3VuLmpuYS5wbGF0Zm9ybS53aW4zMi5XaW5OVDsKK2ltcG9ydCBjb20uc3VuLmpuYS5wbGF0Zm9ybS53aW4zMi5XaW5OVC5IQU5ETEU7CitpbXBvcnQgY29tLnN1bi5qbmEucHRyLkludEJ5UmVmZXJlbmNlOworCisvKioKKyAqIEEgY29ubmVjdG9yIGJhc2VkIG9uIEpOQSB1c2luZyBXaW5kb3dzJyBuYW1lZCBwaXBlcyB0byBjb21tdW5pY2F0ZSB3aXRoIGFuCisgKiBzc2ggYWdlbnQuIFRoaXMgaXMgdXNlZCBieSBNaWNyb3NvZnQncyBXaW4zMi1PcGVuU1NIIHBvcnQuCisgKi8KK3B1YmxpYyBjbGFzcyBXaW5QaXBlQ29ubmVjdG9yIGV4dGVuZHMgQWJzdHJhY3RDb25uZWN0b3IgeworCisJLy8gUGlwZSBuYW1lcyBhcmUsIGxpa2Ugb3RoZXIgZmlsZSBuYW1lcywgY2FzZS1pbnNlbnNpdGl2ZSBvbiBXaW5kb3dzLgorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDQU5PTklDQUxfUElQRV9OQU1FID0gIlxcXFwuXFxwaXBlXFxvcGVuc3NoLXNzaC1hZ2VudCI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIHtAbGluayBDb25uZWN0b3JEZXNjcmlwdG9yfSBmb3IgdGhlIHtAbGluayBQYWdlYW50Q29ubmVjdG9yfS4KKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIENvbm5lY3RvckRlc2NyaXB0b3IgREVTQ1JJUFRPUiA9IG5ldyBDb25uZWN0b3JEZXNjcmlwdG9yKCkgeworCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldElkZW50aXR5QWdlbnQoKSB7CisJCQlyZXR1cm4gQ0FOT05JQ0FMX1BJUEVfTkFNRTsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgU3RyaW5nIGdldERpc3BsYXlOYW1lKCkgeworCQkJcmV0dXJuIFRleHRzLmdldCgpLndpbk9wZW5Tc2g7CisJCX0KKwl9OworCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IEZJTEVfU0hBUkVfTk9ORSA9IDA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgRklMRV9BVFRSSUJVVEVfTk9ORSA9IDA7CisKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBwaXBlTmFtZTsKKworCXByaXZhdGUgZmluYWwgQXRvbWljQm9vbGVhbiBjb25uZWN0ZWQgPSBuZXcgQXRvbWljQm9vbGVhbigpOworCisJLy8gSXQncyBhIGJ5dGUgcGlwZSwgc28gdGhlIG5vcm1hbCBXaW5kb3dzIGZpbGUgbWVjaGFuaXNtcyBjYW4gYmUgdXNlZC4KKwkvLyBXb3VsZCBvbmUgb2YgdGhlIHN0YW5kYXJkIEphdmEgRmlsZSBJL08gYWJzdHJhY3Rpb25zIHdvcms/CisJcHJpdmF0ZSB2b2xhdGlsZSBIQU5ETEUgZmlsZUhhbmRsZTsKKworCS8qKgorCSAqIENyZWF0ZXMgYSB7QGxpbmsgV2luUGlwZUNvbm5lY3Rvcn0gZm9yIHRoZSBnaXZlbiBuYW1lZCBwaXBlLgorCSAqCisJICogQHBhcmFtIHBpcGVOYW1lCisJICogICAgICAgICAgICB0byBjb25uZWN0IHRvCisJICovCisJcHVibGljIFdpblBpcGVDb25uZWN0b3IoU3RyaW5nIHBpcGVOYW1lKSB7CisJCXRoaXMucGlwZU5hbWUgPSBwaXBlTmFtZS5yZXBsYWNlKCcvJywgJ1xcJyk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGJvb2xlYW4gY29ubmVjdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmIChTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKHBpcGVOYW1lKSkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCUhBTkRMRSBmaWxlID0gZmlsZUhhbmRsZTsKKwkJc3luY2hyb25pemVkICh0aGlzKSB7CisJCQlpZiAoY29ubmVjdGVkLmdldCgpKSB7CisJCQkJcmV0dXJuIHRydWU7CisJCQl9CisJCQlMaWJyYXJ5SG9sZGVyIGxpYnMgPSBMaWJyYXJ5SG9sZGVyLmdldExpYnJhcnkoKTsKKwkJCWlmIChsaWJzID09IG51bGwpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCQlmaWxlID0gbGlicy5rZXJuZWwuQ3JlYXRlRmlsZShwaXBlTmFtZSwKKwkJCQkJV2luTlQuR0VORVJJQ19SRUFEIHwgV2luTlQuR0VORVJJQ19XUklURSwgRklMRV9TSEFSRV9OT05FLAorCQkJCQludWxsLCBXaW5OVC5PUEVOX0VYSVNUSU5HLCBGSUxFX0FUVFJJQlVURV9OT05FLCBudWxsKTsKKwkJCWlmIChmaWxlID09IG51bGwgfHwgZmlsZSA9PSBXaW5CYXNlLklOVkFMSURfSEFORExFX1ZBTFVFKSB7CisJCQkJaW50IGVycm9yQ29kZSA9IGxpYnMua2VybmVsLkdldExhc3RFcnJvcigpOworCQkJCWlmIChlcnJvckNvZGUgPT0gV2luRXJyb3IuRVJST1JfRklMRV9OT1RfRk9VTkQKKwkJCQkJCSYmIENBTk9OSUNBTF9QSVBFX05BTUUuZXF1YWxzSWdub3JlQ2FzZShwaXBlTmFtZSkpIHsKKwkJCQkJLy8gT3BlblNTSCBhZ2VudCBub3QgcnVubmluZy4gRG9uJ3QgdGhyb3cuCisJCQkJCXJldHVybiBmYWxzZTsKKwkJCQl9CisJCQkJTGFzdEVycm9yRXhjZXB0aW9uIGNhdXNlID0gbmV3IExhc3RFcnJvckV4Y2VwdGlvbigKKwkJCQkJCWxpYnMuc3lzdGVtRXJyb3IoKSk7CisJCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQKKwkJCQkJCS5mb3JtYXQoVGV4dHMuZ2V0KCkubXNnQ29ubmVjdFBpcGVGYWlsZWQsIHBpcGVOYW1lKSwKKwkJCQkJCWNhdXNlKTsKKwkJCX0KKwkJCWNvbm5lY3RlZC5zZXQodHJ1ZSk7CisJCX0KKwkJZmlsZUhhbmRsZSA9IGZpbGU7CisJCXJldHVybiBjb25uZWN0ZWQuZ2V0KCk7CisJfQorCisJQE92ZXJyaWRlCisJcHVibGljIHN5bmNocm9uaXplZCB2b2lkIGNsb3NlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJSEFORExFIGZpbGUgPSBmaWxlSGFuZGxlOworCQlpZiAoY29ubmVjdGVkLmdldEFuZFNldChmYWxzZSkgJiYgZmlsZUhhbmRsZSAhPSBudWxsKSB7CisJCQlmaWxlSGFuZGxlID0gbnVsbDsKKwkJCUxpYnJhcnlIb2xkZXIgbGlicyA9IExpYnJhcnlIb2xkZXIuZ2V0TGlicmFyeSgpOworCQkJYm9vbGVhbiBzdWNjZXNzID0gbGlicy5rZXJuZWwuQ2xvc2VIYW5kbGUoZmlsZSk7CisJCQlpZiAoIXN1Y2Nlc3MpIHsKKwkJCQlMYXN0RXJyb3JFeGNlcHRpb24gY2F1c2UgPSBuZXcgTGFzdEVycm9yRXhjZXB0aW9uKAorCQkJCQkJbGlicy5zeXN0ZW1FcnJvcigpKTsKKwkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdAorCQkJCQkJLmZvcm1hdChUZXh0cy5nZXQoKS5tc2dDbG9zZUZhaWxlZCwgcGlwZU5hbWUpLCBjYXVzZSk7CisJCQl9CisJCX0KKwl9CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgYnl0ZVtdIHJwYyhieXRlIGNvbW1hbmQsIGJ5dGVbXSBtZXNzYWdlKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlwcmVwYXJlTWVzc2FnZShjb21tYW5kLCBtZXNzYWdlKTsKKwkJSEFORExFIGZpbGUgPSBmaWxlSGFuZGxlOworCQlpZiAoIWNvbm5lY3RlZC5nZXQoKSB8fCBmaWxlID09IG51bGwpIHsKKwkJCS8vIE5vIHRyYW5zbGF0aW9uLCBpbnRlcm5hbCBlcnJvcgorCQkJdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigiTm90IGNvbm5lY3RlZCB0byBTU0ggYWdlbnQiKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJCUxpYnJhcnlIb2xkZXIgbGlicyA9IExpYnJhcnlIb2xkZXIuZ2V0TGlicmFyeSgpOworCQl3cml0ZUZ1bGx5KGxpYnMsIGZpbGUsIG1lc3NhZ2UpOworCQkvLyBOb3cgcmVjZWl2ZSB0aGUgcmVwbHkKKwkJYnl0ZVtdIGxlbmd0aEJ1ZiA9IG5ldyBieXRlWzRdOworCQlyZWFkRnVsbHkobGlicywgZmlsZSwgbGVuZ3RoQnVmKTsKKwkJaW50IGxlbmd0aCA9IHRvTGVuZ3RoKGNvbW1hbmQsIGxlbmd0aEJ1Zik7CisJCWJ5dGVbXSBwYXlsb2FkID0gbmV3IGJ5dGVbbGVuZ3RoXTsKKwkJcmVhZEZ1bGx5KGxpYnMsIGZpbGUsIHBheWxvYWQpOworCQlyZXR1cm4gcGF5bG9hZDsKKwl9CisKKwlwcml2YXRlIHZvaWQgd3JpdGVGdWxseShMaWJyYXJ5SG9sZGVyIGxpYnMsIEhBTkRMRSBmaWxlLCBieXRlW10gbWVzc2FnZSkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWJ5dGVbXSBidWYgPSBtZXNzYWdlOworCQlpbnQgdG9Xcml0ZSA9IGJ1Zi5sZW5ndGg7CisJCXRyeSB7CisJCQl3aGlsZSAodG9Xcml0ZSA+IDApIHsKKwkJCQlJbnRCeVJlZmVyZW5jZSB3cml0dGVuID0gbmV3IEludEJ5UmVmZXJlbmNlKCk7CisJCQkJYm9vbGVhbiBzdWNjZXNzID0gbGlicy5rZXJuZWwuV3JpdGVGaWxlKGZpbGUsIGJ1ZiwgYnVmLmxlbmd0aCwKKwkJCQkJCXdyaXR0ZW4sIG51bGwpOworCQkJCWlmICghc3VjY2VzcykgeworCQkJCQl0aHJvdyBuZXcgTGFzdEVycm9yRXhjZXB0aW9uKGxpYnMuc3lzdGVtRXJyb3IoKSk7CisJCQkJfQorCQkJCWludCBhY3R1YWxseVdyaXR0ZW4gPSB3cml0dGVuLmdldFZhbHVlKCk7CisJCQkJdG9Xcml0ZSAtPSBhY3R1YWxseVdyaXR0ZW47CisJCQkJaWYgKGFjdHVhbGx5V3JpdHRlbiA+IDAgJiYgdG9Xcml0ZSA+IDApIHsKKwkJCQkJYnVmID0gQXJyYXlzLmNvcHlPZlJhbmdlKGJ1ZiwgYWN0dWFsbHlXcml0dGVuLCBidWYubGVuZ3RoKTsKKwkJCQl9CisJCQl9CisJCX0gY2F0Y2ggKExhc3RFcnJvckV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCVRleHRzLmdldCgpLm1zZ1NlbmRGYWlsZWQsIEludGVnZXIudG9TdHJpbmcobWVzc2FnZS5sZW5ndGgpLAorCQkJCQlJbnRlZ2VyLnRvU3RyaW5nKHRvV3JpdGUpKSwgZSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgcmVhZEZ1bGx5KExpYnJhcnlIb2xkZXIgbGlicywgSEFORExFIGZpbGUsIGJ5dGVbXSBkYXRhKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJaW50IG4gPSAwOworCQlpbnQgb2Zmc2V0ID0gMDsKKwkJd2hpbGUgKG9mZnNldCA8IGRhdGEubGVuZ3RoICYmIChuID0gcmVhZChsaWJzLCBmaWxlLCBkYXRhLCBvZmZzZXQsCisJCQkJZGF0YS5sZW5ndGggLSBvZmZzZXQpKSA+IDApIHsKKwkJCW9mZnNldCArPSBuOworCQl9CisJCWlmIChvZmZzZXQgPCBkYXRhLmxlbmd0aCkgeworCQkJdGhyb3cgbmV3IFNzaEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJVGV4dHMuZ2V0KCkubXNnU2hvcnRSZWFkLCBJbnRlZ2VyLnRvU3RyaW5nKGRhdGEubGVuZ3RoKSwKKwkJCQkJSW50ZWdlci50b1N0cmluZyhvZmZzZXQpLCBJbnRlZ2VyLnRvU3RyaW5nKG4pKSk7CisJCX0KKwl9CisKKwlwcml2YXRlIGludCByZWFkKExpYnJhcnlIb2xkZXIgbGlicywgSEFORExFIGZpbGUsIGJ5dGVbXSBidWZmZXIsIGludCBvZmZzZXQsCisJCQlpbnQgbGVuZ3RoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0cnkgeworCQkJaW50IHRvUmVhZCA9IGxlbmd0aDsKKwkJCUludEJ5UmVmZXJlbmNlIHJlYWQgPSBuZXcgSW50QnlSZWZlcmVuY2UoKTsKKwkJCWlmIChvZmZzZXQgPT0gMCkgeworCQkJCWJvb2xlYW4gc3VjY2VzcyA9IGxpYnMua2VybmVsLlJlYWRGaWxlKGZpbGUsIGJ1ZmZlciwgdG9SZWFkLAorCQkJCQkJcmVhZCwgbnVsbCk7CisJCQkJaWYgKCFzdWNjZXNzKSB7CisJCQkJCXRocm93IG5ldyBMYXN0RXJyb3JFeGNlcHRpb24obGlicy5zeXN0ZW1FcnJvcigpKTsKKwkJCQl9CisJCQkJcmV0dXJuIHJlYWQuZ2V0VmFsdWUoKTsKKwkJCX0KKwkJCWJ5dGVbXSBkYXRhID0gbmV3IGJ5dGVbbGVuZ3RoXTsKKwkJCWJvb2xlYW4gc3VjY2VzcyA9IGxpYnMua2VybmVsLlJlYWRGaWxlKGZpbGUsIGJ1ZmZlciwgdG9SZWFkLCByZWFkLAorCQkJCQludWxsKTsKKwkJCWlmICghc3VjY2VzcykgeworCQkJCXRocm93IG5ldyBMYXN0RXJyb3JFeGNlcHRpb24obGlicy5zeXN0ZW1FcnJvcigpKTsKKwkJCX0KKwkJCWludCBhY3R1YWxseVJlYWQgPSByZWFkLmdldFZhbHVlKCk7CisJCQlpZiAoYWN0dWFsbHlSZWFkID4gMCkgeworCQkJCVN5c3RlbS5hcnJheWNvcHkoZGF0YSwgMCwgYnVmZmVyLCBvZmZzZXQsIGFjdHVhbGx5UmVhZCk7CisJCQl9CisJCQlyZXR1cm4gYWN0dWFsbHlSZWFkOworCQl9IGNhdGNoIChMYXN0RXJyb3JFeGNlcHRpb24gZSkgeworCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlUZXh0cy5nZXQoKS5tc2dSZWFkRmFpbGVkLCBJbnRlZ2VyLnRvU3RyaW5nKGxlbmd0aCkpLCBlKTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggOGZmOTczNS4uNDExZDQzYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMzQgKzMsMzQgQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1JbXBvcnQtUGFja2FnZTogb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcuaG9zdHM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmF1dGg7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb25maWcua2V5czt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmhlbHBlcnM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXg7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXlwcm92aWRlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNlc3Npb247dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zaWduYXR1cmU7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLm5ldDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuc2VjdXJpdHk7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvcmU7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNlcnZlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2VydmVyLmZvcndhcmQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQucHJveHk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorSW1wb3J0LVBhY2thZ2U6IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuY29uZmlnLmhvc3RzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb247dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5hdXRoO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5oZWxwZXJzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V5cHJvdmlkZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zZXNzaW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2lnbmF0dXJlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5uZXQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnNlY3VyaXR5O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb3JlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXI7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNlcnZlci5mb3J3YXJkO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLnByb3h5O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuaGFtY3Jlc3Q7dmVyc2lvbj0iWzEuMS4wLDMuMC4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCiAgb3JnLmp1bml0LmV4cGVyaW1lbnRhbC50aGVvcmllczt2ZXJzaW9uPSJbNC4xMyw1LjAuMCkiLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L3BvbS54bWwKaW5kZXggYTg4ZGRhZi4uM2U5OGUzMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3Q8L2FydGlmYWN0SWQ+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9BcGFjaGVTc2hUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9BcGFjaGVTc2hUZXN0LmphdmEKaW5kZXggY2NhZjk4Yy4uM2Q3Yzc2NSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3NzaGQvQXBhY2hlU3NoVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9zc2hkL0FwYWNoZVNzaFRlc3QuamF2YQpAQCAtMTA3LDYgKzEwNywzMiBAQCBwdWJsaWMgdm9pZCB0ZXN0RWQyNTUxOUhvc3RLZXkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCQkiSWRlbnRpdHlGaWxlICIgKyBwcml2YXRlS2V5MS5nZXRBYnNvbHV0ZVBhdGgoKSk7CiAJfQogCisJLyoqCisJICogVGVzdCBmb3IgU1NIRC0xMjMxLiBJZiBhdXRoZW50aWNhdGlvbiBpcyBhdHRlbXB0ZWQgZmlyc3Qgd2l0aCBhbiBSU0Ega2V5LAorCSAqIHdoaWNoIGlzIHJlamVjdGVkLCBhbmQgdGhlbiB3aXRoIHNvbWUgb3RoZXIga2V5IHR5cGUgKGhlcmUgZWQyNTUxOSksCisJICogYXV0aGVudGljYXRpb24gZmFpbHMgaW4gYnVnIFNTSEQtMTIzMS4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICogICAgICAgICAgICAgb24gZXJyb3JzCisJICogQHNlZSA8YSBocmVmPQorCSAqICAgICAgImh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvU1NIRC0xMjMxIj5TU0hELTEyMzE8L2E+CisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0V3JvbmdLZXlGaXJzdCgpIHRocm93cyBFeGNlcHRpb24geworCQlGaWxlIHVzZXJLZXkgPSBuZXcgRmlsZShnZXRUZW1wb3JhcnlEaXJlY3RvcnkoKSwgInVzZXJrZXkiKTsKKwkJY29weVRlc3RSZXNvdXJjZSgiaWRfZWQyNTUxOSIsIHVzZXJLZXkpOworCQlGaWxlIHB1YmxpY0tleSA9IG5ldyBGaWxlKGdldFRlbXBvcmFyeURpcmVjdG9yeSgpLCAidXNlcmtleS5wdWIiKTsKKwkJY29weVRlc3RSZXNvdXJjZSgiaWRfZWQyNTUxOS5wdWIiLCBwdWJsaWNLZXkpOworCQlzZXJ2ZXIuc2V0VGVzdFVzZXJQdWJsaWNLZXkocHVibGljS2V5LnRvUGF0aCgpKTsKKwkJY2xvbmVXaXRoKCJzc2g6Ly9naXQvZG9lc250bWF0dGVyIiwgZGVmYXVsdENsb25lRGlyLCBudWxsLCAvLworCQkJCSJIb3N0IGdpdCIsIC8vCisJCQkJIkhvc3ROYW1lIGxvY2FsaG9zdCIsIC8vCisJCQkJIlBvcnQgIiArIHRlc3RQb3J0LCAvLworCQkJCSJVc2VyICIgKyBURVNUX1VTRVIsIC8vCisJCQkJIklkZW50aXR5RmlsZSAiICsgcHJpdmF0ZUtleTEuZ2V0QWJzb2x1dGVQYXRoKCksIC8vIFJTQQorCQkJCSJJZGVudGl0eUZpbGUgIiArIHVzZXJLZXkuZ2V0QWJzb2x1dGVQYXRoKCkpOworCX0KKwogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdEhhc2hlZEtub3duSG9zdHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJYXNzZXJ0VHJ1ZSgiRmFpbGVkIHRvIGRlbGV0ZSBrbm93bl9ob3N0cyIsIGtub3duSG9zdHMuZGVsZXRlKCkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDgxZTAxY2MuLjczZmVhZWMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTYsOSArNiw5IEBACiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCiBCdW5kbGUtQWN0aXZhdGlvblBvbGljeTogbGF6eQotQnVuZGxlLVZlcnNpb246IDYuMC4xLnF1YWxpZmllcgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xMQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iNi4wLjEiO3gtaW50ZXJuYWw6PXRydWU7CitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSI2LjEuMSI7eC1pbnRlcm5hbDo9dHJ1ZTsKICAgdXNlczo9Im9yZy5hcGFjaGUuc3NoZC5jbGllbnQsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgua2V5Ym9hcmQsCkBAIC0yMyw3MiArMjMsNzUgQEAKICAgIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2lnbmF0dXJlLAogICAgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmFnZW50O3ZlcnNpb249IjYuMC4xIjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuYXV0aDt2ZXJzaW9uPSI2LjAuMSI7eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLnByb3h5O3ZlcnNpb249IjYuMC4xIjt4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoZDt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5hZ2VudDt2ZXJzaW9uPSI2LjEuMSI7eC1pbnRlcm5hbDo9dHJ1ZSwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLmF1dGg7dmVyc2lvbj0iNi4xLjEiO3gtaW50ZXJuYWw6PXRydWUsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5wcm94eTt2ZXJzaW9uPSI2LjEuMSI7eC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQ7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmNvbmZpZy5ob3N0cywKICAgIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V5cHJvdmlkZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwsCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LnNlc3Npb24sCiAgICBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmtleXZlcmlmaWVyIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50O3ZlcnNpb249IjYuMC4xIgorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQ7dmVyc2lvbj0iNi4xLjEiCiBJbXBvcnQtUGFja2FnZTogbmV0LmkycC5jcnlwdG8uZWRkc2E7dmVyc2lvbj0iWzAuMy4wLDAuNC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmFnZW50O3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuYXV0aC5rZXlib2FyZDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgucGFzc3dvcmQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoLnB1YmtleTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmNoYW5uZWw7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcuaG9zdHM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcua2V5czt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmZ1dHVyZTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmtleXZlcmlmaWVyO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuc2Vzc2lvbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LnNlc3Npb24uZm9yd2FyZDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uYXV0aDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNoYW5uZWw7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb21wcmVzc2lvbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNvbmZpZy5rZXlzO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMubG9hZGVyO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMubG9hZGVyLm9wZW5zc2gua2RmO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZGlnZXN0O3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZm9yd2FyZDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmZ1dHVyZTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmhlbHBlcnM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5pbzt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5leHRlbnNpb247dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguZXh0ZW5zaW9uLnBhcnNlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleXByb3ZpZGVyO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ubWFjO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ucmFuZG9tO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2Vzc2lvbjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNlc3Npb24uaGVscGVyczt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNpZ25hdHVyZTt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWw7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlcjt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuY2xvc2VhYmxlO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5pbzt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuaW8uZnVuY3RvcnM7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmlvLnJlc291cmNlO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5sb2dnaW5nO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5uZXQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnNlY3VyaXR5O3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5jb3JlO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuYXV0aDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2Z0cDt2ZXJzaW9uPSJbMi43LjAsMi44LjApIiwKLSBvcmcuYXBhY2hlLnNzaGQuc2Z0cC5jbGllbnQ7dmVyc2lvbj0iWzIuNy4wLDIuOC4wKSIsCi0gb3JnLmFwYWNoZS5zc2hkLnNmdHAuY29tbW9uO3ZlcnNpb249IlsyLjcuMCwyLjguMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmFnZW50O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuYXV0aC5rZXlib2FyZDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgucGFzc3dvcmQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoLnB1YmtleTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmNoYW5uZWw7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcuaG9zdHM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5jb25maWcua2V5czt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmZ1dHVyZTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmtleXZlcmlmaWVyO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuc2Vzc2lvbjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LnNlc3Npb24uZm9yd2FyZDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uYXV0aDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNoYW5uZWw7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb21wcmVzc2lvbjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNvbmZpZy5rZXlzO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMubG9hZGVyO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMubG9hZGVyLm9wZW5zc2gua2RmO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMudTJmO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZGlnZXN0O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uZm9yd2FyZDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmZ1dHVyZTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmhlbHBlcnM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5pbzt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5leHRlbnNpb247dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguZXh0ZW5zaW9uLnBhcnNlcjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleXByb3ZpZGVyO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ubWFjO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24ucmFuZG9tO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2Vzc2lvbjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNlc3Npb24uaGVscGVyczt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNpZ25hdHVyZTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWw7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlcjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuYnVmZmVyLmtleXM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmNsb3NlYWJsZTt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuaW87dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmlvLmRlcjt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuaW8uZnVuY3RvcnM7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmlvLnJlc291cmNlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5sb2dnaW5nO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5uZXQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLnNlY3VyaXR5O3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5jb3JlO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5hcGFjaGUuc3NoZC5zZXJ2ZXIuYXV0aDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuc2Z0cDt2ZXJzaW9uPSJbMi44LjAsMi45LjApIiwKKyBvcmcuYXBhY2hlLnNzaGQuc2Z0cC5jbGllbnQ7dmVyc2lvbj0iWzIuOC4wLDIuOS4wKSIsCisgb3JnLmFwYWNoZS5zc2hkLnNmdHAuY29tbW9uO3ZlcnNpb249IlsyLjguMCwyLjkuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCiAgb3JnLnNsZjRqO3ZlcnNpb249IlsxLjcuMCwyLjAuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRgppbmRleCBiNzcwYjkwLi45ZmVmYTZlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9NRVRBLUlORi9TT1VSQ0UtTUFOSUZFU1QuTUYKQEAgLTMsNSArMyw1IEBACiBCdW5kbGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlIC0gU291cmNlcwogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlO3ZlcnNpb249IjYuMC4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCitFY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlO3ZlcnNpb249IjYuMS4xLnF1YWxpZmllciI7cm9vdHM9Ii4iCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvUkVBRE1FLm1kIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL1JFQURNRS5tZAppbmRleCBjYmE4N2FjLi5mMDZiMmY2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvUkVBRE1FLm1kCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9SRUFETUUubWQKQEAgLTQzLDYgKzQzLDUzIEBACiAgIC5jYWxsKCk7CiBgYGAKIAorIyMgU3VwcG9ydCBmb3IgU1NIIGFnZW50cworCitUaGVyZSBleGlzdCB0d28gSUVURiBkcmFmdCBSRkNzIGZvciBjb21tdW5pY2F0aW9uIHdpdGggYW4gU1NIIGFnZW50OgorCisqIGFuIG9sZGVyIFtTU0gxIHByb3RvY29sXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtaWV0Zi1zZWNzaC1hZ2VudC0wMikgdGhhdCBjYW4gZGVhbCBvbmx5IHdpdGggRFNBIGFuZCBSU0Ega2V5cywgYW5kCisqIGEgbmV3ZXIgW1NTSDIgcHJvdG9jb2xdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1taWxsZXItc3NoLWFnZW50LTA0KSAoZnJvbSBPcGVuU1NIKS4KKworSkdpdCBvbmx5IHN1cHBvcnRzIHRoZSBuZXdlciBPcGVuU1NIIHByb3RvY29sLgorCitDb21tdW5pY2F0aW9uIHdpdGggYW4gU1NIIGFnZW50IGNhbiBvY2N1ciBvdmVyIGFueSB0cmFuc3BvcnQgcHJvdG9jb2wsIGFuZCBkaWZmZXJlbnQKK1NTSCBhZ2VudHMgbWF5IHVzZSBkaWZmZXJlbnQgdHJhbnNwb3J0cyBmb3IgbG9jYWwgY29tbXVuaWNhdGlvbi4gSkdpdCBwcm92aWRlcyBzb21lCit0cmFuc3BvcnRzIHZpYSB0aGUgW29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS5hZ2VudF0oLi4vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLmFnZW50L1JFQURNRS5tZCkKK2ZyYWdtZW50LCB3aGljaCBhcmUgZGlzY292ZXJlZCBmcm9tIGBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGVgIGFsc28gdmlhIHRoZSBgU2VydmljZUxvYWRlcmAgbWVjaGFuaXNtOwordGhlIFNQSSAoc2VydmljZSBwcm92aWRlciBpbnRlcmZhY2UpIGlzIGBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50LkNvbm5lY3RvckZhY3RvcnlgLgorCitJZiBzdWNoIGEgYENvbm5lY3RvckZhY3RvcnlgIGltcGxlbWVudGF0aW9uIGlzIGZvdW5kLCBKR2l0IG1heSB1c2UgYW4gU1NIIGFnZW50LiBJZiBub25lCitpcyBhdmFpbGFibGUsIEpHaXQgY2Fubm90IGNvbW11bmljYXRlIHdpdGggYW4gU1NIIGFnZW50LCBhbmQgd2lsbCBub3QgYXR0ZW1wdCB0byB1c2Ugb25lLgorCisjIyMgU1NIIGNvbmZpZ3VyYXRpb25zIGZvciBTU0ggYWdlbnRzCisKK1RoZXJlIGFyZSBzZXZlcmFsIFNTSCBwcm9wZXJ0aWVzIHRoYXQgY2FuIGJlIHVzZWQgaW4gdGhlIGB+Ly5zc2gvY29uZmlnYCBmaWxlIHRvIGNvbmZpZ3VyZQordGhlIHVzZSBvZiBhbiBTU0ggYWdlbnQuIEZvciB0aGUgZGV0YWlscywgc2VlIHRoZSBbT3BlbkJTRCBzc2gtY29uZmlnIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbWFuLm9wZW5ic2Qub3JnL3NzaF9jb25maWcuNSkuCisKKyogKipBZGRLZXlzVG9BZ2VudCoqIGNhbiBiZSBzZXQgdG8gYG5vYCwgYHllc2AsIG9yIGBhc2tgLiBJZiBzZXQgdG8gYHllc2AsIGtleXMgd2lsbCBiZSBhZGRlZAorICB0byB0aGUgYWdlbnQgaWYgdGhleSdyZSBub3QgeWV0IGluIHRoZSBhZ2VudC4gSWYgc2V0IHRvIGBhc2tgLCB0aGUgdXNlciB3aWxsIGJlIHByb21wdGVkCisgIGJlZm9yZSBkb2luZyBzbywgYW5kIGNhbiBvcHQgb3V0IG9mIGFkZGluZyB0aGUga2V5LiBKR2l0IGFsc28gc3VwcG9ydHMgdGhlIGFkZGl0aW9uYWwKKyAgc2V0dGluZ3MgYGNvbmZpcm1gIGFuZCBrZXkgbGlmZXRpbWVzLgorKiAqKklkZW50aXR5QWdlbnQqKiBjYW4gYmUgc2V0IHRvIGNob29zZSB3aGljaCBTU0ggYWdlbnQgdG8gdXNlLCBpZiB0aGVyZSBhcmUgc2V2ZXJhbCBydW5uaW5nLgorICBJdCBjYW4gYWxzbyBiZSBzZXQgdG8gYG5vbmVgIHRvIGV4cGxpY2l0bHkgc3dpdGNoIG9mZiB1c2luZyBhbiBTU0ggYWdlbnQgYXQgYWxsLgorKiAqKklkZW50aXRpZXNPbmx5KiogaWYgc2V0IHRvIGB5ZXNgIGFuZCBhbiBTU0ggYWdlbnQgaXMgdXNlZCwgb25seSBrZXlzIGZyb20gdGhlIGFnZW50IHRoYXQgYXJlCisgIGFsc28gbGlzdGVkIGluIGFuIGBJZGVudGl0eUZpbGVgIHByb3BlcnR5IHdpbGwgYmUgY29uc2lkZXJlZC4gKEl0J2xsIGFsc28gc3dpdGNoIG9mZiB0cnlpbmcKKyAgZGVmYXVsdCBrZXkgbmFtZXMsIHN1Y2ggYXMgYH4vLnNzaC9pZF9yc2FgIG9yIGB+Ly5zc2gvaWRfZWQyNTUxOWA7IG9ubHkga2V5cyBsaXN0ZWQgZXhwbGljaXRseQorICB3aWxsIGJlIHVzZWQuKQorCisjIyMgTGltaXRhdGlvbnMKKworQXMgbWVudGlvbmVkIGFib3ZlIEpHaXQgb25seSBpbXBsZW1lbnRzIHRoZSBuZXdlciBPcGVuU1NIIHByb3RvY29sLiBPcGVuU1NIIGZ1bGx5IGltcGxlbWVudHMgdGhpcywKK2J1dCBzb21lIG90aGVyIFNTSCBhZ2VudHMgb25seSBvZmZlciBwYXJ0aWFsIGltcGxlbWVudGF0aW9ucy4gSW4gcGFydGljdWxhciBvbiBXaW5kb3dzLCBuZWl0aGVyCitQYWdlYW50IG5vciBXaW4zMi1PcGVuU1NIIGltcGxlbWVudCB0aGUgYGNvbmZpcm1gIG9yIGxpZmV0aW1lIGNvbnN0cmFpbnRzIGZvciBgQWRkS2V5c1RvQWdlbnRgLiBXaXRoCitzdWNoIFNTSCBhZ2VudHMsIHRoZXNlIHNldHRpbmdzIHNob3VsZCBub3QgYmUgdXNlZCBpbiBgfi8uc3NoL2NvbmZpZ2AuIEdQRydzIGdwZy1hZ2VudCBjYW4gYmUgcnVuCit3aXRoIG9wdGlvbiBgZW5hYmxlX3B1dHR5X3N1cHBvcnRgIGFuZCBjYW4gdGhlbiBiZSB1c2VkIGFzIGEgUGFnZWFudCByZXBsYWNlbWVudC4gZ3BnLWFnZW50IGFwcGVhcnMKK3RvIHN1cHBvcnQgdGhlc2Uga2V5IGNvbnN0cmFpbnRzLgorCitPcGVuU1NIIGRvZXMgbm90IGltcGxlbWVudCBlZDQ0OCBrZXlzLCBhbmQgbmVpdGhlciBkb2VzIEFwYWNoZSBNSU5BIHNzaGQsIGFuZCBoZW5jZSBzdWNoIGtleXMgYXJlCitub3Qgc3VwcG9ydGVkIGluIEpHaXQgaWYgaXRzIGJ1aWx0LWluIFNTSCBpbXBsZW1lbnRhdGlvbiBpcyB1c2VkLiBlZDQ0OCBvciBvdGhlciB1bnN1cHBvcnRlZCBrZXlzCitwcm92aWRlZCBieSBhbiBTU0ggYWdlbnQgYXJlIGlnbm9yZWQuCisKICMjIFVzaW5nIGEgZGlmZmVyZW50IFNTSCBpbXBsZW1lbnRhdGlvbgogCiBUbyB1c2UgYSBkaWZmZXJlbnQgU1NIIGltcGxlbWVudGF0aW9uOgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3BvbS54bWwgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcG9tLnhtbAppbmRleCAzNDBjY2ExLi42NzRjN2E0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcG9tLnhtbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvcG9tLnhtbApAQCAtMTcsNyArMTcsNyBAQAogICA8cGFyZW50PgogICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmpnaXQ8L2dyb3VwSWQ+CiAgICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+Ci0gICAgPHZlcnNpb24+Ni4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgPHZlcnNpb24+Ni4xLjEtU05BUFNIT1Q8L3ZlcnNpb24+CiAgIDwvcGFyZW50PgogCiAgIDxhcnRpZmFjdElkPm9yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZTwvYXJ0aWZhY3RJZD4KQEAgLTUwLDYgKzUwLDE2IEBACiAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLnNzaGQ8L2dyb3VwSWQ+CiAgICAgICA8YXJ0aWZhY3RJZD5zc2hkLXNmdHA8L2FydGlmYWN0SWQ+CiAgICAgICA8dmVyc2lvbj4ke2FwYWNoZS1zc2hkLXZlcnNpb259PC92ZXJzaW9uPgorICAgICAgPGV4Y2x1c2lvbnM+CisgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zc2hkPC9ncm91cElkPgorICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zc2hkLWNvcmU8L2FydGlmYWN0SWQ+CisgICAgICAgICAgPC9leGNsdXNpb24+CisgICAgICAgICAgPGV4Y2x1c2lvbj4KKyAgICAgICAgICAgICAgPGdyb3VwSWQ+b3JnLmFwYWNoZS5zc2hkPC9ncm91cElkPgorICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD5zc2hkLWNvbW1vbjwvYXJ0aWZhY3RJZD4KKyAgICAgICAgICA8L2V4Y2x1c2lvbj4KKyAgICAgIDwvZXhjbHVzaW9ucz4KICAgICA8L2RlcGVuZGVuY3k+CiAKICAgICA8ZGVwZW5kZW5jeT4KQEAgLTE1NCw2ICsxNjQsOSBAQAogICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5lY2xpcHNlLmpnaXQuKjwvaW5jbHVkZT4KICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Ki5pbnRlcm5hbC4qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgICAgICAgICAgIDxhY2Nlc3NNb2RpZmllcj5wdWJsaWM8L2FjY2Vzc01vZGlmaWVyPgogICAgICAgICAgICAgICAgICAgPGJyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+ZmFsc2U8L2JyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+CiAgICAgICAgICAgICAgICAgICA8YnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz5mYWxzZTwvYnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz4KQEAgLTIwNyw2ICsyMjAsOSBAQAogICAgICAgICAgICAgICAgICAgPGluY2x1ZGVzPgogICAgICAgICAgICAgICAgICAgICAgIDxpbmNsdWRlPm9yZy5lY2xpcHNlLmpnaXQuKjwvaW5jbHVkZT4KICAgICAgICAgICAgICAgICAgIDwvaW5jbHVkZXM+CisgICAgICAgICAgICAgICAgICA8ZXhjbHVkZXM+CisgICAgICAgICAgICAgICAgICAgICAgPGV4Y2x1ZGU+Ki5pbnRlcm5hbC4qPC9leGNsdWRlPgorICAgICAgICAgICAgICAgICAgPC9leGNsdWRlcz4KICAgICAgICAgICAgICAgICAgIDxhY2Nlc3NNb2RpZmllcj5wdWJsaWM8L2FjY2Vzc01vZGlmaWVyPgogICAgICAgICAgICAgICAgICAgPGJyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+ZmFsc2U8L2JyZWFrQnVpbGRPbk1vZGlmaWNhdGlvbnM+CiAgICAgICAgICAgICAgICAgICA8YnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz5mYWxzZTwvYnJlYWtCdWlsZE9uQmluYXJ5SW5jb21wYXRpYmxlTW9kaWZpY2F0aW9ucz4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9Tc2hkVGV4dC5wcm9wZXJ0aWVzIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMKaW5kZXggMmJiYTczNi4uNGY3MzViYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LnByb3BlcnRpZXMKQEAgLTEsNSArMSw2IEBACiBhdXRoZW50aWNhdGlvbkNhbmNlbGVkPVNTSCBhdXRoZW50aWNhdGlvbiBjYW5jZWxlZDogbm8gcGFzc3dvcmQgZ2l2ZW4KIGF1dGhlbnRpY2F0aW9uT25DbG9zZWRTZXNzaW9uPUF1dGhlbnRpY2F0aW9uIGNhbmNlbGVkOiBzZXNzaW9uIGlzIGFscmVhZHkgY2xvc2luZyBvciBjbG9zZWQKK2Nhbm5vdFJlYWRQdWJsaWNLZXk9Q2Fubm90IHJlYWQgcHVibGljIGtleSBmcm9tIGZpbGUgezB9CiBjbG9zZUxpc3RlbmVyRmFpbGVkPVNzaCBzZXNzaW9uIGNsb3NlIGxpc3RlbmVyIGZhaWxlZAogY29uZmlnSW52YWxpZFBhdGg9SW52YWxpZCBwYXRoIGluIHNzaCBjb25maWcga2V5IHswfTogezF9CiBjb25maWdJbnZhbGlkUGF0dGVybj1JbnZhbGlkIHBhdHRlcm4gaW4gc3NoIGNvbmZpZyBrZXkgezB9OiB7MX0KQEAgLTc3LDYgKzc4LDggQEAKIHByb3h5U29ja3NVbmV4cGVjdGVkTWVzc2FnZT1VbmV4cGVjdGVkIG1lc3NhZ2UgcmVjZWl2ZWQgZnJvbSBTT0NLUzUgcHJveHkgezB9OyBjbGllbnQgc3RhdGUgezF9OiB7Mn0KIHByb3h5U29ja3NVbmV4cGVjdGVkVmVyc2lvbj1FeHBlY3RlZCBTT0NLUyB2ZXJzaW9uIDUsIGdvdCB7MH0KIHByb3h5U29ja3NVc2VybmFtZVRvb0xvbmc9VXNlciBuYW1lIGZvciBwcm94eSB7MH0gbXVzdCBiZSBhdCBtb3N0IDI1NSBieXRlcyBsb25nLCBpcyB7MX0gYnl0ZXM6IHsyfQorcHVia2V5QXV0aEFkZEtleVRvQWdlbnRFcnJvcj1Db3VsZCBub3QgYWRkIHswfSBrZXkgd2l0aCBmaW5nZXJwcmludCB7MX0gdG8gdGhlIFNTSCBhZ2VudAorcHVia2V5QXV0aEFkZEtleVRvQWdlbnRRdWVzdGlvbj1BZGQgdGhlIHswfSBrZXkgd2l0aCBmaW5nZXJwcmludCB7MX0gdG8gdGhlIFNTSCBhZ2VudD8KIHB1YmtleUF1dGhXcm9uZ0NvbW1hbmQ9UHVibGljIGtleSBhdXRoZW50aWNhdGlvbiByZWNlaXZlZCB1bmtub3duIFNTSCBjb21tYW5kIHswfSBmcm9tIHsxfSAoezJ9KQogcHVia2V5QXV0aFdyb25nS2V5PVB1YmxpYyBrZXkgYXV0aGVudGljYXRpb24gcmVjZWl2ZWQgd3Jvbmcga2V5OyBzZW50IHswfSwgZ290IGJhY2sgezF9IGZyb20gezJ9ICh7M30pCiBwdWJrZXlBdXRoV3JvbmdTaWduYXR1cmVBbGdvcml0aG09UHVibGljIGtleSBhdXRoZW50aWNhdGlvbiByZXF1ZXN0ZWQgc2lnbmF0dXJlIHR5cGUgezB9IGJ1dCBnb3QgYmFjayB7MX0gZnJvbSB7Mn0gKHszfSkKQEAgLTg1LDkgKzg4LDEzIEBACiBzZXJ2ZXJJZFdpdGhOdWw9U2VydmVyIGlkZW50aWZpY2F0aW9uIGNvbnRhaW5zIGEgTlVMIGNoYXJhY3RlcjogezB9CiBzZXNzaW9uQ2xvc2VGYWlsZWQ9Q2xvc2luZyB0aGUgc2Vzc2lvbiBmYWlsZWQKIHNlc3Npb25XaXRob3V0VXNlcm5hbWU9U1NIIHNlc3Npb24gY3JlYXRlZCB3aXRob3V0IHVzZXIgbmFtZTsgY2Fubm90IGF1dGhlbnRpY2F0ZQorc3NoQWdlbnRFZERTQUZvcm1hdEVycm9yPUNhbm5vdCBhZGQgZWQyNTUxOSBrZXkgdG8gdGhlIFNTSCBhZ2VudCBiZWNhdXNlIGl0IGlzIGVuY29kZWQgYXMgezB9IGluc3RlYWQgb2YgUEtDUyM4Citzc2hBZ2VudFBheWxvYWRMZW5ndGhFcnJvcj1FeHBlY3RlZCB7MCxjaG9pY2UsMCNubyBieXRlc3wxI29uZSBieXRlfDE8ezB9IGJ5dGVzfSBidXQgZ290IHsxfQogc3NoQWdlbnRSZXBseUxlbmd0aEVycm9yPUludmFsaWQgU1NIIGFnZW50IHJlcGx5IG1lc3NhZ2UgbGVuZ3RoIHswfSBhZnRlciBjb21tYW5kIHsxfQogc3NoQWdlbnRSZXBseVVuZXhwZWN0ZWQ9VW5leHBlY3RlZCByZXBseSBmcm9tIHNzaC1hZ2VudDogezB9CiBzc2hBZ2VudFNob3J0UmVhZEJ1ZmZlcj1TaG9ydCByZWFkIGZyb20gU1NIIGFnZW50Citzc2hBZ2VudFVua25vd25LZXk9U1NIIGFnZW50IGRlbGl2ZXJlZCBhIGtleSB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkCitzc2hBZ2VudFdyb25nS2V5TGVuZ3RoPVNTSCBhZ2VudCBkZWxpdmVyZWQgaWxsb2dpY2FsIGtleSBsZW5ndGggezB9IGF0IG9mZnNldCB7MX0gaW4gYnVmZmVyIG9mIGxlbmd0aCB7Mn0KIHNzaEFnZW50V3JvbmdOdW1iZXJPZktleXM9SW52YWxpZCBudW1iZXIgb2YgU1NIIGFnZW50IGtleXM6IHswfQogc3NoQ2xvc2luZ0Rvd249QXBhY2hlIE1JTkEgc3NoZCBzZXNzaW9uIGZhY3RvcnkgaXMgY2xvc2luZyBkb3duOyBjYW5ub3QgY3JlYXRlIG5ldyBzc2ggc2Vzc2lvbnMgb24gdGhpcyBmYWN0b3J5CiBzc2hDb21tYW5kVGltZW91dD17MH0gdGltZWQgb3V0IGFmdGVyIHsxfSBzZWNvbmRzIHdoaWxlIG9wZW5pbmcgdGhlIGNoYW5uZWwKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9KR2l0Q2xpZW50U2Vzc2lvbi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRDbGllbnRTZXNzaW9uLmphdmEKaW5kZXggZTJkYmI0Yy4uNTEwMGJjOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRDbGllbnRTZXNzaW9uLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRDbGllbnRTZXNzaW9uLmphdmEKQEAgLTQyLDcgKzQyLDYgQEAKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmlvLklvV3JpdGVGdXR1cmU7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguQnVpbHRpbkRIRmFjdG9yaWVzOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24ua2V4LkRIRmFjdG9yeTsKLWltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5LZXhQcm9wb3NhbE9wdGlvbjsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmtleC5LZXlFeGNoYW5nZUZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguZXh0ZW5zaW9uLktleEV4dGVuc2lvbkhhbmRsZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXguZXh0ZW5zaW9uLktleEV4dGVuc2lvbkhhbmRsZXIuQXZhaWxhYmlsaXR5UGhhc2U7CkBAIC0xOTksMjQgKzE5OCw2IEBAIHB1YmxpYyB2b2lkIG1lc3NhZ2VSZWNlaXZlZChSZWFkYWJsZSBidWZmZXIpIHRocm93cyBFeGNlcHRpb24gewogCQl9CiAJfQogCi0JQE92ZXJyaWRlCi0JcHJvdGVjdGVkIE1hcDxLZXhQcm9wb3NhbE9wdGlvbiwgU3RyaW5nPiBzZXROZWdvdGlhdGlvblJlc3VsdCgKLQkJCU1hcDxLZXhQcm9wb3NhbE9wdGlvbiwgU3RyaW5nPiBndWVzcykgewotCQlNYXA8S2V4UHJvcG9zYWxPcHRpb24sIFN0cmluZz4gcmVzdWx0ID0gc3VwZXIuc2V0TmVnb3RpYXRpb25SZXN1bHQoCi0JCQkJZ3Vlc3MpOwotCQkvLyBUaGlzIHNob3VsZCBiZSBkb2FibGUgd2l0aCBhIFNlc3Npb25MaXN0ZW5lciwgdG9vLCBidXQgSSBkb24ndCBzZWUKLQkJLy8gaG93IHRvIGFkZCBhIGxpc3RlbmVyIGluIHRpbWUgdG8gY2F0Y2ggdGhlIG5lZ290aWF0aW9uIGVuZCBmb3Igc3VyZQotCQkvLyBnaXZlbiB0aGF0IHRoZSBzdXBlci1jb25zdHJ1Y3RvciBhbHJlYWR5IHN0YXJ0cyBLRVguCi0JCS8vCi0JCS8vIFRPRE86IFRoaXMgb3ZlcnJpZGUgY2FuIGJlIHJlbW92ZWQgb25jZSB3ZSB1c2Ugc3NoZCAyLjguMC4KLQkJaWYgKGxvZy5pc0RlYnVnRW5hYmxlZCgpKSB7Ci0JCQlyZXN1bHQuZm9yRWFjaCgob3B0aW9uLCB2YWx1ZSkgLT4gbG9nLmRlYnVnKAotCQkJCQkic2V0TmVnb3RpYXRpb25SZXN1bHQoe30pIEtleDoge30gPSB7fSIsIHRoaXMsIC8vJE5PTi1OTFMtMSQKLQkJCQkJb3B0aW9uLmdldERlc2NyaXB0aW9uKCksIHZhbHVlKSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KIAlTZXQ8U3RyaW5nPiBnZXRBbGxBdmFpbGFibGVTaWduYXR1cmVBbGdvcml0aG1zKCkgewogCQlTZXQ8U3RyaW5nPiBhbGxBdmFpbGFibGUgPSBuZXcgSGFzaFNldDw+KCk7CiAJCUJ1aWx0aW5TaWduYXR1cmVzLlZBTFVFUy5mb3JFYWNoKHMgLT4gYWxsQXZhaWxhYmxlLmFkZChzLmdldE5hbWUoKSkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL0pHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbi5qYXZhCmluZGV4IGMwODJhOWEuLjk2ZGEwY2MgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9KR2l0UHVibGljS2V5QXV0aGVudGljYXRpb24uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvSkdpdFB1YmxpY0tleUF1dGhlbnRpY2F0aW9uLmphdmEKQEAgLTEyLDI1ICsxMiw2OCBAQAogaW1wb3J0IHN0YXRpYyBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdC5mb3JtYXQ7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlNzaENvbnN0YW50cy5QVUJLRVlfQUNDRVBURURfQUxHT1JJVEhNUzsKIAoraW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5JbnZhbGlkUGF0aEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkxpbmtPcHRpb247CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aHM7CitpbXBvcnQgamF2YS5zZWN1cml0eS5HZW5lcmFsU2VjdXJpdHlFeGNlcHRpb247CitpbXBvcnQgamF2YS5zZWN1cml0eS5LZXlQYWlyOworaW1wb3J0IGphdmEuc2VjdXJpdHkuUHVibGljS2V5OworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIGltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuTm9TdWNoRWxlbWVudEV4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuT2JqZWN0czsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CiAKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuYWdlbnQuU3NoQWdlbnQ7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmFnZW50LlNzaEFnZW50RmFjdG9yeTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuYWdlbnQuU3NoQWdlbnRLZXlDb25zdHJhaW50OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuYXV0aC5wdWJrZXkuS2V5QWdlbnRJZGVudGl0eTsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmF1dGgucHVia2V5LlB1YmxpY0tleUlkZW50aXR5OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuYXV0aC5wdWJrZXkuVXNlckF1dGhQdWJsaWNLZXk7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNsaWVudC5hdXRoLnB1YmtleS5Vc2VyQXV0aFB1YmxpY0tleUl0ZXJhdG9yOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jbGllbnQuY29uZmlnLmhvc3RzLkhvc3RDb25maWdFbnRyeTsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LnNlc3Npb24uQ2xpZW50U2Vzc2lvbjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLkZhY3RvcnlNYW5hZ2VyOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uTmFtZWRGYWN0b3J5OworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMuQXV0aG9yaXplZEtleUVudHJ5OworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMuS2V5VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5jb25maWcua2V5cy5QdWJsaWNLZXlFbnRyeVJlc29sdmVyOworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMudTJmLlNlY3VyaXR5S2V5UHVibGljS2V5OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2lnbmF0dXJlLlNpZ25hdHVyZTsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnNpZ25hdHVyZS5TaWduYXR1cmVGYWN0b3JpZXNNYW5hZ2VyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaC5PcGVuU3NoQ29uZmlnRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5DcmVkZW50aWFsSXRlbTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5DcmVkZW50aWFsc1Byb3ZpZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlNzaENvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5VUklpc2g7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlN0cmluZ1V0aWxzOwogCiAvKioKICAqIEN1c3RvbSB7QGxpbmsgVXNlckF1dGhQdWJsaWNLZXl9IGltcGxlbWVudGF0aW9uIGZvciBoYW5kbGluZyBTU0ggY29uZmlnCi0gKiBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMuCisgKiBQdWJrZXlBY2NlcHRlZEFsZ29yaXRobXMgYW5kIGludGVyYWN0aW9uIHdpdGggdGhlIFNTSCBhZ2VudC4KICAqLwogcHVibGljIGNsYXNzIEpHaXRQdWJsaWNLZXlBdXRoZW50aWNhdGlvbiBleHRlbmRzIFVzZXJBdXRoUHVibGljS2V5IHsKIAorCXByaXZhdGUgU3NoQWdlbnQgYWdlbnQ7CisKKwlwcml2YXRlIEhvc3RDb25maWdFbnRyeSBob3N0Q29uZmlnOworCisJcHJpdmF0ZSBib29sZWFuIGFkZEtleXNUb0FnZW50OworCisJcHJpdmF0ZSBib29sZWFuIGFza0JlZm9yZUFkZGluZzsKKworCXByaXZhdGUgU3RyaW5nIHNrUHJvdmlkZXI7CisKKwlwcml2YXRlIFNzaEFnZW50S2V5Q29uc3RyYWludFtdIGNvbnN0cmFpbnRzOworCiAJSkdpdFB1YmxpY0tleUF1dGhlbnRpY2F0aW9uKExpc3Q8TmFtZWRGYWN0b3J5PFNpZ25hdHVyZT4+IGZhY3RvcmllcykgewogCQlzdXBlcihmYWN0b3JpZXMpOwogCX0KQEAgLTQzLDcgKzg2LDcgQEAgcHVibGljIHZvaWQgaW5pdChDbGllbnRTZXNzaW9uIHJhd1Nlc3Npb24sIFN0cmluZyBzZXJ2aWNlKQogCQkJCQkrIHJhd1Nlc3Npb24uZ2V0Q2xhc3MoKS5nZXRDYW5vbmljYWxOYW1lKCkpOwogCQl9CiAJCUpHaXRDbGllbnRTZXNzaW9uIHNlc3Npb24gPSAoSkdpdENsaWVudFNlc3Npb24pIHJhd1Nlc3Npb247Ci0JCUhvc3RDb25maWdFbnRyeSBob3N0Q29uZmlnID0gc2Vzc2lvbi5nZXRIb3N0Q29uZmlnRW50cnkoKTsKKwkJaG9zdENvbmZpZyA9IHNlc3Npb24uZ2V0SG9zdENvbmZpZ0VudHJ5KCk7CiAJCS8vIFNldCBzaWduYXR1cmUgYWxnb3JpdGhtcyBmb3IgcHVibGljIGtleSBhdXRoZW50aWNhdGlvbgogCQlTdHJpbmcgcHVia2V5QWxnb3MgPSBob3N0Q29uZmlnLmdldFByb3BlcnR5KFBVQktFWV9BQ0NFUFRFRF9BTEdPUklUSE1TKTsKIAkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKHB1YmtleUFsZ29zKSkgewpAQCAtNjQsNDYgKzEwNywyOTEgQEAgcHVibGljIHZvaWQgaW5pdChDbGllbnRTZXNzaW9uIHJhd1Nlc3Npb24sIFN0cmluZyBzZXJ2aWNlKQogCQkvLyBJZiB3ZSBkb24ndCBzZXQgc2lnbmF0dXJlIGZhY3RvcmllcyBoZXJlLCB0aGUgZGVmYXVsdCBvbmVzIGZyb20gdGhlCiAJCS8vIHNlc3Npb24gd2lsbCBiZSB1c2VkLgogCQlzdXBlci5pbml0KHNlc3Npb24sIHNlcnZpY2UpOwotCQkvLyBJbiBzc2hkIDIuNy4wLCB3ZSBlbmQgdXAgbm93IHdpdGggYSBrZXkgaXRlcmF0b3IgdGhhdCB1c2VzIGtleXMKLQkJLy8gcHJvdmlkZWQgYnkgYW4gc3NoLWFnZW50IGV2ZW4gaWYgSWRlbnRpdGllc09ubHkgaXMgdHJ1ZS4gU28gaWYKLQkJLy8gbmVlZGVkLCBmaWx0ZXIgb3V0IGFueSBLZXlBZ2VudElkZW50aXR5LgotCQlpZiAoaG9zdENvbmZpZy5pc0lkZW50aXRpZXNPbmx5KCkpIHsKLQkJCUl0ZXJhdG9yPFB1YmxpY0tleUlkZW50aXR5PiBvcmlnaW5hbCA9IGtleXM7Ci0JCQkvLyBUaGUgb3JpZ2luYWwgaXRlcmF0b3Igd2lsbCBhbHJlYWR5IGhhdmUgZ290dGVuIHRoZSBpZGVudGl0aWVzCi0JCQkvLyBmcm9tIHRoZSBhZ2VudC4gVW5mb3J0dW5hdGVseSB0aGVyZSdzIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0Ci0JCQkvLyB0aGF0OyBpdCdsbCBoYXZlIHRvIGJlIGZpeGVkIHVwc3RyZWFtLiAoQXMgd2lsbCwgdWx0aW1hdGVseSwKLQkJCS8vIHJlc3BlY3RpbmcgaXNJZGVudGl0aWVzT25seSgpLikgQXQgbGVhc3Qgd2UgY2FuIHNpbXBseSBub3QKLQkJCS8vIHVzZSB0aGUga2V5cyB0aGUgYWdlbnQgcHJvdmlkZWQuCi0JCQkvLwotCQkJLy8gU2VlIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvU1NIRC0xMjE4Ci0JCQlrZXlzID0gbmV3IEl0ZXJhdG9yPD4oKSB7CisJfQogCi0JCQkJcHJpdmF0ZSBQdWJsaWNLZXlJZGVudGl0eSB2YWx1ZTsKKwlAT3ZlcnJpZGUKKwlwcm90ZWN0ZWQgSXRlcmF0b3I8UHVibGljS2V5SWRlbnRpdHk+IGNyZWF0ZVB1YmxpY0tleUl0ZXJhdG9yKAorCQkJQ2xpZW50U2Vzc2lvbiBzZXNzaW9uLCBTaWduYXR1cmVGYWN0b3JpZXNNYW5hZ2VyIG1hbmFnZXIpCisJCQl0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYWdlbnQgPSBnZXRBZ2VudChzZXNzaW9uKTsKKwkJaWYgKGFnZW50ICE9IG51bGwpIHsKKwkJCXBhcnNlQWRkS2V5cyhob3N0Q29uZmlnKTsKKwkJCWlmIChhZGRLZXlzVG9BZ2VudCkgeworCQkJCXNrUHJvdmlkZXIgPSBob3N0Q29uZmlnLmdldFByb3BlcnR5KFNzaENvbnN0YW50cy5TRUNVUklUWV9LRVlfUFJPVklERVIpOworCQkJfQorCQl9CisJCXJldHVybiBuZXcgS2V5SXRlcmF0b3Ioc2Vzc2lvbiwgbWFuYWdlcik7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIFB1YmxpY0tleUlkZW50aXR5IHJlc29sdmVBdHRlbXB0ZWRQdWJsaWNLZXlJZGVudGl0eSgKKwkJCUNsaWVudFNlc3Npb24gc2Vzc2lvbiwgU3RyaW5nIHNlcnZpY2UpIHRocm93cyBFeGNlcHRpb24geworCQlQdWJsaWNLZXlJZGVudGl0eSByZXN1bHQgPSBnZXROZXh0S2V5KHNlc3Npb24sIHNlcnZpY2UpOworCQkvLyBUaGlzIGZpeGVzIFNTSEQtMTIzMS4gQ2FuIGJlIHJlbW92ZWQgb25jZSB3ZSdyZSB1c2luZyBBcGFjaGUgTUlOQQorCQkvLyBzc2hkID4gMi44LjAuCisJCS8vCisJCS8vIFNlZSBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL1NTSEQtMTIzMQorCQljdXJyZW50QWxnb3JpdGhtcy5jbGVhcigpOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCXByaXZhdGUgUHVibGljS2V5SWRlbnRpdHkgZ2V0TmV4dEtleShDbGllbnRTZXNzaW9uIHNlc3Npb24sIFN0cmluZyBzZXJ2aWNlKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVB1YmxpY0tleUlkZW50aXR5IGlkID0gc3VwZXIucmVzb2x2ZUF0dGVtcHRlZFB1YmxpY0tleUlkZW50aXR5KHNlc3Npb24sCisJCQkJc2VydmljZSk7CisJCWlmIChhZGRLZXlzVG9BZ2VudCAmJiBpZCAhPSBudWxsICYmICEoaWQgaW5zdGFuY2VvZiBLZXlBZ2VudElkZW50aXR5KSkgeworCQkJS2V5UGFpciBrZXkgPSBpZC5nZXRLZXlJZGVudGl0eSgpOworCQkJaWYgKGtleSAhPSBudWxsICYmIGtleS5nZXRQdWJsaWMoKSAhPSBudWxsCisJCQkJCSYmIGtleS5nZXRQcml2YXRlKCkgIT0gbnVsbCkgeworCQkJCS8vIFdlJ3ZlIGp1c3Qgc3VjY2Vzc2Z1bGx5IGxvYWRlZCBhIGtleSB0aGF0IHdhc24ndCBpbiB0aGUKKwkJCQkvLyBhZ2VudC4gQWRkIGl0IHRvIHRoZSBhZ2VudC4KKwkJCQkvLworCQkJCS8vIEtleXMgYXJlIGFkZGVkIGFmdGVyIGxvYWRpbmcsIGFzIGluIE9wZW5TU0guIFRoZSBhbHRlcm5hdGl2ZQorCQkJCS8vIG1pZ2h0IGJlIHRvIGFkZCBhIGtleSBvbmx5IGFmdGVyIChwYXJ0aWFsbHkpIHN1Y2Nlc3NmdWwKKwkJCQkvLyBhdXRoZW50aWNhdGlvbj8KKwkJCQlQdWJsaWNLZXkgcGsgPSBrZXkuZ2V0UHVibGljKCk7CisJCQkJU3RyaW5nIGZpbmdlcnByaW50ID0gS2V5VXRpbHMuZ2V0RmluZ2VyUHJpbnQocGspOworCQkJCVN0cmluZyBrZXlUeXBlID0gS2V5VXRpbHMuZ2V0S2V5VHlwZShrZXkpOworCQkJCXRyeSB7CisJCQkJCS8vIENoZWNrIHRoYXQgdGhlIGtleSBpcyBub3QgaW4gdGhlIGFnZW50IGFscmVhZHkuCisJCQkJCWlmIChhZ2VudEhhc0tleShwaykpIHsKKwkJCQkJCXJldHVybiBpZDsKKwkJCQkJfQorCQkJCQlpZiAoYXNrQmVmb3JlQWRkaW5nCisJCQkJCQkJJiYgKHNlc3Npb24gaW5zdGFuY2VvZiBKR2l0Q2xpZW50U2Vzc2lvbikpIHsKKwkJCQkJCUNyZWRlbnRpYWxzUHJvdmlkZXIgcHJvdmlkZXIgPSAoKEpHaXRDbGllbnRTZXNzaW9uKSBzZXNzaW9uKQorCQkJCQkJCQkuZ2V0Q3JlZGVudGlhbHNQcm92aWRlcigpOworCQkJCQkJQ3JlZGVudGlhbEl0ZW0uWWVzTm9UeXBlIHF1ZXN0aW9uID0gbmV3IENyZWRlbnRpYWxJdGVtLlllc05vVHlwZSgKKwkJCQkJCQkJZm9ybWF0KFNzaGRUZXh0CisJCQkJCQkJCQkJLmdldCgpLnB1YmtleUF1dGhBZGRLZXlUb0FnZW50UXVlc3Rpb24sCisJCQkJCQkJCQkJa2V5VHlwZSwgZmluZ2VycHJpbnQpKTsKKwkJCQkJCWJvb2xlYW4gcmVzdWx0ID0gcHJvdmlkZXIgIT0gbnVsbAorCQkJCQkJCQkmJiBwcm92aWRlci5zdXBwb3J0cyhxdWVzdGlvbikKKwkJCQkJCQkJJiYgcHJvdmlkZXIuZ2V0KGdldFVyaSgpLCBxdWVzdGlvbik7CisJCQkJCQlpZiAoIXJlc3VsdCB8fCAhcXVlc3Rpb24uZ2V0VmFsdWUoKSkgeworCQkJCQkJCS8vIERvbid0IGFkZCB0aGUga2V5LgorCQkJCQkJCXJldHVybiBpZDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlTc2hBZ2VudEtleUNvbnN0cmFpbnRbXSBydWxlcyA9IGNvbnN0cmFpbnRzOworCQkJCQlpZiAocGsgaW5zdGFuY2VvZiBTZWN1cml0eUtleVB1YmxpY0tleSAmJiAhU3RyaW5nVXRpbHMuaXNFbXB0eU9yTnVsbChza1Byb3ZpZGVyKSkgeworCQkJCQkJcnVsZXMgPSBBcnJheXMuY29weU9mKHJ1bGVzLCBydWxlcy5sZW5ndGggKyAxKTsKKwkJCQkJCXJ1bGVzW3J1bGVzLmxlbmd0aCAtIDFdID0KKwkJCQkJCQkJbmV3IFNzaEFnZW50S2V5Q29uc3RyYWludC5GaWRvUHJvdmlkZXJFeHRlbnNpb24oc2tQcm92aWRlcik7CisJCQkJCX0KKwkJCQkJLy8gVW5mb3J0dW5hdGVseSBhIGNvbW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBrZXkgaXMgbG9zdAorCQkJCQkvLyBieSBBcGFjaGUgTUlOQSBzc2hkLCBhbmQgdGhlcmUgaXMgYWxzbyBubyB3YXkgdG8gZ2V0IHRoZQorCQkJCQkvLyBvcmlnaW5hbCBmaWxlIG5hbWUgZm9yIGtleXMgbG9hZGVkIGZyb20gYSBmaWxlLiBTbyBhZGQgaXQKKwkJCQkJLy8gd2l0aG91dCBjb21tZW50LgorCQkJCQlhZ2VudC5hZGRJZGVudGl0eShrZXksIG51bGwsIHJ1bGVzKTsKKwkJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJCS8vIERvIG5vdCByZS10aHJvdzogd2UgZG9uJ3Qgd2FudCBhdXRoZW50aWNhdGlvbiB0byBmYWlsIGlmCisJCQkJCS8vIHdlIGNhbm5vdCBhZGQgdGhlIGtleSB0byB0aGUgYWdlbnQuCisJCQkJCWxvZy5lcnJvcigKKwkJCQkJCQlmb3JtYXQoU3NoZFRleHQuZ2V0KCkucHVia2V5QXV0aEFkZEtleVRvQWdlbnRFcnJvciwKKwkJCQkJCQkJCWtleVR5cGUsIGZpbmdlcnByaW50KSwKKwkJCQkJCQllKTsKKwkJCQkJLy8gTm90ZSB0aGF0IGFzIG9mIFdpbjMyLU9wZW5TU0ggOC42IGFuZCBQYWdlYW50IDAuNzYsCisJCQkJCS8vIG5laXRoZXIgY2FuIGhhbmRsZSBrZXkgY29uc3RyYWludHMuIFBhZ2VhbnQgZmFpbHMKKwkJCQkJLy8gZ3JhY2VmdWxseSwgbm90IGFkZGluZyB0aGUga2V5IGFuZCByZXR1cm5pbmcKKwkJCQkJLy8gU1NIX0FHRU5UX0ZBSUxVUkUuIFdpbjMyLU9wZW5TU0ggY2xvc2VzIHRoZSBjb25uZWN0aW9uCisJCQkJCS8vIHdpdGhvdXQgZXZlbiByZXR1cm5pbmcgYSBmYWlsdXJlIG1lc3NhZ2UsIHdoaWNoIHZpb2xhdGVzCisJCQkJCS8vIHRoZSBTU0ggYWdlbnQgcHJvdG9jb2wgYW5kIG1ha2VzIGFsbCBzdWJzZXF1ZW50IHJlcXVlc3RzCisJCQkJCS8vIHRvIHRoZSBhZ2VudCBmYWlsLgorCQkJCX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gaWQ7CisJfQorCisJcHJpdmF0ZSBib29sZWFuIGFnZW50SGFzS2V5KFB1YmxpY0tleSBwaykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJSXRlcmFibGU8PyBleHRlbmRzIE1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4+IGlkcyA9IGFnZW50CisJCQkJLmdldElkZW50aXRpZXMoKTsKKwkJaWYgKGlkcyA9PSBudWxsKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwkJSXRlcmF0b3I8PyBleHRlbmRzIE1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4+IGl0ZXIgPSBpZHMuaXRlcmF0b3IoKTsKKwkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7CisJCQlpZiAoS2V5VXRpbHMuY29tcGFyZUtleXMoaXRlci5uZXh0KCkuZ2V0S2V5KCksIHBrKSkgeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwcml2YXRlIFVSSWlzaCBnZXRVcmkoKSB7CisJCVN0cmluZyB1cmkgPSBTc2hDb25zdGFudHMuU1NIX1NDSEVNRSArICI6Ly8iOyAvLyROT04tTkxTLTEkCisJCVN0cmluZyB1c2VyTmFtZSA9IGhvc3RDb25maWcuZ2V0VXNlcm5hbWUoKTsKKwkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKHVzZXJOYW1lKSkgeworCQkJdXJpICs9IHVzZXJOYW1lICsgJ0AnOworCQl9CisJCXVyaSArPSBob3N0Q29uZmlnLmdldEhvc3QoKTsKKwkJaW50IHBvcnQgPSBob3N0Q29uZmlnLmdldFBvcnQoKTsKKwkJaWYgKHBvcnQgPiAwICYmIHBvcnQgIT0gU3NoQ29uc3RhbnRzLlNTSF9ERUZBVUxUX1BPUlQpIHsKKwkJCXVyaSArPSAiOiIgKyBwb3J0OyAvLyROT04tTkxTLTEkCisJCX0KKwkJdHJ5IHsKKwkJCXJldHVybiBuZXcgVVJJaXNoKHVyaSk7CisJCX0gY2F0Y2ggKFVSSVN5bnRheEV4Y2VwdGlvbiBlKSB7CisJCQlsb2cuZXJyb3IoZS5nZXRMb2NhbGl6ZWRNZXNzYWdlKCksIGUpOworCQl9CisJCXJldHVybiBuZXcgVVJJaXNoKCk7CisJfQorCisJcHJpdmF0ZSBTc2hBZ2VudCBnZXRBZ2VudChDbGllbnRTZXNzaW9uIHNlc3Npb24pIHRocm93cyBFeGNlcHRpb24geworCQlGYWN0b3J5TWFuYWdlciBtYW5hZ2VyID0gT2JqZWN0cy5yZXF1aXJlTm9uTnVsbCgKKwkJCQlzZXNzaW9uLmdldEZhY3RvcnlNYW5hZ2VyKCksICJObyBzZXNzaW9uIGZhY3RvcnkgbWFuYWdlciIpOyAvLyROT04tTkxTLTEkCisJCVNzaEFnZW50RmFjdG9yeSBmYWN0b3J5ID0gbWFuYWdlci5nZXRBZ2VudEZhY3RvcnkoKTsKKwkJaWYgKGZhY3RvcnkgPT0gbnVsbCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJcmV0dXJuIGZhY3RvcnkuY3JlYXRlQ2xpZW50KHNlc3Npb24sIG1hbmFnZXIpOworCX0KKworCXByaXZhdGUgdm9pZCBwYXJzZUFkZEtleXMoSG9zdENvbmZpZ0VudHJ5IGNvbmZpZykgeworCQlTdHJpbmcgdmFsdWUgPSBjb25maWcuZ2V0UHJvcGVydHkoU3NoQ29uc3RhbnRzLkFERF9LRVlTX1RPX0FHRU5UKTsKKwkJaWYgKFN0cmluZ1V0aWxzLmlzRW1wdHlPck51bGwodmFsdWUpKSB7CisJCQlhZGRLZXlzVG9BZ2VudCA9IGZhbHNlOworCQkJcmV0dXJuOworCQl9CisJCVN0cmluZ1tdIHZhbHVlcyA9IHZhbHVlLnNwbGl0KCIsIik7IC8vJE5PTi1OTFMtMSQKKwkJTGlzdDxTc2hBZ2VudEtleUNvbnN0cmFpbnQ+IHJ1bGVzID0gbmV3IEFycmF5TGlzdDw+KDIpOworCQlzd2l0Y2ggKHZhbHVlc1swXSkgeworCQljYXNlICJ5ZXMiOiAvLyROT04tTkxTLTEkCisJCQlhZGRLZXlzVG9BZ2VudCA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAibm8iOiAvLyROT04tTkxTLTEkCisJCQlhZGRLZXlzVG9BZ2VudCA9IGZhbHNlOworCQkJYnJlYWs7CisJCWNhc2UgImFzayI6IC8vJE5PTi1OTFMtMSQKKwkJCWFkZEtleXNUb0FnZW50ID0gdHJ1ZTsKKwkJCWFza0JlZm9yZUFkZGluZyA9IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSAiY29uZmlybSI6IC8vJE5PTi1OTFMtMSQKKwkJCWFkZEtleXNUb0FnZW50ID0gdHJ1ZTsKKwkJCXJ1bGVzLmFkZChTc2hBZ2VudEtleUNvbnN0cmFpbnQuQ09ORklSTSk7CisJCQlpZiAodmFsdWVzLmxlbmd0aCA+IDEpIHsKKwkJCQlpbnQgc2Vjb25kcyA9IE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKHZhbHVlc1sxXSk7CisJCQkJaWYgKHNlY29uZHMgPiAwKSB7CisJCQkJCXJ1bGVzLmFkZChuZXcgU3NoQWdlbnRLZXlDb25zdHJhaW50LkxpZmVUaW1lKHNlY29uZHMpKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWludCBzZWNvbmRzID0gT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWModmFsdWVzWzBdKTsKKwkJCWlmIChzZWNvbmRzID4gMCkgeworCQkJCWFkZEtleXNUb0FnZW50ID0gdHJ1ZTsKKwkJCQlydWxlcy5hZGQobmV3IFNzaEFnZW50S2V5Q29uc3RyYWludC5MaWZlVGltZShzZWNvbmRzKSk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCQljb25zdHJhaW50cyA9IHJ1bGVzLnRvQXJyYXkobmV3IFNzaEFnZW50S2V5Q29uc3RyYWludFswXSk7CisJfQorCisJQE92ZXJyaWRlCisJcHJvdGVjdGVkIHZvaWQgcmVsZWFzZUtleXMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlhZGRLZXlzVG9BZ2VudCA9IGZhbHNlOworCQlhc2tCZWZvcmVBZGRpbmcgPSBmYWxzZTsKKwkJc2tQcm92aWRlciA9IG51bGw7CisJCWNvbnN0cmFpbnRzID0gbnVsbDsKKwkJdHJ5IHsKKwkJCWlmIChhZ2VudCAhPSBudWxsKSB7CisJCQkJdHJ5IHsKKwkJCQkJYWdlbnQuY2xvc2UoKTsKKwkJCQl9IGZpbmFsbHkgeworCQkJCQlhZ2VudCA9IG51bGw7CisJCQkJfQorCQkJfQorCQl9IGZpbmFsbHkgeworCQkJc3VwZXIucmVsZWFzZUtleXMoKTsKKwkJfQorCX0KKworCXByaXZhdGUgY2xhc3MgS2V5SXRlcmF0b3IgZXh0ZW5kcyBVc2VyQXV0aFB1YmxpY0tleUl0ZXJhdG9yIHsKKworCQlwcml2YXRlIEl0ZXJhYmxlPD8gZXh0ZW5kcyBNYXAuRW50cnk8UHVibGljS2V5LCBTdHJpbmc+PiBhZ2VudEtleXM7CisKKwkJLy8gSWYgbm9uLW51bGwsIGFsbCB0aGUgcHVibGljIGtleXMgZnJvbSBleHBsaWNpdGx5IGdpdmVuIGtleSBmaWxlcy4gQW55CisJCS8vIGFnZW50IGtleSBub3QgbWF0Y2hpbmcgb25lIG9mIHRoZXNlIHB1YmxpYyBrZXlzIHdpbGwgYmUgaWdub3JlZCBpbgorCQkvLyBnZXRJZGVudGl0aWVzKCkuCisJCXByaXZhdGUgQ29sbGVjdGlvbjxQdWJsaWNLZXk+IGlkZW50aXR5RmlsZXM7CisKKwkJcHVibGljIEtleUl0ZXJhdG9yKENsaWVudFNlc3Npb24gc2Vzc2lvbiwKKwkJCQlTaWduYXR1cmVGYWN0b3JpZXNNYW5hZ2VyIG1hbmFnZXIpCisJCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CisJCQlzdXBlcihzZXNzaW9uLCBtYW5hZ2VyKTsKKwkJfQorCisJCXByaXZhdGUgTGlzdDxQdWJsaWNLZXk+IGdldEV4cGxpY2l0S2V5cygKKwkJCQlDb2xsZWN0aW9uPFN0cmluZz4gZXhwbGljaXRGaWxlcykgeworCQkJaWYgKGV4cGxpY2l0RmlsZXMgPT0gbnVsbCkgeworCQkJCXJldHVybiBudWxsOworCQkJfQorCQkJcmV0dXJuIGV4cGxpY2l0RmlsZXMuc3RyZWFtKCkubWFwKHMgLT4geworCQkJCXRyeSB7CisJCQkJCVBhdGggcCA9IFBhdGhzLmdldChzICsgIi5wdWIiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlpZiAoRmlsZXMuaXNSZWd1bGFyRmlsZShwLCBMaW5rT3B0aW9uLk5PRk9MTE9XX0xJTktTKSkgeworCQkJCQkJcmV0dXJuIEF1dGhvcml6ZWRLZXlFbnRyeS5yZWFkQXV0aG9yaXplZEtleXMocCkuZ2V0KDApCisJCQkJCQkJCS5yZXNvbHZlUHVibGljS2V5KG51bGwsCisJCQkJCQkJCQkJUHVibGljS2V5RW50cnlSZXNvbHZlci5JR05PUklORyk7CisJCQkJCX0KKwkJCQl9IGNhdGNoIChJbnZhbGlkUGF0aEV4Y2VwdGlvbiB8IElPRXhjZXB0aW9uCisJCQkJCQl8IEdlbmVyYWxTZWN1cml0eUV4Y2VwdGlvbiBlKSB7CisJCQkJCWxvZy53YXJuKGZvcm1hdChTc2hkVGV4dC5nZXQoKS5jYW5ub3RSZWFkUHVibGljS2V5LCBzKSwgZSk7CisJCQkJfQorCQkJCXJldHVybiBudWxsOworCQkJfSkuZmlsdGVyKE9iamVjdHM6Om5vbk51bGwpLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHJvdGVjdGVkIEl0ZXJhYmxlPEtleUFnZW50SWRlbnRpdHk+IGluaXRpYWxpemVBZ2VudElkZW50aXRpZXMoCisJCQkJQ2xpZW50U2Vzc2lvbiBzZXNzaW9uKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJaWYgKGFnZW50ID09IG51bGwpIHsKKwkJCQlyZXR1cm4gbnVsbDsKKwkJCX0KKwkJCWFnZW50S2V5cyA9IGFnZW50LmdldElkZW50aXRpZXMoKTsKKwkJCWlmIChob3N0Q29uZmlnICE9IG51bGwgJiYgaG9zdENvbmZpZy5pc0lkZW50aXRpZXNPbmx5KCkpIHsKKwkJCQlpZGVudGl0eUZpbGVzID0gZ2V0RXhwbGljaXRLZXlzKGhvc3RDb25maWcuZ2V0SWRlbnRpdGllcygpKTsKKwkJCX0KKwkJCXJldHVybiAoKSAtPiBuZXcgSXRlcmF0b3I8PigpIHsKKworCQkJCXByaXZhdGUgZmluYWwgSXRlcmF0b3I8PyBleHRlbmRzIE1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4+IGl0ZXIgPSBhZ2VudEtleXMKKwkJCQkJCS5pdGVyYXRvcigpOworCisJCQkJcHJpdmF0ZSBNYXAuRW50cnk8UHVibGljS2V5LCBTdHJpbmc+IG5leHQ7CiAKIAkJCQlAT3ZlcnJpZGUKIAkJCQlwdWJsaWMgYm9vbGVhbiBoYXNOZXh0KCkgewotCQkJCQlpZiAodmFsdWUgIT0gbnVsbCkgewotCQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJCX0KLQkJCQkJUHVibGljS2V5SWRlbnRpdHkgbmV4dCA9IG51bGw7Ci0JCQkJCXdoaWxlIChvcmlnaW5hbC5oYXNOZXh0KCkpIHsKLQkJCQkJCW5leHQgPSBvcmlnaW5hbC5uZXh0KCk7Ci0JCQkJCQlpZiAoIShuZXh0IGluc3RhbmNlb2YgS2V5QWdlbnRJZGVudGl0eSkpIHsKLQkJCQkJCQl2YWx1ZSA9IG5leHQ7CisJCQkJCXdoaWxlIChuZXh0ID09IG51bGwgJiYgaXRlci5oYXNOZXh0KCkpIHsKKwkJCQkJCU1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4gdmFsID0gaXRlci5uZXh0KCk7CisJCQkJCQlQdWJsaWNLZXkgcGsgPSB2YWwuZ2V0S2V5KCk7CisJCQkJCQkvLyBUaGlzIGNoZWNrcyBhZ2FpbnN0IGFsbCBleHBsaWNpdCBrZXlzIGZvciBhbnkgYWdlbnQKKwkJCQkJCS8vIGtleSwgYnV0IHNpbmNlIGlkZW50aXR5RmlsZXMuc2l6ZSgpIGlzIHR5cGljYWxseSAxLAorCQkJCQkJLy8gaXQgc2hvdWxkIGJlIGZpbmUuCisJCQkJCQlpZiAoaWRlbnRpdHlGaWxlcyA9PSBudWxsIHx8IGlkZW50aXR5RmlsZXMuc3RyZWFtKCkKKwkJCQkJCQkJLmFueU1hdGNoKGsgLT4gS2V5VXRpbHMuY29tcGFyZUtleXMoaywgcGspKSkgeworCQkJCQkJCW5leHQgPSB2YWw7CiAJCQkJCQkJcmV0dXJuIHRydWU7CiAJCQkJCQl9CisJCQkJCQlpZiAobG9nLmlzVHJhY2VFbmFibGVkKCkpIHsKKwkJCQkJCQlsb2cudHJhY2UoCisJCQkJCQkJCQkiSWdub3JpbmcgU1NIIGFnZW50IHt9IGtleSBub3QgaW4gZXhwbGljaXQgSWRlbnRpdHlGaWxlIGluIFNTSCBjb25maWc6IHt9IiwgLy8kTk9OLU5MUy0xJAorCQkJCQkJCQkJS2V5VXRpbHMuZ2V0S2V5VHlwZShwayksCisJCQkJCQkJCQlLZXlVdGlscy5nZXRGaW5nZXJQcmludChwaykpOworCQkJCQkJfQogCQkJCQl9Ci0JCQkJCXJldHVybiBmYWxzZTsKKwkJCQkJcmV0dXJuIG5leHQgIT0gbnVsbDsKIAkJCQl9CiAKIAkJCQlAT3ZlcnJpZGUKLQkJCQlwdWJsaWMgUHVibGljS2V5SWRlbnRpdHkgbmV4dCgpIHsKLQkJCQkJaWYgKGhhc05leHQoKSkgewotCQkJCQkJUHVibGljS2V5SWRlbnRpdHkgcmVzdWx0ID0gdmFsdWU7Ci0JCQkJCQl2YWx1ZSA9IG51bGw7Ci0JCQkJCQlyZXR1cm4gcmVzdWx0OworCQkJCXB1YmxpYyBLZXlBZ2VudElkZW50aXR5IG5leHQoKSB7CisJCQkJCWlmICghaGFzTmV4dCgpKSB7CisJCQkJCQl0aHJvdyBuZXcgTm9TdWNoRWxlbWVudEV4Y2VwdGlvbigpOwogCQkJCQl9Ci0JCQkJCXRocm93IG5ldyBOb1N1Y2hFbGVtZW50RXhjZXB0aW9uKCk7CisJCQkJCUtleUFnZW50SWRlbnRpdHkgcmVzdWx0ID0gbmV3IEtleUFnZW50SWRlbnRpdHkoYWdlbnQsCisJCQkJCQkJbmV4dC5nZXRLZXkoKSwgbmV4dC5nZXRWYWx1ZSgpKTsKKwkJCQkJbmV4dCA9IG51bGw7CisJCQkJCXJldHVybiByZXN1bHQ7CiAJCQkJfQogCQkJfTsKIAkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL1NzaGRUZXh0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YQppbmRleCAwMGVlNjJkLi4xOWFkODVjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvU3NoZFRleHQuamF2YQpAQCAtMzAsNiArMzAsNyBAQCBwdWJsaWMgc3RhdGljIFNzaGRUZXh0IGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGF1dGhlbnRpY2F0aW9uQ2FuY2VsZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBhdXRoZW50aWNhdGlvbk9uQ2xvc2VkU2Vzc2lvbjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGNsb3NlTGlzdGVuZXJGYWlsZWQ7CisJLyoqKi8gcHVibGljIFN0cmluZyBjYW5ub3RSZWFkUHVibGljS2V5OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgY29uZmlnSW52YWxpZFBhdGg7CiAJLyoqKi8gcHVibGljIFN0cmluZyBjb25maWdJbnZhbGlkUGF0dGVybjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGNvbmZpZ0ludmFsaWRQb3NpdGl2ZTsKQEAgLTk4LDYgKzk5LDggQEAgcHVibGljIHN0YXRpYyBTc2hkVGV4dCBnZXQoKSB7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwcm94eVNvY2tzVW5leHBlY3RlZE1lc3NhZ2U7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwcm94eVNvY2tzVW5leHBlY3RlZFZlcnNpb247CiAJLyoqKi8gcHVibGljIFN0cmluZyBwcm94eVNvY2tzVXNlcm5hbWVUb29Mb25nOworCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVia2V5QXV0aEFkZEtleVRvQWdlbnRFcnJvcjsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHB1YmtleUF1dGhBZGRLZXlUb0FnZW50UXVlc3Rpb247CiAJLyoqKi8gcHVibGljIFN0cmluZyBwdWJrZXlBdXRoV3JvbmdDb21tYW5kOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVia2V5QXV0aFdyb25nS2V5OwogCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVia2V5QXV0aFdyb25nU2lnbmF0dXJlQWxnb3JpdGhtOwpAQCAtMTA2LDkgKzEwOSwxMyBAQCBwdWJsaWMgc3RhdGljIFNzaGRUZXh0IGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNlcnZlcklkV2l0aE51bDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNlc3Npb25DbG9zZUZhaWxlZDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNlc3Npb25XaXRob3V0VXNlcm5hbWU7CisJLyoqKi8gcHVibGljIFN0cmluZyBzc2hBZ2VudEVkRFNBRm9ybWF0RXJyb3I7CisJLyoqKi8gcHVibGljIFN0cmluZyBzc2hBZ2VudFBheWxvYWRMZW5ndGhFcnJvcjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNzaEFnZW50UmVwbHlMZW5ndGhFcnJvcjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNzaEFnZW50UmVwbHlVbmV4cGVjdGVkOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgc3NoQWdlbnRTaG9ydFJlYWRCdWZmZXI7CisJLyoqKi8gcHVibGljIFN0cmluZyBzc2hBZ2VudFVua25vd25LZXk7CisJLyoqKi8gcHVibGljIFN0cmluZyBzc2hBZ2VudFdyb25nS2V5TGVuZ3RoOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgc3NoQWdlbnRXcm9uZ051bWJlck9mS2V5czsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHNzaENsb3NpbmdEb3duOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgc3NoQ29tbWFuZFRpbWVvdXQ7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvSkdpdFNzaEFnZW50RmFjdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L0pHaXRTc2hBZ2VudEZhY3RvcnkuamF2YQppbmRleCAxZWQyYWI5Li5hMGZmZDU0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvSkdpdFNzaEFnZW50RmFjdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoZC9hZ2VudC9KR2l0U3NoQWdlbnRGYWN0b3J5LmphdmEKQEAgLTE3LDEwICsxNywxNCBAQAogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5hZ2VudC5Tc2hBZ2VudDsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuYWdlbnQuU3NoQWdlbnRGYWN0b3J5OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5hZ2VudC5Tc2hBZ2VudFNlcnZlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY2xpZW50LmNvbmZpZy5ob3N0cy5Ib3N0Q29uZmlnRW50cnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5GYWN0b3J5TWFuYWdlcjsKIGltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLmNoYW5uZWwuQ2hhbm5lbEZhY3Rvcnk7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zZXNzaW9uLkNvbm5lY3Rpb25TZXJ2aWNlOworaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uc2Vzc2lvbi5TZXNzaW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTm9uTnVsbDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLkpHaXRDbGllbnRTZXNzaW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlNzaENvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5zc2hkLmFnZW50LkNvbm5lY3RvckZhY3Rvcnk7CiAKIC8qKgpAQCAtNDksMTggKzUzLDI0IEBAIHB1YmxpYyBKR2l0U3NoQWdlbnRGYWN0b3J5KEBOb25OdWxsIENvbm5lY3RvckZhY3RvcnkgZmFjdG9yeSwKIAlAT3ZlcnJpZGUKIAlwdWJsaWMgTGlzdDxDaGFubmVsRmFjdG9yeT4gZ2V0Q2hhbm5lbEZvcndhcmRpbmdGYWN0b3JpZXMoCiAJCQlGYWN0b3J5TWFuYWdlciBtYW5hZ2VyKSB7Ci0JCS8vIE5vIGFnZW50IGZvcndhcmRpbmcgc3VwcG9ydGVkIHlldC4KKwkJLy8gTm8gYWdlbnQgZm9yd2FyZGluZyBzdXBwb3J0ZWQuCiAJCXJldHVybiBDb2xsZWN0aW9ucy5lbXB0eUxpc3QoKTsKIAl9CiAKIAlAT3ZlcnJpZGUKLQlwdWJsaWMgU3NoQWdlbnQgY3JlYXRlQ2xpZW50KEZhY3RvcnlNYW5hZ2VyIG1hbmFnZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHNzaGQgMi44LjAgd2lsbCBwYXNzIHVzIHRoZSBzZXNzaW9uIGhlcmUuIEF0IHRoYXQgcG9pbnQsIHdlIGNhbiBnZXQKLQkJLy8gdGhlIEhvc3RDb25maWdFbnRyeSBhbmQgZXh0cmFjdCBhbmQgaGFuZGxlIHRoZSBJZGVudGl0eUFnZW50IHNldHRpbmcuCi0JCS8vIEZvciBub3csIHBhc3MgbnVsbCB0byBsZXQgdGhlIENvbm5lY3RvckZhY3RvcnkgZG8gaXRzIGRlZmF1bHQKLQkJLy8gYmVoYXZpb3IgKFBhZ2VhbnQgb24gV2luZG93cywgU1NIX0FVVEhfU09DSyBvbiBVbml4ZXMgd2l0aCB0aGUKLQkJLy8gamdpdC1idWlsdGluIGZhY3RvcnkpLgotCQlyZXR1cm4gbmV3IFNzaEFnZW50Q2xpZW50KGZhY3RvcnkuY3JlYXRlKG51bGwsIGhvbWVEaXIpKTsKKwlwdWJsaWMgU3NoQWdlbnQgY3JlYXRlQ2xpZW50KFNlc3Npb24gc2Vzc2lvbiwgRmFjdG9yeU1hbmFnZXIgbWFuYWdlcikKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCVN0cmluZyBpZGVudGl0eUFnZW50ID0gbnVsbDsKKwkJaWYgKHNlc3Npb24gaW5zdGFuY2VvZiBKR2l0Q2xpZW50U2Vzc2lvbikgeworCQkJSG9zdENvbmZpZ0VudHJ5IGhvc3RDb25maWcgPSAoKEpHaXRDbGllbnRTZXNzaW9uKSBzZXNzaW9uKQorCQkJCQkuZ2V0SG9zdENvbmZpZ0VudHJ5KCk7CisJCQlpZGVudGl0eUFnZW50ID0gaG9zdENvbmZpZy5nZXRQcm9wZXJ0eShTc2hDb25zdGFudHMuSURFTlRJVFlfQUdFTlQsCisJCQkJCW51bGwpOworCQl9CisJCWlmIChTc2hDb25zdGFudHMuTk9ORS5lcXVhbHMoaWRlbnRpdHlBZ2VudCkpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCXJldHVybiBuZXcgU3NoQWdlbnRDbGllbnQoZmFjdG9yeS5jcmVhdGUoaWRlbnRpdHlBZ2VudCwgaG9tZURpcikpOwogCX0KIAogCUBPdmVycmlkZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlL3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2hkL2FnZW50L1NzaEFnZW50Q2xpZW50LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvU3NoQWdlbnRDbGllbnQuamF2YQppbmRleCAwODQ4M2U0Li5jYmNiNGQyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvU3NoQWdlbnRDbGllbnQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaGQvYWdlbnQvU3NoQWdlbnRDbGllbnQuamF2YQpAQCAtMTEsMTAgKzExLDEyIEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEuc2VjdXJpdHkuS2V5UGFpcjsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5LlByaXZhdGVLZXk7CiBpbXBvcnQgamF2YS5zZWN1cml0eS5QdWJsaWNLZXk7CiBpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkFic3RyYWN0TWFwOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKQEAgLTIyLDIxICsyNCwyNyBAQAogCiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmFnZW50LlNzaEFnZW50OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5hZ2VudC5Tc2hBZ2VudENvbnN0YW50czsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuYWdlbnQuU3NoQWdlbnRLZXlDb25zdHJhaW50OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uU3NoRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24uY29uZmlnLmtleXMuS2V5VXRpbHM7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5rZXlwcm92aWRlci5LZXlQYWlyUHJvdmlkZXI7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi5zZXNzaW9uLlNlc3Npb25Db250ZXh0OwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5idWZmZXIuQnVmZmVyOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5idWZmZXIuQnVmZmVyRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5hcGFjaGUuc3NoZC5jb21tb24udXRpbC5idWZmZXIuQnVmZmVyVXRpbHM7CiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlci5CeXRlQXJyYXlCdWZmZXI7CitpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLmNvbW1vbi51dGlsLmJ1ZmZlci5rZXlzLkJ1ZmZlclB1YmxpY0tleVBhcnNlcjsKK2ltcG9ydCBvcmcuYXBhY2hlLnNzaGQuY29tbW9uLnV0aWwuaW8uZGVyLkRFUlBhcnNlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2hkLlNzaGRUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnNzaGQuYWdlbnQuQ29ubmVjdG9yOwogaW1wb3J0IG9yZy5zbGY0ai5Mb2dnZXI7CiBpbXBvcnQgb3JnLnNsZjRqLkxvZ2dlckZhY3Rvcnk7CiAKIC8qKgotICogQSBjbGllbnQgZm9yIGFuIFNTSDIgYWdlbnQuIFRoaXMgY2xpZW50IHN1cHBvcnRzIG9ubHkgcXVlcnlpbmcgaWRlbnRpdGllcyBhbmQKLSAqIHNpZ25hdHVyZSByZXF1ZXN0cy4KKyAqIEEgY2xpZW50IGZvciBhbiBTU0gyIGFnZW50LiBUaGlzIGNsaWVudCBzdXBwb3J0cyBxdWVyeWluZyBpZGVudGl0aWVzLAorICogc2lnbmF0dXJlIHJlcXVlc3RzLCBhbmQgYWRkaW5nIGtleXMgdG8gYW4gYWdlbnQgKHdpdGggb3Igd2l0aG91dAorICogY29uc3RyYWludHMpLiBSZW1vdmluZyBrZXlzIGlzIG5vdCBzdXBwb3J0ZWQsIGFuZCB0aGUgb2xkZXIgU1NIMSBwcm90b2NvbCBpcworICogbm90IHN1cHBvcnRlZC4KICAqCiAgKiBAc2VlIDxhIGhyZWY9Imh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1taWxsZXItc3NoLWFnZW50LTA0Ij5TU0gKICAqICAgICAgQWdlbnQgUHJvdG9jb2wsIFJGQyBkcmFmdDwvYT4KQEAgLTcyLDExICs4MCwxOCBAQCBwcml2YXRlIGJvb2xlYW4gb3Blbihib29sZWFuIGRlYnVnZ2luZykgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJCX0KIAkJCXJldHVybiBmYWxzZTsKIAkJfQotCQlib29sZWFuIGNvbm5lY3RlZCA9IGNvbm5lY3RvciAhPSBudWxsICYmIGNvbm5lY3Rvci5jb25uZWN0KCk7Ci0JCWlmICghY29ubmVjdGVkKSB7Ci0JCQlpZiAoZGVidWdnaW5nKSB7Ci0JCQkJTE9HLmRlYnVnKCJObyBTU0ggYWdlbnQgKFNTSF9BVVRIX1NPQ0sgbm90IHNldCkiKTsgLy8kTk9OLU5MUy0xJAorCQlib29sZWFuIGNvbm5lY3RlZDsKKwkJdHJ5IHsKKwkJCWNvbm5lY3RlZCA9IGNvbm5lY3RvciAhPSBudWxsICYmIGNvbm5lY3Rvci5jb25uZWN0KCk7CisJCQlpZiAoIWNvbm5lY3RlZCAmJiBkZWJ1Z2dpbmcpIHsKKwkJCQlMT0cuZGVidWcoIk5vIFNTSCBhZ2VudCIpOyAvLyROT04tTkxTLTEkCiAJCQl9CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCS8vIEFnZW50IG5vdCBydW5uaW5nPworCQkJaWYgKGRlYnVnZ2luZykgeworCQkJCUxPRy5kZWJ1ZygiTm8gU1NIIGFnZW50IiwgZSk7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJCXRocm93IGU7CiAJCX0KIAkJcmV0dXJuIGNvbm5lY3RlZDsKIAl9CkBAIC0xMjcsMTQgKzE0MiwxNyBAQCBwdWJsaWMgSXRlcmFibGU8PyBleHRlbmRzIE1hcC5FbnRyeTxQdWJsaWNLZXksIFN0cmluZz4+IGdldElkZW50aXRpZXMoKQogCQkJTGlzdDxNYXAuRW50cnk8UHVibGljS2V5LCBTdHJpbmc+PiBrZXlzID0gbmV3IEFycmF5TGlzdDw+KAogCQkJCQludW1iZXJPZktleXMpOwogCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZktleXM7IGkrKykgewotCQkJCVB1YmxpY0tleSBrZXkgPSByZXBseS5nZXRQdWJsaWNLZXkoKTsKKwkJCQlQdWJsaWNLZXkga2V5ID0gcmVhZEtleShyZXBseSk7CiAJCQkJU3RyaW5nIGNvbW1lbnQgPSByZXBseS5nZXRTdHJpbmcoKTsKLQkJCQlpZiAodHJhY2luZykgewotCQkJCQlMT0cudHJhY2UoIkdvdCBTU0ggYWdlbnQge30ga2V5OiB7fSB7fSIsIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQlLZXlVdGlscy5nZXRLZXlUeXBlKGtleSksCi0JCQkJCQkJS2V5VXRpbHMuZ2V0RmluZ2VyUHJpbnQoa2V5KSwgY29tbWVudCk7CisJCQkJaWYgKGtleSAhPSBudWxsKSB7CisJCQkJCWlmICh0cmFjaW5nKSB7CisJCQkJCQlMT0cudHJhY2UoIkdvdCBTU0ggYWdlbnQge30ga2V5OiB7fSB7fSIsIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQkJS2V5VXRpbHMuZ2V0S2V5VHlwZShrZXkpLAorCQkJCQkJCQlLZXlVdGlscy5nZXRGaW5nZXJQcmludChrZXkpLCBjb21tZW50KTsKKwkJCQkJfQorCQkJCQlrZXlzLmFkZChuZXcgQWJzdHJhY3RNYXAuU2ltcGxlSW1tdXRhYmxlRW50cnk8PihrZXksCisJCQkJCQkJY29tbWVudCkpOwogCQkJCX0KLQkJCQlrZXlzLmFkZChuZXcgQWJzdHJhY3RNYXAuU2ltcGxlSW1tdXRhYmxlRW50cnk8PihrZXksIGNvbW1lbnQpKTsKIAkJCX0KIAkJCXJldHVybiBrZXlzOwogCQl9IGNhdGNoIChCdWZmZXJFeGNlcHRpb24gZSkgewpAQCAtMjE2LDYgKzIzNCwyMjIgQEAgcHVibGljIEl0ZXJhYmxlPD8gZXh0ZW5kcyBNYXAuRW50cnk8UHVibGljS2V5LCBTdHJpbmc+PiBnZXRJZGVudGl0aWVzKCkKIAkJfQogCX0KIAorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIGFkZElkZW50aXR5KEtleVBhaXIga2V5LCBTdHJpbmcgY29tbWVudCwKKwkJCVNzaEFnZW50S2V5Q29uc3RyYWludC4uLiBjb25zdHJhaW50cykgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJYm9vbGVhbiBkZWJ1Z2dpbmcgPSBMT0cuaXNEZWJ1Z0VuYWJsZWQoKTsKKwkJaWYgKCFvcGVuKGRlYnVnZ2luZykpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8vIE5laXRoZXIgUGFnZWFudCAwLjc2IG5vciBXaW4zMi1PcGVuU1NIIDguNiBzdXBwb3J0IGNvbW1hbmQKKwkJLy8gU1NIMl9BR0VOVENfQUREX0lEX0NPTlNUUkFJTkVELiBBZGRpbmcgYSBrZXkgd2l0aCBjb25zdHJhaW50cyB3aWxsCisJCS8vIGZhaWwuIFRoZSBvbmx5IHdvcmstYXJvdW5kIGZvciB1c2VycyBpcyBub3QgdG8gdXNlICJjb25maXJtIiBvciAidGltZQorCQkvLyBzcGVjIiB3aXRoIEFkZEtleXNUb0FnZW50LCBhbmQgbm90IHRvIHVzZSBzay0qIGtleXMuCisJCS8vCisJCS8vIFdpdGggYSB0cnVlIE9wZW5TU0ggU1NIIGFnZW50LCBrZXkgY29uc3RyYWludHMgd29yay4KKwkJYnl0ZSBjbWQgPSAoY29uc3RyYWludHMgIT0gbnVsbCAmJiBjb25zdHJhaW50cy5sZW5ndGggPiAwKQorCQkJCT8gU3NoQWdlbnRDb25zdGFudHMuU1NIMl9BR0VOVENfQUREX0lEX0NPTlNUUkFJTkVECisJCQkJOiBTc2hBZ2VudENvbnN0YW50cy5TU0gyX0FHRU5UQ19BRERfSURFTlRJVFk7CisJCWJ5dGVbXSBtZXNzYWdlID0gbnVsbDsKKwkJQnl0ZUFycmF5QnVmZmVyIG1zZyA9IG5ldyBCeXRlQXJyYXlCdWZmZXIoKTsKKwkJdHJ5IHsKKwkJCW1zZy5wdXRJbnQoMCk7CisJCQltc2cucHV0Qnl0ZShjbWQpOworCQkJU3RyaW5nIGtleVR5cGUgPSBLZXlVdGlscy5nZXRLZXlUeXBlKGtleSk7CisJCQlpZiAoS2V5UGFpclByb3ZpZGVyLlNTSF9FRDI1NTE5LmVxdWFscyhrZXlUeXBlKSkgeworCQkJCS8vIEFwYWNoZSBNSU5BIHNzaGQgMi44LjAgbGFja3Mgc3VwcG9ydCBmb3Igd3JpdGluZyBlZDI1NTE5CisJCQkJLy8gcHJpdmF0ZSBrZXlzIHRvIGEgYnVmZmVyLgorCQkJCXB1dEVkMjU1MTlLZXkobXNnLCBrZXkpOworCQkJfSBlbHNlIHsKKwkJCQltc2cucHV0S2V5UGFpcihrZXkpOworCQkJfQorCQkJbXNnLnB1dFN0cmluZyhjb21tZW50ID09IG51bGwgPyAiIiA6IGNvbW1lbnQpOyAvLyROT04tTkxTLTEkCisJCQlpZiAoY29uc3RyYWludHMgIT0gbnVsbCkgeworCQkJCWZvciAoU3NoQWdlbnRLZXlDb25zdHJhaW50IGNvbnN0cmFpbnQgOiBjb25zdHJhaW50cykgeworCQkJCQljb25zdHJhaW50LnB1dChtc2cpOworCQkJCX0KKwkJCX0KKwkJCWlmIChkZWJ1Z2dpbmcpIHsKKwkJCQlMT0cuZGVidWcoCisJCQkJCQkiYWRkSWRlbnRpdHk6IGFkZGluZyB7fSBrZXkge30gdG8gU1NIIGFnZW50OyBjb21tZW50IHt9IiwgLy8kTk9OLU5MUy0xJAorCQkJCQkJa2V5VHlwZSwgS2V5VXRpbHMuZ2V0RmluZ2VyUHJpbnQoa2V5LmdldFB1YmxpYygpKSwKKwkJCQkJCWNvbW1lbnQpOworCQkJfQorCQkJbWVzc2FnZSA9IG1zZy5nZXRDb21wYWN0RGF0YSgpOworCQl9IGZpbmFsbHkgeworCQkJLy8gVGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIHByaXZhdGUga2V5IGRhdGEsIHNvIGNsZWFyIGludGVybWVkaWFyeQorCQkJLy8gZGF0YSBBU0FQLgorCQkJbXNnLmNsZWFyKCk7CisJCX0KKwkJQnVmZmVyIHJlcGx5OworCQl0cnkgeworCQkJcmVwbHkgPSBycGMoY21kLCBtZXNzYWdlKTsKKwkJfSBmaW5hbGx5IHsKKwkJCUFycmF5cy5maWxsKG1lc3NhZ2UsIChieXRlKSAwKTsKKwkJfQorCQlpbnQgcmVwbHlMZW5ndGggPSByZXBseS5hdmFpbGFibGUoKTsKKwkJaWYgKHJlcGx5TGVuZ3RoICE9IDEpIHsKKwkJCXRocm93IG5ldyBTc2hFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCVNzaGRUZXh0LmdldCgpLnNzaEFnZW50UmVwbHlVbmV4cGVjdGVkLAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCQlTc2hkVGV4dC5nZXQoKS5zc2hBZ2VudFBheWxvYWRMZW5ndGhFcnJvciwKKwkJCQkJCQlJbnRlZ2VyLnZhbHVlT2YoMSksIEludGVnZXIudmFsdWVPZihyZXBseUxlbmd0aCkpKSk7CisKKwkJfQorCQljbWQgPSByZXBseS5nZXRCeXRlKCk7CisJCWlmIChjbWQgIT0gU3NoQWdlbnRDb25zdGFudHMuU1NIX0FHRU5UX1NVQ0NFU1MpIHsKKwkJCXRocm93IG5ldyBTc2hFeGNlcHRpb24oCisJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KFNzaGRUZXh0LmdldCgpLnNzaEFnZW50UmVwbHlVbmV4cGVjdGVkLAorCQkJCQkJCVNzaEFnZW50Q29uc3RhbnRzLmdldENvbW1hbmRNZXNzYWdlTmFtZShjbWQpKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBXcml0ZXMgYW4gZWQyNTUxOSB7QGxpbmsgS2V5UGFpcn0gdG8gYSB7QGxpbmsgQnVmZmVyfS4gT3BlblNTSCBzcGVjaWZpZXMKKwkgKiB0aGF0IGl0IGV4cGVjdHMgdGhlIDMyIHB1YmxpYyBrZXkgYnl0ZXMsIGZvbGxvd2VkIGJ5IDY0IGJ5dGVzIGZvcm1lZCBieQorCSAqIGNvbmNhdGVuYXRpbmcgdGhlIDMyIHByaXZhdGUga2V5IGJ5dGVzIHdpdGggdGhlIDMyIHB1YmxpYyBrZXkgYnl0ZXMuCisJICoKKwkgKiBAcGFyYW0gbXNnCisJICogICAgICAgICAgICB7QGxpbmsgQnVmZmVyfSB0byB3cml0ZSB0bworCSAqIEBwYXJhbSBrZXkKKwkgKiAgICAgICAgICAgIHtAbGluayBLZXlQYWlyfSB0byB3cml0ZQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgcHJpdmF0ZSBrZXkgY2Fubm90IGJlIHdyaXR0ZW4KKwkgKi8KKwlwcml2YXRlIHN0YXRpYyB2b2lkIHB1dEVkMjU1MTlLZXkoQnVmZmVyIG1zZywgS2V5UGFpciBrZXkpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlCdWZmZXIgdG1wID0gbmV3IEJ5dGVBcnJheUJ1ZmZlcigzNik7CisJCXRtcC5wdXRSYXdQdWJsaWNLZXlCeXRlcyhrZXkuZ2V0UHVibGljKCkpOworCQlieXRlW10gcHVibGljQnl0ZXMgPSB0bXAuZ2V0Qnl0ZXMoKTsKKwkJbXNnLnB1dFN0cmluZyhLZXlQYWlyUHJvdmlkZXIuU1NIX0VEMjU1MTkpOworCQltc2cucHV0Qnl0ZXMocHVibGljQnl0ZXMpOworCQkvLyBOZXh0IGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSAzMiBieXRlIHByaXZhdGUga2V5IHZhbHVlIHdpdGggdGhlCisJCS8vIDMyIGJ5dGVzIG9mIHRoZSBwdWJsaWMga2V5LgorCQlQcml2YXRlS2V5IHBrID0ga2V5LmdldFByaXZhdGUoKTsKKwkJU3RyaW5nIGZvcm1hdCA9IHBrLmdldEZvcm1hdCgpOworCQlpZiAoISJQS0NTIzgiLmVxdWFsc0lnbm9yZUNhc2UoZm9ybWF0KSkgeyAvLyROT04tTkxTLTEkCisJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oTWVzc2FnZUZvcm1hdAorCQkJCQkuZm9ybWF0KFNzaGRUZXh0LmdldCgpLnNzaEFnZW50RWREU0FGb3JtYXRFcnJvciwgZm9ybWF0KSk7CisJCX0KKwkJYnl0ZVtdIHByaXZhdGVCeXRlcyA9IG51bGw7CisJCWJ5dGVbXSBlbmNvZGVkID0gcGsuZ2V0RW5jb2RlZCgpOworCQl0cnkgeworCQkJcHJpdmF0ZUJ5dGVzID0gYXNuMVBhcnNlKGVuY29kZWQsIDMyKTsKKwkJCWJ5dGVbXSBjb21iaW5lZCA9IEFycmF5cy5jb3B5T2YocHJpdmF0ZUJ5dGVzLCA2NCk7CisJCQlBcnJheXMuZmlsbChwcml2YXRlQnl0ZXMsIChieXRlKSAwKTsKKwkJCXByaXZhdGVCeXRlcyA9IGNvbWJpbmVkOworCQkJU3lzdGVtLmFycmF5Y29weShwdWJsaWNCeXRlcywgMCwgcHJpdmF0ZUJ5dGVzLCAzMiwgMzIpOworCQkJbXNnLnB1dEJ5dGVzKHByaXZhdGVCeXRlcyk7CisJCX0gZmluYWxseSB7CisJCQlpZiAocHJpdmF0ZUJ5dGVzICE9IG51bGwpIHsKKwkJCQlBcnJheXMuZmlsbChwcml2YXRlQnl0ZXMsIChieXRlKSAwKTsKKwkJCX0KKwkJCUFycmF5cy5maWxsKGVuY29kZWQsIChieXRlKSAwKTsKKwkJfQorCX0KKworCS8qKgorCSAqIEV4dHJhY3RzIHRoZSBwcml2YXRlIGtleSBieXRlcyBmcm9tIGFuIGVuY29kZWQgZWQyNTUxOSBwcml2YXRlIGtleSBieQorCSAqIHBhcnNpbmcgdGhlIGJ5dGVzIGFzIEFTTi4xIGFjY29yZGluZyB0byBSRkMgNTk1OCAoUEtDUyAjOCBlbmNvZGluZyk6CisJICoKKwkgKiA8cHJlPgorCSAqIE9uZUFzeW1tZXRyaWNLZXkgOjo9IFNFUVVFTkNFIHsKKwkgKiAgIHZlcnNpb24gVmVyc2lvbiwKKwkgKiAgIHByaXZhdGVLZXlBbGdvcml0aG0gUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIsCisJICogICBwcml2YXRlS2V5IFByaXZhdGVLZXksCisJICogICAuLi4KKwkgKiB9CisJICoKKwkgKiBWZXJzaW9uIDo6PSBJTlRFR0VSCisJICogUHJpdmF0ZUtleUFsZ29yaXRobUlkZW50aWZpZXIgOjo9IEFsZ29yaXRobUlkZW50aWZpZXIKKwkgKiBQcml2YXRlS2V5IDo6PSBPQ1RFVCBTVFJJTkcKKwkgKgorCSAqIEFsZ29yaXRobUlkZW50aWZpZXIgIDo6PSAgU0VRVUVOQ0UgIHsKKwkgKiAgIGFsZ29yaXRobSAgIE9CSkVDVCBJREVOVElGSUVSLAorCSAqICAgcGFyYW1ldGVycyAgQU5ZIERFRklORUQgQlkgYWxnb3JpdGhtIE9QVElPTkFMCisJICogfQorCSAqIDwvcHJlPgorCSAqIDxwPgorCSAqIGFuZCBSRkMgODQxMDogIi4uLiB3aGVuIGVuY29kaW5nIGEgT25lQXN5bW1ldHJpY0tleSBvYmplY3QsIHRoZSBwcml2YXRlCisJICoga2V5IGlzIHdyYXBwZWQgaW4gYSBDdXJ2ZVByaXZhdGVLZXkgb2JqZWN0IGFuZCB3cmFwcGVkIGJ5IHRoZSBPQ1RFVAorCSAqIFNUUklORyBvZiB0aGUgJ3ByaXZhdGVLZXknIGZpZWxkLiIKKwkgKiA8L3A+CisJICoKKwkgKiA8cHJlPgorCSAqIEN1cnZlUHJpdmF0ZUtleSA6Oj0gT0NURVQgU1RSSU5HCisJICogPC9wcmU+CisJICoKKwkgKiBAcGFyYW0gZW5jb2RlZAorCSAqICAgICAgICAgICAgZW5jb2RlZCBwcml2YXRlIGtleSB0byBleHRyYWN0IHRoZSBwcml2YXRlIGtleSBieXRlcyBmcm9tCisJICogQHBhcmFtIG4KKwkgKiAgICAgICAgICAgIG51bWJlciBvZiBieXRlcyBleHBlY3RlZAorCSAqIEByZXR1cm4gdGhlIGV4dHJhY3RlZCBwcml2YXRlIGtleSBieXRlczsgb2YgbGVuZ3RoIHtAY29kZSBufQorCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB0aGUgcHJpdmF0ZSBrZXkgY2Fubm90IGJlIGV4dHJhY3RlZAorCSAqIEBzZWUgPGEgaHJlZj0iaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzU5NTgiPlJGQyA1OTU4PC9hPgorCSAqIEBzZWUgPGEgaHJlZj0iaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzg0MTAiPlJGQyA4NDEwPC9hPgorCSAqLworCXByaXZhdGUgc3RhdGljIGJ5dGVbXSBhc24xUGFyc2UoYnl0ZVtdIGVuY29kZWQsIGludCBuKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlieXRlW10gcHJpdmF0ZUtleSA9IG51bGw7CisJCXRyeSAoREVSUGFyc2VyIGJ5dGVQYXJzZXIgPSBuZXcgREVSUGFyc2VyKGVuY29kZWQpOworCQkJCURFUlBhcnNlciBvbmVBc3ltbWV0cmljS2V5ID0gYnl0ZVBhcnNlci5yZWFkT2JqZWN0KCkKKwkJCQkJCS5jcmVhdGVQYXJzZXIoKSkgeworCQkJb25lQXN5bW1ldHJpY0tleS5yZWFkT2JqZWN0KCk7IC8vIHNraXAgdmVyc2lvbgorCQkJb25lQXN5bW1ldHJpY0tleS5yZWFkT2JqZWN0KCk7IC8vIHNraXAgYWxnb3JpdGhtIGlkZW50aWZpZXIKKwkJCXByaXZhdGVLZXkgPSBvbmVBc3ltbWV0cmljS2V5LnJlYWRPYmplY3QoKS5nZXRWYWx1ZSgpOworCQkJLy8gVGhlIGxhc3QgbiBieXRlcyBvZiB0aGlzIG11c3QgYmUgdGhlIHByaXZhdGUga2V5IGJ5dGVzCisJCQlyZXR1cm4gQXJyYXlzLmNvcHlPZlJhbmdlKHByaXZhdGVLZXksCisJCQkJCXByaXZhdGVLZXkubGVuZ3RoIC0gbiwgcHJpdmF0ZUtleS5sZW5ndGgpOworCQl9IGZpbmFsbHkgeworCQkJaWYgKHByaXZhdGVLZXkgIT0gbnVsbCkgeworCQkJCUFycmF5cy5maWxsKHByaXZhdGVLZXksIChieXRlKSAwKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIEEgc2FmZSB2ZXJzaW9uIG9mIHtAbGluayBCdWZmZXIjZ2V0UHVibGljS2V5KCl9LiBVcG9uIHJldHVybiB0aGUKKwkgKiBidWZmZXJzJ3MgcmVhZCBwb3NpdGlvbiBpcyBhbHdheXMgYWZ0ZXIgdGhlIGtleSBibG9iOyBhbnkgZXhjZXB0aW9ucworCSAqIHRocm93biBieSB0cnlpbmcgdG8gcmVhZCB0aGUga2V5IGFyZSBsb2dnZWQgYW5kIDxlbT5ub3Q8L2VtPiBwcm9wYWdhdGVkLgorCSAqIDxwPgorCSAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgYW4gU1NIIGFnZW50IG1pZ2h0IGNvbnRhaW4gYW5kIGRlbGl2ZXIga2V5cyB0aGF0CisJICogd2UgY2Fubm90IGhhbmRsZSAoZm9yIGluc3RhbmNlIGVkNDQ4IGtleXMpLgorCSAqIDwvcD4KKwkgKgorCSAqIEBwYXJhbSBidWZmZXIKKwkgKiAgICAgICAgICAgIHRvIHJlYWQgdGhlIGtleSBmcm9tCisJICogQHJldHVybiB0aGUge0BsaW5rIFB1YmxpY0tleX0sIG9yIHtAY29kZSBudWxsfSBpZiB0aGUga2V5IGNvdWxkIG5vdCBiZQorCSAqICAgICAgICAgcmVhZAorCSAqIEB0aHJvd3MgQnVmZmVyRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlIGxlbmd0aCBvZiB0aGUga2V5IGJsb2IgY2Fubm90IGJlIHJlYWQgb3IgaXMgY29ycnVwdGVkCisJICovCisJcHJpdmF0ZSBzdGF0aWMgUHVibGljS2V5IHJlYWRLZXkoQnVmZmVyIGJ1ZmZlcikgdGhyb3dzIEJ1ZmZlckV4Y2VwdGlvbiB7CisJCWludCBlbmRPZkJ1ZmZlciA9IGJ1ZmZlci53cG9zKCk7CisJCWludCBrZXlMZW5ndGggPSBidWZmZXIuZ2V0SW50KCk7CisJCWludCBhZnRlcktleSA9IGJ1ZmZlci5ycG9zKCkgKyBrZXlMZW5ndGg7CisJCWlmIChrZXlMZW5ndGggPD0gMCB8fCBhZnRlcktleSA+IGVuZE9mQnVmZmVyKSB7CisJCQl0aHJvdyBuZXcgQnVmZmVyRXhjZXB0aW9uKAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdChTc2hkVGV4dC5nZXQoKS5zc2hBZ2VudFdyb25nS2V5TGVuZ3RoLAorCQkJCQkJCUludGVnZXIudG9TdHJpbmcoa2V5TGVuZ3RoKSwKKwkJCQkJCQlJbnRlZ2VyLnRvU3RyaW5nKGJ1ZmZlci5ycG9zKCkpLAorCQkJCQkJCUludGVnZXIudG9TdHJpbmcoZW5kT2ZCdWZmZXIpKSk7CisJCX0KKwkJLy8gTGltaXQgc3Vic2VxdWVudCByZWFkcyB0byB0aGUgcHVibGljIGtleSBibG9iCisJCWJ1ZmZlci53cG9zKGFmdGVyS2V5KTsKKwkJdHJ5IHsKKwkJCXJldHVybiBidWZmZXIuZ2V0UmF3UHVibGljS2V5KEJ1ZmZlclB1YmxpY0tleVBhcnNlci5ERUZBVUxUKTsKKwkJfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKwkJCUxPRy53YXJuKFNzaGRUZXh0LmdldCgpLnNzaEFnZW50VW5rbm93bktleSwgZSk7CisJCQlyZXR1cm4gbnVsbDsKKwkJfSBmaW5hbGx5IHsKKwkJCS8vIFJlc3RvcmUgcmVhbCBidWZmZXIgZW5kCisJCQlidWZmZXIud3BvcyhlbmRPZkJ1ZmZlcik7CisJCQkvLyBTZXQgdGhlIHJlYWQgcG9zaXRpb24gdG8gYWZ0ZXIgdGhpcyBrZXksIGV2ZW4gaWYgZmFpbGVkCisJCQlidWZmZXIucnBvcyhhZnRlcktleSk7CisJCX0KKwl9CisKIAlwcml2YXRlIEJ1ZmZlciBycGMoYnl0ZSBjb21tYW5kLCBieXRlW10gbWVzc2FnZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJcmV0dXJuIG5ldyBCeXRlQXJyYXlCdWZmZXIoY29ubmVjdG9yLnJwYyhjb21tYW5kLCBtZXNzYWdlKSk7CiAJfQpAQCAtMjMwLDExICs0NjQsNiBAQCBwdWJsaWMgYm9vbGVhbiBpc09wZW4oKSB7CiAJfQogCiAJQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgYWRkSWRlbnRpdHkoS2V5UGFpciBrZXksIFN0cmluZyBjb21tZW50KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKLQl9Ci0KLQlAT3ZlcnJpZGUKIAlwdWJsaWMgdm9pZCByZW1vdmVJZGVudGl0eShQdWJsaWNLZXkga2V5KSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oKTsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3NzaGQvU3NoZFNlc3Npb24uamF2YSBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9Tc2hkU2Vzc2lvbi5qYXZhCmluZGV4IGMyNzBiNDQuLmI3NDJmNWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9Tc2hkU2Vzc2lvbi5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvc3NoZC9Tc2hkU2Vzc2lvbi5qYXZhCkBAIC01MSw2ICs1MSw3IEBACiBpbXBvcnQgb3JnLmFwYWNoZS5zc2hkLnNmdHAuY29tbW9uLlNmdHBFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5Ob25OdWxsOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2guT3BlblNzaENvbmZpZ0ZpbGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoZC5KR2l0U3NoQ2xpZW50OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaGQuU3NoZFRleHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuRnRwQ2hhbm5lbDsKQEAgLTEzOCw3ICsxMzksMTEgQEAgcHJpdmF0ZSBDbGllbnRTZXNzaW9uIGNvbm5lY3QoVVJJaXNoIHRhcmdldCwgTGlzdDxVUklpc2g+IGp1bXBzLAogCQkJCQkJSkdpdFNzaENsaWVudC5MT0NBTF9GT1JXQVJEX0FERFJFU1MsCiAJCQkJCQlwb3J0Rm9yd2FyZC5nZXRCb3VuZEFkZHJlc3MoKSk7CiAJCQl9Ci0JCQlyZXN1bHRTZXNzaW9uID0gY29ubmVjdChob3N0Q29uZmlnLCBjb250ZXh0LCB0aW1lb3V0KTsKKwkJCWludCB0aW1lb3V0SW5TZWMgPSBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygKKwkJCQkJaG9zdENvbmZpZy5nZXRQcm9wZXJ0eShTc2hDb25zdGFudHMuQ09OTkVDVF9USU1FT1VUKSk7CisJCQlyZXN1bHRTZXNzaW9uID0gY29ubmVjdChob3N0Q29uZmlnLCBjb250ZXh0LAorCQkJCQl0aW1lb3V0SW5TZWMgPiAwID8gRHVyYXRpb24ub2ZTZWNvbmRzKHRpbWVvdXRJblNlYykKKwkJCQkJCQk6IHRpbWVvdXQpOwogCQkJaWYgKHByb3h5U2Vzc2lvbiAhPSBudWxsKSB7CiAJCQkJZmluYWwgUG9ydEZvcndhcmRpbmdUcmFja2VyIHRyYWNrZXIgPSBwb3J0Rm9yd2FyZDsKIAkJCQlmaW5hbCBDbGllbnRTZXNzaW9uIHBTZXNzaW9uID0gcHJveHlTZXNzaW9uOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDUyZTY5YmQuLjRhMDg5NDAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsMTggKzMsMTggQEAKIEJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUKIEF1dG9tYXRpYy1Nb2R1bGUtTmFtZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0CiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBjb20uamNyYWZ0LmpzY2g7dmVyc2lvbj0iWzAuMS41NCwwLjIuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoLmpzY2g7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5zc2g7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoLmpzY2g7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAogIG9yZy5oYW1jcmVzdDt2ZXJzaW9uPSJbMS4xLjAsMy4wLjApIiwKICBvcmcuanVuaXQ7dmVyc2lvbj0iWzQuMTMsNS4wLjApIiwKICBvcmcuanVuaXQuZXhwZXJpbWVudGFsLnRoZW9yaWVzO3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9wb20ueG1sCmluZGV4IDZmMTk5ZTYuLmNhMWU3NDIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggZWQ5OTdmYi4uMzMyZDk4MSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDE5ICszLDE5IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2g7c2luZ2xldG9uOj10cnVlCi1GcmFnbWVudC1Ib3N0OiBvcmcuZWNsaXBzZS5qZ2l0O2J1bmRsZS12ZXJzaW9uPSJbNi4wLjEsNi4xLjApIgorRnJhZ21lbnQtSG9zdDogb3JnLmVjbGlwc2UuamdpdDtidW5kbGUtdmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIKIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1BY3RpdmF0aW9uUG9saWN5OiBsYXp5Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoLmpzY2g7dmVyc2lvbj0iNi4wLjEiCitFeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuc3NoLmpzY2g7dmVyc2lvbj0iNi4xLjEiCiBJbXBvcnQtUGFja2FnZTogY29tLmpjcmFmdC5qc2NoO3ZlcnNpb249IlswLjEuMzcsMC4yLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0O3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCiAgb3JnLnNsZjRqO3ZlcnNpb249IlsxLjcuMCwyLjAuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDNjM2YyYjEuLmI1NmJiN2MgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2ggLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaDt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2g7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gvcG9tLnhtbAppbmRleCAyYTVmOWI4Li4zYjZkNjZjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaC9wb20ueG1sCkBAIC0xNyw3ICsxNyw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC5zc2guanNjaDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC9CVUlMRCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC9CVUlMRAppbmRleCA5ZTc4N2ZlLi42ZjZjODhjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvQlVJTEQKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L0JVSUxECkBAIC0xMyw2ICsxMyw3IEBACiApICsgW1BLRyArIGMgZm9yIGMgaW4gWwogICAgICJhcGkvQWJzdHJhY3RSZW1vdGVDb21tYW5kVGVzdC5qYXZhIiwKICAgICAiZGlmZi9BYnN0cmFjdERpZmZUZXN0Q2FzZS5qYXZhIiwKKyAgICAiaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9FeHRlcm5hbFRvb2xUZXN0Q2FzZS5qYXZhIiwKICAgICAiaW50ZXJuYWwvcmV2d2Fsay9PYmplY3RSZWFjaGFiaWxpdHlUZXN0Q2FzZS5qYXZhIiwKICAgICAiaW50ZXJuYWwvcmV2d2Fsay9SZWFjaGFiaWxpdHlDaGVja2VyVGVzdENhc2UuamF2YSIsCiAgICAgImludGVybmFsL3N0b3JhZ2UvZmlsZS9HY1Rlc3RDYXNlLmphdmEiLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDA0NjkxMTMuLjU4MTM5NWQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvTUVUQS1JTkYvTUFOSUZFU1QuTUYKQEAgLTMsNyArMyw3IEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQudGVzdAogQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuamdpdC50ZXN0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KIEJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yCiBCdW5kbGUtUmVxdWlyZWRFeGVjdXRpb25FbnZpcm9ubWVudDogSmF2YVNFLTExCkBAIC0xNiw2MCArMTYsNjEgQEAKICBvcmcuYXBhY2hlLmNvbW1vbnMuY29tcHJlc3MuY29tcHJlc3NvcnMuZ3ppcDt2ZXJzaW9uPSJbMS4xNS4wLDIuMCkiLAogIG9yZy5hcGFjaGUuY29tbW9ucy5jb21wcmVzcy5jb21wcmVzc29ycy54ejt2ZXJzaW9uPSJbMS4xNS4wLDIuMCkiLAogIG9yZy5hc3NlcnRqLmNvcmUuYXBpO3ZlcnNpb249IlszLjE0LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmFyY2hpdmU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ibGFtZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmV2ZW50czt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmZubWF0Y2g7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pZ25vcmU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pZ25vcmUuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmZzY2s7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5yZXZ3YWxrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5wYWNrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0YWJsZTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5jb25uZWN0aXZpdHk7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5wYXJzZXI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQuanVuaXQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5qdW5pdC50aW1lO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGZzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliLmludGVybmFsO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubG9nZ2luZzt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQubm90ZXM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5wYXRjaDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbTt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBnbS5pbnRlcm5hbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGU7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuaHR0cDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyO3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuaW87dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTE7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9uczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuYmxhbWU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5kaWZmO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ldmVudHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlLmludGVybmFsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZnNjazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnJldndhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmRmczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuaW87dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LmNvbm5lY3Rpdml0eTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnBhcnNlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5zc2g7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5qdW5pdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnRpbWU7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sZnM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5saWIuaW50ZXJuYWw7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5sb2dnaW5nO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2U7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5ub3Rlczt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnBhdGNoO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucGdtLmludGVybmFsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLmZpbHRlcjt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnN1Ym1vZHVsZTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMTt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKICBvcmcuaGFtY3Jlc3Q7dmVyc2lvbj0iWzEuMS4wLDMuMC4wKSIsCiAgb3JnLmhhbWNyZXN0LmNvbGxlY3Rpb247dmVyc2lvbj0iWzEuMS4wLDMuMC4wKSIsCiAgb3JnLmp1bml0O3ZlcnNpb249Ils0LjEzLDUuMC4wKSIsCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC9wb20ueG1sCmluZGV4IDNjYWIzNjIuLjZiNjY5MTkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC9wb20ueG1sCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC9wb20ueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC50ZXN0PC9hcnRpZmFjdElkPgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9BcHBseUNvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0FwcGx5Q29tbWFuZFRlc3QuamF2YQppbmRleCA4NjczMTBiLi41ODRkMTQ5IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0FwcGx5Q29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0FwcGx5Q29tbWFuZFRlc3QuamF2YQpAQCAtMzIsNiArMzIsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuUmVwb3NpdG9yeVRlc3RDYXNlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5JTzsKIGltcG9ydCBvcmcuanVuaXQuVGVzdDsKIApAQCAtNDAyLDcgKzQwMyw5IEBAIHB1YmxpYyB2b2lkIHRlc3RNb2RpZnlXKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJcHVibGljIHZvaWQgdGVzdEFkZE0xKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCUFwcGx5UmVzdWx0IHJlc3VsdCA9IGluaXQoIk0xIiwgZmFsc2UsIHRydWUpOwogCQlhc3NlcnRFcXVhbHMoMSwgcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLnNpemUoKSk7Ci0JCWFzc2VydFRydWUocmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLmdldCgwKS5jYW5FeGVjdXRlKCkpOworCQlpZiAoRlMuREVURUNURUQuc3VwcG9ydHNFeGVjdXRlKCkpIHsKKwkJCWFzc2VydFRydWUoRlMuREVURUNURUQuY2FuRXhlY3V0ZShyZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApKSk7CisJCX0KIAkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJNMSIpLAogCQkJCWIuZ2V0U3RyaW5nKDAsIGIuc2l6ZSgpLCBmYWxzZSkpOwogCX0KQEAgLTQxMSw3ICs0MTQsOSBAQCBwdWJsaWMgdm9pZCB0ZXN0QWRkTTEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0TW9kaWZ5TTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJQXBwbHlSZXN1bHQgcmVzdWx0ID0gaW5pdCgiTTIiLCB0cnVlLCB0cnVlKTsKIAkJYXNzZXJ0RXF1YWxzKDEsIHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5zaXplKCkpOwotCQlhc3NlcnRUcnVlKHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkuY2FuRXhlY3V0ZSgpKTsKKwkJaWYgKEZTLkRFVEVDVEVELnN1cHBvcnRzRXhlY3V0ZSgpKSB7CisJCQlhc3NlcnRUcnVlKEZTLkRFVEVDVEVELmNhbkV4ZWN1dGUocmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLmdldCgwKSkpOworCQl9CiAJCWNoZWNrRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAiTTIiKSwKIAkJCQliLmdldFN0cmluZygwLCBiLnNpemUoKSwgZmFsc2UpKTsKIAl9CkBAIC00MjAsNyArNDI1LDEwIEBAIHB1YmxpYyB2b2lkIHRlc3RNb2RpZnlNMigpIHRocm93cyBFeGNlcHRpb24gewogCXB1YmxpYyB2b2lkIHRlc3RNb2RpZnlNMygpIHRocm93cyBFeGNlcHRpb24gewogCQlBcHBseVJlc3VsdCByZXN1bHQgPSBpbml0KCJNMyIsIHRydWUsIHRydWUpOwogCQlhc3NlcnRFcXVhbHMoMSwgcmVzdWx0LmdldFVwZGF0ZWRGaWxlcygpLnNpemUoKSk7Ci0JCWFzc2VydEZhbHNlKHJlc3VsdC5nZXRVcGRhdGVkRmlsZXMoKS5nZXQoMCkuY2FuRXhlY3V0ZSgpKTsKKwkJaWYgKEZTLkRFVEVDVEVELnN1cHBvcnRzRXhlY3V0ZSgpKSB7CisJCQlhc3NlcnRGYWxzZSgKKwkJCQkJRlMuREVURUNURUQuY2FuRXhlY3V0ZShyZXN1bHQuZ2V0VXBkYXRlZEZpbGVzKCkuZ2V0KDApKSk7CisJCX0KIAkJY2hlY2tGaWxlKG5ldyBGaWxlKGRiLmdldFdvcmtUcmVlKCksICJNMyIpLAogCQkJCWIuZ2V0U3RyaW5nKDAsIGIuc2l6ZSgpLCBmYWxzZSkpOwogCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQnJhbmNoQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQnJhbmNoQ29tbWFuZFRlc3QuamF2YQppbmRleCBlN2VkMTAyLi44N2JlODEzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0JyYW5jaENvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9CcmFuY2hDb21tYW5kVGVzdC5qYXZhCkBAIC03MSw2ICs3MSw3IEBAIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlwcml2YXRlIEdpdCBzZXRVcFJlcG9XaXRoUmVtb3RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVJlcG9zaXRvcnkgcmVtb3RlUmVwb3NpdG9yeSA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7CisJCWFkZFJlcG9Ub0Nsb3NlKHJlbW90ZVJlcG9zaXRvcnkpOwogCQl0cnkgKEdpdCByZW1vdGVHaXQgPSBuZXcgR2l0KHJlbW90ZVJlcG9zaXRvcnkpKSB7CiAJCQkvLyBjb21taXQgc29tZXRoaW5nCiAJCQl3cml0ZVRyYXNoRmlsZSgiVGVzdC50eHQiLCAiSGVsbG8gd29ybGQiKTsKQEAgLTg1LDYgKzg2LDcgQEAgcHJpdmF0ZSBHaXQgc2V0VXBSZXBvV2l0aFJlbW90ZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkJcnVwLmZvcmNlVXBkYXRlKCk7CiAKIAkJCVJlcG9zaXRvcnkgbG9jYWxSZXBvc2l0b3J5ID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKKwkJCWFkZFJlcG9Ub0Nsb3NlKGxvY2FsUmVwb3NpdG9yeSk7CiAJCQlHaXQgbG9jYWxHaXQgPSBuZXcgR2l0KGxvY2FsUmVwb3NpdG9yeSk7CiAJCQlTdG9yZWRDb25maWcgY29uZmlnID0gbG9jYWxSZXBvc2l0b3J5LmdldENvbmZpZygpOwogCQkJUmVtb3RlQ29uZmlnIHJjID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJvcmlnaW4iKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlY2tvdXRDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVja291dENvbW1hbmRUZXN0LmphdmEKaW5kZXggZTUyMDczMi4uYWIwMTg0YiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVja291dENvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVja291dENvbW1hbmRUZXN0LmphdmEKQEAgLTI5Miw2ICsyOTIsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tvdXRBbm5vdGF0ZWRUYWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RDaGVja291dFJlbW90ZVRyYWNraW5nV2l0aFVwc3RyZWFtKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVJlcG9zaXRvcnkgZGIyID0gY3JlYXRlUmVwb3NpdG9yeVdpdGhSZW1vdGUoKTsKKwkJYWRkUmVwb1RvQ2xvc2UoZGIyKTsKIAogCQlHaXQud3JhcChkYjIpLmNoZWNrb3V0KCkuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLnNldE5hbWUoInRlc3QiKQogCQkJCS5zZXRTdGFydFBvaW50KCJvcmlnaW4vdGVzdCIpCkBAIC0zMTEsNiArMzEyLDcgQEAgcHVibGljIHZvaWQgdGVzdENoZWNrb3V0UmVtb3RlVHJhY2tpbmdXaXRoVXBzdHJlYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RDaGVja291dFJlbW90ZVRyYWNraW5nV2l0aG91dExvY2FsQnJhbmNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVJlcG9zaXRvcnkgZGIyID0gY3JlYXRlUmVwb3NpdG9yeVdpdGhSZW1vdGUoKTsKKwkJYWRkUmVwb1RvQ2xvc2UoZGIyKTsKIAogCQkvLyBjaGVja291dCByZW1vdGUgdHJhY2tpbmcgYnJhbmNoIGluIHNlY29uZCByZXBvc2l0b3J5CiAJCS8vIChubyBsb2NhbCBicmFuY2hlcyBleGlzdCB5ZXQgaW4gc2Vjb25kIHJlcG9zaXRvcnkpCkBAIC04NjgsNyArODcwLDcgQEAgcHVibGljIHZvaWQgdGVzdE5vbkRlbGV0YWJsZUZpbGVzT25XaW5kb3dzKCkKIAkJCWNvQ29tbWFuZC5zZXROYW1lKGNydWRDb21taXQuZ2V0TmFtZSgpKS5jYWxsKCk7CiAJCQlDaGVja291dFJlc3VsdCByZXN1bHQgPSBjb0NvbW1hbmQuZ2V0UmVzdWx0KCk7CiAJCQlhc3NlcnRFcXVhbHMoU3RhdHVzLk5PTkRFTEVURUQsIHJlc3VsdC5nZXRTdGF0dXMoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoIltUZXN0LnR4dCwgdG9CZURlbGV0ZWQudHh0XSIsCisJCQlhc3NlcnRFcXVhbHMoIlt0b0JlRGVsZXRlZC50eHRdIiwKIAkJCQkJcmVzdWx0LmdldFJlbW92ZWRMaXN0KCkudG9TdHJpbmcoKSk7CiAJCQlhc3NlcnRFcXVhbHMoIlt0b0JlQ3JlYXRlZC50eHQsIHRvQmVNb2RpZmllZC50eHRdIiwKIAkJCQkJcmVzdWx0LmdldE1vZGlmaWVkTGlzdCgpLnRvU3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmRUZXN0LmphdmEKaW5kZXggZjRmMGVjZC4uMGQzODE5NyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kVGVzdC5qYXZhCkBAIC0xNzUsNyArMTc1LDggQEAgcHVibGljIHZvaWQgdGVzdENoZXJyeVBpY2tDb25mbGljdFJlc29sdXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCQkJYXNzZXJ0RXF1YWxzKENoZXJyeVBpY2tTdGF0dXMuQ09ORkxJQ1RJTkcsIHJlc3VsdC5nZXRTdGF0dXMoKSk7CiAJCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldERpcmVjdG9yeSgpLCBDb25zdGFudHMuTUVSR0VfTVNHKS5leGlzdHMoKSk7Ci0JCQlhc3NlcnRFcXVhbHMoInNpZGVcblxuQ29uZmxpY3RzOlxuXHRhXG4iLCBkYi5yZWFkTWVyZ2VDb21taXRNc2coKSk7CisJCQlhc3NlcnRFcXVhbHMoInNpZGVcblxuIyBDb25mbGljdHM6XG4jXHRhXG4iLAorCQkJCQlkYi5yZWFkTWVyZ2VDb21taXRNc2coKSk7CiAJCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldERpcmVjdG9yeSgpLCBDb25zdGFudHMuQ0hFUlJZX1BJQ0tfSEVBRCkKIAkJCQkJLmV4aXN0cygpKTsKIAkJCWFzc2VydEVxdWFscyhzaWRlQ29tbWl0LmdldElkKCksIGRiLnJlYWRDaGVycnlQaWNrSGVhZCgpKTsKQEAgLTIwNyw3ICsyMDgsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0Q2hlcnJ5UGlja0NvbmZsaWN0UmVzb2x1dGlvbk5vQ29tbWl0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVN0cmluZyBleHBlY3RlZCA9ICI8PDw8PDw8IG1hc3RlclxuYShtYXN0ZXIpXG49PT09PT09XG5hKHNpZGUpXG4+Pj4+Pj4+IDUyNzQ2MGEgc2lkZVxuIjsKIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLCByZWFkKCJhIikpOwogCQlhc3NlcnRUcnVlKG5ldyBGaWxlKGRiLmdldERpcmVjdG9yeSgpLCBDb25zdGFudHMuTUVSR0VfTVNHKS5leGlzdHMoKSk7Ci0JCWFzc2VydEVxdWFscygic2lkZVxuXG5Db25mbGljdHM6XG5cdGFcbiIsIGRiLnJlYWRNZXJnZUNvbW1pdE1zZygpKTsKKwkJYXNzZXJ0RXF1YWxzKCJzaWRlXG5cbiMgQ29uZmxpY3RzOlxuI1x0YVxuIiwgZGIucmVhZE1lcmdlQ29tbWl0TXNnKCkpOwogCQlhc3NlcnRGYWxzZShuZXcgRmlsZShkYi5nZXREaXJlY3RvcnkoKSwgQ29uc3RhbnRzLkNIRVJSWV9QSUNLX0hFQUQpCiAJCQkJLmV4aXN0cygpKTsKIAkJYXNzZXJ0RXF1YWxzKFJlcG9zaXRvcnlTdGF0ZS5TQUZFLCBkYi5nZXRSZXBvc2l0b3J5U3RhdGUoKSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NvbW1pdENvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0NvbW1pdENvbW1hbmRUZXN0LmphdmEKaW5kZXggODA4NDUwNS4uMzVkZTczZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9Db21taXRDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ29tbWl0Q29tbWFuZFRlc3QuamF2YQpAQCAtNDYsNiArNDYsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZmxvZ0VudHJ5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuU3RvcmVkQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbW1pdENvbmZpZy5DbGVhbnVwTW9kZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVCYXNlZENvbmZpZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnN1Ym1vZHVsZS5TdWJtb2R1bGVXYWxrOwpAQCAtNTE1LDYgKzUxNiw2MiBAQCBwdWJsaWMgdm9pZCBjb21taXRBbWVuZFdpdGhBdXRob3JTaG91bGRVc2VJdCgpIHRocm93cyBFeGNlcHRpb24gewogCX0KIAogCUBUZXN0CisJcHVibGljIHZvaWQgY29tbWl0TWVzc2FnZVZlcmJhdGltKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTEiLCAiZmlsZTEiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0dGVkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIiNpbml0aWFsIGNvbW1pdCIpCisJCQkJCS5jYWxsKCk7CisKKwkJCWFzc2VydEVxdWFscygiI2luaXRpYWwgY29tbWl0IiwgY29tbWl0dGVkLmdldEZ1bGxNZXNzYWdlKCkpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBjb21taXRNZXNzYWdlU3RyaXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYikpIHsKKwkJCXdyaXRlVHJhc2hGaWxlKCJmaWxlMSIsICJmaWxlMSIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXR0ZWQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgKKwkJCQkJIiNDb21tZW50XG5pbml0aWFsIGNvbW1pdFx0XG5cbiBjb21taXQgYm9keSBcbiBcdCNhbm90aGVyIGNvbW1lbnQiKQorCQkJCQkuc2V0Q2xlYW51cE1vZGUoQ2xlYW51cE1vZGUuU1RSSVApLmNhbGwoKTsKKworCQkJYXNzZXJ0RXF1YWxzKCJpbml0aWFsIGNvbW1pdFxuXG4gY29tbWl0IGJvZHkiLAorCQkJCQljb21taXR0ZWQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNvbW1pdE1lc3NhZ2VEZWZhdWx0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CisJCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTEiLCAiZmlsZTEiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZmlsZTEiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0dGVkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoCisJCQkJCSIjQ29tbWVudFxuaW5pdGlhbCBjb21taXRcdFxuXG4gY29tbWl0IGJvZHkgXG5cblxuIFx0I2Fub3RoZXIgY29tbWVudCAgIikKKwkJCQkJLnNldENsZWFudXBNb2RlKENsZWFudXBNb2RlLkRFRkFVTFQpLmNhbGwoKTsKKworCQkJYXNzZXJ0RXF1YWxzKCJpbml0aWFsIGNvbW1pdFxuXG4gY29tbWl0IGJvZHkiLAorCQkJCQljb21taXR0ZWQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGNvbW1pdE1lc3NhZ2VEZWZhdWx0V2hpdGVzcGFjZSgpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKSkgeworCQkJd3JpdGVUcmFzaEZpbGUoImZpbGUxIiwgImZpbGUxIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImZpbGUxIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdHRlZCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKAorCQkJCQkiI0NvbW1lbnRcbmluaXRpYWwgY29tbWl0XHRcblxuIGNvbW1pdCBib2R5IFxuXG5cbiBcdCNhbm90aGVyIGNvbW1lbnQgICIpCisJCQkJCS5zZXRDbGVhbnVwTW9kZShDbGVhbnVwTW9kZS5ERUZBVUxUKS5zZXREZWZhdWx0Q2xlYW4oZmFsc2UpCisJCQkJCS5jYWxsKCk7CisKKwkJCWFzc2VydEVxdWFscygKKwkJCQkJIiNDb21tZW50XG5pbml0aWFsIGNvbW1pdFxuXG4gY29tbWl0IGJvZHlcblxuIFx0I2Fub3RoZXIgY29tbWVudCIsCisJCQkJCWNvbW1pdHRlZC5nZXRGdWxsTWVzc2FnZSgpKTsKKwkJfQorCX0KKworCUBUZXN0CiAJcHVibGljIHZvaWQgY29tbWl0RW1wdHlDb21taXRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpKSB7CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvRGVzY3JpYmVDb21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9EZXNjcmliZUNvbW1hbmRUZXN0LmphdmEKaW5kZXggYjQ2MGUzZi4uYWI4N2ZhOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9EZXNjcmliZUNvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9EZXNjcmliZUNvbW1hbmRUZXN0LmphdmEKQEAgLTEwLDkgKzEwLDEwIEBACiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuYXBpOwogCiBpbXBvcnQgc3RhdGljIGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy5VVEZfODsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLk9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7Ci1pbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0TnVsbDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE51bGw7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKIAogaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRXcml0ZXI7CkBAIC0xMDAsNiArMTAxLDEyIEBAIHB1YmxpYyB2b2lkIHRlc3REZXNjcmliZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkJYXNzZXJ0RXF1YWxzKCJhbGljZS10MS0yLWczZTU2M2M1IiwgZGVzY3JpYmUoYzQsICJhbGljZSoiKSk7CiAJCQlhc3NlcnRFcXVhbHMoImJvYi10Mi0xLWczZTU2M2M1IiwgZGVzY3JpYmUoYzQsICJib2IqIikpOwogCQkJYXNzZXJ0RXF1YWxzKCJib2ItdDItMS1nM2U1NjNjNSIsIGRlc2NyaWJlKGM0LCAiYSoiLCAiYioiLCAiYyoiKSk7CisKKwkJCWFzc2VydEVxdWFscygiYm9iLXQyIiwgZGVzY3JpYmUoYzQsIGZhbHNlLCB0cnVlLCAwKSk7CisJCQlhc3NlcnRFcXVhbHMoImJvYi10Mi0xLWczZTU2IiwgZGVzY3JpYmUoYzQsIGZhbHNlLCB0cnVlLCAxKSk7CisJCQlhc3NlcnRFcXVhbHMoImJvYi10Mi0xLWczZTU2IiwgZGVzY3JpYmUoYzQsIGZhbHNlLCB0cnVlLCAtMTApKTsKKwkJCWFzc2VydEVxdWFscygiYm9iLXQyLTEtZzNlNTYzYzU1OTI3OTA1ZjIxZTNiYzdjMDBhM2Q4M2EzMWJmNGVkM2EiLAorCQkJCQlkZXNjcmliZShjNCwgZmFsc2UsIHRydWUsIDUwKSk7CiAJCX0gZWxzZSB7CiAJCQlhc3NlcnRFcXVhbHMobnVsbCwgZGVzY3JpYmUoYzIpKTsKIAkJCWFzc2VydEVxdWFscyhudWxsLCBkZXNjcmliZShjMykpOwpAQCAtMTA4LDYgKzExNSwxOCBAQCBwdWJsaWMgdm9pZCB0ZXN0RGVzY3JpYmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCWFzc2VydEVxdWFscygiMzc0N2RiMyIsIGRlc2NyaWJlKGMyLCBmYWxzZSwgdHJ1ZSkpOwogCQkJYXNzZXJ0RXF1YWxzKCI0NDU3OWViIiwgZGVzY3JpYmUoYzMsIGZhbHNlLCB0cnVlKSk7CiAJCQlhc3NlcnRFcXVhbHMoIjNlNTYzYzUiLCBkZXNjcmliZShjNCwgZmFsc2UsIHRydWUpKTsKKworCQkJYXNzZXJ0RXF1YWxzKCIzNzQ3ZGIzMjY3IiwgZGVzY3JpYmUoYzIsIGZhbHNlLCB0cnVlLCAxMCkpOworCQkJYXNzZXJ0RXF1YWxzKCI0NDU3OWViZTdmIiwgZGVzY3JpYmUoYzMsIGZhbHNlLCB0cnVlLCAxMCkpOworCQkJYXNzZXJ0RXF1YWxzKCIzZTU2M2M1NTkyIiwgZGVzY3JpYmUoYzQsIGZhbHNlLCB0cnVlLCAxMCkpOworCisJCQlhc3NlcnRFcXVhbHMoIjNlNTYiLCBkZXNjcmliZShjNCwgZmFsc2UsIHRydWUsIC0xMCkpOworCQkJYXNzZXJ0RXF1YWxzKCIzZTU2IiwgZGVzY3JpYmUoYzQsIGZhbHNlLCB0cnVlLCAwKSk7CisJCQlhc3NlcnRFcXVhbHMoIjNlNTYiLCBkZXNjcmliZShjNCwgZmFsc2UsIHRydWUsIDIpKTsKKwkJCWFzc2VydEVxdWFscygiM2U1NjNjNTU5Mjc5MDVmMjFlM2JjN2MwMGEzZDgzYTMxYmY0ZWQzYSIsCisJCQkJCWRlc2NyaWJlKGM0LCBmYWxzZSwgdHJ1ZSwgNDApKTsKKwkJCWFzc2VydEVxdWFscygiM2U1NjNjNTU5Mjc5MDVmMjFlM2JjN2MwMGEzZDgzYTMxYmY0ZWQzYSIsCisJCQkJCWRlc2NyaWJlKGM0LCBmYWxzZSwgdHJ1ZSwgNDIpKTsKIAkJfQogCiAJCS8vIHRlc3QgZGVmYXVsdCB0YXJnZXQKQEAgLTQ3NCwxMCArNDkzLDE1IEBAIHByaXZhdGUgc3RhdGljIHZvaWQgdG91Y2goRmlsZSBmLCBTdHJpbmcgY29udGVudHMpIHRocm93cyBFeGNlcHRpb24gewogCQl9CiAJfQogCisJcHJpdmF0ZSBTdHJpbmcgZGVzY3JpYmUoT2JqZWN0SWQgYzEsIGJvb2xlYW4gbG9uZ0Rlc2MsIGJvb2xlYW4gYWx3YXlzLAorCQkJaW50IGFiYnJldikgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlyZXR1cm4gZ2l0LmRlc2NyaWJlKCkuc2V0VGFyZ2V0KGMxKS5zZXRUYWdzKGRlc2NyaWJlVXNlQWxsVGFncykKKwkJCQkuc2V0TG9uZyhsb25nRGVzYykuc2V0QWx3YXlzKGFsd2F5cykuc2V0QWJicmV2KGFiYnJldikuY2FsbCgpOworCX0KKwogCXByaXZhdGUgU3RyaW5nIGRlc2NyaWJlKE9iamVjdElkIGMxLCBib29sZWFuIGxvbmdEZXNjLCBib29sZWFuIGFsd2F5cykKIAkJCXRocm93cyBHaXRBUElFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIGdpdC5kZXNjcmliZSgpLnNldFRhcmdldChjMSkuc2V0VGFncyhkZXNjcmliZVVzZUFsbFRhZ3MpCi0JCQkJLnNldExvbmcobG9uZ0Rlc2MpLnNldEFsd2F5cyhhbHdheXMpLmNhbGwoKTsKKwkJcmV0dXJuIGRlc2NyaWJlKGMxLCBsb25nRGVzYywgYWx3YXlzLCBPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpOwogCX0KIAogCXByaXZhdGUgU3RyaW5nIGRlc2NyaWJlKE9iamVjdElkIGMxKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0VvbFJlcG9zaXRvcnlUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0VvbFJlcG9zaXRvcnlUZXN0LmphdmEKaW5kZXggZDBkZmQxYS4uYjkzN2IxZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9Fb2xSZXBvc2l0b3J5VGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvRW9sUmVwb3NpdG9yeVRlc3QuamF2YQpAQCAtMSw0MCArMSwxMSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSwgSXZhbiBNb3RzY2ggPGl2YW4ubW90c2NoQGJzaWFnLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxNSwgMjAyMiBJdmFuIE1vdHNjaCA8aXZhbi5tb3RzY2hAYnNpYWcuY29tPiBhbmQgb3RoZXJzCiAgKgotICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2MS4wIHdoaWNoCi0gKiBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgaXMgcmVwcm9kdWNlZCBiZWxvdywgYW5kIGlzCi0gKiBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCiAgKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCi0gKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKLSAqIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCi0gKiAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAtIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgSW5jLiBub3IgdGhlCi0gKiAgIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCi0gKiAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKLSAqICAgd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAotICogQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi0gKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCi0gKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTsKIApAQCAtMTczLDE1ICsxNDQsMjIgQEAgcHJpdmF0ZSBzdGF0aWMgY2xhc3MgQWN0dWFsRW50cnkgewogCiAJcHJpdmF0ZSBEaXJDYWNoZSBkaXJDYWNoZTsKIAorCXByaXZhdGUgYm9vbGVhbiBpc0RlZmF1bHRDckxmKCkgeworCQlTdHJpbmcgZW9sID0gbW9ja1N5c3RlbVJlYWRlci5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKKwkJcmV0dXJuICJcclxuIi5lcXVhbHMoZW9sKTsKKwl9CisKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3REZWZhdWx0U2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gZm9yIEVPTCB0byB3b3JrLCB0aGUgdGV4dCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQKIAkJc2V0dXBHaXRBbmREb0hhcmRSZXNldChudWxsLCBudWxsLCBudWxsLCBudWxsLCAiKiB0ZXh0PWF1dG8iKTsKIAkJY29sbGVjdFJlcG9zaXRvcnlTdGF0ZSgpOwogCQlhc3NlcnRFcXVhbHMoInRleHQ9YXV0byIsIGVudHJ5Q1JMRi5hdHRycyk7Ci0JCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7Ci0JCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeU1peGVkLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKKwkJLy8gZW9sPW5hdGl2ZSBpcyB0aGUgZGVmYXVsdCEKKwkJU3RyaW5nIGV4cGVjdGVkID0gaXNEZWZhdWx0Q3JMZigpID8gQ09OVEVOVF9DUkxGIDogQ09OVEVOVF9MRjsKKwkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlDUkxGLCBleHBlY3RlZCwgQ09OVEVOVF9MRik7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TEYsIGV4cGVjdGVkLCBDT05URU5UX0xGKTsKKwkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlNaXhlZCwgZXhwZWN0ZWQsIENPTlRFTlRfTEYpOwogCX0KIAogCXB1YmxpYyB2b2lkIGNoZWNrRW50cnlDb250ZW50KEFjdHVhbEVudHJ5IGVudHJ5LCBTdHJpbmcgZmlsZUNvbnRlbnQsCkBAIC0xOTksOSArMTc3LDExIEBAIHB1YmxpYyB2b2lkIHRlc3RfQ29uZmlnQXV0b0NSTEZfZmFsc2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJc2V0dXBHaXRBbmREb0hhcmRSZXNldChBdXRvQ1JMRi5GQUxTRSwgbnVsbCwgbnVsbCwgbnVsbCwgIiogdGV4dD1hdXRvIik7CiAJCWNvbGxlY3RSZXBvc2l0b3J5U3RhdGUoKTsKIAkJYXNzZXJ0RXF1YWxzKCJ0ZXh0PWF1dG8iLCBlbnRyeUNSTEYuYXR0cnMpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeUNSTEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKLQkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlNaXhlZCwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7CisJCS8vIGVvbD1uYXRpdmUgaXMgdGhlIGRlZmF1bHQhCisJCVN0cmluZyBleHBlY3RlZCA9IGlzRGVmYXVsdENyTGYoKSA/IENPTlRFTlRfQ1JMRiA6IENPTlRFTlRfTEY7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgZXhwZWN0ZWQsIENPTlRFTlRfTEYpOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBleHBlY3RlZCwgQ09OVEVOVF9MRik7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TWl4ZWQsIGV4cGVjdGVkLCBDT05URU5UX0xGKTsKIAl9CiAKIAlAVGVzdApAQCAtMjUwLDM0ICsyMzAsMjQgQEAgcHVibGljIHZvaWQgdGVzdF9Db25maWdFT0xfY3JsZigpIHRocm93cyBFeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0X0NvbmZpZ0VPTF9uYXRpdmVfd2luZG93cygpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgb3JpZ0xpbmVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIiwgIlxuIik7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiLCAiXHJcbiIpOwotCQl0cnkgewotCQkJLy8gZm9yIEVPTCB0byB3b3JrLCB0aGUgdGV4dCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQKLQkJCXNldHVwR2l0QW5kRG9IYXJkUmVzZXQobnVsbCwgRU9MLk5BVElWRSwgIioudHh0IHRleHQiLCBudWxsLCBudWxsKTsKLQkJCWNvbGxlY3RSZXBvc2l0b3J5U3RhdGUoKTsKLQkJCWFzc2VydEVxdWFscygidGV4dCIsIGVudHJ5Q1JMRi5hdHRycyk7Ci0JCQljaGVja0VudHJ5Q29udGVudChlbnRyeUNSTEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwotCQkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlMRiwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7Ci0JCX0gZmluYWxseSB7Ci0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIiwgb3JpZ0xpbmVTZXBhcmF0b3IpOwotCQl9CisJCW1vY2tTeXN0ZW1SZWFkZXIuc2V0V2luZG93cygpOworCQkvLyBmb3IgRU9MIHRvIHdvcmssIHRoZSB0ZXh0IGF0dHJpYnV0ZSBtdXN0IGJlIHNldAorCQlzZXR1cEdpdEFuZERvSGFyZFJlc2V0KG51bGwsIEVPTC5OQVRJVkUsICIqLnR4dCB0ZXh0IiwgbnVsbCwgbnVsbCk7CisJCWNvbGxlY3RSZXBvc2l0b3J5U3RhdGUoKTsKKwkJYXNzZXJ0RXF1YWxzKCJ0ZXh0IiwgZW50cnlDUkxGLmF0dHJzKTsKKwkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlDUkxGLCBDT05URU5UX0NSTEYsIENPTlRFTlRfTEYpOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBDT05URU5UX0NSTEYsIENPTlRFTlRfTEYpOwogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdF9Db25maWdFT0xfbmF0aXZlX3huaXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIG9yaWdMaW5lU2VwYXJhdG9yID0gU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIsICJcbiIpOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIiwgIlxuIik7Ci0JCXRyeSB7Ci0JCQkvLyBmb3IgRU9MIHRvIHdvcmssIHRoZSB0ZXh0IGF0dHJpYnV0ZSBtdXN0IGJlIHNldAotCQkJc2V0dXBHaXRBbmREb0hhcmRSZXNldChudWxsLCBFT0wuTkFUSVZFLCAiKi50eHQgdGV4dCIsIG51bGwsIG51bGwpOwotCQkJY29sbGVjdFJlcG9zaXRvcnlTdGF0ZSgpOwotCQkJYXNzZXJ0RXF1YWxzKCJ0ZXh0IiwgZW50cnlDUkxGLmF0dHJzKTsKLQkJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7Ci0JCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKLQkJfSBmaW5hbGx5IHsKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiLCBvcmlnTGluZVNlcGFyYXRvcik7Ci0JCX0KKwkJbW9ja1N5c3RlbVJlYWRlci5zZXRVbml4KCk7CisJCS8vIGZvciBFT0wgdG8gd29yaywgdGhlIHRleHQgYXR0cmlidXRlIG11c3QgYmUgc2V0CisJCXNldHVwR2l0QW5kRG9IYXJkUmVzZXQobnVsbCwgRU9MLk5BVElWRSwgIioudHh0IHRleHQiLCBudWxsLCBudWxsKTsKKwkJY29sbGVjdFJlcG9zaXRvcnlTdGF0ZSgpOworCQlhc3NlcnRFcXVhbHMoInRleHQiLCBlbnRyeUNSTEYuYXR0cnMpOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeUNSTEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKIAl9CiAKIAlAVGVzdApAQCAtMjk3LDkgKzI2NywxMCBAQCBwdWJsaWMgdm9pZCB0ZXN0X0NvbmZpZ0F1dG9DUkxGX2ZhbHNlX0NvbmZpZ0VPTF9uYXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJc2V0dXBHaXRBbmREb0hhcmRSZXNldChBdXRvQ1JMRi5GQUxTRSwgRU9MLk5BVElWRSwgIioudHh0IHRleHQiLCBudWxsLCBudWxsKTsKIAkJY29sbGVjdFJlcG9zaXRvcnlTdGF0ZSgpOwogCQlhc3NlcnRFcXVhbHMoInRleHQiLCBlbnRyeUNSTEYuYXR0cnMpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeUNSTEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKLQkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlNaXhlZCwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7CisJCVN0cmluZyBleHBlY3RlZCA9IGlzRGVmYXVsdENyTGYoKSA/IENPTlRFTlRfQ1JMRiA6IENPTlRFTlRfTEY7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5Q1JMRiwgZXhwZWN0ZWQsIENPTlRFTlRfTEYpOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBleHBlY3RlZCwgQ09OVEVOVF9MRik7CisJCWNoZWNrRW50cnlDb250ZW50KGVudHJ5TWl4ZWQsIGV4cGVjdGVkLCBDT05URU5UX0xGKTsKIAl9CiAKIAlAVGVzdApAQCAtNTI0LDkgKzQ5NSwxMiBAQCBwdWJsaWMgdm9pZCB0ZXN0X0dsb2JhbEVPTF9sZl9JbmZvRU9MX3Vuc3BlY19Sb290RU9MX2NybGYoKQogCQkvLyBpbmZvIG92ZXJyaWRlcyBhbGwKIAkJY29sbGVjdFJlcG9zaXRvcnlTdGF0ZSgpOwogCQlhc3NlcnRFcXVhbHMoInRleHQiLCBlbnRyeUNSTEYuYXR0cnMpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeUNSTEYsIENPTlRFTlRfTEYsIENPTlRFTlRfTEYpOwotCQljaGVja0VudHJ5Q29udGVudChlbnRyeUxGLCBDT05URU5UX0xGLCBDT05URU5UX0xGKTsKLQkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlNaXhlZCwgQ09OVEVOVF9MRiwgQ09OVEVOVF9MRik7CisJCS8vICFlb2wgbWVhbnMgdW5zcGVjaWZpZWQsIHNvIHVzZSB0aGUgZGVmYXVsdCBvZiBjb3JlLmVvbCwgd2hpY2ggaXMKKwkJLy8gbmF0aXZlLgorCQlTdHJpbmcgZXhwZWN0ZWQgPSBpc0RlZmF1bHRDckxmKCkgPyBDT05URU5UX0NSTEYgOiBDT05URU5UX0xGOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeUNSTEYsIGV4cGVjdGVkLCBDT05URU5UX0xGKTsKKwkJY2hlY2tFbnRyeUNvbnRlbnQoZW50cnlMRiwgZXhwZWN0ZWQsIENPTlRFTlRfTEYpOworCQljaGVja0VudHJ5Q29udGVudChlbnRyeU1peGVkLCBleHBlY3RlZCwgQ09OVEVOVF9MRik7CiAJfQogCiAJQFRlc3QKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvRmV0Y2hBbmRQdWxsQ29tbWFuZHNSZWN1cnNlU3VibW9kdWxlc1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvRmV0Y2hBbmRQdWxsQ29tbWFuZHNSZWN1cnNlU3VibW9kdWxlc1Rlc3QuamF2YQppbmRleCAzNmJhN2NlLi45ZWE2NGVmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL0ZldGNoQW5kUHVsbENvbW1hbmRzUmVjdXJzZVN1Ym1vZHVsZXNUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9GZXRjaEFuZFB1bGxDb21tYW5kc1JlY3Vyc2VTdWJtb2R1bGVzVGVzdC5qYXZhCkBAIC0yNTksNyArMjU5LDggQEAgcHJpdmF0ZSBSZXZDb21taXQgdXBkYXRlU3VibW9kdWxlUmV2aXNpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gdGhlIGNvbW1pdCB0aGF0IHdhcyBjcmVhdGVkCiAJCXRyeSAoU3VibW9kdWxlV2FsayB3ID0gU3VibW9kdWxlV2Fsay5mb3JJbmRleChnaXQuZ2V0UmVwb3NpdG9yeSgpKSkgewogCQkJYXNzZXJ0VHJ1ZSh3Lm5leHQoKSk7Ci0JCQl0cnkgKEdpdCBnID0gbmV3IEdpdCh3LmdldFJlcG9zaXRvcnkoKSkpIHsKKwkJCXRyeSAoUmVwb3NpdG9yeSByZXBvc2l0b3J5ID0gdy5nZXRSZXBvc2l0b3J5KCk7CisJCQkJCUdpdCBnID0gbmV3IEdpdChyZXBvc2l0b3J5KSkgewogCQkJCWcuZmV0Y2goKS5zZXRSZW1vdGUoUkVNT1RFKS5zZXRSZWZTcGVjcyhSRUZTUEVDKS5jYWxsKCk7CiAJCQkJZy5yZXNldCgpLnNldE1vZGUoUmVzZXRUeXBlLkhBUkQpLnNldFJlZihjb21taXQxLm5hbWUoKSkuY2FsbCgpOwogCQkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL01lcmdlQ29tbWFuZFRlc3QuamF2YQppbmRleCBiYzRlOTQwLi42NDQ3NWY1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL01lcmdlQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL01lcmdlQ29tbWFuZFRlc3QuamF2YQpAQCAtNTU0LDcgKzU1NCw3IEBAIHB1YmxpYyB2b2lkIHRlc3RNZXJnZU1lc3NhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCWdpdC5tZXJnZSgpLmluY2x1ZGUoc2lkZUJyYW5jaCkKIAkJCQkJLnNldFN0cmF0ZWd5KE1lcmdlU3RyYXRlZ3kuUkVTT0xWRSkuY2FsbCgpOwogCi0JCQlhc3NlcnRFcXVhbHMoIk1lcmdlIGJyYW5jaCAnc2lkZSdcblxuQ29uZmxpY3RzOlxuXHRhXG4iLAorCQkJYXNzZXJ0RXF1YWxzKCJNZXJnZSBicmFuY2ggJ3NpZGUnXG5cbiMgQ29uZmxpY3RzOlxuI1x0YVxuIiwKIAkJCQkJZGIucmVhZE1lcmdlQ29tbWl0TXNnKCkpOwogCQl9CiAKQEAgLTE3ODcsNyArMTc4Nyw3IEBAIHB1YmxpYyB2b2lkIHRlc3RTcXVhc2hNZXJnZUNvbmZsaWN0KCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQkJCQkJKyBkYXRlRm9ybWF0dGVyLmZvcm1hdERhdGUodGhpcmQKIAkJCQkJCQkJCS5nZXRBdXRob3JJZGVudCgpKSArICJcblxuXHR0aGlyZCBjb21taXRcbiIsCiAJCQkJCWRiLnJlYWRTcXVhc2hDb21taXRNc2coKSk7Ci0JCQlhc3NlcnRFcXVhbHMoIlxuQ29uZmxpY3RzOlxuXHRmaWxlMlxuIiwgZGIucmVhZE1lcmdlQ29tbWl0TXNnKCkpOworCQkJYXNzZXJ0RXF1YWxzKCJcbiMgQ29uZmxpY3RzOlxuI1x0ZmlsZTJcbiIsIGRiLnJlYWRNZXJnZUNvbW1pdE1zZygpKTsKIAogCQkJU3RhdHVzIHN0YXQgPSBnaXQuc3RhdHVzKCkuY2FsbCgpOwogCQkJYXNzZXJ0RXF1YWxzKFNldHMub2YoImZpbGUyIiksIHN0YXQuZ2V0Q29uZmxpY3RpbmcoKSk7CkBAIC0xODgxLDYgKzE4ODEsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0RmFzdEZvcndhcmRPbmx5Tm90UG9zc2libGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RSZWN1cnNpdmVNZXJnZVdpdGhDb25mbGljdCgpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgKFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+IGRiX3QgPSBuZXcgVGVzdFJlcG9zaXRvcnk8PihkYikpIHsKKwkJCWRiLmluY3JlbWVudE9wZW4oKTsKIAkJCUJyYW5jaEJ1aWxkZXIgbWFzdGVyID0gZGJfdC5icmFuY2goIm1hc3RlciIpOwogCQkJUmV2Q29tbWl0IG0wID0gbWFzdGVyLmNvbW1pdCgpCiAJCQkJCS5hZGQoImYiLCAiMVxuMlxuM1xuNFxuNVxuNlxuN1xuOFxuOVxuIikubWVzc2FnZSgibTAiKQpAQCAtMjAxMiw3ICsyMDEzLDcgQEAgcHVibGljIHZvaWQgdGVzdE1lcmdlQ29uZmxpY3RXaXRoTWVzc2FnZU9wdGlvbigpIHRocm93cyBFeGNlcHRpb24gewogCQkJZ2l0Lm1lcmdlKCkuaW5jbHVkZShzaWRlQnJhbmNoKS5zZXRTdHJhdGVneShNZXJnZVN0cmF0ZWd5LlJFU09MVkUpCiAJCQkJCS5zZXRNZXNzYWdlKCJ1c2VyIG1lc3NhZ2UiKS5jYWxsKCk7CiAKLQkJCWFzc2VydEVxdWFscygidXNlciBtZXNzYWdlXG5cbkNvbmZsaWN0czpcblx0YVxuIiwKKwkJCWFzc2VydEVxdWFscygidXNlciBtZXNzYWdlXG5cbiMgQ29uZmxpY3RzOlxuI1x0YVxuIiwKIAkJCQkJZGIucmVhZE1lcmdlQ29tbWl0TXNnKCkpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRUZXN0LmphdmEKaW5kZXggOWFmNzdhYS4uNmE4NGYwYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdWxsQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kVGVzdC5qYXZhCkBAIC01NjcsNiArNTY3LDcgQEAgcHJpdmF0ZSB2b2lkIGRvVGVzdFB1bGxXaXRoUmViYXNlKENhbGxhYmxlPFB1bGxSZXN1bHQ+IHB1bGxTZXR1cCwKIAlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCQlzdXBlci5zZXRVcCgpOwogCQlkYlRhcmdldCA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7CisJCWFkZFJlcG9Ub0Nsb3NlKGRiVGFyZ2V0KTsKIAkJc291cmNlID0gbmV3IEdpdChkYik7CiAJCXRhcmdldCA9IG5ldyBHaXQoZGJUYXJnZXQpOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1bGxDb21tYW5kV2l0aFJlYmFzZVRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRXaXRoUmViYXNlVGVzdC5qYXZhCmluZGV4IGNjZTA0ZjQuLmUyZDc5MjMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRXaXRoUmViYXNlVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVsbENvbW1hbmRXaXRoUmViYXNlVGVzdC5qYXZhCkBAIC0zMjMsNiArMzIzLDcgQEAgcHVibGljIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJZGJUYXJnZXQgPSBjcmVhdGVXb3JrUmVwb3NpdG9yeSgpOwogCQlzb3VyY2UgPSBuZXcgR2l0KGRiKTsKIAkJdGFyZ2V0ID0gbmV3IEdpdChkYlRhcmdldCk7CisJCWFkZFJlcG9Ub0Nsb3NlKGRiVGFyZ2V0KTsKIAogCQkvLyBwdXQgc29tZSBmaWxlIGluIHRoZSBzb3VyY2UgcmVwbwogCQlzb3VyY2VGaWxlID0gbmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgIlNvbWVGaWxlLnR4dCIpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdXNoQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVzaENvbW1hbmRUZXN0LmphdmEKaW5kZXggYTc4NjA2NS4uNmY3YWE2MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdXNoQ29tbWFuZFRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1c2hDb21tYW5kVGVzdC5qYXZhCkBAIC0xMCw3ICsxMCw5IEBACiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuYXBpOwogCiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhyb3dzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKIApAQCAtMTksMTAgKzIxLDEzIEBACiBpbXBvcnQgamF2YS5uZXQuVVJJU3ludGF4RXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5Qcm9wZXJ0aWVzOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkRldGFjaGVkSGVhZEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuR2l0QVBJRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5JbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuSkdpdEludGVybmFsRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5UcmFuc3BvcnRFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTWlzc2luZ09iamVjdEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5Ob1JlbW90ZVJlcG9zaXRvcnlFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5ob29rcy5QcmVQdXNoSG9vazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LkpHaXRUZXN0VXRpbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LlJlcG9zaXRvcnlUZXN0Q2FzZTsKQEAgLTMyLDYgKzM3LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlN0b3JlZENvbmZpZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlB1c2hDb25maWcuUHVzaERlZmF1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHVzaFJlc3VsdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZWZMZWFzZVNwZWM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVmU3BlYzsKQEAgLTUwLDYgKzU2LDcgQEAgcHVibGljIHZvaWQgdGVzdFB1c2goKSB0aHJvd3MgSkdpdEludGVybmFsRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwKIAogCQkvLyBjcmVhdGUgb3RoZXIgcmVwb3NpdG9yeQogCQlSZXBvc2l0b3J5IGRiMiA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7CisJCWFkZFJlcG9Ub0Nsb3NlKGRiMik7CiAJCWZpbmFsIFN0b3JlZENvbmZpZyBjb25maWcyID0gZGIyLmdldENvbmZpZygpOwogCiAJCS8vIHRoaXMgdGVzdHMgdGhhdCB0aGlzIGNvbmZpZyBjYW4gYmUgcGFyc2VkIHByb3Blcmx5CkBAIC0yODksNiArMjk2LDc3MCBAQCBwdWJsaWMgdm9pZCB0ZXN0UHVzaFdpdGhvdXRQdXNoUmVmU3BlYygpIHRocm93cyBFeGNlcHRpb24gewogCX0KIAogCS8qKgorCSAqIENoZWNrIHRoYXQgcHVzaGluZyBmcm9tIGEgZGV0YWNoZWQgSEVBRCB3aXRob3V0IHJlZnNwZWMgdGhyb3dzIGEKKwkgKiBEZXRhY2hlZEhlYWRFeGNlcHRpb24uCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0RGV0YWNoZWRIZWFkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJZmluYWwgU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKKworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibm90LXB1c2hlZCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJicmFuY2h0b3B1c2giKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZShjb21taXQuZ2V0TmFtZSgpKS5jYWxsKCk7CisJCQlTdHJpbmcgaGVhZCA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0RnVsbEJyYW5jaCgpOworCQkJYXNzZXJ0VHJ1ZShPYmplY3RJZC5pc0lkKGhlYWQpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0TmFtZSgpLCBoZWFkKTsKKwkJCWFzc2VydFRocm93cyhEZXRhY2hlZEhlYWRFeGNlcHRpb24uY2xhc3MsCisJCQkJCSgpIC0+IGdpdC5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0IikuY2FsbCgpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgcHVzaC5kZWZhdWx0PW5vdGhpbmcgd2l0aG91dCByZWZzcGVjIHRocm93cyBhbgorCSAqIEludmFsaWRSZWZOYW1lRXhjZXB0aW9uLgorCSAqCisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQdXNoRGVmYXVsdE5vdGhpbmcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlmaW5hbCBTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWFzc2VydFRocm93cyhJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJKCkgLT4gZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKQorCQkJCQkJCS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5OT1RISU5HKS5jYWxsKCkpOworCQl9CisJfQorCisJLyoqCisJICogQ2hlY2sgdGhhdCBwdXNoLmRlZmF1bHQ9bWF0Y2hpbmcgd2l0aG91dCByZWZzcGVjIHB1c2hlcyBhbGwgbWF0Y2hpbmcKKwkgKiBicmFuY2hlcy4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHVzaERlZmF1bHRNYXRjaGluZygpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCWZpbmFsIFN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKAorCQkJCQluZXcgUmVmU3BlYygiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKSk7CisJCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7CisJCQljb25maWcuc2F2ZSgpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCS8vIHB1c2ggbWFzdGVyIGFuZCBicmFuY2h0b3B1c2gKKwkJCWdpdC5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0Iikuc2V0UmVmU3BlY3MoCisJCQkJCW5ldyBSZWZTcGVjKCJyZWZzL2hlYWRzL21hc3RlcjpyZWZzL2hlYWRzL21hc3RlciIpLAorCQkJCQluZXcgUmVmU3BlYygKKwkJCQkJCQkicmVmcy9oZWFkcy9icmFuY2h0b3B1c2g6cmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSkKKwkJCQkJLmNhbGwoKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCS8vIENyZWF0ZSB0d28gZGlmZmVyZW50IGNvbW1pdHMgb24gdGhlc2UgdHdvIGJyYW5jaGVzCisJCQl3cml0ZVRyYXNoRmlsZSgiYiIsICJvbiBicmFuY2h0b3B1c2giKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiYiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBiQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIm9uIGJyYW5jaHRvcHVzaCIpCisJCQkJCS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCQl3cml0ZVRyYXNoRmlsZSgibSIsICJvbiBtYXN0ZXIiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigibSIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBtQ29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIm9uIG1hc3RlciIpLmNhbGwoKTsKKwkJCS8vIE5vdyBwdXNoIHdpdGggbW9kZSAibWF0Y2hpbmciOiBzaG91bGQgcHVzaCBib3RoIGJyYW5jaGVzLgorCQkJSXRlcmFibGU8UHVzaFJlc3VsdD4gcmVzdWx0ID0gZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKQorCQkJCQkuc2V0UHVzaERlZmF1bHQoUHVzaERlZmF1bHQuTUFUQ0hJTkcpCisJCQkJCS5jYWxsKCk7CisJCQlpbnQgbiA9IDA7CisJCQlmb3IgKFB1c2hSZXN1bHQgciA6IHJlc3VsdCkgeworCQkJCW4rKzsKKwkJCQlhc3NlcnRFcXVhbHMoMSwgbik7CisJCQkJYXNzZXJ0RXF1YWxzKDIsIHIuZ2V0UmVtb3RlVXBkYXRlcygpLnNpemUoKSk7CisJCQkJZm9yIChSZW1vdGVSZWZVcGRhdGUgdXBkYXRlIDogci5nZXRSZW1vdGVVcGRhdGVzKCkpIHsKKwkJCQkJYXNzZXJ0RmFsc2UodXBkYXRlLmlzTWF0Y2hpbmcoKSk7CisJCQkJCWFzc2VydFRydWUodXBkYXRlLmdldFNyY1JlZigpCisJCQkJCQkJLmVxdWFscygicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKQorCQkJCQkJCXx8IHVwZGF0ZS5nZXRTcmNSZWYoKS5lcXVhbHMoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJCQlhc3NlcnRFcXVhbHMoUmVtb3RlUmVmVXBkYXRlLlN0YXR1cy5PSywgdXBkYXRlLmdldFN0YXR1cygpKTsKKwkJCQl9CisJCQl9CisJCQlhc3NlcnRFcXVhbHMoYkNvbW1pdC5nZXRJZCgpLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL25vdC1wdXNoZWQiKSk7CisJCQlhc3NlcnRFcXVhbHMobUNvbW1pdC5nZXRJZCgpLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWFzc2VydEVxdWFscyhiQ29tbWl0LmdldElkKCksIGdpdC5nZXRSZXBvc2l0b3J5KCkKKwkJCQkJLnJlc29sdmUoInJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsIGdpdC5nZXRSZXBvc2l0b3J5KCkKKwkJCQkJLnJlc29sdmUoInJlZnMvcmVtb3Rlcy9vcmlnaW4vbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhtQ29tbWl0LmdldElkKCksCisJCQkJCWdpdC5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9yZW1vdGVzL29yaWdpbi9tYXN0ZXIiKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IHB1c2guZGVmYXVsdD11cHN0cmVhbSB3aXRob3V0IHJlZnNwZWMgcHVzaGVzIG9ubHkgdGhlIGN1cnJlbnQKKwkgKiBicmFuY2ggdG8gdGhlIGNvbmZpZ3VyZWQgdXBzdHJlYW0uCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0VXBzdHJlYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgInJlbW90ZSIsICJ0ZXN0Iik7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgIm1lcmdlIiwKKwkJCQkJInJlZnMvaGVhZHMvdXBzdHJlYW1icmFuY2giKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL3Vwc3RyZWFtYnJhbmNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWdpdC5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0Iikuc2V0UHVzaERlZmF1bHQoUHVzaERlZmF1bHQuVVBTVFJFQU0pCisJCQkJCS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvdXBzdHJlYW1icmFuY2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXRJZCgpLCBnaXQuZ2V0UmVwb3NpdG9yeSgpCisJCQkJCS5yZXNvbHZlKCJyZWZzL3JlbW90ZXMvb3JpZ2luL3Vwc3RyZWFtYnJhbmNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsIGdpdC5nZXRSZXBvc2l0b3J5KCkKKwkJCQkJLnJlc29sdmUoInJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNodG9wdXNoIikpOworCQl9CisJfQorCisJLyoqCisJICogQ2hlY2sgdGhhdCBwdXNoLmRlZmF1bHQ9dXBzdHJlYW0gd2l0aG91dCByZWZzcGVjIHRocm93cyBhbgorCSAqIEludmFsaWRSZWZOYW1lRXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IGJyYW5jaCBoYXMgbm8gdXBzdHJlYW0uCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0VXBzdHJlYW1Ob1RyYWNraW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgInJlbW90ZSIsICJ0ZXN0Iik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQlhc3NlcnRUaHJvd3MoSW52YWxpZFJlZk5hbWVFeGNlcHRpb24uY2xhc3MsCisJCQkJCSgpIC0+IGdpdC5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0IikKKwkJCQkJCQkuc2V0UHVzaERlZmF1bHQoUHVzaERlZmF1bHQuVVBTVFJFQU0pLmNhbGwoKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IHB1c2guZGVmYXVsdD11cHN0cmVhbSB3aXRob3V0IHJlZnNwZWMgdGhyb3dzIGFuCisJICogSW52YWxpZFJlZk5hbWVFeGNlcHRpb24gaWYgdGhlIHB1c2ggcmVtb3RlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgZmV0Y2gKKwkgKiByZW1vdGUuCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0VXBzdHJlYW1Ucmlhbmd1bGFyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQkvLyBEb24ndCBjb25maWd1cmUgYSByZW1vdGU7IGl0J2xsIGRlZmF1bHQgdG8gIm9yaWdpbiIuCisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgIm1lcmdlIiwKKwkJCQkJInVwc3RyZWFtYnJhbmNoIik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQlhc3NlcnRUaHJvd3MoSW52YWxpZFJlZk5hbWVFeGNlcHRpb24uY2xhc3MsCisJCQkJCSgpIC0+IGdpdC5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0IikKKwkJCQkJCQkuc2V0UHVzaERlZmF1bHQoUHVzaERlZmF1bHQuVVBTVFJFQU0pLmNhbGwoKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IHB1c2guZGVmYXVsdD1zaW1wbGUgd2l0aG91dCByZWZzcGVjIHB1c2hlcyBvbmx5IHRoZSBjdXJyZW50CisJICogYnJhbmNoIHRvIHRoZSBjb25maWd1cmVkIHVwc3RyZWFtIG5hbWUuCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0U2ltcGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKKworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibm90LXB1c2hlZCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJicmFuY2h0b3B1c2giKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCisJCQljb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJyZW1vdGUiLCAidGVzdCIpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJtZXJnZSIsCisJCQkJCSJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWdpdC5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0Iikuc2V0UHVzaERlZmF1bHQoUHVzaERlZmF1bHQuU0lNUExFKQorCQkJCQkuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXRJZCgpLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL25vdC1wdXNoZWQiKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksIGdpdC5nZXRSZXBvc2l0b3J5KCkKKwkJCQkJLnJlc29sdmUoInJlZnMvcmVtb3Rlcy9vcmlnaW4vYnJhbmNodG9wdXNoIikpOworCQl9CisJfQorCisJLyoqCisJICogQ2hlY2sgdGhhdCBwdXNoLmRlZmF1bHQ9c2ltcGxlIHdpdGhvdXQgcmVmc3BlYyBwdXNoZXMgb25seSB0aGUgY3VycmVudAorCSAqIGJyYW5jaCB0byBhIGJyYW5jaCB3aXRoIHRoZSBzYW1lIG5hbWUgaW4gYSB0cmlhbmd1bGFyIHdvcmtmbG93LgorCSAqCisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQdXNoRGVmYXVsdFNpbXBsZVRyaWFuZ3VsYXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQkvLyBEb24ndCBzZXQgcmVtb3RlLCBpdCdsbCBkZWZhdWx0IHRvICJvcmlnaW4iLiBDb25maWd1cmUgYQorCQkJLy8gZGlmZmVyZW50IGJyYW5jaCBuYW1lOyBzaG91bGQgYmUgaWdub3JlZC4KKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAibWVyZ2UiLAorCQkJCQkicmVmcy9oZWFkcy91cHN0cmVhbWJyYW5jaCIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvdXBzdHJlYW1icmFuY2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5TSU1QTEUpCisJCQkJCS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvdXBzdHJlYW1icmFuY2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJYXNzZXJ0RXF1YWxzKGNvbW1pdC5nZXRJZCgpLCBnaXQuZ2V0UmVwb3NpdG9yeSgpCisJCQkJCS5yZXNvbHZlKCJyZWZzL3JlbW90ZXMvb3JpZ2luL2JyYW5jaHRvcHVzaCIpKTsKKwkJfQorCX0KKworCS8qKgorCSAqIENoZWNrIHRoYXQgcHVzaC5kZWZhdWx0PXNpbXBsZSB3aXRob3V0IHJlZnNwZWMgdGhyb3dzIGFuCisJICogSW52YWxpZFJlZk5hbWVFeGNlcHRpb24gaWYgdGhlIGN1cnJlbnQgYnJhbmNoIGhhcyBubyB1cHN0cmVhbS4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UHVzaERlZmF1bHRTaW1wbGVOb1RyYWNraW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgInJlbW90ZSIsICJ0ZXN0Iik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQlhc3NlcnRUaHJvd3MoSW52YWxpZFJlZk5hbWVFeGNlcHRpb24uY2xhc3MsCisJCQkJCSgpIC0+IGdpdC5wdXNoKCkuc2V0UmVtb3RlKCJ0ZXN0IikKKwkJCQkJCQkuc2V0UHVzaERlZmF1bHQoUHVzaERlZmF1bHQuU0lNUExFKS5jYWxsKCkpOworCQl9CisJfQorCisJLyoqCisJICogQ2hlY2sgdGhhdCBwdXNoLmRlZmF1bHQ9c2ltcGxlIHdpdGhvdXQgcmVmc3BlYyB0aHJvd3MgYW4KKwkgKiBJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBicmFuY2ggaGFzIGFuIHVwc3RyZWFtIHdpdGggYQorCSAqIGRpZmZlcmVudCBuYW1lLgorCSAqCisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQdXNoRGVmYXVsdFNpbXBsZURpZmZlcmVudFRyYWNraW5nKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgInJlbW90ZSIsICJ0ZXN0Iik7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgIm1lcmdlIiwKKwkJCQkJInJlZnMvaGVhZHMvdXBzdHJlYW1icmFuY2giKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCWFzc2VydFRocm93cyhJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJKCkgLT4gZ2l0LnB1c2goKS5zZXRSZW1vdGUoInRlc3QiKQorCQkJCQkJCS5zZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdC5TSU1QTEUpLmNhbGwoKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IGlmIG5vIFB1c2hEZWZhdWx0IGlzIHNldCwgdGhlIHZhbHVlIGlzIHJlYWQgZnJvbSB0aGUgZ2l0CisJICogY29uZmlnLgorCSAqCisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RQdXNoRGVmYXVsdEZyb21Db25maWcoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNldFN0cmluZygicHVzaCIsIG51bGwsICJkZWZhdWx0IiwgInVwc3RyZWFtIik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQl3cml0ZVRyYXNoRmlsZSgiZiIsICJjb250ZW50IG9mIGYiKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiZiIpLmNhbGwoKTsKKwkJCVJldkNvbW1pdCBjb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAicmVtb3RlIiwgInRlc3QiKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAibWVyZ2UiLAorCQkJCQkicmVmcy9oZWFkcy91cHN0cmVhbWJyYW5jaCIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvdXBzdHJlYW1icmFuY2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJUHVzaENvbW1hbmQgY21kID0gZ2l0LnB1c2goKTsKKwkJCWNtZC5zZXRSZW1vdGUoInRlc3QiKS5zZXRQdXNoRGVmYXVsdChudWxsKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoUHVzaERlZmF1bHQuVVBTVFJFQU0sIGNtZC5nZXRQdXNoRGVmYXVsdCgpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL2JyYW5jaHRvcHVzaCIpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy91cHN0cmVhbWJyYW5jaCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL25vdC1wdXNoZWQiKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9tYXN0ZXIiKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksIGdpdC5nZXRSZXBvc2l0b3J5KCkKKwkJCQkJLnJlc29sdmUoInJlZnMvcmVtb3Rlcy9vcmlnaW4vdXBzdHJlYW1icmFuY2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwgZ2l0LmdldFJlcG9zaXRvcnkoKQorCQkJCQkucmVzb2x2ZSgicmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2h0b3B1c2giKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IGlmIG5vIFB1c2hEZWZhdWx0IGlzIHNldCBhbmQgbm9uZSBpcyBzZXQgaW4gdGhlIGdpdCBjb25maWcsIGl0CisJICogZGVmYXVsdHMgdG8gInNpbXBsZSIuCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFB1c2hEZWZhdWx0RnJvbUNvbmZpZ0RlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlSZXZDb21taXQgY29tbWl0ID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgInJlbW90ZSIsICJ0ZXN0Iik7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgIm1lcmdlIiwKKwkJCQkJInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKSk7CisJCQlhc3NlcnRFcXVhbHMobnVsbCwKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkucmVzb2x2ZSgicmVmcy9oZWFkcy9ub3QtcHVzaGVkIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbWFzdGVyIikpOworCQkJUHVzaENvbW1hbmQgY21kID0gZ2l0LnB1c2goKTsKKwkJCWNtZC5zZXRSZW1vdGUoInRlc3QiKS5zZXRQdXNoRGVmYXVsdChudWxsKS5jYWxsKCk7CisJCQlhc3NlcnRFcXVhbHMoUHVzaERlZmF1bHQuU0lNUExFLCBjbWQuZ2V0UHVzaERlZmF1bHQoKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwgZ2l0LmdldFJlcG9zaXRvcnkoKQorCQkJCQkucmVzb2x2ZSgicmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2h0b3B1c2giKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IGJyYW5jaC48bmFtZT4ucHVzaFJlbW90ZSBvdmVycmlkZXMgYW55dGhpbmcgZWxzZS4KKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0QnJhbmNoUHVzaFJlbW90ZSgpIHRocm93cyBFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKKwkJCQlHaXQgZ2l0MiA9IG5ldyBHaXQoY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkpIHsKKwkJCVN0b3JlZENvbmZpZyBjb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJUmVtb3RlQ29uZmlnIHJlbW90ZUNvbmZpZyA9IG5ldyBSZW1vdGVDb25maWcoY29uZmlnLCAidGVzdCIpOworCQkJVVJJaXNoIHVyaSA9IG5ldyBVUklpc2goCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLmdldERpcmVjdG9yeSgpLnRvVVJJKCkudG9VUkwoKSk7CisJCQlyZW1vdGVDb25maWcuYWRkVVJJKHVyaSk7CisJCQlyZW1vdGVDb25maWcuYWRkRmV0Y2hSZWZTcGVjKAorCQkJCQluZXcgUmVmU3BlYygiK3JlZnMvaGVhZHMvKjpyZWZzL3JlbW90ZXMvb3JpZ2luLyoiKSk7CisJCQlyZW1vdGVDb25maWcudXBkYXRlKGNvbmZpZyk7CisJCQljb25maWcuc2V0U3RyaW5nKCJyZW1vdGUiLCBudWxsLCAicHVzaERlZmF1bHQiLCAidGVzdCIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAicmVtb3RlIiwgInRlc3QiKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAicHVzaHJlbW90ZSIsICJvcmlnaW4iKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAibWVyZ2UiLAorCQkJCQkicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCWFzc2VydFRocm93cyhJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbi5jbGFzcywgKCkgLT4gZ2l0LnB1c2goKQorCQkJCQkuc2V0UHVzaERlZmF1bHQoUHVzaERlZmF1bHQuVVBTVFJFQU0pLmNhbGwoKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IHJlbW90ZS5wdXNoRGVmYXVsdCBvdmVycmlkZXMgYnJhbmNoLjxuYW1lPi5yZW1vdGUKKwkgKgorCSAqIEB0aHJvd3MgRXhjZXB0aW9uCisJICovCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UmVtb3RlUHVzaERlZmF1bHQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CisJCQkJR2l0IGdpdDIgPSBuZXcgR2l0KGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpKSB7CisJCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCVJlbW90ZUNvbmZpZyByZW1vdGVDb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKGNvbmZpZywgInRlc3QiKTsKKwkJCVVSSWlzaCB1cmkgPSBuZXcgVVJJaXNoKAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5nZXREaXJlY3RvcnkoKS50b1VSSSgpLnRvVVJMKCkpOworCQkJcmVtb3RlQ29uZmlnLmFkZFVSSSh1cmkpOworCQkJcmVtb3RlQ29uZmlnLmFkZEZldGNoUmVmU3BlYygKKwkJCQkJbmV3IFJlZlNwZWMoIityZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qIikpOworCQkJcmVtb3RlQ29uZmlnLnVwZGF0ZShjb25maWcpOworCQkJY29uZmlnLnNldFN0cmluZygicmVtb3RlIiwgbnVsbCwgInB1c2hEZWZhdWx0IiwgIm9yaWdpbiIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJd3JpdGVUcmFzaEZpbGUoImYiLCAiY29udGVudCBvZiBmIik7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImYiKS5jYWxsKCk7CisJCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiYWRkaW5nIGYiKS5jYWxsKCk7CisKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm5vdC1wdXNoZWQiKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgiYnJhbmNodG9wdXNoIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKworCQkJY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAicmVtb3RlIiwgInRlc3QiKTsKKwkJCWNvbmZpZy5zZXRTdHJpbmcoImJyYW5jaCIsICJicmFuY2h0b3B1c2giLCAibWVyZ2UiLAorCQkJCQkicmVmcy9oZWFkcy9icmFuY2h0b3B1c2giKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCWFzc2VydFRocm93cyhJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbi5jbGFzcywgKCkgLT4gZ2l0LnB1c2goKQorCQkJCQkuc2V0UHVzaERlZmF1bHQoUHVzaERlZmF1bHQuVVBTVFJFQU0pLmNhbGwoKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IHVsdGltYXRlbHkgd2UgZmFsbCBiYWNrIHRvICJvcmlnaW4iLgorCSAqCisJICogQHRocm93cyBFeGNlcHRpb24KKwkgKi8KKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3REZWZhdWx0UmVtb3RlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoImFkZGluZyBmIikuY2FsbCgpOworCisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJub3QtcHVzaGVkIikuc2V0Q3JlYXRlQnJhbmNoKHRydWUpLmNhbGwoKTsKKwkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoImJyYW5jaHRvcHVzaCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisKKwkJCWNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQljb25maWcuc2V0U3RyaW5nKCJicmFuY2giLCAiYnJhbmNodG9wdXNoIiwgIm1lcmdlIiwKKwkJCQkJInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIik7CisJCQljb25maWcuc2F2ZSgpOworCisJCQlQdXNoQ29tbWFuZCBjbWQgPSBnaXQucHVzaCgpLnNldFB1c2hEZWZhdWx0KFB1c2hEZWZhdWx0LlVQU1RSRUFNKTsKKwkJCVRyYW5zcG9ydEV4Y2VwdGlvbiBlID0gYXNzZXJ0VGhyb3dzKFRyYW5zcG9ydEV4Y2VwdGlvbi5jbGFzcywKKwkJCQkJKCkgLT4gY21kLmNhbGwoKSk7CisJCQlhc3NlcnRFcXVhbHMoTm9SZW1vdGVSZXBvc2l0b3J5RXhjZXB0aW9uLmNsYXNzLAorCQkJCQllLmdldENhdXNlKCkuZ2V0Q2xhc3MoKSk7CisJCQlhc3NlcnRFcXVhbHMoIm9yaWdpbiIsIGNtZC5nZXRSZW1vdGUoKSk7CisJCX0KKwl9CisKKwkvKioKKwkgKiBDaGVjayB0aGF0IGEgcHVzaCB3aXRob3V0IHNwZWNpZnlpbmcgYSByZW1vdGUgb3IgbW9kZSBvciBhbnl0aGluZyBjYW4KKwkgKiBzdWNjZWVkIGlmIHRoZSBnaXQgY29uZmlnIGlzIGNvcnJlY3QuCisJICoKKwkgKiBAdGhyb3dzIEV4Y2VwdGlvbgorCSAqLworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlZmF1bHRQdXNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOworCQkJCUdpdCBnaXQyID0gbmV3IEdpdChjcmVhdGVCYXJlUmVwb3NpdG9yeSgpKSkgeworCQkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCQlSZW1vdGVDb25maWcgcmVtb3RlQ29uZmlnID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsICJ0ZXN0Iik7CisJCQlVUklpc2ggdXJpID0gbmV3IFVSSWlzaCgKKwkJCQkJZ2l0Mi5nZXRSZXBvc2l0b3J5KCkuZ2V0RGlyZWN0b3J5KCkudG9VUkkoKS50b1VSTCgpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRVUkkodXJpKTsKKwkJCXJlbW90ZUNvbmZpZy5hZGRGZXRjaFJlZlNwZWMoCisJCQkJCW5ldyBSZWZTcGVjKCIrcmVmcy9oZWFkcy8qOnJlZnMvcmVtb3Rlcy9vcmlnaW4vKiIpKTsKKwkJCXJlbW90ZUNvbmZpZy51cGRhdGUoY29uZmlnKTsKKwkJCWNvbmZpZy5zYXZlKCk7CisKKwkJCXdyaXRlVHJhc2hGaWxlKCJmIiwgImNvbnRlbnQgb2YgZiIpOworCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmIikuY2FsbCgpOworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJhZGRpbmcgZiIpLmNhbGwoKTsKKworCQkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibm90LXB1c2hlZCIpLnNldENyZWF0ZUJyYW5jaCh0cnVlKS5jYWxsKCk7CisJCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJicmFuY2h0b3B1c2giKS5zZXRDcmVhdGVCcmFuY2godHJ1ZSkuY2FsbCgpOworCisJCQljb25maWcgPSBnaXQuZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpOworCQkJY29uZmlnLnNldFN0cmluZygiYnJhbmNoIiwgImJyYW5jaHRvcHVzaCIsICJyZW1vdGUiLCAidGVzdCIpOworCQkJY29uZmlnLnNhdmUoKTsKKworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCS8vIFNob3VsZCB1c2UgcmVtb3RlICJ0ZXN0IiwgcHVzaC5kZWZhdWx0PWN1cnJlbnQKKwkJCVB1c2hDb21tYW5kIGNtZCA9IGdpdC5wdXNoKCk7CisJCQljbWQuY2FsbCgpOworCQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0IiwgY21kLmdldFJlbW90ZSgpKTsKKwkJCWFzc2VydEVxdWFscyhQdXNoRGVmYXVsdC5DVVJSRU5ULCBjbWQuZ2V0UHVzaERlZmF1bHQoKSk7CisJCQlhc3NlcnRFcXVhbHMoY29tbWl0LmdldElkKCksCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvYnJhbmNodG9wdXNoIikpOworCQkJYXNzZXJ0RXF1YWxzKG51bGwsCisJCQkJCWdpdDIuZ2V0UmVwb3NpdG9yeSgpLnJlc29sdmUoInJlZnMvaGVhZHMvbm90LXB1c2hlZCIpKTsKKwkJCWFzc2VydEVxdWFscyhudWxsLAorCQkJCQlnaXQyLmdldFJlcG9zaXRvcnkoKS5yZXNvbHZlKCJyZWZzL2hlYWRzL21hc3RlciIpKTsKKwkJCWFzc2VydEVxdWFscyhjb21taXQuZ2V0SWQoKSwgZ2l0LmdldFJlcG9zaXRvcnkoKQorCQkJCQkucmVzb2x2ZSgicmVmcy9yZW1vdGVzL29yaWdpbi9icmFuY2h0b3B1c2giKSk7CisJCX0KKwl9CisKKwkvKioKIAkgKiBDaGVjayB0aGF0IG1pc3NpbmcgcmVmcyBkb24ndCBjYXVzZSBlcnJvcnMgZHVyaW5nIHB1c2gKIAkgKgogCSAqIEB0aHJvd3MgRXhjZXB0aW9uCkBAIC0yOTcsNiArMTA2OCw3IEBAIHB1YmxpYyB2b2lkIHRlc3RQdXNoV2l0aG91dFB1c2hSZWZTcGVjKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJcHVibGljIHZvaWQgdGVzdFB1c2hBZnRlckdDKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCS8vIGNyZWF0ZSBvdGhlciByZXBvc2l0b3J5CiAJCVJlcG9zaXRvcnkgZGIyID0gY3JlYXRlV29ya1JlcG9zaXRvcnkoKTsKKwkJYWRkUmVwb1RvQ2xvc2UoZGIyKTsKIAogCQkvLyBzZXR1cCB0aGUgZmlyc3QgcmVwb3NpdG9yeQogCQlmaW5hbCBTdG9yZWRDb25maWcgY29uZmlnID0gZGIuZ2V0Q29uZmlnKCk7CkBAIC0zNjAsNiArMTEzMiw3IEBAIHB1YmxpYyB2b2lkIHRlc3RQdXNoV2l0aExlYXNlKCkgdGhyb3dzIEpHaXRJbnRlcm5hbEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sCiAKIAkJLy8gY3JlYXRlIG90aGVyIHJlcG9zaXRvcnkKIAkJUmVwb3NpdG9yeSBkYjIgPSBjcmVhdGVXb3JrUmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShkYjIpOwogCiAJCS8vIHNldHVwIHRoZSBmaXJzdCByZXBvc2l0b3J5CiAJCWZpbmFsIFN0b3JlZENvbmZpZyBjb25maWcgPSBkYi5nZXRDb25maWcoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZFRlc3QuamF2YQppbmRleCA4NjIzOTAyLi5jNjRmZjBiIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JlYmFzZUNvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kVGVzdC5qYXZhCkBAIC0yOTI3LDggKzI5MjcsOCBAQCBwdWJsaWMgU3RyaW5nIG1vZGlmeUNvbW1pdE1lc3NhZ2UoU3RyaW5nIGNvbW1pdCkgewogCQl9CiAJfQogCi0JQFRlc3QKLQlwdWJsaWMgdm9pZCB0ZXN0UmViYXNlSW50ZXJhY3RpdmVGaXh1cFdpdGhCbGFua0xpbmVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJcHJpdmF0ZSB2b2lkIHNpbXBsZUZpeHVwKFN0cmluZyBmaXJzdE1lc3NhZ2UsIFN0cmluZyBzZWNvbmRNZXNzYWdlKQorCQkJdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCS8vIGNyZWF0ZSBmaWxlMSBvbiBtYXN0ZXIKIAkJd3JpdGVUcmFzaEZpbGUoRklMRTEsIEZJTEUxKTsKIAkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKEZJTEUxKS5jYWxsKCk7CkBAIC0yOTM4LDEzICsyOTM4LDEzIEBAIHB1YmxpYyB2b2lkIHRlc3RSZWJhc2VJbnRlcmFjdGl2ZUZpeHVwV2l0aEJsYW5rTGluZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gY3JlYXRlIGZpbGUyIG9uIG1hc3RlcgogCQl3cml0ZVRyYXNoRmlsZSgiZmlsZTIiLCAiZmlsZTIiKTsKIAkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCJmaWxlMiIpLmNhbGwoKTsKLQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkFkZCBmaWxlMiIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoZmlyc3RNZXNzYWdlKS5jYWxsKCk7CiAJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImZpbGUyIikuZXhpc3RzKCkpOwogCiAJCS8vIHVwZGF0ZSBGSUxFMSBvbiBtYXN0ZXIKIAkJd3JpdGVUcmFzaEZpbGUoRklMRTEsICJibGFoIik7CiAJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihGSUxFMSkuY2FsbCgpOwotCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgidXBkYXRlZCBmaWxlMSBvbiBtYXN0ZXJcblxuc29tZSB0ZXh0IikuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZShzZWNvbmRNZXNzYWdlKS5jYWxsKCk7CiAKIAkJZ2l0LnJlYmFzZSgpLnNldFVwc3RyZWFtKCJIRUFEfjIiKQogCQkJCS5ydW5JbnRlcmFjdGl2ZWx5KG5ldyBJbnRlcmFjdGl2ZUhhbmRsZXIoKSB7CkBAIC0yOTY4LDkgKzI5NjgsMzEgQEAgcHVibGljIFN0cmluZyBtb2RpZnlDb21taXRNZXNzYWdlKFN0cmluZyBjb21taXQpIHsKIAkJdHJ5IChSZXZXYWxrIHdhbGsgPSBuZXcgUmV2V2FsayhkYikpIHsKIAkJCU9iamVjdElkIGhlYWRJZCA9IGRiLnJlc29sdmUoQ29uc3RhbnRzLkhFQUQpOwogCQkJUmV2Q29tbWl0IGhlYWRDb21taXQgPSB3YWxrLnBhcnNlQ29tbWl0KGhlYWRJZCk7Ci0JCQlhc3NlcnRFcXVhbHMoIkFkZCBmaWxlMiIsCi0JCQkJCWhlYWRDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlhc3NlcnRFcXVhbHMoZmlyc3RNZXNzYWdlLCBoZWFkQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCkpOwogCQl9CisKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RSZWJhc2VJbnRlcmFjdGl2ZUZpeHVwV2l0aEJsYW5rTGluZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJc2ltcGxlRml4dXAoIkFkZCBmaWxlMiIsICJ1cGRhdGVkIGZpbGUxIG9uIG1hc3RlclxuXG5zb21lIHRleHQiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RSZWJhc2VJbnRlcmFjdGl2ZUZpeHVwV2l0aEJsYW5rTGluZXMyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNpbXBsZUZpeHVwKCJBZGQgZmlsZTJcblxuQm9keVxuIiwKKwkJCQkidXBkYXRlZCBmaWxlMSBvbiBtYXN0ZXJcblxuc29tZSB0ZXh0Iik7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UmViYXNlSW50ZXJhY3RpdmVGaXh1cFdpdGhIYXNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXNpbXBsZUZpeHVwKCIjQWRkIGZpbGUyIiwgInVwZGF0ZWQgZmlsZTEgb24gbWFzdGVyIik7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UmViYXNlSW50ZXJhY3RpdmVGaXh1cFdpdGhIYXNoMigpIHRocm93cyBFeGNlcHRpb24geworCQlzaW1wbGVGaXh1cCgiI0FkZCBmaWxlMlxuXG5IZWFkZXIgaGFzIGhhc2hcbiIsCisJCQkJIiN1cGRhdGVkIGZpbGUxIG9uIG1hc3RlciIpOwogCX0KIAogCUBUZXN0KGV4cGVjdGVkID0gSW52YWxpZFJlYmFzZVN0ZXBFeGNlcHRpb24uY2xhc3MpCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmRUZXN0LmphdmEKaW5kZXggY2ZhODQ4Ni4uMWM3YjhkMSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXZlcnRDb21tYW5kVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZFRlc3QuamF2YQpAQCAtOSw2ICs5LDcgQEAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTsKIAoraW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROb3ROdWxsOwpAQCAtMTY2LDcgKzE2Nyw5IEBAIHB1YmxpYyB2b2lkIHRlc3RSZXZlcnRNdWx0aXBsZVdpdGhGYWlsKCkgdGhyb3dzIElPRXhjZXB0aW9uLAogCiAJCQljaGVja0ZpbGUobmV3IEZpbGUoZGIuZ2V0V29ya1RyZWUoKSwgImEiKSwgImZpcnN0XG4iCiAJCQkJCSsgIjw8PDw8PDwgbWFzdGVyXG4iICsgInNlY29uZFxuIiArICJ0aGlyZFxuIiArICI9PT09PT09XG4iCi0JCQkJCSsgIj4+Pj4+Pj4gIiArIHNlY29uZENvbW1pdC5nZXRJZCgpLmFiYnJldmlhdGUoNykubmFtZSgpCisJCQkJCSsgIj4+Pj4+Pj4gIgorCQkJCQkrIHNlY29uZENvbW1pdC5nZXRJZCgpCisJCQkJCQkJLmFiYnJldmlhdGUoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKS5uYW1lKCkKIAkJCQkJKyAiIGFkZCBzZWNvbmRcbiIpOwogCQkJSXRlcmF0b3I8UmV2Q29tbWl0PiBoaXN0b3J5ID0gZ2l0LmxvZygpLmNhbGwoKS5pdGVyYXRvcigpOwogCQkJUmV2Q29tbWl0IHJldmVydENvbW1pdCA9IGhpc3RvcnkubmV4dCgpOwpAQCAtMjMyLDcgKzIzNSw3IEBAIHB1YmxpYyB2b2lkIHRlc3RSZXZlcnRDb25mbGljdFJlc29sdXRpb24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5NRVJHRV9NU0cpLmV4aXN0cygpKTsKIAkJCWFzc2VydEVxdWFscygiUmV2ZXJ0IFwiIiArIHNpZGVDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCkKIAkJCQkJKyAiXCJcblxuVGhpcyByZXZlcnRzIGNvbW1pdCAiICsgc2lkZUNvbW1pdC5nZXRJZCgpLmdldE5hbWUoKQotCQkJCQkrICIuXG5cbkNvbmZsaWN0czpcblx0YVxuIiwKKwkJCQkJKyAiLlxuXG4jIENvbmZsaWN0czpcbiNcdGFcbiIsCiAJCQkJCWRiLnJlYWRNZXJnZUNvbW1pdE1zZygpKTsKIAkJCWFzc2VydFRydWUobmV3IEZpbGUoZGIuZ2V0RGlyZWN0b3J5KCksIENvbnN0YW50cy5SRVZFUlRfSEVBRCkKIAkJCQkJLmV4aXN0cygpKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3RhdHVzQ29tbWFuZFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3RhdHVzQ29tbWFuZFRlc3QuamF2YQppbmRleCA1MzExZWRiLi4xOTI4MWY2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvYXBpL1N0YXR1c0NvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGF0dXNDb21tYW5kVGVzdC5qYXZhCkBAIC0yMSw4ICsyMSwxMCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5Ob0ZpbGVwYXR0ZXJuRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLk5vV29ya1RyZWVFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5TZXRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVCYXNlZENvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZS5GaWxlUmVwb3NpdG9yeUJ1aWxkZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTOwogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCkBAIC0xODEsNCArMTgzLDMxIEBAIHB1YmxpYyB2b2lkIHRlc3RGb2xkZXJQcmVmaXgoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJfQogCX0KIAorCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE5lc3RlZENvbW1pdHRlZEdpdFJlcG9BbmRQYXRoRmlsdGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNvbW1pdEZpbGUoImZpbGUudHh0IiwgImZpbGUiLCAibWFzdGVyIik7CisJCXRyeSAoUmVwb3NpdG9yeSBpbm5lciA9IG5ldyBGaWxlUmVwb3NpdG9yeUJ1aWxkZXIoKQorCQkJCS5zZXRXb3JrVHJlZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCAic3ViZ2l0IikpLmJ1aWxkKCkpIHsKKwkJCWlubmVyLmNyZWF0ZSgpOworCQkJd3JpdGVUcmFzaEZpbGUoInN1YmdpdC9zdWIudHh0IiwgInN1YiIpOworCQkJdHJ5IChHaXQgb3V0ZXJHaXQgPSBuZXcgR2l0KGRiKTsgR2l0IGlubmVyR2l0ID0gbmV3IEdpdChpbm5lcikpIHsKKwkJCQlpbm5lckdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigic3ViLnR4dCIpLmNhbGwoKTsKKwkJCQlpbm5lckdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJJbm5lciBjb21taXQiKS5jYWxsKCk7CisJCQkJb3V0ZXJHaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oInN1YmdpdCIpLmNhbGwoKTsKKwkJCQlvdXRlckdpdC5jb21taXQoKS5zZXRNZXNzYWdlKCJPdXRlciBjb21taXQiKS5jYWxsKCk7CisJCQkJYXNzZXJ0VHJ1ZShpbm5lckdpdC5zdGF0dXMoKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJCQlhc3NlcnRUcnVlKG91dGVyR2l0LnN0YXR1cygpLmNhbGwoKS5pc0NsZWFuKCkpOworCQkJCXdyaXRlVHJhc2hGaWxlKCJzdWJnaXQvc3ViLnR4dCIsICJzdWIyIik7CisJCQkJYXNzZXJ0RmFsc2UoaW5uZXJHaXQuc3RhdHVzKCkuY2FsbCgpLmlzQ2xlYW4oKSk7CisJCQkJYXNzZXJ0RmFsc2Uob3V0ZXJHaXQuc3RhdHVzKCkuY2FsbCgpLmlzQ2xlYW4oKSk7CisJCQkJYXNzZXJ0VHJ1ZSgKKwkJCQkJCW91dGVyR2l0LnN0YXR1cygpLmFkZFBhdGgoImZpbGUudHh0IikuY2FsbCgpLmlzQ2xlYW4oKSk7CisJCQkJYXNzZXJ0VHJ1ZShvdXRlckdpdC5zdGF0dXMoKS5hZGRQYXRoKCJkb2VzbnRleGlzdCIpLmNhbGwoKQorCQkJCQkJLmlzQ2xlYW4oKSk7CisJCQkJYXNzZXJ0RmFsc2UoCisJCQkJCQlvdXRlckdpdC5zdGF0dXMoKS5hZGRQYXRoKCJzdWJnaXQiKS5jYWxsKCkuaXNDbGVhbigpKTsKKwkJCX0KKwkJfQorCX0KKwogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vQmFyZVN1cGVycHJvamVjdFdyaXRlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL0JhcmVTdXBlcnByb2plY3RXcml0ZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiOTM4NwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL0JhcmVTdXBlcnByb2plY3RXcml0ZXJUZXN0LmphdmEKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEsIEdvb2dsZSBJbmMuIGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzsKKworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlckFzc2VydC5hc3NlcnRUaGF0OworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlcnMuY29udGFpbnNJbkFueU9yZGVyOworaW1wb3J0IHN0YXRpYyBvcmcuaGFtY3Jlc3QuTWF0Y2hlcnMuaXM7CitpbXBvcnQgc3RhdGljIG9yZy5tb2NraXRvLk1vY2tpdG8ubW9jazsKK2ltcG9ydCBzdGF0aWMgb3JnLm1vY2tpdG8uTW9ja2l0by53aGVuOworCitpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uQmFyZVN1cGVycHJvamVjdFdyaXRlci5CYXJlV3JpdGVyQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5SZXBvQ29tbWFuZC5SZW1vdGVSZWFkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0UmVhZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLlJldkNvbW1pdDsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIEJhcmVTdXBlcnByb2plY3RXcml0ZXJUZXN0IGV4dGVuZHMgUmVwb3NpdG9yeVRlc3RDYXNlIHsKKworCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTSEExX0EgPSAiYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYSI7CisKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24geworCQlzdXBlci5zZXRVcCgpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgd3JpdGVfc2V0R2l0TW9kdWxlc0NvbnRlbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyeSAoUmVwb3NpdG9yeSBiYXJlUmVwbyA9IGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCkpIHsKKwkJCVJlcG9Qcm9qZWN0IHJlcG9Qcm9qZWN0ID0gbmV3IFJlcG9Qcm9qZWN0KCJzdWJwcm9qZWN0WCIsICJwYXRoL3RvIiwKKwkJCQkJInJlZnMvaGVhZHMvYnJhbmNoLXgiLCAicmVtb3RlIiwgIiIpOworCQkJcmVwb1Byb2plY3Quc2V0VXJsKCJodHRwOi8vZXhhbXBsZS5jb20vYSIpOworCisJCQlSZW1vdGVSZWFkZXIgbW9ja1JlbW90ZVJlYWRlciA9IG1vY2soUmVtb3RlUmVhZGVyLmNsYXNzKTsKKwkJCXdoZW4obW9ja1JlbW90ZVJlYWRlci5zaGExKCJodHRwOi8vZXhhbXBsZS5jb20vYSIsCisJCQkJCSJyZWZzL2hlYWRzL2JyYW5jaC14IikpCisJCQkJCQkJLnRoZW5SZXR1cm4oT2JqZWN0SWQuZnJvbVN0cmluZyhTSEExX0EpKTsKKworCQkJQmFyZVN1cGVycHJvamVjdFdyaXRlciB3ID0gbmV3IEJhcmVTdXBlcnByb2plY3RXcml0ZXIoYmFyZVJlcG8sCisJCQkJCW51bGwsICJyZWZzL2hlYWRzL21hc3RlciIsIGF1dGhvciwgbW9ja1JlbW90ZVJlYWRlciwKKwkJCQkJQmFyZVdyaXRlckNvbmZpZy5nZXREZWZhdWx0KCksIExpc3Qub2YoKSk7CisKKwkJCVJldkNvbW1pdCBjb21taXQgPSB3LndyaXRlKEFycmF5cy5hc0xpc3QocmVwb1Byb2plY3QpKTsKKworCQkJU3RyaW5nIGNvbnRlbnRzID0gcmVhZENvbnRlbnRzKGJhcmVSZXBvLCBjb21taXQsICIuZ2l0bW9kdWxlcyIpOworCQkJTGlzdDxTdHJpbmc+IGNvbnRlbnRMaW5lcyA9IEFycmF5cworCQkJCQkuYXNMaXN0KGNvbnRlbnRzLnNwbGl0KCJcbiIpKTsKKwkJCWFzc2VydFRoYXQoY29udGVudExpbmVzLmdldCgwKSwKKwkJCQkJaXMoIltzdWJtb2R1bGUgXCJzdWJwcm9qZWN0WFwiXSIpKTsKKwkJCWFzc2VydFRoYXQoY29udGVudExpbmVzLnN1Ykxpc3QoMSwgY29udGVudExpbmVzLnNpemUoKSksCisJCQkJCWNvbnRhaW5zSW5BbnlPcmRlcihpcygiXHRicmFuY2ggPSByZWZzL2hlYWRzL2JyYW5jaC14IiksCisJCQkJCQkJaXMoIlx0cGF0aCA9IHBhdGgvdG8iKSwKKwkJCQkJCQlpcygiXHR1cmwgPSBodHRwOi8vZXhhbXBsZS5jb20vYSIpKSk7CisJCX0KKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHdyaXRlX3NldEV4dHJhQ29udGVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJdHJ5IChSZXBvc2l0b3J5IGJhcmVSZXBvID0gY3JlYXRlQmFyZVJlcG9zaXRvcnkoKSkgeworCQkJUmVwb1Byb2plY3QgcmVwb1Byb2plY3QgPSBuZXcgUmVwb1Byb2plY3QoInN1YnByb2plY3RYIiwgInBhdGgvdG8iLAorCQkJCQkicmVmcy9oZWFkcy9icmFuY2gteCIsICJyZW1vdGUiLCAiIik7CisJCQlyZXBvUHJvamVjdC5zZXRVcmwoImh0dHA6Ly9leGFtcGxlLmNvbS9hIik7CisKKwkJCVJlbW90ZVJlYWRlciBtb2NrUmVtb3RlUmVhZGVyID0gbW9jayhSZW1vdGVSZWFkZXIuY2xhc3MpOworCQkJd2hlbihtb2NrUmVtb3RlUmVhZGVyLnNoYTEoImh0dHA6Ly9leGFtcGxlLmNvbS9hIiwKKwkJCQkJInJlZnMvaGVhZHMvYnJhbmNoLXgiKSkKKwkJCQkJCQkudGhlblJldHVybihPYmplY3RJZC5mcm9tU3RyaW5nKFNIQTFfQSkpOworCisJCQlCYXJlU3VwZXJwcm9qZWN0V3JpdGVyIHcgPSBuZXcgQmFyZVN1cGVycHJvamVjdFdyaXRlcihiYXJlUmVwbywKKwkJCQkJbnVsbCwgInJlZnMvaGVhZHMvbWFzdGVyIiwgYXV0aG9yLCBtb2NrUmVtb3RlUmVhZGVyLAorCQkJCQlCYXJlV3JpdGVyQ29uZmlnLmdldERlZmF1bHQoKSwKKwkJCQkJTGlzdC5vZihuZXcgQmFyZVN1cGVycHJvamVjdFdyaXRlci5FeHRyYUNvbnRlbnQoIngiLAorCQkJCQkJCSJleHRyYS1jb250ZW50IikpKTsKKworCQkJUmV2Q29tbWl0IGNvbW1pdCA9IHcud3JpdGUoQXJyYXlzLmFzTGlzdChyZXBvUHJvamVjdCkpOworCisJCQlTdHJpbmcgY29udGVudHMgPSByZWFkQ29udGVudHMoYmFyZVJlcG8sIGNvbW1pdCwgIngiKTsKKwkJCWFzc2VydFRoYXQoY29udGVudHMsIGlzKCJleHRyYS1jb250ZW50IikpOworCQl9CisJfQorCisJcHJpdmF0ZSBTdHJpbmcgcmVhZENvbnRlbnRzKFJlcG9zaXRvcnkgcmVwbywgUmV2Q29tbWl0IGNvbW1pdCwKKwkJCVN0cmluZyBwYXRoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIGlkU3RyID0gY29tbWl0LmdldElkKCkubmFtZSgpICsgIjoiICsgcGF0aDsKKwkJT2JqZWN0SWQgbW9kSWQgPSByZXBvLnJlc29sdmUoaWRTdHIpOworCQl0cnkgKE9iamVjdFJlYWRlciByZWFkZXIgPSByZXBvLm5ld09iamVjdFJlYWRlcigpKSB7CisJCQlyZXR1cm4gbmV3IFN0cmluZygKKwkJCQkJcmVhZGVyLm9wZW4obW9kSWQpLmdldENhY2hlZEJ5dGVzKEludGVnZXIuTUFYX1ZBTFVFKSwKKwkJCQkJU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCk7CisKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEKaW5kZXggNTA5YWRjMi4uM2U2ZDEzYSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmRUZXN0LmphdmEKQEAgLTE1LDYgKzE1LDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuZmFpbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc3VtZS5hc3N1bWVUcnVlOwogCiBpbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKIGltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwpAQCAtNTQ2LDI0ICs1NDcsMjkgQEAgcHVibGljIHZvaWQgdGVzdFJlcG9NYW5pZmVzdENvcHlGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCS8vIFRoZSBvcmlnaW5hbCBmaWxlIHNob3VsZCBleGlzdAogCQlGaWxlIGhlbGxvID0gbmV3IEZpbGUobG9jYWxEYi5nZXRXb3JrVHJlZSgpLCAiZm9vL2hlbGxvLnR4dCIpOwogCQlhc3NlcnRUcnVlKCJUaGUgb3JpZ2luYWwgZmlsZSBzaG91bGQgZXhpc3QiLCBoZWxsby5leGlzdHMoKSk7Ci0JCWFzc2VydEZhbHNlKCJUaGUgb3JpZ2luYWwgZmlsZSBzaG91bGQgbm90IGJlIGV4ZWN1dGFibGUiLAotCQkJCWhlbGxvLmNhbkV4ZWN1dGUoKSk7CisJCWlmIChGUy5ERVRFQ1RFRC5zdXBwb3J0c0V4ZWN1dGUoKSkgeworCQkJYXNzZXJ0RmFsc2UoIlRoZSBvcmlnaW5hbCBmaWxlIHNob3VsZCBub3QgYmUgZXhlY3V0YWJsZSIsCisJCQkJCUZTLkRFVEVDVEVELmNhbkV4ZWN1dGUoaGVsbG8pKTsKKwkJfQogCQlhc3NlcnRDb250ZW50cyhoZWxsby50b1BhdGgoKSwgIm1hc3RlciB3b3JsZCIpOwogCQkvLyBUaGUgZGVzdCBmaWxlIHNob3VsZCBhbHNvIGV4aXN0CiAJCWhlbGxvID0gbmV3IEZpbGUobG9jYWxEYi5nZXRXb3JrVHJlZSgpLCAiSGVsbG8iKTsKIAkJYXNzZXJ0VHJ1ZSgiVGhlIGRlc3RpbmF0aW9uIGZpbGUgc2hvdWxkIGV4aXN0IiwgaGVsbG8uZXhpc3RzKCkpOwotCQlhc3NlcnRGYWxzZSgiVGhlIGRlc3RpbmF0aW9uIGZpbGUgc2hvdWxkIG5vdCBiZSBleGVjdXRhYmxlIiwKLQkJCQloZWxsby5jYW5FeGVjdXRlKCkpOworCQlpZiAoRlMuREVURUNURUQuc3VwcG9ydHNFeGVjdXRlKCkpIHsKKwkJCWFzc2VydEZhbHNlKCJUaGUgZGVzdGluYXRpb24gZmlsZSBzaG91bGQgbm90IGJlIGV4ZWN1dGFibGUiLAorCQkJCQlGUy5ERVRFQ1RFRC5jYW5FeGVjdXRlKGhlbGxvKSk7CisJCX0KIAkJYXNzZXJ0Q29udGVudHMoaGVsbG8udG9QYXRoKCksICJtYXN0ZXIgd29ybGQiKTsKIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RSZXBvTWFuaWZlc3RDb3B5RmlsZV9leGVjdXRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFzc3VtZVRydWUoRlMuREVURUNURUQuc3VwcG9ydHNFeGVjdXRlKCkpOwogCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRlZmF1bHREYikpIHsKIAkJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm1hc3RlciIpLmNhbGwoKTsKIAkJCUZpbGUgZiA9IEpHaXRUZXN0VXRpbC53cml0ZVRyYXNoRmlsZShkZWZhdWx0RGIsICJoZWxsby5zaCIsCiAJCQkJCSJjb250ZW50IG9mIHRoZSBleGVjdXRhYmxlIGZpbGUiKTsKLQkJCWYuc2V0RXhlY3V0YWJsZSh0cnVlKTsKKwkJCUZTLkRFVEVDVEVELnNldEV4ZWN1dGUoZiwgdHJ1ZSk7CiAJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oImhlbGxvLnNoIikuY2FsbCgpOwogCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkFkZCBiaW5hcnkgZmlsZSIpLmNhbGwoKTsKIAkJfQpAQCAtNTg4LDcgKzU5NCw4IEBAIHB1YmxpYyB2b2lkIHRlc3RSZXBvTWFuaWZlc3RDb3B5RmlsZV9leGVjdXRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCS8vIFRoZSBvcmlnaW5hbCBmaWxlIHNob3VsZCBleGlzdCBhbmQgYmUgYW4gZXhlY3V0YWJsZQogCQlGaWxlIGhlbGxvID0gbmV3IEZpbGUobG9jYWxEYi5nZXRXb3JrVHJlZSgpLCAiZm9vL2hlbGxvLnNoIik7CiAJCWFzc2VydFRydWUoIlRoZSBvcmlnaW5hbCBmaWxlIHNob3VsZCBleGlzdCIsIGhlbGxvLmV4aXN0cygpKTsKLQkJYXNzZXJ0VHJ1ZSgiVGhlIG9yaWdpbmFsIGZpbGUgbXVzdCBiZSBleGVjdXRhYmxlIiwgaGVsbG8uY2FuRXhlY3V0ZSgpKTsKKwkJYXNzZXJ0VHJ1ZSgiVGhlIG9yaWdpbmFsIGZpbGUgbXVzdCBiZSBleGVjdXRhYmxlIiwKKwkJCQlGUy5ERVRFQ1RFRC5jYW5FeGVjdXRlKGhlbGxvKSk7CiAJCXRyeSAoQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gRmlsZXMubmV3QnVmZmVyZWRSZWFkZXIoaGVsbG8udG9QYXRoKCksCiAJCQkJVVRGXzgpKSB7CiAJCQlTdHJpbmcgY29udGVudCA9IHJlYWRlci5yZWFkTGluZSgpOwpAQCAtNjAwLDcgKzYwNyw3IEBAIHB1YmxpYyB2b2lkIHRlc3RSZXBvTWFuaWZlc3RDb3B5RmlsZV9leGVjdXRhYmxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWhlbGxvID0gbmV3IEZpbGUobG9jYWxEYi5nZXRXb3JrVHJlZSgpLCAiY29weS1oZWxsby5zaCIpOwogCQlhc3NlcnRUcnVlKCJUaGUgZGVzdGluYXRpb24gZmlsZSBzaG91bGQgZXhpc3QiLCBoZWxsby5leGlzdHMoKSk7CiAJCWFzc2VydFRydWUoIlRoZSBkZXN0aW5hdGlvbiBmaWxlIG11c3QgYmUgZXhlY3V0YWJsZSIsCi0JCQkJaGVsbG8uY2FuRXhlY3V0ZSgpKTsKKwkJCQlGUy5ERVRFQ1RFRC5jYW5FeGVjdXRlKGhlbGxvKSk7CiAJCXRyeSAoQnVmZmVyZWRSZWFkZXIgcmVhZGVyID0gRmlsZXMubmV3QnVmZmVyZWRSZWFkZXIoaGVsbG8udG9QYXRoKCksCiAJCQkJVVRGXzgpKSB7CiAJCQlTdHJpbmcgY29udGVudCA9IHJlYWRlci5yZWFkTGluZSgpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRXh0ZXJuYWxEaWZmVG9vbFRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0V4dGVybmFsRGlmZlRvb2xUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzllYmVjNwotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0V4dGVybmFsRGlmZlRvb2xUZXN0LmphdmEKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSwgU2ltZW9uIEFuZHJlZXYgPHNpbWVvbi5kYW5haWxvdi5hbmRyZWV2QGdtYWlsLmNvbT4gYW5kIG90aGVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbDsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0RJRkZUT09MX1NFQ1RJT047CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0NNRDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfR1VJVE9PTDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfUEFUSDsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfUFJPTVBUOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9UUlVTVF9FWElUX0NPREU7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydE5vdE51bGw7CisKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CitpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hTZXQ7CitpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuaW50ZXJuYWwuQm9vbGVhblRyaVN0YXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVCYXNlZENvbmZpZzsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworLyoqCisgKiBUZXN0aW5nIGV4dGVybmFsIGRpZmYgdG9vbHMuCisgKi8KK3B1YmxpYyBjbGFzcyBFeHRlcm5hbERpZmZUb29sVGVzdCBleHRlbmRzIEV4dGVybmFsVG9vbFRlc3RDYXNlIHsKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFRvb2xOYW1lcygpIHsKKwkJRGlmZlRvb2xzIG1hbmFnZXIgPSBuZXcgRGlmZlRvb2xzKGRiKTsKKwkJU2V0PFN0cmluZz4gYWN0dWFsVG9vbE5hbWVzID0gbWFuYWdlci5nZXRUb29sTmFtZXMoKTsKKwkJU2V0PFN0cmluZz4gZXhwZWN0ZWRUb29sTmFtZXMgPSBDb2xsZWN0aW9ucy5lbXB0eVNldCgpOworCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBzZXQgb2YgZXh0ZXJuYWwgZGlmZiB0b29sIG5hbWVzIiwKKwkJCQlleHBlY3RlZFRvb2xOYW1lcywgYWN0dWFsVG9vbE5hbWVzKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RBbGxUb29scygpIHsKKwkJRGlmZlRvb2xzIG1hbmFnZXIgPSBuZXcgRGlmZlRvb2xzKGRiKTsKKwkJU2V0PFN0cmluZz4gYWN0dWFsVG9vbE5hbWVzID0gbWFuYWdlci5nZXRBdmFpbGFibGVUb29scygpLmtleVNldCgpOworCQlTZXQ8U3RyaW5nPiBleHBlY3RlZFRvb2xOYW1lcyA9IG5ldyBMaW5rZWRIYXNoU2V0PD4oKTsKKwkJQ29tbWFuZExpbmVEaWZmVG9vbFtdIGRlZmF1bHRUb29scyA9IENvbW1hbmRMaW5lRGlmZlRvb2wudmFsdWVzKCk7CisJCWZvciAoQ29tbWFuZExpbmVEaWZmVG9vbCBkZWZhdWx0VG9vbCA6IGRlZmF1bHRUb29scykgeworCQkJU3RyaW5nIHRvb2xOYW1lID0gZGVmYXVsdFRvb2wubmFtZSgpOworCQkJZXhwZWN0ZWRUb29sTmFtZXMuYWRkKHRvb2xOYW1lKTsKKwkJfQorCQlhc3NlcnRFcXVhbHMoIkluY29ycmVjdCBzZXQgb2YgZXh0ZXJuYWwgZGlmZiB0b29scyIsIGV4cGVjdGVkVG9vbE5hbWVzLAorCQkJCWFjdHVhbFRvb2xOYW1lcyk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0T3ZlcnJpZGVQcmVkZWZpbmVkVG9vbFBhdGgoKSB7CisJCVN0cmluZyB0b29sTmFtZSA9IENvbW1hbmRMaW5lRGlmZlRvb2wuZ3VpZmZ5Lm5hbWUoKTsKKwkJU3RyaW5nIGN1c3RvbVRvb2xQYXRoID0gIi91c3IvYmluL2VjaG8iOworCisJCUZpbGVCYXNlZENvbmZpZyBjb25maWcgPSBkYi5nZXRDb25maWcoKTsKKwkJY29uZmlnLnNldFN0cmluZyhDT05GSUdfRElGRlRPT0xfU0VDVElPTiwgdG9vbE5hbWUsIENPTkZJR19LRVlfQ01ELAorCQkJCSJlY2hvIik7CisJCWNvbmZpZy5zZXRTdHJpbmcoQ09ORklHX0RJRkZUT09MX1NFQ1RJT04sIHRvb2xOYW1lLCBDT05GSUdfS0VZX1BBVEgsCisJCQkJY3VzdG9tVG9vbFBhdGgpOworCisJCURpZmZUb29scyBtYW5hZ2VyID0gbmV3IERpZmZUb29scyhkYik7CisJCU1hcDxTdHJpbmcsIEV4dGVybmFsRGlmZlRvb2w+IHRvb2xzID0gbWFuYWdlci5nZXRVc2VyRGVmaW5lZFRvb2xzKCk7CisJCUV4dGVybmFsRGlmZlRvb2wgZGlmZlRvb2wgPSB0b29scy5nZXQodG9vbE5hbWUpOworCQlhc3NlcnROb3ROdWxsKCJFeHBlY3RlZCB0b29sIFwiIiArIHRvb2xOYW1lICsgIlwiIHRvIGJlIHVzZXIgZGVmaW5lZCIsCisJCQkJZGlmZlRvb2wpOworCisJCVN0cmluZyB0b29sUGF0aCA9IGRpZmZUb29sLmdldFBhdGgoKTsKKwkJYXNzZXJ0RXF1YWxzKCJFeHBlY3RlZCBleHRlcm5hbCBkaWZmIHRvb2wgdG8gaGF2ZSBhbiBvdmVycmlkZW4gcGF0aCIsCisJCQkJY3VzdG9tVG9vbFBhdGgsIHRvb2xQYXRoKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RVc2VyRGVmaW5lZFRvb2xzKCkgeworCQlGaWxlQmFzZWRDb25maWcgY29uZmlnID0gZGIuZ2V0Q29uZmlnKCk7CisJCVN0cmluZyBjdXN0b21Ub29sbmFtZSA9ICJjdXN0b21Ub29sIjsKKwkJY29uZmlnLnNldFN0cmluZyhDT05GSUdfRElGRlRPT0xfU0VDVElPTiwgY3VzdG9tVG9vbG5hbWUsCisJCQkJQ09ORklHX0tFWV9DTUQsICJlY2hvIik7CisJCWNvbmZpZy5zZXRTdHJpbmcoQ09ORklHX0RJRkZUT09MX1NFQ1RJT04sIGN1c3RvbVRvb2xuYW1lLAorCQkJCUNPTkZJR19LRVlfUEFUSCwgIi91c3IvYmluL2VjaG8iKTsKKwkJY29uZmlnLnNldFN0cmluZyhDT05GSUdfRElGRlRPT0xfU0VDVElPTiwgY3VzdG9tVG9vbG5hbWUsCisJCQkJQ09ORklHX0tFWV9QUk9NUFQsICItLW5vLXByb21wdCIpOworCQljb25maWcuc2V0U3RyaW5nKENPTkZJR19ESUZGVE9PTF9TRUNUSU9OLCBjdXN0b21Ub29sbmFtZSwKKwkJCQlDT05GSUdfS0VZX0dVSVRPT0wsICItLW5vLWd1aSIpOworCQljb25maWcuc2V0U3RyaW5nKENPTkZJR19ESUZGVE9PTF9TRUNUSU9OLCBjdXN0b21Ub29sbmFtZSwKKwkJCQlDT05GSUdfS0VZX1RSVVNUX0VYSVRfQ09ERSwgIi0tbm8tdHJ1c3QtZXhpdC1jb2RlIik7CisJCURpZmZUb29scyBtYW5hZ2VyID0gbmV3IERpZmZUb29scyhkYik7CisJCVNldDxTdHJpbmc+IGFjdHVhbFRvb2xOYW1lcyA9IG1hbmFnZXIuZ2V0VXNlckRlZmluZWRUb29scygpLmtleVNldCgpOworCQlTZXQ8U3RyaW5nPiBleHBlY3RlZFRvb2xOYW1lcyA9IG5ldyBMaW5rZWRIYXNoU2V0PD4oKTsKKwkJZXhwZWN0ZWRUb29sTmFtZXMuYWRkKGN1c3RvbVRvb2xuYW1lKTsKKwkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3Qgc2V0IG9mIGV4dGVybmFsIGRpZmYgdG9vbHMiLCBleHBlY3RlZFRvb2xOYW1lcywKKwkJCQlhY3R1YWxUb29sTmFtZXMpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE5vdEF2YWlsYWJsZVRvb2xzKCkgeworCQlEaWZmVG9vbHMgbWFuYWdlciA9IG5ldyBEaWZmVG9vbHMoZGIpOworCQlTZXQ8U3RyaW5nPiBhY3R1YWxUb29sTmFtZXMgPSBtYW5hZ2VyLmdldE5vdEF2YWlsYWJsZVRvb2xzKCkua2V5U2V0KCk7CisJCVNldDxTdHJpbmc+IGV4cGVjdGVkVG9vbE5hbWVzID0gQ29sbGVjdGlvbnMuZW1wdHlTZXQoKTsKKwkJYXNzZXJ0RXF1YWxzKCJJbmNvcnJlY3Qgc2V0IG9mIG5vdCBhdmFpbGFibGUgZXh0ZXJuYWwgZGlmZiB0b29scyIsCisJCQkJZXhwZWN0ZWRUb29sTmFtZXMsIGFjdHVhbFRvb2xOYW1lcyk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29tcGFyZSgpIHsKKwkJRGlmZlRvb2xzIG1hbmFnZXIgPSBuZXcgRGlmZlRvb2xzKGRiKTsKKworCQlTdHJpbmcgbmV3UGF0aCA9ICIiOworCQlTdHJpbmcgb2xkUGF0aCA9ICIiOworCQlTdHJpbmcgbmV3SWQgPSAiIjsKKwkJU3RyaW5nIG9sZElkID0gIiI7CisJCVN0cmluZyB0b29sTmFtZSA9ICIiOworCQlCb29sZWFuVHJpU3RhdGUgcHJvbXB0ID0gQm9vbGVhblRyaVN0YXRlLlVOU0VUOworCQlCb29sZWFuVHJpU3RhdGUgZ3VpID0gQm9vbGVhblRyaVN0YXRlLlVOU0VUOworCQlCb29sZWFuVHJpU3RhdGUgdHJ1c3RFeGl0Q29kZSA9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVDsKKworCQlpbnQgZXhwZWN0ZWRDb21wYXJlUmVzdWx0ID0gMDsKKwkJaW50IGNvbXBhcmVSZXN1bHQgPSBtYW5hZ2VyLmNvbXBhcmUobmV3UGF0aCwgb2xkUGF0aCwgbmV3SWQsIG9sZElkLAorCQkJCXRvb2xOYW1lLCBwcm9tcHQsIGd1aSwgdHJ1c3RFeGl0Q29kZSk7CisJCWFzc2VydEVxdWFscygiSW5jb3JyZWN0IGNvbXBhcmUgcmVzdWx0IGZvciBleHRlcm5hbCBkaWZmIHRvb2wiLAorCQkJCWV4cGVjdGVkQ29tcGFyZVJlc3VsdCwgY29tcGFyZVJlc3VsdCk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdFRvb2woKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZUJhc2VkQ29uZmlnIGNvbmZpZyA9IGRiLmdldENvbmZpZygpOworCQkvLyB0aGUgZGVmYXVsdCBkaWZmIHRvb2wgaXMgY29uZmlndXJlZCB3aXRob3V0IGEgc3Vic2VjdGlvbgorCQlTdHJpbmcgc3Vic2VjdGlvbiA9IG51bGw7CisJCWNvbmZpZy5zZXRTdHJpbmcoImRpZmYiLCBzdWJzZWN0aW9uLCAidG9vbCIsICJjdXN0b21Ub29sIik7CisKKwkJRGlmZlRvb2xzIG1hbmFnZXIgPSBuZXcgRGlmZlRvb2xzKGRiKTsKKwkJQm9vbGVhblRyaVN0YXRlIGd1aSA9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVDsKKwkJU3RyaW5nIGRlZmF1bHRUb29sTmFtZSA9IG1hbmFnZXIuZ2V0RGVmYXVsdFRvb2xOYW1lKGd1aSk7CisJCWFzc2VydEVxdWFscygKKwkJCQkiRXhwZWN0ZWQgY29uZmlndXJlZCBkaWZmdG9vbCB0byBiZSB0aGUgZGVmYXVsdCBleHRlcm5hbCBkaWZmIHRvb2wiLAorCQkJCSJteV9kZWZhdWx0X3Rvb2xuYW1lIiwgZGVmYXVsdFRvb2xOYW1lKTsKKworCQlndWkgPSBCb29sZWFuVHJpU3RhdGUuVFJVRTsKKwkJU3RyaW5nIGRlZmF1bHRHdWlUb29sTmFtZSA9IG1hbmFnZXIuZ2V0RGVmYXVsdFRvb2xOYW1lKGd1aSk7CisJCWFzc2VydEVxdWFscygKKwkJCQkiRXhwZWN0ZWQgY29uZmlndXJlZCBkaWZmdG9vbCB0byBiZSB0aGUgZGVmYXVsdCBleHRlcm5hbCBkaWZmIHRvb2wiLAorCQkJCSJteV9ndWlfdG9vbCIsIGRlZmF1bHRHdWlUb29sTmFtZSk7CisKKwkJY29uZmlnLnNldFN0cmluZygiZGlmZiIsIHN1YnNlY3Rpb24sICJndWl0b29sIiwgImN1c3RvbUd1aVRvb2wiKTsKKwkJbWFuYWdlciA9IG5ldyBEaWZmVG9vbHMoZGIpOworCQlkZWZhdWx0R3VpVG9vbE5hbWUgPSBtYW5hZ2VyLmdldERlZmF1bHRUb29sTmFtZShndWkpOworCQlhc3NlcnRFcXVhbHMoCisJCQkJIkV4cGVjdGVkIGNvbmZpZ3VyZWQgZGlmZnRvb2wgdG8gYmUgdGhlIGRlZmF1bHQgZXh0ZXJuYWwgZGlmZiBndWl0b29sIiwKKwkJCQkibXlfZ3VpX3Rvb2wiLCBkZWZhdWx0R3VpVG9vbE5hbWUpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0V4dGVybmFsVG9vbFRlc3RDYXNlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9FeHRlcm5hbFRvb2xUZXN0Q2FzZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjYzEyOTcKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9FeHRlcm5hbFRvb2xUZXN0Q2FzZS5qYXZhCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAtMjAyMSwgU2ltZW9uIEFuZHJlZXYgPHNpbWVvbi5kYW5haWxvdi5hbmRyZWV2QGdtYWlsLmNvbT4gYW5kIG90aGVycy4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbDsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5SZXBvc2l0b3J5VGVzdENhc2U7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZTOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GU19QT1NJWDsKK2ltcG9ydCBvcmcuanVuaXQuQWZ0ZXI7CitpbXBvcnQgb3JnLmp1bml0LkFzc3VtZTsKK2ltcG9ydCBvcmcuanVuaXQuQmVmb3JlOworCisvKioKKyAqIEJhc2UgdGVzdCBjYXNlIGZvciBleHRlcm5hbCBtZXJnZSBhbmQgZGlmZiB0b29sIHRlc3RzLgorICovCitwdWJsaWMgYWJzdHJhY3QgY2xhc3MgRXh0ZXJuYWxUb29sVGVzdENhc2UgZXh0ZW5kcyBSZXBvc2l0b3J5VGVzdENhc2UgeworCisJcHJvdGVjdGVkIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9DT05URU5UID0gImxpbmUxIjsKKworCXByb3RlY3RlZCBGaWxlIGxvY2FsRmlsZTsKKworCXByb3RlY3RlZCBGaWxlIHJlbW90ZUZpbGU7CisKKwlwcm90ZWN0ZWQgRmlsZSBtZXJnZWRGaWxlOworCisJcHJvdGVjdGVkIEZpbGUgYmFzZUZpbGU7CisKKwlwcm90ZWN0ZWQgRmlsZSBjb21tYW5kUmVzdWx0OworCisJQEJlZm9yZQorCUBPdmVycmlkZQorCXB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXN1cGVyLnNldFVwKCk7CisKKwkJbG9jYWxGaWxlID0gd3JpdGVUcmFzaEZpbGUoImxvY2FsRmlsZS50eHQiLCBERUZBVUxUX0NPTlRFTlQgKyAiXG4iKTsKKwkJbG9jYWxGaWxlLmRlbGV0ZU9uRXhpdCgpOworCQlyZW1vdGVGaWxlID0gd3JpdGVUcmFzaEZpbGUoInJlbW90ZUZpbGUudHh0IiwgREVGQVVMVF9DT05URU5UICsgIlxuIik7CisJCXJlbW90ZUZpbGUuZGVsZXRlT25FeGl0KCk7CisJCW1lcmdlZEZpbGUgPSB3cml0ZVRyYXNoRmlsZSgibWVyZ2VkRmlsZS50eHQiLCAiIik7CisJCW1lcmdlZEZpbGUuZGVsZXRlT25FeGl0KCk7CisJCWJhc2VGaWxlID0gd3JpdGVUcmFzaEZpbGUoImJhc2VGaWxlLnR4dCIsICIiKTsKKwkJYmFzZUZpbGUuZGVsZXRlT25FeGl0KCk7CisJCWNvbW1hbmRSZXN1bHQgPSB3cml0ZVRyYXNoRmlsZSgiY29tbWFuZFJlc3VsdC50eHQiLCAiIik7CisJCWNvbW1hbmRSZXN1bHQuZGVsZXRlT25FeGl0KCk7CisJfQorCisJQEFmdGVyCisJQE92ZXJyaWRlCisJcHVibGljIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJRmlsZXMuZGVsZXRlKGxvY2FsRmlsZS50b1BhdGgoKSk7CisJCUZpbGVzLmRlbGV0ZShyZW1vdGVGaWxlLnRvUGF0aCgpKTsKKwkJRmlsZXMuZGVsZXRlKG1lcmdlZEZpbGUudG9QYXRoKCkpOworCQlGaWxlcy5kZWxldGUoYmFzZUZpbGUudG9QYXRoKCkpOworCQlGaWxlcy5kZWxldGUoY29tbWFuZFJlc3VsdC50b1BhdGgoKSk7CisKKwkJc3VwZXIudGVhckRvd24oKTsKKwl9CisKKworCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBhc3N1bWVQb3NpeFBsYXRmb3JtKCkgeworCQlBc3N1bWUuYXNzdW1lVHJ1ZSgKKwkJCQkiVGhpcyB0ZXN0IGNhbiBydW4gb25seSBpbiBMaW51eCB0ZXN0cyIsCisJCQkJRlMuREVURUNURUQgaW5zdGFuY2VvZiBGU19QT1NJWCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc0Jsb2NrQ2FjaGVUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzQmxvY2tDYWNoZVRlc3QuamF2YQppbmRleCA0ZjEzMTQwLi5hYjU4OGNiIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzQmxvY2tDYWNoZVRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzQmxvY2tDYWNoZVRlc3QuamF2YQpAQCAtMTUsMTYgKzE1LDE5IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKK2ltcG9ydCBqYXZhLnRpbWUuRHVyYXRpb247CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbnM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljSW50ZWdlcjsKIGltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkxvbmdTdHJlYW07CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ2FsbGFibGU7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnMuRGZzQmxvY2tDYWNoZUNvbmZpZy5JbmRleEV2ZW50Q29uc3VtZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2suUGFja0V4dDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LlRlc3RSZXBvc2l0b3J5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuVGVzdFJuZzsKQEAgLTE1NCw2ICsxNTcsMTE5IEBAIHB1YmxpYyB2b2lkIGhhc0NhY2hlSG90TWFwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQogCUBUZXN0CisJcHVibGljIHZvaWQgaGFzSW5kZXhFdmVudENvbnN1bWVyT25seUxvYWRlZCgpIHRocm93cyBFeGNlcHRpb24geworCQlBdG9taWNJbnRlZ2VyIGxvYWRlZCA9IG5ldyBBdG9taWNJbnRlZ2VyKCk7CisJCUluZGV4RXZlbnRDb25zdW1lciBpbmRleEV2ZW50Q29uc3VtZXIgPSBuZXcgSW5kZXhFdmVudENvbnN1bWVyKCkgeworCQkJQE92ZXJyaWRlCisJCQlwdWJsaWMgdm9pZCBhY2NlcHRSZXF1ZXN0ZWRFdmVudChpbnQgcGFja0V4dFBvcywgYm9vbGVhbiBjYWNoZUhpdCwKKwkJCQkJbG9uZyBsb2FkTWljcm9zLCBsb25nIGJ5dGVzLAorCQkJCQlEdXJhdGlvbiBsYXN0RXZpY3Rpb25EdXJhdGlvbikgeworCQkJCWFzc2VydEVxdWFscyhQYWNrRXh0LklOREVYLmdldFBvc2l0aW9uKCksIHBhY2tFeHRQb3MpOworCQkJCWFzc2VydFRydWUoY2FjaGVIaXQpOworCQkJCWFzc2VydFRydWUobGFzdEV2aWN0aW9uRHVyYXRpb24uaXNaZXJvKCkpOworCQkJCWxvYWRlZC5pbmNyZW1lbnRBbmRHZXQoKTsKKwkJCX0KKwkJfTsKKworCQlEZnNCbG9ja0NhY2hlLnJlY29uZmlndXJlKG5ldyBEZnNCbG9ja0NhY2hlQ29uZmlnKCkuc2V0QmxvY2tTaXplKDUxMikKKwkJCQkuc2V0QmxvY2tMaW1pdCg1MTIgKiA0KQorCQkJCS5zZXRJbmRleEV2ZW50Q29uc3VtZXIoaW5kZXhFdmVudENvbnN1bWVyKSk7CisJCWNhY2hlID0gRGZzQmxvY2tDYWNoZS5nZXRJbnN0YW5jZSgpOworCisJCURmc1JlcG9zaXRvcnlEZXNjcmlwdGlvbiByZXBvID0gbmV3IERmc1JlcG9zaXRvcnlEZXNjcmlwdGlvbigidGVzdCIpOworCQlJbk1lbW9yeVJlcG9zaXRvcnkgcjEgPSBuZXcgSW5NZW1vcnlSZXBvc2l0b3J5KHJlcG8pOworCQlieXRlW10gY29udGVudCA9IHJuZy5uZXh0Qnl0ZXMoNDI0MjQyKTsKKwkJT2JqZWN0SWQgaWQ7CisJCXRyeSAoT2JqZWN0SW5zZXJ0ZXIgaW5zID0gcjEubmV3T2JqZWN0SW5zZXJ0ZXIoKSkgeworCQkJaWQgPSBpbnMuaW5zZXJ0KE9CSl9CTE9CLCBjb250ZW50KTsKKwkJCWlucy5mbHVzaCgpOworCQl9CisKKwkJdHJ5IChPYmplY3RSZWFkZXIgcmRyID0gcjEubmV3T2JqZWN0UmVhZGVyKCkpIHsKKwkJCWJ5dGVbXSBhY3R1YWwgPSByZHIub3BlbihpZCwgT0JKX0JMT0IpLmdldEJ5dGVzKCk7CisJCQlhc3NlcnRUcnVlKEFycmF5cy5lcXVhbHMoY29udGVudCwgYWN0dWFsKSk7CisJCX0KKwkJLy8gQWxsIGNhY2hlIGVudHJpZXMgYXJlIGhvdCBhbmQgY2FjaGUgaXMgYXQgY2FwYWNpdHkuCisJCWFzc2VydFRydWUoTG9uZ1N0cmVhbS5vZihjYWNoZS5nZXRIaXRDb3VudCgpKS5zdW0oKSA+IDApOworCQlhc3NlcnRFcXVhbHMoOTksIGNhY2hlLmdldEZpbGxQZXJjZW50YWdlKCkpOworCisJCUluTWVtb3J5UmVwb3NpdG9yeSByMiA9IG5ldyBJbk1lbW9yeVJlcG9zaXRvcnkocmVwbyk7CisJCWNvbnRlbnQgPSBybmcubmV4dEJ5dGVzKDQyNDI0Mik7CisJCXRyeSAoT2JqZWN0SW5zZXJ0ZXIgaW5zID0gcjIubmV3T2JqZWN0SW5zZXJ0ZXIoKSkgeworCQkJaW5zLmluc2VydChPQkpfQkxPQiwgY29udGVudCk7CisJCQlpbnMuZmx1c2goKTsKKwkJfQorCQlhc3NlcnRUcnVlKGNhY2hlLmdldEV2aWN0aW9ucygpW1BhY2tFeHQuUEFDSy5nZXRQb3NpdGlvbigpXSA+IDApOworCQlhc3NlcnRFcXVhbHMoMSwgY2FjaGUuZ2V0RXZpY3Rpb25zKClbUGFja0V4dC5JTkRFWC5nZXRQb3NpdGlvbigpXSk7CisJCWFzc2VydEVxdWFscygxLCBsb2FkZWQuZ2V0KCkpOworCX0KKworCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBoYXNJbmRleEV2ZW50Q29uc3VtZXJMb2FkZWRBbmRFdmljdGVkKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUF0b21pY0ludGVnZXIgbG9hZGVkID0gbmV3IEF0b21pY0ludGVnZXIoKTsKKwkJQXRvbWljSW50ZWdlciBldmljdGVkID0gbmV3IEF0b21pY0ludGVnZXIoKTsKKwkJSW5kZXhFdmVudENvbnN1bWVyIGluZGV4RXZlbnRDb25zdW1lciA9IG5ldyBJbmRleEV2ZW50Q29uc3VtZXIoKSB7CisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIGFjY2VwdFJlcXVlc3RlZEV2ZW50KGludCBwYWNrRXh0UG9zLCBib29sZWFuIGNhY2hlSGl0LAorCQkJCQlsb25nIGxvYWRNaWNyb3MsIGxvbmcgYnl0ZXMsCisJCQkJCUR1cmF0aW9uIGxhc3RFdmljdGlvbkR1cmF0aW9uKSB7CisJCQkJYXNzZXJ0RXF1YWxzKFBhY2tFeHQuSU5ERVguZ2V0UG9zaXRpb24oKSwgcGFja0V4dFBvcyk7CisJCQkJYXNzZXJ0VHJ1ZShjYWNoZUhpdCk7CisJCQkJYXNzZXJ0VHJ1ZShsYXN0RXZpY3Rpb25EdXJhdGlvbi5pc1plcm8oKSk7CisJCQkJbG9hZGVkLmluY3JlbWVudEFuZEdldCgpOworCQkJfQorCisJCQlAT3ZlcnJpZGUKKwkJCXB1YmxpYyB2b2lkIGFjY2VwdEV2aWN0ZWRFdmVudChpbnQgcGFja0V4dFBvcywgbG9uZyBieXRlcywKKwkJCQkJaW50IHRvdGFsQ2FjaGVIaXRDb3VudCwgRHVyYXRpb24gbGFzdEV2aWN0aW9uRHVyYXRpb24pIHsKKwkJCQlhc3NlcnRFcXVhbHMoUGFja0V4dC5JTkRFWC5nZXRQb3NpdGlvbigpLCBwYWNrRXh0UG9zKTsKKwkJCQlhc3NlcnRUcnVlKHRvdGFsQ2FjaGVIaXRDb3VudCA+IDApOworCQkJCWFzc2VydFRydWUobGFzdEV2aWN0aW9uRHVyYXRpb24uaXNaZXJvKCkpOworCQkJCWV2aWN0ZWQuaW5jcmVtZW50QW5kR2V0KCk7CisJCQl9CisKKwkJCUBPdmVycmlkZQorCQkJcHVibGljIGJvb2xlYW4gc2hvdWxkUmVwb3J0RXZpY3RlZEV2ZW50KCkgeworCQkJCXJldHVybiB0cnVlOworCQkJfQorCQl9OworCisJCURmc0Jsb2NrQ2FjaGUucmVjb25maWd1cmUobmV3IERmc0Jsb2NrQ2FjaGVDb25maWcoKS5zZXRCbG9ja1NpemUoNTEyKQorCQkJCS5zZXRCbG9ja0xpbWl0KDUxMiAqIDQpCisJCQkJLnNldEluZGV4RXZlbnRDb25zdW1lcihpbmRleEV2ZW50Q29uc3VtZXIpKTsKKwkJY2FjaGUgPSBEZnNCbG9ja0NhY2hlLmdldEluc3RhbmNlKCk7CisKKwkJRGZzUmVwb3NpdG9yeURlc2NyaXB0aW9uIHJlcG8gPSBuZXcgRGZzUmVwb3NpdG9yeURlc2NyaXB0aW9uKCJ0ZXN0Iik7CisJCUluTWVtb3J5UmVwb3NpdG9yeSByMSA9IG5ldyBJbk1lbW9yeVJlcG9zaXRvcnkocmVwbyk7CisJCWJ5dGVbXSBjb250ZW50ID0gcm5nLm5leHRCeXRlcyg0MjQyNDIpOworCQlPYmplY3RJZCBpZDsKKwkJdHJ5IChPYmplY3RJbnNlcnRlciBpbnMgPSByMS5uZXdPYmplY3RJbnNlcnRlcigpKSB7CisJCQlpZCA9IGlucy5pbnNlcnQoT0JKX0JMT0IsIGNvbnRlbnQpOworCQkJaW5zLmZsdXNoKCk7CisJCX0KKworCQl0cnkgKE9iamVjdFJlYWRlciByZHIgPSByMS5uZXdPYmplY3RSZWFkZXIoKSkgeworCQkJYnl0ZVtdIGFjdHVhbCA9IHJkci5vcGVuKGlkLCBPQkpfQkxPQikuZ2V0Qnl0ZXMoKTsKKwkJCWFzc2VydFRydWUoQXJyYXlzLmVxdWFscyhjb250ZW50LCBhY3R1YWwpKTsKKwkJfQorCQkvLyBBbGwgY2FjaGUgZW50cmllcyBhcmUgaG90IGFuZCBjYWNoZSBpcyBhdCBjYXBhY2l0eS4KKwkJYXNzZXJ0VHJ1ZShMb25nU3RyZWFtLm9mKGNhY2hlLmdldEhpdENvdW50KCkpLnN1bSgpID4gMCk7CisJCWFzc2VydEVxdWFscyg5OSwgY2FjaGUuZ2V0RmlsbFBlcmNlbnRhZ2UoKSk7CisKKwkJSW5NZW1vcnlSZXBvc2l0b3J5IHIyID0gbmV3IEluTWVtb3J5UmVwb3NpdG9yeShyZXBvKTsKKwkJY29udGVudCA9IHJuZy5uZXh0Qnl0ZXMoNDI0MjQyKTsKKwkJdHJ5IChPYmplY3RJbnNlcnRlciBpbnMgPSByMi5uZXdPYmplY3RJbnNlcnRlcigpKSB7CisJCQlpbnMuaW5zZXJ0KE9CSl9CTE9CLCBjb250ZW50KTsKKwkJCWlucy5mbHVzaCgpOworCQl9CisJCWFzc2VydFRydWUoY2FjaGUuZ2V0RXZpY3Rpb25zKClbUGFja0V4dC5QQUNLLmdldFBvc2l0aW9uKCldID4gMCk7CisJCWFzc2VydEVxdWFscygxLCBjYWNoZS5nZXRFdmljdGlvbnMoKVtQYWNrRXh0LklOREVYLmdldFBvc2l0aW9uKCldKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIGxvYWRlZC5nZXQoKSk7CisJCWFzc2VydEVxdWFscygxLCBldmljdGVkLmdldCgpKTsKKwl9CisKKwlAVGVzdAogCXB1YmxpYyB2b2lkIG5vQ29uY3VycmVuY3lTZXJpYWxpemVkUmVhZHNfb25lUmVwbygpIHRocm93cyBFeGNlcHRpb24gewogCQlJbk1lbW9yeVJlcG9zaXRvcnkgcjEgPSBjcmVhdGVSZXBvV2l0aEJpdG1hcCgidGVzdCIpOwogCQkvLyBSZXNldCBjYWNoZSB3aXRoIGNvbmN1cnJlbmN5IExldmVsIGF0IDEgaS5lLiBubyBjb25jdXJyZW5jeS4KQEAgLTI2Nyw3ICszODMsNiBAQCBwdWJsaWMgdm9pZCBsb3dDb25jdXJyZW5jeVBhcmFsbGVsUmVhZHNfdHdvUmVwb3NBbmRJbmRleCgpCiAJCWFzc2VydEVxdWFscygyLCBjYWNoZS5nZXRNaXNzQ291bnQoKVswXSk7CiAJfQogCi0JQFN1cHByZXNzV2FybmluZ3MoInJlc291cmNlIikKIAlAVGVzdAogCXB1YmxpYyB2b2lkIGhpZ2hDb25jdXJyZW5jeVBhcmFsbGVsUmVhZHNfb25lUmVwbygpIHRocm93cyBFeGNlcHRpb24gewogCQlJbk1lbW9yeVJlcG9zaXRvcnkgcjEgPSBjcmVhdGVSZXBvV2l0aEJpdG1hcCgidGVzdCIpOwpAQCAtMjkwLDYgKzQwNSwzMCBAQCBwdWJsaWMgdm9pZCBoaWdoQ29uY3VycmVuY3lQYXJhbGxlbFJlYWRzX29uZVJlcG8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJYXNzZXJ0RXF1YWxzKDEsIGNhY2hlLmdldE1pc3NDb3VudCgpWzBdKTsKIAl9CiAKKwlAVGVzdAorCXB1YmxpYyB2b2lkIGhpZ2hDb25jdXJyZW5jeVBhcmFsbGVsUmVhZHNfb25lUmVwb1BhcmFsbGVsUmV2ZXJzZUluZGV4KCkKKwkJCXRocm93cyBFeGNlcHRpb24geworCQlJbk1lbW9yeVJlcG9zaXRvcnkgcjEgPSBjcmVhdGVSZXBvV2l0aEJpdG1hcCgidGVzdCIpOworCQlyZXNldENhY2hlKCk7CisKKwkJRGZzUmVhZGVyIHJlYWRlciA9IChEZnNSZWFkZXIpIHIxLm5ld09iamVjdFJlYWRlcigpOworCQlyZWFkZXIuZ2V0T3B0aW9ucygpLnNldExvYWRSZXZJbmRleEluUGFyYWxsZWwodHJ1ZSk7CisJCWZvciAoRGZzUGFja0ZpbGUgcGFjayA6IHIxLmdldE9iamVjdERhdGFiYXNlKCkuZ2V0UGFja3MoKSkgeworCQkJLy8gT25seSBsb2FkIG5vbi1nYXJiYWdlIHBhY2sgd2l0aCBiaXRtYXAuCisJCQlpZiAocGFjay5pc0dhcmJhZ2UoKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYXN5bmNSdW4oKCkgLT4gcGFjay5nZXRCaXRtYXBJbmRleChyZWFkZXIpKTsKKwkJCWFzeW5jUnVuKCgpIC0+IHBhY2suZ2V0UGFja0luZGV4KHJlYWRlcikpOworCQkJYXN5bmNSdW4oKCkgLT4gcGFjay5nZXRCaXRtYXBJbmRleChyZWFkZXIpKTsKKwkJfQorCQl3YWl0Rm9yRXhlY3V0b3JQb29sVGVybWluYXRpb24oKTsKKworCQlhc3NlcnRFcXVhbHMoMSwgY2FjaGUuZ2V0TWlzc0NvdW50KClbUGFja0V4dC5CSVRNQVBfSU5ERVgub3JkaW5hbCgpXSk7CisJCWFzc2VydEVxdWFscygxLCBjYWNoZS5nZXRNaXNzQ291bnQoKVtQYWNrRXh0LklOREVYLm9yZGluYWwoKV0pOworCQlhc3NlcnRFcXVhbHMoMSwgY2FjaGUuZ2V0TWlzc0NvdW50KClbMF0pOworCX0KKwogCXByaXZhdGUgdm9pZCByZXNldENhY2hlKCkgewogCQlyZXNldENhY2hlKDMyKTsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0JhdGNoUmVmVXBkYXRlVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9CYXRjaFJlZlVwZGF0ZVRlc3QuamF2YQppbmRleCA2MzU3YTBiLi5kYWY0MzgyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0JhdGNoUmVmVXBkYXRlVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvQmF0Y2hSZWZVcGRhdGVUZXN0LmphdmEKQEAgLTQyLDYgKzQyLDggQEAKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmxvY2tzLlJlZW50cmFudExvY2s7CiBpbXBvcnQgamF2YS51dGlsLmZ1bmN0aW9uLlByZWRpY2F0ZTsKK2ltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uRnVuY3Rpb247CitpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOwogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5ldmVudHMuTGlzdGVuZXJIYW5kbGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5ldmVudHMuUmVmc0NoYW5nZWRMaXN0ZW5lcjsKQEAgLTEyNyw2ICsxMjksNyBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCQl9CiAKIAkJZGlza1JlcG8gPSBmaWxlUmVwbzsKKwkJYWRkUmVwb1RvQ2xvc2UoZGlza1JlcG8pOwogCQlzZXRMb2dBbGxSZWZVcGRhdGVzKHRydWUpOwogCiAJCWlmICghdXNlUmVmdGFibGUpIHsKQEAgLTExOTAsNyArMTE5Myw4IEBAIHByaXZhdGUgdm9pZCBhc3NlcnRSZWZzKE9iamVjdC4uLiBhcmdzKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQl9CiAKIAkJTWFwPFN0cmluZywgUmVmPiByZWZzID0gZGlza1JlcG8uZ2V0UmVmRGF0YWJhc2UoKQotCQkJCS5nZXRSZWZzKFJlZkRhdGFiYXNlLkFMTCk7CisJCQkJLmdldFJlZnNCeVByZWZpeChSZWZEYXRhYmFzZS5BTEwpLnN0cmVhbSgpCisJCQkJLmNvbGxlY3QoQ29sbGVjdG9ycy50b01hcChSZWY6OmdldE5hbWUsIEZ1bmN0aW9uLmlkZW50aXR5KCkpKTsKIAkJUmVmIGFjdHVhbEhlYWQgPSByZWZzLnJlbW92ZShDb25zdGFudHMuSEVBRCk7CiAJCWlmIChhY3R1YWxIZWFkICE9IG51bGwpIHsKIAkJCVN0cmluZyBhY3R1YWxMZWFmTmFtZSA9IGFjdHVhbEhlYWQuZ2V0TGVhZigpLmdldE5hbWUoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvRmlsZVJlZnRhYmxlU3RhY2tUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0ZpbGVSZWZ0YWJsZVN0YWNrVGVzdC5qYXZhCmluZGV4IDZjNzRmMDAuLjZjNzk5MjcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvRmlsZVJlZnRhYmxlU3RhY2tUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVmdGFibGVTdGFja1Rlc3QuamF2YQpAQCAtMTQsNiArMTQsNyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7CiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VHJ1ZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc3VtZS5hc3N1bWVGYWxzZTsKIAogaW1wb3J0IGphdmEuaW8uRmlsZTsKIGltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKQEAgLTMyLDEwICszMywxMiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkUmVmOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRmlsZVV0aWxzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TeXN0ZW1SZWFkZXI7CiBpbXBvcnQgb3JnLmp1bml0LkFmdGVyOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKKwogcHVibGljIGNsYXNzIEZpbGVSZWZ0YWJsZVN0YWNrVGVzdCB7CiAKIAlwcml2YXRlIHN0YXRpYyBSZWYgbmV3UmVmKFN0cmluZyBuYW1lLCBPYmplY3RJZCBpZCkgewpAQCAtMTE1LDkgKzExOCwxMiBAQCBwdWJsaWMgdm9pZCB0ZXN0Q29tcGFjdGlvbjEwMjQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJdGVzdENvbXBhY3Rpb24oMTAyNCk7CiAJfQogCi0JQFN1cHByZXNzV2FybmluZ3MoeyAicmVzb3VyY2UiLCAidW51c2VkIiB9KQorCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCBtaXNzaW5nUmVmdGFibGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJLy8gQ2FuJ3QgZGVsZXRlIGluLXVzZSBmaWxlcyBvbiBXaW5kb3dzLgorCQlhc3N1bWVGYWxzZShTeXN0ZW1SZWFkZXIuZ2V0SW5zdGFuY2UoKS5pc1dpbmRvd3MoKSk7CisKIAkJdHJ5IChGaWxlUmVmdGFibGVTdGFjayBzdGFjayA9IG5ldyBGaWxlUmVmdGFibGVTdGFjaygKIAkJCQluZXcgRmlsZShyZWZ0YWJsZURpciwgInJlZnMiKSwgcmVmdGFibGVEaXIsIG51bGwsCiAJCQkJKCkgLT4gbmV3IENvbmZpZygpKSkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9HY1Rlc3RDYXNlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0djVGVzdENhc2UuamF2YQppbmRleCBiZmIyMzNmLi40OGY2ZTA2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0djVGVzdENhc2UuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0djVGVzdENhc2UuamF2YQpAQCAtNDIsNiArNDIsNyBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCUBPdmVycmlkZQogCUBBZnRlcgogCXB1YmxpYyB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCXRyLmNsb3NlKCk7CiAJCXN1cGVyLnRlYXJEb3duKCk7CiAJfQogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tXcml0ZXJUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tXcml0ZXJUZXN0LmphdmEKaW5kZXggMWZmMjI2NC4uM2ZlOGY1MiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrV3JpdGVyVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja1dyaXRlclRlc3QuamF2YQpAQCAtNzIyLDYgKzcyMiw3IEBAIHB1YmxpYyB2b2lkIHRlc3RQYXJ0aWFsUGFja0ZpbGVzU2NhbldoZW5Eb2luZ1NlYXJjaEZvclJldXNlVGltZW91dENoZWNrKCkKIAkgKi8KIAlwcml2YXRlIEZpbGVSZXBvc2l0b3J5IHNldFVwUmVwb1dpdGhNdWx0aXBsZVBhY2tmaWxlcygpIHRocm93cyBFeGNlcHRpb24gewogCQlGaWxlUmVwb3NpdG9yeSBmaWxlUmVwb3NpdG9yeSA9IGNyZWF0ZVdvcmtSZXBvc2l0b3J5KCk7CisJCWFkZFJlcG9Ub0Nsb3NlKGZpbGVSZXBvc2l0b3J5KTsKIAkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChmaWxlUmVwb3NpdG9yeSkpIHsKIAkJCS8vIENyZWF0ZXMgMiBvYmplY3RzIChDMSA9IGNvbW1pdCwgVDEgPSB0cmVlKQogCQkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIkZpcnN0IGNvbW1pdCIpLmNhbGwoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2lvL0NhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvaW8vQ2FuY2VsbGFibGVEaWdlc3RPdXRwdXRTdHJlYW1UZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhN2MwYgotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2lvL0NhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtVGVzdC5qYXZhCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyLCBUZW5jZW50LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuaW87CisKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvLkNhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtLkJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0s7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRocm93czsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgamF2YS5pby5JbnRlcnJ1cHRlZElPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUHJvZ3Jlc3NNb25pdG9yOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pby5OdWxsT3V0cHV0U3RyZWFtOworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitwdWJsaWMgY2xhc3MgQ2FuY2VsbGFibGVEaWdlc3RPdXRwdXRTdHJlYW1UZXN0IHsKKwlwcml2YXRlIHN0YXRpYyBjbGFzcyBDYW5jZWxsZWRUZXN0TW9uaXRvciBpbXBsZW1lbnRzIFByb2dyZXNzTW9uaXRvciB7CisKKwkJcHJpdmF0ZSBib29sZWFuIGNhbmNlbGxlZCA9IGZhbHNlOworCisJCXB1YmxpYyB2b2lkIHNldENhbmNlbGxlZChib29sZWFuIGNhbmNlbGxlZCkgeworCQkJdGhpcy5jYW5jZWxsZWQgPSBjYW5jZWxsZWQ7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIHZvaWQgc3RhcnQoaW50IHRvdGFsVGFza3MpIHsKKwkJCS8vIG5vdCBpbXBsZW1lbnRlZAorCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIGJlZ2luVGFzayhTdHJpbmcgdGl0bGUsIGludCB0b3RhbFdvcmspIHsKKwkJCS8vIG5vdCBpbXBsZW1lbnRlZAorCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyB2b2lkIHVwZGF0ZShpbnQgY29tcGxldGVkKSB7CisJCQkvLyBub3QgaW1wbGVtZW50ZWQKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgdm9pZCBlbmRUYXNrKCkgeworCQkJLy8gbm90IGltcGxlbWVudGVkCisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gaXNDYW5jZWxsZWQoKSB7CisJCQlyZXR1cm4gY2FuY2VsbGVkOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2FuY2VsSW5Qcm9jZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUNhbmNlbGxlZFRlc3RNb25pdG9yIG0gPSBuZXcgQ2FuY2VsbGVkVGVzdE1vbml0b3IoKTsKKwkJdHJ5IChDYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbSBvdXQgPSBuZXcgQ2FuY2VsbGFibGVEaWdlc3RPdXRwdXRTdHJlYW0oCisJCQkJbSwgTnVsbE91dHB1dFN0cmVhbS5JTlNUQU5DRSkpIHsKKwkJCWJ5dGVbXSBLQiA9IG5ldyBieXRlWzEwMjRdOworCQkJaW50IHRyaWdnZXJDYW5jZWxXcml0ZUNudCA9IEJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0sKKwkJCQkJLyBLQi5sZW5ndGg7CisJCQlmb3IgKGludCBpID0gMDsgaSA8IHRyaWdnZXJDYW5jZWxXcml0ZUNudCArIDE7IGkrKykgeworCQkJCW91dC53cml0ZShLQik7CisJCQl9CisJCQlhc3NlcnRUcnVlKG91dC5sZW5ndGgoKSA+IEJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0spOworCQkJbS5zZXRDYW5jZWxsZWQodHJ1ZSk7CisKKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgdHJpZ2dlckNhbmNlbFdyaXRlQ250IC0gMTsgaSsrKSB7CisJCQkJb3V0LndyaXRlKEtCKTsKKwkJCX0KKworCQkJbG9uZyBsYXN0TGVuZ3RoID0gb3V0Lmxlbmd0aCgpOworCQkJYXNzZXJ0VGhyb3dzKEludGVycnVwdGVkSU9FeGNlcHRpb24uY2xhc3MsICgpIC0+IHsKKwkJCQlvdXQud3JpdGUoMSk7CisJCQl9KTsKKwkJCWFzc2VydEVxdWFscyhsYXN0TGVuZ3RoLCBvdXQubGVuZ3RoKCkpOworCisJCQlhc3NlcnRUaHJvd3MoSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbi5jbGFzcywgKCkgLT4geworCQkJCW91dC53cml0ZShuZXcgYnl0ZVsxXSk7CisJCQl9KTsKKwkJCWFzc2VydEVxdWFscyhsYXN0TGVuZ3RoLCBvdXQubGVuZ3RoKCkpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0VHJpZ2dlckNoZWNrQWZ0ZXJTaW5nbGVCeXRlcygpIHRocm93cyBFeGNlcHRpb24geworCQlDYW5jZWxsZWRUZXN0TW9uaXRvciBtID0gbmV3IENhbmNlbGxlZFRlc3RNb25pdG9yKCk7CisJCXRyeSAoQ2FuY2VsbGFibGVEaWdlc3RPdXRwdXRTdHJlYW0gb3V0ID0gbmV3IENhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtKAorCQkJCW0sIE51bGxPdXRwdXRTdHJlYW0uSU5TVEFOQ0UpKSB7CisKKwkJCWJ5dGVbXSBieXRlcyA9IG5ldyBieXRlW0JZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0sgKyAxXTsKKwkJCW0uc2V0Q2FuY2VsbGVkKHRydWUpOworCisJCQlhc3NlcnRUaHJvd3MoSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbi5jbGFzcywgKCkgLT4geworCQkJCW91dC53cml0ZShieXRlcyk7CisJCQl9KTsKKwkJCWFzc2VydEVxdWFscyhCWVRFU19UT19XUklURV9CRUZPUkVfQ0FOQ0VMX0NIRUNLLCBvdXQubGVuZ3RoKCkpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3RyYW5zcG9ydC9zc2gvT3BlblNzaENvbmZpZ0ZpbGVUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaC9PcGVuU3NoQ29uZmlnRmlsZVRlc3QuamF2YQppbmRleCAxMTc0MWI0Li5kMDY1MjgwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaC9PcGVuU3NoQ29uZmlnRmlsZVRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaC9PcGVuU3NoQ29uZmlnRmlsZVRlc3QuamF2YQpAQCAtMzY5LDIwICszNjksMjEgQEAgcHVibGljIHZvaWQgdGVzdEhvc3RDYXNlSW5zZW5zaXRpdmUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdExpc3RWYWx1ZVNpbmdsZSgpIHRocm93cyBFeGNlcHRpb24gewotCQljb25maWcoIkhvc3Qgb3JjelxuVXNlcktub3duSG9zdHNGaWxlIC9mb28vYmFyXG4iKTsKKwkJY29uZmlnKCJIb3N0IG9yY3pcblVzZXJLbm93bkhvc3RzRmlsZSB+L2Zvby9iYXJcbiIpOwogCQlmaW5hbCBIb3N0Q29uZmlnIGMgPSBsb29rdXAoIm9yY3oiKTsKIAkJYXNzZXJ0Tm90TnVsbChjKTsKLQkJYXNzZXJ0RXF1YWxzKCIvZm9vL2JhciIsIGMuZ2V0VmFsdWUoIlVzZXJLbm93bkhvc3RzRmlsZSIpKTsKKwkJYXNzZXJ0RXF1YWxzKG5ldyBGaWxlKGhvbWUsICJmb28vYmFyIikuZ2V0UGF0aCgpLAorCQkJCWMuZ2V0VmFsdWUoIlVzZXJLbm93bkhvc3RzRmlsZSIpKTsKIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RMaXN0VmFsdWVNdWx0aXBsZSgpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyBUaWxkZSBleHBhbnNpb24gb2NjdXJzIHdpdGhpbiB0aGUgcGFyc2VyCi0JCWNvbmZpZygiSG9zdCBvcmN6XG5Vc2VyS25vd25Ib3N0c0ZpbGUgXCJ+L2Zvby9iYSB6XCIgL2Zvby9iYXIgXG4iKTsKKwkJY29uZmlnKCJIb3N0IG9yY3pcblVzZXJLbm93bkhvc3RzRmlsZSBcIn4vZm9vL2JhIHpcIiB+L2Zvby9iYXIgXG4iKTsKIAkJZmluYWwgSG9zdENvbmZpZyBjID0gbG9va3VwKCJvcmN6Iik7CiAJCWFzc2VydE5vdE51bGwoYyk7CiAJCWFzc2VydEFycmF5RXF1YWxzKG5ldyBPYmplY3RbXSB7IG5ldyBGaWxlKGhvbWUsICJmb28vYmEgeiIpLmdldFBhdGgoKSwKLQkJCQkiL2Zvby9iYXIiIH0sCisJCQkJbmV3IEZpbGUoaG9tZSwgImZvby9iYXIiKS5nZXRQYXRoKCkgfSwKIAkJCQljLmdldFZhbHVlcygiVXNlcktub3duSG9zdHNGaWxlIikudG9BcnJheSgpKTsKIAl9CiAKQEAgLTQwMywyMiArNDA0LDIzIEBAIHB1YmxpYyB2b2lkIHRlc3RSZXBlYXRlZExvb2t1cHNXaXRoTW9kaWZpY2F0aW9uKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RJZGVudGl0eUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJY29uZmlnKCJIb3N0IG9yY3pcbklkZW50aXR5RmlsZSBcIn4vZm9vL2JhIHpcIlxuSWRlbnRpdHlGaWxlIC9mb28vYmFyIik7CisJCWNvbmZpZygiSG9zdCBvcmN6XG5JZGVudGl0eUZpbGUgXCJ+L2Zvby9iYSB6XCJcbklkZW50aXR5RmlsZSB+L2Zvby9iYXIiKTsKIAkJZmluYWwgSG9zdENvbmZpZyBoID0gbG9va3VwKCJvcmN6Iik7CiAJCWFzc2VydE5vdE51bGwoaCk7CiAJCS8vIERvZXMgdGlsZGUgcmVwbGFjZW1lbnQKIAkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IE9iamVjdFtdIHsgbmV3IEZpbGUoaG9tZSwgImZvby9iYSB6IikuZ2V0UGF0aCgpLAotCQkJCSIvZm9vL2JhciIgfSwKKwkJCQluZXcgRmlsZShob21lLCAiZm9vL2JhciIpLmdldFBhdGgoKSB9LAogCQkJCWguZ2V0VmFsdWVzKFNzaENvbnN0YW50cy5JREVOVElUWV9GSUxFKS50b0FycmF5KCkpOwogCX0KIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdE11bHRpSWRlbnRpdHlGaWxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWNvbmZpZygiSWRlbnRpdHlGaWxlIFwifi9mb28vYmEgelwiXG5Ib3N0IG9yY3pcbklkZW50aXR5RmlsZSAvZm9vL2JhclxuSE9TVCAqXG5JZGVudGl0eUZpbGUgL2Zvby9iYXoiKTsKKwkJY29uZmlnKCJJZGVudGl0eUZpbGUgXCJ+L2Zvby9iYSB6XCJcbkhvc3Qgb3JjelxuSWRlbnRpdHlGaWxlIH4vZm9vL2JhclxuSE9TVCAqXG5JZGVudGl0eUZpbGUgfi9mb28vYmF6Iik7CiAJCWZpbmFsIEhvc3RDb25maWcgaCA9IGxvb2t1cCgib3JjeiIpOwogCQlhc3NlcnROb3ROdWxsKGgpOwogCQlhc3NlcnRBcnJheUVxdWFscyhuZXcgT2JqZWN0W10geyBuZXcgRmlsZShob21lLCAiZm9vL2JhIHoiKS5nZXRQYXRoKCksCi0JCQkJIi9mb28vYmFyIiwgIi9mb28vYmF6IiB9LAorCQkJCW5ldyBGaWxlKGhvbWUsICJmb28vYmFyIikuZ2V0UGF0aCgpLAorCQkJCW5ldyBGaWxlKGhvbWUsICJmb28vYmF6IikuZ2V0UGF0aCgpIH0sCiAJCQkJaC5nZXRWYWx1ZXMoU3NoQ29uc3RhbnRzLklERU5USVRZX0ZJTEUpLnRvQXJyYXkoKSk7CiAJfQogCkBAIC00MzQsMjMgKzQzNiwyMyBAQCBwdWJsaWMgdm9pZCB0ZXN0TmVnYXRlZFBhdHRlcm4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdFBhdHRlcm4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJY29uZmlnKCJIb3N0IHJlcG8ub3IuY3pcbklkZW50aXR5RmlsZSB+L2Zvby9iYXJcbkhPU1QgKi5vci5jelxuSWRlbnRpdHlGaWxlIC9mb28vYmF6Iik7CisJCWNvbmZpZygiSG9zdCByZXBvLm9yLmN6XG5JZGVudGl0eUZpbGUgfi9mb28vYmFyXG5IT1NUICoub3IuY3pcbklkZW50aXR5RmlsZSB+L2Zvby9iYXoiKTsKIAkJZmluYWwgSG9zdENvbmZpZyBoID0gbG9va3VwKCJyZXBvLm9yLmN6Iik7CiAJCWFzc2VydE5vdE51bGwoaCk7CiAJCWFzc2VydElkZW50aXR5KG5ldyBGaWxlKGhvbWUsICJmb28vYmFyIiksIGgpOwogCQlhc3NlcnRBcnJheUVxdWFscyhuZXcgT2JqZWN0W10geyBuZXcgRmlsZShob21lLCAiZm9vL2JhciIpLmdldFBhdGgoKSwKLQkJCQkiL2Zvby9iYXoiIH0sCisJCQkJbmV3IEZpbGUoaG9tZSwgImZvby9iYXoiKS5nZXRQYXRoKCkgfSwKIAkJCQloLmdldFZhbHVlcyhTc2hDb25zdGFudHMuSURFTlRJVFlfRklMRSkudG9BcnJheSgpKTsKIAl9CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RNdWx0aUhvc3QoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJY29uZmlnKCJIb3N0IG9yY3ogKi5vci5jelxuSWRlbnRpdHlGaWxlIH4vZm9vL2JhclxuSE9TVCAqLm9yLmN6XG5JZGVudGl0eUZpbGUgL2Zvby9iYXoiKTsKKwkJY29uZmlnKCJIb3N0IG9yY3ogKi5vci5jelxuSWRlbnRpdHlGaWxlIH4vZm9vL2JhclxuSE9TVCAqLm9yLmN6XG5JZGVudGl0eUZpbGUgfi9mb28vYmF6Iik7CiAJCWZpbmFsIEhvc3RDb25maWcgaDEgPSBsb29rdXAoInJlcG8ub3IuY3oiKTsKIAkJYXNzZXJ0Tm90TnVsbChoMSk7CiAJCWFzc2VydElkZW50aXR5KG5ldyBGaWxlKGhvbWUsICJmb28vYmFyIiksIGgxKTsKIAkJYXNzZXJ0QXJyYXlFcXVhbHMobmV3IE9iamVjdFtdIHsgbmV3IEZpbGUoaG9tZSwgImZvby9iYXIiKS5nZXRQYXRoKCksCi0JCQkJIi9mb28vYmF6IiB9LAorCQkJCW5ldyBGaWxlKGhvbWUsICJmb28vYmF6IikuZ2V0UGF0aCgpIH0sCiAJCQkJaDEuZ2V0VmFsdWVzKFNzaENvbnN0YW50cy5JREVOVElUWV9GSUxFKS50b0FycmF5KCkpOwogCQlmaW5hbCBIb3N0Q29uZmlnIGgyID0gbG9va3VwKCJvcmN6Iik7CiAJCWFzc2VydE5vdE51bGwoaDIpOwpAQCAtNTQ3LDE4ICs1NDksMzYgQEAgcHVibGljIHZvaWQgdGVzdEVvbENvbW1lbnRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RFblZhclN1YnN0aXR1dGlvbigpIHRocm93cyBFeGNlcHRpb24gewotCQljb25maWcoIkhvc3Qgb3JjelxuSWRlbnRpdHlGaWxlIC90bXAvJHtUU1RfVkFSfVxuIgotCQkJCSsgIkNlcnRpZmljYXRlRmlsZSAvdG1wLyR7fS9mb29cblVzZXIgJHtUU1RfVkFSfVxuSWRlbnRpdHlBZ2VudCAvdG1wLyR7VFNUX1ZBUi9iYXIiKTsKKwkJY29uZmlnKCJIb3N0IG9yY3pcbklkZW50aXR5RmlsZSB+L3RtcC8ke1RTVF9WQVJ9XG4iCisJCQkJKyAiQ2VydGlmaWNhdGVGaWxlIH4vdG1wLyR7fS9mb29cblVzZXIgJHtUU1RfVkFSfVxuSWRlbnRpdHlBZ2VudCB+L3RtcC8ke1RTVF9WQVIvYmFyIik7CiAJCUhvc3RDb25maWcgaCA9IGxvb2t1cCgib3JjeiIpOwogCQlhc3NlcnROb3ROdWxsKGgpOwotCQlhc3NlcnRFcXVhbHMoIi90bXAvVEVTVCIsCisJCUZpbGUgdG1wID0gbmV3IEZpbGUoaG9tZSwgInRtcCIpOworCQlhc3NlcnRFcXVhbHMobmV3IEZpbGUodG1wLCAiVEVTVCIpLmdldFBhdGgoKSwKIAkJCQloLmdldFZhbHVlKFNzaENvbnN0YW50cy5JREVOVElUWV9GSUxFKSk7CiAJCS8vIE5vIHZhcmlhYmxlIG5hbWUKLQkJYXNzZXJ0RXF1YWxzKCIvdG1wLyR7fS9mb28iLCBoLmdldFZhbHVlKFNzaENvbnN0YW50cy5DRVJUSUZJQ0FURV9GSUxFKSk7CisJCWFzc2VydEVxdWFscyhuZXcgRmlsZShuZXcgRmlsZSh0bXAsICIke30iKSwgImZvbyIpLmdldFBhdGgoKSwKKwkJCQloLmdldFZhbHVlKFNzaENvbnN0YW50cy5DRVJUSUZJQ0FURV9GSUxFKSk7CiAJCS8vIFVzZXIgZG9lc24ndCBnZXQgZW52IHZhciBzdWJzdGl0dXRpb246CiAJCWFzc2VydFVzZXIoIiR7VFNUX1ZBUn0iLCBoKTsKIAkJLy8gVW50ZXJtaW5hdGVkOgotCQlhc3NlcnRFcXVhbHMoIi90bXAvJHtUU1RfVkFSL2JhciIsCisJCWFzc2VydEVxdWFscyhuZXcgRmlsZShuZXcgRmlsZSh0bXAsICIke1RTVF9WQVIiKSwgImJhciIpLmdldFBhdGgoKSwKKwkJCQloLmdldFZhbHVlKFNzaENvbnN0YW50cy5JREVOVElUWV9BR0VOVCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdElkZW50aXR5QWdlbnROb25lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNvbmZpZygiSG9zdCBvcmN6XG5JZGVudGl0eUFnZW50IG5vbmVcbiIpOworCQlIb3N0Q29uZmlnIGggPSBsb29rdXAoIm9yY3oiKTsKKwkJYXNzZXJ0RXF1YWxzKFNzaENvbnN0YW50cy5OT05FLAorCQkJCWguZ2V0VmFsdWUoU3NoQ29uc3RhbnRzLklERU5USVRZX0FHRU5UKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SWRlbnRpdHlBZ2VudFNzaEF1dGhTb2NrKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWNvbmZpZygiSG9zdCBvcmN6XG5JZGVudGl0eUFnZW50IFNTSF9BVVRIX1NPQ0tcbiIpOworCQlIb3N0Q29uZmlnIGggPSBsb29rdXAoIm9yY3oiKTsKKwkJYXNzZXJ0RXF1YWxzKFNzaENvbnN0YW50cy5FTlZfU1NIX0FVVEhfU09DS0VULAogCQkJCWguZ2V0VmFsdWUoU3NoQ29uc3RhbnRzLklERU5USVRZX0FHRU5UKSk7CiAJfQogCkBAIC02MDcsMTMgKzYyNywxNiBAQCBwdWJsaWMgdm9pZCB0ZXN0Tm9NYXRjaCgpIHRocm93cyBFeGNlcHRpb24gewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0TXVsdGlwbGVNYXRjaCgpIHRocm93cyBFeGNlcHRpb24gewotCQljb25maWcoIkhvc3QgZm9vLmJhclxuUG9ydCAyOTQxOFxuSWRlbnRpdHlGaWxlIC9mb29cblxuIgotCQkJCSsgIkhvc3QgKi5iYXJcblBvcnQgMjJcbklkZW50aXR5RmlsZSAvYmFyXG4iCi0JCQkJKyAiSG9zdCBmb28uYmFyXG5Qb3J0IDQ3XG5JZGVudGl0eUZpbGUgL2JhelxuIik7CisJCWNvbmZpZygiSG9zdCBmb28uYmFyXG5Qb3J0IDI5NDE4XG5JZGVudGl0eUZpbGUgfi9mb29cblxuIgorCQkJCSsgIkhvc3QgKi5iYXJcblBvcnQgMjJcbklkZW50aXR5RmlsZSB+L2JhclxuIgorCQkJCSsgIkhvc3QgZm9vLmJhclxuUG9ydCA0N1xuSWRlbnRpdHlGaWxlIH4vYmF6XG4iKTsKIAkJSG9zdENvbmZpZyBoID0gbG9va3VwKCJmb28uYmFyIik7CiAJCWFzc2VydE5vdE51bGwoaCk7CiAJCWFzc2VydFBvcnQoMjk0MTgsIGgpOwotCQlhc3NlcnRBcnJheUVxdWFscyhuZXcgT2JqZWN0W10geyAiL2ZvbyIsICIvYmFyIiwgIi9iYXoiIH0sCisJCWFzc2VydEFycmF5RXF1YWxzKAorCQkJCW5ldyBPYmplY3RbXSB7IG5ldyBGaWxlKGhvbWUsICJmb28iKS5nZXRQYXRoKCksCisJCQkJCQluZXcgRmlsZShob21lLCAiYmFyIikuZ2V0UGF0aCgpLAorCQkJCQkJbmV3IEZpbGUoaG9tZSwgImJheiIpLmdldFBhdGgoKSB9LAogCQkJCWguZ2V0VmFsdWVzKFNzaENvbnN0YW50cy5JREVOVElUWV9GSUxFKS50b0FycmF5KCkpOwogCX0KIApAQCAtNjMzLDQgKzY1Niw2MSBAQCBwdWJsaWMgdm9pZCB0ZXN0V2hpdGVzcGFjZSgpIHRocm93cyBFeGNlcHRpb24gewogCQlhc3NlcnROb3ROdWxsKGgpOwogCQlhc3NlcnRQb3J0KDIyLCBoKTsKIAl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RUaW1lU3BlYygpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRFcXVhbHMoLTEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKG51bGwpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiIikpOworCQlhc3NlcnRFcXVhbHMoLTEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIgICIpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygicyIpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiICBzIikpOworCQlhc3NlcnRFcXVhbHMoLTEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIgK3MiKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIiAtcyIpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMW1zIikpOworCQlhc3NlcnRFcXVhbHMoNjAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiNjAwIikpOworCQlhc3NlcnRFcXVhbHMoNjAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiNjAwcyIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIiAgNjAwcyIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIiAgNjAwcyAgIikpOworCQlhc3NlcnRFcXVhbHMoNjAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiXHQ2MDBzIikpOworCQlhc3NlcnRFcXVhbHMoNjAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiIFx0NjAwICAiKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIiAgNjAwIHMgICIpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiNjAwIHMiKSk7CisJCWFzc2VydEVxdWFscyg2MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxMG0iKSk7CisJCWFzc2VydEVxdWFscyg1NDAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMWgzMG0iKSk7CisJCWFzc2VydEVxdWFscyg1NDAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMWggMzBtIikpOworCQlhc3NlcnRFcXVhbHMoNTQwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFoIFx0MzBtIikpOworCQlhc3NlcnRFcXVhbHMoNTQwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFoKzMwbSIpKTsKKwkJYXNzZXJ0RXF1YWxzKDU0MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxaCArMzBtIikpOworCQlhc3NlcnRFcXVhbHMoLTEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxaCArIDMwbSIpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMWggLTMwbSIpKTsKKwkJYXNzZXJ0RXF1YWxzKDM2MzAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxaDMwcyIpKTsKKwkJYXNzZXJ0RXF1YWxzKDU0MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIzMG0gMWgiKSk7CisJCWFzc2VydEVxdWFscygzNjAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMzBtIDMwbSIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMzAgMzAiKSk7CisJCWFzc2VydEVxdWFscygwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMCIpKTsKKwkJYXNzZXJ0RXF1YWxzKDEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxIikpOworCQlhc3NlcnRFcXVhbHMoMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFTIikpOworCQlhc3NlcnRFcXVhbHMoMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFzIikpOworCQlhc3NlcnRFcXVhbHMoNjAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxTSIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMW0iKSk7CisJCWFzc2VydEVxdWFscygzNjAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMUgiKSk7CisJCWFzc2VydEVxdWFscygzNjAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMWgiKSk7CisJCWFzc2VydEVxdWFscyg4NjQwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFEIikpOworCQlhc3NlcnRFcXVhbHMoODY0MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxZCIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwNDgwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjFXIikpOworCQlhc3NlcnRFcXVhbHMoNjA0ODAwLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiMXciKSk7CisJCWFzc2VydEVxdWFscygxNzI4MDAsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIyZCIpKTsKKwkJYXNzZXJ0RXF1YWxzKDYwNDgwMCwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjF3IikpOworCQlhc3NlcnRFcXVhbHMoNjA0ODAwICsgMTcyODAwICsgMyAqIDM2MDAgKyAzMCAqIDYwICsgMTAsCisJCQkJT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIjF3MmQzaDMwbTEwcyIpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZS50aW1lU3BlYygiLTciKSk7CisJCWFzc2VydEVxdWFscygtMSwgT3BlblNzaENvbmZpZ0ZpbGUudGltZVNwZWMoIi05ZCIpKTsKKwkJYXNzZXJ0RXF1YWxzKEludGVnZXIuTUFYX1ZBTFVFLCBPcGVuU3NoQ29uZmlnRmlsZQorCQkJCS50aW1lU3BlYyhJbnRlZ2VyLnRvU3RyaW5nKEludGVnZXIuTUFYX1ZBTFVFKSkpOworCQlhc3NlcnRFcXVhbHMoLTEsIE9wZW5Tc2hDb25maWdGaWxlCisJCQkJLnRpbWVTcGVjKExvbmcudG9TdHJpbmcoSW50ZWdlci5NQVhfVkFMVUUgKyAxTCkpKTsKKwkJYXNzZXJ0RXF1YWxzKC0xLCBPcGVuU3NoQ29uZmlnRmlsZQorCQkJCS50aW1lU3BlYyhJbnRlZ2VyLnRvU3RyaW5nKEludGVnZXIuTUFYX1ZBTFVFIC8gNjAgKyAxKSArICdNJykpOworCQlhc3NlcnRFcXVhbHMoLTEsIE9wZW5Tc2hDb25maWdGaWxlLnRpbWVTcGVjKCIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwdyIpKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0FiYnJldkNvbmZpZ1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvQWJicmV2Q29uZmlnVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YWNlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0FiYnJldkNvbmZpZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjsKKworaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUaHJvd3M7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuanVuaXQuUmVwb3NpdG9yeVRlc3RDYXNlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5maWxlLkZpbGVCYXNlZENvbmZpZzsKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKKworcHVibGljIGNsYXNzIEFiYnJldkNvbmZpZ1Rlc3QgZXh0ZW5kcyBSZXBvc2l0b3J5VGVzdENhc2UgeworCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0RGVmYXVsdCgpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRFcXVhbHMoNywgdGVzdENvcmVBYmJyZXYobnVsbCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdEF1dG8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RXF1YWxzKDcsIHRlc3RDb3JlQWJicmV2KCJhdXRvIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE5vKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFzc2VydEVxdWFscyg0MCwgdGVzdENvcmVBYmJyZXYoIm5vIikpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFZhbGlkTWluKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFzc2VydEVxdWFscyg0LCB0ZXN0Q29yZUFiYnJldigiNCIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RWYWxpZCgpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRFcXVhbHMoMjIsIHRlc3RDb3JlQWJicmV2KCIyMiIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RWYWxpZE1heCgpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRFcXVhbHMoNDAsIHRlc3RDb3JlQWJicmV2KCI0MCIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkKCkgeworCQlhc3NlcnRUaHJvd3MoSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24uY2xhc3MsCisJCQkJKCkgLT4gdGVzdENvcmVBYmJyZXYoImZvbyIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkMigpIHsKKwkJYXNzZXJ0VGhyb3dzKEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uLmNsYXNzLAorCQkJCSgpIC0+IHRlc3RDb3JlQWJicmV2KCIyayIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkTmVnYXRpdmUoKSB7CisJCWFzc2VydFRocm93cyhJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5jbGFzcywKKwkJCQkoKSAtPiB0ZXN0Q29yZUFiYnJldigiLTEwMDAiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZEJlbG93UmFuZ2UoKSB7CisJCWFzc2VydFRocm93cyhJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5jbGFzcywKKwkJCQkoKSAtPiB0ZXN0Q29yZUFiYnJldigiMyIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkQmVsb3dSYW5nZTIoKSB7CisJCWFzc2VydFRocm93cyhJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5jbGFzcywKKwkJCQkoKSAtPiB0ZXN0Q29yZUFiYnJldigiLTEiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZEFib3ZlUmFuZ2UoKSB7CisJCWFzc2VydFRocm93cyhJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbi5jbGFzcywKKwkJCQkoKSAtPiB0ZXN0Q29yZUFiYnJldigiNDEiKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0SW52YWxpZEFib3ZlUmFuZ2UyKCkgeworCQlhc3NlcnRUaHJvd3MoSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24uY2xhc3MsCisJCQkJKCkgLT4gdGVzdENvcmVBYmJyZXYoIjEwMDAwMCIpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZ05vKCkKKwkJCXRocm93cyBJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlhc3NlcnRFcXVhbHMoIjQwIiwgc2V0Q29yZUFiYnJldigibm8iKS50b1N0cmluZygpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RUb1N0cmluZygpCisJCQl0aHJvd3MgSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RXF1YWxzKCI3Iiwgc2V0Q29yZUFiYnJldigiYXV0byIpLnRvU3RyaW5nKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdFRvU3RyaW5nMTIoKQorCQkJdGhyb3dzIEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCWFzc2VydEVxdWFscygiMTIiLCBzZXRDb3JlQWJicmV2KCIxMiIpLnRvU3RyaW5nKCkpOworCX0KKworCXByaXZhdGUgaW50IHRlc3RDb3JlQWJicmV2KFN0cmluZyB2YWx1ZSkKKwkJCXRocm93cyBJbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlyZXR1cm4gc2V0Q29yZUFiYnJldih2YWx1ZSkuZ2V0KCk7CisJfQorCisJcHJpdmF0ZSBBYmJyZXZDb25maWcgc2V0Q29yZUFiYnJldihTdHJpbmcgdmFsdWUpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24sIEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uIHsKKwkJRmlsZUJhc2VkQ29uZmlnIGNvbmZpZyA9IGRiLmdldENvbmZpZygpOworCQljb25maWcuc2V0U3RyaW5nKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0FCQlJFViwgdmFsdWUpOworCQljb25maWcuc2F2ZSgpOworCQlyZXR1cm4gQWJicmV2Q29uZmlnLnBhcnNlRnJvbUNvbmZpZyhkYik7CisJfQorCit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbW1pdENvbmZpZ1Rlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29tbWl0Q29uZmlnVGVzdC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NWQ3ODEKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbW1pdENvbmZpZ1Rlc3QuamF2YQpAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMiwgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5saWI7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhyb3dzOworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuQ29uZmlnSW52YWxpZEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db21taXRDb25maWcuQ2xlYW51cE1vZGU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK3B1YmxpYyBjbGFzcyBDb21taXRDb25maWdUZXN0IHsKKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdERlZmF1bHRzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUNvbW1pdENvbmZpZyBjZmcgPSBwYXJzZSgiIik7CisJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBjbGVhbi11cCBtb2RlIiwgQ2xlYW51cE1vZGUuREVGQVVMVCwKKwkJCQljZmcuZ2V0Q2xlYW51cE1vZGUoKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q29tbWl0Q2xlYW51cCgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmdbXSB2YWx1ZXMgPSB7ICJzdHJpcCIsICJ3aGl0ZXNwYWNlIiwgInZlcmJhdGltIiwgInNjaXNzb3JzIiwKKwkJCQkiZGVmYXVsdCIgfTsKKwkJQ2xlYW51cE1vZGVbXSBleHBlY3RlZCA9IHsgQ2xlYW51cE1vZGUuU1RSSVAsIENsZWFudXBNb2RlLldISVRFU1BBQ0UsCisJCQkJQ2xlYW51cE1vZGUuVkVSQkFUSU0sIENsZWFudXBNb2RlLlNDSVNTT1JTLAorCQkJCUNsZWFudXBNb2RlLkRFRkFVTFQgfTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKKwkJCUNvbW1pdENvbmZpZyBjZmcgPSBwYXJzZSgiW2NvbW1pdF1cblx0Y2xlYW51cCA9ICIgKyB2YWx1ZXNbaV0pOworCQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIGNsZWFuLXVwIG1vZGUiLCBleHBlY3RlZFtpXSwKKwkJCQkJY2ZnLmdldENsZWFudXBNb2RlKCkpOworCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0UmVzb2x2ZSgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmdbXSB2YWx1ZXMgPSB7ICJzdHJpcCIsICJ3aGl0ZXNwYWNlIiwgInZlcmJhdGltIiwgInNjaXNzb3JzIiwKKwkJCQkiZGVmYXVsdCIgfTsKKwkJQ2xlYW51cE1vZGVbXSBleHBlY3RlZCA9IHsgQ2xlYW51cE1vZGUuU1RSSVAsIENsZWFudXBNb2RlLldISVRFU1BBQ0UsCisJCQkJQ2xlYW51cE1vZGUuVkVSQkFUSU0sIENsZWFudXBNb2RlLlNDSVNTT1JTLAorCQkJCUNsZWFudXBNb2RlLkRFRkFVTFQgfTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKKwkJCUNvbW1pdENvbmZpZyBjZmcgPSBwYXJzZSgiW2NvbW1pdF1cblx0Y2xlYW51cCA9ICIgKyB2YWx1ZXNbaV0pOworCQkJZm9yIChDbGVhbnVwTW9kZSBtb2RlIDogQ2xlYW51cE1vZGUudmFsdWVzKCkpIHsKKwkJCQlmb3IgKGludCBqID0gMDsgaiA8IDI7IGorKykgeworCQkJCQlDbGVhbnVwTW9kZSByZXNvbHZlZCA9IGNmZy5yZXNvbHZlKG1vZGUsIGogPT0gMCk7CisJCQkJCWlmIChtb2RlICE9IENsZWFudXBNb2RlLkRFRkFVTFQpIHsKKwkJCQkJCWFzc2VydEVxdWFscygiQ2xlYW4tdXAgbW9kZSBzaG91bGQgYmUgdW5jaGFuZ2VkIiwgbW9kZSwKKwkJCQkJCQkJcmVzb2x2ZWQpOworCQkJCQl9IGVsc2UgaWYgKGkgKyAxIDwgdmFsdWVzLmxlbmd0aCkgeworCQkJCQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIGNsZWFuLXVwIG1vZGUiLCBleHBlY3RlZFtpXSwKKwkJCQkJCQkJcmVzb2x2ZWQpOworCQkJCQl9IGVsc2UgeworCQkJCQkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIGNsZWFuLXVwIG1vZGUiLAorCQkJCQkJCQlqID09IDAgPyBDbGVhbnVwTW9kZS5TVFJJUAorCQkJCQkJCQkJCTogQ2xlYW51cE1vZGUuV0hJVEVTUEFDRSwKKwkJCQkJCQkJcmVzb2x2ZWQpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5EZWZhdWx0VGhyb3dzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCWFzc2VydFRocm93cyhJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24uY2xhc3MsICgpIC0+IENvbW1pdENvbmZpZworCQkJCS5jbGVhblRleHQoIldoYXRldmVyIiwgQ2xlYW51cE1vZGUuREVGQVVMVCwgJyMnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5WZXJiYXRpbSgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbWVzc2FnZSA9ICJcbiAgXG5XaGF0ZXZlciAgXG5cblxuIyBBIGNvbW1lbnRcblxuTW9yZVx0IFxuXG5cbiI7CisJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBtZXNzYWdlIGNoYW5nZSIsIG1lc3NhZ2UsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5WRVJCQVRJTSwgJyMnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5XaGl0ZXNwYWNlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBtZXNzYWdlID0gIlxuICBcbldoYXRldmVyICBcblxuXG4jIEEgY29tbWVudFxuXG5Nb3JlXHQgXG5cblxuIjsKKwkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG1lc3NhZ2UgY2hhbmdlIiwKKwkJCQkiV2hhdGV2ZXJcblxuIyBBIGNvbW1lbnRcblxuTW9yZVxuIiwKKwkJCQlDb21taXRDb25maWcuY2xlYW5UZXh0KG1lc3NhZ2UsIENsZWFudXBNb2RlLldISVRFU1BBQ0UsICcjJykpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENsZWFuU3RyaXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIG1lc3NhZ2UgPSAiXG4gIFxuV2hhdGV2ZXIgIFxuXG5cbiMgQSBjb21tZW50XG5cbk1vcmVcdCBcblxuXG4iOworCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbWVzc2FnZSBjaGFuZ2UiLCAiV2hhdGV2ZXJcblxuTW9yZVxuIiwKKwkJCQlDb21taXRDb25maWcuY2xlYW5UZXh0KG1lc3NhZ2UsIENsZWFudXBNb2RlLlNUUklQLCAnIycpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDbGVhblN0cmlwQ3VzdG9tQ2hhcigpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbWVzc2FnZSA9ICJcbiAgXG5XaGF0ZXZlciAgXG5cblxuIyBOb3QgYSBjb21tZW50XG5cbiAgIDxBIGNvbW1lbnRcbk1vcmVcdCBcblxuXG4iOworCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbWVzc2FnZSBjaGFuZ2UiLAorCQkJCSJXaGF0ZXZlclxuXG4jIE5vdCBhIGNvbW1lbnRcblxuTW9yZVxuIiwKKwkJCQlDb21taXRDb25maWcuY2xlYW5UZXh0KG1lc3NhZ2UsIENsZWFudXBNb2RlLlNUUklQLCAnPCcpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDbGVhblNjaXNzb3JzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBtZXNzYWdlID0gIlxuICBcbldoYXRldmVyICBcblxuXG4jIE5vdCBhIGNvbW1lbnRcblxuICAgPEEgY29tbWVudFxuTW9yZVx0IFxuXG5cbiIKKwkJCQkrICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKwkJCQkrICJNb3JlXG5Nb3JlXG4iOworCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbWVzc2FnZSBjaGFuZ2UiLAorCQkJCSJXaGF0ZXZlclxuXG4jIE5vdCBhIGNvbW1lbnRcblxuICAgPEEgY29tbWVudFxuTW9yZVxuIiwKKwkJCQlDb21taXRDb25maWcuY2xlYW5UZXh0KG1lc3NhZ2UsIENsZWFudXBNb2RlLlNDSVNTT1JTLCAnIycpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDbGVhblNjaXNzb3JzQ3VzdG9tQ2hhcigpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbWVzc2FnZSA9ICJcbiAgXG5XaGF0ZXZlciAgXG5cblxuIyBOb3QgYSBjb21tZW50XG5cbiAgIDxBIGNvbW1lbnRcbk1vcmVcdCBcblxuXG4iCisJCQkJKyAiPCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gPjggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisJCQkJKyAiTW9yZVxuTW9yZVxuIjsKKwkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG1lc3NhZ2UgY2hhbmdlIiwKKwkJCQkiV2hhdGV2ZXJcblxuIyBOb3QgYSBjb21tZW50XG5cbiAgIDxBIGNvbW1lbnRcbk1vcmVcbiIsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5TQ0lTU09SUywgJzwnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5TY2lzc29yc0F0VG9wKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBtZXNzYWdlID0gIiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCQkJCSsgIlxuICBcbldoYXRldmVyICBcblxuXG4jIE5vdCBhIGNvbW1lbnRcblxuICAgPEEgY29tbWVudFxuTW9yZVx0IFxuXG5cbiIKKwkJCQkrICJNb3JlXG5Nb3JlXG4iOworCQlhc3NlcnRFcXVhbHMoIlVuZXhwZWN0ZWQgbWVzc2FnZSBjaGFuZ2UiLCAiIiwKKwkJCQlDb21taXRDb25maWcuY2xlYW5UZXh0KG1lc3NhZ2UsIENsZWFudXBNb2RlLlNDSVNTT1JTLCAnIycpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDbGVhblNjaXNzb3JzTm9TY2lzc29yKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBtZXNzYWdlID0gIlxuICBcbldoYXRldmVyICBcblxuXG4jIEEgY29tbWVudFxuXG5Nb3JlXHQgXG5cblxuIjsKKwkJYXNzZXJ0RXF1YWxzKCJVbmV4cGVjdGVkIG1lc3NhZ2UgY2hhbmdlIiwKKwkJCQkiV2hhdGV2ZXJcblxuIyBBIGNvbW1lbnRcblxuTW9yZVxuIiwKKwkJCQlDb21taXRDb25maWcuY2xlYW5UZXh0KG1lc3NhZ2UsIENsZWFudXBNb2RlLlNDSVNTT1JTLCAnIycpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDbGVhblNjaXNzb3JzTm9TY2lzc29yMigpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgbWVzc2FnZSA9ICJUZXh0XG4iCisJCQkJKyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCQkJCSsgIk1vcmVcbk1vcmVcbiI7CisJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBtZXNzYWdlIGNoYW5nZSIsIG1lc3NhZ2UsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5TQ0lTU09SUywgJyMnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5TY2lzc29yc05vU2Npc3NvcjMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIG1lc3NhZ2UgPSAiVGV4dFxuIgorCQkJCS8vIFdyb25nIG51bWJlciBvZiBkYXNoZXMKKwkJCQkrICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tID44IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCQkJCSsgIk1vcmVcbk1vcmVcbiI7CisJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBtZXNzYWdlIGNoYW5nZSIsIG1lc3NhZ2UsCisJCQkJQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBDbGVhbnVwTW9kZS5TQ0lTU09SUywgJyMnKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0Q2xlYW5TY2lzc29yc0F0RW5kKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBtZXNzYWdlID0gIlRleHRcbiIKKwkJCQkrICIjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisJCWFzc2VydEVxdWFscygiVW5leHBlY3RlZCBtZXNzYWdlIGNoYW5nZSIsICJUZXh0XG4iLAorCQkJCUNvbW1pdENvbmZpZy5jbGVhblRleHQobWVzc2FnZSwgQ2xlYW51cE1vZGUuU0NJU1NPUlMsICcjJykpOworCX0KKworCXByaXZhdGUgc3RhdGljIENvbW1pdENvbmZpZyBwYXJzZShTdHJpbmcgY29udGVudCkKKwkJCXRocm93cyBDb25maWdJbnZhbGlkRXhjZXB0aW9uIHsKKwkJQ29uZmlnIGMgPSBuZXcgQ29uZmlnKCk7CisJCWMuZnJvbVRleHQoY29udGVudCk7CisJCXJldHVybiBjLmdldChDb21taXRDb25maWcuS0VZKTsKKwl9CisKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29tbWl0VGVtcGxhdGVDb25maWdUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbW1pdFRlbXBsYXRlQ29uZmlnVGVzdC5qYXZhCmluZGV4IDZkYmUzMGEuLjQyYmFmYjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29tbWl0VGVtcGxhdGVDb25maWdUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db21taXRUZW1wbGF0ZUNvbmZpZ1Rlc3QuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjEgU0FQIFNFIGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAyMSwgMjAyMiBTQVAgU0UgYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtNDcsOCArNDcsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0Q29tbWl0VGVtcGxhdGVQYXRoSW5Ib21lRGlyZWNvcnkoKQogCQkJCSIudG1wIiwgbmV3IEZpbGUoaG9tZURpcikpOwogCQl0ZW1wRmlsZUluSG9tZURpcmVjdG9yeS5kZWxldGVPbkV4aXQoKTsKIAkJSkdpdFRlc3RVdGlsLndyaXRlKHRlbXBGaWxlSW5Ib21lRGlyZWN0b3J5LCB0ZW1wbGF0ZUNvbnRlbnQpOwotCQlTdHJpbmcgZXhwZWN0ZWRUZW1wbGF0ZVBhdGggPSB0ZW1wRmlsZUluSG9tZURpcmVjdG9yeS5nZXRQYXRoKCkKLQkJCQkucmVwbGFjZShob21lRGlyLCAifiIpOworCQlTdHJpbmcgZXhwZWN0ZWRUZW1wbGF0ZVBhdGggPSAifi8iICsgdGVtcEZpbGVJbkhvbWVEaXJlY3RvcnkuZ2V0TmFtZSgpOwogCQljb25maWcgPSBDb25maWdUZXN0CiAJCQkJLnBhcnNlKCJbY29tbWl0XVxuXHR0ZW1wbGF0ZSA9ICIgKyBleHBlY3RlZFRlbXBsYXRlUGF0aCArICJcbiIpOwogCQlTdHJpbmcgdGVtcGxhdGVQYXRoID0gY29uZmlnLmdldChDb21taXRDb25maWcuS0VZKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWdUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ1Rlc3QuamF2YQppbmRleCA5YjgyYzJhLi5hODVhNGY0IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ1Rlc3QuamF2YQpAQCAtMTQ4OCw3ICsxNDg4LDggQEAgcHVibGljIHZvaWQgdGVzdENvbW1pdFRlbXBsYXRlQ29uZmlnKCkKIAkJU3RyaW5nIGV4cGVjdGVkVGVtcGxhdGVQYXRoID0gdGVtcEZpbGUuZ2V0UGF0aCgpOwogCiAJCUNvbmZpZyBjb25maWcgPSBwYXJzZSgKLQkJCQkiW2NvbW1pdF1cblx0dGVtcGxhdGUgPSAiICsgZXhwZWN0ZWRUZW1wbGF0ZVBhdGggKyAiXG4iKTsKKwkJCQkiW2NvbW1pdF1cblx0dGVtcGxhdGUgPSAiCisJCQkJCQkrIENvbmZpZy5lc2NhcGVWYWx1ZShleHBlY3RlZFRlbXBsYXRlUGF0aCkgKyAiXG4iKTsKIAogCQlTdHJpbmcgdGVtcGxhdGVQYXRoID0gY29uZmlnLmdldChDb21taXRDb25maWcuS0VZKQogCQkJCS5nZXRDb21taXRUZW1wbGF0ZVBhdGgoKTsKQEAgLTE1MzcsNyArMTUzOCw4IEBAIHB1YmxpYyB2b2lkIHRlc3RDb21taXRUZW1wbGF0ZUVuY29kaW5nKCkKIAkJSkdpdFRlc3RVdGlsLndyaXRlKHRlbXBGaWxlLCB0ZW1wbGF0ZUNvbnRlbnQpOwogCQlTdHJpbmcgZXhwZWN0ZWRUZW1wbGF0ZVBhdGggPSB0ZW1wRmlsZS5nZXRQYXRoKCk7CiAJCWNvbmZpZyA9IHBhcnNlKCJbaTE4bl1cblx0Y29tbWl0RW5jb2RpbmcgPSB1dGYtOFxuIgotCQkJCSsgIltjb21taXRdXG5cdHRlbXBsYXRlID0gIiArIGV4cGVjdGVkVGVtcGxhdGVQYXRoICsgIlxuIik7CisJCQkJKyAiW2NvbW1pdF1cblx0dGVtcGxhdGUgPSAiCisJCQkJKyBDb25maWcuZXNjYXBlVmFsdWUoZXhwZWN0ZWRUZW1wbGF0ZVBhdGgpICsgIlxuIik7CiAJCWFzc2VydEVxdWFscyh0ZW1wbGF0ZUNvbnRlbnQsCiAJCQkJY29uZmlnLmdldChDb21taXRDb25maWcuS0VZKS5nZXRDb21taXRUZW1wbGF0ZUNvbnRlbnQocmVwbykpOwogCQlTdHJpbmcgY29tbWl0RW5jb2RpbmcgPSBjb25maWcuZ2V0KENvbW1pdENvbmZpZy5LRVkpCkBAIC0xNTU2LDcgKzE1NTgsOCBAQCBwdWJsaWMgdm9pZCB0ZXN0Q29tbWl0VGVtcGxhdGVXaXRoSW52YWxpZEVuY29kaW5nKCkKIAkJU3RyaW5nIHRlbXBsYXRlQ29udGVudCA9ICJjb250ZW50IG9mIHRoZSB0ZW1wbGF0ZSI7CiAJCUpHaXRUZXN0VXRpbC53cml0ZSh0ZW1wRmlsZSwgdGVtcGxhdGVDb250ZW50KTsKIAkJY29uZmlnID0gcGFyc2UoIltpMThuXVxuXHRjb21taXRFbmNvZGluZyA9IGludmFsaWRFY29kaW5nXG4iCi0JCQkJKyAiW2NvbW1pdF1cblx0dGVtcGxhdGUgPSAiICsgdGVtcEZpbGUuZ2V0UGF0aCgpICsgIlxuIik7CisJCQkJKyAiW2NvbW1pdF1cblx0dGVtcGxhdGUgPSAiCisJCQkJKyBDb25maWcuZXNjYXBlVmFsdWUodGVtcEZpbGUuZ2V0UGF0aCgpKSArICJcbiIpOwogCQljb25maWcuZ2V0KENvbW1pdENvbmZpZy5LRVkpLmdldENvbW1pdFRlbXBsYXRlQ29udGVudChyZXBvKTsKIAl9CiAKQEAgLTE1NzAsNyArMTU3Myw3IEBAIHB1YmxpYyB2b2lkIHRlc3RDb21taXRUZW1wbGF0ZVdpdGhJbnZhbGlkUGF0aCgpCiAJCVN0cmluZyB0ZW1wbGF0ZUNvbnRlbnQgPSAiY29udGVudCBvZiB0aGUgdGVtcGxhdGUiOwogCQlKR2l0VGVzdFV0aWwud3JpdGUodGVtcEZpbGUsIHRlbXBsYXRlQ29udGVudCk7CiAJCS8vIGNvbW1pdCBtZXNzYWdlIGVuY29kaW5nCi0JCVN0cmluZyBleHBlY3RlZFRlbXBsYXRlUGF0aCA9ICIvbm9uRXhpc3RpbmdUZW1wbGF0ZSI7CisJCVN0cmluZyBleHBlY3RlZFRlbXBsYXRlUGF0aCA9ICJ+L25vbkV4aXN0aW5nVGVtcGxhdGUiOwogCQljb25maWcgPSBwYXJzZSgiW2NvbW1pdF1cblx0dGVtcGxhdGUgPSAiICsgZXhwZWN0ZWRUZW1wbGF0ZVBhdGggKyAiXG4iKTsKIAkJU3RyaW5nIHRlbXBsYXRlUGF0aCA9IGNvbmZpZy5nZXQoQ29tbWl0Q29uZmlnLktFWSkKIAkJCQkuZ2V0Q29tbWl0VGVtcGxhdGVQYXRoKCk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0RpckNhY2hlQ2hlY2tvdXRUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL0RpckNhY2hlQ2hlY2tvdXRUZXN0LmphdmEKaW5kZXggYWY4YTU4Zi4uMGZhZmNkNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9EaXJDYWNoZUNoZWNrb3V0VGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvRGlyQ2FjaGVDaGVja291dFRlc3QuamF2YQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNywgRGF2ZSBXYXRzb24gPGR3YXRzb25AbWltdmlzdGEuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEsIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExLCBSb2JpbiBSb3NlbmJlcmcgPHJvYmluLnJvc2VuYmVyZ0BkZXdpcmUuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDIwIENocmlzdGlhbiBIYWxzdHJpY2sgPGNocmlzdGlhbi5oYWxzdHJpY2tAc2FwLmNvbT4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDIyIENocmlzdGlhbiBIYWxzdHJpY2sgPGNocmlzdGlhbi5oYWxzdHJpY2tAc2FwLmNvbT4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMjQyLDYgKzI0Miw3IEBAIHB1YmxpYyB2b2lkIHRlc3RJbml0aWFsQ2hlY2tvdXQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJTGlzdGVuZXJIYW5kbGUgaGFuZGxlID0gbnVsbDsKIAkJdHJ5IChHaXQgZ2l0ID0gbmV3IEdpdChkYik7CiAJCQkJVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4gZGJfdCA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJaGFuZGxlID0gZGIuZ2V0TGlzdGVuZXJMaXN0KCkKIAkJCQkJLmFkZFdvcmtpbmdUcmVlTW9kaWZpZWRMaXN0ZW5lcihyZWNvcmRlcik7CiAJCQlCcmFuY2hCdWlsZGVyIG1hc3RlciA9IGRiX3QuYnJhbmNoKCJtYXN0ZXIiKTsKQEAgLTI2MSw2ICsyNjIsNyBAQCBwcml2YXRlIHZvaWQgY2hlY2tvdXRMaW5lRW5kaW5ncyhTdHJpbmcgaW5JbmRleCwgU3RyaW5nIGV4cGVjdGVkLAogCQkJU3RyaW5nIGF0dHJpYnV0ZXMpIHRocm93cyBFeGNlcHRpb24gewogCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KGRiKTsKIAkJCQlUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBkYl90ID0gbmV3IFRlc3RSZXBvc2l0b3J5PD4oZGIpKSB7CisJCQlkYi5pbmNyZW1lbnRPcGVuKCk7CiAJCQlCcmFuY2hCdWlsZGVyIG1hc3RlciA9IGRiX3QuYnJhbmNoKCJtYXN0ZXIiKTsKIAkJCW1hc3Rlci5jb21taXQoKS5hZGQoImYiLCBpbkluZGV4KS5tZXNzYWdlKCJtMCIpLmNyZWF0ZSgpOwogCQkJaWYgKCFTdHJpbmdVdGlscy5pc0VtcHR5T3JOdWxsKGF0dHJpYnV0ZXMpKSB7CkBAIC0zMTMsOCArMzE1LDkgQEAgcHVibGljIHZvaWQgdGVzdENoZWNrb3V0V2l0aExGKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHRlc3RDaGVja291dFdpdGhMRkF1dG8oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJY2hlY2tvdXRMaW5lRW5kaW5ncygiZmlyc3QgbGluZVxuc2Vjb25kIGxpbmVcbiIsCi0JCQkJImZpcnN0IGxpbmVcbnNlY29uZCBsaW5lXG4iLCAiZiB0ZXh0PWF1dG8iKTsKKwkJU3RyaW5nIGV4cGVjdGVkID0gU3RyaW5nLmZvcm1hdCgiZmlyc3QgbGluZSVuc2Vjb25kIGxpbmUlbiIpOworCQljaGVja291dExpbmVFbmRpbmdzKCJmaXJzdCBsaW5lXG5zZWNvbmQgbGluZVxuIiwgZXhwZWN0ZWQsCisJCQkJImYgdGV4dD1hdXRvIik7CiAJfQogCiAJQFRlc3QKQEAgLTMyNSw5ICszMjgsOSBAQCBwdWJsaWMgdm9pZCB0ZXN0Q2hlY2tvdXRXaXRoTEZBdXRvRW9sTGYoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAogCUBUZXN0CiAJcHVibGljIHZvaWQgdGVzdENoZWNrb3V0V2l0aExGQXV0b0VvbE5hdGl2ZSgpIHRocm93cyBFeGNlcHRpb24geworCQlTdHJpbmcgZXhwZWN0ZWQgPSBTdHJpbmcuZm9ybWF0KCJmaXJzdCBsaW5lJW5zZWNvbmQgbGluZSVuIik7CiAJCWNoZWNrb3V0TGluZUVuZGluZ3MoCi0JCQkJImZpcnN0IGxpbmVcbnNlY29uZCBsaW5lXG4iLCAiZmlyc3QgbGluZVxuc2Vjb25kIGxpbmVcbiIKLQkJCQkJCS5yZXBsYWNlQWxsKCJcbiIsIFN5c3RlbS5saW5lU2VwYXJhdG9yKCkpLAorCQkJCSJmaXJzdCBsaW5lXG5zZWNvbmQgbGluZVxuIiwgZXhwZWN0ZWQsCiAJCQkJImYgdGV4dD1hdXRvIGVvbD1uYXRpdmUiKTsKIAl9CiAKQEAgLTIwNjQsNiArMjA2Nyw3IEBAIHB1YmxpYyB2b2lkIHRlc3RSZXNldFdpdGhDaGFuZ2VJbkdpdGlnbm9yZSgpIHRocm93cyBFeGNlcHRpb24gewogCXB1YmxpYyB2b2lkIHRlc3RDaGVja291dFdpdGhFbXB0eUluZGV4RG9lc250T3ZlcndyaXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQoZGIpOwogCQkJCVRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+IGRiX3QgPSBuZXcgVGVzdFJlcG9zaXRvcnk8PihkYikpIHsKKwkJCWRiLmluY3JlbWVudE9wZW4oKTsKIAkJCS8vIHByZXBhcmUgdGhlIGNvbW1pdHMKIAkJCUJyYW5jaEJ1aWxkZXIgbWFzdGVyID0gZGJfdC5icmFuY2goIm1hc3RlciIpOwogCQkJUmV2Q29tbWl0IG1lcmdlQ29tbWl0ID0gbWFzdGVyLmNvbW1pdCgpCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1QwMDAxX1BlcnNvbklkZW50VGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9QZXJzb25JZGVudFRlc3QuamF2YQpzaW1pbGFyaXR5IGluZGV4IDc1JQpyZW5hbWUgZnJvbSBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1QwMDAxX1BlcnNvbklkZW50VGVzdC5qYXZhCnJlbmFtZSB0byBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbGliL1BlcnNvbklkZW50VGVzdC5qYXZhCmluZGV4IGU5YmFiN2MuLjk3ZGExNzUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9saWIvVDAwMDFfUGVyc29uSWRlbnRUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9QZXJzb25JZGVudFRlc3QuamF2YQpAQCAtMTMsMTIgKzEzLDE0IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RXF1YWxzOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKK2ltcG9ydCBqYXZhLnRpbWUuSW5zdGFudDsKK2ltcG9ydCBqYXZhLnRpbWUuWm9uZUlkOwogaW1wb3J0IGphdmEudXRpbC5EYXRlOwogaW1wb3J0IGphdmEudXRpbC5UaW1lWm9uZTsKIAogaW1wb3J0IG9yZy5qdW5pdC5UZXN0OwogCi1wdWJsaWMgY2xhc3MgVDAwMDFfUGVyc29uSWRlbnRUZXN0IHsKK3B1YmxpYyBjbGFzcyBQZXJzb25JZGVudFRlc3QgewogCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0MDAxX05ld0lkZW50KCkgewpAQCAtNDIsNiArNDQsMzQgQEAgcHVibGljIHZvaWQgdGVzdDAwMl9OZXdJZGVudCgpIHsKIAkJCQlwLnRvRXh0ZXJuYWxTdHJpbmcoKSk7CiAJfQogCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0TmV3SWRlbnRJbnN0YW50KCkgeworCQlQZXJzb25JZGVudCBwID0gbmV3IFBlcnNvbklkZW50KCJBIFUgVGhvciIsICJhdXRob3JAZXhhbXBsZS5jb20iLAorCQkJCUluc3RhbnQub2ZFcG9jaE1pbGxpKDExNDI4Nzg1MDEwMDBMKSwKKwkJCQlab25lSWQub2YoIkFtZXJpY2EvTmV3X1lvcmsiKSk7CisJCWFzc2VydEVxdWFscygiQSBVIFRob3IiLCBwLmdldE5hbWUoKSk7CisJCWFzc2VydEVxdWFscygiYXV0aG9yQGV4YW1wbGUuY29tIiwgcC5nZXRFbWFpbEFkZHJlc3MoKSk7CisJCWFzc2VydEVxdWFscyhJbnN0YW50Lm9mRXBvY2hNaWxsaSgxMTQyODc4NTAxMDAwTCksCisJCQkJcC5nZXRXaGVuQXNJbnN0YW50KCkpOworCQlhc3NlcnRFcXVhbHMoIkEgVSBUaG9yIDxhdXRob3JAZXhhbXBsZS5jb20+IDExNDI4Nzg1MDEgLTA1MDAiLAorCQkJCXAudG9FeHRlcm5hbFN0cmluZygpKTsKKwkJYXNzZXJ0RXF1YWxzKFpvbmVJZC5vZigiR01ULTA1OjAwIiksIHAuZ2V0Wm9uZUlkKCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdE5ld0lkZW50SW5zdGFudDIoKSB7CisJCWZpbmFsIFBlcnNvbklkZW50IHAgPSBuZXcgUGVyc29uSWRlbnQoIkEgVSBUaG9yIiwgImF1dGhvckBleGFtcGxlLmNvbSIsCisJCQkJSW5zdGFudC5vZkVwb2NoTWlsbGkoMTE0Mjg3ODUwMTAwMEwpLAorCQkJCVpvbmVJZC5vZigiQXNpYS9Lb2xrYXRhIikpOworCQlhc3NlcnRFcXVhbHMoIkEgVSBUaG9yIiwgcC5nZXROYW1lKCkpOworCQlhc3NlcnRFcXVhbHMoImF1dGhvckBleGFtcGxlLmNvbSIsIHAuZ2V0RW1haWxBZGRyZXNzKCkpOworCQlhc3NlcnRFcXVhbHMoSW5zdGFudC5vZkVwb2NoTWlsbGkoMTE0Mjg3ODUwMTAwMEwpLAorCQkJCXAuZ2V0V2hlbkFzSW5zdGFudCgpKTsKKwkJYXNzZXJ0RXF1YWxzKCJBIFUgVGhvciA8YXV0aG9yQGV4YW1wbGUuY29tPiAxMTQyODc4NTAxICswNTMwIiwKKwkJCQlwLnRvRXh0ZXJuYWxTdHJpbmcoKSk7CisJCWFzc2VydEVxdWFscyhab25lSWQub2YoIkdNVCswNTozMCIpLCBwLmdldFpvbmVJZCgpKTsKKwl9CisKIAlAU3VwcHJlc3NXYXJuaW5ncygidW51c2VkIikKIAlAVGVzdChleHBlY3RlZCA9IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbi5jbGFzcykKIAlwdWJsaWMgdm9pZCBudWxsRm9yTmFtZVNob3VsZFRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlTWVzc2FnZUZvcm1hdHRlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZU1lc3NhZ2VGb3JtYXR0ZXJUZXN0LmphdmEKaW5kZXggZGVkYjU2Yy4uYTI1NzZjYyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlTWVzc2FnZUZvcm1hdHRlclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VNZXNzYWdlRm9ybWF0dGVyVGVzdC5qYXZhCkBAIC0xMyw2ICsxMyw3IEBACiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZFJlZjsKQEAgLTE1Nyw4ICsxNTgsOCBAQCBwdWJsaWMgdm9pZCB0ZXN0SW50b1N5bWJvbGljUmVmSGVhZFBvaW50aW5nVG9NYXN0ZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRXaXRoQ29uZmxpY3RzTm9Gb290ZXIoKSB7CiAJCVN0cmluZyBvcmlnaW5hbE1lc3NhZ2UgPSAiSGVhZGVyIExpbmVcblxuQ29tbWl0IGJvZHlcbiI7CiAJCVN0cmluZyBtZXNzYWdlID0gZm9ybWF0dGVyLmZvcm1hdFdpdGhDb25mbGljdHMob3JpZ2luYWxNZXNzYWdlLAotCQkJCUFycmF5cy5hc0xpc3QobmV3IFN0cmluZ1tdIHsgInBhdGgxIiB9KSk7Ci0JCWFzc2VydEVxdWFscygiSGVhZGVyIExpbmVcblxuQ29tbWl0IGJvZHlcblxuQ29uZmxpY3RzOlxuXHRwYXRoMVxuIiwKKwkJCQlMaXN0Lm9mKCJwYXRoMSIpLCAnIycpOworCQlhc3NlcnRFcXVhbHMoIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5XG5cbiMgQ29uZmxpY3RzOlxuI1x0cGF0aDFcbiIsCiAJCQkJbWVzc2FnZSk7CiAJfQogCkBAIC0xNjYsOCArMTY3LDE3IEBAIHB1YmxpYyB2b2lkIHRlc3RGb3JtYXRXaXRoQ29uZmxpY3RzTm9Gb290ZXIoKSB7CiAJcHVibGljIHZvaWQgdGVzdEZvcm1hdFdpdGhDb25mbGljdHNOb0Zvb3Rlck5vTGluZUJyZWFrKCkgewogCQlTdHJpbmcgb3JpZ2luYWxNZXNzYWdlID0gIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5IjsKIAkJU3RyaW5nIG1lc3NhZ2UgPSBmb3JtYXR0ZXIuZm9ybWF0V2l0aENvbmZsaWN0cyhvcmlnaW5hbE1lc3NhZ2UsCi0JCQkJQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyAicGF0aDEiIH0pKTsKLQkJYXNzZXJ0RXF1YWxzKCJIZWFkZXIgTGluZVxuXG5Db21taXQgYm9keVxuXG5Db25mbGljdHM6XG5cdHBhdGgxXG4iLAorCQkJCUxpc3Qub2YoInBhdGgxIiksICcjJyk7CisJCWFzc2VydEVxdWFscygiSGVhZGVyIExpbmVcblxuQ29tbWl0IGJvZHlcblxuIyBDb25mbGljdHM6XG4jXHRwYXRoMVxuIiwKKwkJCQltZXNzYWdlKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRXaXRoQ29uZmxpY3RzQ3VzdG9tQ2hhcmFjdGVyKCkgeworCQlTdHJpbmcgb3JpZ2luYWxNZXNzYWdlID0gIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5IjsKKwkJU3RyaW5nIG1lc3NhZ2UgPSBmb3JtYXR0ZXIuZm9ybWF0V2l0aENvbmZsaWN0cyhvcmlnaW5hbE1lc3NhZ2UsCisJCQkJTGlzdC5vZigicGF0aDEiKSwgJzsnKTsKKwkJYXNzZXJ0RXF1YWxzKCJIZWFkZXIgTGluZVxuXG5Db21taXQgYm9keVxuXG47IENvbmZsaWN0czpcbjtcdHBhdGgxXG4iLAogCQkJCW1lc3NhZ2UpOwogCX0KIApAQCAtMTc2LDkgKzE4Niw5IEBAIHB1YmxpYyB2b2lkIHRlc3RGb3JtYXRXaXRoQ29uZmxpY3RzV2l0aEZvb3RlcnMoKSB7CiAJCVN0cmluZyBvcmlnaW5hbE1lc3NhZ2UgPSAiSGVhZGVyIExpbmVcblxuQ29tbWl0IGJvZHlcblxuQ2hhbmdlSWQ6IgogCQkJCSsgIiBJMTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5XG5CdWc6MTIzNDU2N1xuIjsKIAkJU3RyaW5nIG1lc3NhZ2UgPSBmb3JtYXR0ZXIuZm9ybWF0V2l0aENvbmZsaWN0cyhvcmlnaW5hbE1lc3NhZ2UsCi0JCQkJQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyAicGF0aDEiIH0pKTsKKwkJCQlMaXN0Lm9mKCJwYXRoMSIpLCAnIycpOwogCQlhc3NlcnRFcXVhbHMoCi0JCQkJIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5XG5cbkNvbmZsaWN0czpcblx0cGF0aDFcblxuIgorCQkJCSJIZWFkZXIgTGluZVxuXG5Db21taXQgYm9keVxuXG4jIENvbmZsaWN0czpcbiNcdHBhdGgxXG5cbiIKIAkJCQkJCSsgIkNoYW5nZUlkOiBJMTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5XG5CdWc6MTIzNDU2N1xuIiwKIAkJCQltZXNzYWdlKTsKIAl9CkBAIC0xODgsOSArMTk4LDkgQEAgcHVibGljIHZvaWQgdGVzdEZvcm1hdFdpdGhDb25mbGljdHNXaXRoRm9vdGVybGlrZUxpbmVJbkJvZHkoKSB7CiAJCVN0cmluZyBvcmlnaW5hbE1lc3NhZ2UgPSAiSGVhZGVyIExpbmVcblxuQ29tbWl0IGJvZHlcbkJ1ZzoxMjM0NTY3XG5Nb3JlIEJvZHlcblxuQ2hhbmdlSWQ6IgogCQkJCSsgIiBJMTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5XG5CdWc6MTIzNDU2N1xuIjsKIAkJU3RyaW5nIG1lc3NhZ2UgPSBmb3JtYXR0ZXIuZm9ybWF0V2l0aENvbmZsaWN0cyhvcmlnaW5hbE1lc3NhZ2UsCi0JCQkJQXJyYXlzLmFzTGlzdChuZXcgU3RyaW5nW10geyAicGF0aDEiIH0pKTsKKwkJCQlMaXN0Lm9mKCJwYXRoMSIpLCAnIycpOwogCQlhc3NlcnRFcXVhbHMoCi0JCQkJIkhlYWRlciBMaW5lXG5cbkNvbW1pdCBib2R5XG5CdWc6MTIzNDU2N1xuTW9yZSBCb2R5XG5cbkNvbmZsaWN0czpcblx0cGF0aDFcblxuIgorCQkJCSJIZWFkZXIgTGluZVxuXG5Db21taXQgYm9keVxuQnVnOjEyMzQ1Njdcbk1vcmUgQm9keVxuXG4jIENvbmZsaWN0czpcbiNcdHBhdGgxXG5cbiIKIAkJCQkJCSsgIkNoYW5nZUlkOiBJMTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5MTIzNDU2Nzg5XG5CdWc6MTIzNDU2N1xuIiwKIAkJCQltZXNzYWdlKTsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlclRlc3QuamF2YQppbmRleCBkZDg1NzNkLi5jYmFjYWVkIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VyVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZXJUZXN0LmphdmEKQEAgLTE4MTAsNiArMTgxMCw3IEBAIHByaXZhdGUgdm9pZCBjaGVja01vZGlmaWNhdGlvblRpbWVTdGFtcE9yZGVyKFN0cmluZy4uLiBwYXRoZXMpIHsKIAlwcml2YXRlIFN0cmluZyByZWFkQmxvYihPYmplY3RJZCB0cmVlaXNoLCBTdHJpbmcgcGF0aCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXRyeSAoVGVzdFJlcG9zaXRvcnk8Pz4gdHIgPSBuZXcgVGVzdFJlcG9zaXRvcnk8PihkYik7CiAJCQkJUmV2V2FsayBydyA9IHRyLmdldFJldldhbGsoKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJUmV2VHJlZSB0cmVlID0gcncucGFyc2VUcmVlKHRyZWVpc2gpOwogCQkJUmV2T2JqZWN0IG9iaiA9IHRyLmdldCh0cmVlLCBwYXRoKTsKIAkJCWlmIChvYmogPT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3N1Ym1vZHVsZS9TdWJtb2R1bGVXYWxrVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3N1Ym1vZHVsZS9TdWJtb2R1bGVXYWxrVGVzdC5qYXZhCmluZGV4IGVhOTk0ZjAuLmY0NDZkMDcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC9zdWJtb2R1bGUvU3VibW9kdWxlV2Fsa1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvc3VibW9kdWxlL1N1Ym1vZHVsZVdhbGtUZXN0LmphdmEKQEAgLTIxNyw3ICsyMTcsNiBAQCBwdWJsaWMgdm9pZCBhcHBseShEaXJDYWNoZUVudHJ5IGVudCkgewogCQkJCWFzc2VydEVxdWFsc0ZpbGUobW9kdWxlc0dpdERpciwgc3ViUmVwby5nZXREaXJlY3RvcnkoKSk7CiAJCQkJYXNzZXJ0RXF1YWxzRmlsZShuZXcgRmlsZShkYi5nZXRXb3JrVHJlZSgpLCBwYXRoKSwKIAkJCQkJCXN1YlJlcG8uZ2V0V29ya1RyZWUoKSk7Ci0JCQkJc3ViUmVwby5jbG9zZSgpOwogCQkJCWFzc2VydEZhbHNlKGdlbi5uZXh0KCkpOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L0J1bmRsZVdyaXRlclRlc3QuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvQnVuZGxlV3JpdGVyVGVzdC5qYXZhCmluZGV4IDA1NGViOWMuLmJiNjJhMGQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvQnVuZGxlV3JpdGVyVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvQnVuZGxlV3JpdGVyVGVzdC5qYXZhCkBAIC04MCw2ICs4MCw3IEBAIHB1YmxpYyB2b2lkIHRlc3RXcml0ZVNpbmdsZVJlZigpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyBUaGVuIHdlIGNsb25lIGEgbmV3IHJlcG8gZnJvbSB0aGF0IGJ1bmRsZSBhbmQgZG8gYSBzaW1wbGUgdGVzdC4gVGhpcwogCQkvLyBtYWtlcyBzdXJlIHdlIGNvdWxkIHJlYWQgdGhlIGJ1bmRsZSB3ZSBjcmVhdGVkLgogCQlSZXBvc2l0b3J5IG5ld1JlcG8gPSBjcmVhdGVCYXJlUmVwb3NpdG9yeSgpOworCQlhZGRSZXBvVG9DbG9zZShuZXdSZXBvKTsKIAkJRmV0Y2hSZXN1bHQgZmV0Y2hSZXN1bHQgPSBmZXRjaEZyb21CdW5kbGUobmV3UmVwbywgYnVuZGxlKTsKIAkJUmVmIGFkdmVydGlzZWRSZWYgPSBmZXRjaFJlc3VsdAogCQkJCS5nZXRBZHZlcnRpc2VkUmVmKCJyZWZzL2hlYWRzL2ZpcnN0Y29tbWl0Iik7CkBAIC0xMTYsNiArMTE3LDcgQEAgcHVibGljIHZvaWQgdGVzdEluY3JlbWVudGFsQnVuZGxlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCS8vIG1ha2VzIHN1cmUKIAkJLy8gd2UgY291bGQgcmVhZCB0aGUgYnVuZGxlIHdlIGNyZWF0ZWQuCiAJCVJlcG9zaXRvcnkgbmV3UmVwbyA9IGNyZWF0ZUJhcmVSZXBvc2l0b3J5KCk7CisJCWFkZFJlcG9Ub0Nsb3NlKG5ld1JlcG8pOwogCQlGZXRjaFJlc3VsdCBmZXRjaFJlc3VsdCA9IGZldGNoRnJvbUJ1bmRsZShuZXdSZXBvLCBidW5kbGUpOwogCQlSZWYgYWR2ZXJ0aXNlZFJlZiA9IGZldGNoUmVzdWx0LmdldEFkdmVydGlzZWRSZWYoInJlZnMvaGVhZHMvYWEiKTsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QYWNrUGFyc2VyVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QYWNrUGFyc2VyVGVzdC5qYXZhCmluZGV4IDYwYjgwOTguLjkzYmVkYjMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUGFja1BhcnNlclRlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1BhY2tQYXJzZXJUZXN0LmphdmEKQEAgLTExMCw2ICsxMTAsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0MigpIHRocm93cyAgSU9FeGNlcHRpb24gewogCXB1YmxpYyB2b2lkIHRlc3RUaW55VGhpblBhY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJUmV2QmxvYiBhOwogCQl0cnkgKFRlc3RSZXBvc2l0b3J5IGQgPSBuZXcgVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4oZGIpKSB7CisJCQlkYi5pbmNyZW1lbnRPcGVuKCk7CiAJCQlhID0gZC5ibG9iKCJhIik7CiAJCX0KIApAQCAtMTMyLDYgKzEzMyw3IEBAIHB1YmxpYyB2b2lkIHRlc3RUaW55VGhpblBhY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0UGFja1dpdGhEdXBsaWNhdGVCbG9iKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWZpbmFsIGJ5dGVbXSBkYXRhID0gQ29uc3RhbnRzLmVuY29kZSgiMDEyMzQ1Njc4OWFiY2RlZmciKTsKIAkJdHJ5IChUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBkID0gbmV3IFRlc3RSZXBvc2l0b3J5PD4oZGIpKSB7CisJCQlkYi5pbmNyZW1lbnRPcGVuKCk7CiAJCQlhc3NlcnRUcnVlKGRiLmdldE9iamVjdERhdGFiYXNlKCkuaGFzKGQuYmxvYihkYXRhKSkpOwogCQl9CiAKQEAgLTE1MSw2ICsxNTMsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0UGFja1dpdGhEdXBsaWNhdGVCbG9iKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJcHVibGljIHZvaWQgdGVzdFBhY2tXaXRoVHJhaWxpbmdHYXJiYWdlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVJldkJsb2IgYTsKIAkJdHJ5IChUZXN0UmVwb3NpdG9yeSBkID0gbmV3IFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJYSA9IGQuYmxvYigiYSIpOwogCQl9CiAKQEAgLTE4MCw2ICsxODMsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0UGFja1dpdGhUcmFpbGluZ0dhcmJhZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0TWF4T2JqZWN0U2l6ZUZ1bGxCbG9iKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWZpbmFsIGJ5dGVbXSBkYXRhID0gQ29uc3RhbnRzLmVuY29kZSgiMDEyMzQ1Njc4OSIpOwogCQl0cnkgKFRlc3RSZXBvc2l0b3J5IGQgPSBuZXcgVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4oZGIpKSB7CisJCQlkYi5pbmNyZW1lbnRPcGVuKCk7CiAJCQlkLmJsb2IoZGF0YSk7CiAJCX0KIApAQCAtMjEzLDYgKzIxNyw3IEBAIHB1YmxpYyB2b2lkIHRlc3RNYXhPYmplY3RTaXplRnVsbEJsb2IoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAlwdWJsaWMgdm9pZCB0ZXN0TWF4T2JqZWN0U2l6ZURlbHRhQmxvY2soKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJUmV2QmxvYiBhOwogCQl0cnkgKFRlc3RSZXBvc2l0b3J5IGQgPSBuZXcgVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4oZGIpKSB7CisJCQlkYi5pbmNyZW1lbnRPcGVuKCk7CiAJCQlhID0gZC5ibG9iKCJhIik7CiAJCX0KIApAQCAtMjQ2LDYgKzI1MSw3IEBAIHB1YmxpYyB2b2lkIHRlc3RNYXhPYmplY3RTaXplRGVsdGFCbG9jaygpIHRocm93cyBFeGNlcHRpb24gewogCXB1YmxpYyB2b2lkIHRlc3RNYXhPYmplY3RTaXplRGVsdGFSZXN1bHRTaXplKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCVJldkJsb2IgYTsKIAkJdHJ5IChUZXN0UmVwb3NpdG9yeSBkID0gbmV3IFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJYSA9IGQuYmxvYigiMDEyMzQ1Njc4OSIpOwogCQl9CiAKQEAgLTI3OCw2ICsyODQsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0TWF4T2JqZWN0U2l6ZURlbHRhUmVzdWx0U2l6ZSgpIHRocm93cyBFeGNlcHRpb24gewogCXB1YmxpYyB2b2lkIHRlc3ROb25NYXJraW5nSW5wdXRTdHJlYW0oKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJUmV2QmxvYiBhOwogCQl0cnkgKFRlc3RSZXBvc2l0b3J5IGQgPSBuZXcgVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4oZGIpKSB7CisJCQlkYi5pbmNyZW1lbnRPcGVuKCk7CiAJCQlhID0gZC5ibG9iKCJhIik7CiAJCX0KIApAQCAtMzE4LDYgKzMyNSw3IEBAIHB1YmxpYyB2b2lkIG1hcmsoaW50IG1heGxlbmd0aCkgewogCXB1YmxpYyB2b2lkIHRlc3REYXRhQWZ0ZXJQYWNrRm9vdGVyU2luZ2xlUmVhZCgpIHRocm93cyBFeGNlcHRpb24gewogCQlSZXZCbG9iIGE7CiAJCXRyeSAoVGVzdFJlcG9zaXRvcnkgZCA9IG5ldyBUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PihkYikpIHsKKwkJCWRiLmluY3JlbWVudE9wZW4oKTsKIAkJCWEgPSBkLmJsb2IoImEiKTsKIAkJfQogCkBAIC0zNzksNiArMzg3LDcgQEAgcHVibGljIHZvaWQgdGVzdERhdGFBZnRlclBhY2tGb290ZXJTcGxpdEhlYWRlclJlYWQoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJZmluYWwgYnl0ZVtdIGRhdGEgPSBDb25zdGFudHMuZW5jb2RlKCJhIik7CiAJCVJldkJsb2IgYjsKIAkJdHJ5IChUZXN0UmVwb3NpdG9yeSBkID0gbmV3IFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+KGRiKSkgeworCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJYiA9IGQuYmxvYihkYXRhKTsKIAkJfQogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDb25maWdUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDb25maWdUZXN0LmphdmEKaW5kZXggNjEwOWQ2Yy4uY2JjMWQ1NCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoQ29uZmlnVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaENvbmZpZ1Rlc3QuamF2YQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcsIERhdmlkIFB1cnNlaG91c2UgPGRhdmlkLnB1cnNlaG91c2VAZ21haWwuY29tPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIDIwMjIgRGF2aWQgUHVyc2Vob3VzZSA8ZGF2aWQucHVyc2Vob3VzZUBnbWFpbC5jb20+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTE0LDEwICsxNCwxMyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEZhbHNlOwogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydFRydWU7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHVzaENvbmZpZy5QdXNoRGVmYXVsdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ29uZmlnLlB1c2hSZWN1cnNlU3VibW9kdWxlc01vZGU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKIHB1YmxpYyBjbGFzcyBQdXNoQ29uZmlnVGVzdCB7CisKIAlAVGVzdAogCXB1YmxpYyB2b2lkIHB1c2hSZWN1cnNlU3VibW9kdWxlTWF0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJYXNzZXJ0VHJ1ZShQdXNoUmVjdXJzZVN1Ym1vZHVsZXNNb2RlLkNIRUNLLm1hdGNoQ29uZmlnVmFsdWUoImNoZWNrIikpOwpAQCAtNTIsNCArNTUsNTkgQEAgcHVibGljIHZvaWQgcHVzaFJlY3Vyc2VTdWJtb2R1bGVUb0NvbmZpZ1ZhbHVlKCkgewogCQlhc3NlcnRFcXVhbHMoImNoZWNrIiwgUHVzaFJlY3Vyc2VTdWJtb2R1bGVzTW9kZS5DSEVDSy50b0NvbmZpZ1ZhbHVlKCkpOwogCQlhc3NlcnRFcXVhbHMoImZhbHNlIiwgUHVzaFJlY3Vyc2VTdWJtb2R1bGVzTW9kZS5OTy50b0NvbmZpZ1ZhbHVlKCkpOwogCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgcHVzaERlZmF1bHRNYXRjaCgpIHRocm93cyBFeGNlcHRpb24geworCQlhc3NlcnRUcnVlKFB1c2hEZWZhdWx0Lk5PVEhJTkcubWF0Y2hDb25maWdWYWx1ZSgibm90aGluZyIpKTsKKwkJYXNzZXJ0VHJ1ZShQdXNoRGVmYXVsdC5OT1RISU5HLm1hdGNoQ29uZmlnVmFsdWUoIk5PVEhJTkciKSk7CisJCWFzc2VydFRydWUoUHVzaERlZmF1bHQuQ1VSUkVOVC5tYXRjaENvbmZpZ1ZhbHVlKCJjdXJyZW50IikpOworCQlhc3NlcnRUcnVlKFB1c2hEZWZhdWx0LkNVUlJFTlQubWF0Y2hDb25maWdWYWx1ZSgiQ1VSUkVOVCIpKTsKKwkJYXNzZXJ0VHJ1ZShQdXNoRGVmYXVsdC5VUFNUUkVBTS5tYXRjaENvbmZpZ1ZhbHVlKCJ1cHN0cmVhbSIpKTsKKwkJYXNzZXJ0VHJ1ZShQdXNoRGVmYXVsdC5VUFNUUkVBTS5tYXRjaENvbmZpZ1ZhbHVlKCJVUFNUUkVBTSIpKTsKKwkJYXNzZXJ0VHJ1ZShQdXNoRGVmYXVsdC5VUFNUUkVBTS5tYXRjaENvbmZpZ1ZhbHVlKCJ0cmFja2luZyIpKTsKKwkJYXNzZXJ0VHJ1ZShQdXNoRGVmYXVsdC5VUFNUUkVBTS5tYXRjaENvbmZpZ1ZhbHVlKCJUUkFDS0lORyIpKTsKKwkJYXNzZXJ0VHJ1ZShQdXNoRGVmYXVsdC5TSU1QTEUubWF0Y2hDb25maWdWYWx1ZSgic2ltcGxlIikpOworCQlhc3NlcnRUcnVlKFB1c2hEZWZhdWx0LlNJTVBMRS5tYXRjaENvbmZpZ1ZhbHVlKCJTSU1QTEUiKSk7CisJCWFzc2VydFRydWUoUHVzaERlZmF1bHQuTUFUQ0hJTkcubWF0Y2hDb25maWdWYWx1ZSgibWF0Y2hpbmciKSk7CisJCWFzc2VydFRydWUoUHVzaERlZmF1bHQuTUFUQ0hJTkcubWF0Y2hDb25maWdWYWx1ZSgiTUFUQ0hJTkciKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBwdXNoRGVmYXVsdE5vTWF0Y2goKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RmFsc2UoUHVzaERlZmF1bHQuTk9USElORy5tYXRjaENvbmZpZ1ZhbHVlKCJuIikpOworCQlhc3NlcnRGYWxzZShQdXNoRGVmYXVsdC5DVVJSRU5ULm1hdGNoQ29uZmlnVmFsdWUoIiIpKTsKKwkJYXNzZXJ0RmFsc2UoUHVzaERlZmF1bHQuVVBTVFJFQU0ubWF0Y2hDb25maWdWYWx1ZSgidHJhY2siKSk7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBwdXNoRGVmYXVsdFRvQ29uZmlnVmFsdWUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJYXNzZXJ0RXF1YWxzKCJub3RoaW5nIiwgUHVzaERlZmF1bHQuTk9USElORy50b0NvbmZpZ1ZhbHVlKCkpOworCQlhc3NlcnRFcXVhbHMoImN1cnJlbnQiLCBQdXNoRGVmYXVsdC5DVVJSRU5ULnRvQ29uZmlnVmFsdWUoKSk7CisJCWFzc2VydEVxdWFscygidXBzdHJlYW0iLCBQdXNoRGVmYXVsdC5VUFNUUkVBTS50b0NvbmZpZ1ZhbHVlKCkpOworCQlhc3NlcnRFcXVhbHMoInNpbXBsZSIsIFB1c2hEZWZhdWx0LlNJTVBMRS50b0NvbmZpZ1ZhbHVlKCkpOworCQlhc3NlcnRFcXVhbHMoIm1hdGNoaW5nIiwgUHVzaERlZmF1bHQuTUFUQ0hJTkcudG9Db25maWdWYWx1ZSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUNvbmZpZygpIHRocm93cyBFeGNlcHRpb24geworCQlQdXNoQ29uZmlnIGNmZyA9IHBhcnNlKCIiKTsKKwkJYXNzZXJ0RXF1YWxzKFB1c2hSZWN1cnNlU3VibW9kdWxlc01vZGUuTk8sIGNmZy5nZXRSZWN1cnNlU3VibW9kdWxlcygpKTsKKwkJYXNzZXJ0RXF1YWxzKFB1c2hEZWZhdWx0LlNJTVBMRSwgY2ZnLmdldFB1c2hEZWZhdWx0KCkpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENvbmZpZygpIHRocm93cyBFeGNlcHRpb24geworCQlQdXNoQ29uZmlnIGNmZyA9IHBhcnNlKAorCQkJCSJbcHVzaF1cblx0ZGVmYXVsdCA9IHRyYWNraW5nXG5cdHJlY3Vyc2VTdWJtb2R1bGVzID0gb24tZGVtYW5kXG4iKTsKKwkJYXNzZXJ0RXF1YWxzKFB1c2hSZWN1cnNlU3VibW9kdWxlc01vZGUuT05fREVNQU5ELAorCQkJCWNmZy5nZXRSZWN1cnNlU3VibW9kdWxlcygpKTsKKwkJYXNzZXJ0RXF1YWxzKFB1c2hEZWZhdWx0LlVQU1RSRUFNLCBjZmcuZ2V0UHVzaERlZmF1bHQoKSk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgUHVzaENvbmZpZyBwYXJzZShTdHJpbmcgY29udGVudCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCUNvbmZpZyBjID0gbmV3IENvbmZpZygpOworCQljLmZyb21UZXh0KGNvbnRlbnQpOworCQlyZXR1cm4gYy5nZXQoUHVzaENvbmZpZzo6bmV3KTsKKwl9CisKIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaFByb2Nlc3NUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hQcm9jZXNzVGVzdC5qYXZhCmluZGV4IDY5Mjg4NTkuLjJlOGIzMGYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaFByb2Nlc3NUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoUHJvY2Vzc1Rlc3QuamF2YQpAQCAtMTQsMTQgKzE0LDE5IEBACiBpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLmlvLlByaW50U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0czsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKIGltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkFib3J0ZWRCeUhvb2tFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzLlByZVB1c2hIb29rOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkUmVmOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlByb2dyZXNzTW9uaXRvcjsKQEAgLTMxLDYgKzM2LDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UZXh0UHJvZ3Jlc3NNb25pdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudGVzdC5yZXNvdXJjZXMuU2FtcGxlRGF0YVJlcG9zaXRvcnlUZXN0Q2FzZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5SZW1vdGVSZWZVcGRhdGUuU3RhdHVzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pby5OdWxsT3V0cHV0U3RyZWFtOwogaW1wb3J0IG9yZy5qdW5pdC5CZWZvcmU7CiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiAKQEAgLTIyMCw3ICsyMjYsMTcgQEAgcHVibGljIHZvaWQgdGVzdFVwZGF0ZVVuZXhwZWN0ZWRSZW1vdGVWc0ZvcmNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJCQkJCS5mcm9tU3RyaW5nKCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxIikpOwogCQlmaW5hbCBSZWYgcmVmID0gbmV3IE9iamVjdElkUmVmLlVucGVlbGVkKFJlZi5TdG9yYWdlLkxPT1NFLCAicmVmcy9oZWFkcy9tYXN0ZXIiLAogCQkJCU9iamVjdElkLmZyb21TdHJpbmcoImFjN2U3ZTQ0YzE4ODVlZmI0NzJhZDU0YTc4MzI3ZDY2YmZjNGVjZWYiKSk7Ci0JCXRlc3RPbmVVcGRhdGVTdGF0dXMocnJ1LCByZWYsIFN0YXR1cy5SRUpFQ1RFRF9SRU1PVEVfQ0hBTkdFRCwgbnVsbCk7CisJCXRyeSAoQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJCVByaW50U3RyZWFtIG91dCA9IG5ldyBQcmludFN0cmVhbShieXRlcywgdHJ1ZSwKKwkJCQkJCVN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpOworCQkJCVByaW50U3RyZWFtIGVyciA9IG5ldyBQcmludFN0cmVhbShOdWxsT3V0cHV0U3RyZWFtLklOU1RBTkNFKSkgeworCQkJTW9ja1ByZVB1c2hIb29rIGhvb2sgPSBuZXcgTW9ja1ByZVB1c2hIb29rKGRiLCBvdXQsIGVycik7CisJCQl0ZXN0T25lVXBkYXRlU3RhdHVzKHJydSwgcmVmLCBTdGF0dXMuUkVKRUNURURfUkVNT1RFX0NIQU5HRUQsIG51bGwsCisJCQkJCWhvb2spOworCQkJb3V0LmZsdXNoKCk7CisJCQlTdHJpbmcgcmVzdWx0ID0gbmV3IFN0cmluZyhieXRlcy50b1N0cmluZyhTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CisJCQlhc3NlcnRFcXVhbHMoIiIsIHJlc3VsdCk7CisJCX0KIAl9CiAKIAkvKioKQEAgLTI1NiwxMCArMjcyLDIyIEBAIHB1YmxpYyB2b2lkIHRlc3RVcGRhdGVNaXhlZENhc2VzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJcmVmVXBkYXRlcy5hZGQocnJ1T2spOwogCQlyZWZVcGRhdGVzLmFkZChycnVSZWplY3QpOwogCQlhZHZlcnRpc2VkUmVmcy5hZGQocmVmVG9DaGFuZ2UpOwotCQlleGVjdXRlUHVzaCgpOwotCQlhc3NlcnRFcXVhbHMoU3RhdHVzLk9LLCBycnVPay5nZXRTdGF0dXMoKSk7Ci0JCWFzc2VydFRydWUocnJ1T2suaXNGYXN0Rm9yd2FyZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKFN0YXR1cy5OT05fRVhJU1RJTkcsIHJydVJlamVjdC5nZXRTdGF0dXMoKSk7CisJCXRyeSAoQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworCQkJCVByaW50U3RyZWFtIG91dCA9IG5ldyBQcmludFN0cmVhbShieXRlcywgdHJ1ZSwKKwkJCQkJCVN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpOworCQkJCVByaW50U3RyZWFtIGVyciA9IG5ldyBQcmludFN0cmVhbShOdWxsT3V0cHV0U3RyZWFtLklOU1RBTkNFKSkgeworCQkJTW9ja1ByZVB1c2hIb29rIGhvb2sgPSBuZXcgTW9ja1ByZVB1c2hIb29rKGRiLCBvdXQsIGVycik7CisJCQlleGVjdXRlUHVzaChob29rKTsKKwkJCWFzc2VydEVxdWFscyhTdGF0dXMuT0ssIHJydU9rLmdldFN0YXR1cygpKTsKKwkJCWFzc2VydFRydWUocnJ1T2suaXNGYXN0Rm9yd2FyZCgpKTsKKwkJCWFzc2VydEVxdWFscyhTdGF0dXMuTk9OX0VYSVNUSU5HLCBycnVSZWplY3QuZ2V0U3RhdHVzKCkpOworCQkJb3V0LmZsdXNoKCk7CisJCQlTdHJpbmcgcmVzdWx0ID0gbmV3IFN0cmluZyhieXRlcy50b1N0cmluZyhTdGFuZGFyZENoYXJzZXRzLlVURl84KSk7CisJCQlhc3NlcnRFcXVhbHMoCisJCQkJCSJudWxsIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAgIgorCQkJCQkJCSsgInJlZnMvaGVhZHMvbWFzdGVyIDJjMzQ5MzM1YjdmNzk3MDcyY2Y3MjljNGYzYmIwOTE0ZWNiNmRlYzlcbiIsCisJCQkJCXJlc3VsdCk7CisJCX0KIAl9CiAKIAkvKioKQEAgLTM0NiwxMCArMzc0LDE4IEBAIHByaXZhdGUgUHVzaFJlc3VsdCB0ZXN0T25lVXBkYXRlU3RhdHVzKGZpbmFsIFJlbW90ZVJlZlVwZGF0ZSBycnUsCiAJCQlmaW5hbCBSZWYgYWR2ZXJ0aXNlZFJlZiwgZmluYWwgU3RhdHVzIGV4cGVjdGVkU3RhdHVzLAogCQkJQm9vbGVhbiBmYXN0Rm9yd2FyZCkgdGhyb3dzIE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiwKIAkJCVRyYW5zcG9ydEV4Y2VwdGlvbiB7CisJCXJldHVybiB0ZXN0T25lVXBkYXRlU3RhdHVzKHJydSwgYWR2ZXJ0aXNlZFJlZiwgZXhwZWN0ZWRTdGF0dXMsCisJCQkJZmFzdEZvcndhcmQsIG51bGwpOworCX0KKworCXByaXZhdGUgUHVzaFJlc3VsdCB0ZXN0T25lVXBkYXRlU3RhdHVzKGZpbmFsIFJlbW90ZVJlZlVwZGF0ZSBycnUsCisJCQlmaW5hbCBSZWYgYWR2ZXJ0aXNlZFJlZiwgZmluYWwgU3RhdHVzIGV4cGVjdGVkU3RhdHVzLAorCQkJQm9vbGVhbiBmYXN0Rm9yd2FyZCwgUHJlUHVzaEhvb2sgaG9vaykKKwkJCXRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24sIFRyYW5zcG9ydEV4Y2VwdGlvbiB7CiAJCXJlZlVwZGF0ZXMuYWRkKHJydSk7CiAJCWlmIChhZHZlcnRpc2VkUmVmICE9IG51bGwpCiAJCQlhZHZlcnRpc2VkUmVmcy5hZGQoYWR2ZXJ0aXNlZFJlZik7Ci0JCWZpbmFsIFB1c2hSZXN1bHQgcmVzdWx0ID0gZXhlY3V0ZVB1c2goKTsKKwkJZmluYWwgUHVzaFJlc3VsdCByZXN1bHQgPSBleGVjdXRlUHVzaChob29rKTsKIAkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkU3RhdHVzLCBycnUuZ2V0U3RhdHVzKCkpOwogCQlpZiAoZmFzdEZvcndhcmQgIT0gbnVsbCkKIAkJCWFzc2VydEVxdWFscyhmYXN0Rm9yd2FyZCwgQm9vbGVhbi52YWx1ZU9mKHJydS5pc0Zhc3RGb3J3YXJkKCkpKTsKQEAgLTM1OCw3ICszOTQsMTIgQEAgcHJpdmF0ZSBQdXNoUmVzdWx0IHRlc3RPbmVVcGRhdGVTdGF0dXMoZmluYWwgUmVtb3RlUmVmVXBkYXRlIHJydSwKIAogCXByaXZhdGUgUHVzaFJlc3VsdCBleGVjdXRlUHVzaCgpIHRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24sCiAJCQlUcmFuc3BvcnRFeGNlcHRpb24gewotCQlwcm9jZXNzID0gbmV3IFB1c2hQcm9jZXNzKHRyYW5zcG9ydCwgcmVmVXBkYXRlcyk7CisJCXJldHVybiBleGVjdXRlUHVzaChudWxsKTsKKwl9CisKKwlwcml2YXRlIFB1c2hSZXN1bHQgZXhlY3V0ZVB1c2goUHJlUHVzaEhvb2sgaG9vaykKKwkJCXRocm93cyBOb3RTdXBwb3J0ZWRFeGNlcHRpb24sIFRyYW5zcG9ydEV4Y2VwdGlvbiB7CisJCXByb2Nlc3MgPSBuZXcgUHVzaFByb2Nlc3ModHJhbnNwb3J0LCByZWZVcGRhdGVzLCBob29rKTsKIAkJcmV0dXJuIHByb2Nlc3MuZXhlY3V0ZShuZXcgVGV4dFByb2dyZXNzTW9uaXRvcigpKTsKIAl9CiAKQEAgLTQxNiw0ICs0NTcsMjAgQEAgcHVibGljIHZvaWQgcHVzaChQcm9ncmVzc01vbml0b3IgbW9uaXRvciwKIAkJCX0KIAkJfQogCX0KKworCXByaXZhdGUgc3RhdGljIGNsYXNzIE1vY2tQcmVQdXNoSG9vayBleHRlbmRzIFByZVB1c2hIb29rIHsKKworCQlwcml2YXRlIGZpbmFsIFByaW50U3RyZWFtIG91dHB1dDsKKworCQlwdWJsaWMgTW9ja1ByZVB1c2hIb29rKFJlcG9zaXRvcnkgcmVwbywgUHJpbnRTdHJlYW0gb3V0LAorCQkJCVByaW50U3RyZWFtIGVycikgeworCQkJc3VwZXIocmVwbywgb3V0LCBlcnIpOworCQkJb3V0cHV0ID0gb3V0OworCQl9CisKKwkJQE92ZXJyaWRlCisJCXByb3RlY3RlZCB2b2lkIGRvUnVuKCkgdGhyb3dzIEFib3J0ZWRCeUhvb2tFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKKwkJCW91dHB1dC5wcmludChnZXRTdGRpbkFyZ3MoKSk7CisJCX0KKwl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlY2VpdmVQYWNrQWR2ZXJ0aXNlUmVmc0hvb2tUZXN0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlY2VpdmVQYWNrQWR2ZXJ0aXNlUmVmc0hvb2tUZXN0LmphdmEKaW5kZXggZDFlNTQ0Ni4uYTkxYmM5NSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZWNlaXZlUGFja0FkdmVydGlzZVJlZnNIb29rVGVzdC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUmVjZWl2ZVBhY2tBZHZlcnRpc2VSZWZzSG9va1Rlc3QuamF2YQpAQCAtNzMsMTEgKzczLDE0IEBAIHB1YmxpYyB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXN1cGVyLnNldFVwKCk7CiAKIAkJc3JjID0gY3JlYXRlQmFyZVJlcG9zaXRvcnkoKTsKKwkJYWRkUmVwb1RvQ2xvc2Uoc3JjKTsKIAkJZHN0ID0gY3JlYXRlQmFyZVJlcG9zaXRvcnkoKTsKKwkJYWRkUmVwb1RvQ2xvc2UoZHN0KTsKIAogCQkvLyBGaWxsIGRzdCB3aXRoIGEgc29tZSBjb21tb24gaGlzdG9yeS4KIAkJLy8KIAkJdHJ5IChUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBkID0gbmV3IFRlc3RSZXBvc2l0b3J5PD4oZHN0KSkgeworCQkJZHN0LmluY3JlbWVudE9wZW4oKTsKIAkJCWEgPSBkLmJsb2IoImEiKTsKIAkJCUEgPSBkLmNvbW1pdChkLnRyZWUoZC5maWxlKCJhIiwgYSkpKTsKIAkJCUIgPSBkLmNvbW1pdCgpLnBhcmVudChBKS5jcmVhdGUoKTsKQEAgLTEwNiw5ICsxMDksNiBAQCBwdWJsaWMgdm9pZCB0ZXN0RmlsdGVySGlkZXNQcml2YXRlKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQkJZHN0LmdldERpcmVjdG9yeSgpKSB7CiAJCQlAT3ZlcnJpZGUKIAkJCVJlY2VpdmVQYWNrIGNyZWF0ZVJlY2VpdmVQYWNrKFJlcG9zaXRvcnkgZGIpIHsKLQkJCQlkYi5jbG9zZSgpOwotCQkJCWRzdC5pbmNyZW1lbnRPcGVuKCk7Ci0KIAkJCQlmaW5hbCBSZWNlaXZlUGFjayBycCA9IHN1cGVyLmNyZWF0ZVJlY2VpdmVQYWNrKGRzdCk7CiAJCQkJcnAuc2V0QWR2ZXJ0aXNlUmVmc0hvb2sobmV3IEhpZGVQcml2YXRlSG9vaygpKTsKIAkJCQlyZXR1cm4gcnA7CkBAIC0xMzYsOCArMTM2LDYgQEAgcHVibGljIHZvaWQgcmVzZXRzSGF2ZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJCQlkc3QuZ2V0RGlyZWN0b3J5KCkpIHsKIAkJCUBPdmVycmlkZQogCQkJUmVjZWl2ZVBhY2sgY3JlYXRlUmVjZWl2ZVBhY2soUmVwb3NpdG9yeSBkYikgewotCQkJCWRzdC5pbmNyZW1lbnRPcGVuKCk7Ci0KIAkJCQlSZWNlaXZlUGFjayBycCA9IHN1cGVyLmNyZWF0ZVJlY2VpdmVQYWNrKGRzdCk7CiAJCQkJcnAuc2V0QWR2ZXJ0aXNlUmVmc0hvb2sobmV3IEFkdmVydGlzZVJlZnNIb29rKCkgewogCQkJCQlAT3ZlcnJpZGUKQEAgLTE3Myw5ICsxNzEsNiBAQCBwcml2YXRlIFRyYW5zcG9ydExvY2FsIG5ld1RyYW5zcG9ydExvY2FsV2l0aFN0cmljdFZhbGlkYXRpb24oKQogCQlyZXR1cm4gbmV3IFRyYW5zcG9ydExvY2FsKHNyYywgdXJpT2YoZHN0KSwgZHN0LmdldERpcmVjdG9yeSgpKSB7CiAJCQlAT3ZlcnJpZGUKIAkJCVJlY2VpdmVQYWNrIGNyZWF0ZVJlY2VpdmVQYWNrKFJlcG9zaXRvcnkgZGIpIHsKLQkJCQlkYi5jbG9zZSgpOwotCQkJCWRzdC5pbmNyZW1lbnRPcGVuKCk7Ci0KIAkJCQlmaW5hbCBSZWNlaXZlUGFjayBycCA9IHN1cGVyLmNyZWF0ZVJlY2VpdmVQYWNrKGRzdCk7CiAJCQkJcnAuc2V0Q2hlY2tSZWNlaXZlZE9iamVjdHModHJ1ZSk7CiAJCQkJcnAuc2V0Q2hlY2tSZWZlcmVuY2VkT2JqZWN0c0FyZVJlYWNoYWJsZSh0cnVlKTsKQEAgLTIxMSw2ICsyMDYsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0U3VjY2VzcygpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyBOb3cgdXNlIGIgYnV0IGluIGEgZGlmZmVyZW50IGNvbW1pdCB0aGFuIHdoYXQgaXMgaGlkZGVuLgogCQkvLwogCQl0cnkgKFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+IHMgPSBuZXcgVGVzdFJlcG9zaXRvcnk8PihzcmMpKSB7CisJCQlzcmMuaW5jcmVtZW50T3BlbigpOwogCQkJUmV2Q29tbWl0IE4gPSBzLmNvbW1pdCgpLnBhcmVudChCKS5hZGQoInEiLCBiKS5jcmVhdGUoKTsKIAkJCXMudXBkYXRlKFJfTUFTVEVSLCBOKTsKIApAQCAtMjI4LDcgKzIyNCw2IEBAIHB1YmxpYyB2b2lkIHRlc3RTdWNjZXNzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCQl0cnkgKFRyYW5zcG9ydExvY2FsIHQgPSBuZXdUcmFuc3BvcnRMb2NhbFdpdGhTdHJpY3RWYWxpZGF0aW9uKCkpIHsKIAkJCQl0LnNldFB1c2hUaGluKHRydWUpOwogCQkJCXIgPSB0LnB1c2goUE0sIENvbGxlY3Rpb25zLnNpbmdsZXRvbih1KSk7Ci0JCQkJZHN0LmNsb3NlKCk7CiAJCQl9CiAKIAkJCWFzc2VydE5vdE51bGwoImhhdmUgcmVzdWx0Iiwgcik7CkBAIC0yOTAsNiArMjg1LDcgQEAgcHJpdmF0ZSBzdGF0aWMgdm9pZCByZWNlaXZlKGZpbmFsIFJlY2VpdmVQYWNrIHJwLAogCXB1YmxpYyB2b2lkIHRlc3RVc2luZ0hpZGRlbkRlbHRhQmFzZUZhaWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCWJ5dGVbXSBkZWx0YSA9IHsgMHgxLCAweDEsIDB4MSwgJ2MnIH07CiAJCXRyeSAoVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4gcyA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KHNyYykpIHsKKwkJCXNyYy5pbmNyZW1lbnRPcGVuKCk7CiAJCQlSZXZDb21taXQgTiA9IHMuY29tbWl0KCkucGFyZW50KEIpCiAJCQkJCS5hZGQoInEiLAogCQkJCQkJCXMuYmxvYihCaW5hcnlEZWx0YS5hcHBseSgKQEAgLTM0OCw2ICszNDQsNyBAQCBwdWJsaWMgdm9pZCB0ZXN0VXNpbmdIaWRkZW5Db21tb25CbG9iRmFpbHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKIAkJLy8gVHJ5IHRvIHVzZSB0aGUgJ2InIGJsb2IgdGhhdCBpcyBoaWRkZW4uCiAJCS8vCiAJCXRyeSAoVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4gcyA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KHNyYykpIHsKKwkJCXNyYy5pbmNyZW1lbnRPcGVuKCk7CiAJCQlSZXZDb21taXQgTiA9IHMuY29tbWl0KCkucGFyZW50KEIpLmFkZCgicSIsIHMuYmxvYigiYiIpKS5jcmVhdGUoKTsKIAogCQkJLy8gQnV0IGRvbid0IGluY2x1ZGUgaXQgaW4gdGhlIHBhY2suCkBAIC00MDEsNiArMzk4LDcgQEAgcHVibGljIHZvaWQgdGVzdFVzaW5nVW5rbm93bkJsb2JGYWlscygpIHRocm93cyBFeGNlcHRpb24gewogCQkvLyBUcnkgdG8gdXNlIHRoZSAnbicgYmxvYiB0aGF0IGlzIG5vdCBvbiB0aGUgc2VydmVyLgogCQkvLwogCQl0cnkgKFRlc3RSZXBvc2l0b3J5PFJlcG9zaXRvcnk+IHMgPSBuZXcgVGVzdFJlcG9zaXRvcnk8PihzcmMpKSB7CisJCQlzcmMuaW5jcmVtZW50T3BlbigpOwogCQkJUmV2QmxvYiBuID0gcy5ibG9iKCJuIik7CiAJCQlSZXZDb21taXQgTiA9IHMuY29tbWl0KCkucGFyZW50KEIpLmFkZCgicSIsIG4pLmNyZWF0ZSgpOwogCkBAIC00OTEsNiArNDg5LDcgQEAgcHJpdmF0ZSBUZW1wb3JhcnlCdWZmZXIuSGVhcCBzZXR1cFNvdXJjZVJlcG9JbnZhbGlkR2l0bW9kdWxlcygpCiAJCQkJLnRvU3RyaW5nKCk7CiAKIAkJdHJ5IChUZXN0UmVwb3NpdG9yeTxSZXBvc2l0b3J5PiBzID0gbmV3IFRlc3RSZXBvc2l0b3J5PD4oc3JjKSkgeworCQkJc3JjLmluY3JlbWVudE9wZW4oKTsKIAkJCVJldkJsb2IgYmxvYiA9IHMuYmxvYihmYWtlR2l0bW9kdWxlcyk7CiAJCQlSZXZDb21taXQgTiA9IHMuY29tbWl0KCkucGFyZW50KEIpLmFkZCgiLmdpdG1vZHVsZXMiLCBibG9iKQogCQkJCQkuY3JlYXRlKCk7CkBAIC01MTcsNiArNTE2LDcgQEAgcHJpdmF0ZSBUZW1wb3JhcnlCdWZmZXIuSGVhcCBzZXR1cFNvdXJjZVJlcG9JbnZhbGlkR2l0bW9kdWxlcygpCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0VXNpbmdVbmtub3duVHJlZUZhaWxzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAJCXRyeSAoVGVzdFJlcG9zaXRvcnk8UmVwb3NpdG9yeT4gcyA9IG5ldyBUZXN0UmVwb3NpdG9yeTw+KHNyYykpIHsKKwkJCXNyYy5pbmNyZW1lbnRPcGVuKCk7CiAJCQlSZXZDb21taXQgTiA9IHMuY29tbWl0KCkucGFyZW50KEIpLmFkZCgicSIsIHMuYmxvYigiYSIpKS5jcmVhdGUoKTsKIAkJCVJldlRyZWUgdCA9IHMucGFyc2VCb2R5KE4pLmdldFRyZWUoKTsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZWZTcGVjVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZWZTcGVjVGVzdC5qYXZhCmluZGV4IDU1NjliY2EuLmI1NjMwOGMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUmVmU3BlY1Rlc3QuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0LnRlc3QvdHN0L29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlZlNwZWNUZXN0LmphdmEKQEAgLTQ2Niw0ICs0NjYsMTggQEAgcHVibGljIHZvaWQgb25seVdpbGRDYXJkKCkgewogCQlhc3NlcnRUcnVlKGEubWF0Y2hTb3VyY2UoInJlZnMvaGVhZHMvbWFzdGVyIikpOwogCQlhc3NlcnROdWxsKGEuZ2V0RGVzdGluYXRpb24oKSk7CiAJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCBtYXRjaGluZygpIHsKKwkJUmVmU3BlYyBhID0gbmV3IFJlZlNwZWMoIjoiKTsKKwkJYXNzZXJ0VHJ1ZShhLmlzTWF0Y2hpbmcoKSk7CisJCWFzc2VydEZhbHNlKGEuaXNGb3JjZVVwZGF0ZSgpKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIG1hdGNoaW5nRm9yY2VkKCkgeworCQlSZWZTcGVjIGEgPSBuZXcgUmVmU3BlYygiKzoiKTsKKwkJYXNzZXJ0VHJ1ZShhLmlzTWF0Y2hpbmcoKSk7CisJCWFzc2VydFRydWUoYS5pc0ZvcmNlVXBkYXRlKCkpOworCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudGVzdC90c3Qvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZpbHRlckNvbW1hbmRzVGVzdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvRmlsdGVyQ29tbWFuZHNUZXN0LmphdmEKaW5kZXggMzZmOTRmYi4uODlkMzFjMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvRmlsdGVyQ29tbWFuZHNUZXN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC50ZXN0L3RzdC9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvRmlsdGVyQ29tbWFuZHNUZXN0LmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2LCBDaHJpc3RpYW4gSGFsc3RyaWNrIDxjaHJpc3RpYW4uaGFsc3RyaWNrQHNhcC5jb20+IGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAxNiwgMjAyMiBDaHJpc3RpYW4gSGFsc3RyaWNrIDxjaHJpc3RpYW4uaGFsc3RyaWNrQHNhcC5jb20+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTEwLDEyICsxMCwxNyBAQAogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7CiAKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0RmFsc2U7CiAKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uT3V0cHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5HaXQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuTWVyZ2VSZXN1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkdpdEFQSUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuRmlsdGVyQ29tbWFuZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMuRmlsdGVyQ29tbWFuZEZhY3Rvcnk7CkBAIC04Niw2ICs5MSwxNCBAQCBwdWJsaWMgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewogCQlzZWNvbmRDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiU2Vjb25kIGNvbW1pdCIpLmNhbGwoKTsKIAl9CiAKKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24geworCQlTZXQ8U3RyaW5nPiBleGlzdGluZ0ZpbHRlcnMgPSBuZXcgSGFzaFNldDw+KAorCQkJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5nZXRSZWdpc3RlcmVkRmlsdGVyQ29tbWFuZHMoKSk7CisJCWV4aXN0aW5nRmlsdGVycy5mb3JFYWNoKEZpbHRlckNvbW1hbmRSZWdpc3RyeTo6dW5yZWdpc3Rlcik7CisJCXN1cGVyLnRlYXJEb3duKCk7CisJfQorCiAJQFRlc3QKIAlwdWJsaWMgdm9pZCB0ZXN0QnVpbHRpbkNsZWFuRmlsdGVyKCkKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uIHsKQEAgLTIxNyw0ICsyMzAsMTMzIEBAIHB1YmxpYyB2b2lkIHRlc3RCdWlsdGluQ2xlYW5BbmRTbXVkZ2VGaWx0ZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvCiAJCWNvbmZpZy5zYXZlKCk7CiAJfQogCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0QnJhbmNoU3dpdGNoKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisJCVN0cmluZyBidWlsdGluQ29tbWFuZFByZWZpeCA9ICJqZ2l0Oi8vYnVpbHRpbi90ZXN0LyI7CisJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihidWlsdGluQ29tbWFuZFByZWZpeCArICJzbXVkZ2UiLAorCQkJCW5ldyBUZXN0Q29tbWFuZEZhY3RvcnkoJ3MnKSk7CisJCUZpbHRlckNvbW1hbmRSZWdpc3RyeS5yZWdpc3RlcihidWlsdGluQ29tbWFuZFByZWZpeCArICJjbGVhbiIsCisJCQkJbmV3IFRlc3RDb21tYW5kRmFjdG9yeSgnYycpKTsKKwkJU3RvcmVkQ29uZmlnIGNvbmZpZyA9IGdpdC5nZXRSZXBvc2l0b3J5KCkuZ2V0Q29uZmlnKCk7CisJCWNvbmZpZy5zZXRTdHJpbmcoImZpbHRlciIsICJ0ZXN0IiwgInNtdWRnZSIsCisJCQkJYnVpbHRpbkNvbW1hbmRQcmVmaXggKyAic211ZGdlIik7CisJCWNvbmZpZy5zZXRTdHJpbmcoImZpbHRlciIsICJ0ZXN0IiwgImNsZWFuIiwKKwkJCQlidWlsdGluQ29tbWFuZFByZWZpeCArICJjbGVhbiIpOworCQljb25maWcuc2F2ZSgpOworCQkvLyBXZSdyZSBvbiB0aGUgdGVzdCBicmFuY2gKKwkJRmlsZSBhRmlsZSA9IHdyaXRlVHJhc2hGaWxlKCJhLnR4dCIsICJhIik7CisJCXdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICJhLnR4dCBmaWx0ZXI9dGVzdCIpOworCQlGaWxlIGNGaWxlID0gd3JpdGVUcmFzaEZpbGUoImNjL2MudHh0IiwgIkMiKTsKKwkJd3JpdGVUcmFzaEZpbGUoImNjLy5naXRhdHRyaWJ1dGVzIiwgImMudHh0IGZpbHRlcj10ZXN0Iik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIk9uIHRlc3QiKS5jYWxsKCk7CisJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm1hc3RlciIpLmNhbGwoKTsKKwkJZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoIm90aGVyIikuY2FsbCgpOworCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJvdGhlciIpLmNhbGwoKTsKKwkJd3JpdGVUcmFzaEZpbGUoImIudHh0IiwgImIiKTsKKwkJd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImIudHh0IGZpbHRlcj10ZXN0Iik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIk9uIG90aGVyIikuY2FsbCgpOworCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJ0ZXN0IikuY2FsbCgpOworCQljaGVja0ZpbGUoYUZpbGUsICJzY3NhIik7CisJCWNoZWNrRmlsZShjRmlsZSwgInNjc0MiKTsKKwl9CisKKwlAVGVzdAorCXB1YmxpYyB2b2lkIHRlc3RDaGVja291dFNpbmdsZUZpbGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIGJ1aWx0aW5Db21tYW5kUHJlZml4ID0gImpnaXQ6Ly9idWlsdGluL3Rlc3QvIjsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKGJ1aWx0aW5Db21tYW5kUHJlZml4ICsgInNtdWRnZSIsCisJCQkJbmV3IFRlc3RDb21tYW5kRmFjdG9yeSgncycpKTsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKGJ1aWx0aW5Db21tYW5kUHJlZml4ICsgImNsZWFuIiwKKwkJCQluZXcgVGVzdENvbW1hbmRGYWN0b3J5KCdjJykpOworCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJY29uZmlnLnNldFN0cmluZygiZmlsdGVyIiwgInRlc3QiLCAic211ZGdlIiwKKwkJCQlidWlsdGluQ29tbWFuZFByZWZpeCArICJzbXVkZ2UiKTsKKwkJY29uZmlnLnNldFN0cmluZygiZmlsdGVyIiwgInRlc3QiLCAiY2xlYW4iLAorCQkJCWJ1aWx0aW5Db21tYW5kUHJlZml4ICsgImNsZWFuIik7CisJCWNvbmZpZy5zYXZlKCk7CisJCS8vIFdlJ3JlIG9uIHRoZSB0ZXN0IGJyYW5jaAorCQlGaWxlIGFGaWxlID0gd3JpdGVUcmFzaEZpbGUoImEudHh0IiwgImEiKTsKKwkJRmlsZSBhdHRyaWJ1dGVzID0gd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImEudHh0IGZpbHRlcj10ZXN0Iik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIk9uIHRlc3QiKS5jYWxsKCk7CisJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm1hc3RlciIpLmNhbGwoKTsKKwkJZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoIm90aGVyIikuY2FsbCgpOworCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJvdGhlciIpLmNhbGwoKTsKKwkJd3JpdGVUcmFzaEZpbGUoImIudHh0IiwgImIiKTsKKwkJd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImIudHh0IGZpbHRlcj10ZXN0Iik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIk9uIG90aGVyIikuY2FsbCgpOworCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCWFzc2VydEZhbHNlKGFGaWxlLmV4aXN0cygpKTsKKwkJYXNzZXJ0RmFsc2UoYXR0cmlidXRlcy5leGlzdHMoKSk7CisJCWdpdC5jaGVja291dCgpLnNldFN0YXJ0UG9pbnQoInRlc3QiKS5hZGRQYXRoKCJhLnR4dCIpLmNhbGwoKTsKKwkJY2hlY2tGaWxlKGFGaWxlLCAic2NzYSIpOworCX0KKworCUBUZXN0CisJcHVibGljIHZvaWQgdGVzdENoZWNrb3V0U2luZ2xlRmlsZTIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIGJ1aWx0aW5Db21tYW5kUHJlZml4ID0gImpnaXQ6Ly9idWlsdGluL3Rlc3QvIjsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKGJ1aWx0aW5Db21tYW5kUHJlZml4ICsgInNtdWRnZSIsCisJCQkJbmV3IFRlc3RDb21tYW5kRmFjdG9yeSgncycpKTsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKGJ1aWx0aW5Db21tYW5kUHJlZml4ICsgImNsZWFuIiwKKwkJCQluZXcgVGVzdENvbW1hbmRGYWN0b3J5KCdjJykpOworCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJY29uZmlnLnNldFN0cmluZygiZmlsdGVyIiwgInRlc3QiLCAic211ZGdlIiwKKwkJCQlidWlsdGluQ29tbWFuZFByZWZpeCArICJzbXVkZ2UiKTsKKwkJY29uZmlnLnNldFN0cmluZygiZmlsdGVyIiwgInRlc3QiLCAiY2xlYW4iLAorCQkJCWJ1aWx0aW5Db21tYW5kUHJlZml4ICsgImNsZWFuIik7CisJCWNvbmZpZy5zYXZlKCk7CisJCS8vIFdlJ3JlIG9uIHRoZSB0ZXN0IGJyYW5jaAorCQlGaWxlIGFGaWxlID0gd3JpdGVUcmFzaEZpbGUoImEudHh0IiwgImEiKTsKKwkJRmlsZSBhdHRyaWJ1dGVzID0gd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImEudHh0IGZpbHRlcj10ZXN0Iik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIk9uIHRlc3QiKS5jYWxsKCk7CisJCWdpdC5jaGVja291dCgpLnNldE5hbWUoIm1hc3RlciIpLmNhbGwoKTsKKwkJZ2l0LmJyYW5jaENyZWF0ZSgpLnNldE5hbWUoIm90aGVyIikuY2FsbCgpOworCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJvdGhlciIpLmNhbGwoKTsKKwkJd3JpdGVUcmFzaEZpbGUoImIudHh0IiwgImIiKTsKKwkJd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImIudHh0IGZpbHRlcj10ZXN0Iik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoIk9uIG90aGVyIikuY2FsbCgpOworCQlnaXQuY2hlY2tvdXQoKS5zZXROYW1lKCJtYXN0ZXIiKS5jYWxsKCk7CisJCWFzc2VydEZhbHNlKGFGaWxlLmV4aXN0cygpKTsKKwkJYXNzZXJ0RmFsc2UoYXR0cmlidXRlcy5leGlzdHMoKSk7CisJCXdyaXRlVHJhc2hGaWxlKCIuZ2l0YXR0cmlidXRlcyIsICIiKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0U3RhcnRQb2ludCgidGVzdCIpLmFkZFBhdGgoImEudHh0IikuY2FsbCgpOworCQljaGVja0ZpbGUoYUZpbGUsICJzY3NhIik7CisJfQorCisJQFRlc3QKKwlwdWJsaWMgdm9pZCB0ZXN0TWVyZ2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKwkJU3RyaW5nIGJ1aWx0aW5Db21tYW5kUHJlZml4ID0gImpnaXQ6Ly9idWlsdGluL3Rlc3QvIjsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKGJ1aWx0aW5Db21tYW5kUHJlZml4ICsgInNtdWRnZSIsCisJCQkJbmV3IFRlc3RDb21tYW5kRmFjdG9yeSgncycpKTsKKwkJRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LnJlZ2lzdGVyKGJ1aWx0aW5Db21tYW5kUHJlZml4ICsgImNsZWFuIiwKKwkJCQluZXcgVGVzdENvbW1hbmRGYWN0b3J5KCdjJykpOworCQlTdG9yZWRDb25maWcgY29uZmlnID0gZ2l0LmdldFJlcG9zaXRvcnkoKS5nZXRDb25maWcoKTsKKwkJY29uZmlnLnNldFN0cmluZygiZmlsdGVyIiwgInRlc3QiLCAic211ZGdlIiwKKwkJCQlidWlsdGluQ29tbWFuZFByZWZpeCArICJzbXVkZ2UiKTsKKwkJY29uZmlnLnNldFN0cmluZygiZmlsdGVyIiwgInRlc3QiLCAiY2xlYW4iLAorCQkJCWJ1aWx0aW5Db21tYW5kUHJlZml4ICsgImNsZWFuIik7CisJCWNvbmZpZy5zYXZlKCk7CisJCS8vIFdlJ3JlIG9uIHRoZSB0ZXN0IGJyYW5jaC4gU2V0IHVwIHR3byBicmFuY2hlcyB0aGF0IGFyZSBleHBlY3RlZCB0bworCQkvLyBtZXJnZSBjbGVhbmx5LgorCQlGaWxlIGFGaWxlID0gd3JpdGVUcmFzaEZpbGUoImEudHh0IiwgImEiKTsKKwkJd3JpdGVUcmFzaEZpbGUoIi5naXRhdHRyaWJ1dGVzIiwgImEudHh0IGZpbHRlcj10ZXN0Iik7CisJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybigiLiIpLmNhbGwoKTsKKwkJUmV2Q29tbWl0IGFDb21taXQgPSBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiT24gdGVzdCIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgibWFzdGVyIikuY2FsbCgpOworCQlhc3NlcnRGYWxzZShhRmlsZS5leGlzdHMoKSk7CisJCWdpdC5icmFuY2hDcmVhdGUoKS5zZXROYW1lKCJvdGhlciIpLmNhbGwoKTsKKwkJZ2l0LmNoZWNrb3V0KCkuc2V0TmFtZSgib3RoZXIiKS5jYWxsKCk7CisJCXdyaXRlVHJhc2hGaWxlKCJiL2IudHh0IiwgImIiKTsKKwkJd3JpdGVUcmFzaEZpbGUoImIvLmdpdGF0dHJpYnV0ZXMiLCAiYi50eHQgZmlsdGVyPXRlc3QiKTsKKwkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKCIuIikuY2FsbCgpOworCQlnaXQuY29tbWl0KCkuc2V0TWVzc2FnZSgiT24gb3RoZXIiKS5jYWxsKCk7CisJCU1lcmdlUmVzdWx0IHJlc3VsdCA9IGdpdC5tZXJnZSgpLmluY2x1ZGUoYUNvbW1pdCkuY2FsbCgpOworCQlhc3NlcnRFcXVhbHMoTWVyZ2VSZXN1bHQuTWVyZ2VTdGF0dXMuTUVSR0VELCByZXN1bHQuZ2V0TWVyZ2VTdGF0dXMoKSk7CisJCWNoZWNrRmlsZShhRmlsZSwgInNjc2EiKTsKKwl9CisKIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi9vcmcuZWNsaXBzZS5qZ2l0LnVpL01FVEEtSU5GL01BTklGRVNULk1GCmluZGV4IDU3YThiZWUuLjdiYWEyMTUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIGIvb3JnLmVjbGlwc2UuamdpdC51aS9NRVRBLUlORi9NQU5JRkVTVC5NRgpAQCAtNCwxNCArNCwxNCBAQAogQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZQogQXV0b21hdGljLU1vZHVsZS1OYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnVpCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnVpCi1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCitCdW5kbGUtVmVyc2lvbjogNi4xLjEucXVhbGlmaWVyCiBCdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvcgogQnVuZGxlLVJlcXVpcmVkRXhlY3V0aW9uRW52aXJvbm1lbnQ6IEphdmFTRS0xMQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYXd0dWk7dmVyc2lvbj0iNi4wLjEiCi1JbXBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5ubHM7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZwbG90O3ZlcnNpb249Ils2LjAuMSw2LjEuMCkiLAotIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsazt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSJbNi4wLjEsNi4xLjApIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iWzYuMC4xLDYuMS4wKSIKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmF3dHVpO3ZlcnNpb249IjYuMS4xIgorSW1wb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiLAorIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSJbNi4xLjEsNi4yLjApIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iWzYuMS4xLDYuMi4wKSIsCisgb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249Ils2LjEuMSw2LjIuMCkiCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0LnVpL01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDMzNWMxNTcuLjc1ZjNkMjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQudWkvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQudWkgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnVpLnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdC51aTt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQudWk7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQudWkvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQudWkvcG9tLnhtbAppbmRleCBjNGEzZTJhLi4xMjVlMTIwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0LnVpL3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC51aS9wb20ueG1sCkBAIC0xOSw3ICsxOSw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC51aTwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycyBiL29yZy5lY2xpcHNlLmpnaXQvLnNldHRpbmdzLy5hcGlfZmlsdGVycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kY2IyYzUxCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC8uc2V0dGluZ3MvLmFwaV9maWx0ZXJzCkBAIC0wLDAgKzEsMjE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz4KKzxjb21wb25lbnQgaWQ9Im9yZy5lY2xpcHNlLmpnaXQiIHZlcnNpb249IjIiPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9lcnJvcnMvTm9SZW1vdGVSZXBvc2l0b3J5RXhjZXB0aW9uLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLk5vUmVtb3RlUmVwb3NpdG9yeUV4Y2VwdGlvbiI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iTm9SZW1vdGVSZXBvc2l0b3J5RXhjZXB0aW9uKFVSSWlzaCwgU3RyaW5nLCBUaHJvd2FibGUpIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnQ29uc3RhbnRzLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cyI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjIiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iQ09ORklHX0tFWV9CSVRNQVBfRVhDTFVERURfUkVGU19QUkVGSVhFUyIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI1LjEzLjIiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iU0hBMV9JTVBMRU1FTlRBVElPTiIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI2LjEuMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJDT05GSUdfS0VZX1RSVVNUX1BBQ0tFRF9SRUZTX1NUQVQiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db3JlQ29uZmlnLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLkNvcmVDb25maWckVHJ1c3RQYWNrZWRSZWZzU3RhdCI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjExNDI5NDc4NDMiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSI2LjEuMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJUcnVzdFBhY2tlZFJlZnNTdGF0Ii8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvT2JqZWN0RGF0YWJhc2UuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0RGF0YWJhc2UiPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzY2OTUzMzciPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3REYXRhYmFzZSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRBcHByb3hpbWF0ZU9iamVjdENvdW50KCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9SZXBvc2l0b3J5LmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnkiPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldFJlZmxvZ1JlYWRlcihSZWYpIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvVHlwZWRDb25maWdHZXR0ZXIuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5saWIuVHlwZWRDb25maWdHZXR0ZXIiPgorICAgICAgICA8ZmlsdGVyIGlkPSI0MDM3NjczMzYiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UeXBlZENvbmZpZ0dldHRlciIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJVTlNFVF9JTlQiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSI0MDM4MDQyMDQiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UeXBlZENvbmZpZ0dldHRlciIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJnZXRJbnRJblJhbmdlKENvbmZpZywgU3RyaW5nLCBTdHJpbmcsIFN0cmluZywgaW50LCBpbnQsIGludCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL1Jlc29sdmVNZXJnZXIuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC5tZXJnZS5SZXNvbHZlTWVyZ2VyIj4KKyAgICAgICAgPGZpbHRlciBpZD0iMzM4NzkyNTQ2Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC5tZXJnZS5SZXNvbHZlTWVyZ2VyIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImFkZENoZWNrb3V0TWV0YWRhdGEoU3RyaW5nLCBBdHRyaWJ1dGVzKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjMzODc5MjU0NiI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuUmVzb2x2ZU1lcmdlciIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJhZGRUb0NoZWNrb3V0KFN0cmluZywgRGlyQ2FjaGVFbnRyeSwgQXR0cmlidXRlcykiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzg3OTI1NDYiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlLlJlc29sdmVNZXJnZXIiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0icHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIsIENhbm9uaWNhbFRyZWVQYXJzZXIsIENhbm9uaWNhbFRyZWVQYXJzZXIsIERpckNhY2hlQnVpbGRJdGVyYXRvciwgV29ya2luZ1RyZWVJdGVyYXRvciwgYm9vbGVhbiwgQXR0cmlidXRlcykiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L3N0b3JhZ2UvcGFjay9QYWNrQ29uZmlnLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrLlBhY2tDb25maWciPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzY2NTg0ODEiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjay5QYWNrQ29uZmlnIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkRFRkFVTFRfQklUTUFQX0VYQ0xVREVEX1JFRlNfUFJFRklYRVMiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IkRFRkFVTFRfQklUTUFQX0VYQ0xVREVEX1JFRlNfUFJFRklYRVMiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImdldEJpdG1hcEV4Y2x1ZGVkUmVmc1ByZWZpeGVzKCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InNldEJpdG1hcEV4Y2x1ZGVkUmVmc1ByZWZpeGVzKFN0cmluZ1tdKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L0F3c1JlcXVlc3RTaWduZXJWNC5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5Bd3NSZXF1ZXN0U2lnbmVyVjQiPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTA5MzkzNDExIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4xIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LkF3c1JlcXVlc3RTaWduZXJWNCIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L0Jhc2VQYWNrUHVzaENvbm5lY3Rpb24uamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuQmFzZVBhY2tQdXNoQ29ubmVjdGlvbiI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjMzODc5MjU0NiI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LkJhc2VQYWNrUHVzaENvbm5lY3Rpb24iLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ibm9SZXBvc2l0b3J5KCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgIDwvcmVzb3VyY2U+CisgICAgPHJlc291cmNlIHBhdGg9InNyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoQ29uZmlnLmphdmEiIHR5cGU9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlB1c2hDb25maWciPgorICAgICAgICA8ZmlsdGVyIGlkPSIzMzg3MjI5MDciPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ29uZmlnIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IlB1c2hDb25maWcoKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9IdHRwU3VwcG9ydC5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuSHR0cFN1cHBvcnQiPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4xIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InVybEVuY29kZShTdHJpbmcsIGJvb2xlYW4pIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICA8L3Jlc291cmNlPgorICAgIDxyZXNvdXJjZSBwYXRoPSJzcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL3NoYTEvU0hBMS5qYXZhIiB0eXBlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMS5TSEExIj4KKyAgICAgICAgPGZpbHRlciBpZD0iMzM3NzY0NDE4Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTEuU0hBMSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjQyMTY1MDU0OSI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iZGlnZXN0KCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSI0MjE2NTA1NDkiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMS5TSEExIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9ImRpZ2VzdChNdXRhYmxlT2JqZWN0SWQpIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICAgICAgPGZpbHRlciBpZD0iNDIxNjUwNTQ5Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTEuU0hBMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJoYXNDb2xsaXNpb24oKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjQyMTY1MDU0OSI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0icmVzZXQoKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjQyMTY1MDU0OSI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ic2V0RGV0ZWN0Q29sbGlzaW9uKGJvb2xlYW4pIi8+CisgICAgICAgICAgICA8L21lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICA8L2ZpbHRlcj4KKyAgICAgICAgPGZpbHRlciBpZD0iNDIxNjUwNTQ5Ij4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTEuU0hBMSIvPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJ0b09iamVjdElkKCkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSI0MjE2NTA1NDkiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMS5TSEExIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InVwZGF0ZShieXRlKSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgICAgIDxmaWx0ZXIgaWQ9IjQyMTY1MDU0OSI+CisgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9Im9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExLlNIQTEiLz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0idXBkYXRlKGJ5dGVbXSkiLz4KKyAgICAgICAgICAgIDwvbWVzc2FnZV9hcmd1bWVudHM+CisgICAgICAgIDwvZmlsdGVyPgorICAgICAgICA8ZmlsdGVyIGlkPSI0MjE2NTA1NDkiPgorICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnRzPgorICAgICAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50IHZhbHVlPSJvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuc2hhMS5TSEExIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9InVwZGF0ZShieXRlW10sIGludCwgaW50KSIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKyAgICA8cmVzb3VyY2UgcGF0aD0ic3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9zaGExL1NIQTEuamF2YSIgdHlwZT0ib3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTEuU0hBMSRTaGExSW1wbGVtZW50YXRpb24iPgorICAgICAgICA8ZmlsdGVyIGlkPSIxMTQyOTQ3ODQzIj4KKyAgICAgICAgICAgIDxtZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgICAgICAgICA8bWVzc2FnZV9hcmd1bWVudCB2YWx1ZT0iNS4xMy4yIi8+CisgICAgICAgICAgICAgICAgPG1lc3NhZ2VfYXJndW1lbnQgdmFsdWU9IlNoYTFJbXBsZW1lbnRhdGlvbiIvPgorICAgICAgICAgICAgPC9tZXNzYWdlX2FyZ3VtZW50cz4KKyAgICAgICAgPC9maWx0ZXI+CisgICAgPC9yZXNvdXJjZT4KKzwvY29tcG9uZW50PgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKaW5kZXggODdiNThlMS4uODA4ZDVkMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL01BTklGRVNULk1GCkBAIC0zLDEyICszLDEyIEBACiBCdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lCiBBdXRvbWF0aWMtTW9kdWxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQKIEJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLmpnaXQKLUJ1bmRsZS1WZXJzaW9uOiA2LjAuMS5xdWFsaWZpZXIKK0J1bmRsZS1WZXJzaW9uOiA2LjEuMS5xdWFsaWZpZXIKIEJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgogQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IKIEVjbGlwc2UtRXh0ZW5zaWJsZUFQSTogdHJ1ZQotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnM7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpO3ZlcnNpb249IjYuMC4xIjsKK0V4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmFwaTt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgIG9yZy5lY2xpcHNlLmpnaXQubm90ZXMsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLApAQCAtMjMsMTggKzIzLDE4IEBACiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyLAogICAgb3JnLmVjbGlwc2UuamdpdC5ibGFtZSwKICAgIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9yczt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMiLAotIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlczt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2FsayIsCi0gb3JnLmVjbGlwc2UuamdpdC5ibGFtZTt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5ibGFtZTt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyLAogICAgb3JnLmVjbGlwc2UuamdpdC5kaWZmIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpZmY7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuZGlmZjt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcywKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKQEAgLTQyLDQ0ICs0Miw0OCBAQAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQuZXZlbnRzLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmVycm9yczt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnM7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjayIsCi0gb3JnLmVjbGlwc2UuamdpdC5ldmVudHM7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuZXZlbnRzO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmZubWF0Y2g7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwbzt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLnhtbC5zYXguaGVscGVycywKICAgIG9yZy5lY2xpcHNlLmpnaXQuYXBpLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCiAgICBvcmcueG1sLnNheCIsCi0gb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLmludGVybmFsO3ZlcnNpb249IjYuMC4xIjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpnaXQuaG9va3M7dmVyc2lvbj0iNi4wLjEiO3VzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiIsCi0gb3JnLmVjbGlwc2UuamdpdC5pZ25vcmU7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQuaWdub3JlLmludGVybmFsO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uaW50ZXJuYWw7dmVyc2lvbj0iNi4xLjEiO3gtaW50ZXJuYWw6PXRydWUsCisgb3JnLmVjbGlwc2UuamdpdC5ob29rczt2ZXJzaW9uPSI2LjEuMSI7dXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliIiwKKyBvcmcuZWNsaXBzZS5qZ2l0Lmlnbm9yZTt2ZXJzaW9uPSI2LjEuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5pZ25vcmUuaW50ZXJuYWw7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWw7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5mc2NrO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmRpZmZtZXJnZXRvb2w7dmVyc2lvbj0iNi4xLjEiOworICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCisgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0LAorICAgb3JnLmVjbGlwc2UuamdpdC5wZ20iLAorIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZnNjazt2ZXJzaW9uPSI2LjEuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5yZXZ3YWxrO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnJldndhbGs7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLAogICAgb3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmxmcy50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LAogICAgb3JnLmVjbGlwc2UuamdpdC5qdW5pdC5odHRwLApAQCAtODgsMzIgKzkyLDMyIEBACiAgICBvcmcuZWNsaXBzZS5qZ2l0LnBnbSwKICAgIG9yZy5lY2xpcHNlLmpnaXQucGdtLnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLmlvO3ZlcnNpb249IjYuMS4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5qdW5pdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQudGVzdCwKICAgIG9yZy5lY2xpcHNlLmpnaXQucGdtIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucGFjazt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2s7dmVyc2lvbj0iNi4xLjEiOwogICB4LWZyaWVuZHM6PSJvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LAogICAgb3JnLmVjbGlwc2UuamdpdC50ZXN0LAogICAgb3JnLmVjbGlwc2UuamdpdC5wZ20iLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5yZWZ0YWJsZTt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnJlZnRhYmxlO3ZlcnNpb249IjYuMS4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5odHRwLnRlc3QsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LAogICAgb3JnLmVjbGlwc2UuamdpdC50ZXN0LAogICAgb3JnLmVjbGlwc2UuamdpdC5wZ20iLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3VibW9kdWxlO3ZlcnNpb249IjYuMC4xIjt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LmNvbm5lY3Rpdml0eTt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdWJtb2R1bGU7dmVyc2lvbj0iNi4xLjEiO3gtaW50ZXJuYWw6PXRydWUsCisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuY29ubmVjdGl2aXR5O3ZlcnNpb249IjYuMS4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5odHRwO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5odHRwO3ZlcnNpb249IjYuMS4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnRyYW5zcG9ydC5wYXJzZXI7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnBhcnNlcjt2ZXJzaW9uPSI2LjEuMSI7CiAgIHgtZnJpZW5kczo9Im9yZy5lY2xpcHNlLmpnaXQuaHR0cC5zZXJ2ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRlc3QiLAotIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwudHJhbnNwb3J0LnNzaDt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC50cmFuc3BvcnQuc3NoO3ZlcnNpb249IjYuMS4xIjsKICAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLAogICAgb3JnLmVjbGlwc2UuamdpdC5zc2guanNjaCwKICAgIG9yZy5lY2xpcHNlLmpnaXQudGVzdCIsCi0gb3JnLmVjbGlwc2UuamdpdC5saWI7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQubGliO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTEsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLApAQCAtMTI3LDEwICsxMzEsMTEgQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQudXRpbCwKICAgIG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLnRpbWUiLAotIG9yZy5lY2xpcHNlLmpnaXQubGliLmludGVybmFsO3ZlcnNpb249IjYuMC4xIjsKLSAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0IiwKLSBvcmcuZWNsaXBzZS5qZ2l0LmxvZ2dpbmc7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2U7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQubGliLmludGVybmFsO3ZlcnNpb249IjYuMS4xIjsKKyAgeC1mcmllbmRzOj0ib3JnLmVjbGlwc2UuamdpdC50ZXN0LAorICAgb3JnLmVjbGlwc2UuamdpdC5wZ20iLAorIG9yZy5lY2xpcHNlLmpnaXQubG9nZ2luZzt2ZXJzaW9uPSI2LjEuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5tZXJnZTt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGssCkBAIC0xMzksNDAgKzE0NCw0MCBAQAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLAogICAgb3JnLmVjbGlwc2UuamdpdC5hcGksCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmF0dHJpYnV0ZXMiLAotIG9yZy5lY2xpcHNlLmpnaXQubmxzO3ZlcnNpb249IjYuMC4xIiwKLSBvcmcuZWNsaXBzZS5qZ2l0Lm5vdGVzO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0Lm5sczt2ZXJzaW9uPSI2LjEuMSIsCisgb3JnLmVjbGlwc2UuamdpdC5ub3Rlczt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lm1lcmdlIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnBhdGNoO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnBhdGNoO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5kaWZmIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldnBsb3Q7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQucmV2cGxvdDt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsayIsCi0gb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGs7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmRpZmYsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlciwKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuZmlsdGVyO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UuZmlsZTt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC5zdG9yYWdlLmZpbGU7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC5saWIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwiLAotIG9yZy5lY2xpcHNlLmpnaXQuc3RvcmFnZS5wYWNrO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjazt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LmxpYiIsCi0gb3JnLmVjbGlwc2UuamdpdC5zdWJtb2R1bGU7dmVyc2lvbj0iNi4wLjEiOworIG9yZy5lY2xpcHNlLmpnaXQuc3VibW9kdWxlO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC5kaWZmLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQ7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0iamF2YXguY3J5cHRvLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvLAogICAgb3JnLmVjbGlwc2UuamdpdC5saWIsCkBAIC0xODUsMjEgKzE5MCwyMSBAQAogICAgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQucmVzb2x2ZXIsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LnN0b3JhZ2UucGFjaywKICAgIG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5odHRwO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9ImphdmF4Lm5ldC5zc2wiLAotIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LnJlc29sdmVyO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5yZXNvbHZlcjt2ZXJzaW9uPSI2LjEuMSI7CiAgIHVzZXM6PSJvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydCwKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUsCiAgICBvcmcuZWNsaXBzZS5qZ2l0LmxpYiwKICAgIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcywKICAgIG9yZy5lY2xpcHNlLmpnaXQucmV2d2FsaywKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuZmlsdGVyLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsIiwKLSBvcmcuZWNsaXBzZS5qZ2l0LnRyZWV3YWxrLmZpbHRlcjt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5maWx0ZXI7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmVld2FsayIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsO3ZlcnNpb249IjYuMC4xIjsKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWw7dmVyc2lvbj0iNi4xLjEiOwogICB1c2VzOj0ib3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQsCiAgICBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzLAogICAgb3JnLmVjbGlwc2UuamdpdC5yZXZ3YWxrLApAQCAtMjEyLDEyICsyMTcsMTIgQEAKICAgIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGssCiAgICBqYXZheC5uZXQuc3NsLAogICAgb3JnLmVjbGlwc2UuamdpdC51dGlsLnRpbWUiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5pbzt2ZXJzaW9uPSI2LjAuMSI7Cisgb3JnLmVjbGlwc2UuamdpdC51dGlsLmlvO3ZlcnNpb249IjYuMS4xIjsKICAgdXNlczo9Im9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcywKICAgIG9yZy5lY2xpcHNlLmpnaXQubGliLAogICAgb3JnLmVjbGlwc2UuamdpdC50cmVld2FsayIsCi0gb3JnLmVjbGlwc2UuamdpdC51dGlsLnNoYTE7dmVyc2lvbj0iNi4wLjEiLAotIG9yZy5lY2xpcHNlLmpnaXQudXRpbC50aW1lO3ZlcnNpb249IjYuMC4xIgorIG9yZy5lY2xpcHNlLmpnaXQudXRpbC5zaGExO3ZlcnNpb249IjYuMS4xIiwKKyBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwudGltZTt2ZXJzaW9uPSI2LjEuMSIKIEJ1bmRsZS1SZXF1aXJlZEV4ZWN1dGlvbkVudmlyb25tZW50OiBKYXZhU0UtMTEKIEltcG9ydC1QYWNrYWdlOiBjb20uZ29vZ2xlY29kZS5qYXZhZXdhaDt2ZXJzaW9uPSJbMS4xLjYsMi4wLjApIiwKICBqYXZheC5jcnlwdG8sCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L01FVEEtSU5GL1NPVVJDRS1NQU5JRkVTVC5NRiBiL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCmluZGV4IDMwMmM0NTQuLjMzZTYxNTYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvTUVUQS1JTkYvU09VUkNFLU1BTklGRVNULk1GCkBAIC0zLDUgKzMsNSBAQAogQnVuZGxlLU5hbWU6IG9yZy5lY2xpcHNlLmpnaXQgLSBTb3VyY2VzCiBCdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qZ2l0LnNvdXJjZQogQnVuZGxlLVZlbmRvcjogRWNsaXBzZS5vcmcgLSBKR2l0Ci1CdW5kbGUtVmVyc2lvbjogNi4wLjEucXVhbGlmaWVyCi1FY2xpcHNlLVNvdXJjZUJ1bmRsZTogb3JnLmVjbGlwc2UuamdpdDt2ZXJzaW9uPSI2LjAuMS5xdWFsaWZpZXIiO3Jvb3RzPSIuIgorQnVuZGxlLVZlcnNpb246IDYuMS4xLnF1YWxpZmllcgorRWNsaXBzZS1Tb3VyY2VCdW5kbGU6IG9yZy5lY2xpcHNlLmpnaXQ7dmVyc2lvbj0iNi4xLjEucXVhbGlmaWVyIjtyb290cz0iLiIKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvcG9tLnhtbCBiL29yZy5lY2xpcHNlLmpnaXQvcG9tLnhtbAppbmRleCBlNzgyMjcyLi5mMGU5MmIzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3BvbS54bWwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9wb20ueG1sCkBAIC0yMCw3ICsyMCw3IEBACiAgIDxwYXJlbnQ+CiAgICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgICA8YXJ0aWZhY3RJZD5vcmcuZWNsaXBzZS5qZ2l0LXBhcmVudDwvYXJ0aWZhY3RJZD4KLSAgICA8dmVyc2lvbj42LjAuMS1TTkFQU0hPVDwvdmVyc2lvbj4KKyAgICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KICAgPC9wYXJlbnQ+CiAKICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdDwvYXJ0aWZhY3RJZD4KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvSkdpdFRleHQucHJvcGVydGllcyBiL29yZy5lY2xpcHNlLmpnaXQvcmVzb3VyY2VzL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvSkdpdFRleHQucHJvcGVydGllcwppbmRleCA1NjcwMWNjLi45MjZlM2ZmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3Jlc291cmNlcy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LnByb3BlcnRpZXMKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9yZXNvdXJjZXMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5wcm9wZXJ0aWVzCkBAIC0zNTYsNiArMzU2LDggQEAKIGluTWVtb3J5QnVmZmVyTGltaXRFeGNlZWRlZD1Jbi1tZW1vcnkgYnVmZmVyIGxpbWl0IGV4Y2VlZGVkCiBpbnB1dERpZG50TWF0Y2hMZW5ndGg9SW5wdXQgZGlkIG5vdCBtYXRjaCBzdXBwbGllZCBsZW5ndGguIHswfSBieXRlcyBhcmUgbWlzc2luZy4KIGlucHV0U3RyZWFtTXVzdFN1cHBvcnRNYXJrPUlucHV0U3RyZWFtIG11c3Qgc3VwcG9ydCBtYXJrKCkKK2ludGVnZXJWYWx1ZU5vdEluUmFuZ2U9SW50ZWdlciB2YWx1ZSB7MH0uezF9ID0gezJ9IG5vdCBpbiByYW5nZSB7M30uLns0fQoraW50ZWdlclZhbHVlTm90SW5SYW5nZVN1YlNlY3Rpb249SW50ZWdlciB2YWx1ZSB7MH0uezF9LnsyfSA9IHszfSBub3QgaW4gcmFuZ2UgezR9Li57NX0KIGludGVnZXJWYWx1ZU91dE9mUmFuZ2U9SW50ZWdlciB2YWx1ZSB7MH0uezF9IG91dCBvZiByYW5nZQogaW50ZXJuYWxSZXZpc2lvbkVycm9yPWludGVybmFsIHJldmlzaW9uIGVycm9yCiBpbnRlcm5hbFNlcnZlckVycm9yPWludGVybmFsIHNlcnZlciBlcnJvcgpAQCAtMzY3LDYgKzM2OSw3IEBACiBpbnZhbGlkQm9vbGVhblZhbHVlPUludmFsaWQgYm9vbGVhbiB2YWx1ZTogezB9LnsxfT17Mn0KIGludmFsaWRDaGFubmVsPUludmFsaWQgY2hhbm5lbCB7MH0KIGludmFsaWRDb21taXRQYXJlbnROdW1iZXI9SW52YWxpZCBjb21taXQgcGFyZW50IG51bWJlcgoraW52YWxpZENvcmVBYmJyZXY9SW52YWxpZCB2YWx1ZSB7MH0gb2Ygb3B0aW9uIGNvcmUuYWJicmV2CiBpbnZhbGlkRGVwdGg9SW52YWxpZCBkZXB0aDogezB9CiBpbnZhbGlkRW5jb2Rpbmc9SW52YWxpZCBlbmNvZGluZyBmcm9tIGdpdCBjb25maWcgaTE4bi5jb21taXRFbmNvZGluZzogezB9CiBpbnZhbGlkRW5jcnlwdGlvbj1JbnZhbGlkIGVuY3J5cHRpb24KQEAgLTU2OCw2ICs1NzEsMTEgQEAKIHB1c2hDZXJ0aWZpY2F0ZUludmFsaWRGaWVsZFZhbHVlPVB1c2ggY2VydGlmaWNhdGUgaGFzIG1pc3Npbmcgb3IgaW52YWxpZCB2YWx1ZSBmb3IgezB9OiB7MX0KIHB1c2hDZXJ0aWZpY2F0ZUludmFsaWRIZWFkZXI9UHVzaCBjZXJ0aWZpY2F0ZSBoYXMgaW52YWxpZCBoZWFkZXIgZm9ybWF0CiBwdXNoQ2VydGlmaWNhdGVJbnZhbGlkU2lnbmF0dXJlPVB1c2ggY2VydGlmaWNhdGUgaGFzIGludmFsaWQgc2lnbmF0dXJlIGZvcm1hdAorcHVzaERlZmF1bHROb3RoaW5nPU5vIHJlZnNwZWMgZ2l2ZW4gYW5kIHB1c2guZGVmYXVsdD1ub3RoaW5nOyBubyB1cHN0cmVhbSBicmFuY2ggY2FuIGJlIGRldGVybWluZWQKK3B1c2hEZWZhdWx0Tm9VcHN0cmVhbT1ObyB1cHN0cmVhbSBicmFuY2ggZm91bmQgZm9yIGxvY2FsIGJyYW5jaCAnJ3swfScnCitwdXNoRGVmYXVsdFNpbXBsZT1wdXNoLmRlZmF1bHQ9c2ltcGxlIHJlcXVpcmVzIGxvY2FsIGJyYW5jaCBuYW1lICcnezB9JycgdG8gYmUgZXF1YWwgdG8gdXBzdHJlYW0gdHJhY2tlZCBicmFuY2ggbmFtZSAnJ3sxfScnCitwdXNoRGVmYXVsdFRyaWFuZ3VsYXJVcHN0cmVhbT1wdXNoLmRlZmF1bHQ9dXBzdHJlYW0gY2Fubm90IGJlIHVzZWQgd2hlbiB0aGUgcHVzaCByZW1vdGUgJyd7MH0nJyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgZmV0Y2ggcmVtb3RlICcnezF9JycKK3B1c2hEZWZhdWx0VW5rbm93bj1Vbmtub3duIHB1c2guZGVmYXVsdD17MH07IGNhbm5vdCBwdXNoCiBwdXNoSXNOb3RTdXBwb3J0ZWRGb3JCdW5kbGVUcmFuc3BvcnQ9UHVzaCBpcyBub3Qgc3VwcG9ydGVkIGZvciBidW5kbGUgdHJhbnNwb3J0CiBwdXNoTm90UGVybWl0dGVkPXB1c2ggbm90IHBlcm1pdHRlZAogcHVzaE9wdGlvbnNOb3RTdXBwb3J0ZWQ9UHVzaCBvcHRpb25zIG5vdCBzdXBwb3J0ZWQ7IHJlY2VpdmVkIHswfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0NoZXJyeVBpY2tDb21tYW5kLmphdmEKaW5kZXggNzkyMmY5ZS4uZjg4MTc5YSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ2hlcnJ5UGlja0NvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9DaGVycnlQaWNrQ29tbWFuZC5qYXZhCkBAIC05LDYgKzksOCBAQAogICovCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuYXBpOwogCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5PQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEg7CisKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwogaW1wb3J0IGphdmEudXRpbC5MaW5rZWRMaXN0OwpAQCAtMTI0LDcgKzEyNiw3IEBAIHB1YmxpYyBDaGVycnlQaWNrUmVzdWx0IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBOb01lc3NhZ2VFeGNlcHRpb24sCiAJCQkJZmluYWwgUmV2Q29tbWl0IHNyY1BhcmVudCA9IGdldFBhcmVudENvbW1pdChzcmNDb21taXQsIHJldldhbGspOwogCiAJCQkJU3RyaW5nIG91ck5hbWUgPSBjYWxjdWxhdGVPdXJOYW1lKGhlYWRSZWYpOwotCQkJCVN0cmluZyBjaGVycnlQaWNrTmFtZSA9IHNyY0NvbW1pdC5nZXRJZCgpLmFiYnJldmlhdGUoNykubmFtZSgpCisJCQkJU3RyaW5nIGNoZXJyeVBpY2tOYW1lID0gc3JjQ29tbWl0LmdldElkKCkuYWJicmV2aWF0ZShPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpLm5hbWUoKQogCQkJCQkJKyAiICIgKyBzcmNDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCk7IC8vJE5PTi1OTFMtMSQKIAogCQkJCU1lcmdlciBtZXJnZXIgPSBzdHJhdGVneS5uZXdNZXJnZXIocmVwbyk7CkBAIC0xODMsNyArMTg1LDcgQEAgcHVibGljIENoZXJyeVBpY2tSZXN1bHQgY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIE5vTWVzc2FnZUV4Y2VwdGlvbiwKIAkJCQkJaWYgKHVubWVyZ2VkUGF0aHMgIT0gbnVsbCkgewogCQkJCQkJbWVzc2FnZSA9IG5ldyBNZXJnZU1lc3NhZ2VGb3JtYXR0ZXIoKQogCQkJCQkJCS5mb3JtYXRXaXRoQ29uZmxpY3RzKHNyY0NvbW1pdC5nZXRGdWxsTWVzc2FnZSgpLAotCQkJCQkJCQkJCXVubWVyZ2VkUGF0aHMpOworCQkJCQkJCQkJCXVubWVyZ2VkUGF0aHMsICcjJyk7CiAJCQkJCX0gZWxzZSB7CiAJCQkJCQltZXNzYWdlID0gc3JjQ29tbWl0LmdldEZ1bGxNZXNzYWdlKCk7CiAJCQkJCX0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0NvbW1pdENvbW1hbmQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0NvbW1pdENvbW1hbmQuamF2YQppbmRleCAzN2YxZDQ4Li43YTU5MWFhIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9Db21taXRDb21tYW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvQ29tbWl0Q29tbWFuZC5qYXZhCkBAIC0xOSw2ICsxOSw3IEBACiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk5vbk51bGw7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkFib3J0ZWRCeUhvb2tFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkNhbmNlbGVkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5Db25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uOwpAQCAtNDYsNiArNDcsOCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaG9va3MuUHJlQ29tbWl0SG9vazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbW1pdEJ1aWxkZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29tbWl0Q29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbW1pdENvbmZpZy5DbGVhbnVwTW9kZTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuRmlsZU1vZGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuR3BnQ29uZmlnOwpAQCAtMTMzLDYgKzEzNiwxMiBAQCBwdWJsaWMgY2xhc3MgQ29tbWl0Q29tbWFuZCBleHRlbmRzIEdpdENvbW1hbmQ8UmV2Q29tbWl0PiB7CiAKIAlwcml2YXRlIENyZWRlbnRpYWxzUHJvdmlkZXIgY3JlZGVudGlhbHNQcm92aWRlcjsKIAorCXByaXZhdGUgQE5vbk51bGwgQ2xlYW51cE1vZGUgY2xlYW51cE1vZGUgPSBDbGVhbnVwTW9kZS5WRVJCQVRJTTsKKworCXByaXZhdGUgYm9vbGVhbiBjbGVhbkRlZmF1bHRJc1N0cmlwID0gdHJ1ZTsKKworCXByaXZhdGUgQ2hhcmFjdGVyIGNvbW1lbnRDaGFyOworCiAJLyoqCiAJICogQ29uc3RydWN0b3IgZm9yIENvbW1pdENvbW1hbmQKIAkgKgpAQCAtMjAwLDcgKzIwOSw3IEBAIHB1YmxpYyBSZXZDb21taXQgY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIEFib3J0ZWRCeUhvb2tFeGNlcHRpb24sCiAJCQkJdGhyb3cgbmV3IFdyb25nUmVwb3NpdG9yeVN0YXRlRXhjZXB0aW9uKAogCQkJCQkJSkdpdFRleHQuZ2V0KCkuY29tbWl0QW1lbmRPbkluaXRpYWxOb3RQb3NzaWJsZSk7CiAKLQkJCWlmIChoZWFkSWQgIT0gbnVsbCkKKwkJCWlmIChoZWFkSWQgIT0gbnVsbCkgewogCQkJCWlmIChhbWVuZCkgewogCQkJCQlSZXZDb21taXQgcHJldmlvdXNDb21taXQgPSBydy5wYXJzZUNvbW1pdChoZWFkSWQpOwogCQkJCQlmb3IgKFJldkNvbW1pdCBwIDogcHJldmlvdXNDb21taXQuZ2V0UGFyZW50cygpKQpAQCAtMjEwLDcgKzIxOSw3IEBAIHB1YmxpYyBSZXZDb21taXQgY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIEFib3J0ZWRCeUhvb2tFeGNlcHRpb24sCiAJCQkJfSBlbHNlIHsKIAkJCQkJcGFyZW50cy5hZGQoMCwgaGVhZElkKTsKIAkJCQl9Ci0KKwkJCX0KIAkJCWlmICghbm9WZXJpZnkpIHsKIAkJCQltZXNzYWdlID0gSG9va3MKIAkJCQkJCS5jb21taXRNc2cocmVwbywKQEAgLTIxOSw2ICsyMjgsMTkgQEAgcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgQWJvcnRlZEJ5SG9va0V4Y2VwdGlvbiwKIAkJCQkJCS5zZXRDb21taXRNZXNzYWdlKG1lc3NhZ2UpLmNhbGwoKTsKIAkJCX0KIAorCQkJQ29tbWl0Q29uZmlnIGNvbmZpZyA9IG51bGw7CisJCQlpZiAoQ2xlYW51cE1vZGUuREVGQVVMVC5lcXVhbHMoY2xlYW51cE1vZGUpKSB7CisJCQkJY29uZmlnID0gcmVwby5nZXRDb25maWcoKS5nZXQoQ29tbWl0Q29uZmlnLktFWSk7CisJCQkJY2xlYW51cE1vZGUgPSBjb25maWcucmVzb2x2ZShjbGVhbnVwTW9kZSwgY2xlYW5EZWZhdWx0SXNTdHJpcCk7CisJCQl9CisJCQljaGFyIGNvbW1lbnRzOworCQkJaWYgKGNvbW1lbnRDaGFyID09IG51bGwpIHsKKwkJCQljb21tZW50cyA9ICcjJzsgLy8gVE9ETyB1c2UgZ2l0IGNvbmZpZyBjb3JlLmNvbW1lbnRDaGFyCisJCQl9IGVsc2UgeworCQkJCWNvbW1lbnRzID0gY29tbWVudENoYXIuY2hhclZhbHVlKCk7CisJCQl9CisJCQltZXNzYWdlID0gQ29tbWl0Q29uZmlnLmNsZWFuVGV4dChtZXNzYWdlLCBjbGVhbnVwTW9kZSwgY29tbWVudHMpOworCiAJCQlSZXZDb21taXQgcmV2Q29tbWl0OwogCQkJRGlyQ2FjaGUgaW5kZXggPSByZXBvLmxvY2tEaXJDYWNoZSgpOwogCQkJdHJ5IChPYmplY3RJbnNlcnRlciBvZGkgPSByZXBvLm5ld09iamVjdEluc2VydGVyKCkpIHsKQEAgLTY1OCw2ICs2ODAsNTcgQEAgcHVibGljIENvbW1pdENvbW1hbmQgc2V0TWVzc2FnZShTdHJpbmcgbWVzc2FnZSkgewogCX0KIAogCS8qKgorCSAqIFNldHMgdGhlIHtAbGluayBDbGVhbnVwTW9kZX0gdG8gYXBwbHkgdG8gdGhlIGNvbW1pdCBtZXNzYWdlLiBJZiBub3QKKwkgKiBjYWxsZWQsIHtAbGluayBDb21taXRDb21tYW5kfSBhcHBsaWVzIHtAbGluayBDbGVhbnVwTW9kZSNWRVJCQVRJTX0uCisJICoKKwkgKiBAcGFyYW0gbW9kZQorCSAqICAgICAgICAgICAge0BsaW5rIENsZWFudXBNb2RlfSB0byBzZXQKKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgQ29tbWl0Q29tbWFuZCBzZXRDbGVhbnVwTW9kZShATm9uTnVsbCBDbGVhbnVwTW9kZSBtb2RlKSB7CisJCWNoZWNrQ2FsbGFibGUoKTsKKwkJdGhpcy5jbGVhbnVwTW9kZSA9IG1vZGU7CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGRlZmF1bHQgY2xlYW4gbW9kZSBpZiB7QGxpbmsgI3NldENsZWFudXBNb2RlKENsZWFudXBNb2RlKQorCSAqIHNldENsZWFudXBNb2RlKENsZWFudXBNb2RlLkRFRkFVTFQpfSBpcyBzZXQgYW5kIGdpdCBjb25maWcKKwkgKiB7QGNvZGUgY29tbWl0LmNsZWFudXAgPSBkZWZhdWx0fSBvciBpcyBub3Qgc2V0LgorCSAqCisJICogQHBhcmFtIHN0cmlwCisJICogICAgICAgICAgICBpZiB7QGNvZGUgdHJ1ZX0sIGRlZmF1bHQgdG8ge0BsaW5rIENsZWFudXBNb2RlI1NUUklQfTsKKwkgKiAgICAgICAgICAgIG90aGVyd2lzZSBkZWZhdWx0IHRvIHtAbGluayBDbGVhbnVwTW9kZSNXSElURVNQQUNFfQorCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBDb21taXRDb21tYW5kIHNldERlZmF1bHRDbGVhbihib29sZWFuIHN0cmlwKSB7CisJCWNoZWNrQ2FsbGFibGUoKTsKKwkJdGhpcy5jbGVhbkRlZmF1bHRJc1N0cmlwID0gc3RyaXA7CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgorCSAqIFNldHMgdGhlIGNvbW1lbnQgY2hhcmFjdGVyIHRvIGFwcGx5IHdoZW4gY2xlYW5pbmcgYSBjb21taXQgbWVzc2FnZS4gSWYKKwkgKiB7QGNvZGUgbnVsbH0gKHRoZSBkZWZhdWx0KSBhbmQgdGhlIHtAbGluayAjc2V0Q2xlYW51cE1vZGUoQ2xlYW51cE1vZGUpCisJICogY2xlYW4tdXAgbW9kZX0gaXMge0BsaW5rIENsZWFudXBNb2RlI1NUUklQfSBvcgorCSAqIHtAbGluayBDbGVhbnVwTW9kZSNTQ0lTU09SU30sIHRoZSB2YWx1ZSBvZiBnaXQgY29uZmlnCisJICoge0Bjb2RlIGNvcmUuY29tbWVudENoYXJ9IHdpbGwgYmUgdXNlZC4KKwkgKgorCSAqIEBwYXJhbSBjb21tZW50Q2hhcgorCSAqICAgICAgICAgICAgdGhlIGNvbW1lbnQgY2hhcmFjdGVyLCBvciB7QGNvZGUgbnVsbH0gdG8gdXNlIHRoZSB2YWx1ZSBmcm9tCisJICogICAgICAgICAgICB0aGUgZ2l0IGNvbmZpZworCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBDb21taXRDb21tYW5kIHNldENvbW1lbnRDaGFyYWN0ZXIoQ2hhcmFjdGVyIGNvbW1lbnRDaGFyKSB7CisJCWNoZWNrQ2FsbGFibGUoKTsKKwkJdGhpcy5jb21tZW50Q2hhciA9IGNvbW1lbnRDaGFyOworCQlyZXR1cm4gdGhpczsKKwl9CisKKwkvKioKIAkgKiBTZXQgd2hldGhlciB0byBhbGxvdyB0byBjcmVhdGUgYW4gZW1wdHkgY29tbWl0CiAJICoKIAkgKiBAcGFyYW0gYWxsb3dFbXB0eQpAQCAtODA2LDcgKzg3OSw3IEBAIHB1YmxpYyBDb21taXRDb21tYW5kIHNldEFsbChib29sZWFuIGFsbCkgewogCSAqIGNvbW1hbmQgbGluZS4KIAkgKgogCSAqIEBwYXJhbSBhbWVuZAotCSAqICAgICAgICAgICAgd2hldGhlciB0byBhbW1lbmQgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gKKwkgKiAgICAgICAgICAgIHdoZXRoZXIgdG8gYW1lbmQgdGhlIHRpcCBvZiB0aGUgY3VycmVudCBicmFuY2gKIAkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQogCSAqLwogCXB1YmxpYyBDb21taXRDb21tYW5kIHNldEFtZW5kKGJvb2xlYW4gYW1lbmQpIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL0Rlc2NyaWJlQ29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvRGVzY3JpYmVDb21tYW5kLmphdmEKaW5kZXggMWU1MjRmYS4uODA1YTg4NiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvRGVzY3JpYmVDb21tYW5kLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvRGVzY3JpYmVDb21tYW5kLmphdmEKQEAgLTExLDYgKzExLDcgQEAKIAogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuUl9SRUZTOwogaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuUl9UQUdTOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UeXBlZENvbmZpZ0dldHRlci5VTlNFVF9JTlQ7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudGV4dC5NZXNzYWdlRm9ybWF0OwpAQCAtMzMsNiArMzQsNyBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLk1pc3NpbmdPYmplY3RFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5mbm1hdGNoLkZpbGVOYW1lTWF0Y2hlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFiYnJldkNvbmZpZzsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwpAQCAtODksNiArOTEsMTEgQEAgcHVibGljIGNsYXNzIERlc2NyaWJlQ29tbWFuZCBleHRlbmRzIEdpdENvbW1hbmQ8U3RyaW5nPiB7CiAJcHJpdmF0ZSBib29sZWFuIGFsd2F5czsKIAogCS8qKgorCSAqIFRoZSBwcmVmaXggbGVuZ3RoIHRvIHVzZSB3aGVuIGFiYnJldmlhdGluZyBhIGNvbW1pdCBoYXNoLgorCSAqLworCXByaXZhdGUgaW50IGFiYnJldiA9IFVOU0VUX0lOVDsKKworCS8qKgogCSAqIENvbnN0cnVjdG9yIGZvciBEZXNjcmliZUNvbW1hbmQuCiAJICoKIAkgKiBAcGFyYW0gcmVwbwpAQCAtMjA1LDEyICsyMTIsMzMgQEAgcHVibGljIERlc2NyaWJlQ29tbWFuZCBzZXRBbHdheXMoYm9vbGVhbiBhbHdheXMpIHsKIAkJcmV0dXJuIHRoaXM7CiAJfQogCisJLyoqCisJICogU2V0cyB0aGUgcHJlZml4IGxlbmd0aCB0byB1c2Ugd2hlbiBhYmJyZXZpYXRpbmcgYW4gb2JqZWN0IFNIQS0xLgorCSAqCisJICogQHBhcmFtIGFiYnJldgorCSAqICAgICAgICAgICAgbWluaW11bSBsZW5ndGggb2YgdGhlIGFiYnJldmlhdGVkIHN0cmluZy4gTXVzdCBiZSBpbiB0aGUgcmFuZ2UKKwkgKiAgICAgICAgICAgIFt7QHZhbHVlIEFiYnJldkNvbmZpZyNNSU5fQUJCUkVWfSwKKwkgKiAgICAgICAgICAgIHtAdmFsdWUgQ29uc3RhbnRzI09CSkVDVF9JRF9TVFJJTkdfTEVOR1RIfV0uCisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIERlc2NyaWJlQ29tbWFuZCBzZXRBYmJyZXYoaW50IGFiYnJldikgeworCQlpZiAoYWJicmV2ID09IDApIHsKKwkJCXRoaXMuYWJicmV2ID0gMDsKKwkJfSBlbHNlIHsKKwkJCXRoaXMuYWJicmV2ID0gQWJicmV2Q29uZmlnLmNhcEFiYnJldihhYmJyZXYpOworCQl9CisJCXJldHVybiB0aGlzOworCX0KKwogCXByaXZhdGUgU3RyaW5nIGxvbmdEZXNjcmlwdGlvbihSZWYgdGFnLCBpbnQgZGVwdGgsIE9iamVjdElkIHRpcCkKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiBTdHJpbmcuZm9ybWF0KAotCQkJCSIlcy0lZC1nJXMiLCBmb3JtYXRSZWZOYW1lKHRhZy5nZXROYW1lKCkpLCAvLyROT04tTkxTLTEkCi0JCQkJSW50ZWdlci52YWx1ZU9mKGRlcHRoKSwgdy5nZXRPYmplY3RSZWFkZXIoKS5hYmJyZXZpYXRlKHRpcCkKLQkJCQkJCS5uYW1lKCkpOworCQlpZiAoYWJicmV2ID09IDApIHsKKwkJCXJldHVybiBmb3JtYXRSZWZOYW1lKHRhZy5nZXROYW1lKCkpOworCQl9CisJCXJldHVybiBTdHJpbmcuZm9ybWF0KCIlcy0lZC1nJXMiLCBmb3JtYXRSZWZOYW1lKHRhZy5nZXROYW1lKCkpLCAvLyROT04tTkxTLTEkCisJCQkJSW50ZWdlci52YWx1ZU9mKGRlcHRoKSwKKwkJCQl3LmdldE9iamVjdFJlYWRlcigpLmFiYnJldmlhdGUodGlwLCBhYmJyZXYpLm5hbWUoKSk7CiAJfQogCiAJLyoqCkBAIC0zMDIsNiArMzMwLDkgQEAgcHVibGljIFN0cmluZyBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiB7CiAJCQlpZiAodGFyZ2V0ID09IG51bGwpIHsKIAkJCQlzZXRUYXJnZXQoQ29uc3RhbnRzLkhFQUQpOwogCQkJfQorCQkJaWYgKGFiYnJldiA9PSBVTlNFVF9JTlQpIHsKKwkJCQlhYmJyZXYgPSBBYmJyZXZDb25maWcucGFyc2VGcm9tQ29uZmlnKHJlcG8pLmdldCgpOworCQkJfQogCiAJCQlDb2xsZWN0aW9uPFJlZj4gdGFnTGlzdCA9IHJlcG8uZ2V0UmVmRGF0YWJhc2UoKQogCQkJCQkuZ2V0UmVmc0J5UHJlZml4KHVzZUFsbCA/IFJfUkVGUyA6IFJfVEFHUyk7CkBAIC00MTMsNyArNDQ0LDEyIEBAIFN0cmluZyBkZXNjcmliZShPYmplY3RJZCB0aXApIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAKIAkJCS8vIGlmIGFsbCB0aGUgbm9kZXMgYXJlIGRvbWluYXRlZCBieSBhbGwgdGhlIHRhZ3MsIHRoZSB3YWxrIHN0b3BzCiAJCQlpZiAoY2FuZGlkYXRlcy5pc0VtcHR5KCkpIHsKLQkJCQlyZXR1cm4gYWx3YXlzID8gdy5nZXRPYmplY3RSZWFkZXIoKS5hYmJyZXZpYXRlKHRhcmdldCkubmFtZSgpIDogbnVsbDsKKwkJCQlyZXR1cm4gYWx3YXlzCisJCQkJCQk/IHcuZ2V0T2JqZWN0UmVhZGVyKCkKKwkJCQkJCQkJLmFiYnJldmlhdGUodGFyZ2V0LAorCQkJCQkJCQkJCUFiYnJldkNvbmZpZy5jYXBBYmJyZXYoYWJicmV2KSkKKwkJCQkJCQkJLm5hbWUoKQorCQkJCQkJOiBudWxsOwogCQkJfQogCiAJCQlDYW5kaWRhdGUgYmVzdCA9IENvbGxlY3Rpb25zLm1pbihjYW5kaWRhdGVzLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvTWVyZ2VDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YQppbmRleCBlZjU2ZDgwLi5jZTA2OGI2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9NZXJnZUNvbW1hbmQuamF2YQpAQCAtNDA1LDcgKzQwNSw3IEBAIHB1YmxpYyBNZXJnZVJlc3VsdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgTm9IZWFkRXhjZXB0aW9uLAogCQkJCQkJCWZhaWxpbmdQYXRocywgbnVsbCk7CiAJCQkJfQogCQkJCVN0cmluZyBtZXJnZU1lc3NhZ2VXaXRoQ29uZmxpY3RzID0gbmV3IE1lcmdlTWVzc2FnZUZvcm1hdHRlcigpCi0JCQkJCQkuZm9ybWF0V2l0aENvbmZsaWN0cyhtZXJnZU1lc3NhZ2UsIHVubWVyZ2VkUGF0aHMpOworCQkJCQkJLmZvcm1hdFdpdGhDb25mbGljdHMobWVyZ2VNZXNzYWdlLCB1bm1lcmdlZFBhdGhzLCAnIycpOwogCQkJCXJlcG8ud3JpdGVNZXJnZUNvbW1pdE1zZyhtZXJnZU1lc3NhZ2VXaXRoQ29uZmxpY3RzKTsKIAkJCQlyZXR1cm4gbmV3IE1lcmdlUmVzdWx0KG51bGwsIG1lcmdlci5nZXRCYXNlQ29tbWl0SWQoKSwKIAkJCQkJCW5ldyBPYmplY3RJZFtdIHsgaGVhZENvbW1pdC5nZXRJZCgpLApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVzaENvbW1hbmQuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1B1c2hDb21tYW5kLmphdmEKaW5kZXggYWE1YTYzNC4uMDgzNTNkZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUHVzaENvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9QdXNoQ29tbWFuZC5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCwgQ2hyaXMgQW5pc3pjenlrIDxjYW5pc3pjenlrQGdtYWlsLmNvbT4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDEwLCAyMDIyIENocmlzIEFuaXN6Y3p5ayA8Y2FuaXN6Y3p5a0BnbWFpbC5jb20+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTIxLDcgKzIxLDkgQEAKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkRldGFjaGVkSGVhZEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuR2l0QVBJRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5JbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuSW52YWxpZFJlbW90ZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuSkdpdEludGVybmFsRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKQEAgLTI5LDExICszMSwxNiBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlRvb0xhcmdlUGFja0V4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5UcmFuc3BvcnRFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5CcmFuY2hDb25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuTnVsbFByb2dyZXNzTW9uaXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Qcm9ncmVzc01vbml0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUHVzaENvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydC5QdXNoQ29uZmlnLlB1c2hEZWZhdWx0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlB1c2hSZXN1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC50cmFuc3BvcnQuUmVmTGVhc2VTcGVjOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlZlNwZWM7CkBAIC01Miw3ICs1OSw3IEBACiBwdWJsaWMgY2xhc3MgUHVzaENvbW1hbmQgZXh0ZW5kcwogCQlUcmFuc3BvcnRDb21tYW5kPFB1c2hDb21tYW5kLCBJdGVyYWJsZTxQdXNoUmVzdWx0Pj4gewogCi0JcHJpdmF0ZSBTdHJpbmcgcmVtb3RlID0gQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUU7CisJcHJpdmF0ZSBTdHJpbmcgcmVtb3RlOwogCiAJcHJpdmF0ZSBmaW5hbCBMaXN0PFJlZlNwZWM+IHJlZlNwZWNzOwogCkBAIC03MSw2ICs3OCwxMCBAQCBwdWJsaWMgY2xhc3MgUHVzaENvbW1hbmQgZXh0ZW5kcwogCiAJcHJpdmF0ZSBMaXN0PFN0cmluZz4gcHVzaE9wdGlvbnM7CiAKKwkvLyBMZWdhY3kgYmVoYXZpb3IgYXMgZGVmYXVsdC4gVXNlIHNldFB1c2hEZWZhdWx0KG51bGwpIHRvIGRldGVybWluZSB0aGUKKwkvLyB2YWx1ZSBmcm9tIHRoZSBnaXQgY29uZmlnLgorCXByaXZhdGUgUHVzaERlZmF1bHQgcHVzaERlZmF1bHQgPSBQdXNoRGVmYXVsdC5DVVJSRU5UOworCiAJLyoqCiAJICogPHA+CiAJICogQ29uc3RydWN0b3IgZm9yIFB1c2hDb21tYW5kLgpAQCAtOTgsMTkgKzEwOSwyMCBAQCBwdWJsaWMgSXRlcmFibGU8UHVzaFJlc3VsdD4gY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sCiAJCQlJbnZhbGlkUmVtb3RlRXhjZXB0aW9uLAogCQkJb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbiB7CiAJCWNoZWNrQ2FsbGFibGUoKTsKKwkJc2V0Q2FsbGFibGUoZmFsc2UpOwogCiAJCUFycmF5TGlzdDxQdXNoUmVzdWx0PiBwdXNoUmVzdWx0cyA9IG5ldyBBcnJheUxpc3Q8PigzKTsKIAogCQl0cnkgeworCQkJQ29uZmlnIGNvbmZpZyA9IHJlcG8uZ2V0Q29uZmlnKCk7CisJCQlyZW1vdGUgPSBkZXRlcm1pbmVSZW1vdGUoY29uZmlnLCByZW1vdGUpOwogCQkJaWYgKHJlZlNwZWNzLmlzRW1wdHkoKSkgewotCQkJCVJlbW90ZUNvbmZpZyBjb25maWcgPSBuZXcgUmVtb3RlQ29uZmlnKHJlcG8uZ2V0Q29uZmlnKCksCisJCQkJUmVtb3RlQ29uZmlnIHJjID0gbmV3IFJlbW90ZUNvbmZpZyhjb25maWcsCiAJCQkJCQlnZXRSZW1vdGUoKSk7Ci0JCQkJcmVmU3BlY3MuYWRkQWxsKGNvbmZpZy5nZXRQdXNoUmVmU3BlY3MoKSk7Ci0JCQl9Ci0JCQlpZiAocmVmU3BlY3MuaXNFbXB0eSgpKSB7Ci0JCQkJUmVmIGhlYWQgPSByZXBvLmV4YWN0UmVmKENvbnN0YW50cy5IRUFEKTsKLQkJCQlpZiAoaGVhZCAhPSBudWxsICYmIGhlYWQuaXNTeW1ib2xpYygpKQotCQkJCQlyZWZTcGVjcy5hZGQobmV3IFJlZlNwZWMoaGVhZC5nZXRMZWFmKCkuZ2V0TmFtZSgpKSk7CisJCQkJcmVmU3BlY3MuYWRkQWxsKHJjLmdldFB1c2hSZWZTcGVjcygpKTsKKwkJCQlpZiAocmVmU3BlY3MuaXNFbXB0eSgpKSB7CisJCQkJCWRldGVybWluZURlZmF1bHRSZWZTcGVjcyhjb25maWcpOworCQkJCX0KIAkJCX0KIAogCQkJaWYgKGZvcmNlKSB7CkBAIC0xMTgsOCArMTMwLDggQEAgcHVibGljIEl0ZXJhYmxlPFB1c2hSZXN1bHQ+IGNhbGwoKSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLAogCQkJCQlyZWZTcGVjcy5zZXQoaSwgcmVmU3BlY3MuZ2V0KGkpLnNldEZvcmNlVXBkYXRlKHRydWUpKTsKIAkJCX0KIAotCQkJZmluYWwgTGlzdDxUcmFuc3BvcnQ+IHRyYW5zcG9ydHM7Ci0JCQl0cmFuc3BvcnRzID0gVHJhbnNwb3J0Lm9wZW5BbGwocmVwbywgcmVtb3RlLCBUcmFuc3BvcnQuT3BlcmF0aW9uLlBVU0gpOworCQkJTGlzdDxUcmFuc3BvcnQ+IHRyYW5zcG9ydHMgPSBUcmFuc3BvcnQub3BlbkFsbChyZXBvLCByZW1vdGUsCisJCQkJCVRyYW5zcG9ydC5PcGVyYXRpb24uUFVTSCk7CiAJCQlmb3IgKEBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpIC8vIEV4cGxpY2l0bHkgY2xvc2VkIGluIGZpbmFsbHkKIAkJCQkJZmluYWwgVHJhbnNwb3J0IHRyYW5zcG9ydCA6IHRyYW5zcG9ydHMpIHsKIAkJCQl0cmFuc3BvcnQuc2V0UHVzaFRoaW4odGhpbik7CkBAIC0xNzEsNiArMTgzLDEwMiBAQCBwdWJsaWMgSXRlcmFibGU8UHVzaFJlc3VsdD4gY2FsbCgpIHRocm93cyBHaXRBUElFeGNlcHRpb24sCiAJCXJldHVybiBwdXNoUmVzdWx0czsKIAl9CiAKKwlwcml2YXRlIFN0cmluZyBkZXRlcm1pbmVSZW1vdGUoQ29uZmlnIGNvbmZpZywgU3RyaW5nIHJlbW90ZU5hbWUpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAocmVtb3RlTmFtZSAhPSBudWxsKSB7CisJCQlyZXR1cm4gcmVtb3RlTmFtZTsKKwkJfQorCQlSZWYgaGVhZCA9IHJlcG8uZXhhY3RSZWYoQ29uc3RhbnRzLkhFQUQpOworCQlTdHJpbmcgZWZmZWN0aXZlUmVtb3RlID0gbnVsbDsKKwkJQnJhbmNoQ29uZmlnIGJyYW5jaENmZyA9IG51bGw7CisJCWlmIChoZWFkICE9IG51bGwgJiYgaGVhZC5pc1N5bWJvbGljKCkpIHsKKwkJCVN0cmluZyBjdXJyZW50QnJhbmNoID0gaGVhZC5nZXRMZWFmKCkuZ2V0TmFtZSgpOworCQkJYnJhbmNoQ2ZnID0gbmV3IEJyYW5jaENvbmZpZyhjb25maWcsCisJCQkJCVJlcG9zaXRvcnkuc2hvcnRlblJlZk5hbWUoY3VycmVudEJyYW5jaCkpOworCQkJZWZmZWN0aXZlUmVtb3RlID0gYnJhbmNoQ2ZnLmdldFB1c2hSZW1vdGUoKTsKKwkJfQorCQlpZiAoZWZmZWN0aXZlUmVtb3RlID09IG51bGwpIHsKKwkJCWVmZmVjdGl2ZVJlbW90ZSA9IGNvbmZpZy5nZXRTdHJpbmcoCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfUkVNT1RFX1NFQ1RJT04sIG51bGwsCisJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1BVU0hfREVGQVVMVCk7CisJCQlpZiAoZWZmZWN0aXZlUmVtb3RlID09IG51bGwgJiYgYnJhbmNoQ2ZnICE9IG51bGwpIHsKKwkJCQllZmZlY3RpdmVSZW1vdGUgPSBicmFuY2hDZmcuZ2V0UmVtb3RlKCk7CisJCQl9CisJCX0KKwkJaWYgKGVmZmVjdGl2ZVJlbW90ZSA9PSBudWxsKSB7CisJCQllZmZlY3RpdmVSZW1vdGUgPSBDb25zdGFudHMuREVGQVVMVF9SRU1PVEVfTkFNRTsKKwkJfQorCQlyZXR1cm4gZWZmZWN0aXZlUmVtb3RlOworCX0KKworCXByaXZhdGUgU3RyaW5nIGdldEN1cnJlbnRCcmFuY2goKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uLCBEZXRhY2hlZEhlYWRFeGNlcHRpb24geworCQlSZWYgaGVhZCA9IHJlcG8uZXhhY3RSZWYoQ29uc3RhbnRzLkhFQUQpOworCQlpZiAoaGVhZCAhPSBudWxsICYmIGhlYWQuaXNTeW1ib2xpYygpKSB7CisJCQlyZXR1cm4gaGVhZC5nZXRMZWFmKCkuZ2V0TmFtZSgpOworCQl9CisJCXRocm93IG5ldyBEZXRhY2hlZEhlYWRFeGNlcHRpb24oKTsKKwl9CisKKwlwcml2YXRlIHZvaWQgZGV0ZXJtaW5lRGVmYXVsdFJlZlNwZWNzKENvbmZpZyBjb25maWcpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvbiB7CisJCWlmIChwdXNoRGVmYXVsdCA9PSBudWxsKSB7CisJCQlwdXNoRGVmYXVsdCA9IGNvbmZpZy5nZXQoUHVzaENvbmZpZzo6bmV3KS5nZXRQdXNoRGVmYXVsdCgpOworCQl9CisJCXN3aXRjaCAocHVzaERlZmF1bHQpIHsKKwkJY2FzZSBDVVJSRU5UOgorCQkJcmVmU3BlY3MuYWRkKG5ldyBSZWZTcGVjKGdldEN1cnJlbnRCcmFuY2goKSkpOworCQkJYnJlYWs7CisJCWNhc2UgTUFUQ0hJTkc6CisJCQlyZWZTcGVjcy5hZGQobmV3IFJlZlNwZWMoIjoiKSk7IC8vJE5PTi1OTFMtMSQKKwkJCWJyZWFrOworCQljYXNlIE5PVEhJTkc6CisJCQl0aHJvdyBuZXcgSW52YWxpZFJlZk5hbWVFeGNlcHRpb24oCisJCQkJCUpHaXRUZXh0LmdldCgpLnB1c2hEZWZhdWx0Tm90aGluZyk7CisJCWNhc2UgU0lNUExFOgorCQljYXNlIFVQU1RSRUFNOgorCQkJU3RyaW5nIGN1cnJlbnRCcmFuY2ggPSBnZXRDdXJyZW50QnJhbmNoKCk7CisJCQlCcmFuY2hDb25maWcgYnJhbmNoQ2ZnID0gbmV3IEJyYW5jaENvbmZpZyhjb25maWcsCisJCQkJCVJlcG9zaXRvcnkuc2hvcnRlblJlZk5hbWUoY3VycmVudEJyYW5jaCkpOworCQkJU3RyaW5nIGZldGNoUmVtb3RlID0gYnJhbmNoQ2ZnLmdldFJlbW90ZSgpOworCQkJaWYgKGZldGNoUmVtb3RlID09IG51bGwpIHsKKwkJCQlmZXRjaFJlbW90ZSA9IENvbnN0YW50cy5ERUZBVUxUX1JFTU9URV9OQU1FOworCQkJfQorCQkJYm9vbGVhbiBpc1RyaWFuZ3VsYXIgPSAhZmV0Y2hSZW1vdGUuZXF1YWxzKHJlbW90ZSk7CisJCQlpZiAoaXNUcmlhbmd1bGFyKSB7CisJCQkJaWYgKFB1c2hEZWZhdWx0LlVQU1RSRUFNLmVxdWFscyhwdXNoRGVmYXVsdCkpIHsKKwkJCQkJdGhyb3cgbmV3IEludmFsaWRSZWZOYW1lRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJCUpHaXRUZXh0LmdldCgpLnB1c2hEZWZhdWx0VHJpYW5ndWxhclVwc3RyZWFtLAorCQkJCQkJCXJlbW90ZSwgZmV0Y2hSZW1vdGUpKTsKKwkJCQl9CisJCQkJLy8gU3RyYW5nZSwgYnV0IGNvbnNpc3RlbnQgd2l0aCBDIGdpdDogInNpbXBsZSIgZG9lc24ndCBldmVuCisJCQkJLy8gY2hlY2sgd2hldGhlciB0aGVyZSBpcyBhIGNvbmZpZ3VyZWQgdXBzdHJlYW0sIGFuZCBpZiBzbywgdGhhdAorCQkJCS8vIGl0IGlzIGVxdWFsIHRvIHRoZSBsb2NhbCBicmFuY2ggbmFtZS4gSXQganVzdCBiZWNvbWVzCisJCQkJLy8gImN1cnJlbnQiLgorCQkJCXJlZlNwZWNzLmFkZChuZXcgUmVmU3BlYyhjdXJyZW50QnJhbmNoKSk7CisJCQl9IGVsc2UgeworCQkJCVN0cmluZyB0cmFja2VkQnJhbmNoID0gYnJhbmNoQ2ZnLmdldE1lcmdlKCk7CisJCQkJaWYgKGJyYW5jaENmZy5pc1JlbW90ZUxvY2FsKCkgfHwgdHJhY2tlZEJyYW5jaCA9PSBudWxsCisJCQkJCQl8fCAhdHJhY2tlZEJyYW5jaC5zdGFydHNXaXRoKENvbnN0YW50cy5SX0hFQURTKSkgeworCQkJCQl0aHJvdyBuZXcgSW52YWxpZFJlZk5hbWVFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJSkdpdFRleHQuZ2V0KCkucHVzaERlZmF1bHROb1Vwc3RyZWFtLAorCQkJCQkJCWN1cnJlbnRCcmFuY2gpKTsKKwkJCQl9CisJCQkJaWYgKFB1c2hEZWZhdWx0LlNJTVBMRS5lcXVhbHMocHVzaERlZmF1bHQpCisJCQkJCQkmJiAhdHJhY2tlZEJyYW5jaC5lcXVhbHMoY3VycmVudEJyYW5jaCkpIHsKKwkJCQkJdGhyb3cgbmV3IEludmFsaWRSZWZOYW1lRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQkJCUpHaXRUZXh0LmdldCgpLnB1c2hEZWZhdWx0U2ltcGxlLCBjdXJyZW50QnJhbmNoLAorCQkJCQkJCXRyYWNrZWRCcmFuY2gpKTsKKwkJCQl9CisJCQkJcmVmU3BlY3MuYWRkKG5ldyBSZWZTcGVjKGN1cnJlbnRCcmFuY2ggKyAnOicgKyB0cmFja2VkQnJhbmNoKSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXRocm93IG5ldyBJbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0CisJCQkJCS5mb3JtYXQoSkdpdFRleHQuZ2V0KCkucHVzaERlZmF1bHRVbmtub3duLCBwdXNoRGVmYXVsdCkpOworCQl9CisJfQorCiAJLyoqCiAJICogVGhlIHJlbW90ZSAodXJpIG9yIG5hbWUpIHVzZWQgZm9yIHRoZSBwdXNoIG9wZXJhdGlvbi4gSWYgbm8gcmVtb3RlIGlzCiAJICogc2V0LCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiA8Y29kZT5Db25zdGFudHMuREVGQVVMVF9SRU1PVEVfTkFNRTwvY29kZT4gd2lsbApAQCAtMzM2LDkgKzQ0NCwzNyBAQCBwdWJsaWMgUHVzaENvbW1hbmQgc2V0UmVmU3BlY3MoTGlzdDxSZWZTcGVjPiBzcGVjcykgewogCX0KIAogCS8qKgorCSAqIFJldHJpZXZlcyB0aGUge0BsaW5rIFB1c2hEZWZhdWx0fSBjdXJyZW50bHkgc2V0LgorCSAqCisJICogQHJldHVybiB0aGUge0BsaW5rIFB1c2hEZWZhdWx0fSwgb3Ige0Bjb2RlIG51bGx9IGlmIG5vdCBzZXQKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIFB1c2hEZWZhdWx0IGdldFB1c2hEZWZhdWx0KCkgeworCQlyZXR1cm4gcHVzaERlZmF1bHQ7CisJfQorCisJLyoqCisJICogU2V0cyBhbiBleHBsaWNpdCB7QGxpbmsgUHVzaERlZmF1bHR9LiBUaGUgZGVmYXVsdCB1c2VkIGlmIHRoaXMgaXMgbm90CisJICogY2FsbGVkIGlzIHtAbGluayBQdXNoRGVmYXVsdCNDVVJSRU5UfSBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zIHdpdGgKKwkgKiBlYXJsaWVyIEpHaXQgdmVyc2lvbnMuCisJICoKKwkgKiBAcGFyYW0gcHVzaERlZmF1bHQKKwkgKiAgICAgICAgICAgIHtAbGluayBQdXNoRGVmYXVsdH0gdG8gc2V0OyBpZiB7QGNvZGUgbnVsbH0gdGhlIHZhbHVlIGRlZmluZWQKKwkgKiAgICAgICAgICAgIGluIHRoZSBnaXQgY29uZmlnIHdpbGwgYmUgdXNlZC4KKwkgKgorCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBQdXNoQ29tbWFuZCBzZXRQdXNoRGVmYXVsdChQdXNoRGVmYXVsdCBwdXNoRGVmYXVsdCkgeworCQljaGVja0NhbGxhYmxlKCk7CisJCXRoaXMucHVzaERlZmF1bHQgPSBwdXNoRGVmYXVsdDsKKwkJcmV0dXJuIHRoaXM7CisJfQorCisJLyoqCiAJICogUHVzaCBhbGwgYnJhbmNoZXMgdW5kZXIgcmVmcy9oZWFkcy8qLgogCSAqCi0JICogQHJldHVybiB7Y29kZSB0aGlzfQorCSAqIEByZXR1cm4ge0Bjb2RlIHRoaXN9CiAJICovCiAJcHVibGljIFB1c2hDb21tYW5kIHNldFB1c2hBbGwoKSB7CiAJCXJlZlNwZWNzLmFkZChUcmFuc3BvcnQuUkVGU1BFQ19QVVNIX0FMTCk7CkBAIC0zNDgsNyArNDg0LDcgQEAgcHVibGljIFB1c2hDb21tYW5kIHNldFB1c2hBbGwoKSB7CiAJLyoqCiAJICogUHVzaCBhbGwgdGFncyB1bmRlciByZWZzL3RhZ3MvKi4KIAkgKgotCSAqIEByZXR1cm4ge2NvZGUgdGhpc30KKwkgKiBAcmV0dXJuIHtAY29kZSB0aGlzfQogCSAqLwogCXB1YmxpYyBQdXNoQ29tbWFuZCBzZXRQdXNoVGFncygpIHsKIAkJcmVmU3BlY3MuYWRkKFRyYW5zcG9ydC5SRUZTUEVDX1RBR1MpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmViYXNlQ29tbWFuZC5qYXZhCmluZGV4IGEyNmZmYzIuLjJiMGQ4Y2UgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1JlYmFzZUNvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZWJhc2VDb21tYW5kLmphdmEKQEAgLTI5LDYgKzI5LDcgQEAKIGltcG9ydCBqYXZhLnV0aWwucmVnZXguTWF0Y2hlcjsKIGltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTm9uTnVsbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5SZWJhc2VSZXN1bHQuU3RhdHVzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLlJlc2V0Q29tbWFuZC5SZXNldFR5cGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkNoZWNrb3V0Q29uZmxpY3RFeGNlcHRpb247CkBAIC01Miw2ICs1Myw4IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5BYmJyZXZpYXRlZE9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFueU9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbW1pdENvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db21taXRDb25maWcuQ2xlYW51cE1vZGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5OdWxsUHJvZ3Jlc3NNb25pdG9yOwpAQCAtMjA1LDYgKzIwOCw4IEBAIHB1YmxpYyBlbnVtIE9wZXJhdGlvbiB7CiAKIAlwcml2YXRlIEludGVyYWN0aXZlSGFuZGxlciBpbnRlcmFjdGl2ZUhhbmRsZXI7CiAKKwlwcml2YXRlIENvbW1pdENvbmZpZyBjb21taXRDb25maWc7CisKIAlwcml2YXRlIGJvb2xlYW4gc3RvcEFmdGVySW5pdGlhbGl6YXRpb24gPSBmYWxzZTsKIAogCXByaXZhdGUgUmV2Q29tbWl0IG5ld0hlYWQ7CkBAIC0yNDYsNiArMjUxLDcgQEAgcHVibGljIFJlYmFzZVJlc3VsdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiwgTm9IZWFkRXhjZXB0aW9uLAogCQlsYXN0U3RlcFdhc0ZvcndhcmQgPSBmYWxzZTsKIAkJY2hlY2tDYWxsYWJsZSgpOwogCQljaGVja1BhcmFtZXRlcnMoKTsKKwkJY29tbWl0Q29uZmlnID0gcmVwby5nZXRDb25maWcoKS5nZXQoQ29tbWl0Q29uZmlnLktFWSk7CiAJCXRyeSB7CiAJCQlzd2l0Y2ggKG9wZXJhdGlvbikgewogCQkJY2FzZSBBQk9SVDoKQEAgLTQ0MSwxMSArNDQ3LDE2IEBAIHByaXZhdGUgUmViYXNlUmVzdWx0IHByb2Nlc3NTdGVwKFJlYmFzZVRvZG9MaW5lIHN0ZXAsIGJvb2xlYW4gc2hvdWxkUGljaykKIAkJCXJldHVybiBudWxsOyAvLyBjb250aW51ZSByZWJhc2UgcHJvY2VzcyBvbiBwaWNrIGNvbW1hbmQKIAkJY2FzZSBSRVdPUkQ6CiAJCQlTdHJpbmcgb2xkTWVzc2FnZSA9IGNvbW1pdFRvUGljay5nZXRGdWxsTWVzc2FnZSgpOwotCQkJU3RyaW5nIG5ld01lc3NhZ2UgPSBpbnRlcmFjdGl2ZUhhbmRsZXIKLQkJCQkJLm1vZGlmeUNvbW1pdE1lc3NhZ2Uob2xkTWVzc2FnZSk7CisJCQlDbGVhbnVwTW9kZSBtb2RlID0gY29tbWl0Q29uZmlnLnJlc29sdmUoQ2xlYW51cE1vZGUuREVGQVVMVCwgdHJ1ZSk7CisJCQlib29sZWFuW10gZG9DaGFuZ2VJZCA9IHsgZmFsc2UgfTsKKwkJCVN0cmluZyBuZXdNZXNzYWdlID0gZWRpdENvbW1pdE1lc3NhZ2UoZG9DaGFuZ2VJZCwgb2xkTWVzc2FnZSwgbW9kZSk7CiAJCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KHJlcG8pKSB7Ci0JCQkJbmV3SGVhZCA9IGdpdC5jb21taXQoKS5zZXRNZXNzYWdlKG5ld01lc3NhZ2UpLnNldEFtZW5kKHRydWUpCi0JCQkJCQkuc2V0Tm9WZXJpZnkodHJ1ZSkuY2FsbCgpOworCQkJCW5ld0hlYWQgPSBnaXQuY29tbWl0KCkKKwkJCQkJCS5zZXRNZXNzYWdlKG5ld01lc3NhZ2UpCisJCQkJCQkuc2V0QW1lbmQodHJ1ZSkKKwkJCQkJCS5zZXROb1ZlcmlmeSh0cnVlKQorCQkJCQkJLnNldEluc2VydENoYW5nZUlkKGRvQ2hhbmdlSWRbMF0pCisJCQkJCQkuY2FsbCgpOwogCQkJfQogCQkJcmV0dXJuIG51bGw7CiAJCWNhc2UgRURJVDoKQEAgLTQ2MCwxNyArNDcxLDQ5IEBAIHByaXZhdGUgUmViYXNlUmVzdWx0IHByb2Nlc3NTdGVwKFJlYmFzZVRvZG9MaW5lIHN0ZXAsIGJvb2xlYW4gc2hvdWxkUGljaykKIAkJCXJlc2V0U29mdFRvUGFyZW50KCk7CiAJCQlMaXN0PFJlYmFzZVRvZG9MaW5lPiBzdGVwcyA9IHJlcG8ucmVhZFJlYmFzZVRvZG8oCiAJCQkJCXJlYmFzZVN0YXRlLmdldFBhdGgoR0lUX1JFQkFTRV9UT0RPKSwgZmFsc2UpOwotCQkJUmViYXNlVG9kb0xpbmUgbmV4dFN0ZXAgPSBzdGVwcy5pc0VtcHR5KCkgPyBudWxsIDogc3RlcHMuZ2V0KDApOworCQkJYm9vbGVhbiBpc0xhc3QgPSBzdGVwcy5pc0VtcHR5KCk7CisJCQlpZiAoIWlzTGFzdCkgeworCQkJCXN3aXRjaCAoc3RlcHMuZ2V0KDApLmdldEFjdGlvbigpKSB7CisJCQkJY2FzZSBGSVhVUDoKKwkJCQljYXNlIFNRVUFTSDoKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJaXNMYXN0ID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQogCQkJRmlsZSBtZXNzYWdlRml4dXBGaWxlID0gcmViYXNlU3RhdGUuZ2V0RmlsZShNRVNTQUdFX0ZJWFVQKTsKIAkJCUZpbGUgbWVzc2FnZVNxdWFzaEZpbGUgPSByZWJhc2VTdGF0ZS5nZXRGaWxlKE1FU1NBR0VfU1FVQVNIKTsKLQkJCWlmIChpc1NxdWFzaCAmJiBtZXNzYWdlRml4dXBGaWxlLmV4aXN0cygpKQorCQkJaWYgKGlzU3F1YXNoICYmIG1lc3NhZ2VGaXh1cEZpbGUuZXhpc3RzKCkpIHsKIAkJCQltZXNzYWdlRml4dXBGaWxlLmRlbGV0ZSgpOwotCQkJbmV3SGVhZCA9IGRvU3F1YXNoRml4dXAoaXNTcXVhc2gsIGNvbW1pdFRvUGljaywgbmV4dFN0ZXAsCisJCQl9CisJCQluZXdIZWFkID0gZG9TcXVhc2hGaXh1cChpc1NxdWFzaCwgY29tbWl0VG9QaWNrLCBpc0xhc3QsCiAJCQkJCW1lc3NhZ2VGaXh1cEZpbGUsIG1lc3NhZ2VTcXVhc2hGaWxlKTsKIAkJfQogCQlyZXR1cm4gbnVsbDsKIAl9CiAKKwlwcml2YXRlIFN0cmluZyBlZGl0Q29tbWl0TWVzc2FnZShib29sZWFuW10gZG9DaGFuZ2VJZCwgU3RyaW5nIG1lc3NhZ2UsCisJCQlATm9uTnVsbCBDbGVhbnVwTW9kZSBtb2RlKSB7CisJCVN0cmluZyBuZXdNZXNzYWdlOworCQlDb21taXRDb25maWcuQ2xlYW51cE1vZGUgY2xlYW51cDsKKwkJaWYgKGludGVyYWN0aXZlSGFuZGxlciBpbnN0YW5jZW9mIEludGVyYWN0aXZlSGFuZGxlcjIpIHsKKwkJCUludGVyYWN0aXZlSGFuZGxlcjIuTW9kaWZ5UmVzdWx0IG1vZGlmaWNhdGlvbiA9ICgoSW50ZXJhY3RpdmVIYW5kbGVyMikgaW50ZXJhY3RpdmVIYW5kbGVyKQorCQkJCQkuZWRpdENvbW1pdE1lc3NhZ2UobWVzc2FnZSwgbW9kZSwgJyMnKTsKKwkJCW5ld01lc3NhZ2UgPSBtb2RpZmljYXRpb24uZ2V0TWVzc2FnZSgpOworCQkJY2xlYW51cCA9IG1vZGlmaWNhdGlvbi5nZXRDbGVhbnVwTW9kZSgpOworCQkJaWYgKENsZWFudXBNb2RlLkRFRkFVTFQuZXF1YWxzKGNsZWFudXApKSB7CisJCQkJY2xlYW51cCA9IG1vZGU7CisJCQl9CisJCQlkb0NoYW5nZUlkWzBdID0gbW9kaWZpY2F0aW9uLnNob3VsZEFkZENoYW5nZUlkKCk7CisJCX0gZWxzZSB7CisJCQluZXdNZXNzYWdlID0gaW50ZXJhY3RpdmVIYW5kbGVyLm1vZGlmeUNvbW1pdE1lc3NhZ2UobWVzc2FnZSk7CisJCQljbGVhbnVwID0gQ29tbWl0Q29uZmlnLkNsZWFudXBNb2RlLlNUUklQOworCQkJZG9DaGFuZ2VJZFswXSA9IGZhbHNlOworCQl9CisJCXJldHVybiBDb21taXRDb25maWcuY2xlYW5UZXh0KG5ld01lc3NhZ2UsIGNsZWFudXAsICcjJyk7CisJfQorCiAJcHJpdmF0ZSBSZWJhc2VSZXN1bHQgY2hlcnJ5UGlja0NvbW1pdChSZXZDb21taXQgY29tbWl0VG9QaWNrKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uLCBHaXRBUElFeGNlcHRpb24sIE5vTWVzc2FnZUV4Y2VwdGlvbiwKIAkJCVVubWVyZ2VkUGF0aHNFeGNlcHRpb24sIENvbmN1cnJlbnRSZWZVcGRhdGVFeGNlcHRpb24sCkBAIC03MDcsNyArNzUwLDcgQEAgcHJpdmF0ZSB2b2lkIGNoZWNrU3RlcHMoTGlzdDxSZWJhc2VUb2RvTGluZT4gc3RlcHMpCiAJfQogCiAJcHJpdmF0ZSBSZXZDb21taXQgZG9TcXVhc2hGaXh1cChib29sZWFuIGlzU3F1YXNoLCBSZXZDb21taXQgY29tbWl0VG9QaWNrLAotCQkJUmViYXNlVG9kb0xpbmUgbmV4dFN0ZXAsIEZpbGUgbWVzc2FnZUZpeHVwLCBGaWxlIG1lc3NhZ2VTcXVhc2gpCisJCQlib29sZWFuIGlzTGFzdCwgRmlsZSBtZXNzYWdlRml4dXAsIEZpbGUgbWVzc2FnZVNxdWFzaCkKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiwgR2l0QVBJRXhjZXB0aW9uIHsKIAogCQlpZiAoIW1lc3NhZ2VTcXVhc2guZXhpc3RzKCkpIHsKQEAgLTcxNywyNCArNzYwLDIwIEBAIHByaXZhdGUgUmV2Q29tbWl0IGRvU3F1YXNoRml4dXAoYm9vbGVhbiBpc1NxdWFzaCwgUmV2Q29tbWl0IGNvbW1pdFRvUGljaywKIAogCQkJaW5pdGlhbGl6ZVNxdWFzaEZpeHVwRmlsZShNRVNTQUdFX1NRVUFTSCwKIAkJCQkJcHJldmlvdXNDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7Ci0JCQlpZiAoIWlzU3F1YXNoKQotCQkJCWluaXRpYWxpemVTcXVhc2hGaXh1cEZpbGUoTUVTU0FHRV9GSVhVUCwKLQkJCQkJcHJldmlvdXNDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQlpZiAoIWlzU3F1YXNoKSB7CisJCQkJcmViYXNlU3RhdGUuY3JlYXRlRmlsZShNRVNTQUdFX0ZJWFVQLAorCQkJCQkJcHJldmlvdXNDb21taXQuZ2V0RnVsbE1lc3NhZ2UoKSk7CisJCQl9CiAJCX0KLQkJU3RyaW5nIGN1cnJTcXVhc2hNZXNzYWdlID0gcmViYXNlU3RhdGUKLQkJCQkucmVhZEZpbGUoTUVTU0FHRV9TUVVBU0gpOworCQlTdHJpbmcgY3VyclNxdWFzaE1lc3NhZ2UgPSByZWJhc2VTdGF0ZS5yZWFkRmlsZShNRVNTQUdFX1NRVUFTSCk7CiAKIAkJaW50IGNvdW50ID0gcGFyc2VTcXVhc2hGaXh1cFNlcXVlbmNlQ291bnQoY3VyclNxdWFzaE1lc3NhZ2UpICsgMTsKIAogCQlTdHJpbmcgY29udGVudCA9IGNvbXBvc2VTcXVhc2hNZXNzYWdlKGlzU3F1YXNoLAogCQkJCWNvbW1pdFRvUGljaywgY3VyclNxdWFzaE1lc3NhZ2UsIGNvdW50KTsKIAkJcmViYXNlU3RhdGUuY3JlYXRlRmlsZShNRVNTQUdFX1NRVUFTSCwgY29udGVudCk7Ci0JCWlmIChtZXNzYWdlRml4dXAuZXhpc3RzKCkpCi0JCQlyZWJhc2VTdGF0ZS5jcmVhdGVGaWxlKE1FU1NBR0VfRklYVVAsIGNvbnRlbnQpOwogCi0JCXJldHVybiBzcXVhc2hJbnRvUHJldmlvdXMoCi0JCQkJIW1lc3NhZ2VGaXh1cC5leGlzdHMoKSwKLQkJCQluZXh0U3RlcCk7CisJCXJldHVybiBzcXVhc2hJbnRvUHJldmlvdXMoIW1lc3NhZ2VGaXh1cC5leGlzdHMoKSwgaXNMYXN0KTsKIAl9CiAKIAlwcml2YXRlIHZvaWQgcmVzZXRTb2Z0VG9QYXJlbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24sCkBAIC03NTYsMjYgKzc5NSwzMCBAQCBwcml2YXRlIHZvaWQgcmVzZXRTb2Z0VG9QYXJlbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24sCiAJfQogCiAJcHJpdmF0ZSBSZXZDb21taXQgc3F1YXNoSW50b1ByZXZpb3VzKGJvb2xlYW4gc2VxdWVuY2VDb250YWluc1NxdWFzaCwKLQkJCVJlYmFzZVRvZG9MaW5lIG5leHRTdGVwKQorCQkJYm9vbGVhbiBpc0xhc3QpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvbiB7CiAJCVJldkNvbW1pdCByZXROZXdIZWFkOwotCQlTdHJpbmcgY29tbWl0TWVzc2FnZSA9IHJlYmFzZVN0YXRlCi0JCQkJLnJlYWRGaWxlKE1FU1NBR0VfU1FVQVNIKTsKLQorCQlTdHJpbmcgY29tbWl0TWVzc2FnZTsKKwkJaWYgKCFpc0xhc3QgfHwgc2VxdWVuY2VDb250YWluc1NxdWFzaCkgeworCQkJY29tbWl0TWVzc2FnZSA9IHJlYmFzZVN0YXRlLnJlYWRGaWxlKE1FU1NBR0VfU1FVQVNIKTsKKwkJfSBlbHNlIHsKKwkJCWNvbW1pdE1lc3NhZ2UgPSByZWJhc2VTdGF0ZS5yZWFkRmlsZShNRVNTQUdFX0ZJWFVQKTsKKwkJfQogCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KHJlcG8pKSB7Ci0JCQlpZiAobmV4dFN0ZXAgPT0gbnVsbCB8fCAoKG5leHRTdGVwLmdldEFjdGlvbigpICE9IEFjdGlvbi5GSVhVUCkKLQkJCQkJJiYgKG5leHRTdGVwLmdldEFjdGlvbigpICE9IEFjdGlvbi5TUVVBU0gpKSkgewotCQkJCS8vIHRoaXMgaXMgdGhlIGxhc3Qgc3RlcCBpbiB0aGlzIHNlcXVlbmNlCisJCQlpZiAoaXNMYXN0KSB7CisJCQkJYm9vbGVhbltdIGRvQ2hhbmdlSWQgPSB7IGZhbHNlIH07CiAJCQkJaWYgKHNlcXVlbmNlQ29udGFpbnNTcXVhc2gpIHsKLQkJCQkJY29tbWl0TWVzc2FnZSA9IGludGVyYWN0aXZlSGFuZGxlcgotCQkJCQkJCS5tb2RpZnlDb21taXRNZXNzYWdlKGNvbW1pdE1lc3NhZ2UpOworCQkJCQljb21taXRNZXNzYWdlID0gZWRpdENvbW1pdE1lc3NhZ2UoZG9DaGFuZ2VJZCwgY29tbWl0TWVzc2FnZSwKKwkJCQkJCQlDbGVhbnVwTW9kZS5TVFJJUCk7CiAJCQkJfQogCQkJCXJldE5ld0hlYWQgPSBnaXQuY29tbWl0KCkKLQkJCQkJCS5zZXRNZXNzYWdlKHN0cmlwQ29tbWVudExpbmVzKGNvbW1pdE1lc3NhZ2UpKQotCQkJCQkJLnNldEFtZW5kKHRydWUpLnNldE5vVmVyaWZ5KHRydWUpLmNhbGwoKTsKKwkJCQkJCS5zZXRNZXNzYWdlKGNvbW1pdE1lc3NhZ2UpCisJCQkJCQkuc2V0QW1lbmQodHJ1ZSkKKwkJCQkJCS5zZXROb1ZlcmlmeSh0cnVlKQorCQkJCQkJLnNldEluc2VydENoYW5nZUlkKGRvQ2hhbmdlSWRbMF0pCisJCQkJCQkuY2FsbCgpOwogCQkJCXJlYmFzZVN0YXRlLmdldEZpbGUoTUVTU0FHRV9TUVVBU0gpLmRlbGV0ZSgpOwogCQkJCXJlYmFzZVN0YXRlLmdldEZpbGUoTUVTU0FHRV9GSVhVUCkuZGVsZXRlKCk7Ci0KIAkJCX0gZWxzZSB7CiAJCQkJLy8gTmV4dCBzdGVwIGlzIGVpdGhlciBTcXVhc2ggb3IgRml4dXAKIAkJCQlyZXROZXdIZWFkID0gZ2l0LmNvbW1pdCgpLnNldE1lc3NhZ2UoY29tbWl0TWVzc2FnZSkKQEAgLTc4NSwyMSArODI4LDYgQEAgcHJpdmF0ZSBSZXZDb21taXQgc3F1YXNoSW50b1ByZXZpb3VzKGJvb2xlYW4gc2VxdWVuY2VDb250YWluc1NxdWFzaCwKIAkJcmV0dXJuIHJldE5ld0hlYWQ7CiAJfQogCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHN0cmlwQ29tbWVudExpbmVzKFN0cmluZyBjb21taXRNZXNzYWdlKSB7Ci0JCVN0cmluZ0J1aWxkZXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQkJZm9yIChTdHJpbmcgbGluZSA6IGNvbW1pdE1lc3NhZ2Uuc3BsaXQoIlxuIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJaWYgKCFsaW5lLnRyaW0oKS5zdGFydHNXaXRoKCIjIikpIC8vJE5PTi1OTFMtMSQKLQkJCQlyZXN1bHQuYXBwZW5kKGxpbmUpLmFwcGVuZCgiXG4iKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWlmICghY29tbWl0TWVzc2FnZS5lbmRzV2l0aCgiXG4iKSkgeyAvLyROT04tTkxTLTEkCi0JCQlpbnQgYnVmZmVyU2l6ZSA9IHJlc3VsdC5sZW5ndGgoKTsKLQkJCWlmIChidWZmZXJTaXplID4gMCAmJiByZXN1bHQuY2hhckF0KGJ1ZmZlclNpemUgLSAxKSA9PSAnXG4nKSB7Ci0JCQkJcmVzdWx0LmRlbGV0ZUNoYXJBdChidWZmZXJTaXplIC0gMSk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotCX0KLQogCUBTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQogCXByaXZhdGUgc3RhdGljIFN0cmluZyBjb21wb3NlU3F1YXNoTWVzc2FnZShib29sZWFuIGlzU3F1YXNoLAogCQkJUmV2Q29tbWl0IGNvbW1pdFRvUGljaywgU3RyaW5nIGN1cnJTcXVhc2hNZXNzYWdlLCBpbnQgY291bnQpIHsKQEAgLTE2MjUsMjYgKzE2NTMsMTA2IEBAIHB1YmxpYyBSZWJhc2VDb21tYW5kIHNldFByZXNlcnZlTWVyZ2VzKGJvb2xlYW4gcHJlc2VydmUpIHsKIAl9CiAKIAkvKioKLQkgKiBBbGxvd3MgY29uZmlndXJlIHJlYmFzZSBpbnRlcmFjdGl2ZSBwcm9jZXNzIGFuZCBtb2RpZnkgY29tbWl0IG1lc3NhZ2UKKwkgKiBBbGxvd3MgdG8gY29uZmlndXJlIHRoZSBpbnRlcmFjdGl2ZSByZWJhc2UgcHJvY2VzcyBzdGVwcyBhbmQgdG8gbW9kaWZ5CisJICogY29tbWl0IG1lc3NhZ2VzLgogCSAqLwogCXB1YmxpYyBpbnRlcmZhY2UgSW50ZXJhY3RpdmVIYW5kbGVyIHsKKwogCQkvKioKLQkJICogR2l2ZW4gbGlzdCBvZiB7QGNvZGUgc3RlcHN9IHNob3VsZCBiZSBtb2RpZmllZCBhY2NvcmRpbmcgdG8gdXNlcgotCQkgKiByZWJhc2UgY29uZmlndXJhdGlvbgorCQkgKiBDYWxsYmFjayBBUEkgdG8gbW9kaWZ5IHRoZSBpbml0aWFsIGxpc3Qgb2YgaW50ZXJhY3RpdmUgcmViYXNlIHN0ZXBzLgorCQkgKgogCQkgKiBAcGFyYW0gc3RlcHMKLQkJICogICAgICAgICAgICBpbml0aWFsIGNvbmZpZ3VyYXRpb24gb2YgcmViYXNlIGludGVyYWN0aXZlCisJCSAqICAgICAgICAgICAgaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIGludGVyYWN0aXZlIHJlYmFzZQogCQkgKi8KIAkJdm9pZCBwcmVwYXJlU3RlcHMoTGlzdDxSZWJhc2VUb2RvTGluZT4gc3RlcHMpOwogCiAJCS8qKgotCQkgKiBVc2VkIGZvciBlZGl0aW5nIGNvbW1pdCBtZXNzYWdlIG9uIFJFV09SRAorCQkgKiBVc2VkIGZvciBlZGl0aW5nIGNvbW1pdCBtZXNzYWdlIG9uIFJFV09SRCBvciBTUVVBU0guCiAJCSAqCi0JCSAqIEBwYXJhbSBjb21taXQKKwkJICogQHBhcmFtIG1lc3NhZ2UKKwkJICogICAgICAgICAgICBleGlzdGluZyBjb21taXQgbWVzc2FnZQogCQkgKiBAcmV0dXJuIG5ldyBjb21taXQgbWVzc2FnZQogCQkgKi8KLQkJU3RyaW5nIG1vZGlmeUNvbW1pdE1lc3NhZ2UoU3RyaW5nIGNvbW1pdCk7CisJCVN0cmluZyBtb2RpZnlDb21taXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKTsKIAl9CiAKKwkvKioKKwkgKiBFeHRlbmRzIHtAbGluayBJbnRlcmFjdGl2ZUhhbmRsZXJ9IHdpdGggYW4gZW5oYW5jZWQgY2FsbGJhY2sgZm9yIGVkaXRpbmcKKwkgKiBjb21taXQgbWVzc2FnZXMuCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIGludGVyZmFjZSBJbnRlcmFjdGl2ZUhhbmRsZXIyIGV4dGVuZHMgSW50ZXJhY3RpdmVIYW5kbGVyIHsKKworCQkvKioKKwkJICogQ2FsbGJhY2sgQVBJIGZvciBlZGl0aW5nIGEgY29tbWl0IG1lc3NhZ2Ugb24gUkVXT1JEIG9yIFNRVUFTSC4KKwkJICogPHA+CisJCSAqIFRoZSBjYWxsYmFjayBnZXRzIHRoZSBjb21tZW50IGNoYXJhY3RlciBjdXJyZW50bHkgc2V0LCBhbmQgdGhlCisJCSAqIGNsZWFuLXVwIG1vZGUuIEl0IGNhbiB1c2UgdGhpcyBpbmZvcm1hdGlvbiB3aGVuIHByZXNlbnRpbmcgdGhlCisJCSAqIG1lc3NhZ2UgdG8gdGhlIHVzZXIsIGFuZCBpdCBhbHNvIGhhcyB0aGUgcG9zc2liaWxpdHkgdG8gY2xlYW4gdGhlCisJCSAqIG1lc3NhZ2UgaXRzZWxmIChpbiB3aGljaCBjYXNlIHRoZSByZXR1cm5lZCB7QGxpbmsgTW9kaWZ5UmVzdWx0fQorCQkgKiBzaG91bGQgaGF2ZSB7QGxpbmsgQ2xlYW51cE1vZGUjVkVSQkFUSU19IHNldCBsZXN0IEpHaXQgY2xlYW5zIHRoZQorCQkgKiBtZXNzYWdlIGFnYWluKS4gSXQgY2FuIGFsc28gb3ZlcnJpZGUgdGhlIGluaXRpYWwgY2xlYW4tdXAgbW9kZSBieQorCQkgKiByZXR1cm5pbmcgY2xlYW4tdXAgbW9kZSBvdGhlciB0aGFuIHtAbGluayBDbGVhbnVwTW9kZSNERUZBVUxUfS4gSWYgaXQKKwkJICogZG9lcyByZXR1cm4ge0Bjb2RlIERFRkFVTFR9LCB0aGUgcGFzc2VkLWluIHtAY29kZSBtb2RlfSB3aWxsIGJlCisJCSAqIGFwcGxpZWQuCisJCSAqIDwvcD4KKwkJICoKKwkJICogQHBhcmFtIG1lc3NhZ2UKKwkJICogICAgICAgICAgICBleGlzdGluZyBjb21taXQgbWVzc2FnZQorCQkgKiBAcGFyYW0gbW9kZQorCQkgKiAgICAgICAgICAgIHtAbGluayBDbGVhbnVwTW9kZX0gY3VycmVudGx5IHNldAorCQkgKiBAcGFyYW0gY29tbWVudENoYXIKKwkJICogICAgICAgICAgICBjb21tZW50IGNoYXJhY3RlciB1c2VkCisJCSAqIEByZXR1cm4gYSB7QGxpbmsgTW9kaWZ5UmVzdWx0fQorCQkgKi8KKwkJQE5vbk51bGwKKwkJTW9kaWZ5UmVzdWx0IGVkaXRDb21taXRNZXNzYWdlKEBOb25OdWxsIFN0cmluZyBtZXNzYWdlLAorCQkJCUBOb25OdWxsIENsZWFudXBNb2RlIG1vZGUsIGNoYXIgY29tbWVudENoYXIpOworCisJCUBPdmVycmlkZQorCQlkZWZhdWx0IFN0cmluZyBtb2RpZnlDb21taXRNZXNzYWdlKFN0cmluZyBtZXNzYWdlKSB7CisJCQkvLyBTaG91bGQgYWN0dWFsbHkgbm90IGJlIGNhbGxlZDsgYnV0IGRvIHNvbWV0aGluZyByZWFzb25hYmxlIGFueXdheQorCQkJTW9kaWZ5UmVzdWx0IHJlc3VsdCA9IGVkaXRDb21taXRNZXNzYWdlKAorCQkJCQltZXNzYWdlID09IG51bGwgPyAiIiA6IG1lc3NhZ2UsIENsZWFudXBNb2RlLlNUUklQLCAvLyROT04tTkxTLTEkCisJCQkJCScjJyk7CisJCQlyZXR1cm4gcmVzdWx0LmdldE1lc3NhZ2UoKTsKKwkJfQorCisJCS8qKgorCQkgKiBEZXNjcmliZXMgdGhlIHJlc3VsdCBvZiBlZGl0aW5nIGEgY29tbWl0IG1lc3NhZ2U6IHRoZSBuZXcgbWVzc2FnZSwKKwkJICogYW5kIGhvdyBpdCBzaG91bGQgYmUgY2xlYW5lZC4KKwkJICovCisJCWludGVyZmFjZSBNb2RpZnlSZXN1bHQgeworCisJCQkvKioKKwkJCSAqIFJldHJpZXZlcyB0aGUgbmV3IGNvbW1pdCBtZXNzYWdlLgorCQkJICoKKwkJCSAqIEByZXR1cm4gdGhlIG1lc3NhZ2UKKwkJCSAqLworCQkJQE5vbk51bGwKKwkJCVN0cmluZyBnZXRNZXNzYWdlKCk7CisKKwkJCS8qKgorCQkJICogVGVsbHMgaG93IHRoZSBtZXNzYWdlIHJldHVybmVkIGJ5IHtAbGluayAjZ2V0TWVzc2FnZSgpfSBzaG91bGQgYmUKKwkJCSAqIGNsZWFuZWQuCisJCQkgKgorCQkJICogQHJldHVybiB0aGUge0BsaW5rIENsZWFudXBNb2RlfQorCQkJICovCisJCQlATm9uTnVsbAorCQkJQ2xlYW51cE1vZGUgZ2V0Q2xlYW51cE1vZGUoKTsKKworCQkJLyoqCisJCQkgKiBUZWxscyB3aGV0aGVyIGEgR2Vycml0IENoYW5nZS1JZCBzaG91bGQgYmUgY29tcHV0ZWQgYW5kIGFkZGVkIHRvCisJCQkgKiB0aGUgY29tbWl0IG1lc3NhZ2UsIGFzIHdpdGgKKwkJCSAqIHtAbGluayBDb21taXRDb21tYW5kI3NldEluc2VydENoYW5nZUlkKGJvb2xlYW4pfS4KKwkJCSAqCisJCQkgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBhIENoYW5nZS1JZCBzaG91bGQgYmUgaGFuZGxlZCwKKwkJCSAqICAgICAgICAge0Bjb2RlIGZhbHNlfSBvdGhlcndpc2UKKwkJCSAqLworCQkJYm9vbGVhbiBzaG91bGRBZGRDaGFuZ2VJZCgpOworCQl9CisJfQogCiAJUGVyc29uSWRlbnQgcGFyc2VBdXRob3IoYnl0ZVtdIHJhdykgewogCQlpZiAocmF3Lmxlbmd0aCA9PSAwKQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvUmV2ZXJ0Q29tbWFuZC5qYXZhCmluZGV4IDIyZWY0ZDAuLmRiODhhZDggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXBpL1JldmVydENvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9SZXZlcnRDb21tYW5kLmphdmEKQEAgLTksNiArOSw4IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5hcGk7CiAKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLk9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKKwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZExpc3Q7CkBAIC0xMjgsOCArMTMwLDkgQEAgcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIE5vTWVzc2FnZUV4Y2VwdGlvbiwgVW5tZXJnZWRQYXRoc0V4Y2VwdGlvbiwKIAkJCQlyZXZXYWxrLnBhcnNlSGVhZGVycyhzcmNQYXJlbnQpOwogCiAJCQkJU3RyaW5nIG91ck5hbWUgPSBjYWxjdWxhdGVPdXJOYW1lKGhlYWRSZWYpOwotCQkJCVN0cmluZyByZXZlcnROYW1lID0gc3JjQ29tbWl0LmdldElkKCkuYWJicmV2aWF0ZSg3KS5uYW1lKCkKLQkJCQkJCSsgIiAiICsgc3JjQ29tbWl0LmdldFNob3J0TWVzc2FnZSgpOyAvLyROT04tTkxTLTEkCisJCQkJU3RyaW5nIHJldmVydE5hbWUgPSBzcmNDb21taXQuZ2V0SWQoKQorCQkJCQkJLmFiYnJldmlhdGUoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKS5uYW1lKCkgKyAiICIgLy8kTk9OLU5MUy0xJAorCQkJCQkJKyBzcmNDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCk7CiAKIAkJCQlSZXNvbHZlTWVyZ2VyIG1lcmdlciA9IChSZXNvbHZlTWVyZ2VyKSBzdHJhdGVneS5uZXdNZXJnZXIocmVwbyk7CiAJCQkJbWVyZ2VyLnNldFdvcmtpbmdUcmVlSXRlcmF0b3IobmV3IEZpbGVUcmVlSXRlcmF0b3IocmVwbykpOwpAQCAtMTgzLDggKzE4Niw4IEBAIHB1YmxpYyBSZXZDb21taXQgY2FsbCgpIHRocm93cyBOb01lc3NhZ2VFeGNlcHRpb24sIFVubWVyZ2VkUGF0aHNFeGNlcHRpb24sCiAJCQkJCQkJCW1lcmdlci5nZXRNZXJnZVJlc3VsdHMoKSwgZmFpbGluZ1BhdGhzLCBudWxsKTsKIAkJCQkJaWYgKCFtZXJnZXIuZmFpbGVkKCkgJiYgIXVubWVyZ2VkUGF0aHMuaXNFbXB0eSgpKSB7CiAJCQkJCQlTdHJpbmcgbWVzc2FnZSA9IG5ldyBNZXJnZU1lc3NhZ2VGb3JtYXR0ZXIoKQotCQkJCQkJLmZvcm1hdFdpdGhDb25mbGljdHMobmV3TWVzc2FnZSwKLQkJCQkJCQkJbWVyZ2VyLmdldFVubWVyZ2VkUGF0aHMoKSk7CisJCQkJCQkJCS5mb3JtYXRXaXRoQ29uZmxpY3RzKG5ld01lc3NhZ2UsCisJCQkJCQkJCQkJbWVyZ2VyLmdldFVubWVyZ2VkUGF0aHMoKSwgJyMnKTsKIAkJCQkJCXJlcG8ud3JpdGVSZXZlcnRIZWFkKHNyY0NvbW1pdC5nZXRJZCgpKTsKIAkJCQkJCXJlcG8ud3JpdGVNZXJnZUNvbW1pdE1zZyhtZXNzYWdlKTsKIAkJCQkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hcGkvU3Rhc2hDcmVhdGVDb21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGFzaENyZWF0ZUNvbW1hbmQuamF2YQppbmRleCAzNWZkODk5Li5mN2ExZjRlIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGFzaENyZWF0ZUNvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2FwaS9TdGFzaENyZWF0ZUNvbW1hbmQuamF2YQpAQCAtOSw2ICs5LDggQEAKICAqLwogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmFwaTsKIAoraW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOworCiBpbXBvcnQgamF2YS5pby5GaWxlOwogaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKQEAgLTMwMiw3ICszMDQsOCBAQCBwdWJsaWMgdm9pZCBhcHBseShEaXJDYWNoZUVudHJ5IGVudCkgewogCQkJCWJ1aWxkZXIuc2V0UGFyZW50SWQoaGVhZENvbW1pdCk7CiAJCQkJYnVpbGRlci5zZXRUcmVlSWQoY2FjaGUud3JpdGVUcmVlKGluc2VydGVyKSk7CiAJCQkJYnVpbGRlci5zZXRNZXNzYWdlKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KGluZGV4TWVzc2FnZSwgYnJhbmNoLAotCQkJCQkJaGVhZENvbW1pdC5hYmJyZXZpYXRlKDcpLm5hbWUoKSwKKwkJCQkJCWhlYWRDb21taXQuYWJicmV2aWF0ZShPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpCisJCQkJCQkJCS5uYW1lKCksCiAJCQkJCQloZWFkQ29tbWl0LmdldFNob3J0TWVzc2FnZSgpKSk7CiAJCQkJT2JqZWN0SWQgaW5kZXhDb21taXQgPSBpbnNlcnRlci5pbnNlcnQoYnVpbGRlcik7CiAKQEAgLTMxOSw3ICszMjIsMTAgQEAgcHVibGljIHZvaWQgYXBwbHkoRGlyQ2FjaGVFbnRyeSBlbnQpIHsKIAkJCQkJYnVpbGRlci5zZXRQYXJlbnRJZHMobmV3IE9iamVjdElkWzBdKTsKIAkJCQkJYnVpbGRlci5zZXRUcmVlSWQodW50cmFja2VkRGlyQ2FjaGUud3JpdGVUcmVlKGluc2VydGVyKSk7CiAJCQkJCWJ1aWxkZXIuc2V0TWVzc2FnZShNZXNzYWdlRm9ybWF0LmZvcm1hdChNU0dfVU5UUkFDS0VELAotCQkJCQkJCWJyYW5jaCwgaGVhZENvbW1pdC5hYmJyZXZpYXRlKDcpLm5hbWUoKSwKKwkJCQkJCQlicmFuY2gsCisJCQkJCQkJaGVhZENvbW1pdAorCQkJCQkJCQkJLmFiYnJldmlhdGUoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKQorCQkJCQkJCQkJLm5hbWUoKSwKIAkJCQkJCQloZWFkQ29tbWl0LmdldFNob3J0TWVzc2FnZSgpKSk7CiAJCQkJCXVudHJhY2tlZENvbW1pdCA9IGluc2VydGVyLmluc2VydChidWlsZGVyKTsKIAkJCQl9CkBAIC0zMzksNyArMzQ1LDggQEAgcHVibGljIHZvaWQgYXBwbHkoRGlyQ2FjaGVFbnRyeSBlbnQpIHsKIAkJCQkJYnVpbGRlci5hZGRQYXJlbnRJZCh1bnRyYWNrZWRDb21taXQpOwogCQkJCWJ1aWxkZXIuc2V0TWVzc2FnZShNZXNzYWdlRm9ybWF0LmZvcm1hdCgKIAkJCQkJCXdvcmtpbmdEaXJlY3RvcnlNZXNzYWdlLCBicmFuY2gsCi0JCQkJCQloZWFkQ29tbWl0LmFiYnJldmlhdGUoNykubmFtZSgpLAorCQkJCQkJaGVhZENvbW1pdC5hYmJyZXZpYXRlKE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSCkKKwkJCQkJCQkJLm5hbWUoKSwKIAkJCQkJCWhlYWRDb21taXQuZ2V0U2hvcnRNZXNzYWdlKCkpKTsKIAkJCQlidWlsZGVyLnNldFRyZWVJZChjYWNoZS53cml0ZVRyZWUoaW5zZXJ0ZXIpKTsKIAkJCQljb21taXRJZCA9IGluc2VydGVyLmluc2VydChidWlsZGVyKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvYXR0cmlidXRlcy9BdHRyaWJ1dGVzSGFuZGxlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyLmphdmEKaW5kZXggNjM4ZGQ4Mi4uN2VjNzg1OSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9hdHRyaWJ1dGVzL0F0dHJpYnV0ZXNIYW5kbGVyLmphdmEKQEAgLTEsNDMgKzEsMTEgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUsIEl2YW4gTW90c2NoIDxpdmFuLm1vdHNjaEBic2lhZy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUsIDIwMjIgSXZhbiBNb3RzY2ggPGl2YW4ubW90c2NoQGJzaWFnLmNvbT4gYW5kIG90aGVycwogICoKLSAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlCi0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2UgdjEuMCB3aGljaAotICogYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGlzIHJlcHJvZHVjZWQgYmVsb3csIGFuZCBpcwotICogYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocAorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgogICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgotICogd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCi0gKiBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAotICogICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogLSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIEluYy4gbm9yIHRoZQotICogICBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQotICogICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCi0gKiAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKLSAqIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKLSAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCi0gKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgotICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzOwogCkBAIC00Niw2ICsxNCw3IEBACiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkxpc3RJdGVyYXRvcjsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5TdXBwbGllcjsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTnVsbGFibGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hdHRyaWJ1dGVzLkF0dHJpYnV0ZS5TdGF0ZTsKQEAgLTg0LDYgKzUzLDggQEAgcHVibGljIGNsYXNzIEF0dHJpYnV0ZXNIYW5kbGVyIHsKIAogCXByaXZhdGUgZmluYWwgVHJlZVdhbGsgdHJlZVdhbGs7CiAKKwlwcml2YXRlIGZpbmFsIFN1cHBsaWVyPENhbm9uaWNhbFRyZWVQYXJzZXI+IGF0dHJpYnV0ZXNUcmVlOworCiAJcHJpdmF0ZSBmaW5hbCBBdHRyaWJ1dGVzTm9kZSBnbG9iYWxOb2RlOwogCiAJcHJpdmF0ZSBmaW5hbCBBdHRyaWJ1dGVzTm9kZSBpbmZvTm9kZTsKQEAgLTk4LDIyICs2OSw0MSBAQCBwdWJsaWMgY2xhc3MgQXR0cmlidXRlc0hhbmRsZXIgewogCSAqIEBwYXJhbSB0cmVlV2FsawogCSAqICAgICAgICAgICAgYSB7QGxpbmsgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5UcmVlV2Fsa30KIAkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiBAZGVwcmVjYXRlZCBzaW5jZSA2LjEsIHVzZSB7QGxpbmsgI0F0dHJpYnV0ZXNIYW5kbGVyKFRyZWVXYWxrLCBTdXBwbGllcil9CisJICogICAgICAgICAgICAgaW5zdGVhZAogCSAqLworCUBEZXByZWNhdGVkCiAJcHVibGljIEF0dHJpYnV0ZXNIYW5kbGVyKFRyZWVXYWxrIHRyZWVXYWxrKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0aGlzKHRyZWVXYWxrLCAoKSAtPiB0cmVlV2Fsay5nZXRUcmVlKENhbm9uaWNhbFRyZWVQYXJzZXIuY2xhc3MpKTsKKwl9CisKKwkvKioKKwkgKiBDcmVhdGUgYW4ge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQuYXR0cmlidXRlcy5BdHRyaWJ1dGVzSGFuZGxlcn0gd2l0aAorCSAqIGRlZmF1bHQgcnVsZXMgYXMgd2VsbCBhcyBtZXJnZWQgcnVsZXMgZnJvbSBnbG9iYWwsIGluZm8gYW5kIHdvcmt0cmVlIHJvb3QKKwkgKiBhdHRyaWJ1dGVzCisJICoKKwkgKiBAcGFyYW0gdHJlZVdhbGsKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuVHJlZVdhbGt9CisJICogQHBhcmFtIGF0dHJpYnV0ZXNUcmVlCisJICogICAgICAgICAgICB0aGUgdHJlZSB0byByZWFkIC5naXRhdHRyaWJ1dGVzIGZyb20KKwkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIEF0dHJpYnV0ZXNIYW5kbGVyKFRyZWVXYWxrIHRyZWVXYWxrLAorCQkJU3VwcGxpZXI8Q2Fub25pY2FsVHJlZVBhcnNlcj4gYXR0cmlidXRlc1RyZWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCXRoaXMudHJlZVdhbGsgPSB0cmVlV2FsazsKLQkJQXR0cmlidXRlc05vZGVQcm92aWRlciBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyID10cmVlV2Fsay5nZXRBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyKCk7CisJCXRoaXMuYXR0cmlidXRlc1RyZWUgPSBhdHRyaWJ1dGVzVHJlZTsKKwkJQXR0cmlidXRlc05vZGVQcm92aWRlciBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyID0gdHJlZVdhbGsKKwkJCQkuZ2V0QXR0cmlidXRlc05vZGVQcm92aWRlcigpOwogCQl0aGlzLmdsb2JhbE5vZGUgPSBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyICE9IG51bGwKIAkJCQk/IGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIuZ2V0R2xvYmFsQXR0cmlidXRlc05vZGUoKSA6IG51bGw7CiAJCXRoaXMuaW5mb05vZGUgPSBhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyICE9IG51bGwKIAkJCQk/IGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIuZ2V0SW5mb0F0dHJpYnV0ZXNOb2RlKCkgOiBudWxsOwogCiAJCUF0dHJpYnV0ZXNOb2RlIHJvb3ROb2RlID0gYXR0cmlidXRlc05vZGUodHJlZVdhbGssCi0JCQkJcm9vdE9mKAotCQkJCQkJdHJlZVdhbGsuZ2V0VHJlZShXb3JraW5nVHJlZUl0ZXJhdG9yLmNsYXNzKSksCi0JCQkJcm9vdE9mKAotCQkJCQkJdHJlZVdhbGsuZ2V0VHJlZShEaXJDYWNoZUl0ZXJhdG9yLmNsYXNzKSksCi0JCQkJcm9vdE9mKHRyZWVXYWxrCi0JCQkJCQkuZ2V0VHJlZShDYW5vbmljYWxUcmVlUGFyc2VyLmNsYXNzKSkpOworCQkJCXJvb3RPZih0cmVlV2Fsay5nZXRUcmVlKFdvcmtpbmdUcmVlSXRlcmF0b3IuY2xhc3MpKSwKKwkJCQlyb290T2YodHJlZVdhbGsuZ2V0VHJlZShEaXJDYWNoZUl0ZXJhdG9yLmNsYXNzKSksCisJCQkJcm9vdE9mKGF0dHJpYnV0ZXNUcmVlLmdldCgpKSk7CiAKIAkJZXhwYW5zaW9ucy5wdXQoQklOQVJZX1JVTEVfS0VZLCBCSU5BUllfUlVMRV9BVFRSSUJVVEVTKTsKIAkJZm9yIChBdHRyaWJ1dGVzTm9kZSBub2RlIDogbmV3IEF0dHJpYnV0ZXNOb2RlW10geyBnbG9iYWxOb2RlLCByb290Tm9kZSwKQEAgLTE1Miw3ICsxNDIsNyBAQCBwdWJsaWMgQXR0cmlidXRlcyBnZXRBdHRyaWJ1dGVzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJCQlpc0RpcmVjdG9yeSwKIAkJCQl0cmVlV2Fsay5nZXRUcmVlKFdvcmtpbmdUcmVlSXRlcmF0b3IuY2xhc3MpLAogCQkJCXRyZWVXYWxrLmdldFRyZWUoRGlyQ2FjaGVJdGVyYXRvci5jbGFzcyksCi0JCQkJdHJlZVdhbGsuZ2V0VHJlZShDYW5vbmljYWxUcmVlUGFyc2VyLmNsYXNzKSwKKwkJCQlhdHRyaWJ1dGVzVHJlZS5nZXQoKSwKIAkJCQlhdHRyaWJ1dGVzKTsKIAogCQkvLyBHZXRzIHRoZSBhdHRyaWJ1dGVzIGxvY2F0ZWQgaW4gdGhlIGdsb2JhbCBhdHRyaWJ1dGUgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL0RpZmZGb3JtYXR0ZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZGlmZi9EaWZmRm9ybWF0dGVyLmphdmEKaW5kZXggNDlkYTk1Yy4uMWE1Zjc0ZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaWZmL0RpZmZGb3JtYXR0ZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpZmYvRGlmZkZvcm1hdHRlci5qYXZhCkBAIC0xOCw2ICsxOCw3IEBACiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnkuQ2hhbmdlVHlwZS5SRU5BTUU7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnkuU2lkZS5ORVc7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQuZGlmZi5EaWZmRW50cnkuU2lkZS5PTEQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5PQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEg7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5lbmNvZGU7CiBpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5lbmNvZGVBU0NJSTsKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuRmlsZU1vZGUuR0lUTElOSzsKQEAgLTkwLDcgKzkxLDcgQEAgcHVibGljIGNsYXNzIERpZmZGb3JtYXR0ZXIgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKIAogCXByaXZhdGUgaW50IGNvbnRleHQgPSAzOwogCi0JcHJpdmF0ZSBpbnQgYWJicmV2aWF0aW9uTGVuZ3RoID0gNzsKKwlwcml2YXRlIGludCBhYmJyZXZpYXRpb25MZW5ndGggPSBPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEg7CiAKIAlwcml2YXRlIERpZmZBbGdvcml0aG0gZGlmZkFsZ29yaXRobTsKIApkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9kaXJjYWNoZS9EaXJDYWNoZUNoZWNrb3V0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpcmNhY2hlL0RpckNhY2hlQ2hlY2tvdXQuamF2YQppbmRleCBjOTA0YTc4Li4zZDUwYTgyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpcmNhY2hlL0RpckNhY2hlQ2hlY2tvdXQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2RpcmNhY2hlL0RpckNhY2hlQ2hlY2tvdXQuamF2YQpAQCAtNCw3ICs0LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCwgUm9nZXIgQy4gU29hcmVzIDxyb2dlcnNvYXJlc0BpbnRlbGluZXQuY29tLmJyPgogICogQ29weXJpZ2h0IChDKSAyMDA2LCBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIENocmlzaWFuIEhhbHN0cmljayA8Y2hyaXN0aWFuLmhhbHN0cmlja0BzYXAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDE5LTIwMjAsIEFuZHJlIEJvc3NlcnQgPGFuZHJlLmJvc3NlcnRAc2llbWVucy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTksIDIwMjAsIEFuZHJlIEJvc3NlcnQgPGFuZHJlLmJvc3NlcnRAc2llbWVucy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcsIDIwMjIsIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0yOTksNyArMzAwLDcgQEAgcHVibGljIHZvaWQgcHJlU2NhblR3b1RyZWVzKCkgdGhyb3dzIENvcnJ1cHRPYmplY3RFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAkJd2FsayA9IG5ldyBOYW1lQ29uZmxpY3RUcmVlV2FsayhyZXBvKTsKIAkJYnVpbGRlciA9IGRjLmJ1aWxkZXIoKTsKIAotCQlhZGRUcmVlKHdhbGssIGhlYWRDb21taXRUcmVlKTsKKwkJd2Fsay5zZXRIZWFkKGFkZFRyZWUod2FsaywgaGVhZENvbW1pdFRyZWUpKTsKIAkJYWRkVHJlZSh3YWxrLCBtZXJnZUNvbW1pdFRyZWUpOwogCQlpbnQgZGNpUG9zID0gd2Fsay5hZGRUcmVlKG5ldyBEaXJDYWNoZUJ1aWxkSXRlcmF0b3IoYnVpbGRlcikpOwogCQl3YWxrLmFkZFRyZWUod29ya2luZ1RyZWUpOwpAQCAtMzE1LDEzICszMTYsNiBAQCBwdWJsaWMgdm9pZCBwcmVTY2FuVHdvVHJlZXMoKSB0aHJvd3MgQ29ycnVwdE9iamVjdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCQl9CiAJfQogCi0JcHJpdmF0ZSB2b2lkIGFkZFRyZWUoVHJlZVdhbGsgdHcsIE9iamVjdElkIGlkKSB0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwgSW5jb3JyZWN0T2JqZWN0VHlwZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoaWQgPT0gbnVsbCkKLQkJCXR3LmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOwotCQllbHNlCi0JCQl0dy5hZGRUcmVlKGlkKTsKLQl9Ci0KIAkvKioKIAkgKiBTY2FuIGluZGV4IGFuZCBtZXJnZSB0cmVlIChubyBIRUFEKS4gVXNlZCBlLmcuIGZvciBpbml0aWFsIGNoZWNrb3V0IHdoZW4KIAkgKiB0aGVyZSBpcyBubyBoZWFkIHlldC4KQEAgLTM0MSw3ICszMzUsNyBAQCBwdWJsaWMgdm9pZCBwcmVzY2FuT25lVHJlZSgpCiAJCWJ1aWxkZXIgPSBkYy5idWlsZGVyKCk7CiAKIAkJd2FsayA9IG5ldyBOYW1lQ29uZmxpY3RUcmVlV2FsayhyZXBvKTsKLQkJYWRkVHJlZSh3YWxrLCBtZXJnZUNvbW1pdFRyZWUpOworCQl3YWxrLnNldEhlYWQoYWRkVHJlZSh3YWxrLCBtZXJnZUNvbW1pdFRyZWUpKTsKIAkJaW50IGRjaVBvcyA9IHdhbGsuYWRkVHJlZShuZXcgRGlyQ2FjaGVCdWlsZEl0ZXJhdG9yKGJ1aWxkZXIpKTsKIAkJd2Fsay5hZGRUcmVlKHdvcmtpbmdUcmVlKTsKIAkJd29ya2luZ1RyZWUuc2V0RGlyQ2FjaGVJdGVyYXRvcih3YWxrLCBkY2lQb3MpOwpAQCAtMzU2LDYgKzM1MCwxNCBAQCBwdWJsaWMgdm9pZCBwcmVzY2FuT25lVHJlZSgpCiAJCWNvbmZsaWN0cy5yZW1vdmVBbGwocmVtb3ZlZCk7CiAJfQogCisJcHJpdmF0ZSBpbnQgYWRkVHJlZShUcmVlV2FsayB0dywgT2JqZWN0SWQgaWQpIHRocm93cyBNaXNzaW5nT2JqZWN0RXhjZXB0aW9uLAorCQkJSW5jb3JyZWN0T2JqZWN0VHlwZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQlpZiAoaWQgPT0gbnVsbCkgeworCQkJcmV0dXJuIHR3LmFkZFRyZWUobmV3IEVtcHR5VHJlZUl0ZXJhdG9yKCkpOworCQl9CisJCXJldHVybiB0dy5hZGRUcmVlKGlkKTsKKwl9CisKIAkvKioKIAkgKiBQcm9jZXNzaW5nIGFuIGVudHJ5IGluIHRoZSBjb250ZXh0IG9mIHtAbGluayAjcHJlc2Nhbk9uZVRyZWUoKX0gd2hlbiBvbmx5CiAJICogb25lIHRyZWUgaXMgZ2l2ZW4KQEAgLTM4MiwxNyArMzg0LDE0IEBAIHZvaWQgcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgbSwgRGlyQ2FjaGVCdWlsZEl0ZXJhdG9yIGksCiAJCQkJCQkvLyBmYWlsT25Db25mbGljdCBpcyBmYWxzZS4gUHV0dGluZyBzb21ldGhpbmcgdG8gY29uZmxpY3RzCiAJCQkJCQkvLyB3b3VsZCBtZWFuIHdlIGRlbGV0ZSBpdC4gSW5zdGVhZCB3ZSB3YW50IHRoZSBtZXJnZUNvbW1pdAogCQkJCQkJLy8gY29udGVudCB0byBiZSBjaGVja2VkIG91dC4KLQkJCQkJCXVwZGF0ZShtLmdldEVudHJ5UGF0aFN0cmluZygpLCBtLmdldEVudHJ5T2JqZWN0SWQoKSwKLQkJCQkJCQkJbS5nZXRFbnRyeUZpbGVNb2RlKCkpOworCQkJCQkJdXBkYXRlKG0pOwogCQkJCQl9CiAJCQkJfSBlbHNlCi0JCQkJCXVwZGF0ZShtLmdldEVudHJ5UGF0aFN0cmluZygpLCBtLmdldEVudHJ5T2JqZWN0SWQoKSwKLQkJCQkJCW0uZ2V0RW50cnlGaWxlTW9kZSgpKTsKKwkJCQkJdXBkYXRlKG0pOwogCQkJfSBlbHNlIGlmIChmID09IG51bGwgfHwgIW0uaWRFcXVhbChpKSkgewogCQkJCS8vIFRoZSB3b3JraW5nIHRyZWUgZmlsZSBpcyBtaXNzaW5nIG9yIHRoZSBtZXJnZSBjb250ZW50IGRpZmZlcnMKIAkJCQkvLyBmcm9tIGluZGV4IGNvbnRlbnQKLQkJCQl1cGRhdGUobS5nZXRFbnRyeVBhdGhTdHJpbmcoKSwgbS5nZXRFbnRyeU9iamVjdElkKCksCi0JCQkJCQltLmdldEVudHJ5RmlsZU1vZGUoKSk7CisJCQkJdXBkYXRlKG0pOwogCQkJfSBlbHNlIGlmIChpLmdldERpckNhY2hlRW50cnkoKSAhPSBudWxsKSB7CiAJCQkJLy8gVGhlIGluZGV4IGNvbnRhaW5zIGEgZmlsZSAoYW5kIG5vdCBhIGZvbGRlcikKIAkJCQlpZiAoZi5pc01vZGlmaWVkKGkuZ2V0RGlyQ2FjaGVFbnRyeSgpLCB0cnVlLApAQCAtNDAwLDggKzM5OSw3IEBAIHZvaWQgcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgbSwgRGlyQ2FjaGVCdWlsZEl0ZXJhdG9yIGksCiAJCQkJCQl8fCBpLmdldERpckNhY2hlRW50cnkoKS5nZXRTdGFnZSgpICE9IDApCiAJCQkJCS8vIFRoZSB3b3JraW5nIHRyZWUgZmlsZSBpcyBkaXJ0eSBvciB0aGUgaW5kZXggY29udGFpbnMgYQogCQkJCQkvLyBjb25mbGljdAotCQkJCQl1cGRhdGUobS5nZXRFbnRyeVBhdGhTdHJpbmcoKSwgbS5nZXRFbnRyeU9iamVjdElkKCksCi0JCQkJCQkJbS5nZXRFbnRyeUZpbGVNb2RlKCkpOworCQkJCQl1cGRhdGUobSk7CiAJCQkJZWxzZSB7CiAJCQkJCS8vIHVwZGF0ZSB0aGUgdGltZXN0YW1wIG9mIHRoZSBpbmRleCB3aXRoIHRoZSBvbmUgZnJvbSB0aGUKIAkJCQkJLy8gZmlsZSBpZiBub3Qgc2V0LCBhcyB3ZSBhcmUgc3VyZSB0byBiZSBpbiBzeW5jIGhlcmUuCkBAIC04MDIsNyArODAwLDcgQEAgdm9pZCBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBoLCBDYW5vbmljYWxUcmVlUGFyc2VyIG0sCiAJCQkJaWYgKGYgIT0gbnVsbCAmJiBpc01vZGlmaWVkU3VidHJlZV9JbmRleFdvcmtpbmd0cmVlKG5hbWUpKSB7CiAJCQkJCWNvbmZsaWN0KG5hbWUsIGRjZSwgaCwgbSk7IC8vIDEKIAkJCQl9IGVsc2UgewotCQkJCQl1cGRhdGUobmFtZSwgbUlkLCBtTW9kZSk7IC8vIDIKKwkJCQkJdXBkYXRlKDEsIG5hbWUsIG1JZCwgbU1vZGUpOyAvLyAyCiAJCQkJfQogCiAJCQkJYnJlYWs7CkBAIC04MjgsNyArODI2LDcgQEAgdm9pZCBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBoLCBDYW5vbmljYWxUcmVlUGFyc2VyIG0sCiAJCQkJLy8gYXJlIGZvdW5kIGxhdGVyCiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4RDBGOiAvLyAxOQotCQkJCXVwZGF0ZShuYW1lLCBtSWQsIG1Nb2RlKTsKKwkJCQl1cGRhdGUoMSwgbmFtZSwgbUlkLCBtTW9kZSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDB4REYwOiAvLyBjb25mbGljdCB3aXRob3V0IGEgcnVsZQogCQkJY2FzZSAweDBGRDogLy8gMTUKQEAgLTgzOSw3ICs4MzcsNyBAQCB2b2lkIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGgsIENhbm9uaWNhbFRyZWVQYXJzZXIgbSwKIAkJCQkJaWYgKGlzTW9kaWZpZWRTdWJ0cmVlX0luZGV4V29ya2luZ3RyZWUobmFtZSkpCiAJCQkJCQljb25mbGljdChuYW1lLCBkY2UsIGgsIG0pOyAvLyA4CiAJCQkJCWVsc2UKLQkJCQkJCXVwZGF0ZShuYW1lLCBtSWQsIG1Nb2RlKTsgLy8gNworCQkJCQkJdXBkYXRlKDEsIG5hbWUsIG1JZCwgbU1vZGUpOyAvLyA3CiAJCQkJfSBlbHNlCiAJCQkJCWNvbmZsaWN0KG5hbWUsIGRjZSwgaCwgbSk7IC8vIDkKIAkJCQlicmVhazsKQEAgLTg1OSw3ICs4NTcsNyBAQCB2b2lkIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGgsIENhbm9uaWNhbFRyZWVQYXJzZXIgbSwKIAkJCQlicmVhazsKIAkJCWNhc2UgMHgwREY6IC8vIDE2IDE3CiAJCQkJaWYgKCFpc01vZGlmaWVkU3VidHJlZV9JbmRleFdvcmtpbmd0cmVlKG5hbWUpKQotCQkJCQl1cGRhdGUobmFtZSwgbUlkLCBtTW9kZSk7CisJCQkJCXVwZGF0ZSgxLCBuYW1lLCBtSWQsIG1Nb2RlKTsKIAkJCQllbHNlCiAJCQkJCWNvbmZsaWN0KG5hbWUsIGRjZSwgaCwgbSk7CiAJCQkJYnJlYWs7CkBAIC05MjksNyArOTI3LDcgQEAgdm9pZCBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBoLCBDYW5vbmljYWxUcmVlUGFyc2VyIG0sCiAJCQkJLy8gQXQgbGVhc3Qgb25lIG9mIEhlYWQsIEluZGV4LCBNZXJnZSBpcyBub3QgZW1wdHkKIAkJCQkvLyAtPiBvbmx5IE1lcmdlIGNvbnRhaW5zIHNvbWV0aGluZyBmb3IgdGhpcyBwYXRoLiBVc2UgaXQhCiAJCQkJLy8gUG90ZW50aWFsbHkgdXBkYXRlIHRoZSBmaWxlCi0JCQkJdXBkYXRlKG5hbWUsIG1JZCwgbU1vZGUpOyAvLyAxCisJCQkJdXBkYXRlKDEsIG5hbWUsIG1JZCwgbU1vZGUpOyAvLyAxCiAJCQllbHNlIGlmIChtID09IG51bGwpCiAJCQkJLy8gTm90aGluZyBpbiBNZXJnZQogCQkJCS8vIFNvbWV0aGluZyBpbiBIZWFkCkBAIC05NDcsNyArOTQ1LDcgQEAgZWxzZSBpZiAobSA9PSBudWxsKQogCQkJCS8vIGZpbmQgaW4gTWVyZ2UuIFBvdGVudGlhbGx5IHVwZGF0ZXMgdGhlIGZpbGUuCiAJCQkJaWYgKGVxdWFsSWRBbmRNb2RlKGhJZCwgaE1vZGUsIG1JZCwgbU1vZGUpKSB7CiAJCQkJCWlmIChpbml0aWFsQ2hlY2tvdXQgfHwgZm9yY2UpIHsKLQkJCQkJCXVwZGF0ZShuYW1lLCBtSWQsIG1Nb2RlKTsKKwkJCQkJCXVwZGF0ZSgxLCBuYW1lLCBtSWQsIG1Nb2RlKTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCWtlZXAobmFtZSwgZGNlLCBmKTsKIAkJCQkJfQpAQCAtMTEzMSw3ICsxMTI5LDcgQEAgJiYgaXNNb2RpZmllZF9JbmRleFRyZWUobmFtZSwgaUlkLCBpTW9kZSwgbUlkLCBtTW9kZSwKIAogCQkJCQkJLy8gVE9ETyBjaGVjayB0aGF0IHdlIGRvbid0IG92ZXJ3cml0ZSBzb21lIHVuc2F2ZWQKIAkJCQkJCS8vIGZpbGUgY29udGVudAotCQkJCQkJdXBkYXRlKG5hbWUsIG1JZCwgbU1vZGUpOworCQkJCQkJdXBkYXRlKDEsIG5hbWUsIG1JZCwgbU1vZGUpOwogCQkJCQl9IGVsc2UgaWYgKGRjZSAhPSBudWxsCiAJCQkJCQkJJiYgKGYgIT0gbnVsbCAmJiBmLmlzTW9kaWZpZWQoZGNlLCB0cnVlLAogCQkJCQkJCQkJdGhpcy53YWxrLmdldE9iamVjdFJlYWRlcigpKSkpIHsKQEAgLTExNTAsNyArMTE0OCw3IEBAICYmIGlzTW9kaWZpZWRfSW5kZXhUcmVlKG5hbWUsIGlJZCwgaU1vZGUsIG1JZCwgbU1vZGUsCiAJCQkJCQkvLyAtPiBTdGFuZGFyZCBjYXNlIHdoZW4gc3dpdGNoaW5nIGJldHdlZW4gYnJhbmNoZXM6CiAJCQkJCQkvLyBOb3RoaW5nIG5ldyBpbiBpbmRleCBidXQgc29tZXRoaW5nIGRpZmZlcmVudCBpbgogCQkJCQkJLy8gTWVyZ2UuIFVwZGF0ZSBpbmRleCBhbmQgZmlsZQotCQkJCQkJdXBkYXRlKG5hbWUsIG1JZCwgbU1vZGUpOworCQkJCQkJdXBkYXRlKDEsIG5hbWUsIG1JZCwgbU1vZGUpOwogCQkJCQl9CiAJCQkJfSBlbHNlIHsKIAkJCQkJLy8gSGVhZCBkaWZmZXJzIGZyb20gaW5kZXggb3IgbWVyZ2UgaXMgc2FtZSBhcyBpbmRleApAQCAtMTIzNywxMiArMTIzNSwxNyBAQCBwcml2YXRlIHZvaWQgcmVtb3ZlKFN0cmluZyBwYXRoKSB7CiAJCXJlbW92ZWQuYWRkKHBhdGgpOwogCX0KIAotCXByaXZhdGUgdm9pZCB1cGRhdGUoU3RyaW5nIHBhdGgsIE9iamVjdElkIG1JZCwgRmlsZU1vZGUgbW9kZSkKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJcHJpdmF0ZSB2b2lkIHVwZGF0ZShDYW5vbmljYWxUcmVlUGFyc2VyIHRyZWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXVwZGF0ZSgwLCB0cmVlLmdldEVudHJ5UGF0aFN0cmluZygpLCB0cmVlLmdldEVudHJ5T2JqZWN0SWQoKSwKKwkJCQl0cmVlLmdldEVudHJ5RmlsZU1vZGUoKSk7CisJfQorCisJcHJpdmF0ZSB2b2lkIHVwZGF0ZShpbnQgaW5kZXgsIFN0cmluZyBwYXRoLCBPYmplY3RJZCBtSWQsCisJCQlGaWxlTW9kZSBtb2RlKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQlpZiAoIUZpbGVNb2RlLlRSRUUuZXF1YWxzKG1vZGUpKSB7CiAJCQl1cGRhdGVkLnB1dChwYXRoLCBuZXcgQ2hlY2tvdXRNZXRhZGF0YSgKLQkJCQkJd2Fsay5nZXRFb2xTdHJlYW1UeXBlKENIRUNLT1VUX09QKSwKLQkJCQkJd2Fsay5nZXRGaWx0ZXJDb21tYW5kKENvbnN0YW50cy5BVFRSX0ZJTFRFUl9UWVBFX1NNVURHRSkpKTsKKwkJCQkJd2Fsay5nZXRDaGVja291dEVvbFN0cmVhbVR5cGUoaW5kZXgpLAorCQkJCQl3YWxrLmdldFNtdWRnZUNvbW1hbmQoaW5kZXgpKSk7CiAKIAkJCURpckNhY2hlRW50cnkgZW50cnkgPSBuZXcgRGlyQ2FjaGVFbnRyeShwYXRoLCBEaXJDYWNoZUVudHJ5LlNUQUdFXzApOwogCQkJZW50cnkuc2V0T2JqZWN0SWQobUlkKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9CYXJlU3VwZXJwcm9qZWN0V3JpdGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vQmFyZVN1cGVycHJvamVjdFdyaXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2NjI2YWUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vQmFyZVN1cGVycHJvamVjdFdyaXRlci5qYXZhCkBAIC0wLDAgKzEsMzE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxLCBHb29nbGUgSW5jLiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87CisKK2ltcG9ydCBzdGF0aWMgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84OworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuUl9UQUdTOworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5ldC5VUkk7CitpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CisKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuR2l0QVBJRXhjZXB0aW9uOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5KR2l0SW50ZXJuYWxFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZS5EaXJDYWNoZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlQnVpbGRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmRpcmNhY2hlLkRpckNhY2hlRW50cnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLlJlcG9Db21tYW5kLk1hbmlmZXN0RXJyb3JFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLlJlcG9Db21tYW5kLlJlbW90ZUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLlJlcG9Db21tYW5kLlJlbW90ZVJlYWRlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uUmVwb0NvbW1hbmQuUmVtb3RlVW5hdmFpbGFibGVFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLlJlcG9Qcm9qZWN0LkNvcHlGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5SZXBvUHJvamVjdC5MaW5rRmlsZTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uaW50ZXJuYWwuUmVwb1RleHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db21taXRCdWlsZGVyOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuRmlsZU1vZGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SW5zZXJ0ZXI7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUGVyc29uSWRlbnQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZlVwZGF0ZS5SZXN1bHQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZXYWxrOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GaWxlVXRpbHM7CisKKy8qKgorICogV3JpdGVzIC5naXRtb2R1bGVzIGFuZCBnaXRsaW5rcyBvZiBwYXJzZWQgbWFuaWZlc3QgcHJvamVjdHMgaW50byBhIGJhcmUKKyAqIHJlcG9zaXRvcnkuCisgKgorICogVG8gd3JpdGUgb24gYSByZWd1bGFyIHJlcG9zaXRvcnksIHNlZSB7QGxpbmsgUmVndWxhclN1cGVycHJvamVjdFdyaXRlcn0uCisgKi8KK2NsYXNzIEJhcmVTdXBlcnByb2plY3RXcml0ZXIgeworCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NLX0ZBSUxVUkVfTUFYX1JFVFJJRVMgPSA1OworCisJLy8gUmV0cnkgZXhwb25lbnRpYWxseSB3aXRoIGRlbGF5cyBpbiB0aGlzIHJhbmdlCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0tfRkFJTFVSRV9NSU5fUkVUUllfREVMQVlfTUlMTElTID0gNTA7CisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DS19GQUlMVVJFX01BWF9SRVRSWV9ERUxBWV9NSUxMSVMgPSA1MDAwOworCisJcHJpdmF0ZSBmaW5hbCBSZXBvc2l0b3J5IHJlcG87CisKKwlwcml2YXRlIGZpbmFsIFVSSSB0YXJnZXRVcmk7CisKKwlwcml2YXRlIGZpbmFsIFN0cmluZyB0YXJnZXRCcmFuY2g7CisKKwlwcml2YXRlIGZpbmFsIFJlbW90ZVJlYWRlciBjYWxsYmFjazsKKworCXByaXZhdGUgZmluYWwgQmFyZVdyaXRlckNvbmZpZyBjb25maWc7CisKKwlwcml2YXRlIGZpbmFsIFBlcnNvbklkZW50IGF1dGhvcjsKKworCXByaXZhdGUgTGlzdDxFeHRyYUNvbnRlbnQ+IGV4dHJhQ29udGVudHM7CisKKwlzdGF0aWMgY2xhc3MgQmFyZVdyaXRlckNvbmZpZyB7CisJCWJvb2xlYW4gaWdub3JlUmVtb3RlRmFpbHVyZXMgPSBmYWxzZTsKKworCQlib29sZWFuIHJlY29yZFJlbW90ZUJyYW5jaCA9IHRydWU7CisKKwkJYm9vbGVhbiByZWNvcmRTdWJtb2R1bGVMYWJlbHMgPSB0cnVlOworCisJCWJvb2xlYW4gcmVjb3JkU2hhbGxvd1N1Ym1vZHVsZXMgPSB0cnVlOworCisJCXN0YXRpYyBCYXJlV3JpdGVyQ29uZmlnIGdldERlZmF1bHQoKSB7CisJCQlyZXR1cm4gbmV3IEJhcmVXcml0ZXJDb25maWcoKTsKKwkJfQorCisJCXByaXZhdGUgQmFyZVdyaXRlckNvbmZpZygpIHsKKwkJfQorCX0KKworCXN0YXRpYyBjbGFzcyBFeHRyYUNvbnRlbnQgeworCQlmaW5hbCBTdHJpbmcgcGF0aDsKKworCQlmaW5hbCBTdHJpbmcgY29udGVudDsKKworCQlFeHRyYUNvbnRlbnQoU3RyaW5nIHBhdGgsIFN0cmluZyBjb250ZW50KSB7CisJCQl0aGlzLnBhdGggPSBwYXRoOworCQkJdGhpcy5jb250ZW50ID0gY29udGVudDsKKwkJfQorCX0KKworCUJhcmVTdXBlcnByb2plY3RXcml0ZXIoUmVwb3NpdG9yeSByZXBvLCBVUkkgdGFyZ2V0VXJpLAorCQkJU3RyaW5nIHRhcmdldEJyYW5jaCwKKwkJCVBlcnNvbklkZW50IGF1dGhvciwgUmVtb3RlUmVhZGVyIGNhbGxiYWNrLAorCQkJQmFyZVdyaXRlckNvbmZpZyBjb25maWcsCisJCQlMaXN0PEV4dHJhQ29udGVudD4gZXh0cmFDb250ZW50cykgeworCQlhc3NlcnQgKHJlcG8uaXNCYXJlKCkpOworCQl0aGlzLnJlcG8gPSByZXBvOworCQl0aGlzLnRhcmdldFVyaSA9IHRhcmdldFVyaTsKKwkJdGhpcy50YXJnZXRCcmFuY2ggPSB0YXJnZXRCcmFuY2g7CisJCXRoaXMuYXV0aG9yID0gYXV0aG9yOworCQl0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7CisJCXRoaXMuY29uZmlnID0gY29uZmlnOworCQl0aGlzLmV4dHJhQ29udGVudHMgPSBleHRyYUNvbnRlbnRzOworCX0KKworCVJldkNvbW1pdCB3cml0ZShMaXN0PFJlcG9Qcm9qZWN0PiByZXBvUHJvamVjdHMpCisJCQl0aHJvd3MgR2l0QVBJRXhjZXB0aW9uIHsKKwkJRGlyQ2FjaGUgaW5kZXggPSBEaXJDYWNoZS5uZXdJbkNvcmUoKTsKKwkJT2JqZWN0SW5zZXJ0ZXIgaW5zZXJ0ZXIgPSByZXBvLm5ld09iamVjdEluc2VydGVyKCk7CisKKwkJdHJ5IChSZXZXYWxrIHJ3ID0gbmV3IFJldldhbGsocmVwbykpIHsKKwkJCXByZXBhcmVJbmRleChyZXBvUHJvamVjdHMsIGluZGV4LCBpbnNlcnRlcik7CisJCQlPYmplY3RJZCB0cmVlSWQgPSBpbmRleC53cml0ZVRyZWUoaW5zZXJ0ZXIpOworCQkJbG9uZyBwcmV2RGVsYXkgPSAwOworCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBMT0NLX0ZBSUxVUkVfTUFYX1JFVFJJRVMgLSAxOyBpKyspIHsKKwkJCQl0cnkgeworCQkJCQlyZXR1cm4gY29tbWl0VHJlZU9uQ3VycmVudFRpcChpbnNlcnRlciwgcncsIHRyZWVJZCk7CisJCQkJfSBjYXRjaCAoQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbiBlKSB7CisJCQkJCXByZXZEZWxheSA9IEZpbGVVdGlscy5kZWxheShwcmV2RGVsYXksCisJCQkJCQkJTE9DS19GQUlMVVJFX01JTl9SRVRSWV9ERUxBWV9NSUxMSVMsCisJCQkJCQkJTE9DS19GQUlMVVJFX01BWF9SRVRSWV9ERUxBWV9NSUxMSVMpOworCQkJCQlUaHJlYWQuc2xlZXAocHJldkRlbGF5KTsKKwkJCQkJcmVwby5nZXRSZWZEYXRhYmFzZSgpLnJlZnJlc2goKTsKKwkJCQl9CisJCQl9CisJCQkvLyBJbiB0aGUgbGFzdCB0cnksIGp1c3QgcHJvcGFnYXRlIHRoZSBleGNlcHRpb25zCisJCQlyZXR1cm4gY29tbWl0VHJlZU9uQ3VycmVudFRpcChpbnNlcnRlciwgcncsIHRyZWVJZCk7CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIHwgSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgeworCQkJdGhyb3cgbmV3IE1hbmlmZXN0RXJyb3JFeGNlcHRpb24oZSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgcHJlcGFyZUluZGV4KExpc3Q8UmVwb1Byb2plY3Q+IHByb2plY3RzLCBEaXJDYWNoZSBpbmRleCwKKwkJCU9iamVjdEluc2VydGVyIGluc2VydGVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvbiB7CisJCUNvbmZpZyBjZmcgPSBuZXcgQ29uZmlnKCk7CisJCVN0cmluZ0J1aWxkZXIgYXR0cmlidXRlcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCURpckNhY2hlQnVpbGRlciBidWlsZGVyID0gaW5kZXguYnVpbGRlcigpOworCQlmb3IgKFJlcG9Qcm9qZWN0IHByb2ogOiBwcm9qZWN0cykgeworCQkJU3RyaW5nIG5hbWUgPSBwcm9qLmdldE5hbWUoKTsKKwkJCVN0cmluZyBwYXRoID0gcHJvai5nZXRQYXRoKCk7CisJCQlTdHJpbmcgdXJsID0gcHJvai5nZXRVcmwoKTsKKwkJCU9iamVjdElkIG9iamVjdElkOworCQkJaWYgKE9iamVjdElkLmlzSWQocHJvai5nZXRSZXZpc2lvbigpKSkgeworCQkJCW9iamVjdElkID0gT2JqZWN0SWQuZnJvbVN0cmluZyhwcm9qLmdldFJldmlzaW9uKCkpOworCQkJfSBlbHNlIHsKKwkJCQlvYmplY3RJZCA9IGNhbGxiYWNrLnNoYTEodXJsLCBwcm9qLmdldFJldmlzaW9uKCkpOworCQkJCWlmIChvYmplY3RJZCA9PSBudWxsICYmICFjb25maWcuaWdub3JlUmVtb3RlRmFpbHVyZXMpIHsKKwkJCQkJdGhyb3cgbmV3IFJlbW90ZVVuYXZhaWxhYmxlRXhjZXB0aW9uKHVybCk7CisJCQkJfQorCQkJCWlmIChjb25maWcucmVjb3JkUmVtb3RlQnJhbmNoKSB7CisJCQkJCS8vICJicmFuY2giIGZpZWxkIGlzIG9ubHkgZm9yIG5vbi10YWcgcmVmZXJlbmNlcy4KKwkJCQkJLy8gS2VlcCB0YWdzIGluICJyZWYiIGZpZWxkIGFzIGhpbnQgZm9yIG90aGVyIHRvb2xzLgorCQkJCQlTdHJpbmcgZmllbGQgPSBwcm9qLmdldFJldmlzaW9uKCkuc3RhcnRzV2l0aChSX1RBR1MpID8gInJlZiIgLy8kTk9OLU5MUy0xJAorCQkJCQkJCTogImJyYW5jaCI7IC8vJE5PTi1OTFMtMSQKKwkJCQkJY2ZnLnNldFN0cmluZygic3VibW9kdWxlIiwgbmFtZSwgZmllbGQsIC8vJE5PTi1OTFMtMSQKKwkJCQkJCQlwcm9qLmdldFJldmlzaW9uKCkpOworCQkJCX0KKworCQkJCWlmIChjb25maWcucmVjb3JkU2hhbGxvd1N1Ym1vZHVsZXMKKwkJCQkJCSYmIHByb2ouZ2V0UmVjb21tZW5kU2hhbGxvdygpICE9IG51bGwpIHsKKwkJCQkJLy8gVGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24gaXMgbG9zaW5nIGluZm9ybWF0aW9uLgorCQkJCQkvLyBBcyB0aGUgcmVwbyBtYW5pZmVzdHMgc3RvcmVzIHRoZSByZWNvbW1lbmRlZAorCQkJCQkvLyBkZXB0aCBpbiB0aGUgJ2Nsb25lLWRlcHRoJyBmaWVsZCwgd2hpbGUKKwkJCQkJLy8gZ2l0IGNvcmUgb25seSB1c2VzIGEgYmluYXJ5ICdzaGFsbG93ID0gdHJ1ZS9mYWxzZScKKwkJCQkJLy8gaGludCwgd2UnbGwgbWFwIGFueSBkZXB0aCB0byAnc2hhbGxvdyA9IHRydWUnCisJCQkJCWNmZy5zZXRCb29sZWFuKCJzdWJtb2R1bGUiLCBuYW1lLCAic2hhbGxvdyIsIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAorCQkJCQkJCXRydWUpOworCQkJCX0KKwkJCX0KKwkJCWlmIChjb25maWcucmVjb3JkU3VibW9kdWxlTGFiZWxzKSB7CisJCQkJU3RyaW5nQnVpbGRlciByZWMgPSBuZXcgU3RyaW5nQnVpbGRlcigpOworCQkJCXJlYy5hcHBlbmQoIi8iKTsgLy8kTk9OLU5MUy0xJAorCQkJCXJlYy5hcHBlbmQocGF0aCk7CisJCQkJZm9yIChTdHJpbmcgZ3JvdXAgOiBwcm9qLmdldEdyb3VwcygpKSB7CisJCQkJCXJlYy5hcHBlbmQoIiAiKTsgLy8kTk9OLU5MUy0xJAorCQkJCQlyZWMuYXBwZW5kKGdyb3VwKTsKKwkJCQl9CisJCQkJcmVjLmFwcGVuZCgiXG4iKTsgLy8kTk9OLU5MUy0xJAorCQkJCWF0dHJpYnV0ZXMuYXBwZW5kKHJlYy50b1N0cmluZygpKTsKKwkJCX0KKworCQkJVVJJIHN1Ym1vZFVybCA9IFVSSS5jcmVhdGUodXJsKTsKKwkJCWlmICh0YXJnZXRVcmkgIT0gbnVsbCkgeworCQkJCXN1Ym1vZFVybCA9IFJlcG9Db21tYW5kLnJlbGF0aXZpemUodGFyZ2V0VXJpLCBzdWJtb2RVcmwpOworCQkJfQorCQkJY2ZnLnNldFN0cmluZygic3VibW9kdWxlIiwgbmFtZSwgInBhdGgiLCBwYXRoKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQljZmcuc2V0U3RyaW5nKCJzdWJtb2R1bGUiLCBuYW1lLCAidXJsIiwgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCisJCQkJCXN1Ym1vZFVybC50b1N0cmluZygpKTsKKworCQkJLy8gY3JlYXRlIGdpdGxpbmsKKwkJCWlmIChvYmplY3RJZCAhPSBudWxsKSB7CisJCQkJRGlyQ2FjaGVFbnRyeSBkY0VudHJ5ID0gbmV3IERpckNhY2hlRW50cnkocGF0aCk7CisJCQkJZGNFbnRyeS5zZXRPYmplY3RJZChvYmplY3RJZCk7CisJCQkJZGNFbnRyeS5zZXRGaWxlTW9kZShGaWxlTW9kZS5HSVRMSU5LKTsKKwkJCQlidWlsZGVyLmFkZChkY0VudHJ5KTsKKworCQkJCWZvciAoQ29weUZpbGUgY29weWZpbGUgOiBwcm9qLmdldENvcHlGaWxlcygpKSB7CisJCQkJCVJlbW90ZUZpbGUgcmYgPSBjYWxsYmFjay5yZWFkRmlsZVdpdGhNb2RlKHVybCwKKwkJCQkJCQlwcm9qLmdldFJldmlzaW9uKCksIGNvcHlmaWxlLnNyYyk7CisJCQkJCW9iamVjdElkID0gaW5zZXJ0ZXIuaW5zZXJ0KENvbnN0YW50cy5PQkpfQkxPQiwKKwkJCQkJCQlyZi5nZXRDb250ZW50cygpKTsKKwkJCQkJZGNFbnRyeSA9IG5ldyBEaXJDYWNoZUVudHJ5KGNvcHlmaWxlLmRlc3QpOworCQkJCQlkY0VudHJ5LnNldE9iamVjdElkKG9iamVjdElkKTsKKwkJCQkJZGNFbnRyeS5zZXRGaWxlTW9kZShyZi5nZXRGaWxlTW9kZSgpKTsKKwkJCQkJYnVpbGRlci5hZGQoZGNFbnRyeSk7CisJCQkJfQorCQkJCWZvciAoTGlua0ZpbGUgbGlua2ZpbGUgOiBwcm9qLmdldExpbmtGaWxlcygpKSB7CisJCQkJCVN0cmluZyBsaW5rOworCQkJCQlpZiAobGlua2ZpbGUuZGVzdC5jb250YWlucygiLyIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQkJCWxpbmsgPSBGaWxlVXRpbHMucmVsYXRpdml6ZUdpdFBhdGgoCisJCQkJCQkJCWxpbmtmaWxlLmRlc3Quc3Vic3RyaW5nKDAsCisJCQkJCQkJCQkJbGlua2ZpbGUuZGVzdC5sYXN0SW5kZXhPZignLycpKSwKKwkJCQkJCQkJcHJvai5nZXRQYXRoKCkgKyAiLyIgKyBsaW5rZmlsZS5zcmMpOyAvLyROT04tTkxTLTEkCisJCQkJCX0gZWxzZSB7CisJCQkJCQlsaW5rID0gcHJvai5nZXRQYXRoKCkgKyAiLyIgKyBsaW5rZmlsZS5zcmM7IC8vJE5PTi1OTFMtMSQKKwkJCQkJfQorCisJCQkJCW9iamVjdElkID0gaW5zZXJ0ZXIuaW5zZXJ0KENvbnN0YW50cy5PQkpfQkxPQiwKKwkJCQkJCQlsaW5rLmdldEJ5dGVzKFVURl84KSk7CisJCQkJCWRjRW50cnkgPSBuZXcgRGlyQ2FjaGVFbnRyeShsaW5rZmlsZS5kZXN0KTsKKwkJCQkJZGNFbnRyeS5zZXRPYmplY3RJZChvYmplY3RJZCk7CisJCQkJCWRjRW50cnkuc2V0RmlsZU1vZGUoRmlsZU1vZGUuU1lNTElOSyk7CisJCQkJCWJ1aWxkZXIuYWRkKGRjRW50cnkpOworCQkJCX0KKwkJCX0KKwkJfQorCQlTdHJpbmcgY29udGVudCA9IGNmZy50b1RleHQoKTsKKworCQkvLyBjcmVhdGUgYSBuZXcgRGlyQ2FjaGVFbnRyeSBmb3IgLmdpdG1vZHVsZXMgZmlsZS4KKwkJRGlyQ2FjaGVFbnRyeSBkY0VudHJ5ID0gbmV3IERpckNhY2hlRW50cnkoCisJCQkJQ29uc3RhbnRzLkRPVF9HSVRfTU9EVUxFUyk7CisJCU9iamVjdElkIG9iamVjdElkID0gaW5zZXJ0ZXIuaW5zZXJ0KENvbnN0YW50cy5PQkpfQkxPQiwKKwkJCQljb250ZW50LmdldEJ5dGVzKFVURl84KSk7CisJCWRjRW50cnkuc2V0T2JqZWN0SWQob2JqZWN0SWQpOworCQlkY0VudHJ5LnNldEZpbGVNb2RlKEZpbGVNb2RlLlJFR1VMQVJfRklMRSk7CisJCWJ1aWxkZXIuYWRkKGRjRW50cnkpOworCisJCWlmIChjb25maWcucmVjb3JkU3VibW9kdWxlTGFiZWxzKSB7CisJCQkvLyBjcmVhdGUgYSBuZXcgRGlyQ2FjaGVFbnRyeSBmb3IgLmdpdGF0dHJpYnV0ZXMgZmlsZS4KKwkJCURpckNhY2hlRW50cnkgZGNFbnRyeUF0dHIgPSBuZXcgRGlyQ2FjaGVFbnRyeSgKKwkJCQkJQ29uc3RhbnRzLkRPVF9HSVRfQVRUUklCVVRFUyk7CisJCQlPYmplY3RJZCBhdHRySWQgPSBpbnNlcnRlci5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLAorCQkJCQlhdHRyaWJ1dGVzLnRvU3RyaW5nKCkuZ2V0Qnl0ZXMoVVRGXzgpKTsKKwkJCWRjRW50cnlBdHRyLnNldE9iamVjdElkKGF0dHJJZCk7CisJCQlkY0VudHJ5QXR0ci5zZXRGaWxlTW9kZShGaWxlTW9kZS5SRUdVTEFSX0ZJTEUpOworCQkJYnVpbGRlci5hZGQoZGNFbnRyeUF0dHIpOworCQl9CisKKwkJZm9yIChFeHRyYUNvbnRlbnQgZWMgOiBleHRyYUNvbnRlbnRzKSB7CisJCQlEaXJDYWNoZUVudHJ5IGV4dHJhRGNFbnRyeSA9IG5ldyBEaXJDYWNoZUVudHJ5KGVjLnBhdGgpOworCisJCQlPYmplY3RJZCBvaWQgPSBpbnNlcnRlci5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLAorCQkJCQllYy5jb250ZW50LmdldEJ5dGVzKFVURl84KSk7CisJCQlleHRyYURjRW50cnkuc2V0T2JqZWN0SWQob2lkKTsKKwkJCWV4dHJhRGNFbnRyeS5zZXRGaWxlTW9kZShGaWxlTW9kZS5SRUdVTEFSX0ZJTEUpOworCQkJYnVpbGRlci5hZGQoZXh0cmFEY0VudHJ5KTsKKwkJfQorCisJCWJ1aWxkZXIuZmluaXNoKCk7CisJfQorCisJcHJpdmF0ZSBSZXZDb21taXQgY29tbWl0VHJlZU9uQ3VycmVudFRpcChPYmplY3RJbnNlcnRlciBpbnNlcnRlciwKKwkJCVJldldhbGsgcncsIE9iamVjdElkIHRyZWVJZCkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiwgQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbiB7CisJCU9iamVjdElkIGhlYWRJZCA9IHJlcG8ucmVzb2x2ZSh0YXJnZXRCcmFuY2ggKyAiXntjb21taXR9Iik7IC8vJE5PTi1OTFMtMSQKKwkJaWYgKGhlYWRJZCAhPSBudWxsCisJCQkJJiYgcncucGFyc2VDb21taXQoaGVhZElkKS5nZXRUcmVlKCkuZ2V0SWQoKS5lcXVhbHModHJlZUlkKSkgeworCQkJLy8gTm8gY2hhbmdlLiBEbyBub3RoaW5nLgorCQkJcmV0dXJuIHJ3LnBhcnNlQ29tbWl0KGhlYWRJZCk7CisJCX0KKworCQlDb21taXRCdWlsZGVyIGNvbW1pdCA9IG5ldyBDb21taXRCdWlsZGVyKCk7CisJCWNvbW1pdC5zZXRUcmVlSWQodHJlZUlkKTsKKwkJaWYgKGhlYWRJZCAhPSBudWxsKSB7CisJCQljb21taXQuc2V0UGFyZW50SWRzKGhlYWRJZCk7CisJCX0KKwkJY29tbWl0LnNldEF1dGhvcihhdXRob3IpOworCQljb21taXQuc2V0Q29tbWl0dGVyKGF1dGhvcik7CisJCWNvbW1pdC5zZXRNZXNzYWdlKFJlcG9UZXh0LmdldCgpLnJlcG9Db21taXRNZXNzYWdlKTsKKworCQlPYmplY3RJZCBjb21taXRJZCA9IGluc2VydGVyLmluc2VydChjb21taXQpOworCQlpbnNlcnRlci5mbHVzaCgpOworCisJCVJlZlVwZGF0ZSBydSA9IHJlcG8udXBkYXRlUmVmKHRhcmdldEJyYW5jaCk7CisJCXJ1LnNldE5ld09iamVjdElkKGNvbW1pdElkKTsKKwkJcnUuc2V0RXhwZWN0ZWRPbGRPYmplY3RJZChoZWFkSWQgIT0gbnVsbCA/IGhlYWRJZCA6IE9iamVjdElkLnplcm9JZCgpKTsKKwkJUmVzdWx0IHJjID0gcnUudXBkYXRlKHJ3KTsKKwkJc3dpdGNoIChyYykgeworCQljYXNlIE5FVzoKKwkJY2FzZSBGT1JDRUQ6CisJCWNhc2UgRkFTVF9GT1JXQVJEOgorCQkJLy8gU3VjY2Vzc2Z1bC4gRG8gbm90aGluZy4KKwkJCWJyZWFrOworCQljYXNlIFJFSkVDVEVEOgorCQljYXNlIExPQ0tfRkFJTFVSRToKKwkJCXRocm93IG5ldyBDb25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlKR2l0VGV4dC5nZXQoKS5jYW5ub3RMb2NrLCB0YXJnZXRCcmFuY2gpLCBydS5nZXRSZWYoKSwgcmMpOworCQlkZWZhdWx0OgorCQkJdGhyb3cgbmV3IEpHaXRJbnRlcm5hbEV4Y2VwdGlvbigKKwkJCQkJTWVzc2FnZUZvcm1hdC5mb3JtYXQoSkdpdFRleHQuZ2V0KCkudXBkYXRpbmdSZWZGYWlsZWQsCisJCQkJCQkJdGFyZ2V0QnJhbmNoLCBjb21taXRJZC5uYW1lKCksIHJjKSk7CisJCX0KKworCQlyZXR1cm4gcncucGFyc2VDb21taXQoY29tbWl0SWQpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvZ2l0cmVwby9SZWd1bGFyU3VwZXJwcm9qZWN0V3JpdGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVndWxhclN1cGVycHJvamVjdFdyaXRlci5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYWI5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVndWxhclN1cGVycHJvamVjdFdyaXRlci5qYXZhCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxLCBHb29nbGUgSW5jLiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG87CisKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUU7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5SX1JFTU9URVM7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuR2l0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLlN1Ym1vZHVsZUFkZENvbW1hbmQ7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkdpdEFQSUV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uUmVwb0NvbW1hbmQuTWFuaWZlc3RFcnJvckV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uUmVwb1Byb2plY3QuQ29weUZpbGU7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLlJlcG9Qcm9qZWN0LkxpbmtGaWxlOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5pbnRlcm5hbC5SZXBvVGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlByb2dyZXNzTW9uaXRvcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OworCisvKioKKyAqIFdyaXRlcyAuZ2l0bW9kdWxlcyBhbmQgZ2l0bGlua3Mgb2YgcGFyc2VkIG1hbmlmZXN0IHByb2plY3RzIGludG8gYSByZWd1bGFyCisgKiByZXBvc2l0b3J5ICh1c2luZyBnaXQgc3VibW9kdWxlIGNvbW1hbmRzKQorICoKKyAqIFRvIHdyaXRlIG9uIGEgYmFyZSByZXBvc2l0b3J5LCB1c2Uge0BsaW5rIEJhcmVTdXBlcnByb2plY3RXcml0ZXJ9CisgKi8KK2NsYXNzIFJlZ3VsYXJTdXBlcnByb2plY3RXcml0ZXIgeworCisJcHJpdmF0ZSBSZXBvc2l0b3J5IHJlcG87CisKKwlwcml2YXRlIFByb2dyZXNzTW9uaXRvciBtb25pdG9yOworCisJUmVndWxhclN1cGVycHJvamVjdFdyaXRlcihSZXBvc2l0b3J5IHJlcG8sIFByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CisJCXRoaXMucmVwbyA9IHJlcG87CisJCXRoaXMubW9uaXRvciA9IG1vbml0b3I7CisJfQorCisJUmV2Q29tbWl0IHdyaXRlKExpc3Q8UmVwb1Byb2plY3Q+IHJlcG9Qcm9qZWN0cykKKwkJCXRocm93cyBHaXRBUElFeGNlcHRpb24geworCQl0cnkgKEdpdCBnaXQgPSBuZXcgR2l0KHJlcG8pKSB7CisJCQlmb3IgKFJlcG9Qcm9qZWN0IHByb2ogOiByZXBvUHJvamVjdHMpIHsKKwkJCQlhZGRTdWJtb2R1bGUocHJvai5nZXROYW1lKCksIHByb2ouZ2V0VXJsKCksIHByb2ouZ2V0UGF0aCgpLAorCQkJCQkJcHJvai5nZXRSZXZpc2lvbigpLCBwcm9qLmdldENvcHlGaWxlcygpLAorCQkJCQkJcHJvai5nZXRMaW5rRmlsZXMoKSwgZ2l0KTsKKwkJCX0KKwkJCXJldHVybiBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZShSZXBvVGV4dC5nZXQoKS5yZXBvQ29tbWl0TWVzc2FnZSkKKwkJCQkJLmNhbGwoKTsKKwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgeworCQkJdGhyb3cgbmV3IE1hbmlmZXN0RXJyb3JFeGNlcHRpb24oZSk7CisJCX0KKwl9CisKKwlwcml2YXRlIHZvaWQgYWRkU3VibW9kdWxlKFN0cmluZyBuYW1lLCBTdHJpbmcgdXJsLCBTdHJpbmcgcGF0aCwKKwkJCVN0cmluZyByZXZpc2lvbiwgTGlzdDxDb3B5RmlsZT4gY29weWZpbGVzLCBMaXN0PExpbmtGaWxlPiBsaW5rZmlsZXMsCisJCQlHaXQgZ2l0KSB0aHJvd3MgR2l0QVBJRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7CisJCWFzc2VydCAoIXJlcG8uaXNCYXJlKCkpOworCQlhc3NlcnQgKGdpdCAhPSBudWxsKTsKKwkJaWYgKCFsaW5rZmlsZXMuaXNFbXB0eSgpKSB7CisJCQl0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oCisJCQkJCUpHaXRUZXh0LmdldCgpLm5vbkJhcmVMaW5rRmlsZXNOb3RTdXBwb3J0ZWQpOworCQl9CisKKwkJU3VibW9kdWxlQWRkQ29tbWFuZCBhZGQgPSBnaXQuc3VibW9kdWxlQWRkKCkuc2V0TmFtZShuYW1lKS5zZXRQYXRoKHBhdGgpCisJCQkJLnNldFVSSSh1cmwpOworCQlpZiAobW9uaXRvciAhPSBudWxsKSB7CisJCQlhZGQuc2V0UHJvZ3Jlc3NNb25pdG9yKG1vbml0b3IpOworCQl9CisKKwkJUmVwb3NpdG9yeSBzdWJSZXBvID0gYWRkLmNhbGwoKTsKKwkJaWYgKHJldmlzaW9uICE9IG51bGwpIHsKKwkJCXRyeSAoR2l0IHN1YiA9IG5ldyBHaXQoc3ViUmVwbykpIHsKKwkJCQlzdWIuY2hlY2tvdXQoKS5zZXROYW1lKGZpbmRSZWYocmV2aXNpb24sIHN1YlJlcG8pKS5jYWxsKCk7CisJCQl9CisJCQlzdWJSZXBvLmNsb3NlKCk7CisJCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4ocGF0aCkuY2FsbCgpOworCQl9CisJCWZvciAoQ29weUZpbGUgY29weWZpbGUgOiBjb3B5ZmlsZXMpIHsKKwkJCWNvcHlmaWxlLmNvcHkoKTsKKwkJCWdpdC5hZGQoKS5hZGRGaWxlcGF0dGVybihjb3B5ZmlsZS5kZXN0KS5jYWxsKCk7CisJCX0KKwl9CisKKwlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmluZFJlZihTdHJpbmcgcmVmLCBSZXBvc2l0b3J5IHJlcG8pCisJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAoIU9iamVjdElkLmlzSWQocmVmKSkgeworCQkJUmVmIHIgPSByZXBvLmV4YWN0UmVmKFJfUkVNT1RFUyArIERFRkFVTFRfUkVNT1RFX05BTUUgKyAiLyIgKyByZWYpOyAvLyROT04tTkxTLTEkCisJCQlpZiAociAhPSBudWxsKSB7CisJCQkJcmV0dXJuIHIuZ2V0TmFtZSgpOworCQkJfQorCQl9CisJCXJldHVybiByZWY7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9naXRyZXBvL1JlcG9Db21tYW5kLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmQuamF2YQppbmRleCBlMGE4MjI0Li42ZTk0M2U1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2dpdHJlcG8vUmVwb0NvbW1hbmQuamF2YQpAQCAtOSwxMSArOSw2IEBACiAgKi8KIHBhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvOwogCi1pbXBvcnQgc3RhdGljIGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy5VVEZfODsKLWltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzLkRFRkFVTFRfUkVNT1RFX05BTUU7Ci1pbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5SX1JFTU9URVM7Ci1pbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5SX1RBR1M7Ci0KIGltcG9ydCBqYXZhLmlvLkZpbGU7CiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKQEAgLTMxLDM0ICsyNiwyMSBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTnVsbGFibGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuR2l0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLkdpdENvbW1hbmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuU3VibW9kdWxlQWRkQ29tbWFuZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuR2l0QVBJRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5JbnZhbGlkUmVmTmFtZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuSkdpdEludGVybmFsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZGlyY2FjaGUuRGlyQ2FjaGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZS5EaXJDYWNoZUJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5kaXJjYWNoZS5EaXJDYWNoZUVudHJ5OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5CYXJlU3VwZXJwcm9qZWN0V3JpdGVyLkV4dHJhQ29udGVudDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uTWFuaWZlc3RQYXJzZXIuSW5jbHVkZWRGaWxlUmVhZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZ2l0cmVwby5SZXBvUHJvamVjdC5Db3B5RmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmdpdHJlcG8uUmVwb1Byb2plY3QuTGlua0ZpbGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5naXRyZXBvLmludGVybmFsLlJlcG9UZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuSkdpdFRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29tbWl0QnVpbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWc7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkZpbGVNb2RlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdEluc2VydGVyOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlBlcnNvbklkZW50OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlByb2dyZXNzTW9uaXRvcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmRGF0YWJhc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZlVwZGF0ZS5SZXN1bHQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnJldndhbGsuUmV2Q29tbWl0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQucmV2d2Fsay5SZXZXYWxrOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudHJlZXdhbGsuVHJlZVdhbGs7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLkZpbGVVdGlsczsKIApAQCAtODAsMTIgKzYyLDcgQEAKICAqIEBzaW5jZSAzLjQKICAqLwogcHVibGljIGNsYXNzIFJlcG9Db21tYW5kIGV4dGVuZHMgR2l0Q29tbWFuZDxSZXZDb21taXQ+IHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTE9DS19GQUlMVVJFX01BWF9SRVRSSUVTID0gNTsKIAotCS8vIFJldHJ5IGV4cG9uZW50aWFsbHkgd2l0aCBkZWxheXMgaW4gdGhpcyByYW5nZQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGludCBMT0NLX0ZBSUxVUkVfTUlOX1JFVFJZX0RFTEFZX01JTExJUyA9IDUwOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IExPQ0tfRkFJTFVSRV9NQVhfUkVUUllfREVMQVlfTUlMTElTID0gNTAwMDsKIAogCXByaXZhdGUgU3RyaW5nIG1hbmlmZXN0UGF0aDsKIAlwcml2YXRlIFN0cmluZyBiYXNlVXJpOwpAQCAtOTMsMTcgKzcwLDE4IEBAIHB1YmxpYyBjbGFzcyBSZXBvQ29tbWFuZCBleHRlbmRzIEdpdENvbW1hbmQ8UmV2Q29tbWl0PiB7CiAJcHJpdmF0ZSBTdHJpbmcgZ3JvdXBzUGFyYW07CiAJcHJpdmF0ZSBTdHJpbmcgYnJhbmNoOwogCXByaXZhdGUgU3RyaW5nIHRhcmdldEJyYW5jaCA9IENvbnN0YW50cy5IRUFEOwotCXByaXZhdGUgYm9vbGVhbiByZWNvcmRSZW1vdGVCcmFuY2ggPSB0cnVlOwotCXByaXZhdGUgYm9vbGVhbiByZWNvcmRTdWJtb2R1bGVMYWJlbHMgPSB0cnVlOwotCXByaXZhdGUgYm9vbGVhbiByZWNvcmRTaGFsbG93U3VibW9kdWxlcyA9IHRydWU7CiAJcHJpdmF0ZSBQZXJzb25JZGVudCBhdXRob3I7CiAJcHJpdmF0ZSBSZW1vdGVSZWFkZXIgY2FsbGJhY2s7CiAJcHJpdmF0ZSBJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbTsKIAlwcml2YXRlIEluY2x1ZGVkRmlsZVJlYWRlciBpbmNsdWRlZFJlYWRlcjsKLQlwcml2YXRlIGJvb2xlYW4gaWdub3JlUmVtb3RlRmFpbHVyZXMgPSBmYWxzZTsKKworCXByaXZhdGUgQmFyZVN1cGVycHJvamVjdFdyaXRlci5CYXJlV3JpdGVyQ29uZmlnIGJhcmVXcml0ZXJDb25maWcgPSBCYXJlU3VwZXJwcm9qZWN0V3JpdGVyLkJhcmVXcml0ZXJDb25maWcKKwkJCS5nZXREZWZhdWx0KCk7CiAKIAlwcml2YXRlIFByb2dyZXNzTW9uaXRvciBtb25pdG9yOwogCisJcHJpdmF0ZSBmaW5hbCBMaXN0PEV4dHJhQ29udGVudD4gZXh0cmFDb250ZW50cyA9IG5ldyBBcnJheUxpc3Q8PigpOworCiAJLyoqCiAJICogQSBjYWxsYmFjayB0byBnZXQgcmVmIHNoYTEgb2YgYSByZXBvc2l0b3J5IGZyb20gaXRzIHVyaS4KIAkgKgpAQCAtMjY5LDE0ICsyNDcsMTQgQEAgcHVibGljIFJlbW90ZUZpbGUgcmVhZEZpbGVXaXRoTW9kZShTdHJpbmcgdXJpLCBTdHJpbmcgcmVmLCBTdHJpbmcgcGF0aCkKIAl9CiAKIAlAU3VwcHJlc3NXYXJuaW5ncygic2VyaWFsIikKLQlwcml2YXRlIHN0YXRpYyBjbGFzcyBNYW5pZmVzdEVycm9yRXhjZXB0aW9uIGV4dGVuZHMgR2l0QVBJRXhjZXB0aW9uIHsKKwlzdGF0aWMgY2xhc3MgTWFuaWZlc3RFcnJvckV4Y2VwdGlvbiBleHRlbmRzIEdpdEFQSUV4Y2VwdGlvbiB7CiAJCU1hbmlmZXN0RXJyb3JFeGNlcHRpb24oVGhyb3dhYmxlIGNhdXNlKSB7CiAJCQlzdXBlcihSZXBvVGV4dC5nZXQoKS5pbnZhbGlkTWFuaWZlc3QsIGNhdXNlKTsKIAkJfQogCX0KIAogCUBTdXBwcmVzc1dhcm5pbmdzKCJzZXJpYWwiKQotCXByaXZhdGUgc3RhdGljIGNsYXNzIFJlbW90ZVVuYXZhaWxhYmxlRXhjZXB0aW9uIGV4dGVuZHMgR2l0QVBJRXhjZXB0aW9uIHsKKwlzdGF0aWMgY2xhc3MgUmVtb3RlVW5hdmFpbGFibGVFeGNlcHRpb24gZXh0ZW5kcyBHaXRBUElFeGNlcHRpb24gewogCQlSZW1vdGVVbmF2YWlsYWJsZUV4Y2VwdGlvbihTdHJpbmcgdXJpKSB7CiAJCQlzdXBlcihNZXNzYWdlRm9ybWF0LmZvcm1hdChSZXBvVGV4dC5nZXQoKS5lcnJvclJlbW90ZVVuYXZhaWxhYmxlLCB1cmkpKTsKIAkJfQpAQCAtNDIxLDcgKzM5OSw3IEBAIHB1YmxpYyBSZXBvQ29tbWFuZCBzZXRUYXJnZXRCcmFuY2goU3RyaW5nIGJyYW5jaCkgewogCSAqIEBzaW5jZSA0LjIKIAkgKi8KIAlwdWJsaWMgUmVwb0NvbW1hbmQgc2V0UmVjb3JkUmVtb3RlQnJhbmNoKGJvb2xlYW4gZW5hYmxlKSB7Ci0JCXRoaXMucmVjb3JkUmVtb3RlQnJhbmNoID0gZW5hYmxlOworCQl0aGlzLmJhcmVXcml0ZXJDb25maWcucmVjb3JkUmVtb3RlQnJhbmNoID0gZW5hYmxlOwogCQlyZXR1cm4gdGhpczsKIAl9CiAKQEAgLTQzNiw3ICs0MTQsNyBAQCBwdWJsaWMgUmVwb0NvbW1hbmQgc2V0UmVjb3JkUmVtb3RlQnJhbmNoKGJvb2xlYW4gZW5hYmxlKSB7CiAJICogQHNpbmNlIDQuNAogCSAqLwogCXB1YmxpYyBSZXBvQ29tbWFuZCBzZXRSZWNvcmRTdWJtb2R1bGVMYWJlbHMoYm9vbGVhbiBlbmFibGUpIHsKLQkJdGhpcy5yZWNvcmRTdWJtb2R1bGVMYWJlbHMgPSBlbmFibGU7CisJCXRoaXMuYmFyZVdyaXRlckNvbmZpZy5yZWNvcmRTdWJtb2R1bGVMYWJlbHMgPSBlbmFibGU7CiAJCXJldHVybiB0aGlzOwogCX0KIApAQCAtNDUxLDcgKzQyOSw3IEBAIHB1YmxpYyBSZXBvQ29tbWFuZCBzZXRSZWNvcmRTdWJtb2R1bGVMYWJlbHMoYm9vbGVhbiBlbmFibGUpIHsKIAkgKiBAc2luY2UgNC40CiAJICovCiAJcHVibGljIFJlcG9Db21tYW5kIHNldFJlY29tbWVuZFNoYWxsb3coYm9vbGVhbiBlbmFibGUpIHsKLQkJdGhpcy5yZWNvcmRTaGFsbG93U3VibW9kdWxlcyA9IGVuYWJsZTsKKwkJdGhpcy5iYXJlV3JpdGVyQ29uZmlnLnJlY29yZFNoYWxsb3dTdWJtb2R1bGVzID0gZW5hYmxlOwogCQlyZXR1cm4gdGhpczsKIAl9CiAKQEAgLTQ4NSw3ICs0NjMsNyBAQCBwdWJsaWMgUmVwb0NvbW1hbmQgc2V0UHJvZ3Jlc3NNb25pdG9yKFByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7CiAJICogQHNpbmNlIDQuMwogCSAqLwogCXB1YmxpYyBSZXBvQ29tbWFuZCBzZXRJZ25vcmVSZW1vdGVGYWlsdXJlcyhib29sZWFuIGlnbm9yZSkgewotCQl0aGlzLmlnbm9yZVJlbW90ZUZhaWx1cmVzID0gaWdub3JlOworCQl0aGlzLmJhcmVXcml0ZXJDb25maWcuaWdub3JlUmVtb3RlRmFpbHVyZXMgPSBpZ25vcmU7CiAJCXJldHVybiB0aGlzOwogCX0KIApAQCAtNTM0LDYgKzUxMiwyMiBAQCBwdWJsaWMgUmVwb0NvbW1hbmQgc2V0SW5jbHVkZWRGaWxlUmVhZGVyKEluY2x1ZGVkRmlsZVJlYWRlciByZWFkZXIpIHsKIAkJcmV0dXJuIHRoaXM7CiAJfQogCisJLyoqCisJICogQ3JlYXRlIGEgZmlsZSB3aXRoIHRoZSBnaXZlbiBjb250ZW50IGluIHRoZSBkZXN0aW5hdGlvbiByZXBvc2l0b3J5CisJICoKKwkgKiBAcGFyYW0gcGF0aAorCSAqICAgICAgICAgICAgd2hlcmUgdG8gY3JlYXRlIHRoZSBmaWxlIGluIHRoZSBkZXN0aW5hdGlvbiByZXBvc2l0b3J5CisJICogQHBhcmFtIGNvbnRlbnRzCisJICogICAgICAgICAgICBjb250ZW50IGZvciB0aGUgY3JlYXRlIGZpbGUKKwkgKiBAcmV0dXJuIHRoaXMgY29tbWFuZAorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBSZXBvQ29tbWFuZCBhZGRUb0Rlc3RpbmF0aW9uKFN0cmluZyBwYXRoLCBTdHJpbmcgY29udGVudHMpIHsKKwkJdGhpcy5leHRyYUNvbnRlbnRzLmFkZChuZXcgRXh0cmFDb250ZW50KHBhdGgsIGNvbnRlbnRzKSk7CisJCXJldHVybiB0aGlzOworCX0KKwogCS8qKiB7QGluaGVyaXREb2N9ICovCiAJQE92ZXJyaWRlCiAJcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiB7CkBAIC01NzAsMjQwICs1NjQsMTggQEAgcHVibGljIFJldkNvbW1pdCBjYWxsKCkgdGhyb3dzIEdpdEFQSUV4Y2VwdGlvbiB7CiAJCX0KIAogCQlpZiAocmVwby5pc0JhcmUoKSkgewotCQkJaWYgKGF1dGhvciA9PSBudWxsKQotCQkJCWF1dGhvciA9IG5ldyBQZXJzb25JZGVudChyZXBvKTsKLQkJCWlmIChjYWxsYmFjayA9PSBudWxsKQotCQkJCWNhbGxiYWNrID0gbmV3IERlZmF1bHRSZW1vdGVSZWFkZXIoKTsKIAkJCUxpc3Q8UmVwb1Byb2plY3Q+IHJlbmFtZWRQcm9qZWN0cyA9IHJlbmFtZVByb2plY3RzKGZpbHRlcmVkUHJvamVjdHMpOwotCi0JCQlEaXJDYWNoZSBpbmRleCA9IERpckNhY2hlLm5ld0luQ29yZSgpOwotCQkJT2JqZWN0SW5zZXJ0ZXIgaW5zZXJ0ZXIgPSByZXBvLm5ld09iamVjdEluc2VydGVyKCk7Ci0KLQkJCXRyeSAoUmV2V2FsayBydyA9IG5ldyBSZXZXYWxrKHJlcG8pKSB7Ci0JCQkJcHJlcGFyZUluZGV4KHJlbmFtZWRQcm9qZWN0cywgaW5kZXgsIGluc2VydGVyKTsKLQkJCQlPYmplY3RJZCB0cmVlSWQgPSBpbmRleC53cml0ZVRyZWUoaW5zZXJ0ZXIpOwotCQkJCWxvbmcgcHJldkRlbGF5ID0gMDsKLQkJCQlmb3IgKGludCBpID0gMDsgaSA8IExPQ0tfRkFJTFVSRV9NQVhfUkVUUklFUyAtIDE7IGkrKykgewotCQkJCQl0cnkgewotCQkJCQkJcmV0dXJuIGNvbW1pdFRyZWVPbkN1cnJlbnRUaXAoCi0JCQkJCQkJaW5zZXJ0ZXIsIHJ3LCB0cmVlSWQpOwotCQkJCQl9IGNhdGNoIChDb25jdXJyZW50UmVmVXBkYXRlRXhjZXB0aW9uIGUpIHsKLQkJCQkJCXByZXZEZWxheSA9IEZpbGVVdGlscy5kZWxheShwcmV2RGVsYXksCi0JCQkJCQkJCUxPQ0tfRkFJTFVSRV9NSU5fUkVUUllfREVMQVlfTUlMTElTLAotCQkJCQkJCQlMT0NLX0ZBSUxVUkVfTUFYX1JFVFJZX0RFTEFZX01JTExJUyk7Ci0JCQkJCQlUaHJlYWQuc2xlZXAocHJldkRlbGF5KTsKLQkJCQkJCXJlcG8uZ2V0UmVmRGF0YWJhc2UoKS5yZWZyZXNoKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJLy8gSW4gdGhlIGxhc3QgdHJ5LCBqdXN0IHByb3BhZ2F0ZSB0aGUgZXhjZXB0aW9ucwotCQkJCXJldHVybiBjb21taXRUcmVlT25DdXJyZW50VGlwKGluc2VydGVyLCBydywgdHJlZUlkKTsKLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIHwgSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCXRocm93IG5ldyBNYW5pZmVzdEVycm9yRXhjZXB0aW9uKGUpOwotCQkJfQotCQl9Ci0JCXRyeSAoR2l0IGdpdCA9IG5ldyBHaXQocmVwbykpIHsKLQkJCWZvciAoUmVwb1Byb2plY3QgcHJvaiA6IGZpbHRlcmVkUHJvamVjdHMpIHsKLQkJCQlhZGRTdWJtb2R1bGUocHJvai5nZXROYW1lKCksIHByb2ouZ2V0VXJsKCksIHByb2ouZ2V0UGF0aCgpLAotCQkJCQkJcHJvai5nZXRSZXZpc2lvbigpLCBwcm9qLmdldENvcHlGaWxlcygpLAotCQkJCQkJcHJvai5nZXRMaW5rRmlsZXMoKSwgZ2l0KTsKLQkJCX0KLQkJCXJldHVybiBnaXQuY29tbWl0KCkuc2V0TWVzc2FnZShSZXBvVGV4dC5nZXQoKS5yZXBvQ29tbWl0TWVzc2FnZSkKLQkJCQkJLmNhbGwoKTsKLQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IE1hbmlmZXN0RXJyb3JFeGNlcHRpb24oZSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJlcGFyZUluZGV4KExpc3Q8UmVwb1Byb2plY3Q+IHByb2plY3RzLCBEaXJDYWNoZSBpbmRleCwKLQkJCU9iamVjdEluc2VydGVyIGluc2VydGVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIEdpdEFQSUV4Y2VwdGlvbiB7Ci0JCUNvbmZpZyBjZmcgPSBuZXcgQ29uZmlnKCk7Ci0JCVN0cmluZ0J1aWxkZXIgYXR0cmlidXRlcyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCURpckNhY2hlQnVpbGRlciBidWlsZGVyID0gaW5kZXguYnVpbGRlcigpOwotCQlmb3IgKFJlcG9Qcm9qZWN0IHByb2ogOiBwcm9qZWN0cykgewotCQkJU3RyaW5nIG5hbWUgPSBwcm9qLmdldE5hbWUoKTsKLQkJCVN0cmluZyBwYXRoID0gcHJvai5nZXRQYXRoKCk7Ci0JCQlTdHJpbmcgdXJsID0gcHJvai5nZXRVcmwoKTsKLQkJCU9iamVjdElkIG9iamVjdElkOwotCQkJaWYgKE9iamVjdElkLmlzSWQocHJvai5nZXRSZXZpc2lvbigpKSkgewotCQkJCW9iamVjdElkID0gT2JqZWN0SWQuZnJvbVN0cmluZyhwcm9qLmdldFJldmlzaW9uKCkpOwotCQkJfSBlbHNlIHsKLQkJCQlvYmplY3RJZCA9IGNhbGxiYWNrLnNoYTEodXJsLCBwcm9qLmdldFJldmlzaW9uKCkpOwotCQkJCWlmIChvYmplY3RJZCA9PSBudWxsICYmICFpZ25vcmVSZW1vdGVGYWlsdXJlcykgewotCQkJCQl0aHJvdyBuZXcgUmVtb3RlVW5hdmFpbGFibGVFeGNlcHRpb24odXJsKTsKLQkJCQl9Ci0JCQkJaWYgKHJlY29yZFJlbW90ZUJyYW5jaCkgewotCQkJCQkvLyAiYnJhbmNoIiBmaWVsZCBpcyBvbmx5IGZvciBub24tdGFnIHJlZmVyZW5jZXMuCi0JCQkJCS8vIEtlZXAgdGFncyBpbiAicmVmIiBmaWVsZCBhcyBoaW50IGZvciBvdGhlciB0b29scy4KLQkJCQkJU3RyaW5nIGZpZWxkID0gcHJvai5nZXRSZXZpc2lvbigpLnN0YXJ0c1dpdGgoUl9UQUdTKSA/ICJyZWYiIC8vJE5PTi1OTFMtMSQKLQkJCQkJCQk6ICJicmFuY2giOyAvLyROT04tTkxTLTEkCi0JCQkJCWNmZy5zZXRTdHJpbmcoInN1Ym1vZHVsZSIsIG5hbWUsIGZpZWxkLCAvLyROT04tTkxTLTEkCi0JCQkJCQkJcHJvai5nZXRSZXZpc2lvbigpKTsKLQkJCQl9Ci0KLQkJCQlpZiAocmVjb3JkU2hhbGxvd1N1Ym1vZHVsZXMKLQkJCQkJCSYmIHByb2ouZ2V0UmVjb21tZW5kU2hhbGxvdygpICE9IG51bGwpIHsKLQkJCQkJLy8gVGhlIHNoYWxsb3cgcmVjb21tZW5kYXRpb24gaXMgbG9zaW5nIGluZm9ybWF0aW9uLgotCQkJCQkvLyBBcyB0aGUgcmVwbyBtYW5pZmVzdHMgc3RvcmVzIHRoZSByZWNvbW1lbmRlZAotCQkJCQkvLyBkZXB0aCBpbiB0aGUgJ2Nsb25lLWRlcHRoJyBmaWVsZCwgd2hpbGUKLQkJCQkJLy8gZ2l0IGNvcmUgb25seSB1c2VzIGEgYmluYXJ5ICdzaGFsbG93ID0gdHJ1ZS9mYWxzZScKLQkJCQkJLy8gaGludCwgd2UnbGwgbWFwIGFueSBkZXB0aCB0byAnc2hhbGxvdyA9IHRydWUnCi0JCQkJCWNmZy5zZXRCb29sZWFuKCJzdWJtb2R1bGUiLCBuYW1lLCAic2hhbGxvdyIsIC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotCQkJCQkJCXRydWUpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChyZWNvcmRTdWJtb2R1bGVMYWJlbHMpIHsKLQkJCQlTdHJpbmdCdWlsZGVyIHJlYyA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7Ci0JCQkJcmVjLmFwcGVuZCgiLyIpOyAvLyROT04tTkxTLTEkCi0JCQkJcmVjLmFwcGVuZChwYXRoKTsKLQkJCQlmb3IgKFN0cmluZyBncm91cCA6IHByb2ouZ2V0R3JvdXBzKCkpIHsKLQkJCQkJcmVjLmFwcGVuZCgiICIpOyAvLyROT04tTkxTLTEkCi0JCQkJCXJlYy5hcHBlbmQoZ3JvdXApOwotCQkJCX0KLQkJCQlyZWMuYXBwZW5kKCJcbiIpOyAvLyROT04tTkxTLTEkCi0JCQkJYXR0cmlidXRlcy5hcHBlbmQocmVjLnRvU3RyaW5nKCkpOwotCQkJfQotCi0JCQlVUkkgc3VibW9kVXJsID0gVVJJLmNyZWF0ZSh1cmwpOwotCQkJaWYgKHRhcmdldFVyaSAhPSBudWxsKSB7Ci0JCQkJc3VibW9kVXJsID0gcmVsYXRpdml6ZSh0YXJnZXRVcmksIHN1Ym1vZFVybCk7Ci0JCQl9Ci0JCQljZmcuc2V0U3RyaW5nKCJzdWJtb2R1bGUiLCBuYW1lLCAicGF0aCIsIHBhdGgpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCWNmZy5zZXRTdHJpbmcoInN1Ym1vZHVsZSIsIG5hbWUsICJ1cmwiLCAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQkJCQkJc3VibW9kVXJsLnRvU3RyaW5nKCkpOwotCi0JCQkvLyBjcmVhdGUgZ2l0bGluawotCQkJaWYgKG9iamVjdElkICE9IG51bGwpIHsKLQkJCQlEaXJDYWNoZUVudHJ5IGRjRW50cnkgPSBuZXcgRGlyQ2FjaGVFbnRyeShwYXRoKTsKLQkJCQlkY0VudHJ5LnNldE9iamVjdElkKG9iamVjdElkKTsKLQkJCQlkY0VudHJ5LnNldEZpbGVNb2RlKEZpbGVNb2RlLkdJVExJTkspOwotCQkJCWJ1aWxkZXIuYWRkKGRjRW50cnkpOwotCi0JCQkJZm9yIChDb3B5RmlsZSBjb3B5ZmlsZSA6IHByb2ouZ2V0Q29weUZpbGVzKCkpIHsKLQkJCQkJUmVtb3RlRmlsZSByZiA9IGNhbGxiYWNrLnJlYWRGaWxlV2l0aE1vZGUodXJsLAotCQkJCQkJCXByb2ouZ2V0UmV2aXNpb24oKSwgY29weWZpbGUuc3JjKTsKLQkJCQkJb2JqZWN0SWQgPSBpbnNlcnRlci5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLAotCQkJCQkJCXJmLmdldENvbnRlbnRzKCkpOwotCQkJCQlkY0VudHJ5ID0gbmV3IERpckNhY2hlRW50cnkoY29weWZpbGUuZGVzdCk7Ci0JCQkJCWRjRW50cnkuc2V0T2JqZWN0SWQob2JqZWN0SWQpOwotCQkJCQlkY0VudHJ5LnNldEZpbGVNb2RlKHJmLmdldEZpbGVNb2RlKCkpOwotCQkJCQlidWlsZGVyLmFkZChkY0VudHJ5KTsKLQkJCQl9Ci0JCQkJZm9yIChMaW5rRmlsZSBsaW5rZmlsZSA6IHByb2ouZ2V0TGlua0ZpbGVzKCkpIHsKLQkJCQkJU3RyaW5nIGxpbms7Ci0JCQkJCWlmIChsaW5rZmlsZS5kZXN0LmNvbnRhaW5zKCIvIikpIHsgLy8kTk9OLU5MUy0xJAotCQkJCQkJbGluayA9IEZpbGVVdGlscy5yZWxhdGl2aXplR2l0UGF0aCgKLQkJCQkJCQkJbGlua2ZpbGUuZGVzdC5zdWJzdHJpbmcoMCwKLQkJCQkJCQkJCQlsaW5rZmlsZS5kZXN0Lmxhc3RJbmRleE9mKCcvJykpLAotCQkJCQkJCQlwcm9qLmdldFBhdGgoKSArICIvIiArIGxpbmtmaWxlLnNyYyk7IC8vJE5PTi1OTFMtMSQKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWxpbmsgPSBwcm9qLmdldFBhdGgoKSArICIvIiArIGxpbmtmaWxlLnNyYzsgLy8kTk9OLU5MUy0xJAotCQkJCQl9Ci0KLQkJCQkJb2JqZWN0SWQgPSBpbnNlcnRlci5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLAotCQkJCQkJCWxpbmsuZ2V0Qnl0ZXMoVVRGXzgpKTsKLQkJCQkJZGNFbnRyeSA9IG5ldyBEaXJDYWNoZUVudHJ5KGxpbmtmaWxlLmRlc3QpOwotCQkJCQlkY0VudHJ5LnNldE9iamVjdElkKG9iamVjdElkKTsKLQkJCQkJZGNFbnRyeS5zZXRGaWxlTW9kZShGaWxlTW9kZS5TWU1MSU5LKTsKLQkJCQkJYnVpbGRlci5hZGQoZGNFbnRyeSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCVN0cmluZyBjb250ZW50ID0gY2ZnLnRvVGV4dCgpOwotCi0JCS8vIGNyZWF0ZSBhIG5ldyBEaXJDYWNoZUVudHJ5IGZvciAuZ2l0bW9kdWxlcyBmaWxlLgotCQlEaXJDYWNoZUVudHJ5IGRjRW50cnkgPSBuZXcgRGlyQ2FjaGVFbnRyeSgKLQkJCQlDb25zdGFudHMuRE9UX0dJVF9NT0RVTEVTKTsKLQkJT2JqZWN0SWQgb2JqZWN0SWQgPSBpbnNlcnRlci5pbnNlcnQoQ29uc3RhbnRzLk9CSl9CTE9CLAotCQkJCWNvbnRlbnQuZ2V0Qnl0ZXMoVVRGXzgpKTsKLQkJZGNFbnRyeS5zZXRPYmplY3RJZChvYmplY3RJZCk7Ci0JCWRjRW50cnkuc2V0RmlsZU1vZGUoRmlsZU1vZGUuUkVHVUxBUl9GSUxFKTsKLQkJYnVpbGRlci5hZGQoZGNFbnRyeSk7Ci0KLQkJaWYgKHJlY29yZFN1Ym1vZHVsZUxhYmVscykgewotCQkJLy8gY3JlYXRlIGEgbmV3IERpckNhY2hlRW50cnkgZm9yIC5naXRhdHRyaWJ1dGVzIGZpbGUuCi0JCQlEaXJDYWNoZUVudHJ5IGRjRW50cnlBdHRyID0gbmV3IERpckNhY2hlRW50cnkoCi0JCQkJCUNvbnN0YW50cy5ET1RfR0lUX0FUVFJJQlVURVMpOwotCQkJT2JqZWN0SWQgYXR0cklkID0gaW5zZXJ0ZXIuaW5zZXJ0KENvbnN0YW50cy5PQkpfQkxPQiwKLQkJCQkJYXR0cmlidXRlcy50b1N0cmluZygpLmdldEJ5dGVzKFVURl84KSk7Ci0JCQlkY0VudHJ5QXR0ci5zZXRPYmplY3RJZChhdHRySWQpOwotCQkJZGNFbnRyeUF0dHIuc2V0RmlsZU1vZGUoRmlsZU1vZGUuUkVHVUxBUl9GSUxFKTsKLQkJCWJ1aWxkZXIuYWRkKGRjRW50cnlBdHRyKTsKKwkJCUJhcmVTdXBlcnByb2plY3RXcml0ZXIgd3JpdGVyID0gbmV3IEJhcmVTdXBlcnByb2plY3RXcml0ZXIocmVwbywgdGFyZ2V0VXJpLAorCQkJCQl0YXJnZXRCcmFuY2gsCisJCQkJCWF1dGhvciA9PSBudWxsID8gbmV3IFBlcnNvbklkZW50KHJlcG8pIDogYXV0aG9yLAorCQkJCQljYWxsYmFjayA9PSBudWxsID8gbmV3IERlZmF1bHRSZW1vdGVSZWFkZXIoKSA6IGNhbGxiYWNrLAorCQkJCQliYXJlV3JpdGVyQ29uZmlnLCBleHRyYUNvbnRlbnRzKTsKKwkJCXJldHVybiB3cml0ZXIud3JpdGUocmVuYW1lZFByb2plY3RzKTsKIAkJfQogCi0JCWJ1aWxkZXIuZmluaXNoKCk7Ci0JfQogCi0JcHJpdmF0ZSBSZXZDb21taXQgY29tbWl0VHJlZU9uQ3VycmVudFRpcChPYmplY3RJbnNlcnRlciBpbnNlcnRlciwKLQkJCVJldldhbGsgcncsIE9iamVjdElkIHRyZWVJZCkKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiwgQ29uY3VycmVudFJlZlVwZGF0ZUV4Y2VwdGlvbiB7Ci0JCU9iamVjdElkIGhlYWRJZCA9IHJlcG8ucmVzb2x2ZSh0YXJnZXRCcmFuY2ggKyAiXntjb21taXR9Iik7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGhlYWRJZCAhPSBudWxsICYmIHJ3LnBhcnNlQ29tbWl0KGhlYWRJZCkuZ2V0VHJlZSgpLmdldElkKCkuZXF1YWxzKHRyZWVJZCkpIHsKLQkJCS8vIE5vIGNoYW5nZS4gRG8gbm90aGluZy4KLQkJCXJldHVybiBydy5wYXJzZUNvbW1pdChoZWFkSWQpOwotCQl9Ci0KLQkJQ29tbWl0QnVpbGRlciBjb21taXQgPSBuZXcgQ29tbWl0QnVpbGRlcigpOwotCQljb21taXQuc2V0VHJlZUlkKHRyZWVJZCk7Ci0JCWlmIChoZWFkSWQgIT0gbnVsbCkKLQkJCWNvbW1pdC5zZXRQYXJlbnRJZHMoaGVhZElkKTsKLQkJY29tbWl0LnNldEF1dGhvcihhdXRob3IpOwotCQljb21taXQuc2V0Q29tbWl0dGVyKGF1dGhvcik7Ci0JCWNvbW1pdC5zZXRNZXNzYWdlKFJlcG9UZXh0LmdldCgpLnJlcG9Db21taXRNZXNzYWdlKTsKLQotCQlPYmplY3RJZCBjb21taXRJZCA9IGluc2VydGVyLmluc2VydChjb21taXQpOwotCQlpbnNlcnRlci5mbHVzaCgpOwotCi0JCVJlZlVwZGF0ZSBydSA9IHJlcG8udXBkYXRlUmVmKHRhcmdldEJyYW5jaCk7Ci0JCXJ1LnNldE5ld09iamVjdElkKGNvbW1pdElkKTsKLQkJcnUuc2V0RXhwZWN0ZWRPbGRPYmplY3RJZChoZWFkSWQgIT0gbnVsbCA/IGhlYWRJZCA6IE9iamVjdElkLnplcm9JZCgpKTsKLQkJUmVzdWx0IHJjID0gcnUudXBkYXRlKHJ3KTsKLQkJc3dpdGNoIChyYykgewotCQkJY2FzZSBORVc6Ci0JCQljYXNlIEZPUkNFRDoKLQkJCWNhc2UgRkFTVF9GT1JXQVJEOgotCQkJCS8vIFN1Y2Nlc3NmdWwuIERvIG5vdGhpbmcuCi0JCQkJYnJlYWs7Ci0JCQljYXNlIFJFSkVDVEVEOgotCQkJY2FzZSBMT0NLX0ZBSUxVUkU6Ci0JCQkJdGhyb3cgbmV3IENvbmN1cnJlbnRSZWZVcGRhdGVFeGNlcHRpb24oTWVzc2FnZUZvcm1hdAotCQkJCQkJLmZvcm1hdChKR2l0VGV4dC5nZXQoKS5jYW5ub3RMb2NrLCB0YXJnZXRCcmFuY2gpLAotCQkJCQkJcnUuZ2V0UmVmKCksIHJjKTsKLQkJCWRlZmF1bHQ6Ci0JCQkJdGhyb3cgbmV3IEpHaXRJbnRlcm5hbEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKLQkJCQkJCUpHaXRUZXh0LmdldCgpLnVwZGF0aW5nUmVmRmFpbGVkLAotCQkJCQkJdGFyZ2V0QnJhbmNoLCBjb21taXRJZC5uYW1lKCksIHJjKSk7Ci0JCX0KLQotCQlyZXR1cm4gcncucGFyc2VDb21taXQoY29tbWl0SWQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBhZGRTdWJtb2R1bGUoU3RyaW5nIG5hbWUsIFN0cmluZyB1cmwsIFN0cmluZyBwYXRoLAotCQkJU3RyaW5nIHJldmlzaW9uLCBMaXN0PENvcHlGaWxlPiBjb3B5ZmlsZXMsIExpc3Q8TGlua0ZpbGU+IGxpbmtmaWxlcywKLQkJCUdpdCBnaXQpIHRocm93cyBHaXRBUElFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJYXNzZXJ0ICghcmVwby5pc0JhcmUoKSk7Ci0JCWFzc2VydCAoZ2l0ICE9IG51bGwpOwotCQlpZiAoIWxpbmtmaWxlcy5pc0VtcHR5KCkpIHsKLQkJCXRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigKLQkJCQkJSkdpdFRleHQuZ2V0KCkubm9uQmFyZUxpbmtGaWxlc05vdFN1cHBvcnRlZCk7Ci0JCX0KLQotCQlTdWJtb2R1bGVBZGRDb21tYW5kIGFkZCA9IGdpdC5zdWJtb2R1bGVBZGQoKS5zZXROYW1lKG5hbWUpLnNldFBhdGgocGF0aCkKLQkJCQkuc2V0VVJJKHVybCk7Ci0JCWlmIChtb25pdG9yICE9IG51bGwpCi0JCQlhZGQuc2V0UHJvZ3Jlc3NNb25pdG9yKG1vbml0b3IpOwotCi0JCVJlcG9zaXRvcnkgc3ViUmVwbyA9IGFkZC5jYWxsKCk7Ci0JCWlmIChyZXZpc2lvbiAhPSBudWxsKSB7Ci0JCQl0cnkgKEdpdCBzdWIgPSBuZXcgR2l0KHN1YlJlcG8pKSB7Ci0JCQkJc3ViLmNoZWNrb3V0KCkuc2V0TmFtZShmaW5kUmVmKHJldmlzaW9uLCBzdWJSZXBvKSkuY2FsbCgpOwotCQkJfQotCQkJc3ViUmVwby5jbG9zZSgpOwotCQkJZ2l0LmFkZCgpLmFkZEZpbGVwYXR0ZXJuKHBhdGgpLmNhbGwoKTsKLQkJfQotCQlmb3IgKENvcHlGaWxlIGNvcHlmaWxlIDogY29weWZpbGVzKSB7Ci0JCQljb3B5ZmlsZS5jb3B5KCk7Ci0JCQlnaXQuYWRkKCkuYWRkRmlsZXBhdHRlcm4oY29weWZpbGUuZGVzdCkuY2FsbCgpOwotCQl9CisJCVJlZ3VsYXJTdXBlcnByb2plY3RXcml0ZXIgd3JpdGVyID0gbmV3IFJlZ3VsYXJTdXBlcnByb2plY3RXcml0ZXIocmVwbywgbW9uaXRvcik7CisJCXJldHVybiB3cml0ZXIud3JpdGUoZmlsdGVyZWRQcm9qZWN0cyk7CiAJfQogCiAJLyoqCkBAIC05MTAsMTMgKzY4Miw0IEBAIHN0YXRpYyBVUkkgcmVsYXRpdml6ZShVUkkgY3VycmVudCwgVVJJIHRhcmdldCkgewogCQlyZXR1cm4gVVJJLmNyZWF0ZShqLnRvU3RyaW5nKCkpOwogCX0KIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBmaW5kUmVmKFN0cmluZyByZWYsIFJlcG9zaXRvcnkgcmVwbykKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmICghT2JqZWN0SWQuaXNJZChyZWYpKSB7Ci0JCQlSZWYgciA9IHJlcG8uZXhhY3RSZWYoUl9SRU1PVEVTICsgREVGQVVMVF9SRU1PVEVfTkFNRSArICIvIiArIHJlZik7IC8vJE5PTi1OTFMtMSQKLQkJCWlmIChyICE9IG51bGwpCi0JCQkJcmV0dXJuIHIuZ2V0TmFtZSgpOwotCQl9Ci0JCXJldHVybiByZWY7Ci0JfQogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9KR2l0VGV4dC5qYXZhCmluZGV4IGI4YjFhZTIuLmJmNjVkYWUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvSkdpdFRleHQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL0pHaXRUZXh0LmphdmEKQEAgLTM4NCw2ICszODQsOCBAQCBwdWJsaWMgc3RhdGljIEpHaXRUZXh0IGdldCgpIHsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGluTWVtb3J5QnVmZmVyTGltaXRFeGNlZWRlZDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGlucHV0RGlkbnRNYXRjaExlbmd0aDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGlucHV0U3RyZWFtTXVzdFN1cHBvcnRNYXJrOworCS8qKiovIHB1YmxpYyBTdHJpbmcgaW50ZWdlclZhbHVlTm90SW5SYW5nZTsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIGludGVnZXJWYWx1ZU5vdEluUmFuZ2VTdWJTZWN0aW9uOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgaW50ZWdlclZhbHVlT3V0T2ZSYW5nZTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGludGVybmFsUmV2aXNpb25FcnJvcjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIGludGVybmFsU2VydmVyRXJyb3I7CkBAIC0zOTUsNiArMzk3LDcgQEAgcHVibGljIHN0YXRpYyBKR2l0VGV4dCBnZXQoKSB7CiAJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkQm9vbGVhblZhbHVlOwogCS8qKiovIHB1YmxpYyBTdHJpbmcgaW52YWxpZENoYW5uZWw7CiAJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkQ29tbWl0UGFyZW50TnVtYmVyOworCS8qKiovIHB1YmxpYyBTdHJpbmcgaW52YWxpZENvcmVBYmJyZXY7CiAJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkRGVwdGg7CiAJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkRW5jb2Rpbmc7CiAJLyoqKi8gcHVibGljIFN0cmluZyBpbnZhbGlkRW5jcnlwdGlvbjsKQEAgLTU5Niw2ICs1OTksMTEgQEAgcHVibGljIHN0YXRpYyBKR2l0VGV4dCBnZXQoKSB7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwdXNoQ2VydGlmaWNhdGVJbnZhbGlkRmllbGRWYWx1ZTsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHB1c2hDZXJ0aWZpY2F0ZUludmFsaWRIZWFkZXI7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwdXNoQ2VydGlmaWNhdGVJbnZhbGlkU2lnbmF0dXJlOworCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVzaERlZmF1bHROb3RoaW5nOworCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVzaERlZmF1bHROb1Vwc3RyZWFtOworCS8qKiovIHB1YmxpYyBTdHJpbmcgcHVzaERlZmF1bHRTaW1wbGU7CisJLyoqKi8gcHVibGljIFN0cmluZyBwdXNoRGVmYXVsdFRyaWFuZ3VsYXJVcHN0cmVhbTsKKwkvKioqLyBwdWJsaWMgU3RyaW5nIHB1c2hEZWZhdWx0VW5rbm93bjsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHB1c2hJc05vdFN1cHBvcnRlZEZvckJ1bmRsZVRyYW5zcG9ydDsKIAkvKioqLyBwdWJsaWMgU3RyaW5nIHB1c2hOb3RQZXJtaXR0ZWQ7CiAJLyoqKi8gcHVibGljIFN0cmluZyBwdXNoT3B0aW9uc05vdFN1cHBvcnRlZDsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9Db21tYW5kTGluZURpZmZUb29sLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvQ29tbWFuZExpbmVEaWZmVG9vbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTUxNWMKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvQ29tbWFuZExpbmVEaWZmVG9vbC5qYXZhCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEsIEFuZHJlIEJvc3NlcnQgPGFuZHJlLmJvc3NlcnRAc2llbWVucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbDsKKworLyoqCisgKiBQcmUtZGVmaW5lZCBjb21tYW5kIGxpbmUgZGlmZiB0b29scy4KKyAqCisgKiBBZGRzIHNhbWUgZGlmZiB0b29scyBhcyBhbHNvIHByZS1kZWZpbmVkIGluIEMtR2l0CisgKiA8cD4KKyAqIHNlZSAiZ2l0LWNvcmVcbWVyZ2V0b29sc1wiCisgKiA8L3A+CisgKiA8cD4KKyAqIHNlZSBsaW5rcyB0byBjb21tYW5kIGxpbmUgcGFyYW1ldGVyIGRlc2NyaXB0aW9uIGZvciB0aGUgdG9vbHMKKyAqIDwvcD4KKyAqCisgKiA8cHJlPgorICogYXJheGlzCisgKiBiYworICogYmMzCisgKiBjb2RlY29tcGFyZQorICogZGVsdGF3YWxrZXIKKyAqIGRpZmZtZXJnZQorICogZGlmZnVzZQorICogZWNtZXJnZQorICogZW1lcmdlCisgKiBleGFtZGlmZgorICogZ3VpZmZ5CisgKiBndmltZGlmZgorICogZ3ZpbWRpZmYyCisgKiBndmltZGlmZjMKKyAqIGtkaWZmMworICoga29tcGFyZQorICogbWVsZAorICogb3BlbmRpZmYKKyAqIHA0bWVyZ2UKKyAqIHRrZGlmZgorICogdmltZGlmZgorICogdmltZGlmZjIKKyAqIHZpbWRpZmYzCisgKiB3aW5tZXJnZQorICogeHhkaWZmCisgKiA8L3ByZT4KKyAqCisgKi8KK0BTdXBwcmVzc1dhcm5pbmdzKCJubHMiKQorcHVibGljIGVudW0gQ29tbWFuZExpbmVEaWZmVG9vbCB7CisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwczovL3d3dy5hcmF4aXMuY29tL21lcmdlL2RvY3VtZW50YXRpb24td2luZG93cy9jb21tYW5kLWxpbmUuZW4iPmh0dHBzOi8vd3d3LmFyYXhpcy5jb20vbWVyZ2UvZG9jdW1lbnRhdGlvbi13aW5kb3dzL2NvbW1hbmQtbGluZS5lbjwvYT4KKwkgKi8KKwlhcmF4aXMoImNvbXBhcmUiLCAiLXdhaXQgLTIgXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cHM6Ly93d3cuc2Nvb3RlcnNvZnR3YXJlLmNvbS92NGhlbHAvaW5kZXguaHRtbD9jb21tYW5kX2xpbmVfcmVmZXJlbmNlLmh0bWwiPmh0dHBzOi8vd3d3LnNjb290ZXJzb2Z0d2FyZS5jb20vdjRoZWxwL2luZGV4Lmh0bWw/Y29tbWFuZF9saW5lX3JlZmVyZW5jZS5odG1sPC9hPgorCSAqLworCWJjKCJiY29tcCIsICJcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwczovL3d3dy5zY29vdGVyc29mdHdhcmUuY29tL3Y0aGVscC9pbmRleC5odG1sP2NvbW1hbmRfbGluZV9yZWZlcmVuY2UuaHRtbCI+aHR0cHM6Ly93d3cuc2Nvb3RlcnNvZnR3YXJlLmNvbS92NGhlbHAvaW5kZXguaHRtbD9jb21tYW5kX2xpbmVfcmVmZXJlbmNlLmh0bWw8L2E+CisJICovCisJYmMzKCJiY29tcGFyZSIsIGJjKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHBzOi8vd3d3LmRldmFydC5jb20vY29kZWNvbXBhcmUvZG9jcy9pbmRleC5odG1sP2NvbXBhcmluZ192aWFfY29tbWFuZF9saW5lLmh0bSI+aHR0cHM6Ly93d3cuZGV2YXJ0LmNvbS9jb2RlY29tcGFyZS9kb2NzL2luZGV4Lmh0bWw/Y29tcGFyaW5nX3ZpYV9jb21tYW5kX2xpbmUuaHRtPC9hPgorCSAqLworCWNvZGVjb21wYXJlKCJDb2RlQ29tcGFyZSIsICJcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwczovL3d3dy5kZWx0YXdhbGtlci5jb20vaW50ZWdyYXRlL2NvbW1hbmQtbGluZSI+aHR0cHM6Ly93d3cuZGVsdGF3YWxrZXIuY29tL2ludGVncmF0ZS9jb21tYW5kLWxpbmU8L2E+CisJICovCisJZGVsdGF3YWxrZXIoIkRlbHRhV2Fsa2VyIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHBzOi8vc291cmNlZ2Vhci5jb20vZGlmZm1lcmdlL3dlYmhlbHAvc2VjX19jbGFyZ3NfX2RpZmYuaHRtbCI+aHR0cHM6Ly9zb3VyY2VnZWFyLmNvbS9kaWZmbWVyZ2Uvd2ViaGVscC9zZWNfX2NsYXJnc19fZGlmZi5odG1sPC9hPgorCSAqLworCWRpZmZtZXJnZSgiZGlmZm1lcmdlIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly9kaWZmdXNlLnNvdXJjZWZvcmdlLm5ldC9tYW51YWwuaHRtbCNpbnRyb2R1Y3Rpb24tdXNhZ2UiPmh0dHA6Ly9kaWZmdXNlLnNvdXJjZWZvcmdlLm5ldC9tYW51YWwuaHRtbCNpbnRyb2R1Y3Rpb24tdXNhZ2U8L2E+CisJICovCisJZGlmZnVzZSgiZGlmZnVzZSIsICJcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwOi8vd3d3LmVsbGllY29tcHV0aW5nLmNvbS9lbi9PbmxpbmVEb2MvZWNtZXJnZV9lbi80NDIwNTE2Ny5hc3AiPmh0dHA6Ly93d3cuZWxsaWVjb21wdXRpbmcuY29tL2VuL09ubGluZURvYy9lY21lcmdlX2VuLzQ0MjA1MTY3LmFzcDwvYT4KKwkgKi8KKwllY21lcmdlKCJlY21lcmdlIiwgIi0tZGVmYXVsdCAtLW1vZGU9ZGlmZjIgXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lbWFjcy9tYW51YWwvaHRtbF9ub2RlL2VtYWNzL092ZXJ2aWV3LW9mLUVtZXJnZS5odG1sIj5odHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VtYWNzL21hbnVhbC9odG1sX25vZGUvZW1hY3MvT3ZlcnZpZXctb2YtRW1lcmdlLmh0bWw8L2E+CisJICovCisJZW1lcmdlKCJlbWFjcyIsICItZiBlbWVyZ2UtZmlsZXMtY29tbWFuZCBcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwczovL3d3dy5wcmVzdG9zb2Z0LmNvbS9wcy5hc3A/cGFnZT1odG1saGVscC9lZHAvY29tbWFuZF9saW5lX29wdGlvbnMiPmh0dHBzOi8vd3d3LnByZXN0b3NvZnQuY29tL3BzLmFzcD9wYWdlPWh0bWxoZWxwL2VkcC9jb21tYW5kX2xpbmVfb3B0aW9uczwvYT4KKwkgKi8KKwlleGFtZGlmZigiRXhhbURpZmYiLCAiXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiAtbmgiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHBzOi8vd3d3Lmd1aWZmeS5jb20vaGVscC9HdWlmZnlIZWxwL0d1aWZmeUNtZC5odG1sIj5odHRwczovL3d3dy5ndWlmZnkuY29tL2hlbHAvR3VpZmZ5SGVscC9HdWlmZnlDbWQuaHRtbDwvYT4KKwkgKi8KKwlndWlmZnkoImd1aWZmeSIsICJcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbCI+aHR0cDovL3ZpbWRvYy5zb3VyY2Vmb3JnZS5uZXQvaHRtbGRvYy9kaWZmLmh0bWw8L2E+CisJICovCisJZ3ZpbWRpZmYoImd2aWV3ZGlmZiIsICJcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbCI+aHR0cDovL3ZpbWRvYy5zb3VyY2Vmb3JnZS5uZXQvaHRtbGRvYy9kaWZmLmh0bWw8L2E+CisJICovCisJZ3ZpbWRpZmYyKGd2aW1kaWZmKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly92aW1kb2Muc291cmNlZm9yZ2UubmV0L2h0bWxkb2MvZGlmZi5odG1sIj5odHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbDwvYT4KKwkgKi8KKwlndmltZGlmZjMoZ3ZpbWRpZmYpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cDovL2tkaWZmMy5zb3VyY2Vmb3JnZS5uZXQvZG9jL2RvY3VtZW50YXRpb24uaHRtbCI+aHR0cDovL2tkaWZmMy5zb3VyY2Vmb3JnZS5uZXQvZG9jL2RvY3VtZW50YXRpb24uaHRtbDwvYT4KKwkgKi8KKwlrZGlmZjMoImtkaWZmMyIsCisJCQkiLS1MMSBcIiRNRVJHRUQgKEEpXCIgLS1MMiBcIiRNRVJHRUQgKEIpXCIgXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpLAorCS8qKgorCSAqIFNlZTogPGEgaHJlZj0KKwkgKiAiaHR0cHM6Ly9kb2NzLmtkZS5vcmcvdHJ1bms1L2VuL2tkZXNkay9rb21wYXJlL2NvbW1hbmRsaW5lLW9wdGlvbnMuaHRtbCI+aHR0cHM6Ly9kb2NzLmtkZS5vcmcvdHJ1bms1L2VuL2tkZXNkay9rb21wYXJlL2NvbW1hbmRsaW5lLW9wdGlvbnMuaHRtbDwvYT4KKwkgKi8KKwlrb21wYXJlKCJrb21wYXJlIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogInR0cDovL21lbGRtZXJnZS5vcmcvaGVscC9maWxlLW1vZGUuaHRtbCI+aHR0cDovL21lbGRtZXJnZS5vcmcvaGVscC9maWxlLW1vZGUuaHRtbDwvYT4KKwkgKi8KKwltZWxkKCJtZWxkIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly93d3cubWFucGFnZXouY29tL21hbi8xL29wZW5kaWZmLyI+aHR0cDovL3d3dy5tYW5wYWdlei5jb20vbWFuLzEvb3BlbmRpZmYvPC9hPgorCSAqIDxwPgorCSAqIEhpbnQ6IGNoZWNrIHRoZSAnIHwgY2F0JyBmb3IgdGhlIGNhbGwKKwkgKiA8L3A+CisJICovCisJb3BlbmRpZmYoIm9wZW5kaWZmIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHBzOi8vd3d3LnBlcmZvcmNlLmNvbS9tYW51YWxzL3YxNS4xL2NtZHJlZi9wNF9tZXJnZS5odG1sIj5odHRwczovL3d3dy5wZXJmb3JjZS5jb20vbWFudWFscy92MTUuMS9jbWRyZWYvcDRfbWVyZ2UuaHRtbDwvYT4KKwkgKi8KKwlwNG1lcmdlKCJwNG1lcmdlIiwgIlwiJExPQ0FMXCIgXCIkUkVNT1RFXCIiKSwKKwkvKioKKwkgKiBTZWU6IDxhIGhyZWY9CisJICogImh0dHA6Ly9saW51eC5tYXRoLnRpZnIucmVzLmluL21hbnVhbHMvbWFuL3RrZGlmZi5odG1sIj5odHRwOi8vbGludXgubWF0aC50aWZyLnJlcy5pbi9tYW51YWxzL21hbi90a2RpZmYuaHRtbDwvYT4KKwkgKi8KKwl0a2RpZmYoInRrZGlmZiIsICJcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbCI+aHR0cDovL3ZpbWRvYy5zb3VyY2Vmb3JnZS5uZXQvaHRtbGRvYy9kaWZmLmh0bWw8L2E+CisJICovCisJdmltZGlmZigidmlld2RpZmYiLCBndmltZGlmZiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbCI+aHR0cDovL3ZpbWRvYy5zb3VyY2Vmb3JnZS5uZXQvaHRtbGRvYy9kaWZmLmh0bWw8L2E+CisJICovCisJdmltZGlmZjIodmltZGlmZiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwOi8vdmltZG9jLnNvdXJjZWZvcmdlLm5ldC9odG1sZG9jL2RpZmYuaHRtbCI+aHR0cDovL3ZpbWRvYy5zb3VyY2Vmb3JnZS5uZXQvaHRtbGRvYy9kaWZmLmh0bWw8L2E+CisJICovCisJdmltZGlmZjModmltZGlmZiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwOi8vbWFudWFsLndpbm1lcmdlLm9yZy9Db21tYW5kX2xpbmUuaHRtbCI+aHR0cDovL21hbnVhbC53aW5tZXJnZS5vcmcvQ29tbWFuZF9saW5lLmh0bWw8L2E+CisJICogPHA+CisJICogSGludDogY2hlY2sgaG93ICdtZXJnZXRvb2xfZmluZF93aW4zMl9jbWQgIldpbk1lcmdlVS5leGUiICJXaW5NZXJnZSInCisJICogd29ya3MKKwkgKiA8L3A+CisJICovCisJd2lubWVyZ2UoIldpbk1lcmdlVSIsICItdSAtZSBcIiRMT0NBTFwiIFwiJFJFTU9URVwiIiksCisJLyoqCisJICogU2VlOiA8YSBocmVmPQorCSAqICJodHRwOi8vZnVyaXVzLmNhL3h4ZGlmZi9kb2MveHhkaWZmLWRvYy5odG1sIj5odHRwOi8vZnVyaXVzLmNhL3h4ZGlmZi9kb2MveHhkaWZmLWRvYy5odG1sPC9hPgorCSAqLworCXh4ZGlmZigieHhkaWZmIiwKKwkJCSItUiAnQWNjZWwuU2VhcmNoOiBcIkN0cmwrRlwiJyAtUiAnQWNjZWwuU2VhcmNoRm9yd2FyZDogXCJDdHJsK0dcIicgXCIkTE9DQUxcIiBcIiRSRU1PVEVcIiIpOworCisJQ29tbWFuZExpbmVEaWZmVG9vbChTdHJpbmcgcGF0aCwgU3RyaW5nIHBhcmFtZXRlcnMpIHsKKwkJdGhpcy5wYXRoID0gcGF0aDsKKwkJdGhpcy5wYXJhbWV0ZXJzID0gcGFyYW1ldGVyczsKKwl9CisKKwlDb21tYW5kTGluZURpZmZUb29sKENvbW1hbmRMaW5lRGlmZlRvb2wgZnJvbSkgeworCQl0aGlzKGZyb20uZ2V0UGF0aCgpLCBmcm9tLmdldFBhcmFtZXRlcnMoKSk7CisJfQorCisJQ29tbWFuZExpbmVEaWZmVG9vbChTdHJpbmcgcGF0aCwgQ29tbWFuZExpbmVEaWZmVG9vbCBmcm9tKSB7CisJCXRoaXMocGF0aCwgZnJvbS5nZXRQYXJhbWV0ZXJzKCkpOworCX0KKworCXByaXZhdGUgZmluYWwgU3RyaW5nIHBhdGg7CisKKwlwcml2YXRlIGZpbmFsIFN0cmluZyBwYXJhbWV0ZXJzOworCisJLyoqCisJICogQHJldHVybiBwYXRoCisJICovCisJcHVibGljIFN0cmluZyBnZXRQYXRoKCkgeworCQlyZXR1cm4gcGF0aDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHBhcmFtZXRlcnMgYXMgb25lIHN0cmluZworCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0UGFyYW1ldGVycygpIHsKKwkJcmV0dXJuIHBhcmFtZXRlcnM7CisJfQorCit9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRGlmZlRvb2xDb25maWcuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9EaWZmVG9vbENvbmZpZy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MWY2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRGlmZlRvb2xDb25maWcuamF2YQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxLCBBbmRyZSBCb3NzZXJ0IDxhbmRyZS5ib3NzZXJ0QHNpZW1lbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmRpZmZtZXJnZXRvb2w7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19ESUZGVE9PTF9TRUNUSU9OOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0RJRkZfU0VDVElPTjsKK2ltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfQ01EOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9HVUlUT09MOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9QQVRIOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHMuQ09ORklHX0tFWV9QUk9NUFQ7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1RPT0w7CitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1RSVVNUX0VYSVRfQ09ERTsKKworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWcuU2VjdGlvblBhcnNlcjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5pbnRlcm5hbC5Cb29sZWFuVHJpU3RhdGU7CisKKy8qKgorICogS2VlcHMgdHJhY2sgb2YgZGlmZnRvb2wgcmVsYXRlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCisgKi8KK3B1YmxpYyBjbGFzcyBEaWZmVG9vbENvbmZpZyB7CisKKwkvKiogS2V5IGZvciB7QGxpbmsgQ29uZmlnI2dldChTZWN0aW9uUGFyc2VyKX0uICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBDb25maWcuU2VjdGlvblBhcnNlcjxEaWZmVG9vbENvbmZpZz4gS0VZID0gRGlmZlRvb2xDb25maWc6Om5ldzsKKworCXByaXZhdGUgZmluYWwgU3RyaW5nIHRvb2xOYW1lOworCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZ3VpVG9vbE5hbWU7CisKKwlwcml2YXRlIGZpbmFsIGJvb2xlYW4gcHJvbXB0OworCisJcHJpdmF0ZSBmaW5hbCBCb29sZWFuVHJpU3RhdGUgdHJ1c3RFeGl0Q29kZTsKKworCXByaXZhdGUgZmluYWwgTWFwPFN0cmluZywgRXh0ZXJuYWxEaWZmVG9vbD4gdG9vbHM7CisKKwlwcml2YXRlIERpZmZUb29sQ29uZmlnKENvbmZpZyByYykgeworCQl0b29sTmFtZSA9IHJjLmdldFN0cmluZyhDT05GSUdfRElGRl9TRUNUSU9OLCBudWxsLCBDT05GSUdfS0VZX1RPT0wpOworCQlndWlUb29sTmFtZSA9IHJjLmdldFN0cmluZyhDT05GSUdfRElGRl9TRUNUSU9OLCBudWxsLAorCQkJCUNPTkZJR19LRVlfR1VJVE9PTCk7CisJCXByb21wdCA9IHJjLmdldEJvb2xlYW4oQ09ORklHX0RJRkZUT09MX1NFQ1RJT04sIENPTkZJR19LRVlfUFJPTVBULAorCQkJCXRydWUpOworCQlTdHJpbmcgdHJ1c3RTdHIgPSByYy5nZXRTdHJpbmcoQ09ORklHX0RJRkZUT09MX1NFQ1RJT04sIG51bGwsCisJCQkJQ09ORklHX0tFWV9UUlVTVF9FWElUX0NPREUpOworCQlpZiAodHJ1c3RTdHIgIT0gbnVsbCkgeworCQkJdHJ1c3RFeGl0Q29kZSA9IEJvb2xlYW4ucGFyc2VCb29sZWFuKHRydXN0U3RyKQorCQkJCQk/IEJvb2xlYW5UcmlTdGF0ZS5UUlVFCisJCQkJCTogQm9vbGVhblRyaVN0YXRlLkZBTFNFOworCQl9IGVsc2UgeworCQkJdHJ1c3RFeGl0Q29kZSA9IEJvb2xlYW5UcmlTdGF0ZS5VTlNFVDsKKwkJfQorCQl0b29scyA9IG5ldyBIYXNoTWFwPD4oKTsKKwkJU2V0PFN0cmluZz4gc3Vic2VjdGlvbnMgPSByYy5nZXRTdWJzZWN0aW9ucyhDT05GSUdfRElGRlRPT0xfU0VDVElPTik7CisJCWZvciAoU3RyaW5nIG5hbWUgOiBzdWJzZWN0aW9ucykgeworCQkJU3RyaW5nIGNtZCA9IHJjLmdldFN0cmluZyhDT05GSUdfRElGRlRPT0xfU0VDVElPTiwgbmFtZSwKKwkJCQkJQ09ORklHX0tFWV9DTUQpOworCQkJU3RyaW5nIHBhdGggPSByYy5nZXRTdHJpbmcoQ09ORklHX0RJRkZUT09MX1NFQ1RJT04sIG5hbWUsCisJCQkJCUNPTkZJR19LRVlfUEFUSCk7CisJCQlpZiAoKGNtZCAhPSBudWxsKSB8fCAocGF0aCAhPSBudWxsKSkgeworCQkJCXRvb2xzLnB1dChuYW1lLCBuZXcgVXNlckRlZmluZWREaWZmVG9vbChuYW1lLCBwYXRoLCBjbWQpKTsKKwkJCX0KKwkJfQorCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGRlZmF1bHQgZGlmZiB0b29sIG5hbWUgKGRpZmYudG9vbCkKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldERlZmF1bHRUb29sTmFtZSgpIHsKKwkJcmV0dXJuIHRvb2xOYW1lOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIGRlZmF1bHQgR1VJIGRpZmYgdG9vbCBuYW1lIChkaWZmLmd1aXRvb2wpCisJICovCisJcHVibGljIFN0cmluZyBnZXREZWZhdWx0R3VpVG9vbE5hbWUoKSB7CisJCXJldHVybiBndWlUb29sTmFtZTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkaWZmIHRvb2wgInByb21wdCIgb3B0aW9uIChkaWZmdG9vbC5wcm9tcHQpCisJICovCisJcHVibGljIGJvb2xlYW4gaXNQcm9tcHQoKSB7CisJCXJldHVybiBwcm9tcHQ7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgZGlmZiB0b29sICJ0cnVzdCBleGl0IGNvZGUiIG9wdGlvbiAoZGlmZnRvb2wudHJ1c3RFeGl0Q29kZSkKKwkgKi8KKwlwdWJsaWMgYm9vbGVhbiBpc1RydXN0RXhpdENvZGUoKSB7CisJCXJldHVybiB0cnVzdEV4aXRDb2RlID09IEJvb2xlYW5UcmlTdGF0ZS5UUlVFOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHRvb2xzIG1hcAorCSAqLworCXB1YmxpYyBNYXA8U3RyaW5nLCBFeHRlcm5hbERpZmZUb29sPiBnZXRUb29scygpIHsKKwkJcmV0dXJuIHRvb2xzOworCX0KKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHRvb2wgbmFtZXMKKwkgKi8KKwlwdWJsaWMgU2V0PFN0cmluZz4gZ2V0VG9vbE5hbWVzKCkgeworCQlyZXR1cm4gdG9vbHMua2V5U2V0KCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0RpZmZUb29scy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL0RpZmZUb29scy5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5NzI5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRGlmZlRvb2xzLmphdmEKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSwgQW5kcmUgQm9zc2VydCA8YW5kcmUuYm9zc2VydEBzaWVtZW5zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sOworCitpbXBvcnQgamF2YS51dGlsLlRyZWVNYXA7CitpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb25zOworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuaW50ZXJuYWwuQm9vbGVhblRyaVN0YXRlOworCisvKioKKyAqIE1hbmFnZXMgZGlmZiB0b29scy4KKyAqLworcHVibGljIGNsYXNzIERpZmZUb29scyB7CisKKwlwcml2YXRlIGZpbmFsIERpZmZUb29sQ29uZmlnIGNvbmZpZzsKKworCXByaXZhdGUgTWFwPFN0cmluZywgRXh0ZXJuYWxEaWZmVG9vbD4gcHJlZGVmaW5lZFRvb2xzOworCisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBFeHRlcm5hbERpZmZUb29sPiB1c2VyRGVmaW5lZFRvb2xzOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZXh0ZXJuYWwgZGlmZi10b29scyBtYW5hZ2VyIGZvciBnaXZlbiByZXBvc2l0b3J5LgorCSAqCisJICogQHBhcmFtIHJlcG8KKwkgKiAgICAgICAgICAgIHRoZSByZXBvc2l0b3J5CisJICovCisJcHVibGljIERpZmZUb29scyhSZXBvc2l0b3J5IHJlcG8pIHsKKwkJY29uZmlnID0gcmVwby5nZXRDb25maWcoKS5nZXQoRGlmZlRvb2xDb25maWcuS0VZKTsKKwkJc2V0dXBQcmVkZWZpbmVkVG9vbHMoKTsKKwkJc2V0dXBVc2VyRGVmaW5lZFRvb2xzKCk7CisJfQorCisJLyoqCisJICogQ29tcGFyZSB0d28gdmVyc2lvbnMgb2YgYSBmaWxlLgorCSAqCisJICogQHBhcmFtIG5ld1BhdGgKKwkgKiAgICAgICAgICAgIHRoZSBuZXcgZmlsZSBwYXRoCisJICogQHBhcmFtIG9sZFBhdGgKKwkgKiAgICAgICAgICAgIHRoZSBvbGQgZmlsZSBwYXRoCisJICogQHBhcmFtIG5ld0lkCisJICogICAgICAgICAgICB0aGUgbmV3IG9iamVjdCBJRAorCSAqIEBwYXJhbSBvbGRJZAorCSAqICAgICAgICAgICAgdGhlIG9sZCBvYmplY3QgSUQKKwkgKiBAcGFyYW0gdG9vbE5hbWUKKwkgKiAgICAgICAgICAgIHRoZSBzZWxlY3RlZCB0b29sIG5hbWUgKGNhbiBiZSBudWxsKQorCSAqIEBwYXJhbSBwcm9tcHQKKwkgKiAgICAgICAgICAgIHRoZSBwcm9tcHQgb3B0aW9uCisJICogQHBhcmFtIGd1aQorCSAqICAgICAgICAgICAgdGhlIEdVSSBvcHRpb24KKwkgKiBAcGFyYW0gdHJ1c3RFeGl0Q29kZQorCSAqICAgICAgICAgICAgdGhlICJ0cnVzdCBleGl0IGNvZGUiIG9wdGlvbgorCSAqIEByZXR1cm4gdGhlIHJldHVybiBjb2RlIGZyb20gZXhlY3V0ZWQgdG9vbAorCSAqLworCXB1YmxpYyBpbnQgY29tcGFyZShTdHJpbmcgbmV3UGF0aCwgU3RyaW5nIG9sZFBhdGgsIFN0cmluZyBuZXdJZCwKKwkJCVN0cmluZyBvbGRJZCwgU3RyaW5nIHRvb2xOYW1lLCBCb29sZWFuVHJpU3RhdGUgcHJvbXB0LAorCQkJQm9vbGVhblRyaVN0YXRlIGd1aSwgQm9vbGVhblRyaVN0YXRlIHRydXN0RXhpdENvZGUpIHsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgdG9vbCBuYW1lcworCSAqLworCXB1YmxpYyBTZXQ8U3RyaW5nPiBnZXRUb29sTmFtZXMoKSB7CisJCXJldHVybiBjb25maWcuZ2V0VG9vbE5hbWVzKCk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgdXNlciBkZWZpbmVkIHRvb2xzCisJICovCisJcHVibGljIE1hcDxTdHJpbmcsIEV4dGVybmFsRGlmZlRvb2w+IGdldFVzZXJEZWZpbmVkVG9vbHMoKSB7CisJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAodXNlckRlZmluZWRUb29scyk7CisJfQorCisJLyoqCisJICogQHJldHVybiB0aGUgYXZhaWxhYmxlIHByZWRlZmluZWQgdG9vbHMKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgRXh0ZXJuYWxEaWZmVG9vbD4gZ2V0QXZhaWxhYmxlVG9vbHMoKSB7CisJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAocHJlZGVmaW5lZFRvb2xzKTsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBOT1QgYXZhaWxhYmxlIHByZWRlZmluZWQgdG9vbHMKKwkgKi8KKwlwdWJsaWMgTWFwPFN0cmluZywgRXh0ZXJuYWxEaWZmVG9vbD4gZ2V0Tm90QXZhaWxhYmxlVG9vbHMoKSB7CisJCXJldHVybiBDb2xsZWN0aW9ucy51bm1vZGlmaWFibGVNYXAobmV3IFRyZWVNYXA8PigpKTsKKwl9CisKKwkvKioKKwkgKiBAcGFyYW0gZ3VpCisJICogICAgICAgICAgICB1c2UgdGhlIGRpZmYuZ3VpdG9vbCBzZXR0aW5nID8KKwkgKiBAcmV0dXJuIHRoZSBkZWZhdWx0IHRvb2wgbmFtZQorCSAqLworCXB1YmxpYyBTdHJpbmcgZ2V0RGVmYXVsdFRvb2xOYW1lKEJvb2xlYW5UcmlTdGF0ZSBndWkpIHsKKwkJcmV0dXJuIGd1aSAhPSBCb29sZWFuVHJpU3RhdGUuVU5TRVQgPyAibXlfZ3VpX3Rvb2wiIC8vJE5PTi1OTFMtMSQKKwkJCQk6ICJteV9kZWZhdWx0X3Rvb2xuYW1lIjsgLy8kTk9OLU5MUy0xJAorCX0KKworCS8qKgorCSAqIEByZXR1cm4gaXMgaW50ZXJhY3RpdmUgKGNvbmZpZyBwcm9tcHQgZW5hYmxlZCkgPworCSAqLworCXB1YmxpYyBib29sZWFuIGlzSW50ZXJhY3RpdmUoKSB7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlwcml2YXRlIHZvaWQgc2V0dXBQcmVkZWZpbmVkVG9vbHMoKSB7CisJCXByZWRlZmluZWRUb29scyA9IG5ldyBUcmVlTWFwPD4oKTsKKwkJZm9yIChDb21tYW5kTGluZURpZmZUb29sIHRvb2wgOiBDb21tYW5kTGluZURpZmZUb29sLnZhbHVlcygpKSB7CisJCQlwcmVkZWZpbmVkVG9vbHMucHV0KHRvb2wubmFtZSgpLCBuZXcgUHJlRGVmaW5lZERpZmZUb29sKHRvb2wpKTsKKwkJfQorCX0KKworCXByaXZhdGUgdm9pZCBzZXR1cFVzZXJEZWZpbmVkVG9vbHMoKSB7CisJCXVzZXJEZWZpbmVkVG9vbHMgPSBuZXcgVHJlZU1hcDw+KCk7CisJCU1hcDxTdHJpbmcsIEV4dGVybmFsRGlmZlRvb2w+IHVzZXJUb29scyA9IGNvbmZpZy5nZXRUb29scygpOworCQlmb3IgKFN0cmluZyBuYW1lIDogdXNlclRvb2xzLmtleVNldCgpKSB7CisJCQlFeHRlcm5hbERpZmZUb29sIHVzZXJUb29sID0gdXNlclRvb2xzLmdldChuYW1lKTsKKwkJCS8vIGlmIGRpZmZ0b29sLjxuYW1lPi5jbWQgaXMgZGVmaW5lZCB3ZSBoYXZlIHVzZXIgZGVmaW5lZCB0b29sCisJCQlpZiAodXNlclRvb2wuZ2V0Q29tbWFuZCgpICE9IG51bGwpIHsKKwkJCQl1c2VyRGVmaW5lZFRvb2xzLnB1dChuYW1lLCB1c2VyVG9vbCk7CisJCQl9IGVsc2UgaWYgKHVzZXJUb29sLmdldFBhdGgoKSAhPSBudWxsKSB7CisJCQkJLy8gaWYgZGlmZnRvb2wuPG5hbWU+LnBhdGggaXMgZGVmaW5lZCB3ZSBqdXN0IG92ZXJsb2FkIHRoZSBwYXRoCisJCQkJLy8gb2YgcHJlZGVmaW5lZCB0b29sCisJCQkJUHJlRGVmaW5lZERpZmZUb29sIHByZWRlZlRvb2wgPSAoUHJlRGVmaW5lZERpZmZUb29sKSBwcmVkZWZpbmVkVG9vbHMKKwkJCQkJCS5nZXQobmFtZSk7CisJCQkJaWYgKHByZWRlZlRvb2wgIT0gbnVsbCkgeworCQkJCQlwcmVkZWZUb29sLnNldFBhdGgodXNlclRvb2wuZ2V0UGF0aCgpKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9FeHRlcm5hbERpZmZUb29sLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRXh0ZXJuYWxEaWZmVG9vbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZDdlODIKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvRXh0ZXJuYWxEaWZmVG9vbC5qYXZhCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMSwgQW5kcmUgQm9zc2VydCA8YW5kcmUuYm9zc2VydEBzaWVtZW5zLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCisKK3BhY2thZ2Ugb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5kaWZmbWVyZ2V0b29sOworCisvKioKKyAqIFRoZSBleHRlcm5hbCB0b29sIGludGVyZmFjZS4KKyAqLworcHVibGljIGludGVyZmFjZSBFeHRlcm5hbERpZmZUb29sIHsKKworCS8qKgorCSAqIEByZXR1cm4gdGhlIHRvb2wgbmFtZQorCSAqLworCVN0cmluZyBnZXROYW1lKCk7CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSB0b29sIHBhdGgKKwkgKi8KKwlTdHJpbmcgZ2V0UGF0aCgpOworCisJLyoqCisJICogQHJldHVybiB0aGUgdG9vbCBjb21tYW5kCisJICovCisJU3RyaW5nIGdldENvbW1hbmQoKTsKKworfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL1ByZURlZmluZWREaWZmVG9vbC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9kaWZmbWVyZ2V0b29sL1ByZURlZmluZWREaWZmVG9vbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNjlmYjQKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvUHJlRGVmaW5lZERpZmZUb29sLmphdmEKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOC0yMDIxLCBBbmRyZSBCb3NzZXJ0IDxhbmRyZS5ib3NzZXJ0QHNpZW1lbnMuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQorICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAorICogaHR0cHM6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lZGwtdjEwLnBocC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKi8KKworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLmRpZmZtZXJnZXRvb2w7CisKKy8qKgorICogVGhlIHByZS1kZWZpbmVkIGRpZmYgdG9vbC4KKyAqLworcHVibGljIGNsYXNzIFByZURlZmluZWREaWZmVG9vbCBleHRlbmRzIFVzZXJEZWZpbmVkRGlmZlRvb2wgeworCisJLyoqCisJICogQ3JlYXRlIGEgcHJlLWRlZmluZWQgZGlmZiB0b29sCisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUKKwkgKiBAcGFyYW0gcGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGgKKwkgKiBAcGFyYW0gcGFyYW1ldGVycworCSAqICAgICAgICAgICAgdGhlIHRvb2wgcGFyYW1ldGVycyBhcyBvbmUgc3RyaW5nIHRoYXQgaXMgdXNlZCB0b2dldGhlciB3aXRoCisJICogICAgICAgICAgICBwYXRoIGFzIGNvbW1hbmQKKwkgKi8KKwlwdWJsaWMgUHJlRGVmaW5lZERpZmZUb29sKFN0cmluZyBuYW1lLCBTdHJpbmcgcGF0aCwgU3RyaW5nIHBhcmFtZXRlcnMpIHsKKwkJc3VwZXIobmFtZSwgcGF0aCwgcGFyYW1ldGVycyk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyB0aGUgcHJlLWRlZmluZWQgZGlmZiB0b29sCisJICoKKwkgKiBAcGFyYW0gdG9vbAorCSAqICAgICAgICAgICAgdGhlIGNvbW1hbmQgbGluZSBkaWZmIHRvb2wKKwkgKgorCSAqLworCXB1YmxpYyBQcmVEZWZpbmVkRGlmZlRvb2woQ29tbWFuZExpbmVEaWZmVG9vbCB0b29sKSB7CisJCXRoaXModG9vbC5uYW1lKCksIHRvb2wuZ2V0UGF0aCgpLCB0b29sLmdldFBhcmFtZXRlcnMoKSk7CisJfQorCisJLyoqCisJICogQHBhcmFtIHBhdGgKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBzZXRQYXRoKFN0cmluZyBwYXRoKSB7CisJCS8vIGhhbmRsaW5nIG9mIHNwYWNlcyBpbiBwYXRoCisJCWlmIChwYXRoLmNvbnRhaW5zKCIgIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJLy8gYWRkIHF1b3RlcyBiZWZvcmUgaWYgbmVlZGVkCisJCQlpZiAoIXBhdGguc3RhcnRzV2l0aCgiXCIiKSkgeyAvLyROT04tTkxTLTEkCisJCQkJcGF0aCA9ICJcIiIgKyBwYXRoOyAvLyROT04tTkxTLTEkCisJCQl9CisJCQkvLyBhZGQgcXVvdGVzIGFmdGVyIGlmIG5lZWRlZAorCQkJaWYgKCFwYXRoLmVuZHNXaXRoKCJcIiIpKSB7IC8vJE5PTi1OTFMtMSQKKwkJCQlwYXRoID0gcGF0aCArICJcIiI7IC8vJE5PTi1OTFMtMSQKKwkJCX0KKwkJfQorCQlzdXBlci5zZXRQYXRoKHBhdGgpOworCX0KKworCS8qKgorCSAqIHtAaW5oZXJpdERvY30KKwkgKgorCSAqIEByZXR1cm4gdGhlIGNvbmNhdGVuYXRlZCBwYXRoIGFuZCBjb21tYW5kIG9mIHRoZSBwcmUtZGVmaW5lZCBkaWZmIHRvb2wKKwkgKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgU3RyaW5nIGdldENvbW1hbmQoKSB7CisJCXJldHVybiBnZXRQYXRoKCkgKyAiICIgKyBzdXBlci5nZXRDb21tYW5kKCk7IC8vJE5PTi1OTFMtMSQKKwl9CisKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvZGlmZm1lcmdldG9vbC9Vc2VyRGVmaW5lZERpZmZUb29sLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvVXNlckRlZmluZWREaWZmVG9vbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxMjI5NmUKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL2RpZmZtZXJnZXRvb2wvVXNlckRlZmluZWREaWZmVG9vbC5qYXZhCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEsIEFuZHJlIEJvc3NlcnQgPGFuZHJlLmJvc3NlcnRAc2llbWVucy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuZGlmZm1lcmdldG9vbDsKKworLyoqCisgKiBUaGUgdXNlci1kZWZpbmVkIGRpZmYgdG9vbC4KKyAqLworcHVibGljIGNsYXNzIFVzZXJEZWZpbmVkRGlmZlRvb2wgaW1wbGVtZW50cyBFeHRlcm5hbERpZmZUb29sIHsKKworCS8qKgorCSAqIHRoZSBkaWZmIHRvb2wgbmFtZQorCSAqLworCXByaXZhdGUgZmluYWwgU3RyaW5nIG5hbWU7CisKKwkvKioKKwkgKiB0aGUgZGlmZiB0b29sIHBhdGgKKwkgKi8KKwlwcml2YXRlIFN0cmluZyBwYXRoOworCisJLyoqCisJICogdGhlIGRpZmYgdG9vbCBjb21tYW5kCisJICovCisJcHJpdmF0ZSBmaW5hbCBTdHJpbmcgY21kOworCisJLyoqCisJICogQ3JlYXRlcyB0aGUgZGlmZiB0b29sCisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgdGhlIG5hbWUKKwkgKiBAcGFyYW0gcGF0aAorCSAqICAgICAgICAgICAgdGhlIHBhdGgKKwkgKiBAcGFyYW0gY21kCisJICogICAgICAgICAgICB0aGUgY29tbWFuZAorCSAqLworCXB1YmxpYyBVc2VyRGVmaW5lZERpZmZUb29sKFN0cmluZyBuYW1lLCBTdHJpbmcgcGF0aCwgU3RyaW5nIGNtZCkgeworCQl0aGlzLm5hbWUgPSBuYW1lOworCQl0aGlzLnBhdGggPSBwYXRoOworCQl0aGlzLmNtZCA9IGNtZDsKKwl9CisKKwkvKioKKwkgKiBAcmV0dXJuIHRoZSBkaWZmIHRvb2wgbmFtZQorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKKwkJcmV0dXJuIG5hbWU7CisJfQorCisJLyoqCisJICogVGhlIHBhdGggb2YgdGhlIGRpZmYgdG9vbC4KKwkgKgorCSAqIDxwPgorCSAqIFRoZSBwYXRoIHRvIGEgcHJlLWRlZmluZWQgZXh0ZXJuYWwgZGlmZiB0b29sIGNhbiBiZSBvdmVycmlkZGVuIGJ5CisJICogc3BlY2lmeWluZyB7QGNvZGUgZGlmZnRvb2wuPHRvb2w+LnBhdGh9IGluIGEgY29uZmlndXJhdGlvbiBmaWxlLgorCSAqIDwvcD4KKwkgKiA8cD4KKwkgKiBGb3IgYSB1c2VyIGRlZmluZWQgZGlmZiB0b29sICh0aGF0IGRvZXMgbm90IG92ZXJyaWRlIGEgcHJlLWRlZmluZWQgZGlmZgorCSAqIHRvb2wpLCB0aGUgcGF0aCBpcyBpZ25vcmVkIHdoZW4gaW52b2tpbmcgdGhlIHRvb2wuCisJICogPC9wPgorCSAqCisJICogQHJldHVybiB0aGUgZGlmZiB0b29sIHBhdGgKKwkgKgorCSAqIEBzZWUgPGEgaHJlZj0KKwkgKiAgICAgICJodHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0LWRpZmZ0b29sIj5odHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0LWRpZmZ0b29sPC9hPgorCSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgZ2V0UGF0aCgpIHsKKwkJcmV0dXJuIHBhdGg7CisJfQorCisJLyoqCisJICogVGhlIGNvbW1hbmQgb2YgdGhlIGRpZmYgdG9vbC4KKwkgKgorCSAqIDxwPgorCSAqIEEgcHJlLWRlZmluZWQgZXh0ZXJuYWwgZGlmZiB0b29sIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSB0b29scyBuYW1lCisJICogaW4gYSBjb25maWd1cmF0aW9uIGZpbGUuIFRoZSBvdmVyd3JpdHRlbiB0b29sIGlzIHRoZW4gYSB1c2VyIGRlZmluZWQgdG9vbAorCSAqIGFuZCB0aGUgY29tbWFuZCBvZiB0aGUgZGlmZiB0b29sIGlzIHNwZWNpZmllZCB3aXRoCisJICoge0Bjb2RlIGRpZmZ0b29sLjx0b29sPi5jbWR9LiBUaGlzIGNvbW1hbmQgbXVzdCB3b3JrIHdpdGhvdXQgcHJlcGVuZGluZworCSAqIHRoZSB2YWx1ZSBvZiB7QGxpbmsgI2dldFBhdGgoKX0gYW5kIGNhbiBzb21ldGltZXMgaW5jbHVkZSB0b29sCisJICogcGFyYW1ldGVycy4KKwkgKiA8L3A+CisJICoKKwkgKiBAcmV0dXJuIHRoZSBkaWZmIHRvb2wgY29tbWFuZAorCSAqCisJICogQHNlZSA8YSBocmVmPQorCSAqICAgICAgImh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtZGlmZnRvb2wiPmh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtZGlmZnRvb2w8L2E+CisJICovCisJQE92ZXJyaWRlCisJcHVibGljIFN0cmluZyBnZXRDb21tYW5kKCkgeworCQlyZXR1cm4gY21kOworCX0KKworCS8qKgorCSAqIE92ZXJyaWRlcyB0aGUgcGF0aCBmb3IgdGhlIGdpdmVuIHRvb2wuIEVxdWl2YWxlbnQgdG8gc2V0dGluZworCSAqIHtAY29kZSBkaWZmdG9vbC48dG9vbD4ucGF0aH0uCisJICoKKwkgKiBAcGFyYW0gcGF0aAorCSAqICAgICAgICAgICAgdGhlIG5ldyBkaWZmIHRvb2wgcGF0aAorCSAqCisJICogQHNlZSA8YSBocmVmPQorCSAqICAgICAgImh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtZGlmZnRvb2wiPmh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXQtZGlmZnRvb2w8L2E+CisJICovCisJcHVibGljIHZvaWQgc2V0UGF0aChTdHJpbmcgcGF0aCkgeworCQl0aGlzLnBhdGggPSBwYXRoOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzQmxvY2tDYWNoZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlLmphdmEKaW5kZXggNTRjNTI3Yy4uYjMwZDUwOSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlLmphdmEKQEAgLTEyLDYgKzEyLDEwIEBACiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5kZnM7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudGltZS5EdXJhdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkNvbmN1cnJlbnRIYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNJbnRlZ2VyOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNMb25nOwogaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LmF0b21pYy5BdG9taWNSZWZlcmVuY2U7CiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuYXRvbWljLkF0b21pY1JlZmVyZW5jZUFycmF5OwpAQCAtMTY2LDYgKzE3MCwxMiBAQCBwdWJsaWMgc3RhdGljIERmc0Jsb2NrQ2FjaGUgZ2V0SW5zdGFuY2UoKSB7CiAJLyoqIExpbWl0cyBvZiBjYWNoZSBob3QgY291bnQgcGVyIHBhY2sgZmlsZSBleHRlbnNpb24uICovCiAJcHJpdmF0ZSBmaW5hbCBpbnRbXSBjYWNoZUhvdExpbWl0cyA9IG5ldyBpbnRbUGFja0V4dC52YWx1ZXMoKS5sZW5ndGhdOwogCisJLyoqIENvbnN1bWVyIG9mIGxvYWRpbmcgYW5kIGV2aWN0aW9uIGV2ZW50cyBvZiBpbmRleGVzLiAqLworCXByaXZhdGUgZmluYWwgRGZzQmxvY2tDYWNoZUNvbmZpZy5JbmRleEV2ZW50Q29uc3VtZXIgaW5kZXhFdmVudENvbnN1bWVyOworCisJLyoqIFN0b3JlcyB0aW1lc3RhbXBzIG9mIHRoZSBsYXN0IGV2aWN0aW9uIG9mIGluZGV4ZXMuICovCisJcHJpdmF0ZSBmaW5hbCBNYXA8RXZpY3RLZXksIExvbmc+IGluZGV4RXZpY3Rpb25NYXAgPSBuZXcgQ29uY3VycmVudEhhc2hNYXA8PigpOworCiAJQFN1cHByZXNzV2FybmluZ3MoInVuY2hlY2tlZCIpCiAJcHJpdmF0ZSBEZnNCbG9ja0NhY2hlKERmc0Jsb2NrQ2FjaGVDb25maWcgY2ZnKSB7CiAJCXRhYmxlU2l6ZSA9IHRhYmxlU2l6ZShjZmcpOwpAQCAtMjEzLDYgKzIyMyw3IEBAIHByaXZhdGUgRGZzQmxvY2tDYWNoZShEZnNCbG9ja0NhY2hlQ29uZmlnIGNmZykgewogCQkJCWNhY2hlSG90TGltaXRzW2ldID0gRGZzQmxvY2tDYWNoZUNvbmZpZy5ERUZBVUxUX0NBQ0hFX0hPVF9NQVg7CiAJCQl9CiAJCX0KKwkJaW5kZXhFdmVudENvbnN1bWVyID0gY2ZnLmdldEluZGV4RXZlbnRDb25zdW1lcigpOwogCX0KIAogCWJvb2xlYW4gc2hvdWxkQ29weVRocm91Z2hDYWNoZShsb25nIGxlbmd0aCkgewpAQCAtNDYxLDYgKzQ3Miw3IEBAIHByaXZhdGUgdm9pZCByZXNlcnZlU3BhY2UobG9uZyByZXNlcnZlLCBEZnNTdHJlYW1LZXkga2V5KSB7CiAJCQkJCWxpdmUgLT0gZGVhZC5zaXplOwogCQkJCQlnZXRTdGF0KGxpdmVCeXRlcywgZGVhZC5rZXkpLmFkZEFuZEdldCgtZGVhZC5zaXplKTsKIAkJCQkJZ2V0U3RhdChzdGF0RXZpY3QsIGRlYWQua2V5KS5pbmNyZW1lbnRBbmRHZXQoKTsKKwkJCQkJcmVwb3J0SW5kZXhFdmljdGVkKGRlYWQpOwogCQkJCX0gd2hpbGUgKG1heEJ5dGVzIDwgbGl2ZSk7CiAJCQkJY2xvY2tIYW5kID0gcHJldjsKIAkJCX0KQEAgLTUxNSwxMSArNTI3LDEzIEBAIHZvaWQgcHV0KERmc0Jsb2NrIHYpIHsKIAk8VD4gUmVmPFQ+IGdldE9yTG9hZFJlZigKIAkJCURmc1N0cmVhbUtleSBrZXksIGxvbmcgcG9zaXRpb24sIFJlZkxvYWRlcjxUPiBsb2FkZXIpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24geworCQlsb25nIHN0YXJ0ID0gU3lzdGVtLm5hbm9UaW1lKCk7CiAJCWludCBzbG90ID0gc2xvdChrZXksIHBvc2l0aW9uKTsKIAkJSGFzaEVudHJ5IGUxID0gdGFibGUuZ2V0KHNsb3QpOwogCQlSZWY8VD4gcmVmID0gc2NhblJlZihlMSwga2V5LCBwb3NpdGlvbik7CiAJCWlmIChyZWYgIT0gbnVsbCkgewogCQkJZ2V0U3RhdChzdGF0SGl0LCBrZXkpLmluY3JlbWVudEFuZEdldCgpOworCQkJcmVwb3J0SW5kZXhSZXF1ZXN0ZWQocmVmLCB0cnVlIC8qIGNhY2hlSGl0ICovLCBzdGFydCk7CiAJCQlyZXR1cm4gcmVmOwogCQl9CiAKQEAgLTUzMiw2ICs1NDYsOCBAQCA8VD4gUmVmPFQ+IGdldE9yTG9hZFJlZigKIAkJCQlyZWYgPSBzY2FuUmVmKGUyLCBrZXksIHBvc2l0aW9uKTsKIAkJCQlpZiAocmVmICE9IG51bGwpIHsKIAkJCQkJZ2V0U3RhdChzdGF0SGl0LCBrZXkpLmluY3JlbWVudEFuZEdldCgpOworCQkJCQlyZXBvcnRJbmRleFJlcXVlc3RlZChyZWYsIHRydWUgLyogY2FjaGVIaXQgKi8sCisJCQkJCQkJc3RhcnQpOwogCQkJCQlyZXR1cm4gcmVmOwogCQkJCX0KIAkJCX0KQEAgLTU1Niw2ICs1NzIsNyBAQCA8VD4gUmVmPFQ+IGdldE9yTG9hZFJlZigKIAkJfSBmaW5hbGx5IHsKIAkJCXJlZ2lvbkxvY2sudW5sb2NrKCk7CiAJCX0KKwkJcmVwb3J0SW5kZXhSZXF1ZXN0ZWQocmVmLCBmYWxzZSAvKiBjYWNoZUhpdCAqLywgc3RhcnQpOwogCQlyZXR1cm4gcmVmOwogCX0KIApAQCAtNjgyLDggKzY5OSw5IEBAIHByaXZhdGUgc3RhdGljIEF0b21pY0xvbmcgZ2V0U3RhdChBdG9taWNSZWZlcmVuY2U8QXRvbWljTG9uZ1tdPiBzdGF0cywKIAl9CiAKIAlwcml2YXRlIHN0YXRpYyBIYXNoRW50cnkgY2xlYW4oSGFzaEVudHJ5IHRvcCkgewotCQl3aGlsZSAodG9wICE9IG51bGwgJiYgdG9wLnJlZi5uZXh0ID09IG51bGwpCisJCXdoaWxlICh0b3AgIT0gbnVsbCAmJiB0b3AucmVmLm5leHQgPT0gbnVsbCkgewogCQkJdG9wID0gdG9wLm5leHQ7CisJCX0KIAkJaWYgKHRvcCA9PSBudWxsKSB7CiAJCQlyZXR1cm4gbnVsbDsKIAkJfQpAQCAtNjkxLDYgKzcwOSw0NCBAQCBwcml2YXRlIHN0YXRpYyBIYXNoRW50cnkgY2xlYW4oSGFzaEVudHJ5IHRvcCkgewogCQlyZXR1cm4gbiA9PSB0b3AubmV4dCA/IHRvcCA6IG5ldyBIYXNoRW50cnkobiwgdG9wLnJlZik7CiAJfQogCisJcHJpdmF0ZSB2b2lkIHJlcG9ydEluZGV4UmVxdWVzdGVkKFJlZjw/PiByZWYsIGJvb2xlYW4gY2FjaGVIaXQsCisJCQlsb25nIHN0YXJ0KSB7CisJCWlmIChpbmRleEV2ZW50Q29uc3VtZXIgPT0gbnVsbAorCQkJCXx8ICFpc0luZGV4T3JCaXRtYXBFeHRQb3MocmVmLmtleS5wYWNrRXh0UG9zKSkgeworCQkJcmV0dXJuOworCQl9CisJCUV2aWN0S2V5IGV2aWN0S2V5ID0gbmV3IEV2aWN0S2V5KHJlZik7CisJCUxvbmcgcHJldkV2aWN0ZWRUaW1lID0gaW5kZXhFdmljdGlvbk1hcC5nZXQoZXZpY3RLZXkpOworCQlsb25nIG5vdyA9IFN5c3RlbS5uYW5vVGltZSgpOworCQlsb25nIHNpbmNlTGFzdEV2aWN0aW9uTmFub3MgPSBwcmV2RXZpY3RlZFRpbWUgPT0gbnVsbCA/IDBMCisJCQkJOiBub3cgLSBwcmV2RXZpY3RlZFRpbWUubG9uZ1ZhbHVlKCk7CisJCWluZGV4RXZlbnRDb25zdW1lci5hY2NlcHRSZXF1ZXN0ZWRFdmVudChyZWYua2V5LnBhY2tFeHRQb3MsIGNhY2hlSGl0LAorCQkJCShub3cgLSBzdGFydCkgLyAxMDAwTCAvKiBtaWNyb3MgKi8sIHJlZi5zaXplLAorCQkJCUR1cmF0aW9uLm9mTmFub3Moc2luY2VMYXN0RXZpY3Rpb25OYW5vcykpOworCX0KKworCXByaXZhdGUgdm9pZCByZXBvcnRJbmRleEV2aWN0ZWQoUmVmPD8+IGRlYWQpIHsKKwkJaWYgKGluZGV4RXZlbnRDb25zdW1lciA9PSBudWxsCisJCQkJfHwgIWluZGV4RXZlbnRDb25zdW1lci5zaG91bGRSZXBvcnRFdmljdGVkRXZlbnQoKQorCQkJCXx8ICFpc0luZGV4T3JCaXRtYXBFeHRQb3MoZGVhZC5rZXkucGFja0V4dFBvcykpIHsKKwkJCXJldHVybjsKKwkJfQorCQlFdmljdEtleSBldmljdEtleSA9IG5ldyBFdmljdEtleShkZWFkKTsKKwkJTG9uZyBwcmV2RXZpY3RlZFRpbWUgPSBpbmRleEV2aWN0aW9uTWFwLmdldChldmljdEtleSk7CisJCWxvbmcgbm93ID0gU3lzdGVtLm5hbm9UaW1lKCk7CisJCWxvbmcgc2luY2VMYXN0RXZpY3Rpb25OYW5vcyA9IHByZXZFdmljdGVkVGltZSA9PSBudWxsID8gMEwKKwkJCQk6IG5vdyAtIHByZXZFdmljdGVkVGltZS5sb25nVmFsdWUoKTsKKwkJaW5kZXhFdmljdGlvbk1hcC5wdXQoZXZpY3RLZXksIExvbmcudmFsdWVPZihub3cpKTsKKwkJaW5kZXhFdmVudENvbnN1bWVyLmFjY2VwdEV2aWN0ZWRFdmVudChkZWFkLmtleS5wYWNrRXh0UG9zLCBkZWFkLnNpemUsCisJCQkJZGVhZC50b3RhbEhpdENvdW50LmdldCgpLAorCQkJCUR1cmF0aW9uLm9mTmFub3Moc2luY2VMYXN0RXZpY3Rpb25OYW5vcykpOworCX0KKworCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbmRleE9yQml0bWFwRXh0UG9zKGludCBwYWNrRXh0UG9zKSB7CisJCXJldHVybiBwYWNrRXh0UG9zID09IFBhY2tFeHQuSU5ERVguZ2V0UG9zaXRpb24oKQorCQkJCXx8IHBhY2tFeHRQb3MgPT0gUGFja0V4dC5CSVRNQVBfSU5ERVguZ2V0UG9zaXRpb24oKTsKKwl9CisKIAlwcml2YXRlIHN0YXRpYyBmaW5hbCBjbGFzcyBIYXNoRW50cnkgewogCQkvKiogTmV4dCBlbnRyeSBpbiB0aGUgaGFzaCB0YWJsZSdzIGNoYWluIGxpc3QuICovCiAJCWZpbmFsIEhhc2hFbnRyeSBuZXh0OwpAQCAtNzEyLDYgKzc2OCw3IEBAIHN0YXRpYyBmaW5hbCBjbGFzcyBSZWY8VD4gewogCQlSZWYgbmV4dDsKIAogCQlwcml2YXRlIHZvbGF0aWxlIGludCBob3RDb3VudDsKKwkJcHJpdmF0ZSBBdG9taWNJbnRlZ2VyIHRvdGFsSGl0Q291bnQgPSBuZXcgQXRvbWljSW50ZWdlcigpOwogCiAJCVJlZihEZnNTdHJlYW1LZXkga2V5LCBsb25nIHBvc2l0aW9uLCBsb25nIHNpemUsIFQgdikgewogCQkJdGhpcy5rZXkgPSBrZXk7CkBAIC03MzYsNiArNzkzLDcgQEAgdm9pZCBtYXJrSG90dGVyKCkgewogCQkJaW50IGNhcCA9IERmc0Jsb2NrQ2FjaGUKIAkJCQkJLmdldEluc3RhbmNlKCkuY2FjaGVIb3RMaW1pdHNba2V5LnBhY2tFeHRQb3NdOwogCQkJaG90Q291bnQgPSBNYXRoLm1pbihjYXAsIGhvdENvdW50ICsgMSk7CisJCQl0b3RhbEhpdENvdW50LmluY3JlbWVudEFuZEdldCgpOwogCQl9CiAKIAkJdm9pZCBtYXJrQ29sZGVyKCkgewpAQCAtNzQ3LDYgKzgwNSwzNCBAQCBib29sZWFuIGlzSG90KCkgewogCQl9CiAJfQogCisJcHJpdmF0ZSBzdGF0aWMgZmluYWwgY2xhc3MgRXZpY3RLZXkgeworCQlwcml2YXRlIGZpbmFsIGludCBrZXlIYXNoOworCQlwcml2YXRlIGZpbmFsIGludCBwYWNrRXh0UG9zOworCQlwcml2YXRlIGZpbmFsIGxvbmcgcG9zaXRpb247CisKKwkJRXZpY3RLZXkoUmVmPD8+IHJlZikgeworCQkJa2V5SGFzaCA9IHJlZi5rZXkuaGFzaDsKKwkJCXBhY2tFeHRQb3MgPSByZWYua2V5LnBhY2tFeHRQb3M7CisJCQlwb3NpdGlvbiA9IHJlZi5wb3NpdGlvbjsKKwkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iamVjdCkgeworCQkJaWYgKG9iamVjdCBpbnN0YW5jZW9mIEV2aWN0S2V5KSB7CisJCQkJRXZpY3RLZXkgb3RoZXIgPSAoRXZpY3RLZXkpIG9iamVjdDsKKwkJCQlyZXR1cm4ga2V5SGFzaCA9PSBvdGhlci5rZXlIYXNoCisJCQkJCQkmJiBwYWNrRXh0UG9zID09IG90aGVyLnBhY2tFeHRQb3MKKwkJCQkJCSYmIHBvc2l0aW9uID09IG90aGVyLnBvc2l0aW9uOworCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CisJCQlyZXR1cm4gRGZzQmxvY2tDYWNoZS5nZXRJbnN0YW5jZSgpLmhhc2goa2V5SGFzaCwgcG9zaXRpb24pOworCQl9CisJfQorCiAJQEZ1bmN0aW9uYWxJbnRlcmZhY2UKIAlpbnRlcmZhY2UgUmVmTG9hZGVyPFQ+IHsKIAkJUmVmPFQ+IGxvYWQoKSB0aHJvd3MgSU9FeGNlcHRpb247CkBAIC03NjMsNCArODQ5LDQgQEAgaW50ZXJmYWNlIFJlYWRhYmxlQ2hhbm5lbFN1cHBsaWVyIHsKIAkJICovCiAJCVJlYWRhYmxlQ2hhbm5lbCBnZXQoKSB0aHJvd3MgSU9FeGNlcHRpb247CiAJfQotfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzQmxvY2tDYWNoZUNvbmZpZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlQ29uZmlnLmphdmEKaW5kZXggMjcxNmY3OS4uNjlhMzcwNSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlQ29uZmlnLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNCbG9ja0NhY2hlQ29uZmlnLmphdmEKQEAgLTE4LDYgKzE4LDcgQEAKIGltcG9ydCBzdGF0aWMgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfU1RSRUFNX1JBVElPOwogCiBpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS50aW1lLkR1cmF0aW9uOwogaW1wb3J0IGphdmEudXRpbC5Db2xsZWN0aW9uczsKIGltcG9ydCBqYXZhLnV0aWwuTWFwOwogaW1wb3J0IGphdmEudXRpbC5mdW5jdGlvbi5Db25zdW1lcjsKQEAgLTQ2LDkgKzQ3LDEwIEBAIHB1YmxpYyBjbGFzcyBEZnNCbG9ja0NhY2hlQ29uZmlnIHsKIAlwcml2YXRlIGludCBjb25jdXJyZW5jeUxldmVsOwogCiAJcHJpdmF0ZSBDb25zdW1lcjxMb25nPiByZWZMb2NrOwotCiAJcHJpdmF0ZSBNYXA8UGFja0V4dCwgSW50ZWdlcj4gY2FjaGVIb3RNYXA7CiAKKwlwcml2YXRlIEluZGV4RXZlbnRDb25zdW1lciBpbmRleEV2ZW50Q29uc3VtZXI7CisKIAkvKioKIAkgKiBDcmVhdGUgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCiAJICovCkBAIC0yMTYsNiArMjE4LDI4IEBAIHB1YmxpYyBEZnNCbG9ja0NhY2hlQ29uZmlnIHNldENhY2hlSG90TWFwKAogCX0KIAogCS8qKgorCSAqIEdldCB0aGUgY29uc3VtZXIgb2YgY2FjaGUgaW5kZXggZXZlbnRzLgorCSAqCisJICogQHJldHVybiBjb25zdW1lciBvZiBjYWNoZSBpbmRleCBldmVudHMuCisJICovCisJcHVibGljIEluZGV4RXZlbnRDb25zdW1lciBnZXRJbmRleEV2ZW50Q29uc3VtZXIoKSB7CisJCXJldHVybiBpbmRleEV2ZW50Q29uc3VtZXI7CisJfQorCisJLyoqCisJICogU2V0IHRoZSBjb25zdW1lciBvZiBjYWNoZSBpbmRleCBldmVudHMuCisJICoKKwkgKiBAcGFyYW0gaW5kZXhFdmVudENvbnN1bWVyCisJICogICAgICAgICAgICBjb25zdW1lciBvZiBjYWNoZSBpbmRleCBldmVudHMuCisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKi8KKwlwdWJsaWMgRGZzQmxvY2tDYWNoZUNvbmZpZyBzZXRJbmRleEV2ZW50Q29uc3VtZXIoCisJCQlJbmRleEV2ZW50Q29uc3VtZXIgaW5kZXhFdmVudENvbnN1bWVyKSB7CisJCXRoaXMuaW5kZXhFdmVudENvbnN1bWVyID0gaW5kZXhFdmVudENvbnN1bWVyOworCQlyZXR1cm4gdGhpczsKKwl9CisKKwkvKioKIAkgKiBVcGRhdGUgcHJvcGVydGllcyBieSBzZXR0aW5nIGZpZWxkcyBmcm9tIHRoZSBjb25maWd1cmF0aW9uLgogCSAqIDxwPgogCSAqIElmIGEgcHJvcGVydHkgaXMgbm90IGRlZmluZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24sIHRoZW4gaXQgaXMgbGVmdApAQCAtMjcyLDQgKzI5Niw1MiBAQCBwdWJsaWMgRGZzQmxvY2tDYWNoZUNvbmZpZyBmcm9tQ29uZmlnKENvbmZpZyByYykgewogCQl9CiAJCXJldHVybiB0aGlzOwogCX0KLX0KKworCS8qKiBDb25zdW1lciBvZiBEZnNCbG9ja0NhY2hlIGxvYWRpbmcgYW5kIGV2aWN0aW9uIGV2ZW50cyBmb3IgaW5kZXhlcy4gKi8KKwlwdWJsaWMgaW50ZXJmYWNlIEluZGV4RXZlbnRDb25zdW1lciB7CisJCS8qKgorCQkgKiBBY2NlcHQgYW4gZXZlbnQgb2YgYW4gaW5kZXggcmVxdWVzdGVkLiBJdCBjb3VsZCBiZSBsb2FkZWQgZnJvbSBlaXRoZXIKKwkJICogY2FjaGUgb3Igc3RvcmFnZS4KKwkJICoKKwkJICogQHBhcmFtIHBhY2tFeHRQb3MKKwkJICogICAgICAgICAgICBwb3NpdGlvbiBpbiB7QGNvZGUgUGFja0V4dH0gZW51bQorCQkgKiBAcGFyYW0gY2FjaGVIaXQKKwkJICogICAgICAgICAgICB0cnVlIGlmIGFuIGluZGV4IHdhcyBhbHJlYWR5IGluIGNhY2hlLiBPdGhlcndpc2UsIHRoZQorCQkgKiAgICAgICAgICAgIGluZGV4IHdhcyBsb2FkZWQgZnJvbSBzdG9yYWdlIGludG8gdGhlIGNhY2hlIGluIHRoZQorCQkgKiAgICAgICAgICAgIGN1cnJlbnQgcmVxdWVzdCwKKwkJICogQHBhcmFtIGxvYWRNaWNyb3MKKwkJICogICAgICAgICAgICB0aW1lIHRvIGxvYWQgYW4gaW5kZXggZnJvbSBjYWNoZSBvciBzdG9yYWdlIGluCisJCSAqICAgICAgICAgICAgbWljcm9zZWNvbmRzCisJCSAqIEBwYXJhbSBieXRlcworCQkgKiAgICAgICAgICAgIG51bWJlciBvZiBieXRlcyBsb2FkZWQKKwkJICogQHBhcmFtIGxhc3RFdmljdGlvbkR1cmF0aW9uCisJCSAqICAgICAgICAgICAgdGltZSBzaW5jZSBsYXN0IGV2aWN0aW9uLCAwIGlmIHdhcyBub3QgZXZpY3RlZCB5ZXQKKwkJICovCisJCXZvaWQgYWNjZXB0UmVxdWVzdGVkRXZlbnQoaW50IHBhY2tFeHRQb3MsIGJvb2xlYW4gY2FjaGVIaXQsCisJCQkJbG9uZyBsb2FkTWljcm9zLCBsb25nIGJ5dGVzLCBEdXJhdGlvbiBsYXN0RXZpY3Rpb25EdXJhdGlvbik7CisKKwkJLyoqCisJCSAqIEFjY2VwdCBhbiBldmVudCBvZiBhbiBpbmRleCBldmljdGVkIGZyb20gY2FjaGUuCisJCSAqCisJCSAqIEBwYXJhbSBwYWNrRXh0UG9zCisJCSAqICAgICAgICAgICAgcG9zaXRpb24gaW4ge0Bjb2RlIFBhY2tFeHR9IGVudW0KKwkJICogQHBhcmFtIGJ5dGVzCisJCSAqICAgICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIGV2aWN0ZWQKKwkJICogQHBhcmFtIHRvdGFsQ2FjaGVIaXRDb3VudAorCQkgKiAgICAgICAgICAgIG51bWJlciBvZiB0aW1lcyBhbiBpbmRleCB3YXMgYWNjZXNzZWQgd2hpbGUgaW4gY2FjaGUKKwkJICogQHBhcmFtIGxhc3RFdmljdGlvbkR1cmF0aW9uCisJCSAqICAgICAgICAgICAgdGltZSBzaW5jZSBsYXN0IGV2aWN0aW9uLCAwIGlmIHdhcyBub3QgZXZpY3RlZCB5ZXQKKwkJICovCisJCWRlZmF1bHQgdm9pZCBhY2NlcHRFdmljdGVkRXZlbnQoaW50IHBhY2tFeHRQb3MsIGxvbmcgYnl0ZXMsCisJCQkJaW50IHRvdGFsQ2FjaGVIaXRDb3VudCwgRHVyYXRpb24gbGFzdEV2aWN0aW9uRHVyYXRpb24pIHsKKwkJCS8vIE9mZiBieSBkZWZhdWx0LgorCQl9CisKKwkJLyoqCisJCSAqIEByZXR1cm4gdHJ1ZSBpZiByZXBvcnRpbmcgZXZpY3RlZCBldmVudHMgaXMgZW5hYmxlZC4KKwkJICovCisJCWRlZmF1bHQgYm9vbGVhbiBzaG91bGRSZXBvcnRFdmljdGVkRXZlbnQoKSB7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNQYWNrRmlsZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNQYWNrRmlsZS5qYXZhCmluZGV4IGJiNzZkZjEuLmY3YTJjOTQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvRGZzUGFja0ZpbGUuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc1BhY2tGaWxlLmphdmEKQEAgLTEwNjEsNyArMTA2MSw4IEBAIHByaXZhdGUgRGZzQmxvY2tDYWNoZS5SZWY8UGFja0JpdG1hcEluZGV4PiBsb2FkQml0bWFwSW5kZXgoRGZzUmVhZGVyIGN0eCwKIAkJCQl9CiAJCQkJaW4gPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShpbiwgYnMpOwogCQkJCWJtaWR4ID0gUGFja0JpdG1hcEluZGV4LnJlYWQoaW4sICgpIC0+IGlkeChjdHgpLAotCQkJCQkJKCkgLT4gZ2V0UmV2ZXJzZUlkeChjdHgpKTsKKwkJCQkJCSgpIC0+IGdldFJldmVyc2VJZHgoY3R4KSwKKwkJCQkJCWN0eC5nZXRPcHRpb25zKCkuc2hvdWxkTG9hZFJldkluZGV4SW5QYXJhbGxlbCgpKTsKIAkJCX0gZmluYWxseSB7CiAJCQkJc2l6ZSA9IHJjLnBvc2l0aW9uKCk7CiAJCQkJY3R4LnN0YXRzLnJlYWRCaXRtYXBJZHhCeXRlcyArPSBzaXplOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9EZnNSZWFkZXJPcHRpb25zLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc1JlYWRlck9wdGlvbnMuamF2YQppbmRleCA4OWRlNTM0Li4xNDZmNzYxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc1JlYWRlck9wdGlvbnMuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0Rmc1JlYWRlck9wdGlvbnMuamF2YQpAQCAtMzQsNiArMzQsOCBAQCBwdWJsaWMgY2xhc3MgRGZzUmVhZGVyT3B0aW9ucyB7CiAKIAlwcml2YXRlIGludCBzdHJlYW1QYWNrQnVmZmVyU2l6ZTsKIAorCXByaXZhdGUgYm9vbGVhbiBsb2FkUmV2SW5kZXhJblBhcmFsbGVsOworCiAJLyoqCiAJICogQ3JlYXRlIGEgZGVmYXVsdCByZWFkZXIgY29uZmlndXJhdGlvbi4KIAkgKi8KQEAgLTExMyw2ICsxMTUsMjggQEAgcHVibGljIERmc1JlYWRlck9wdGlvbnMgc2V0U3RyZWFtUGFja0J1ZmZlclNpemUoaW50IGJ1ZnN6KSB7CiAJfQogCiAJLyoqCisJICogQ2hlY2sgaWYgcmV2ZXJzZSBpbmRleCBzaG91bGQgYmUgbG9hZGVkIGluIHBhcmFsbGVsLgorCSAqCisJICogQHJldHVybiB0cnVlIGlmIHJldmVyc2UgaW5kZXggaXMgbG9hZGVkIGluIHBhcmFsbGVsIGZvciBiaXRtYXAgaW5kZXguCisJICovCisJcHVibGljIGJvb2xlYW4gc2hvdWxkTG9hZFJldkluZGV4SW5QYXJhbGxlbCgpIHsKKwkJcmV0dXJuIGxvYWRSZXZJbmRleEluUGFyYWxsZWw7CisJfQorCisJLyoqCisJICogRW5hYmxlIChvciBkaXNhYmxlKSBwYXJhbGxlbCBsb2FkaW5nIG9mIHJldmVyc2UgaW5kZXguCisJICoKKwkgKiBAcGFyYW0gbG9hZFJldkluZGV4SW5QYXJhbGxlbAorCSAqICAgICAgICAgICAgd2hldGhlciB0byBsb2FkIHJldmVyc2UgaW5kZXggaW4gcGFyYWxsZWwuCisJICogQHJldHVybiB7QGNvZGUgdGhpc30KKwkgKi8KKwlwdWJsaWMgRGZzUmVhZGVyT3B0aW9ucyBzZXRMb2FkUmV2SW5kZXhJblBhcmFsbGVsKAorCQkJYm9vbGVhbiBsb2FkUmV2SW5kZXhJblBhcmFsbGVsKSB7CisJCXRoaXMubG9hZFJldkluZGV4SW5QYXJhbGxlbCA9IGxvYWRSZXZJbmRleEluUGFyYWxsZWw7CisJCXJldHVybiB0aGlzOworCX0KKworCS8qKgogCSAqIFVwZGF0ZSBwcm9wZXJ0aWVzIGJ5IHNldHRpbmcgZmllbGRzIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24uCiAJICogPHA+CiAJICogSWYgYSBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbiwgdGhlbiBpdCBpcyBsZWZ0CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0luTWVtb3J5UmVwb3NpdG9yeS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9Jbk1lbW9yeVJlcG9zaXRvcnkuamF2YQppbmRleCA1YjY4OTRkLi45OWRhMjIyIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZGZzL0luTWVtb3J5UmVwb3NpdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvSW5NZW1vcnlSZXBvc2l0b3J5LmphdmEKQEAgLTE2NSw2ICsxNjUsMTUgQEAgcHVibGljIHZvaWQgZmx1c2goKSB7CiAJCQkJfQogCQkJfTsKIAkJfQorCisJCUBPdmVycmlkZQorCQlwdWJsaWMgbG9uZyBnZXRBcHByb3hpbWF0ZU9iamVjdENvdW50KCkgeworCQkJbG9uZyBjb3VudCA9IDA7CisJCQlmb3IgKERmc1BhY2tEZXNjcmlwdGlvbiBwIDogcGFja3MpIHsKKwkJCQljb3VudCArPSBwLmdldE9iamVjdENvdW50KCk7CisJCQl9CisJCQlyZXR1cm4gY291bnQ7CisJCX0KIAl9CiAKIAlwcml2YXRlIHN0YXRpYyBjbGFzcyBNZW1QYWNrIGV4dGVuZHMgRGZzUGFja0Rlc2NyaXB0aW9uIHsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9kZnMvTGFyZ2VQYWNrZWRXaG9sZU9iamVjdC5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9MYXJnZVBhY2tlZFdob2xlT2JqZWN0LmphdmEKaW5kZXggYjA2MTJmOS4uY2Q0ZjE2OCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9MYXJnZVBhY2tlZFdob2xlT2JqZWN0LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2Rmcy9MYXJnZVBhY2tlZFdob2xlT2JqZWN0LmphdmEKQEAgLTczLDcgKzczLDYgQEAgcHVibGljIGJvb2xlYW4gaXNMYXJnZSgpIHsKIAlwdWJsaWMgT2JqZWN0U3RyZWFtIG9wZW5TdHJlYW0oKSB0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewogCQlQYWNrSW5wdXRTdHJlYW0gcGFja0luOwogCQkvLyBjdHggaXMgY2xvc2VkIGJ5IFBhY2tJbnB1dFN0cmVhbSwgb3IgZXhwbGljaXRseSBpbiB0aGUgZmluYWxseSBibG9jawotCQlAU3VwcHJlc3NXYXJuaW5ncygicmVzb3VyY2UiKQogCQlEZnNSZWFkZXIgY3R4ID0gZGIubmV3UmVhZGVyKCk7CiAJCXRyeSB7CiAJCQl0cnkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvQ2FjaGVkT2JqZWN0RGlyZWN0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9DYWNoZWRPYmplY3REaXJlY3RvcnkuamF2YQppbmRleCA3ZGVkZWI1Li4wOTRmZGMxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9DYWNoZWRPYmplY3REaXJlY3RvcnkuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9DYWNoZWRPYmplY3REaXJlY3RvcnkuamF2YQpAQCAtMjYzLDQgKzI2MywxNyBAQCBwcml2YXRlIHN0YXRpYyBjbGFzcyBVbnBhY2tlZE9iamVjdElkIGV4dGVuZHMgT2JqZWN0SWRPd25lck1hcC5FbnRyeSB7CiAJcHJpdmF0ZSBBbHRlcm5hdGVIYW5kbGUuSWQgZ2V0QWx0ZXJuYXRlSWQoKSB7CiAJCXJldHVybiB3cmFwcGVkLmdldEFsdGVybmF0ZUlkKCk7CiAJfQorCisJQE92ZXJyaWRlCisJcHVibGljIGxvbmcgZ2V0QXBwcm94aW1hdGVPYmplY3RDb3VudCgpIHsKKwkJbG9uZyBjb3VudCA9IDA7CisJCWZvciAoUGFjayBwIDogZ2V0UGFja3MoKSkgeworCQkJdHJ5IHsKKwkJCQljb3VudCArPSBwLmdldE9iamVjdENvdW50KCk7CisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBjb3VudDsKKwl9CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVmdGFibGVTdGFjay5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvRmlsZVJlZnRhYmxlU3RhY2suamF2YQppbmRleCBmMDJjODYxLi41MTUyMzY3IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVmdGFibGVTdGFjay5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0ZpbGVSZWZ0YWJsZVN0YWNrLmphdmEKQEAgLTQwLDYgKzQwLDcgQEAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UucmVmdGFibGUuUmVmdGFibGVXcml0ZXI7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GaWxlVXRpbHM7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlN5c3RlbVJlYWRlcjsKIAogLyoqCiAgKiBBIG11dGFibGUgc3RhY2sgb2YgcmVmdGFibGVzIG9uIGxvY2FsIGZpbGVzeXN0ZW0gc3RvcmFnZS4gTm90IHRocmVhZC1zYWZlLgpAQCAtNTI3LDExICs1MjgsMTkgQEAgYm9vbGVhbiBjb21wYWN0UmFuZ2UoaW50IGZpcnN0LCBpbnQgbGFzdCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAKKwkJCXJlbG9hZCgpOwogCQkJZm9yIChGaWxlIGYgOiBkZWxldGVPblN1Y2Nlc3MpIHsKLQkJCQlGaWxlcy5kZWxldGUoZi50b1BhdGgoKSk7CisJCQkJdHJ5IHsKKwkJCQkJRmlsZXMuZGVsZXRlKGYudG9QYXRoKCkpOworCQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCQkJLy8gSWdub3JlOiB0aGlzIGNhbiBoYXBwZW4gb24gV2luZG93cyBpbiBjYXNlIG9mIGNvbmN1cnJlbnQgcHJvY2Vzc2VzLgorCQkJCQkvLyBsZWF2ZSB0aGUgZ2FyYmFnZSBhbmQgY29udGludWUuCisJCQkJCWlmICghU3lzdGVtUmVhZGVyLmdldEluc3RhbmNlKCkuaXNXaW5kb3dzKCkpIHsKKwkJCQkJCXRocm93IGU7CisJCQkJCX0KKwkJCQl9CiAJCQl9CiAKLQkJCXJlbG9hZCgpOwogCQkJcmV0dXJuIHRydWU7CiAJCX0gZmluYWxseSB7CiAJCQlpZiAodG1wVGFibGUgIT0gbnVsbCkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvRmlsZVJlcG9zaXRvcnkuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0ZpbGVSZXBvc2l0b3J5LmphdmEKaW5kZXggYjM3MTU1Ny4uM2U5MmNkZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvRmlsZVJlcG9zaXRvcnkuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9GaWxlUmVwb3NpdG9yeS5qYXZhCkBAIC02NzIsMTggKzY3MiwyMCBAQCB2b2lkIGNvbnZlcnRUb1BhY2tlZFJlZnMoYm9vbGVhbiB3cml0ZUxvZ3MsIGJvb2xlYW4gYmFja3VwKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCiAJCQlpZiAod3JpdGVMb2dzKSB7CiAJCQkJTGlzdDxSZWZsb2dFbnRyeT4gbG9ncyA9IG9sZERiLmdldFJlZmxvZ1JlYWRlcihyLmdldE5hbWUoKSkKLQkJCQkJLmdldFJldmVyc2VFbnRyaWVzKCk7CisJCQkJCQkuZ2V0UmV2ZXJzZUVudHJpZXMoKTsKIAkJCQlDb2xsZWN0aW9ucy5yZXZlcnNlKGxvZ3MpOwogCQkJCWZvciAoUmVmbG9nRW50cnkgZSA6IGxvZ3MpIHsKIAkJCQkJbG9nV3JpdGVyLmxvZyhyLmdldE5hbWUoKSwgZSk7CiAJCQkJfQotCQl9CisJCQl9CiAJCX0KIAogCQl0cnkgKFJldldhbGsgcncgPSBuZXcgUmV2V2Fsayh0aGlzKSkgewogCQkJYnJ1LmV4ZWN1dGUocncsIE51bGxQcm9ncmVzc01vbml0b3IuSU5TVEFOQ0UpOwogCQl9CiAKKwkJb2xkRGIuY2xvc2UoKTsKKwogCQlMaXN0PFN0cmluZz4gZmFpbGVkID0gbmV3IEFycmF5TGlzdDw+KCk7CiAJCWZvciAoUmVjZWl2ZUNvbW1hbmQgY21kIDogYnJ1LmdldENvbW1hbmRzKCkpIHsKIAkJCWlmIChjbWQuZ2V0UmVzdWx0KCkgIT0gUmVjZWl2ZUNvbW1hbmQuUmVzdWx0Lk9LKSB7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9Mb29zZU9iamVjdHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0xvb3NlT2JqZWN0cy5qYXZhCmluZGV4IDMzNjIxYTEuLmI5YWY4M2QgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0xvb3NlT2JqZWN0cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL0xvb3NlT2JqZWN0cy5qYXZhCkBAIC0xNCw2ICsxNCw3IEBACiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5Ob1N1Y2hGaWxlRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmlvLmZpbGUuU3RhbmRhcmRDb3B5T3B0aW9uOwpAQCAtMjQsNiArMjUsOCBAQAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5maWxlLkZpbGVPYmplY3REYXRhYmFzZS5JbnNlcnRMb29zZU9iamVjdFJlc3VsdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5BYmJyZXZpYXRlZE9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkFueU9iamVjdElkOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbmZpZzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdExvYWRlcjsKQEAgLTUyLDE1ICs1NSwyMiBAQCBjbGFzcyBMb29zZU9iamVjdHMgewogCiAJcHJpdmF0ZSBmaW5hbCBVbnBhY2tlZE9iamVjdENhY2hlIHVucGFja2VkT2JqZWN0Q2FjaGU7CiAKKwlwcml2YXRlIGZpbmFsIGJvb2xlYW4gdHJ1c3RGb2xkZXJTdGF0OworCiAJLyoqCiAJICogSW5pdGlhbGl6ZSBhIHJlZmVyZW5jZSB0byBhbiBvbi1kaXNrIG9iamVjdCBkaXJlY3RvcnkuCiAJICoKKwkgKiBAcGFyYW0gY29uZmlnCisJICogICAgICAgICAgICBjb25maWd1cmF0aW9uIGZvciB0aGUgbG9vc2Ugb2JqZWN0cyBoYW5kbGVyLgogCSAqIEBwYXJhbSBkaXIKIAkgKiAgICAgICAgICAgIHRoZSBsb2NhdGlvbiBvZiB0aGUgPGNvZGU+b2JqZWN0czwvY29kZT4gZGlyZWN0b3J5LgogCSAqLwotCUxvb3NlT2JqZWN0cyhGaWxlIGRpcikgeworCUxvb3NlT2JqZWN0cyhDb25maWcgY29uZmlnLCBGaWxlIGRpcikgewogCQlkaXJlY3RvcnkgPSBkaXI7CiAJCXVucGFja2VkT2JqZWN0Q2FjaGUgPSBuZXcgVW5wYWNrZWRPYmplY3RDYWNoZSgpOworCQl0cnVzdEZvbGRlclN0YXQgPSBjb25maWcuZ2V0Qm9vbGVhbigKKwkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwKKwkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9UUlVTVEZPTERFUlNUQVQsIHRydWUpOwogCX0KIAogCS8qKgpAQCAtOTgsNiArMTA4LDE5IEBAIGJvb2xlYW4gaGFzQ2FjaGVkKEFueU9iamVjdElkIGlkKSB7CiAJICogQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIHNwZWNpZmllZCBvYmplY3QgaXMgc3RvcmVkIGFzIGEgbG9vc2Ugb2JqZWN0LgogCSAqLwogCWJvb2xlYW4gaGFzKEFueU9iamVjdElkIG9iamVjdElkKSB7CisJCWJvb2xlYW4gZXhpc3RzID0gaGFzV2l0aG91dFJlZnJlc2gob2JqZWN0SWQpOworCQlpZiAodHJ1c3RGb2xkZXJTdGF0IHx8IGV4aXN0cykgeworCQkJcmV0dXJuIGV4aXN0czsKKwkJfQorCQl0cnkgKElucHV0U3RyZWFtIHN0cmVhbSA9IEZpbGVzLm5ld0lucHV0U3RyZWFtKGRpcmVjdG9yeS50b1BhdGgoKSkpIHsKKwkJCS8vIHJlZnJlc2ggZGlyZWN0b3J5IHRvIHdvcmsgYXJvdW5kIE5GUyBjYWNoaW5nIGlzc3VlCisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKwkJCXJldHVybiBmYWxzZTsKKwkJfQorCQlyZXR1cm4gaGFzV2l0aG91dFJlZnJlc2gob2JqZWN0SWQpOworCX0KKworCXByaXZhdGUgYm9vbGVhbiBoYXNXaXRob3V0UmVmcmVzaChBbnlPYmplY3RJZCBvYmplY3RJZCkgewogCQlyZXR1cm4gZmlsZUZvcihvYmplY3RJZCkuZXhpc3RzKCk7CiAJfQogCkBAIC0xODMsNiArMjA2LDIyIEBAIE9iamVjdExvYWRlciBvcGVuKFdpbmRvd0N1cnNvciBjdXJzLCBBbnlPYmplY3RJZCBpZCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkgKi8KIAlPYmplY3RMb2FkZXIgZ2V0T2JqZWN0TG9hZGVyKFdpbmRvd0N1cnNvciBjdXJzLCBGaWxlIHBhdGgsIEFueU9iamVjdElkIGlkKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdHJ5IHsKKwkJCXJldHVybiBnZXRPYmplY3RMb2FkZXJXaXRob3V0UmVmcmVzaChjdXJzLCBwYXRoLCBpZCk7CisJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQlpZiAodHJ1c3RGb2xkZXJTdGF0KSB7CisJCQkJdGhyb3cgZTsKKwkJCX0KKwkJCXRyeSAoSW5wdXRTdHJlYW0gc3RyZWFtID0gRmlsZXMKKwkJCQkJLm5ld0lucHV0U3RyZWFtKGRpcmVjdG9yeS50b1BhdGgoKSkpIHsKKwkJCQkvLyByZWZyZXNoIGRpcmVjdG9yeSB0byB3b3JrIGFyb3VuZCBORlMgY2FjaGluZyBpc3N1ZXMKKwkJCX0KKwkJCXJldHVybiBnZXRPYmplY3RMb2FkZXJXaXRob3V0UmVmcmVzaChjdXJzLCBwYXRoLCBpZCk7CisJCX0KKwl9CisKKwlwcml2YXRlIE9iamVjdExvYWRlciBnZXRPYmplY3RMb2FkZXJXaXRob3V0UmVmcmVzaChXaW5kb3dDdXJzb3IgY3VycywKKwkJCUZpbGUgcGF0aCwgQW55T2JqZWN0SWQgaWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCXRyeSAoRmlsZUlucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShwYXRoKSkgewogCQkJdW5wYWNrZWRPYmplY3RDYWNoZSgpLmFkZChpZCk7CiAJCQlyZXR1cm4gVW5wYWNrZWRPYmplY3Qub3BlbihpbiwgcGF0aCwgaWQsIGN1cnMpOwpAQCAtMjAzLDE2ICsyNDIsMzQgQEAgVW5wYWNrZWRPYmplY3RDYWNoZSB1bnBhY2tlZE9iamVjdENhY2hlKCkgewogCX0KIAogCWxvbmcgZ2V0U2l6ZShXaW5kb3dDdXJzb3IgY3VycywgQW55T2JqZWN0SWQgaWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRyeSB7CisJCQlyZXR1cm4gZ2V0U2l6ZVdpdGhvdXRSZWZyZXNoKGN1cnMsIGlkKTsKKwkJfSBjYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIG5vRmlsZSkgeworCQkJdHJ5IHsKKwkJCQlpZiAodHJ1c3RGb2xkZXJTdGF0KSB7CisJCQkJCXRocm93IG5vRmlsZTsKKwkJCQl9CisJCQkJdHJ5IChJbnB1dFN0cmVhbSBzdHJlYW0gPSBGaWxlcworCQkJCQkJLm5ld0lucHV0U3RyZWFtKGRpcmVjdG9yeS50b1BhdGgoKSkpIHsKKwkJCQkJLy8gcmVmcmVzaCBkaXJlY3RvcnkgdG8gd29yayBhcm91bmQgTkZTIGNhY2hpbmcgaXNzdWUKKwkJCQl9CisJCQkJcmV0dXJuIGdldFNpemVXaXRob3V0UmVmcmVzaChjdXJzLCBpZCk7CisJCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgeworCQkJCWlmIChmaWxlRm9yKGlkKS5leGlzdHMoKSkgeworCQkJCQl0aHJvdyBub0ZpbGU7CisJCQkJfQorCQkJCXVucGFja2VkT2JqZWN0Q2FjaGUoKS5yZW1vdmUoaWQpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfQorCX0KKworCXByaXZhdGUgbG9uZyBnZXRTaXplV2l0aG91dFJlZnJlc2goV2luZG93Q3Vyc29yIGN1cnMsIEFueU9iamVjdElkIGlkKQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJRmlsZSBmID0gZmlsZUZvcihpZCk7CiAJCXRyeSAoRmlsZUlucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmKSkgewogCQkJdW5wYWNrZWRPYmplY3RDYWNoZSgpLmFkZChpZCk7CiAJCQlyZXR1cm4gVW5wYWNrZWRPYmplY3QuZ2V0U2l6ZShpbiwgaWQsIGN1cnMpOwotCQl9IGNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gbm9GaWxlKSB7Ci0JCQlpZiAoZi5leGlzdHMoKSkgewotCQkJCXRocm93IG5vRmlsZTsKLQkJCX0KLQkJCXVucGFja2VkT2JqZWN0Q2FjaGUoKS5yZW1vdmUoaWQpOwotCQkJcmV0dXJuIC0xOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9PYmplY3REaXJlY3RvcnkuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL09iamVjdERpcmVjdG9yeS5qYXZhCmluZGV4IDYyN2ZhY2MuLjUzMWZkNzggMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL09iamVjdERpcmVjdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL09iamVjdERpcmVjdG9yeS5qYXZhCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljIE9iamVjdERpcmVjdG9yeShmaW5hbCBDb25maWcgY2ZnLCBmaW5hbCBGaWxlIGRpciwKIAkJRmlsZSBwYWNrRGlyZWN0b3J5ID0gbmV3IEZpbGUob2JqZWN0cywgInBhY2siKTsgLy8kTk9OLU5MUy0xJAogCQlGaWxlIHByZXNlcnZlZERpcmVjdG9yeSA9IG5ldyBGaWxlKHBhY2tEaXJlY3RvcnksICJwcmVzZXJ2ZWQiKTsgLy8kTk9OLU5MUy0xJAogCQlhbHRlcm5hdGVzRmlsZSA9IG5ldyBGaWxlKG9iamVjdHMsIENvbnN0YW50cy5JTkZPX0FMVEVSTkFURVMpOwotCQlsb29zZSA9IG5ldyBMb29zZU9iamVjdHMob2JqZWN0cyk7CisJCWxvb3NlID0gbmV3IExvb3NlT2JqZWN0cyhjb25maWcsIG9iamVjdHMpOwogCQlwYWNrZWQgPSBuZXcgUGFja0RpcmVjdG9yeShjb25maWcsIHBhY2tEaXJlY3RvcnkpOwogCQlwcmVzZXJ2ZWQgPSBuZXcgUGFja0RpcmVjdG9yeShjb25maWcsIHByZXNlcnZlZERpcmVjdG9yeSk7CiAJCXRoaXMuZnMgPSBmczsKQEAgLTIxMiw2ICsyMTIsMjAgQEAgcHVibGljIENvbGxlY3Rpb248UGFjaz4gZ2V0UGFja3MoKSB7CiAJCXJldHVybiBwYWNrZWQuZ2V0UGFja3MoKTsKIAl9CiAKKwkvKioge0Bpbmhlcml0RG9jfSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBsb25nIGdldEFwcHJveGltYXRlT2JqZWN0Q291bnQoKSB7CisJCWxvbmcgY291bnQgPSAwOworCQlmb3IgKFBhY2sgcCA6IGdldFBhY2tzKCkpIHsKKwkJCXRyeSB7CisJCQkJY291bnQgKz0gcC5nZXRJbmRleCgpLmdldE9iamVjdENvdW50KCk7CisJCQl9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQl9CisJCXJldHVybiBjb3VudDsKKwl9CisKIAkvKioKIAkgKiB7QGluaGVyaXREb2N9CiAJICogPHA+CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrQml0bWFwSW5kZXguamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tCaXRtYXBJbmRleC5qYXZhCmluZGV4IDg0MDFmMDcuLjhmYjE3ZmMgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tCaXRtYXBJbmRleC5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tCaXRtYXBJbmRleC5qYXZhCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYyBzdGF0aWMgUGFja0JpdG1hcEluZGV4IG9wZW4oRmlsZSBpZHhGaWxlLCBQYWNrSW5kZXggcGFja0luZGV4LAogCSAqLwogCXB1YmxpYyBzdGF0aWMgUGFja0JpdG1hcEluZGV4IHJlYWQoSW5wdXRTdHJlYW0gZmQsIFBhY2tJbmRleCBwYWNrSW5kZXgsCiAJCQlQYWNrUmV2ZXJzZUluZGV4IHJldmVyc2VJbmRleCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIG5ldyBQYWNrQml0bWFwSW5kZXhWMShmZCwgKCkgLT4gcGFja0luZGV4LCAoKSAtPiByZXZlcnNlSW5kZXgpOworCQlyZXR1cm4gbmV3IFBhY2tCaXRtYXBJbmRleFYxKGZkLCBwYWNrSW5kZXgsIHJldmVyc2VJbmRleCk7CiAJfQogCiAJLyoqCkBAIC0xMTQsNiArMTE0LDggQEAgcHVibGljIHN0YXRpYyBQYWNrQml0bWFwSW5kZXggcmVhZChJbnB1dFN0cmVhbSBmZCwgUGFja0luZGV4IHBhY2tJbmRleCwKIAkgKiBAcGFyYW0gcmV2ZXJzZUluZGV4U3VwcGxpZXIKIAkgKiAgICAgICAgICAgIHRoZSBzdXBwbGllciBmb3IgcGFjayByZXZlcnNlIGluZGV4IGZvciB0aGUgY29ycmVzcG9uZGluZyBwYWNrCiAJICogICAgICAgICAgICBmaWxlLgorCSAqIEBwYXJhbSBsb2FkUGFyYWxsZWxSZXZJbmRleAorCSAqICAgICAgICAgICAgd2hldGhlciByZXZlcnNlIGluZGV4IHNob3VsZCBiZSBsb2FkZWQgaW4gcGFyYWxsZWwKIAkgKiBAcmV0dXJuIGEgY29weSBvZiB0aGUgaW5kZXggaW4tbWVtb3J5LgogCSAqIEB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgogCSAqICAgICAgICAgICAgIHRoZSBzdHJlYW0gY2Fubm90IGJlIHJlYWQuCkBAIC0xMjIsMTAgKzEyNCwxMSBAQCBwdWJsaWMgc3RhdGljIFBhY2tCaXRtYXBJbmRleCByZWFkKElucHV0U3RyZWFtIGZkLCBQYWNrSW5kZXggcGFja0luZGV4LAogCSAqLwogCXB1YmxpYyBzdGF0aWMgUGFja0JpdG1hcEluZGV4IHJlYWQoSW5wdXRTdHJlYW0gZmQsCiAJCQlTdXBwbGllcldpdGhJT0V4Y2VwdGlvbjxQYWNrSW5kZXg+IHBhY2tJbmRleFN1cHBsaWVyLAotCQkJU3VwcGxpZXJXaXRoSU9FeGNlcHRpb248UGFja1JldmVyc2VJbmRleD4gcmV2ZXJzZUluZGV4U3VwcGxpZXIpCisJCQlTdXBwbGllcldpdGhJT0V4Y2VwdGlvbjxQYWNrUmV2ZXJzZUluZGV4PiByZXZlcnNlSW5kZXhTdXBwbGllciwKKwkJCWJvb2xlYW4gbG9hZFBhcmFsbGVsUmV2SW5kZXgpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQlyZXR1cm4gbmV3IFBhY2tCaXRtYXBJbmRleFYxKGZkLCBwYWNrSW5kZXhTdXBwbGllciwKLQkJCQlyZXZlcnNlSW5kZXhTdXBwbGllcik7CisJCQkJcmV2ZXJzZUluZGV4U3VwcGxpZXIsIGxvYWRQYXJhbGxlbFJldkluZGV4KTsKIAl9CiAKIAkvKiogRm9vdGVyIGNoZWNrc3VtIGFwcGxpZWQgb24gdGhlIGJvdHRvbSBvZiB0aGUgcGFjayBmaWxlLiAqLwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0JpdG1hcEluZGV4VjEuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tCaXRtYXBJbmRleFYxLmphdmEKaW5kZXggNjg0NmUzYi4uMjFhYmEzZSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0JpdG1hcEluZGV4VjEuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrQml0bWFwSW5kZXhWMS5qYXZhCkBAIC0xNyw2ICsxNywxMiBAQAogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkFycmF5czsKIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5FeGVjdXRpb25FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuRXhlY3V0b3JTZXJ2aWNlOworaW1wb3J0IGphdmEudXRpbC5jb25jdXJyZW50LkV4ZWN1dG9yczsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5GdXR1cmU7CitpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuVGhyZWFkRmFjdG9yeTsKK2ltcG9ydCBqYXZhLnV0aWwuY29uY3VycmVudC5hdG9taWMuQXRvbWljSW50ZWdlcjsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTnVsbGFibGU7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKQEAgLTQwLDYgKzQ2LDIzIEBAIGNsYXNzIFBhY2tCaXRtYXBJbmRleFYxIGV4dGVuZHMgQmFzZVBhY2tCaXRtYXBJbmRleCB7CiAKIAlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX1hPUl9PRkZTRVQgPSAxMjY7CiAKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBFeGVjdXRvclNlcnZpY2UgZXhlY3V0b3IgPSBFeGVjdXRvcnMKKwkJCS5uZXdDYWNoZWRUaHJlYWRQb29sKG5ldyBUaHJlYWRGYWN0b3J5KCkgeworCQkJCXByaXZhdGUgZmluYWwgVGhyZWFkRmFjdG9yeSBiYXNlRmFjdG9yeSA9IEV4ZWN1dG9ycworCQkJCQkJLmRlZmF1bHRUaHJlYWRGYWN0b3J5KCk7CisKKwkJCQlwcml2YXRlIGZpbmFsIEF0b21pY0ludGVnZXIgdGhyZWFkTnVtYmVyID0gbmV3IEF0b21pY0ludGVnZXIoMCk7CisKKwkJCQlAT3ZlcnJpZGUKKwkJCQlwdWJsaWMgVGhyZWFkIG5ld1RocmVhZChSdW5uYWJsZSBydW5uYWJsZSkgeworCQkJCQlUaHJlYWQgdGhyZWFkID0gYmFzZUZhY3RvcnkubmV3VGhyZWFkKHJ1bm5hYmxlKTsKKwkJCQkJdGhyZWFkLnNldE5hbWUoIkpHaXQtUGFja0JpdG1hcEluZGV4VjEtIiAvLyROT04tTkxTLTEkCisJCQkJCQkJKyB0aHJlYWROdW1iZXIuZ2V0QW5kSW5jcmVtZW50KCkpOworCQkJCQl0aHJlYWQuc2V0RGFlbW9uKHRydWUpOworCQkJCQlyZXR1cm4gdGhyZWFkOworCQkJCX0KKwkJCX0pOworCiAJcHJpdmF0ZSBmaW5hbCBQYWNrSW5kZXggcGFja0luZGV4OwogCXByaXZhdGUgZmluYWwgUGFja1JldmVyc2VJbmRleCByZXZlcnNlSW5kZXg7CiAJcHJpdmF0ZSBmaW5hbCBFV0FIQ29tcHJlc3NlZEJpdG1hcCBjb21taXRzOwpAQCAtNDksMTUgKzcyLDI4IEBAIGNsYXNzIFBhY2tCaXRtYXBJbmRleFYxIGV4dGVuZHMgQmFzZVBhY2tCaXRtYXBJbmRleCB7CiAKIAlwcml2YXRlIGZpbmFsIE9iamVjdElkT3duZXJNYXA8U3RvcmVkQml0bWFwPiBiaXRtYXBzOwogCisJUGFja0JpdG1hcEluZGV4VjEoZmluYWwgSW5wdXRTdHJlYW0gZmQsIFBhY2tJbmRleCBwYWNrSW5kZXgsCisJCQlQYWNrUmV2ZXJzZUluZGV4IHJldmVyc2VJbmRleCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJdGhpcyhmZCwgKCkgLT4gcGFja0luZGV4LCAoKSAtPiByZXZlcnNlSW5kZXgsIGZhbHNlKTsKKwl9CisKIAlQYWNrQml0bWFwSW5kZXhWMShmaW5hbCBJbnB1dFN0cmVhbSBmZCwKIAkJCVN1cHBsaWVyV2l0aElPRXhjZXB0aW9uPFBhY2tJbmRleD4gcGFja0luZGV4U3VwcGxpZXIsCi0JCQlTdXBwbGllcldpdGhJT0V4Y2VwdGlvbjxQYWNrUmV2ZXJzZUluZGV4PiByZXZlcnNlSW5kZXhTdXBwbGllcikKKwkJCVN1cHBsaWVyV2l0aElPRXhjZXB0aW9uPFBhY2tSZXZlcnNlSW5kZXg+IHJldmVyc2VJbmRleFN1cHBsaWVyLAorCQkJYm9vbGVhbiBsb2FkUGFyYWxsZWxSZXZJbmRleCkKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCS8vIEFuIGVudHJ5IGlzIG9iamVjdCBpZCwgeG9yIG9mZnNldCwgZmxhZyBieXRlLCBhbmQgYSBsZW5ndGggZW5jb2RlZAogCQkvLyBiaXRtYXAuIFRoZSBvYmplY3QgaWQgaXMgYW4gaW50MzIgb2YgdGhlIG50aCBwb3NpdGlvbiBzb3J0ZWQgYnkgbmFtZS4KIAkJc3VwZXIobmV3IE9iamVjdElkT3duZXJNYXA8U3RvcmVkQml0bWFwPigpKTsKIAkJdGhpcy5iaXRtYXBzID0gZ2V0Qml0bWFwcygpOwogCisJCS8vIE9wdGlvbmFsbHkgc3RhcnQgbG9hZGluZyByZXZlcnNlIGluZGV4IGluIHBhcmFsbGVsIHRvIGxvYWRpbmcgYml0bWFwCisJCS8vIGZyb20gc3RvcmFnZS4KKwkJRnV0dXJlPFBhY2tSZXZlcnNlSW5kZXg+IHJldmVyc2VJbmRleEZ1dHVyZSA9IG51bGw7CisJCWlmIChsb2FkUGFyYWxsZWxSZXZJbmRleCkgeworCQkJcmV2ZXJzZUluZGV4RnV0dXJlID0gZXhlY3V0b3Iuc3VibWl0KHJldmVyc2VJbmRleFN1cHBsaWVyOjpnZXQpOworCQl9CisKIAkJZmluYWwgYnl0ZVtdIHNjcmF0Y2ggPSBuZXcgYnl0ZVszMl07CiAJCUlPLnJlYWRGdWxseShmZCwgc2NyYXRjaCwgMCwgc2NyYXRjaC5sZW5ndGgpOwogCkBAIC0xNjQsNyArMjAwLDE4IEBAIGNsYXNzIFBhY2tCaXRtYXBJbmRleFYxIGV4dGVuZHMgQmFzZVBhY2tCaXRtYXBJbmRleCB7CiAJCQliaXRtYXBzLmFkZChzYik7CiAJCX0KIAotCQl0aGlzLnJldmVyc2VJbmRleCA9IHJldmVyc2VJbmRleFN1cHBsaWVyLmdldCgpOworCQlQYWNrUmV2ZXJzZUluZGV4IGNvbXB1dGVkUmV2ZXJzZUluZGV4OworCQlpZiAobG9hZFBhcmFsbGVsUmV2SW5kZXggJiYgcmV2ZXJzZUluZGV4RnV0dXJlICE9IG51bGwpIHsKKwkJCXRyeSB7CisJCQkJY29tcHV0ZWRSZXZlcnNlSW5kZXggPSByZXZlcnNlSW5kZXhGdXR1cmUuZ2V0KCk7CisJCQl9IGNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiB8IEV4ZWN1dGlvbkV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gRmFsbGJhY2sgdG8gbG9hZGluZyByZXZlcnNlIGluZGV4IHRocm91Z2ggYSBzdXBwbGllci4KKwkJCQljb21wdXRlZFJldmVyc2VJbmRleCA9IHJldmVyc2VJbmRleFN1cHBsaWVyLmdldCgpOworCQkJfQorCQl9IGVsc2UgeworCQkJY29tcHV0ZWRSZXZlcnNlSW5kZXggPSByZXZlcnNlSW5kZXhTdXBwbGllci5nZXQoKTsKKwkJfQorCQl0aGlzLnJldmVyc2VJbmRleCA9IGNvbXB1dGVkUmV2ZXJzZUluZGV4OwogCX0KIAogCS8qKiB7QGluaGVyaXREb2N9ICovCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrRGlyZWN0b3J5LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrRGlyZWN0b3J5LmphdmEKaW5kZXggZjMyOTA5Zi4uYTdmMjhjNiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja0RpcmVjdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tEaXJlY3RvcnkuamF2YQpAQCAtNjMsMTIgKzYzLDEyIEBAIGNsYXNzIFBhY2tEaXJlY3RvcnkgewogCXByaXZhdGUgc3RhdGljIGZpbmFsIFBhY2tMaXN0IE5PX1BBQ0tTID0gbmV3IFBhY2tMaXN0KEZpbGVTbmFwc2hvdC5ESVJUWSwKIAkJCW5ldyBQYWNrWzBdKTsKIAotCXByaXZhdGUgZmluYWwgQ29uZmlnIGNvbmZpZzsKLQogCXByaXZhdGUgZmluYWwgRmlsZSBkaXJlY3Rvcnk7CiAKIAlwcml2YXRlIGZpbmFsIEF0b21pY1JlZmVyZW5jZTxQYWNrTGlzdD4gcGFja0xpc3Q7CiAKKwlwcml2YXRlIGZpbmFsIGJvb2xlYW4gdHJ1c3RGb2xkZXJTdGF0OworCiAJLyoqCiAJICogSW5pdGlhbGl6ZSBhIHJlZmVyZW5jZSB0byBhbiBvbi1kaXNrICdwYWNrJyBkaXJlY3RvcnkuCiAJICoKQEAgLTc4LDkgKzc4LDE2IEBAIGNsYXNzIFBhY2tEaXJlY3RvcnkgewogCSAqICAgICAgICAgICAgdGhlIGxvY2F0aW9uIG9mIHRoZSB7QGNvZGUgcGFja30gZGlyZWN0b3J5LgogCSAqLwogCVBhY2tEaXJlY3RvcnkoQ29uZmlnIGNvbmZpZywgRmlsZSBkaXJlY3RvcnkpIHsKLQkJdGhpcy5jb25maWcgPSBjb25maWc7CiAJCXRoaXMuZGlyZWN0b3J5ID0gZGlyZWN0b3J5OwogCQlwYWNrTGlzdCA9IG5ldyBBdG9taWNSZWZlcmVuY2U8PihOT19QQUNLUyk7CisKKwkJLy8gV2hldGhlciB0byB0cnVzdCB0aGUgcGFjayBmb2xkZXIncyBtb2RpZmljYXRpb24gdGltZS4gSWYgc2V0IHRvIGZhbHNlCisJCS8vIHdlIHdpbGwgYWx3YXlzIHNjYW4gdGhlIC5naXQvb2JqZWN0cy9wYWNrIGZvbGRlciB0byBjaGVjayBmb3IgbmV3CisJCS8vIHBhY2sgZmlsZXMuIElmIHNldCB0byB0cnVlIChkZWZhdWx0KSB3ZSB1c2UgdGhlIGZvbGRlcidzIHNpemUsCisJCS8vIG1vZGlmaWNhdGlvbiB0aW1lLCBhbmQga2V5IChpbm9kZSkgYW5kIGFzc3VtZSB0aGF0IG5vIG5ldyBwYWNrIGZpbGVzCisJCS8vIGNhbiBiZSBpbiB0aGlzIGZvbGRlciBpZiB0aGVzZSBhdHRyaWJ1dGVzIGhhdmUgbm90IGNoYW5nZWQuCisJCXRydXN0Rm9sZGVyU3RhdCA9IGNvbmZpZy5nZXRCb29sZWFuKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLAorCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1RSVVNURk9MREVSU1RBVCwgdHJ1ZSk7CiAJfQogCiAJLyoqCkBAIC0zMzEsMTYgKzMzOCw2IEBAIHByaXZhdGUgYm9vbGVhbiBkb0xvZ0V4cG9uZW50aWFsQmFja29mZihpbnQgbikgewogCX0KIAogCWJvb2xlYW4gc2VhcmNoUGFja3NBZ2FpbihQYWNrTGlzdCBvbGQpIHsKLQkJLy8gV2hldGhlciB0byB0cnVzdCB0aGUgcGFjayBmb2xkZXIncyBtb2RpZmljYXRpb24gdGltZS4gSWYgc2V0Ci0JCS8vIHRvIGZhbHNlIHdlIHdpbGwgYWx3YXlzIHNjYW4gdGhlIC5naXQvb2JqZWN0cy9wYWNrIGZvbGRlciB0bwotCQkvLyBjaGVjayBmb3IgbmV3IHBhY2sgZmlsZXMuIElmIHNldCB0byB0cnVlIChkZWZhdWx0KSB3ZSB1c2UgdGhlCi0JCS8vIGxhc3Rtb2RpZmllZCBhdHRyaWJ1dGUgb2YgdGhlIGZvbGRlciBhbmQgYXNzdW1lIHRoYXQgbm8gbmV3Ci0JCS8vIHBhY2sgZmlsZXMgY2FuIGJlIGluIHRoaXMgZm9sZGVyIGlmIGhpcyBtb2RpZmljYXRpb24gdGltZSBoYXMKLQkJLy8gbm90IGNoYW5nZWQuCi0JCWJvb2xlYW4gdHJ1c3RGb2xkZXJTdGF0ID0gY29uZmlnLmdldEJvb2xlYW4oCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVFJVU1RGT0xERVJTVEFULCB0cnVlKTsKLQogCQlyZXR1cm4gKCghdHJ1c3RGb2xkZXJTdGF0KSB8fCBvbGQuc25hcHNob3QuaXNNb2RpZmllZChkaXJlY3RvcnkpKQogCQkJCSYmIG9sZCAhPSBzY2FuUGFja3Mob2xkKTsKIAl9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrZWRCYXRjaFJlZlVwZGF0ZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2ZpbGUvUGFja2VkQmF0Y2hSZWZVcGRhdGUuamF2YQppbmRleCA5YzFkMzNkLi44YjBlYTRmIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9QYWNrZWRCYXRjaFJlZlVwZGF0ZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1BhY2tlZEJhdGNoUmVmVXBkYXRlLmphdmEKQEAgLTg2LDEwICs4NiwxNiBAQAogICovCiBjbGFzcyBQYWNrZWRCYXRjaFJlZlVwZGF0ZSBleHRlbmRzIEJhdGNoUmVmVXBkYXRlIHsKIAlwcml2YXRlIFJlZkRpcmVjdG9yeSByZWZkYjsKKwlwcml2YXRlIGJvb2xlYW4gc2hvdWxkTG9ja0xvb3NlUmVmczsKIAogCVBhY2tlZEJhdGNoUmVmVXBkYXRlKFJlZkRpcmVjdG9yeSByZWZkYikgewotCQlzdXBlcihyZWZkYik7Ci0JCXRoaXMucmVmZGIgPSByZWZkYjsKKwkJdGhpcyhyZWZkYiwgdHJ1ZSk7CisJfQorCisJUGFja2VkQmF0Y2hSZWZVcGRhdGUoUmVmRGlyZWN0b3J5IHJlZmRiLCBib29sZWFuIHNob3VsZExvY2tMb29zZVJlZnMpIHsKKwkgIHN1cGVyKHJlZmRiKTsKKwkgIHRoaXMucmVmZGIgPSByZWZkYjsKKwkgIHRoaXMuc2hvdWxkTG9ja0xvb3NlUmVmcyA9IHNob3VsZExvY2tMb29zZVJlZnM7CiAJfQogCiAJLyoqIHtAaW5oZXJpdERvY30gKi8KQEAgLTE1NSw3ICsxNjEsNyBAQCBwdWJsaWMgdm9pZCBleGVjdXRlKFJldldhbGsgd2FsaywgUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsCiAJCXJlZmRiLmluUHJvY2Vzc1BhY2tlZFJlZnNMb2NrLmxvY2soKTsKIAkJdHJ5IHsKIAkJCVBhY2tlZFJlZkxpc3Qgb2xkUGFja2VkTGlzdDsKLQkJCWlmICghcmVmZGIuaXNJbkNsb25lKCkpIHsKKwkJCWlmICghcmVmZGIuaXNJbkNsb25lKCkgJiYgc2hvdWxkTG9ja0xvb3NlUmVmcykgewogCQkJCWxvY2tzID0gbG9ja0xvb3NlUmVmcyhwZW5kaW5nKTsKIAkJCQlpZiAobG9ja3MgPT0gbnVsbCkgewogCQkJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvZmlsZS9SZWZEaXJlY3RvcnkuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1JlZkRpcmVjdG9yeS5qYXZhCmluZGV4IDA3ZTM4MTQuLmQ0YWQxOTAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1JlZkRpcmVjdG9yeS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9maWxlL1JlZkRpcmVjdG9yeS5qYXZhCkBAIC0zMCw2ICszMCw3IEBACiBpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CiBpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwogaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7CiBpbXBvcnQgamF2YS5pby5JbnRlcnJ1cHRlZElPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEubmlvLmZpbGUuRGlyZWN0b3J5Tm90RW1wdHlFeGNlcHRpb247CkBAIC02MCw2ICs2MSw3IEBACiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWdDb25zdGFudHM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvcmVDb25maWcuVHJ1c3RQYWNrZWRSZWZzU3RhdDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZFJlZjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7CkBAIC0xNzcsNiArMTc5LDEwIEBAIHB1YmxpYyBjbGFzcyBSZWZEaXJlY3RvcnkgZXh0ZW5kcyBSZWZEYXRhYmFzZSB7CiAKIAlwcml2YXRlIExpc3Q8SW50ZWdlcj4gcmV0cnlTbGVlcE1zID0gUkVUUllfU0xFRVBfTVM7CiAKKwlwcml2YXRlIGZpbmFsIGJvb2xlYW4gdHJ1c3RGb2xkZXJTdGF0OworCisJcHJpdmF0ZSBmaW5hbCBUcnVzdFBhY2tlZFJlZnNTdGF0IHRydXN0UGFja2VkUmVmc1N0YXQ7CisKIAlSZWZEaXJlY3RvcnkoRmlsZVJlcG9zaXRvcnkgZGIpIHsKIAkJZmluYWwgRlMgZnMgPSBkYi5nZXRGUygpOwogCQlwYXJlbnQgPSBkYjsKQEAgLTE4OCw2ICsxOTQsMTMgQEAgcHVibGljIGNsYXNzIFJlZkRpcmVjdG9yeSBleHRlbmRzIFJlZkRhdGFiYXNlIHsKIAogCQlsb29zZVJlZnMuc2V0KFJlZkxpc3QuPExvb3NlUmVmPiBlbXB0eUxpc3QoKSk7CiAJCXBhY2tlZFJlZnMuc2V0KE5PX1BBQ0tFRF9SRUZTKTsKKwkJdHJ1c3RGb2xkZXJTdGF0ID0gZGIuZ2V0Q29uZmlnKCkKKwkJCQkuZ2V0Qm9vbGVhbihDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwKKwkJCQkJCUNvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1RSVVNURk9MREVSU1RBVCwgdHJ1ZSk7CisJCXRydXN0UGFja2VkUmVmc1N0YXQgPSBkYi5nZXRDb25maWcoKQorCQkJCS5nZXRFbnVtKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLCBudWxsLAorCQkJCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVFJVU1RfUEFDS0VEX1JFRlNfU1RBVCwKKwkJCQkJCVRydXN0UGFja2VkUmVmc1N0YXQuVU5TRVQpOwogCX0KIAogCVJlcG9zaXRvcnkgZ2V0UmVwb3NpdG9yeSgpIHsKQEAgLTU4Nyw2ICs2MDAsMjEgQEAgcHVibGljIFBhY2tlZEJhdGNoUmVmVXBkYXRlIG5ld0JhdGNoVXBkYXRlKCkgewogCQlyZXR1cm4gbmV3IFBhY2tlZEJhdGNoUmVmVXBkYXRlKHRoaXMpOwogCX0KIAorCS8qKgorCSAqIENyZWF0ZSBhIG5ldyBiYXRjaCB1cGRhdGUgdG8gYXR0ZW1wdCBvbiB0aGlzIGRhdGFiYXNlLgorCSAqCisJICogQHBhcmFtIHNob3VsZExvY2tMb29zZVJlZnMKKwkgKiAgICAgICAgICAgIHdoZXRoZXIgbG9vc2UgcmVmcyBzaG91bGQgYmUgbG9ja2VkIGR1cmluZyB0aGUgYmF0Y2ggcmVmCisJICogICAgICAgICAgICB1cGRhdGUuIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBvbmx5IGJlIHNldCB0byB7QGNvZGUgZmFsc2V9IGlmCisJICogICAgICAgICAgICB0aGUgYXBwbGljYXRpb24gdXNpbmcgdGhpcyBlbnN1cmVzIHRoYXQgbm8gb3RoZXIgcmVmIHVwZGF0ZXMKKwkgKiAgICAgICAgICAgIHJ1biBjb25jdXJyZW50bHkgdG8gYXZvaWQgbG9zdCB1cGRhdGVzIGNhdXNlZCBieSBhIHJhY2UuIEluCisJICogICAgICAgICAgICBzdWNoIGNhc2VzIGl0IGNhbiBpbXByb3ZlIHBlcmZvcm1hbmNlLgorCSAqIEByZXR1cm4gYSBuZXcgYmF0Y2ggdXBkYXRlIG9iamVjdAorCSAqLworCXB1YmxpYyBQYWNrZWRCYXRjaFJlZlVwZGF0ZSBuZXdCYXRjaFVwZGF0ZShib29sZWFuIHNob3VsZExvY2tMb29zZVJlZnMpIHsKKwkJcmV0dXJuIG5ldyBQYWNrZWRCYXRjaFJlZlVwZGF0ZSh0aGlzLCBzaG91bGRMb2NrTG9vc2VSZWZzKTsKKwl9CisKIAkvKioge0Bpbmhlcml0RG9jfSAqLwogCUBPdmVycmlkZQogCXB1YmxpYyBib29sZWFuIHBlcmZvcm1zQXRvbWljVHJhbnNhY3Rpb25zKCkgewpAQCAtODc0LDEzICs5MDIsMzAgQEAgZWxzZSBpZiAoMCA8PSAoaWR4ID0gcGFja2VkLmZpbmQoZHN0LmdldE5hbWUoKSkpKQogCX0KIAogCVBhY2tlZFJlZkxpc3QgZ2V0UGFja2VkUmVmcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWJvb2xlYW4gdHJ1c3RGb2xkZXJTdGF0ID0gZ2V0UmVwb3NpdG9yeSgpLmdldENvbmZpZygpLmdldEJvb2xlYW4oCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT1JFX1NFQ1RJT04sCi0JCQkJQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfVFJVU1RGT0xERVJTVEFULCB0cnVlKTsKLQogCQlmaW5hbCBQYWNrZWRSZWZMaXN0IGN1ckxpc3QgPSBwYWNrZWRSZWZzLmdldCgpOwotCQlpZiAodHJ1c3RGb2xkZXJTdGF0ICYmICFjdXJMaXN0LnNuYXBzaG90LmlzTW9kaWZpZWQocGFja2VkUmVmc0ZpbGUpKSB7Ci0JCQlyZXR1cm4gY3VyTGlzdDsKKworCQlzd2l0Y2ggKHRydXN0UGFja2VkUmVmc1N0YXQpIHsKKwkJY2FzZSBORVZFUjoKKwkJCWJyZWFrOworCQljYXNlIEFGVEVSX09QRU46CisJCQl0cnkgKElucHV0U3RyZWFtIHN0cmVhbSA9IEZpbGVzCisJCQkJCS5uZXdJbnB1dFN0cmVhbShwYWNrZWRSZWZzRmlsZS50b1BhdGgoKSkpIHsKKwkJCQkvLyBvcGVuIHRoZSBmaWxlIHRvIHJlZnJlc2ggYXR0cmlidXRlcyAob24gc29tZSBORlMgY2xpZW50cykKKwkJCX0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisJCQkJLy8gSWdub3JlIGFzIHBhY2tlZC1yZWZzIG1heSBub3QgZXhpc3QKKwkJCX0KKwkJCS8vJEZBTEwtVEhST1VHSCQKKwkJY2FzZSBBTFdBWVM6CisJCQlpZiAoIWN1ckxpc3Quc25hcHNob3QuaXNNb2RpZmllZChwYWNrZWRSZWZzRmlsZSkpIHsKKwkJCQlyZXR1cm4gY3VyTGlzdDsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFVOU0VUOgorCQkJaWYgKHRydXN0Rm9sZGVyU3RhdAorCQkJCQkmJiAhY3VyTGlzdC5zbmFwc2hvdC5pc01vZGlmaWVkKHBhY2tlZFJlZnNGaWxlKSkgeworCQkJCXJldHVybiBjdXJMaXN0OworCQkJfQorCQkJYnJlYWs7CiAJCX0KIAogCQlmaW5hbCBQYWNrZWRSZWZMaXN0IG5ld0xpc3QgPSByZWFkUGFja2VkUmVmcygpOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2lvL0NhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvaW8vQ2FuY2VsbGFibGVEaWdlc3RPdXRwdXRTdHJlYW0uamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTIwOTVmCi0tLSAvZGV2L251bGwKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL2lvL0NhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtLmphdmEKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIsIFRlbmNlbnQuCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQuaW50ZXJuYWwuc3RvcmFnZS5pbzsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Qcm9ncmVzc01vbml0b3I7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEuaW8uSW50ZXJydXB0ZWRJT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CisKKy8qKgorICogQW4gT3V0cHV0U3RyZWFtIHRoYXQga2VlcHMgYSBkaWdlc3QgYW5kIGNoZWNrcyBldmVyeSBOIGJ5dGVzIGZvcgorICogY2FuY2VsbGF0aW9uLgorICovCitwdWJsaWMgY2xhc3MgQ2FuY2VsbGFibGVEaWdlc3RPdXRwdXRTdHJlYW0gZXh0ZW5kcyBPdXRwdXRTdHJlYW0geworCisJLyoqIFRoZSBPdXRwdXRTdHJlYW0gY2hlY2tzIGV2ZXJ5IHRoaXMgdmFsdWUgZm9yIGNhbmNlbGxhdGlvbiAqKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBCWVRFU19UT19XUklURV9CRUZPUkVfQ0FOQ0VMX0NIRUNLID0gMTI4ICogMTAyNDsKKworCXByaXZhdGUgZmluYWwgUHJvZ3Jlc3NNb25pdG9yIHdyaXRlTW9uaXRvcjsKKworCXByaXZhdGUgZmluYWwgT3V0cHV0U3RyZWFtIG91dDsKKworCXByaXZhdGUgZmluYWwgTWVzc2FnZURpZ2VzdCBtZCA9IENvbnN0YW50cy5uZXdNZXNzYWdlRGlnZXN0KCk7CisKKwlwcml2YXRlIGxvbmcgY291bnQ7CisKKwlwcml2YXRlIGxvbmcgY2hlY2tDYW5jZWxBdDsKKworCS8qKgorCSAqIEluaXRpYWxpemUgYSBDYW5jZWxsYWJsZURpZ2VzdE91dHB1dFN0cmVhbS4KKwkgKgorCSAqIEBwYXJhbSB3cml0ZU1vbml0b3IKKwkgKiAgICAgICAgICAgIG1vbml0b3IgdG8gdXBkYXRlIG9uIG91dHB1dCBwcm9ncmVzcyBhbmQgY2hlY2sgY2FuY2VsLgorCSAqIEBwYXJhbSBvdXQKKwkgKiAgICAgICAgICAgIHRhcmdldCBzdHJlYW0gdG8gcmVjZWl2ZSBhbGwgY29udGVudHMuCisJICovCisJcHVibGljIENhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtKFByb2dyZXNzTW9uaXRvciB3cml0ZU1vbml0b3IsCisJCQlPdXRwdXRTdHJlYW0gb3V0KSB7CisJCXRoaXMud3JpdGVNb25pdG9yID0gd3JpdGVNb25pdG9yOworCQl0aGlzLm91dCA9IG91dDsKKwkJdGhpcy5jaGVja0NhbmNlbEF0ID0gQllURVNfVE9fV1JJVEVfQkVGT1JFX0NBTkNFTF9DSEVDSzsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIG1vbml0b3Igd2hpY2ggaXMgdXNlZCB0byB1cGRhdGUgb24gb3V0cHV0IHByb2dyZXNzIGFuZCBjaGVjaworCSAqIGNhbmNlbC4KKwkgKgorCSAqIEByZXR1cm4gdGhlIG1vbml0b3IKKwkgKi8KKwlwdWJsaWMgZmluYWwgUHJvZ3Jlc3NNb25pdG9yIGdldFdyaXRlTW9uaXRvcigpIHsKKwkJcmV0dXJuIHdyaXRlTW9uaXRvcjsKKwl9CisKKwkvKioKKwkgKiBPYnRhaW4gdGhlIGN1cnJlbnQgU0hBLTEgZGlnZXN0LgorCSAqCisJICogQHJldHVybiBTSEEtMSBkaWdlc3QKKwkgKi8KKwlwdWJsaWMgZmluYWwgYnl0ZVtdIGdldERpZ2VzdCgpIHsKKwkJcmV0dXJuIG1kLmRpZ2VzdCgpOworCX0KKworCS8qKgorCSAqIEdldCB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzaW5jZSBzdHJlYW0gc3RhcnQuCisJICoKKwkgKiBAcmV0dXJuIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHNpbmNlIHN0cmVhbSBzdGFydC4KKwkgKi8KKwlwdWJsaWMgZmluYWwgbG9uZyBsZW5ndGgoKSB7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwkvKioge0Bpbmhlcml0RG9jfSAqLworCUBPdmVycmlkZQorCXB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlKGludCBiKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAoY2hlY2tDYW5jZWxBdCA8PSBjb3VudCkgeworCQkJaWYgKHdyaXRlTW9uaXRvci5pc0NhbmNlbGxlZCgpKSB7CisJCQkJdGhyb3cgbmV3IEludGVycnVwdGVkSU9FeGNlcHRpb24oKTsKKwkJCX0KKwkJCWNoZWNrQ2FuY2VsQXQgPSBjb3VudCArIEJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0s7CisJCX0KKworCQlvdXQud3JpdGUoYik7CisJCW1kLnVwZGF0ZSgoYnl0ZSkgYik7CisJCWNvdW50Kys7CisJfQorCisJLyoqIHtAaW5oZXJpdERvY30gKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgZmluYWwgdm9pZCB3cml0ZShieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJd2hpbGUgKDAgPCBsZW4pIHsKKwkJCWlmIChjaGVja0NhbmNlbEF0IDw9IGNvdW50KSB7CisJCQkJaWYgKHdyaXRlTW9uaXRvci5pc0NhbmNlbGxlZCgpKSB7CisJCQkJCXRocm93IG5ldyBJbnRlcnJ1cHRlZElPRXhjZXB0aW9uKCk7CisJCQkJfQorCQkJCWNoZWNrQ2FuY2VsQXQgPSBjb3VudCArIEJZVEVTX1RPX1dSSVRFX0JFRk9SRV9DQU5DRUxfQ0hFQ0s7CisJCQl9CisKKwkJCWludCBuID0gTWF0aC5taW4obGVuLCBCWVRFU19UT19XUklURV9CRUZPUkVfQ0FOQ0VMX0NIRUNLKTsKKwkJCW91dC53cml0ZShiLCBvZmYsIG4pOworCQkJbWQudXBkYXRlKGIsIG9mZiwgbik7CisJCQljb3VudCArPSBuOworCisJCQlvZmYgKz0gbjsKKwkJCWxlbiAtPSBuOworCQl9CisJfQorCisJLyoqIHtAaW5oZXJpdERvY30gKi8KKwlAT3ZlcnJpZGUKKwlwdWJsaWMgdm9pZCBmbHVzaCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCW91dC5mbHVzaCgpOworCX0KK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9wYWNrL1BhY2tPdXRwdXRTdHJlYW0uamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvc3RvcmFnZS9wYWNrL1BhY2tPdXRwdXRTdHJlYW0uamF2YQppbmRleCA3MTA0Yjk0Li4yZDBmZTI4IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2ludGVybmFsL3N0b3JhZ2UvcGFjay9QYWNrT3V0cHV0U3RyZWFtLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC9zdG9yYWdlL3BhY2svUGFja091dHB1dFN0cmVhbS5qYXZhCkBAIC0xNywxMCArMTcsOCBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnNlY3VyaXR5Lk1lc3NhZ2VEaWdlc3Q7CiAKLWltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLnN0b3JhZ2UuaW8uQ2FuY2VsbGFibGVEaWdlc3RPdXRwdXRTdHJlYW07CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUHJvZ3Jlc3NNb25pdG9yOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5OQjsKIApAQCAtMjgsMjUgKzI2LDE0IEBACiAgKiBDdXN0b20gb3V0cHV0IHN0cmVhbSB0byBzdXBwb3J0CiAgKiB7QGxpbmsgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5zdG9yYWdlLnBhY2suUGFja1dyaXRlcn0uCiAgKi8KLXB1YmxpYyBmaW5hbCBjbGFzcyBQYWNrT3V0cHV0U3RyZWFtIGV4dGVuZHMgT3V0cHV0U3RyZWFtIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgQllURVNfVE9fV1JJVEVfQkVGT1JFX0NBTkNFTF9DSEVDSyA9IDEyOCAqIDEwMjQ7Ci0KLQlwcml2YXRlIGZpbmFsIFByb2dyZXNzTW9uaXRvciB3cml0ZU1vbml0b3I7Ci0KLQlwcml2YXRlIGZpbmFsIE91dHB1dFN0cmVhbSBvdXQ7CitwdWJsaWMgZmluYWwgY2xhc3MgUGFja091dHB1dFN0cmVhbSBleHRlbmRzIENhbmNlbGxhYmxlRGlnZXN0T3V0cHV0U3RyZWFtIHsKIAogCXByaXZhdGUgZmluYWwgUGFja1dyaXRlciBwYWNrV3JpdGVyOwogCi0JcHJpdmF0ZSBmaW5hbCBNZXNzYWdlRGlnZXN0IG1kID0gQ29uc3RhbnRzLm5ld01lc3NhZ2VEaWdlc3QoKTsKLQotCXByaXZhdGUgbG9uZyBjb3VudDsKLQogCXByaXZhdGUgZmluYWwgYnl0ZVtdIGhlYWRlckJ1ZmZlciA9IG5ldyBieXRlWzMyXTsKIAogCXByaXZhdGUgZmluYWwgYnl0ZVtdIGNvcHlCdWZmZXIgPSBuZXcgYnl0ZVs2NCA8PCAxMF07CiAKLQlwcml2YXRlIGxvbmcgY2hlY2tDYW5jZWxBdDsKLQogCXByaXZhdGUgYm9vbGVhbiBvZnNEZWx0YTsKIAogCS8qKgpAQCAtNjYsNDggKzUzLDggQEAgcHVibGljIGZpbmFsIGNsYXNzIFBhY2tPdXRwdXRTdHJlYW0gZXh0ZW5kcyBPdXRwdXRTdHJlYW0gewogCSAqLwogCXB1YmxpYyBQYWNrT3V0cHV0U3RyZWFtKGZpbmFsIFByb2dyZXNzTW9uaXRvciB3cml0ZU1vbml0b3IsCiAJCQlmaW5hbCBPdXRwdXRTdHJlYW0gb3V0LCBmaW5hbCBQYWNrV3JpdGVyIHB3KSB7Ci0JCXRoaXMud3JpdGVNb25pdG9yID0gd3JpdGVNb25pdG9yOwotCQl0aGlzLm91dCA9IG91dDsKKwkJc3VwZXIod3JpdGVNb25pdG9yLCBvdXQpOwogCQl0aGlzLnBhY2tXcml0ZXIgPSBwdzsKLQkJdGhpcy5jaGVja0NhbmNlbEF0ID0gQllURVNfVE9fV1JJVEVfQkVGT1JFX0NBTkNFTF9DSEVDSzsKLQl9Ci0KLQkvKioge0Bpbmhlcml0RG9jfSAqLwotCUBPdmVycmlkZQotCXB1YmxpYyBmaW5hbCB2b2lkIHdyaXRlKGludCBiKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQljb3VudCsrOwotCQlvdXQud3JpdGUoYik7Ci0JCW1kLnVwZGF0ZSgoYnl0ZSkgYik7Ci0JfQotCi0JLyoqIHtAaW5oZXJpdERvY30gKi8KLQlAT3ZlcnJpZGUKLQlwdWJsaWMgZmluYWwgdm9pZCB3cml0ZShieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikKLQkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXdoaWxlICgwIDwgbGVuKSB7Ci0JCQlmaW5hbCBpbnQgbiA9IE1hdGgubWluKGxlbiwgQllURVNfVE9fV1JJVEVfQkVGT1JFX0NBTkNFTF9DSEVDSyk7Ci0JCQljb3VudCArPSBuOwotCi0JCQlpZiAoY2hlY2tDYW5jZWxBdCA8PSBjb3VudCkgewotCQkJCWlmICh3cml0ZU1vbml0b3IuaXNDYW5jZWxsZWQoKSkgewotCQkJCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oCi0JCQkJCQkJSkdpdFRleHQuZ2V0KCkucGFja2luZ0NhbmNlbGxlZER1cmluZ09iamVjdHNXcml0aW5nKTsKLQkJCQl9Ci0JCQkJY2hlY2tDYW5jZWxBdCA9IGNvdW50ICsgQllURVNfVE9fV1JJVEVfQkVGT1JFX0NBTkNFTF9DSEVDSzsKLQkJCX0KLQotCQkJb3V0LndyaXRlKGIsIG9mZiwgbik7Ci0JCQltZC51cGRhdGUoYiwgb2ZmLCBuKTsKLQotCQkJb2ZmICs9IG47Ci0JCQlsZW4gLT0gbjsKLQkJfQotCX0KLQotCS8qKiB7QGluaGVyaXREb2N9ICovCi0JQE92ZXJyaWRlCi0JcHVibGljIHZvaWQgZmx1c2goKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlvdXQuZmx1c2goKTsKIAl9CiAKIAlmaW5hbCB2b2lkIHdyaXRlRmlsZUhlYWRlcihpbnQgdmVyc2lvbiwgbG9uZyBvYmplY3RDb3VudCkKQEAgLTE2MCw3ICsxMDcsNyBAQCBwdWJsaWMgZmluYWwgdm9pZCB3cml0ZUhlYWRlcihPYmplY3RUb1BhY2sgb3RwLCBsb25nIHJhd0xlbmd0aCkKIAkJT2JqZWN0VG9QYWNrIGIgPSBvdHAuZ2V0RGVsdGFCYXNlKCk7CiAJCWlmIChiICE9IG51bGwgJiYgKGIuaXNXcml0dGVuKCkgJiBvZnNEZWx0YSkpIHsgLy8gTm9uLXNob3J0LWNpcmN1aXQgbG9naWMgaXMgaW50ZW50aW9uYWwKIAkJCWludCBuID0gb2JqZWN0SGVhZGVyKHJhd0xlbmd0aCwgT0JKX09GU19ERUxUQSwgaGVhZGVyQnVmZmVyKTsKLQkJCW4gPSBvZnNEZWx0YShjb3VudCAtIGIuZ2V0T2Zmc2V0KCksIGhlYWRlckJ1ZmZlciwgbik7CisJCQluID0gb2ZzRGVsdGEobGVuZ3RoKCkgLSBiLmdldE9mZnNldCgpLCBoZWFkZXJCdWZmZXIsIG4pOwogCQkJd3JpdGUoaGVhZGVyQnVmZmVyLCAwLCBuKTsKIAkJfSBlbHNlIGlmIChvdHAuaXNEZWx0YVJlcHJlc2VudGF0aW9uKCkpIHsKIAkJCWludCBuID0gb2JqZWN0SGVhZGVyKHJhd0xlbmd0aCwgT0JKX1JFRl9ERUxUQSwgaGVhZGVyQnVmZmVyKTsKQEAgLTIwOSwyMCArMTU2LDYgQEAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IG9mc0RlbHRhVmFySW50TGVuZ3RoKGxvbmcgdikgewogCX0KIAogCXZvaWQgZW5kT2JqZWN0KCkgewotCQl3cml0ZU1vbml0b3IudXBkYXRlKDEpOwotCX0KLQotCS8qKgotCSAqIEdldCB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiBzaW5jZSBzdHJlYW0gc3RhcnQuCi0JICoKLQkgKiBAcmV0dXJuIHRvdGFsIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHNpbmNlIHN0cmVhbSBzdGFydC4KLQkgKi8KLQlwdWJsaWMgZmluYWwgbG9uZyBsZW5ndGgoKSB7Ci0JCXJldHVybiBjb3VudDsKLQl9Ci0KLQkvKiogQHJldHVybiBvYnRhaW4gdGhlIGN1cnJlbnQgU0hBLTEgZGlnZXN0LiAqLwotCWZpbmFsIGJ5dGVbXSBnZXREaWdlc3QoKSB7Ci0JCXJldHVybiBtZC5kaWdlc3QoKTsKKwkJZ2V0V3JpdGVNb25pdG9yKCkudXBkYXRlKDEpOwogCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvaW50ZXJuYWwvdHJhbnNwb3J0L3NzaC9PcGVuU3NoQ29uZmlnRmlsZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlLmphdmEKaW5kZXggNjQ4ZDRhMS4uNjU5Y2NiOCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9pbnRlcm5hbC90cmFuc3BvcnQvc3NoL09wZW5Tc2hDb25maWdGaWxlLmphdmEKQEAgLTUwMiw2ICs1MDIsOTggQEAgcHVibGljIHN0YXRpYyBib29sZWFuIGZsYWcoU3RyaW5nIHZhbHVlKSB7CiAJfQogCiAJLyoqCisJICogQ29udmVydHMgYW4gT3BlblNTSCB0aW1lIHZhbHVlIGludG8gYSBudW1iZXIgb2Ygc2Vjb25kcy4gVGhlIGZvcm1hdCBpcworCSAqIGRlZmluZWQgYnkgT3BlblNTSCBhcyBhIHNlcXVlbmNlIG9mIChwb3NpdGl2ZSkgaW50ZWdlcnMgd2l0aCBzdWZmaXhlcyBmb3IKKwkgKiBzZWNvbmRzLCBtaW51dGVzLCBob3VycywgZGF5cywgYW5kIHdlZWtzLgorCSAqCisJICogQHBhcmFtIHZhbHVlCisJICogICAgICAgICAgICB0byBjb252ZXJ0CisJICogQHJldHVybiB0aGUgcGFyc2VkIHZhbHVlIGFzIGEgbnVtYmVyIG9mIHNlY29uZHMsIG9yIC0xIGlmIHRoZSB2YWx1ZSBpcworCSAqICAgICAgICAgbm90IGEgdmFsaWQgT3BlblNTSCB0aW1lIHZhbHVlCisJICogQHNlZSA8YSBocmVmPSJodHRwczovL21hbi5vcGVuYnNkLm9yZy9zc2hkX2NvbmZpZy41I1RJTUVfRk9STUFUUyI+T3BlbkJTRAorCSAqICAgICAgbWFuIDUgc3NoZF9jb25maWcsIHNlY3Rpb24gVElNRSBGT1JNQVRTPC9hPgorCSAqLworCXB1YmxpYyBzdGF0aWMgaW50IHRpbWVTcGVjKFN0cmluZyB2YWx1ZSkgeworCQlpZiAodmFsdWUgPT0gbnVsbCkgeworCQkJcmV0dXJuIC0xOworCQl9CisJCXRyeSB7CisJCQlpbnQgbGVuZ3RoID0gdmFsdWUubGVuZ3RoKCk7CisJCQlpbnQgaSA9IDA7CisJCQlpbnQgc2Vjb25kcyA9IDA7CisJCQlib29sZWFuIHZhbHVlU2VlbiA9IGZhbHNlOworCQkJd2hpbGUgKGkgPCBsZW5ndGgpIHsKKwkJCQkvLyBTa2lwIHdoaXRlc3BhY2UKKwkJCQljaGFyIGNoID0gdmFsdWUuY2hhckF0KGkpOworCQkJCWlmIChDaGFyYWN0ZXIuaXNXaGl0ZXNwYWNlKGNoKSkgeworCQkJCQlpKys7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAoY2ggPT0gJysnKSB7CisJCQkJCS8vIE9wZW5TU0ggdXNlcyBzdHJ0b2wgd2l0aCBiYXNlIDEwOiBhIGxlYWRpbmcgcGx1cyBzaWduIGlzCisJCQkJCS8vIGFsbG93ZWQuCisJCQkJCWkrKzsKKwkJCQl9CisJCQkJaW50IHZhbCA9IDA7CisJCQkJaW50IGogPSBpOworCQkJCXdoaWxlIChqIDwgbGVuZ3RoKSB7CisJCQkJCWNoID0gdmFsdWUuY2hhckF0KGorKyk7CisJCQkJCWlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisJCQkJCQl2YWwgPSBNYXRoLmFkZEV4YWN0KE1hdGgubXVsdGlwbHlFeGFjdCh2YWwsIDEwKSwKKwkJCQkJCQkJY2ggLSAnMCcpOworCQkJCQl9IGVsc2UgeworCQkJCQkJai0tOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKGkgPT0gaikgeworCQkJCQkvLyBObyBkaWdpdHMgc2VlbgorCQkJCQlyZXR1cm4gLTE7CisJCQkJfQorCQkJCWkgPSBqOworCQkJCWludCBtdWx0aXBsaWVyID0gMTsKKwkJCQlpZiAoaSA8IGxlbmd0aCkgeworCQkJCQljaCA9IHZhbHVlLmNoYXJBdChpKyspOworCQkJCQlzd2l0Y2ggKGNoKSB7CisJCQkJCWNhc2UgJ3MnOgorCQkJCQljYXNlICdTJzoKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlICdtJzoKKwkJCQkJY2FzZSAnTSc6CisJCQkJCQltdWx0aXBsaWVyID0gNjA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAnaCc6CisJCQkJCWNhc2UgJ0gnOgorCQkJCQkJbXVsdGlwbGllciA9IDM2MDA7CisJCQkJCQlicmVhazsKKwkJCQkJY2FzZSAnZCc6CisJCQkJCWNhc2UgJ0QnOgorCQkJCQkJbXVsdGlwbGllciA9IDI0ICogMzYwMDsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlICd3JzoKKwkJCQkJY2FzZSAnVyc6CisJCQkJCQltdWx0aXBsaWVyID0gNyAqIDI0ICogMzYwMDsKKwkJCQkJCWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJaWYgKENoYXJhY3Rlci5pc1doaXRlc3BhY2UoY2gpKSB7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQkvLyBJbnZhbGlkIHRpbWUgc3BlYworCQkJCQkJcmV0dXJuIC0xOworCQkJCQl9CisJCQkJfQorCQkJCXNlY29uZHMgPSBNYXRoLmFkZEV4YWN0KHNlY29uZHMsCisJCQkJCQlNYXRoLm11bHRpcGx5RXhhY3QodmFsLCBtdWx0aXBsaWVyKSk7CisJCQkJdmFsdWVTZWVuID0gdHJ1ZTsKKwkJCX0KKwkJCXJldHVybiB2YWx1ZVNlZW4gPyBzZWNvbmRzIDogLTE7CisJCX0gY2F0Y2ggKEFyaXRobWV0aWNFeGNlcHRpb24gZSkgeworCQkJLy8gT3ZlcmZsb3cKKwkJCXJldHVybiAtMTsKKwkJfQorCX0KKworCS8qKgogCSAqIFJldHJpZXZlcyB0aGUgbG9jYWwgdXNlciBuYW1lIGFzIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvci4KIAkgKgogCSAqIEByZXR1cm4gdGhlIHVzZXIgbmFtZQpAQCAtNTQ5LDYgKzY0MSw3IEBAIHB1YmxpYyBzdGF0aWMgY2xhc3MgSG9zdEVudHJ5IGltcGxlbWVudHMgU3NoQ29uZmlnU3RvcmUuSG9zdENvbmZpZyB7CiAJCQlMSVNUX0tFWVMuYWRkKFNzaENvbnN0YW50cy5HTE9CQUxfS05PV05fSE9TVFNfRklMRSk7CiAJCQlMSVNUX0tFWVMuYWRkKFNzaENvbnN0YW50cy5TRU5EX0VOVik7CiAJCQlMSVNUX0tFWVMuYWRkKFNzaENvbnN0YW50cy5VU0VSX0tOT1dOX0hPU1RTX0ZJTEUpOworCQkJTElTVF9LRVlTLmFkZChTc2hDb25zdGFudHMuQUREX0tFWVNfVE9fQUdFTlQpOyAvLyBjb25maXJtIHRpbWVTcGVjCiAJCX0KIAogCQkvKioKQEAgLTg3MSw3ICs5NjQsOCBAQCB2b2lkIHN1YnN0aXR1dGUoU3RyaW5nIG9yaWdpbmFsSG9zdE5hbWUsIGludCBwb3J0LCBTdHJpbmcgdXNlck5hbWUsCiAJCQlpZiAob3B0aW9ucyAhPSBudWxsKSB7CiAJCQkJLy8gSE9TVE5BTUUgYWxyZWFkeSBkb25lIGFib3ZlCiAJCQkJU3RyaW5nIHZhbHVlID0gb3B0aW9ucy5nZXQoU3NoQ29uc3RhbnRzLklERU5USVRZX0FHRU5UKTsKLQkJCQlpZiAodmFsdWUgIT0gbnVsbCkgeworCQkJCWlmICh2YWx1ZSAhPSBudWxsICYmICFTc2hDb25zdGFudHMuTk9ORS5lcXVhbHModmFsdWUpCisJCQkJCQkmJiAhU3NoQ29uc3RhbnRzLkVOVl9TU0hfQVVUSF9TT0NLRVQuZXF1YWxzKHZhbHVlKSkgewogCQkJCQl2YWx1ZSA9IHIuc3Vic3RpdHV0ZSh2YWx1ZSwgUmVwbGFjZXIuREVGQVVMVF9UT0tFTlMsIHRydWUpOwogCQkJCQl2YWx1ZSA9IHRvRmlsZSh2YWx1ZSwgaG9tZSkuZ2V0UGF0aCgpOwogCQkJCQlvcHRpb25zLnB1dChTc2hDb25zdGFudHMuSURFTlRJVFlfQUdFTlQsIHZhbHVlKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0FiYnJldkNvbmZpZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQWJicmV2Q29uZmlnLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEwOWNmZAotLS0gL2Rldi9udWxsCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0FiYnJldkNvbmZpZy5qYXZhCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIyLCAgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPiBhbmQgb3RoZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CisgKiBodHRwczovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VkbC12MTAucGhwLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqLworcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LmxpYjsKKworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOworaW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5UeXBlZENvbmZpZ0dldHRlci5VTlNFVF9JTlQ7CisKK2ltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKKworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYXBpLmVycm9ycy5JbnZhbGlkQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OworCisvKioKKyAqIEdpdCBjb25maWd1cmF0aW9uIG9wdGlvbiA8YQorICogaHJlZj1odHRwczovL2dpdC1zY20uY29tL2RvY3MvZ2l0LWNvbmZpZyNEb2N1bWVudGF0aW9uL2dpdC1jb25maWcudHh0LWNvcmVhYmJyZXYiPgorICogY29yZS5hYmJyZXY8L2E+CisgKgorICogQHNpbmNlIDYuMQorICovCitwdWJsaWMgZmluYWwgY2xhc3MgQWJicmV2Q29uZmlnIHsKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfTk8gPSAibm8iOyAvLyROT04tTkxTLTEkCisKKwlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUVfQVVUTyA9ICJhdXRvIjsgLy8kTk9OLU5MUy0xJAorCisJLyoqCisJICogVGhlIG1pbmltdW0gdmFsdWUgb2YgYWJicmV2CisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgTUlOX0FCQlJFViA9IDQ7CisKKwkvKioKKwkgKiBDYXAgY29uZmlndXJlZCBjb3JlLmFiYnJldiB0byByYW5nZSBiZXR3ZWVuIG1pbmltdW0gb2YgNCBhbmQgbnVtYmVyIG9mCisJICogaGV4LWRpZ2l0cyBvZiBhIGZ1bGwgb2JqZWN0IGlkLgorCSAqCisJICogQHBhcmFtIGxlbgorCSAqICAgICAgICAgICAgY29uZmlndXJlZCBudW1iZXIgb2YgaGV4LWRpZ2l0cyB0byBhYmJyZXZpYXRlIG9iamVjdCBpZHMgdG8KKwkgKiBAcmV0dXJuIGNvcmUuYWJicmV2IGNhcHBlZCB0byByYW5nZSBiZXR3ZWVuIG1pbmltdW0gb2YgNCBhbmQgbnVtYmVyIG9mCisJICogICAgICAgICBoZXgtZGlnaXRzIG9mIGEgZnVsbCBvYmplY3QgaWQKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGludCBjYXBBYmJyZXYoaW50IGxlbikgeworCQlyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoTUlOX0FCQlJFViwgbGVuKSwKKwkJCQlDb25zdGFudHMuT0JKRUNUX0lEX1NUUklOR19MRU5HVEgpOworCX0KKworCS8qKgorCSAqIE5vIGFiYnJldmlhdGlvbgorCSAqLworCXB1YmxpYyBmaW5hbCBzdGF0aWMgQWJicmV2Q29uZmlnIE5PID0gbmV3IEFiYnJldkNvbmZpZygKKwkJCUNvbnN0YW50cy5PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCk7CisKKwkvKioKKwkgKiBQYXJzZSBzdHJpbmcgdmFsdWUgb2YgY29yZS5hYmJyZXYgZ2l0IG9wdGlvbiBmb3IgYSBnaXZlbiByZXBvc2l0b3J5CisJICoKKwkgKiBAcGFyYW0gcmVwbworCSAqICAgICAgICAgICAgcmVwb3NpdG9yeQorCSAqIEByZXR1cm4gdGhlIHBhcnNlZCBBYmJyZXZDb25maWcKKwkgKiBAdGhyb3dzIEludmFsaWRDb25maWd1cmF0aW9uRXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdmFsdWUgb2YgY29yZS5hYmJyZXYgaXMgaW52YWxpZAorCSAqLworCXB1YmxpYyBzdGF0aWMgQWJicmV2Q29uZmlnIHBhcnNlRnJvbUNvbmZpZyhSZXBvc2l0b3J5IHJlcG8pCisJCQl0aHJvd3MgSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24geworCQlDb25maWcgY29uZmlnID0gcmVwby5nZXRDb25maWcoKTsKKwkJU3RyaW5nIHZhbHVlID0gY29uZmlnLmdldFN0cmluZyhDb25maWdDb25zdGFudHMuQ09ORklHX0NPUkVfU0VDVElPTiwKKwkJCQludWxsLCBDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BQkJSRVYpOworCQlpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZS5lcXVhbHNJZ25vcmVDYXNlKFZBTFVFX0FVVE8pKSB7CisJCQlyZXR1cm4gYXV0byhyZXBvKTsKKwkJfQorCQlpZiAodmFsdWUuZXF1YWxzSWdub3JlQ2FzZShWQUxVRV9OTykpIHsKKwkJCXJldHVybiBOTzsKKwkJfQorCQl0cnkgeworCQkJaW50IGxlbiA9IGNvbmZpZy5nZXRJbnRJblJhbmdlKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQ09SRV9TRUNUSU9OLAorCQkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9BQkJSRVYsIE1JTl9BQkJSRVYsCisJCQkJCUNvbnN0YW50cy5PQkpFQ1RfSURfU1RSSU5HX0xFTkdUSCwgVU5TRVRfSU5UKTsKKwkJCWlmIChsZW4gPT0gVU5TRVRfSU5UKSB7CisJCQkJLy8gVW5zZXQgd2FzIGNoZWNrZWQgYWJvdmUuIElmIHdlIGdldCBVTlNFVF9JTlQgaGVyZSwgdGhlbgorCQkJCS8vIGVpdGhlciB0aGUgdmFsdWUgd2FzIFVOU0VUX0lOVCwgb3IgaXQgd2FzIGFuIGludmFsaWQgdmFsdWUKKwkJCQkvLyAobm90IGFuIGludGVnZXIsIG9yIG91dCBvZiByYW5nZSksIGFuZCBFR2l0J3MKKwkJCQkvLyBSZXBvcnRpbmdUeXBlZEdldHRlciBjYXVnaHQgdGhlIGV4Y2VwdGlvbiBhbmQgaGFzIGxvZ2dlZCBhCisJCQkJLy8gd2FybmluZy4gSW4gZWl0aGVyIGNhc2Ugd2Ugc2hvdWxkIGZhbGwgYmFjayB0byBzb21lIHNhbmUKKwkJCQkvLyBkZWZhdWx0LgorCQkJCWxlbiA9IE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSDsKKwkJCX0KKwkJCXJldHVybiBuZXcgQWJicmV2Q29uZmlnKGxlbik7CisJCX0gY2F0Y2ggKElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBlKSB7CisJCQl0aHJvdyBuZXcgSW52YWxpZENvbmZpZ3VyYXRpb25FeGNlcHRpb24oTWVzc2FnZUZvcm1hdAorCQkJCQkuZm9ybWF0KEpHaXRUZXh0LmdldCgpLmludmFsaWRDb3JlQWJicmV2LCB2YWx1ZSksIGUpOworCQl9CisJfQorCisJLyoqCisJICogQW4gYXBwcm9wcmlhdGUgdmFsdWUgaXMgY29tcHV0ZWQgYmFzZWQgb24gdGhlIGFwcHJveGltYXRlIG51bWJlciBvZgorCSAqIHBhY2tlZCBvYmplY3RzIGluIGEgcmVwb3NpdG9yeSwgd2hpY2ggaG9wZWZ1bGx5IGlzIGVub3VnaCBmb3IgYWJicmV2aWF0ZWQKKwkgKiBvYmplY3QgbmFtZXMgdG8gc3RheSB1bmlxdWUgZm9yIHNvbWUgdGltZS4KKwkgKgorCSAqIEBwYXJhbSByZXBvCisJICogQHJldHVybiBhcHByb3ByaWF0ZSB2YWx1ZSBjb21wdXRlZCBiYXNlZCBvbiB0aGUgYXBwcm94aW1hdGUgbnVtYmVyIG9mCisJICogICAgICAgICBwYWNrZWQgb2JqZWN0cyBpbiBhIHJlcG9zaXRvcnkKKwkgKi8KKwlwcml2YXRlIHN0YXRpYyBBYmJyZXZDb25maWcgYXV0byhSZXBvc2l0b3J5IHJlcG8pIHsKKwkJbG9uZyBjb3VudCA9IHJlcG8uZ2V0T2JqZWN0RGF0YWJhc2UoKS5nZXRBcHByb3hpbWF0ZU9iamVjdENvdW50KCk7CisJCWlmIChjb3VudCA9PSAtMSkgeworCQkJcmV0dXJuIG5ldyBBYmJyZXZDb25maWcoT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKTsKKwkJfQorCQkvLyBmaW5kIG1zYiwgcm91bmQgdG8gbmV4dCBwb3dlciBvZiAyCisJCWludCBsZW4gPSA2MyAtIExvbmcubnVtYmVyT2ZMZWFkaW5nWmVyb3MoY291bnQpICsgMTsKKwkJLy8gV2l0aCB0aGUgb3JkZXIgb2YgMl5sZW4gb2JqZWN0cywgd2UgZXhwZWN0IGEgY29sbGlzaW9uIGF0CisJCS8vIDJeKGxlbi8yKS4gQnV0IHdlIGFsc28gY2FyZSBhYm91dCBoZXggY2hhcnMsIG5vdCBiaXRzLCBhbmQKKwkJLy8gdGhlcmUgYXJlIDQgYml0cyBwZXIgaGV4LiBTbyBhbGwgdG9nZXRoZXIgd2UgbmVlZCB0byBkaXZpZGUKKwkJLy8gYnkgMjsgYnV0IHdlIGFsc28gd2FudCB0byByb3VuZCBvZGQgbnVtYmVycyB1cCwgaGVuY2UgYWRkaW5nCisJCS8vIG9uZSBiZWZvcmUgZGl2aWRpbmcuCisJCWxlbiA9IChsZW4gKyAxKSAvIDI7CisJCS8vIGZvciBzbWFsbCByZXBvcyB1c2UgYXQgbGVhc3QgZmFsbGJhY2sgbGVuZ3RoCisJCXJldHVybiBuZXcgQWJicmV2Q29uZmlnKE1hdGgubWF4KGxlbiwgT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKSk7CisJfQorCisJLyoqCisJICogQWxsIG90aGVyIHBvc3NpYmxlIGFiYnJldmlhdGlvbiBsZW5ndGhzLiBWYWxpZCByYW5nZSA0IHRvIG51bWJlciBvZgorCSAqIGhleC1kaWdpdHMgb2YgYW4gdW5hYmJyZXZpYXRlZCBvYmplY3QgaWQgKDQwIGZvciBTSEExIG9iamVjdCBpZHMsIGpnaXQKKwkgKiBkb2Vzbid0IHN1cHBvcnQgU0hBMjU2IHlldCkuCisJICovCisJcHJpdmF0ZSBpbnQgYWJicmV2OworCisJLyoqCisJICogQHBhcmFtIGFiYnJldgorCSAqLworCXByaXZhdGUgQWJicmV2Q29uZmlnKGludCBhYmJyZXYpIHsKKwkJdGhpcy5hYmJyZXYgPSBjYXBBYmJyZXYoYWJicmV2KTsKKwl9CisKKwkvKioKKwkgKiBHZXQgdGhlIGNvbmZpZ3VyZWQgYWJicmV2aWF0aW9uIGxlbmd0aCBmb3Igb2JqZWN0IGlkcy4KKwkgKgorCSAqIEByZXR1cm4gdGhlIGNvbmZpZ3VyZWQgYWJicmV2aWF0aW9uIGxlbmd0aCBmb3Igb2JqZWN0IGlkcworCSAqLworCXB1YmxpYyBpbnQgZ2V0KCkgeworCQlyZXR1cm4gYWJicmV2OworCX0KKworCUBPdmVycmlkZQorCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7CisJCXJldHVybiBJbnRlZ2VyLnRvU3RyaW5nKGFiYnJldik7CisJfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0JyYW5jaENvbmZpZy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQnJhbmNoQ29uZmlnLmphdmEKaW5kZXggNmRhNmYxMi4uYWE2MTNkMCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQnJhbmNoQ29uZmlnLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQnJhbmNoQ29uZmlnLmphdmEKQEAgLTEzOCw2ICsxMzgsMTggQEAgcHVibGljIFN0cmluZyBnZXRSZW1vdGUoKSB7CiAJfQogCiAJLyoqCisJICogR2V0IHRoZSByZW1vdGUgdGhpcyBicmFuY2ggaXMgY29uZmlndXJlZCB0byBwdXNoIHRvLgorCSAqCisJICogQHJldHVybiB0aGUgcmVtb3RlIHRoaXMgYnJhbmNoIGlzIGNvbmZpZ3VyZWQgdG8gcHVzaCB0bywgb3Ige0Bjb2RlIG51bGx9CisJICogICAgICAgICBpZiBub3QgZGVmaW5lZAorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFB1c2hSZW1vdGUoKSB7CisJCXJldHVybiBjb25maWcuZ2V0U3RyaW5nKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfQlJBTkNIX1NFQ1RJT04sCisJCQkJYnJhbmNoTmFtZSwgQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19LRVlfUFVTSF9SRU1PVEUpOworCX0KKworCS8qKgogCSAqIEdldCB0aGUgbmFtZSBvZiB0aGUgdXBzdHJlYW0gYnJhbmNoIGFzIGl0IGlzIGNhbGxlZCBvbiB0aGUgcmVtb3RlCiAJICoKIAkgKiBAcmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB1cHN0cmVhbSBicmFuY2ggYXMgaXQgaXMgY2FsbGVkIG9uIHRoZSByZW1vdGUsIG9yCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db21taXRDb25maWcuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbW1pdENvbmZpZy5qYXZhCmluZGV4IDIyZTFmOTguLjU1Y2MwMjYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbW1pdENvbmZpZy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbW1pdENvbmZpZy5qYXZhCkBAIC0xOCwxMSArMTgsMTMgQEAKIGltcG9ydCBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHM7CiBpbXBvcnQgamF2YS5uaW8uY2hhcnNldC5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb247CiBpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLkxvY2FsZTsKIAogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTm9uTnVsbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk51bGxhYmxlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLkNvbmZpZ0ludmFsaWRFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWcuQ29uZmlnRW51bTsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWcuU2VjdGlvblBhcnNlcjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuRlM7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLklPOwpAQCAtMzQsMjIgKzM2LDc2IEBACiAgKiBAc2luY2UgNS4xMwogICovCiBwdWJsaWMgY2xhc3MgQ29tbWl0Q29uZmlnIHsKKwogCS8qKgogCSAqIEtleSBmb3Ige0BsaW5rIENvbmZpZyNnZXQoU2VjdGlvblBhcnNlcil9LgogCSAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgQ29uZmlnLlNlY3Rpb25QYXJzZXI8Q29tbWl0Q29uZmlnPiBLRVkgPSBDb21taXRDb25maWc6Om5ldzsKIAorCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBDVVQgPSAiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSA+OCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7IC8vJE5PTi1OTFMtMSQKKworCS8qKgorCSAqIEhvdyB0byBjbGVhbiB1cCBjb21taXQgbWVzc2FnZXMgd2hlbiBjb21taXR0aW5nLgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBlbnVtIENsZWFudXBNb2RlIGltcGxlbWVudHMgQ29uZmlnRW51bSB7CisKKwkJLyoqCisJCSAqIHtAbGluayAjV0hJVEVTUEFDRX0sIGFkZGl0aW9uYWxseSByZW1vdmUgY29tbWVudCBsaW5lcy4KKwkJICovCisJCVNUUklQLAorCisJCS8qKgorCQkgKiBSZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBhbmQgbGVhZGluZyBhbmQgdHJhaWxpbmcgZW1wdHkgbGluZXM7CisJCSAqIGNvbGxhcHNlIG11bHRpcGxlIGVtcHR5IGxpbmVzIHRvIGEgc2luZ2xlIG9uZS4KKwkJICovCisJCVdISVRFU1BBQ0UsCisKKwkJLyoqCisJCSAqIE1ha2Ugbm8gY2hhbmdlcy4KKwkJICovCisJCVZFUkJBVElNLAorCisJCS8qKgorCQkgKiBPbWl0IGV2ZXJ5dGhpbmcgZnJvbSB0aGUgZmlyc3QgInNjaXNzb3IiIGxpbmUgb24sIHRoZW4gYXBwbHkKKwkJICoge0BsaW5rICNXSElURVNQQUNFfS4KKwkJICovCisJCVNDSVNTT1JTLAorCisJCS8qKgorCQkgKiBVc2Uge0BsaW5rICNTVFJJUH0gZm9yIHVzZXItZWRpdGVkIG1lc3NhZ2VzLCBvdGhlcndpc2UKKwkJICoge0BsaW5rICNXSElURVNQQUNFfSwgdW5sZXNzIG92ZXJyaWRkZW4gYnkgYSBnaXQgY29uZmlnIHNldHRpbmcgb3RoZXIKKwkJICogdGhhbiBERUZBVUxULgorCQkgKi8KKwkJREVGQVVMVDsKKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIFN0cmluZyB0b0NvbmZpZ1ZhbHVlKCkgeworCQkJcmV0dXJuIG5hbWUoKS50b0xvd2VyQ2FzZShMb2NhbGUuUk9PVCk7CisJCX0KKworCQlAT3ZlcnJpZGUKKwkJcHVibGljIGJvb2xlYW4gbWF0Y2hDb25maWdWYWx1ZShTdHJpbmcgaW4pIHsKKwkJCXJldHVybiB0b0NvbmZpZ1ZhbHVlKCkuZXF1YWxzKGluKTsKKwkJfQorCX0KKwogCXByaXZhdGUgZmluYWwgc3RhdGljIENoYXJzZXQgREVGQVVMVF9DT01NSVRfTUVTU0FHRV9FTkNPRElORyA9IFN0YW5kYXJkQ2hhcnNldHMuVVRGXzg7CiAKIAlwcml2YXRlIFN0cmluZyBpMThuQ29tbWl0RW5jb2Rpbmc7CiAKIAlwcml2YXRlIFN0cmluZyBjb21taXRUZW1wbGF0ZVBhdGg7CiAKKwlwcml2YXRlIENsZWFudXBNb2RlIGNsZWFudXBNb2RlOworCiAJcHJpdmF0ZSBDb21taXRDb25maWcoQ29uZmlnIHJjKSB7CiAJCWNvbW1pdFRlbXBsYXRlUGF0aCA9IHJjLmdldFN0cmluZyhDb25maWdDb25zdGFudHMuQ09ORklHX0NPTU1JVF9TRUNUSU9OLAogCQkJCW51bGwsIENvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX0NPTU1JVF9URU1QTEFURSk7CiAJCWkxOG5Db21taXRFbmNvZGluZyA9IHJjLmdldFN0cmluZyhDb25maWdDb25zdGFudHMuQ09ORklHX1NFQ1RJT05fSTE4TiwKIAkJCQludWxsLCBDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9DT01NSVRfRU5DT0RJTkcpOworCQljbGVhbnVwTW9kZSA9IHJjLmdldEVudW0oQ29uZmlnQ29uc3RhbnRzLkNPTkZJR19DT01NSVRfU0VDVElPTiwgbnVsbCwKKwkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9DTEVBTlVQLCBDbGVhbnVwTW9kZS5ERUZBVUxUKTsKIAl9CiAKIAkvKioKQEAgLTc1LDYgKzEzMSw0OCBAQCBwdWJsaWMgU3RyaW5nIGdldENvbW1pdEVuY29kaW5nKCkgewogCX0KIAogCS8qKgorCSAqIFJldHJpZXZlcyB0aGUge0BsaW5rIENsZWFudXBNb2RlfSBhcyBnaXZlbiBieSBnaXQgY29uZmlnCisJICoge0Bjb2RlIGNvbW1pdC5jbGVhbnVwfS4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHtAbGluayBDbGVhbnVwTW9kZX07IHtAbGluayBDbGVhbnVwTW9kZSNERUZBVUxUfSBpZiB0aGUgZ2l0CisJICogICAgICAgICBjb25maWcgaXMgbm90IHNldAorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlATm9uTnVsbAorCXB1YmxpYyBDbGVhbnVwTW9kZSBnZXRDbGVhbnVwTW9kZSgpIHsKKwkJcmV0dXJuIGNsZWFudXBNb2RlOworCX0KKworCS8qKgorCSAqIENvbXB1dGVzIGEgbm9uLWRlZmF1bHQge0BsaW5rIENsZWFudXBNb2RlfSBmcm9tIHRoZSBnaXZlbiBtb2RlIGFuZCB0aGUKKwkgKiBnaXQgY29uZmlnLgorCSAqCisJICogQHBhcmFtIG1vZGUKKwkgKiAgICAgICAgICAgIHtAbGluayBDbGVhbnVwTW9kZX0gdG8gcmVzb2x2ZQorCSAqIEBwYXJhbSBkZWZhdWx0U3RyaXAKKwkgKiAgICAgICAgICAgIGlmIHtAY29kZSB0cnVlfSByZXR1cm4ge0BsaW5rIENsZWFudXBNb2RlI1NUUklQfSBpZiB0aGUgZ2l0CisJICogICAgICAgICAgICBjb25maWcgaXMgYWxzbyAiZGVmYXVsdCIsIG90aGVyd2lzZSByZXR1cm4KKwkgKiAgICAgICAgICAgIHtAbGluayBDbGVhbnVwTW9kZSNXSElURVNQQUNFfQorCSAqIEByZXR1cm4gdGhlIHtAY29kZSBtb2RlfSwgaWYgaXQgaXMgbm90IHtAbGluayBDbGVhbnVwTW9kZSNERUZBVUxUfSwKKwkgKiAgICAgICAgIG90aGVyd2lzZSB0aGUgcmVzb2x2ZWQgbW9kZSwgd2hpY2ggaXMgbmV2ZXIKKwkgKiAgICAgICAgIHtAbGluayBDbGVhbnVwTW9kZSNERUZBVUxUfQorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlATm9uTnVsbAorCXB1YmxpYyBDbGVhbnVwTW9kZSByZXNvbHZlKEBOb25OdWxsIENsZWFudXBNb2RlIG1vZGUsCisJCQlib29sZWFuIGRlZmF1bHRTdHJpcCkgeworCQlpZiAoQ2xlYW51cE1vZGUuREVGQVVMVCA9PSBtb2RlKSB7CisJCQlDbGVhbnVwTW9kZSBkZWZhdWx0TW9kZSA9IGdldENsZWFudXBNb2RlKCk7CisJCQlpZiAoQ2xlYW51cE1vZGUuREVGQVVMVCA9PSBkZWZhdWx0TW9kZSkgeworCQkJCXJldHVybiBkZWZhdWx0U3RyaXAgPyBDbGVhbnVwTW9kZS5TVFJJUAorCQkJCQkJOiBDbGVhbnVwTW9kZS5XSElURVNQQUNFOworCQkJfQorCQkJcmV0dXJuIGRlZmF1bHRNb2RlOworCQl9CisJCXJldHVybiBtb2RlOworCX0KKworCS8qKgogCSAqIEdldCB0aGUgY29udGVudCB0byB0aGUgY29tbWl0IHRlbXBsYXRlIGFzIGRlZmluZWQgaW4KIAkgKiB7QGNvZGUgY29tbWl0LnRlbXBsYXRlfS4gSWYgbm8ge0Bjb2RlIGkxOG4uY29tbWl0RW5jb2Rpbmd9IGlzIHNwZWNpZmllZCwKIAkgKiBVVEYtOCBmYWxsYmFjayBpcyB1c2VkLgpAQCAtMTM1LDQgKzIzMyw4NiBAQCBwcml2YXRlIENoYXJzZXQgZ2V0RW5jb2RpbmcoKSB0aHJvd3MgQ29uZmlnSW52YWxpZEV4Y2VwdGlvbiB7CiAKIAkJcmV0dXJuIGNvbW1pdE1lc3NhZ2VFbmNvZGluZzsKIAl9CisKKwkvKioKKwkgKiBQcm9jZXNzZXMgYSB0ZXh0IGFjY29yZGluZyB0byB0aGUgZ2l2ZW4ge0BsaW5rIENsZWFudXBNb2RlfS4KKwkgKgorCSAqIEBwYXJhbSB0ZXh0CisJICogICAgICAgICAgICB0ZXh0IHRvIHByb2Nlc3MKKwkgKiBAcGFyYW0gbW9kZQorCSAqICAgICAgICAgICAge0BsaW5rIENsZWFudXBNb2RlfSB0byB1c2UKKwkgKiBAcGFyYW0gY29tbWVudENoYXIKKwkgKiAgICAgICAgICAgIGNvbW1lbnQgY2hhcmFjdGVyIChub3JtYWxseSB7QGNvZGUgI30pIHRvIHVzZSBpZiB7QGNvZGUgbW9kZX0KKwkgKiAgICAgICAgICAgIGlzIHtAbGluayBDbGVhbnVwTW9kZSNTVFJJUH0gb3Ige0BsaW5rIENsZWFudXBNb2RlI1NDSVNTT1JTfQorCSAqIEByZXR1cm4gdGhlIHByb2Nlc3NlZCB0ZXh0CisJICogQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KKwkgKiAgICAgICAgICAgICBpZiB7QGNvZGUgbW9kZX0gaXMge0BsaW5rIENsZWFudXBNb2RlI0RFRkFVTFR9ICh1c2UKKwkgKiAgICAgICAgICAgICB7QGxpbmsgI3Jlc29sdmUoQ2xlYW51cE1vZGUsIGJvb2xlYW4pfSBmaXJzdCkKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBTdHJpbmcgY2xlYW5UZXh0KEBOb25OdWxsIFN0cmluZyB0ZXh0LAorCQkJQE5vbk51bGwgQ2xlYW51cE1vZGUgbW9kZSwgY2hhciBjb21tZW50Q2hhcikgeworCQlTdHJpbmcgdG9Qcm9jZXNzID0gdGV4dDsKKwkJYm9vbGVhbiBzdHJpcCA9IGZhbHNlOworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBWRVJCQVRJTToKKwkJCXJldHVybiB0ZXh0OworCQljYXNlIFNDSVNTT1JTOgorCQkJU3RyaW5nIGN1dCA9IGNvbW1lbnRDaGFyICsgQ1VUOworCQkJaWYgKHRleHQuc3RhcnRzV2l0aChjdXQpKSB7CisJCQkJcmV0dXJuICIiOyAvLyROT04tTkxTLTEkCisJCQl9CisJCQlpbnQgY3V0UG9zID0gdGV4dC5pbmRleE9mKCdcbicgKyBjdXQpOworCQkJaWYgKGN1dFBvcyA+PSAwKSB7CisJCQkJdG9Qcm9jZXNzID0gdGV4dC5zdWJzdHJpbmcoMCwgY3V0UG9zICsgMSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTVFJJUDoKKwkJCXN0cmlwID0gdHJ1ZTsKKwkJCWJyZWFrOworCQljYXNlIFdISVRFU1BBQ0U6CisJCQlicmVhazsKKwkJY2FzZSBERUZBVUxUOgorCQlkZWZhdWx0OgorCQkJLy8gSW50ZXJuYWwgZXJyb3I7IG5vIHRyYW5zbGF0aW9uCisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJJbnZhbGlkIGNsZWFuLXVwIG1vZGUgIiArIG1vZGUpOyAvLyROT04tTkxTLTEkCisJCX0KKwkJLy8gV0hJVEVTUEFDRQorCQlTdHJpbmdCdWlsZGVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CisJCWJvb2xlYW4gbGFzdFdhc0VtcHR5ID0gdHJ1ZTsKKwkJZm9yIChTdHJpbmcgbGluZSA6IHRvUHJvY2Vzcy5zcGxpdCgiXG4iKSkgeyAvLyROT04tTkxTLTEkCisJCQlsaW5lID0gbGluZS5zdHJpcFRyYWlsaW5nKCk7CisJCQlpZiAobGluZS5pc0VtcHR5KCkpIHsKKwkJCQlpZiAoIWxhc3RXYXNFbXB0eSkgeworCQkJCQlyZXN1bHQuYXBwZW5kKCdcbicpOworCQkJCQlsYXN0V2FzRW1wdHkgPSB0cnVlOworCQkJCX0KKwkJCX0gZWxzZSBpZiAoIXN0cmlwIHx8ICFpc0NvbW1lbnQobGluZSwgY29tbWVudENoYXIpKSB7CisJCQkJbGFzdFdhc0VtcHR5ID0gZmFsc2U7CisJCQkJcmVzdWx0LmFwcGVuZChsaW5lKS5hcHBlbmQoJ1xuJyk7CisJCQl9CisJCX0KKwkJaW50IGJ1ZmZlclNpemUgPSByZXN1bHQubGVuZ3RoKCk7CisJCWlmIChsYXN0V2FzRW1wdHkgJiYgYnVmZmVyU2l6ZSA+IDApIHsKKwkJCWJ1ZmZlclNpemUtLTsKKwkJCXJlc3VsdC5zZXRMZW5ndGgoYnVmZmVyU2l6ZSk7CisJCX0KKwkJaWYgKGJ1ZmZlclNpemUgPiAwICYmICF0b1Byb2Nlc3MuZW5kc1dpdGgoIlxuIikpIHsgLy8kTk9OLU5MUy0xJAorCQkJaWYgKHJlc3VsdC5jaGFyQXQoYnVmZmVyU2l6ZSAtIDEpID09ICdcbicpIHsKKwkJCQlyZXN1bHQuc2V0TGVuZ3RoKGJ1ZmZlclNpemUgLSAxKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CisJfQorCisJcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBpc0NvbW1lbnQoU3RyaW5nIHRleHQsIGNoYXIgY29tbWVudENoYXIpIHsKKwkJaW50IGxlbiA9IHRleHQubGVuZ3RoKCk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCWNoYXIgY2ggPSB0ZXh0LmNoYXJBdChpKTsKKwkJCWlmICghQ2hhcmFjdGVyLmlzV2hpdGVzcGFjZShjaCkpIHsKKwkJCQlyZXR1cm4gY2ggPT0gY29tbWVudENoYXI7CisJCQl9CisJCX0KKwkJcmV0dXJuIGZhbHNlOworCX0KIH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db25maWcuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZy5qYXZhCmluZGV4IDFjZTNlMzEuLmQxZDY2ZDIgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZy5qYXZhCkBAIC0yNzgsNiArMjc4LDU0IEBAIHB1YmxpYyBpbnQgZ2V0SW50KGZpbmFsIFN0cmluZyBzZWN0aW9uLCBTdHJpbmcgc3Vic2VjdGlvbiwKIAl9CiAKIAkvKioKKwkgKiBPYnRhaW4gYW4gaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uIHdoaWNoIG11c3QgYmUgaW5zaWRlIGdpdmVuCisJICogcmFuZ2UuCisJICoKKwkgKiBAcGFyYW0gc2VjdGlvbgorCSAqICAgICAgICAgICAgc2VjdGlvbiB0aGUga2V5IGlzIGdyb3VwZWQgd2l0aGluLgorCSAqIEBwYXJhbSBuYW1lCisJICogICAgICAgICAgICBuYW1lIG9mIHRoZSBrZXkgdG8gZ2V0LgorCSAqIEBwYXJhbSBtaW5WYWx1ZQorCSAqICAgICAgICAgICAgbWluaW11bSB2YWx1ZQorCSAqIEBwYXJhbSBtYXhWYWx1ZQorCSAqICAgICAgICAgICAgbWF4aW11bSB2YWx1ZQorCSAqIEBwYXJhbSBkZWZhdWx0VmFsdWUKKwkgKiAgICAgICAgICAgIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIG5vIHZhbHVlIHdhcyBwcmVzZW50LgorCSAqIEByZXR1cm4gYW4gaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uLCBvciBkZWZhdWx0VmFsdWUuCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBpbnQgZ2V0SW50SW5SYW5nZShTdHJpbmcgc2VjdGlvbiwgU3RyaW5nIG5hbWUsIGludCBtaW5WYWx1ZSwKKwkJCWludCBtYXhWYWx1ZSwgaW50IGRlZmF1bHRWYWx1ZSkgeworCQlyZXR1cm4gdHlwZWRHZXR0ZXIuZ2V0SW50SW5SYW5nZSh0aGlzLCBzZWN0aW9uLCBudWxsLCBuYW1lLCBtaW5WYWx1ZSwKKwkJCQltYXhWYWx1ZSwgZGVmYXVsdFZhbHVlKTsKKwl9CisKKwkvKioKKwkgKiBPYnRhaW4gYW4gaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uIHdoaWNoIG11c3QgYmUgaW5zaWRlIGdpdmVuCisJICogcmFuZ2UuCisJICoKKwkgKiBAcGFyYW0gc2VjdGlvbgorCSAqICAgICAgICAgICAgc2VjdGlvbiB0aGUga2V5IGlzIGdyb3VwZWQgd2l0aGluLgorCSAqIEBwYXJhbSBzdWJzZWN0aW9uCisJICogICAgICAgICAgICBzdWJzZWN0aW9uIG5hbWUsIHN1Y2ggYSByZW1vdGUgb3IgYnJhbmNoIG5hbWUuCisJICogQHBhcmFtIG5hbWUKKwkgKiAgICAgICAgICAgIG5hbWUgb2YgdGhlIGtleSB0byBnZXQuCisJICogQHBhcmFtIG1pblZhbHVlCisJICogICAgICAgICAgICBtaW5pbXVtIHZhbHVlCisJICogQHBhcmFtIG1heFZhbHVlCisJICogICAgICAgICAgICBtYXhpbXVtIHZhbHVlCisJICogQHBhcmFtIGRlZmF1bHRWYWx1ZQorCSAqICAgICAgICAgICAgZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4gaWYgbm8gdmFsdWUgd2FzIHByZXNlbnQuCisJICogQHJldHVybiBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24sIG9yIGRlZmF1bHRWYWx1ZS4KKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIGludCBnZXRJbnRJblJhbmdlKFN0cmluZyBzZWN0aW9uLCBTdHJpbmcgc3Vic2VjdGlvbiwgU3RyaW5nIG5hbWUsCisJCQlpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSwgaW50IGRlZmF1bHRWYWx1ZSkgeworCQlyZXR1cm4gdHlwZWRHZXR0ZXIuZ2V0SW50SW5SYW5nZSh0aGlzLCBzZWN0aW9uLCBzdWJzZWN0aW9uLCBuYW1lLAorCQkJCW1pblZhbHVlLCBtYXhWYWx1ZSwgZGVmYXVsdFZhbHVlKTsKKwl9CisKKwkvKioKIAkgKiBPYnRhaW4gYW4gaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uLgogCSAqCiAJICogQHBhcmFtIHNlY3Rpb24KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbmZpZ0NvbnN0YW50cy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnQ29uc3RhbnRzLmphdmEKaW5kZXggNmY3NjMyNi4uNDc1NTY5MyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnQ29uc3RhbnRzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uZmlnQ29uc3RhbnRzLmphdmEKQEAgLTEsNyArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBNYXRoaWFzIEtpbnpsZXIgPG1hdGhpYXMua2luemxlckBzYXAuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDEwLCBDaHJpcyBBbmlzemN6eWsgPGNhbmlzemN6eWtAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyLCAyMDIwLCBSb2JpbiBSb3NlbmJlcmcgYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMsIFJvYmluIFJvc2VuYmVyZworICogQ29weXJpZ2h0IChDKSAyMDE4LTIwMjEsIEFuZHJlIEJvc3NlcnQgPGFuZHJlLmJvc3NlcnRAc2llbWVucy5jb20+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTI5LDYgKzMwLDQ4IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDb25maWdDb25zdGFudHMgewogCS8qKiBUaGUgImRpZmYiIHNlY3Rpb24gKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfRElGRl9TRUNUSU9OID0gImRpZmYiOwogCisJLyoqCisJICogVGhlICJ0b29sIiBrZXkgd2l0aGluICJkaWZmIiBzZWN0aW9uCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9UT09MID0gInRvb2wiOworCisJLyoqCisJICogVGhlICJndWl0b29sIiBrZXkgd2l0aGluICJkaWZmIiBzZWN0aW9uCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9HVUlUT09MID0gImd1aXRvb2wiOworCisJLyoqCisJICogVGhlICJkaWZmdG9vbCIgc2VjdGlvbgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19ESUZGVE9PTF9TRUNUSU9OID0gImRpZmZ0b29sIjsKKworCS8qKgorCSAqIFRoZSAicHJvbXB0IiBrZXkgd2l0aGluICJkaWZmdG9vbCIgc2VjdGlvbgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfUFJPTVBUID0gInByb21wdCI7CisKKwkvKioKKwkgKiBUaGUgInRydXN0RXhpdENvZGUiIGtleSB3aXRoaW4gImRpZmZ0b29sIiBzZWN0aW9uCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9UUlVTVF9FWElUX0NPREUgPSAidHJ1c3RFeGl0Q29kZSI7CisKKwkvKioKKwkgKiBUaGUgImNtZCIga2V5IHdpdGhpbiAiZGlmZnRvb2wuKi4iIHNlY3Rpb24KKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX0NNRCA9ICJjbWQiOworCiAJLyoqIFRoZSAiZGZzIiBzZWN0aW9uICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0RGU19TRUNUSU9OID0gImRmcyI7CiAKQEAgLTEzOSw2ICsxODIsMTMgQEAgcHVibGljIGZpbmFsIGNsYXNzIENvbmZpZ0NvbnN0YW50cyB7CiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX1RBR19TRUNUSU9OID0gInRhZyI7CiAKIAkvKioKKwkgKiBUaGUgImNsZWFudXAiIGtleQorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfQ0xFQU5VUCA9ICJjbGVhbnVwIjsKKworCS8qKgogCSAqIFRoZSAiZ3BnU2lnbiIga2V5CiAJICoKIAkgKiBAc2luY2UgNS4yCkBAIC0yNzksNiArMzI5LDIwIEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDb25maWdDb25zdGFudHMgewogCS8qKiBUaGUgInJlbW90ZSIga2V5ICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9SRU1PVEUgPSAicmVtb3RlIjsKIAorCS8qKgorCSAqIFRoZSAicHVzaFJlbW90ZSIga2V5LgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfUFVTSF9SRU1PVEUgPSAicHVzaFJlbW90ZSI7CisKKwkvKioKKwkgKiBUaGUgInB1c2hEZWZhdWx0IiBrZXkuCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX0tFWV9QVVNIX0RFRkFVTFQgPSAicHVzaERlZmF1bHQiOworCiAJLyoqIFRoZSAibWVyZ2UiIGtleSAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfTUVSR0UgPSAibWVyZ2UiOwogCkBAIC03NzEsNCArODM1LDMxIEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDb25maWdDb25zdGFudHMgewogCSAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfU0VBUkNIX0ZPUl9SRVVTRV9USU1FT1VUID0gInNlYXJjaGZvcnJldXNldGltZW91dCI7CiAKKwkvKioKKwkgKiBUaGUgInB1c2giIHNlY3Rpb24uCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09ORklHX1BVU0hfU0VDVElPTiA9ICJwdXNoIjsKKworCS8qKgorCSAqIFRoZSAiZGVmYXVsdCIga2V5LgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfREVGQVVMVCA9ICJkZWZhdWx0IjsKKworCS8qKgorCSAqIFRoZSAiYWJicmV2IiBrZXkKKwkgKgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05GSUdfS0VZX0FCQlJFViA9ICJhYmJyZXYiOworCisJLyoqCisJICogVGhlICJ0cnVzdFBhY2tlZFJlZnNTdGF0IiBrZXkKKwkgKgorCSAqIEBzaW5jZSA2LjEuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTkZJR19LRVlfVFJVU1RfUEFDS0VEX1JFRlNfU1RBVCA9ICJ0cnVzdFBhY2tlZFJlZnNTdGF0IjsKIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvbnN0YW50cy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uc3RhbnRzLmphdmEKaW5kZXggOTIzNjdlYi4uY2YyZTY5ZCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uc3RhbnRzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29uc3RhbnRzLmphdmEKQEAgLTQ4LDYgKzQ4LDE1IEBAIHB1YmxpYyBmaW5hbCBjbGFzcyBDb25zdGFudHMgewogCSAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9CSkVDVF9JRF9TVFJJTkdfTEVOR1RIID0gT0JKRUNUX0lEX0xFTkdUSCAqIDI7CiAKKwkvKioKKwkgKiBUaGUgaGlzdG9yaWMgbGVuZ3RoIG9mIGFuIGFiYnJldmlhdGVkIEdpdCBvYmplY3QgaGFzaCBzdHJpbmcuIEdpdCAyLjExCisJICogY2hhbmdlZCB0aGlzIHN0YXRpYyBudW1iZXIgdG8gYSBkeW5hbWljYWxseSBjYWxjdWxhdGVkIG9uZSB0aGF0IHNjYWxlcworCSAqIGFzIHRoZSByZXBvc2l0b3J5IGdyb3dzLgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSCA9IDc7CisKIAkvKiogU3BlY2lhbCBuYW1lIGZvciB0aGUgIkhFQUQiIHN5bWJvbGljLXJlZi4gKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBIRUFEID0gIkhFQUQiOwogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db3JlQ29uZmlnLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9Db3JlQ29uZmlnLmphdmEKaW5kZXggZjIzYzZlMC4uZmM4MmE1ZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvQ29yZUNvbmZpZy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0NvcmVDb25maWcuamF2YQpAQCAtMTE2LDYgKzExNiwyNyBAQCBwdWJsaWMgZW51bSBMb2dSZWZVcGRhdGVzIHsKIAkJQUxXQVlTCiAJfQogCisJLyoqCisJICogUGVybWlzc2libGUgdmFsdWVzIGZvciB7QGNvZGUgY29yZS50cnVzdFBhY2tlZFJlZnNTdGF0fS4KKwkgKgorCSAqIEBzaW5jZSA2LjEuMQorCSAqLworCXB1YmxpYyBlbnVtIFRydXN0UGFja2VkUmVmc1N0YXQgeworCQkvKiogRG8gbm90IHRydXN0IGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgcGFja2VkLXJlZnMgZmlsZS4gKi8KKwkJTkVWRVIsCisKKwkJLyoqIFRydXN0IGZpbGUgYXR0cmlidXRlcyBvZiB0aGUgcGFja2VkLXJlZnMgZmlsZS4gKi8KKwkJQUxXQVlTLAorCisJCS8qKiBPcGVuIGFuZCBjbG9zZSB0aGUgcGFja2VkLXJlZnMgZmlsZSB0byByZWZyZXNoIGl0cyBmaWxlIGF0dHJpYnV0ZXMKKwkJICogYW5kIHRoZW4gdHJ1c3QgaXQuICovCisJCUFGVEVSX09QRU4sCisKKwkJLyoqIHtAY29kZSBjb3JlLnRydXN0UGFja2VkUmVmc1N0YXR9IGRlZmF1bHRzIHRvIHRoaXMgd2hlbiBpdCBpcworCQkgKiBub3Qgc2V0ICovCisJCVVOU0VUCisJfQorCiAJcHJpdmF0ZSBmaW5hbCBpbnQgY29tcHJlc3Npb247CiAKIAlwcml2YXRlIGZpbmFsIGludCBwYWNrSW5kZXhWZXJzaW9uOwpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvRGVmYXVsdFR5cGVkQ29uZmlnR2V0dGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9EZWZhdWx0VHlwZWRDb25maWdHZXR0ZXIuamF2YQppbmRleCA5Zjk2YmNlLi44NjQwOTQwIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9EZWZhdWx0VHlwZWRDb25maWdHZXR0ZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9EZWZhdWx0VHlwZWRDb25maWdHZXR0ZXIuamF2YQpAQCAtMTIwLDYgKzEyMCwyNiBAQCBwdWJsaWMgaW50IGdldEludChDb25maWcgY29uZmlnLCBTdHJpbmcgc2VjdGlvbiwgU3RyaW5nIHN1YnNlY3Rpb24sCiAKIAkvKioge0Bpbmhlcml0RG9jfSAqLwogCUBPdmVycmlkZQorCXB1YmxpYyBpbnQgZ2V0SW50SW5SYW5nZShDb25maWcgY29uZmlnLCBTdHJpbmcgc2VjdGlvbiwgU3RyaW5nIHN1YnNlY3Rpb24sCisJCQlTdHJpbmcgbmFtZSwgaW50IG1pblZhbHVlLCBpbnQgbWF4VmFsdWUsIGludCBkZWZhdWx0VmFsdWUpIHsKKwkJaW50IHZhbCA9IGdldEludChjb25maWcsIHNlY3Rpb24sIHN1YnNlY3Rpb24sIG5hbWUsIGRlZmF1bHRWYWx1ZSk7CisJCWlmICgodmFsID49IG1pblZhbHVlICYmIHZhbCA8PSBtYXhWYWx1ZSkgfHwgdmFsID09IFVOU0VUX0lOVCkgeworCQkJcmV0dXJuIHZhbDsKKwkJfQorCQlpZiAoc3Vic2VjdGlvbiA9PSBudWxsKSB7CisJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAorCQkJCQlKR2l0VGV4dC5nZXQoKS5pbnRlZ2VyVmFsdWVOb3RJblJhbmdlLCBzZWN0aW9uLCBuYW1lLAorCQkJCQlJbnRlZ2VyLnZhbHVlT2YodmFsKSwgSW50ZWdlci52YWx1ZU9mKG1pblZhbHVlKSwKKwkJCQkJSW50ZWdlci52YWx1ZU9mKG1heFZhbHVlKSkpOworCQl9CisJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJSkdpdFRleHQuZ2V0KCkuaW50ZWdlclZhbHVlTm90SW5SYW5nZVN1YlNlY3Rpb24sIHNlY3Rpb24sCisJCQkJc3Vic2VjdGlvbiwgbmFtZSwgSW50ZWdlci52YWx1ZU9mKHZhbCksCisJCQkJSW50ZWdlci52YWx1ZU9mKG1pblZhbHVlKSwgSW50ZWdlci52YWx1ZU9mKG1heFZhbHVlKSkpOworCX0KKworCS8qKiB7QGluaGVyaXREb2N9ICovCisJQE92ZXJyaWRlCiAJcHVibGljIGxvbmcgZ2V0TG9uZyhDb25maWcgY29uZmlnLCBTdHJpbmcgc2VjdGlvbiwgU3RyaW5nIHN1YnNlY3Rpb24sCiAJCQlTdHJpbmcgbmFtZSwgbG9uZyBkZWZhdWx0VmFsdWUpIHsKIAkJZmluYWwgU3RyaW5nIHN0ciA9IGNvbmZpZy5nZXRTdHJpbmcoc2VjdGlvbiwgc3Vic2VjdGlvbiwgbmFtZSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9JbmRleERpZmYuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0luZGV4RGlmZi5qYXZhCmluZGV4IDI4ZWE5MjcuLmRmOWZkNDcgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0luZGV4RGlmZi5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL0luZGV4RGlmZi5qYXZhCkBAIC01NjgsNiArNTY4LDkgQEAgcHVibGljIGJvb2xlYW4gZGlmZihQcm9ncmVzc01vbml0b3IgbW9uaXRvciwgaW50IGVzdFdvcmtUcmVlU2l6ZSwKIAkJaWYgKGlnbm9yZVN1Ym1vZHVsZU1vZGUgIT0gSWdub3JlU3VibW9kdWxlTW9kZS5BTEwpIHsKIAkJCXRyeSAoU3VibW9kdWxlV2FsayBzbXcgPSBuZXcgU3VibW9kdWxlV2FsayhyZXBvc2l0b3J5KSkgewogCQkJCXNtdy5zZXRUcmVlKG5ldyBEaXJDYWNoZUl0ZXJhdG9yKGRpckNhY2hlKSk7CisJCQkJaWYgKGZpbHRlciAhPSBudWxsKSB7CisJCQkJCXNtdy5zZXRGaWx0ZXIoZmlsdGVyKTsKKwkJCQl9CiAJCQkJc213LnNldEJ1aWxkZXJGYWN0b3J5KGZhY3RvcnkpOwogCQkJCXdoaWxlIChzbXcubmV4dCgpKSB7CiAJCQkJCUlnbm9yZVN1Ym1vZHVsZU1vZGUgbG9jYWxJZ25vcmVTdWJtb2R1bGVNb2RlID0gaWdub3JlU3VibW9kdWxlTW9kZTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL09iamVjdERhdGFiYXNlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9PYmplY3REYXRhYmFzZS5qYXZhCmluZGV4IDA0MjYyYzAuLjcwMDA5Y2IgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL09iamVjdERhdGFiYXNlLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvT2JqZWN0RGF0YWJhc2UuamF2YQpAQCAtMTU1LDQgKzE1NSwxNCBAQCBwdWJsaWMgT2JqZWN0TG9hZGVyIG9wZW4oQW55T2JqZWN0SWQgb2JqZWN0SWQsIGludCB0eXBlSGludCkKIAlwdWJsaWMgT2JqZWN0RGF0YWJhc2UgbmV3Q2FjaGVkRGF0YWJhc2UoKSB7CiAJCXJldHVybiB0aGlzOwogCX0KKworCS8qKgorCSAqIEdldCBhIHF1aWNrLCByb3VnaCBjb3VudCBvZiBvYmplY3RzIGluIHRoaXMgcmVwb3NpdG9yeS4gSWdub3JlcyBsb29zZQorCSAqIG9iamVjdHMuIFJldHVybnMge0Bjb2RlIC0xfSBpZiBhbiBleGNlcHRpb24gb2NjdXJzLgorCSAqCisJICogQHJldHVybiBxdWljaywgcm91Z2ggY291bnQgb2Ygb2JqZWN0cyBpbiB0aGlzIHJlcG9zaXRvcnksIHtAY29kZSAtMX0gaWYKKwkgKiAgICAgICAgIGFuIGV4Y2VwdGlvbiBvY2N1cnMKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIGFic3RyYWN0IGxvbmcgZ2V0QXBwcm94aW1hdGVPYmplY3RDb3VudCgpOwogfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvT2JqZWN0UmVhZGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9PYmplY3RSZWFkZXIuamF2YQppbmRleCBhMmM3MzgxLi4yNmMzZmY2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9PYmplY3RSZWFkZXIuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9PYmplY3RSZWFkZXIuamF2YQpAQCAtMTAsNiArMTAsOCBAQAogCiBwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGliOwogCitpbXBvcnQgc3RhdGljIG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50cy5PQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEg7CisKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwogaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLkNvbGxlY3Rpb247CkBAIC03Niw3ICs3OCw3IEBAIHB1YmxpYyBhYnN0cmFjdCBjbGFzcyBPYmplY3RSZWFkZXIgaW1wbGVtZW50cyBBdXRvQ2xvc2VhYmxlIHsKIAkgKi8KIAlwdWJsaWMgQWJicmV2aWF0ZWRPYmplY3RJZCBhYmJyZXZpYXRlKEFueU9iamVjdElkIG9iamVjdElkKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIGFiYnJldmlhdGUob2JqZWN0SWQsIDcpOworCQlyZXR1cm4gYWJicmV2aWF0ZShvYmplY3RJZCwgT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIKTsKIAl9CiAKIAkvKioKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL1BlcnNvbklkZW50LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9QZXJzb25JZGVudC5qYXZhCmluZGV4IDQyOGE2YjkuLjkzNzEwMjkgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL1BlcnNvbklkZW50LmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvUGVyc29uSWRlbnQuamF2YQpAQCAtMTQsNiArMTQsOCBAQAogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CiBpbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CitpbXBvcnQgamF2YS50aW1lLkluc3RhbnQ7CitpbXBvcnQgamF2YS50aW1lLlpvbmVJZDsKIGltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKIGltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwogaW1wb3J0IGphdmEudXRpbC5UaW1lWm9uZTsKQEAgLTIwNiw2ICsyMDgsMjAgQEAgcHVibGljIFBlcnNvbklkZW50KFBlcnNvbklkZW50IHBpLCBEYXRlIGFXaGVuKSB7CiAJfQogCiAJLyoqCisJICogQ29weSBhIHtAbGluayBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5QZXJzb25JZGVudH0sIGJ1dCBhbHRlciB0aGUgY2xvbmUncworCSAqIHRpbWUgc3RhbXAKKwkgKgorCSAqIEBwYXJhbSBwaQorCSAqICAgICAgICAgICAgb3JpZ2luYWwge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQubGliLlBlcnNvbklkZW50fQorCSAqIEBwYXJhbSBhV2hlbgorCSAqICAgICAgICAgICAgbG9jYWwgdGltZSBhcyBJbnN0YW50CisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBQZXJzb25JZGVudChQZXJzb25JZGVudCBwaSwgSW5zdGFudCBhV2hlbikgeworCQl0aGlzKHBpLmdldE5hbWUoKSwgcGkuZ2V0RW1haWxBZGRyZXNzKCksIGFXaGVuLnRvRXBvY2hNaWxsaSgpLCBwaS50ek9mZnNldCk7CisJfQorCisJLyoqCiAJICogQ29uc3RydWN0IGEgUGVyc29uSWRlbnQgZnJvbSBzaW1wbGUgZGF0YQogCSAqCiAJICogQHBhcmFtIGFOYW1lIGEge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9IG9iamVjdC4KQEAgLTIyMiw2ICsyMzgsMjcgQEAgcHVibGljIFBlcnNvbklkZW50KGZpbmFsIFN0cmluZyBhTmFtZSwgZmluYWwgU3RyaW5nIGFFbWFpbEFkZHJlc3MsCiAJfQogCiAJLyoqCisJICogQ29uc3RydWN0IGEgUGVyc29uSWRlbnQgZnJvbSBzaW1wbGUgZGF0YQorCSAqCisJICogQHBhcmFtIGFOYW1lCisJICogICAgICAgICAgICBhIHtAbGluayBqYXZhLmxhbmcuU3RyaW5nfSBvYmplY3QuCisJICogQHBhcmFtIGFFbWFpbEFkZHJlc3MKKwkgKiAgICAgICAgICAgIGEge0BsaW5rIGphdmEubGFuZy5TdHJpbmd9IG9iamVjdC4KKwkgKiBAcGFyYW0gYVdoZW4KKwkgKiAgICAgICAgICAgIGxvY2FsIHRpbWUgc3RhbXAKKwkgKiBAcGFyYW0gem9uZUlkCisJICogICAgICAgICAgICB0aW1lIHpvbmUgaWQKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIFBlcnNvbklkZW50KGZpbmFsIFN0cmluZyBhTmFtZSwgU3RyaW5nIGFFbWFpbEFkZHJlc3MsIEluc3RhbnQgYVdoZW4sCisJCQlab25lSWQgem9uZUlkKSB7CisJCXRoaXMoYU5hbWUsIGFFbWFpbEFkZHJlc3MsIGFXaGVuLnRvRXBvY2hNaWxsaSgpLAorCQkJCVRpbWVab25lLmdldFRpbWVab25lKHpvbmVJZCkKKwkJCQkJCS5nZXRPZmZzZXQoYVdoZW4KKwkJCQkudG9FcG9jaE1pbGxpKCkpIC8gKDYwICogMTAwMCkpOworCX0KKworCS8qKgogCSAqIENvcHkgYSBQZXJzb25JZGVudCwgYnV0IGFsdGVyIHRoZSBjbG9uZSdzIHRpbWUgc3RhbXAKIAkgKgogCSAqIEBwYXJhbSBwaQpAQCAtMzA0LDYgKzM0MSwxNiBAQCBwdWJsaWMgRGF0ZSBnZXRXaGVuKCkgewogCX0KIAogCS8qKgorCSAqIEdldCB3aGVuIGF0dHJpYnV0ZSBhcyBpbnN0YW50CisJICoKKwkgKiBAcmV0dXJuIHRpbWVzdGFtcAorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgSW5zdGFudCBnZXRXaGVuQXNJbnN0YW50KCkgeworCQlyZXR1cm4gSW5zdGFudC5vZkVwb2NoTWlsbGkod2hlbik7CisJfQorCisJLyoqCiAJICogR2V0IHRoaXMgcGVyc29uJ3MgZGVjbGFyZWQgdGltZSB6b25lCiAJICoKIAkgKiBAcmV0dXJuIHRoaXMgcGVyc29uJ3MgZGVjbGFyZWQgdGltZSB6b25lOyBudWxsIGlmIHRpbWUgem9uZSBpcyB1bmtub3duLgpAQCAtMzEzLDYgKzM2MCwxNiBAQCBwdWJsaWMgVGltZVpvbmUgZ2V0VGltZVpvbmUoKSB7CiAJfQogCiAJLyoqCisJICogR2V0IHRoZSB0aW1lIHpvbmUgaWQKKwkgKgorCSAqIEByZXR1cm4gdGhlIHRpbWUgem9uZSBpZAorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgWm9uZUlkIGdldFpvbmVJZCgpIHsKKwkJcmV0dXJuIGdldFRpbWVab25lKCkudG9ab25lSWQoKTsKKwl9CisKKwkvKioKIAkgKiBHZXQgdGhpcyBwZXJzb24ncyBkZWNsYXJlZCB0aW1lIHpvbmUgYXMgbWludXRlcyBlYXN0IG9mIFVUQy4KIAkgKgogCSAqIEByZXR1cm4gdGhpcyBwZXJzb24ncyBkZWNsYXJlZCB0aW1lIHpvbmUgYXMgbWludXRlcyBlYXN0IG9mIFVUQy4gSWYgdGhlCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9UeXBlZENvbmZpZ0dldHRlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9saWIvVHlwZWRDb25maWdHZXR0ZXIuamF2YQppbmRleCAwZjJmNmNmLi5jNGViOGYxIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9UeXBlZENvbmZpZ0dldHRlci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL1R5cGVkQ29uZmlnR2V0dGVyLmphdmEKQEAgLTI5LDYgKzI5LDEzIEBACiBwdWJsaWMgaW50ZXJmYWNlIFR5cGVkQ29uZmlnR2V0dGVyIHsKIAogCS8qKgorCSAqIFVzZSB7QGNvZGUgSW50ZWdlciNNSU5fVkFMVUV9IGFzIHVuc2V0IGludCB2YWx1ZQorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFVOU0VUX0lOVCA9IEludGVnZXIuTUlOX1ZBTFVFOworCisJLyoqCiAJICogR2V0IGEgYm9vbGVhbiB2YWx1ZSBmcm9tIGEgZ2l0IHtAbGluayBDb25maWd9LgogCSAqCiAJICogQHBhcmFtIGNvbmZpZwpAQCAtODcsNiArOTQsMzIgQEAgaW50IGdldEludChDb25maWcgY29uZmlnLCBTdHJpbmcgc2VjdGlvbiwgU3RyaW5nIHN1YnNlY3Rpb24sIFN0cmluZyBuYW1lLAogCQkJaW50IGRlZmF1bHRWYWx1ZSk7CiAKIAkvKioKKwkgKiBPYnRhaW4gYW4gaW50ZWdlciB2YWx1ZSBmcm9tIGEgZ2l0IHtAbGluayBDb25maWd9IHdoaWNoIG11c3QgYmUgaW4gZ2l2ZW4KKwkgKiByYW5nZS4KKwkgKgorCSAqIEBwYXJhbSBjb25maWcKKwkgKiAgICAgICAgICAgIHRvIGdldCB0aGUgdmFsdWUgZnJvbQorCSAqIEBwYXJhbSBzZWN0aW9uCisJICogICAgICAgICAgICBzZWN0aW9uIHRoZSBrZXkgaXMgZ3JvdXBlZCB3aXRoaW4uCisJICogQHBhcmFtIHN1YnNlY3Rpb24KKwkgKiAgICAgICAgICAgIHN1YnNlY3Rpb24gbmFtZSwgc3VjaCBhIHJlbW90ZSBvciBicmFuY2ggbmFtZS4KKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgbmFtZSBvZiB0aGUga2V5IHRvIGdldC4KKwkgKiBAcGFyYW0gbWluVmFsdWUKKwkgKiAgICAgICAgICAgIG1pbmltYWwgdmFsdWUKKwkgKiBAcGFyYW0gbWF4VmFsdWUKKwkgKiAgICAgICAgICAgIG1heGltdW0gdmFsdWUKKwkgKiBAcGFyYW0gZGVmYXVsdFZhbHVlCisJICogICAgICAgICAgICBkZWZhdWx0IHZhbHVlIHRvIHJldHVybiBpZiBubyB2YWx1ZSB3YXMgcHJlc2VudC4gVXNlCisJICogICAgICAgICAgICB7QGNvZGUgI1VOU0VUX0lOVH0gdG8gc2V0IHRoZSBkZWZhdWx0IHRvIHVuc2V0LgorCSAqIEByZXR1cm4gYW4gaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBjb25maWd1cmF0aW9uLCBvciBkZWZhdWx0VmFsdWUuCisJICogICAgICAgICB7QGNvZGUgI1VOU0VUX0lOVH0gaWYgdW5zZXQuCisJICogQHNpbmNlIDYuMQorCSAqLworCWludCBnZXRJbnRJblJhbmdlKENvbmZpZyBjb25maWcsIFN0cmluZyBzZWN0aW9uLCBTdHJpbmcgc3Vic2VjdGlvbiwKKwkJCVN0cmluZyBuYW1lLCBpbnQgbWluVmFsdWUsIGludCBtYXhWYWx1ZSwgaW50IGRlZmF1bHRWYWx1ZSk7CisKKwkvKioKIAkgKiBPYnRhaW4gYSBsb25nIHZhbHVlIGZyb20gYSBnaXQge0BsaW5rIENvbmZpZ30uCiAJICoKIAkgKiBAcGFyYW0gY29uZmlnCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9pbnRlcm5hbC9Cb29sZWFuVHJpU3RhdGUuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbGliL2ludGVybmFsL0Jvb2xlYW5UcmlTdGF0ZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZDNiYjMKLS0tIC9kZXYvbnVsbAorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L2xpYi9pbnRlcm5hbC9Cb29sZWFuVHJpU3RhdGUuamF2YQpAQCAtMCwwICsxLDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIFNpbWVvbiBBbmRyZWV2IDxzaW1lb24uZGFuYWlsb3YuYW5kcmVldkBnbWFpbC5jb20+IGFuZCBvdGhlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKKyAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKKyAqIGh0dHBzOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZWRsLXYxMC5waHAuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICovCitwYWNrYWdlIG9yZy5lY2xpcHNlLmpnaXQubGliLmludGVybmFsOworCisvKioKKyAqIEEgYm9vbGVhbiB2YWx1ZSB0aGF0IGNhbiBhbHNvIGhhdmUgYW4gdW5zZXQgc3RhdGUuCisgKi8KK3B1YmxpYyBlbnVtIEJvb2xlYW5UcmlTdGF0ZSB7CisJLyoqCisJICogVmFsdWUgZXF1aXZhbGVudCB0byB7QGNvZGUgdHJ1ZX0uCisJICovCisJVFJVRSwKKwkvKioKKwkgKiBWYWx1ZSBlcXVpdmFsZW50IHRvIHtAY29kZSBmYWxzZX0uCisJICovCisJRkFMU0UsCisJLyoqCisJICogVmFsdWUgaXMgbm90IHNldC4KKwkgKi8KKwlVTlNFVDsKK30KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VNZXNzYWdlRm9ybWF0dGVyLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L21lcmdlL01lcmdlTWVzc2FnZUZvcm1hdHRlci5qYXZhCmluZGV4IGY3OTY2YTIuLmUwYzA4M2YgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvTWVyZ2VNZXNzYWdlRm9ybWF0dGVyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9NZXJnZU1lc3NhZ2VGb3JtYXR0ZXIuamF2YQpAQCAtOTIsMzYgKzkyLDYyIEBAIHB1YmxpYyBTdHJpbmcgZm9ybWF0KExpc3Q8UmVmPiByZWZzVG9NZXJnZSwgUmVmIHRhcmdldCkgewogCX0KIAogCS8qKgotCSAqIEFkZCBzZWN0aW9uIHdpdGggY29uZmxpY3RpbmcgcGF0aHMgdG8gbWVyZ2UgbWVzc2FnZS4KKwkgKiBBZGQgc2VjdGlvbiB3aXRoIGNvbmZsaWN0aW5nIHBhdGhzIHRvIG1lcmdlIG1lc3NhZ2UuIExpbmVzIGFyZSBwcmVmaXhlZAorCSAqIHdpdGggYSBoYXNoLgogCSAqCiAJICogQHBhcmFtIG1lc3NhZ2UKIAkgKiAgICAgICAgICAgIHRoZSBvcmlnaW5hbCBtZXJnZSBtZXNzYWdlCiAJICogQHBhcmFtIGNvbmZsaWN0aW5nUGF0aHMKIAkgKiAgICAgICAgICAgIHRoZSBwYXRocyB3aXRoIGNvbmZsaWN0cwogCSAqIEByZXR1cm4gbWVyZ2UgbWVzc2FnZSB3aXRoIGNvbmZsaWN0aW5nIHBhdGhzIGFkZGVkCisJICogQGRlcHJlY2F0ZWQgc2luY2UgNi4xOyB1c2UKKwkgKiAgICAgICAgICAgICB7QGxpbmsgI2Zvcm1hdFdpdGhDb25mbGljdHMoU3RyaW5nLCBJdGVyYWJsZSwgY2hhcil9IGluc3RlYWQKIAkgKi8KKwlARGVwcmVjYXRlZAogCXB1YmxpYyBTdHJpbmcgZm9ybWF0V2l0aENvbmZsaWN0cyhTdHJpbmcgbWVzc2FnZSwKIAkJCUxpc3Q8U3RyaW5nPiBjb25mbGljdGluZ1BhdGhzKSB7CisJCXJldHVybiBmb3JtYXRXaXRoQ29uZmxpY3RzKG1lc3NhZ2UsIGNvbmZsaWN0aW5nUGF0aHMsICcjJyk7CisJfQorCisJLyoqCisJICogQWRkIHNlY3Rpb24gd2l0aCBjb25mbGljdGluZyBwYXRocyB0byBtZXJnZSBtZXNzYWdlLgorCSAqCisJICogQHBhcmFtIG1lc3NhZ2UKKwkgKiAgICAgICAgICAgIHRoZSBvcmlnaW5hbCBtZXJnZSBtZXNzYWdlCisJICogQHBhcmFtIGNvbmZsaWN0aW5nUGF0aHMKKwkgKiAgICAgICAgICAgIHRoZSBwYXRocyB3aXRoIGNvbmZsaWN0cworCSAqIEBwYXJhbSBjb21tZW50Q2hhcgorCSAqICAgICAgICAgICAgY29tbWVudCBjaGFyYWN0ZXIgdG8gdXNlIGZvciBwcmVmaXhpbmcgdGhlIGNvbmZsaWN0IGxpbmVzCisJICogQHJldHVybiBtZXJnZSBtZXNzYWdlIHdpdGggY29uZmxpY3RpbmcgcGF0aHMgYWRkZWQKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIFN0cmluZyBmb3JtYXRXaXRoQ29uZmxpY3RzKFN0cmluZyBtZXNzYWdlLAorCQkJSXRlcmFibGU8U3RyaW5nPiBjb25mbGljdGluZ1BhdGhzLCBjaGFyIGNvbW1lbnRDaGFyKSB7CiAJCVN0cmluZ0J1aWxkZXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwogCQlTdHJpbmdbXSBsaW5lcyA9IG1lc3NhZ2Uuc3BsaXQoIlxuIik7IC8vJE5PTi1OTFMtMSQKIAkJaW50IGZpcnN0Rm9vdGVyTGluZSA9IENoYW5nZUlkVXRpbC5pbmRleE9mRmlyc3RGb290ZXJMaW5lKGxpbmVzKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaXJzdEZvb3RlckxpbmU7IGkrKykKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaXJzdEZvb3RlckxpbmU7IGkrKykgewogCQkJc2IuYXBwZW5kKGxpbmVzW2ldKS5hcHBlbmQoJ1xuJyk7Ci0JCWlmIChmaXJzdEZvb3RlckxpbmUgPT0gbGluZXMubGVuZ3RoICYmIG1lc3NhZ2UubGVuZ3RoKCkgIT0gMCkKKwkJfQorCQlpZiAoZmlyc3RGb290ZXJMaW5lID09IGxpbmVzLmxlbmd0aCAmJiBtZXNzYWdlLmxlbmd0aCgpICE9IDApIHsKIAkJCXNiLmFwcGVuZCgnXG4nKTsKLQkJYWRkQ29uZmxpY3RzTWVzc2FnZShjb25mbGljdGluZ1BhdGhzLCBzYik7Ci0JCWlmIChmaXJzdEZvb3RlckxpbmUgPCBsaW5lcy5sZW5ndGgpCisJCX0KKwkJYWRkQ29uZmxpY3RzTWVzc2FnZShjb25mbGljdGluZ1BhdGhzLCBzYiwgY29tbWVudENoYXIpOworCQlpZiAoZmlyc3RGb290ZXJMaW5lIDwgbGluZXMubGVuZ3RoKSB7CiAJCQlzYi5hcHBlbmQoJ1xuJyk7Ci0JCWZvciAoaW50IGkgPSBmaXJzdEZvb3RlckxpbmU7IGkgPCBsaW5lcy5sZW5ndGg7IGkrKykKKwkJfQorCQlmb3IgKGludCBpID0gZmlyc3RGb290ZXJMaW5lOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKIAkJCXNiLmFwcGVuZChsaW5lc1tpXSkuYXBwZW5kKCdcbicpOworCQl9CiAJCXJldHVybiBzYi50b1N0cmluZygpOwogCX0KIAotCXByaXZhdGUgc3RhdGljIHZvaWQgYWRkQ29uZmxpY3RzTWVzc2FnZShMaXN0PFN0cmluZz4gY29uZmxpY3RpbmdQYXRocywKLQkJCVN0cmluZ0J1aWxkZXIgc2IpIHsKLQkJc2IuYXBwZW5kKCJDb25mbGljdHM6XG4iKTsgLy8kTk9OLU5MUy0xJAorCXByaXZhdGUgc3RhdGljIHZvaWQgYWRkQ29uZmxpY3RzTWVzc2FnZShJdGVyYWJsZTxTdHJpbmc+IGNvbmZsaWN0aW5nUGF0aHMsCisJCQlTdHJpbmdCdWlsZGVyIHNiLCBjaGFyIGNvbW1lbnRDaGFyKSB7CisJCXNiLmFwcGVuZChjb21tZW50Q2hhcikuYXBwZW5kKCIgQ29uZmxpY3RzOlxuIik7IC8vJE5PTi1OTFMtMSQKIAkJZm9yIChTdHJpbmcgY29uZmxpY3RpbmdQYXRoIDogY29uZmxpY3RpbmdQYXRocykgewotCQkJc2IuYXBwZW5kKCdcdCcpLmFwcGVuZChjb25mbGljdGluZ1BhdGgpLmFwcGVuZCgnXG4nKTsKKwkJCXNiLmFwcGVuZChjb21tZW50Q2hhcikuYXBwZW5kKCdcdCcpLmFwcGVuZChjb25mbGljdGluZ1BhdGgpCisJCQkJCS5hcHBlbmQoJ1xuJyk7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvbWVyZ2UvUmVzb2x2ZU1lcmdlci5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9SZXNvbHZlTWVyZ2VyLmphdmEKaW5kZXggNzc2NzY2Mi4uYjlhYjFkMSAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9SZXNvbHZlTWVyZ2VyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9tZXJnZS9SZXNvbHZlTWVyZ2VyLmphdmEKQEAgLTMsNyArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMiwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDEyLCBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZAogICogQ29weXJpZ2h0IChDKSAyMDE3LCBPYmVvIChtYXRoaWV1LmNhcnRhdWRAb2Jlby5mcikKLSAqIENvcHlyaWdodCAoQykgMjAxOCwgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAxOCwgMjAyMiBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMjc2LDExICsyNzYsMTUgQEAgcHVibGljIGVudW0gTWVyZ2VGYWlsdXJlUmVhc29uIHsKIAlwcml2YXRlIENvbnRlbnRNZXJnZVN0cmF0ZWd5IGNvbnRlbnRTdHJhdGVneSA9IENvbnRlbnRNZXJnZVN0cmF0ZWd5LkNPTkZMSUNUOwogCiAJLyoqCi0JICogS2VlcHMge0BsaW5rIENoZWNrb3V0TWV0YWRhdGF9IGZvciB7QGxpbmsgI2NoZWNrb3V0KCl9IGFuZAotCSAqIHtAbGluayAjY2xlYW5VcCgpfS4KKwkgKiBLZWVwcyB7QGxpbmsgQ2hlY2tvdXRNZXRhZGF0YX0gZm9yIHtAbGluayAjY2hlY2tvdXQoKX0uCiAJICovCiAJcHJpdmF0ZSBNYXA8U3RyaW5nLCBDaGVja291dE1ldGFkYXRhPiBjaGVja291dE1ldGFkYXRhOwogCisJLyoqCisJICogS2VlcHMge0BsaW5rIENoZWNrb3V0TWV0YWRhdGF9IGZvciB7QGxpbmsgI2NsZWFuVXAoKX0uCisJICovCisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBDaGVja291dE1ldGFkYXRhPiBjbGVhbnVwTWV0YWRhdGE7CisKIAlwcml2YXRlIHN0YXRpYyBNZXJnZUFsZ29yaXRobSBnZXRNZXJnZUFsZ29yaXRobShDb25maWcgY29uZmlnKSB7CiAJCVN1cHBvcnRlZEFsZ29yaXRobSBkaWZmQWxnID0gY29uZmlnLmdldEVudW0oCiAJCQkJQ09ORklHX0RJRkZfU0VDVElPTiwgbnVsbCwgQ09ORklHX0tFWV9BTEdPUklUSE0sCkBAIC0zODMsMTIgKzM4NywxNCBAQCBwcm90ZWN0ZWQgYm9vbGVhbiBtZXJnZUltcGwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQl9CiAJCWlmICghaW5Db3JlKSB7CiAJCQljaGVja291dE1ldGFkYXRhID0gbmV3IEhhc2hNYXA8PigpOworCQkJY2xlYW51cE1ldGFkYXRhID0gbmV3IEhhc2hNYXA8PigpOwogCQl9CiAJCXRyeSB7CiAJCQlyZXR1cm4gbWVyZ2VUcmVlcyhtZXJnZUJhc2UoKSwgc291cmNlVHJlZXNbMF0sIHNvdXJjZVRyZWVzWzFdLAogCQkJCQlmYWxzZSk7CiAJCX0gZmluYWxseSB7CiAJCQljaGVja291dE1ldGFkYXRhID0gbnVsbDsKKwkJCWNsZWFudXBNZXRhZGF0YSA9IG51bGw7CiAJCQlpZiAoaW1wbGljaXREaXJDYWNoZSkgewogCQkJCWRpcmNhY2hlLnVubG9jaygpOwogCQkJfQpAQCAtNDQ3LDcgKzQ1Myw3IEBAIHByb3RlY3RlZCB2b2lkIGNsZWFuVXAoKSB0aHJvd3MgTm9Xb3JrVHJlZUV4Y2VwdGlvbiwKIAkJCURpckNhY2hlRW50cnkgZW50cnkgPSBkYy5nZXRFbnRyeShtcGF0aCk7CiAJCQlpZiAoZW50cnkgIT0gbnVsbCkgewogCQkJCURpckNhY2hlQ2hlY2tvdXQuY2hlY2tvdXRFbnRyeShkYiwgZW50cnksIHJlYWRlciwgZmFsc2UsCi0JCQkJCQljaGVja291dE1ldGFkYXRhLmdldChtcGF0aCkpOworCQkJCQkJY2xlYW51cE1ldGFkYXRhLmdldChtcGF0aCkpOwogCQkJfQogCQkJbXBhdGhzSXQucmVtb3ZlKCk7CiAJCX0KQEAgLTUwMSwyMiArNTA3LDI2IEBAIHByaXZhdGUgRGlyQ2FjaGVFbnRyeSBrZWVwKERpckNhY2hlRW50cnkgZSkgewogCSAqIFJlbWVtYmVycyB0aGUge0BsaW5rIENoZWNrb3V0TWV0YWRhdGF9IGZvciB0aGUgZ2l2ZW4gcGF0aDsgaXQgbWF5IGJlCiAJICogbmVlZGVkIGluIHtAbGluayAjY2hlY2tvdXQoKX0gb3IgaW4ge0BsaW5rICNjbGVhblVwKCl9LgogCSAqCisJICogQHBhcmFtIG1hcAorCSAqICAgICAgICAgICAgdG8gYWRkIHRoZSBtZXRhZGF0YSB0bwogCSAqIEBwYXJhbSBwYXRoCiAJICogICAgICAgICAgICBvZiB0aGUgY3VycmVudCBub2RlCiAJICogQHBhcmFtIGF0dHJpYnV0ZXMKLQkgKiAgICAgICAgICAgIGZvciB0aGUgY3VycmVudCBub2RlCisJICogICAgICAgICAgICB0byB1c2UgZm9yIGRldGVybWluaW5nIHRoZSBtZXRhZGF0YQogCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KIAkgKiAgICAgICAgICAgICBpZiB0aGUgc211ZGdlIGZpbHRlciBjYW5ub3QgYmUgZGV0ZXJtaW5lZAotCSAqIEBzaW5jZSA1LjEKKwkgKiBAc2luY2UgNi4xCiAJICovCi0JcHJvdGVjdGVkIHZvaWQgYWRkQ2hlY2tvdXRNZXRhZGF0YShTdHJpbmcgcGF0aCwgQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorCXByb3RlY3RlZCB2b2lkIGFkZENoZWNrb3V0TWV0YWRhdGEoTWFwPFN0cmluZywgQ2hlY2tvdXRNZXRhZGF0YT4gbWFwLAorCQkJU3RyaW5nIHBhdGgsIEF0dHJpYnV0ZXMgYXR0cmlidXRlcykKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChjaGVja291dE1ldGFkYXRhICE9IG51bGwpIHsKKwkJaWYgKG1hcCAhPSBudWxsKSB7CiAJCQlFb2xTdHJlYW1UeXBlIGVvbCA9IEVvbFN0cmVhbVR5cGVVdGlsLmRldGVjdFN0cmVhbVR5cGUoCi0JCQkJCU9wZXJhdGlvblR5cGUuQ0hFQ0tPVVRfT1AsIHdvcmtpbmdUcmVlT3B0aW9ucywgYXR0cmlidXRlcyk7CisJCQkJCU9wZXJhdGlvblR5cGUuQ0hFQ0tPVVRfT1AsIHdvcmtpbmdUcmVlT3B0aW9ucywKKwkJCQkJYXR0cmlidXRlcyk7CiAJCQlDaGVja291dE1ldGFkYXRhIGRhdGEgPSBuZXcgQ2hlY2tvdXRNZXRhZGF0YShlb2wsCi0JCQkJCXR3LmdldEZpbHRlckNvbW1hbmQoQ29uc3RhbnRzLkFUVFJfRklMVEVSX1RZUEVfU01VREdFKSk7Ci0JCQljaGVja291dE1ldGFkYXRhLnB1dChwYXRoLCBkYXRhKTsKKwkJCQkJdHcuZ2V0U211ZGdlQ29tbWFuZChhdHRyaWJ1dGVzKSk7CisJCQltYXAucHV0KHBhdGgsIGRhdGEpOwogCQl9CiAJfQogCkBAIC01MjksMTUgKzUzOSwxNyBAQCBwcm90ZWN0ZWQgdm9pZCBhZGRDaGVja291dE1ldGFkYXRhKFN0cmluZyBwYXRoLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCiAJICogQHBhcmFtIGVudHJ5CiAJICogICAgICAgICAgICB0byBhZGQKIAkgKiBAcGFyYW0gYXR0cmlidXRlcwotCSAqICAgICAgICAgICAgZm9yIHRoZSBjdXJyZW50IGVudHJ5CisJICogICAgICAgICAgICB0aGUge0BsaW5rIEF0dHJpYnV0ZXN9IG9mIHRoZSB0cmVlcwogCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KIAkgKiAgICAgICAgICAgICBpZiB0aGUge0BsaW5rIENoZWNrb3V0TWV0YWRhdGF9IGNhbm5vdCBiZSBkZXRlcm1pbmVkCi0JICogQHNpbmNlIDUuMQorCSAqIEBzaW5jZSA2LjEKIAkgKi8KIAlwcm90ZWN0ZWQgdm9pZCBhZGRUb0NoZWNrb3V0KFN0cmluZyBwYXRoLCBEaXJDYWNoZUVudHJ5IGVudHJ5LAotCQkJQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQkJQXR0cmlidXRlc1tdIGF0dHJpYnV0ZXMpCisJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQl0b0JlQ2hlY2tlZE91dC5wdXQocGF0aCwgZW50cnkpOwotCQlhZGRDaGVja291dE1ldGFkYXRhKHBhdGgsIGF0dHJpYnV0ZXMpOworCQlhZGRDaGVja291dE1ldGFkYXRhKGNsZWFudXBNZXRhZGF0YSwgcGF0aCwgYXR0cmlidXRlc1tUX09VUlNdKTsKKwkJYWRkQ2hlY2tvdXRNZXRhZGF0YShjaGVja291dE1ldGFkYXRhLCBwYXRoLCBhdHRyaWJ1dGVzW1RfVEhFSVJTXSk7CiAJfQogCiAJLyoqCkBAIC01NDksNyArNTYxLDcgQEAgcHJvdGVjdGVkIHZvaWQgYWRkVG9DaGVja291dChTdHJpbmcgcGF0aCwgRGlyQ2FjaGVFbnRyeSBlbnRyeSwKIAkgKiBAcGFyYW0gaXNGaWxlCiAJICogICAgICAgICAgICB3aGV0aGVyIGl0IGlzIGEgZmlsZQogCSAqIEBwYXJhbSBhdHRyaWJ1dGVzCi0JICogICAgICAgICAgICBmb3IgdGhlIGVudHJ5CisJICogICAgICAgICAgICB0byB1c2UgZm9yIGRldGVybWluaW5nIHRoZSB7QGxpbmsgQ2hlY2tvdXRNZXRhZGF0YX0KIAkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCiAJICogICAgICAgICAgICAgaWYgdGhlIHtAbGluayBDaGVja291dE1ldGFkYXRhfSBjYW5ub3QgYmUgZGV0ZXJtaW5lZAogCSAqIEBzaW5jZSA1LjEKQEAgLTU1OCw3ICs1NzAsNyBAQCBwcm90ZWN0ZWQgdm9pZCBhZGREZWxldGlvbihTdHJpbmcgcGF0aCwgYm9vbGVhbiBpc0ZpbGUsCiAJCQlBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCXRvQmVEZWxldGVkLmFkZChwYXRoKTsKIAkJaWYgKGlzRmlsZSkgewotCQkJYWRkQ2hlY2tvdXRNZXRhZGF0YShwYXRoLCBhdHRyaWJ1dGVzKTsKKwkJCWFkZENoZWNrb3V0TWV0YWRhdGEoY2xlYW51cE1ldGFkYXRhLCBwYXRoLCBhdHRyaWJ1dGVzKTsKIAkJfQogCX0KIApAQCAtNTk5LDcgKzYxMSw3IEBAIHByb3RlY3RlZCB2b2lkIGFkZERlbGV0aW9uKFN0cmluZyBwYXRoLCBib29sZWFuIGlzRmlsZSwKIAkgKiAgICAgICAgICAgIHNlZQogCSAqICAgICAgICAgICAge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQubWVyZ2UuUmVzb2x2ZU1lcmdlciNtZXJnZVRyZWVzKEFic3RyYWN0VHJlZUl0ZXJhdG9yLCBSZXZUcmVlLCBSZXZUcmVlLCBib29sZWFuKX0KIAkgKiBAcGFyYW0gYXR0cmlidXRlcwotCSAqICAgICAgICAgICAgdGhlIGF0dHJpYnV0ZXMgZGVmaW5lZCBmb3IgdGhpcyBlbnRyeQorCSAqICAgICAgICAgICAgdGhlIHtAbGluayBBdHRyaWJ1dGVzfSBmb3IgdGhlIHRocmVlIHRyZWVzCiAJICogQHJldHVybiA8Y29kZT5mYWxzZTwvY29kZT4gaWYgdGhlIG1lcmdlIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSBpbmRleCBlbnRyeQogCSAqICAgICAgICAgZGlkbid0IG1hdGNoIG91cnMgb3IgdGhlIHdvcmtpbmctZGlyIGZpbGUgd2FzIGRpcnR5IGFuZCBhCiAJICogICAgICAgICBjb25mbGljdCBvY2N1cnJlZApAQCAtNjA3LDEyICs2MTksMTIgQEAgcHJvdGVjdGVkIHZvaWQgYWRkRGVsZXRpb24oU3RyaW5nIHBhdGgsIGJvb2xlYW4gaXNGaWxlLAogCSAqIEB0aHJvd3Mgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuSW5jb3JyZWN0T2JqZWN0VHlwZUV4Y2VwdGlvbgogCSAqIEB0aHJvd3Mgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuQ29ycnVwdE9iamVjdEV4Y2VwdGlvbgogCSAqIEB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgotCSAqIEBzaW5jZSA0LjkKKwkgKiBAc2luY2UgNi4xCiAJICovCiAJcHJvdGVjdGVkIGJvb2xlYW4gcHJvY2Vzc0VudHJ5KENhbm9uaWNhbFRyZWVQYXJzZXIgYmFzZSwKIAkJCUNhbm9uaWNhbFRyZWVQYXJzZXIgb3VycywgQ2Fub25pY2FsVHJlZVBhcnNlciB0aGVpcnMsCiAJCQlEaXJDYWNoZUJ1aWxkSXRlcmF0b3IgaW5kZXgsIFdvcmtpbmdUcmVlSXRlcmF0b3Igd29yaywKLQkJCWJvb2xlYW4gaWdub3JlQ29uZmxpY3RzLCBBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCisJCQlib29sZWFuIGlnbm9yZUNvbmZsaWN0cywgQXR0cmlidXRlc1tdIGF0dHJpYnV0ZXMpCiAJCQl0aHJvd3MgTWlzc2luZ09iamVjdEV4Y2VwdGlvbiwgSW5jb3JyZWN0T2JqZWN0VHlwZUV4Y2VwdGlvbiwKIAkJCUNvcnJ1cHRPYmplY3RFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKIAkJZW50ZXJTdWJ0cmVlID0gdHJ1ZTsKQEAgLTcyOSw3ICs3NDEsNyBAQCBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBiYXNlLAogCQkJCS8vIEJhc2UsIG91cnMsIGFuZCB0aGVpcnMgYWxsIGNvbnRhaW4gYSBmb2xkZXI6IGRvbid0IGRlbGV0ZQogCQkJCXJldHVybiB0cnVlOwogCQkJfQotCQkJYWRkRGVsZXRpb24odHcuZ2V0UGF0aFN0cmluZygpLCBub25UcmVlKG1vZGVPKSwgYXR0cmlidXRlcyk7CisJCQlhZGREZWxldGlvbih0dy5nZXRQYXRoU3RyaW5nKCksIG5vblRyZWUobW9kZU8pLCBhdHRyaWJ1dGVzW1RfT1VSU10pOwogCQkJcmV0dXJuIHRydWU7CiAJCX0KIApAQCAtNzcyLDcgKzc4NCw3IEBAIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGJhc2UsCiAJCWlmIChub25UcmVlKG1vZGVPKSAmJiBub25UcmVlKG1vZGVUKSkgewogCQkJLy8gQ2hlY2sgd29ya3RyZWUgYmVmb3JlIG1vZGlmeWluZyBmaWxlcwogCQkJYm9vbGVhbiB3b3JrdHJlZURpcnR5ID0gaXNXb3JrdHJlZURpcnR5KHdvcmssIG91ckRjZSk7Ci0JCQlpZiAoIWF0dHJpYnV0ZXMuY2FuQmVDb250ZW50TWVyZ2VkKCkgJiYgd29ya3RyZWVEaXJ0eSkgeworCQkJaWYgKCFhdHRyaWJ1dGVzW1RfT1VSU10uY2FuQmVDb250ZW50TWVyZ2VkKCkgJiYgd29ya3RyZWVEaXJ0eSkgewogCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KIApAQCAtNzkxLDcgKzgwMyw3IEBAIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGJhc2UsCiAJCQkJbWVyZ2VSZXN1bHRzLnB1dCh0dy5nZXRQYXRoU3RyaW5nKCksIHJlc3VsdCk7CiAJCQkJdW5tZXJnZWRQYXRocy5hZGQodHcuZ2V0UGF0aFN0cmluZygpKTsKIAkJCQlyZXR1cm4gdHJ1ZTsKLQkJCX0gZWxzZSBpZiAoIWF0dHJpYnV0ZXMuY2FuQmVDb250ZW50TWVyZ2VkKCkpIHsKKwkJCX0gZWxzZSBpZiAoIWF0dHJpYnV0ZXNbVF9PVVJTXS5jYW5CZUNvbnRlbnRNZXJnZWQoKSkgewogCQkJCS8vIEZpbGUgbWFya2VkIGFzIGJpbmFyeQogCQkJCXN3aXRjaCAoZ2V0Q29udGVudE1lcmdlU3RyYXRlZ3koKSkgewogCQkJCWNhc2UgT1VSUzoKQEAgLTg0MiwxMyArODU0LDE2IEBAIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGJhc2UsCiAJCQlpZiAoaWdub3JlQ29uZmxpY3RzKSB7CiAJCQkJcmVzdWx0LnNldENvbnRhaW5zQ29uZmxpY3RzKGZhbHNlKTsKIAkJCX0KLQkJCXVwZGF0ZUluZGV4KGJhc2UsIG91cnMsIHRoZWlycywgcmVzdWx0LCBhdHRyaWJ1dGVzKTsKKwkJCXVwZGF0ZUluZGV4KGJhc2UsIG91cnMsIHRoZWlycywgcmVzdWx0LCBhdHRyaWJ1dGVzW1RfT1VSU10pOwogCQkJU3RyaW5nIGN1cnJlbnRQYXRoID0gdHcuZ2V0UGF0aFN0cmluZygpOwogCQkJaWYgKHJlc3VsdC5jb250YWluc0NvbmZsaWN0cygpICYmICFpZ25vcmVDb25mbGljdHMpIHsKIAkJCQl1bm1lcmdlZFBhdGhzLmFkZChjdXJyZW50UGF0aCk7CiAJCQl9CiAJCQltb2RpZmllZEZpbGVzLmFkZChjdXJyZW50UGF0aCk7Ci0JCQlhZGRDaGVja291dE1ldGFkYXRhKGN1cnJlbnRQYXRoLCBhdHRyaWJ1dGVzKTsKKwkJCWFkZENoZWNrb3V0TWV0YWRhdGEoY2xlYW51cE1ldGFkYXRhLCBjdXJyZW50UGF0aCwKKwkJCQkJYXR0cmlidXRlc1tUX09VUlNdKTsKKwkJCWFkZENoZWNrb3V0TWV0YWRhdGEoY2hlY2tvdXRNZXRhZGF0YSwgY3VycmVudFBhdGgsCisJCQkJCWF0dHJpYnV0ZXNbVF9USEVJUlNdKTsKIAkJfSBlbHNlIGlmIChtb2RlTyAhPSBtb2RlVCkgewogCQkJLy8gT1VSUyBvciBUSEVJUlMgaGFzIGJlZW4gZGVsZXRlZAogCQkJaWYgKCgobW9kZU8gIT0gMCAmJiAhdHcuaWRFcXVhbChUX0JBU0UsIFRfT1VSUykpIHx8IChtb2RlVCAhPSAwICYmICF0dwpAQCAtODgxLDcgKzg5Niw4IEBAIHByb3RlY3RlZCBib29sZWFuIHByb2Nlc3NFbnRyeShDYW5vbmljYWxUcmVlUGFyc2VyIGJhc2UsCiAJCQkJCQkvLyBtYXJrZXJzKS4gQnV0IGFsc28gc3RhZ2UgMCBvZiB0aGUgaW5kZXggaXMgZmlsbGVkCiAJCQkJCQkvLyB3aXRoIHRoYXQgY29udGVudC4KIAkJCQkJCXJlc3VsdC5zZXRDb250YWluc0NvbmZsaWN0cyhmYWxzZSk7Ci0JCQkJCQl1cGRhdGVJbmRleChiYXNlLCBvdXJzLCB0aGVpcnMsIHJlc3VsdCwgYXR0cmlidXRlcyk7CisJCQkJCQl1cGRhdGVJbmRleChiYXNlLCBvdXJzLCB0aGVpcnMsIHJlc3VsdCwKKwkJCQkJCQkJYXR0cmlidXRlc1tUX09VUlNdKTsKIAkJCQkJfSBlbHNlIHsKIAkJCQkJCWFkZCh0dy5nZXRSYXdQYXRoKCksIGJhc2UsIERpckNhY2hlRW50cnkuU1RBR0VfMSwgRVBPQ0gsCiAJCQkJCQkJCTApOwpAQCAtODk2LDExICs5MTIsOSBAQCBwcm90ZWN0ZWQgYm9vbGVhbiBwcm9jZXNzRW50cnkoQ2Fub25pY2FsVHJlZVBhcnNlciBiYXNlLAogCQkJCQkJCWlmIChpc1dvcmt0cmVlRGlydHkod29yaywgb3VyRGNlKSkgewogCQkJCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJCQkJfQotCQkJCQkJCWlmIChub25UcmVlKG1vZGVUKSkgewotCQkJCQkJCQlpZiAoZSAhPSBudWxsKSB7Ci0JCQkJCQkJCQlhZGRUb0NoZWNrb3V0KHR3LmdldFBhdGhTdHJpbmcoKSwgZSwKLQkJCQkJCQkJCQkJYXR0cmlidXRlcyk7Ci0JCQkJCQkJCX0KKwkJCQkJCQlpZiAobm9uVHJlZShtb2RlVCkgJiYgZSAhPSBudWxsKSB7CisJCQkJCQkJCWFkZFRvQ2hlY2tvdXQodHcuZ2V0UGF0aFN0cmluZygpLCBlLAorCQkJCQkJCQkJCWF0dHJpYnV0ZXMpOwogCQkJCQkJCX0KIAkJCQkJCX0KIApAQCAtOTQ1LDE0ICs5NTksMTYgQEAgcHJpdmF0ZSBzdGF0aWMgTWVyZ2VSZXN1bHQ8U3VibW9kdWxlQ29uZmxpY3Q+IGNyZWF0ZUdpdExpbmtzTWVyZ2VSZXN1bHQoCiAJICovCiAJcHJpdmF0ZSBNZXJnZVJlc3VsdDxSYXdUZXh0PiBjb250ZW50TWVyZ2UoQ2Fub25pY2FsVHJlZVBhcnNlciBiYXNlLAogCQkJQ2Fub25pY2FsVHJlZVBhcnNlciBvdXJzLCBDYW5vbmljYWxUcmVlUGFyc2VyIHRoZWlycywKLQkJCUF0dHJpYnV0ZXMgYXR0cmlidXRlcywgQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpCisJCQlBdHRyaWJ1dGVzW10gYXR0cmlidXRlcywgQ29udGVudE1lcmdlU3RyYXRlZ3kgc3RyYXRlZ3kpCiAJCQl0aHJvd3MgQmluYXJ5QmxvYkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24geworCQkvLyBUVzogVGhlIGF0dHJpYnV0ZXMgaGVyZSBhcmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIExGUyBzbXVkZ2UgZmlsdGVyLgorCQkvLyBJcyBkb2luZyBhIGNvbnRlbnQgbWVyZ2Ugb24gTEZTIGl0ZW1zIHJlYWxseSBhIGdvb2QgaWRlYT8/CiAJCVJhd1RleHQgYmFzZVRleHQgPSBiYXNlID09IG51bGwgPyBSYXdUZXh0LkVNUFRZX1RFWFQKLQkJCQk6IGdldFJhd1RleHQoYmFzZS5nZXRFbnRyeU9iamVjdElkKCksIGF0dHJpYnV0ZXMpOworCQkJCTogZ2V0UmF3VGV4dChiYXNlLmdldEVudHJ5T2JqZWN0SWQoKSwgYXR0cmlidXRlc1tUX0JBU0VdKTsKIAkJUmF3VGV4dCBvdXJUZXh0ID0gb3VycyA9PSBudWxsID8gUmF3VGV4dC5FTVBUWV9URVhUCi0JCQkJOiBnZXRSYXdUZXh0KG91cnMuZ2V0RW50cnlPYmplY3RJZCgpLCBhdHRyaWJ1dGVzKTsKKwkJCQk6IGdldFJhd1RleHQob3Vycy5nZXRFbnRyeU9iamVjdElkKCksIGF0dHJpYnV0ZXNbVF9PVVJTXSk7CiAJCVJhd1RleHQgdGhlaXJzVGV4dCA9IHRoZWlycyA9PSBudWxsID8gUmF3VGV4dC5FTVBUWV9URVhUCi0JCQkJOiBnZXRSYXdUZXh0KHRoZWlycy5nZXRFbnRyeU9iamVjdElkKCksIGF0dHJpYnV0ZXMpOworCQkJCTogZ2V0UmF3VGV4dCh0aGVpcnMuZ2V0RW50cnlPYmplY3RJZCgpLCBhdHRyaWJ1dGVzW1RfVEhFSVJTXSk7CiAJCW1lcmdlQWxnb3JpdGhtLnNldENvbnRlbnRNZXJnZVN0cmF0ZWd5KHN0cmF0ZWd5KTsKIAkJcmV0dXJuIG1lcmdlQWxnb3JpdGhtLm1lcmdlKFJhd1RleHRDb21wYXJhdG9yLkRFRkFVTFQsIGJhc2VUZXh0LAogCQkJCW91clRleHQsIHRoZWlyc1RleHQpOwpAQCAtMTM0Miw3ICsxMzU4LDcgQEAgcHJvdGVjdGVkIGJvb2xlYW4gbWVyZ2VUcmVlcyhBYnN0cmFjdFRyZWVJdGVyYXRvciBiYXNlVHJlZSwKIAogCQl0dyA9IG5ldyBOYW1lQ29uZmxpY3RUcmVlV2FsayhkYiwgcmVhZGVyKTsKIAkJdHcuYWRkVHJlZShiYXNlVHJlZSk7Ci0JCXR3LmFkZFRyZWUoaGVhZFRyZWUpOworCQl0dy5zZXRIZWFkKHR3LmFkZFRyZWUoaGVhZFRyZWUpKTsKIAkJdHcuYWRkVHJlZShtZXJnZVRyZWUpOwogCQlpbnQgZGNpUG9zID0gdHcuYWRkVHJlZShidWlsZEl0KTsKIAkJaWYgKHdvcmtpbmdUcmVlSXRlcmF0b3IgIT0gbnVsbCkgewpAQCAtMTQwMyw2ICsxNDE5LDEzIEBAIHByb3RlY3RlZCBib29sZWFuIG1lcmdlVHJlZVdhbGsoVHJlZVdhbGsgdHJlZVdhbGssIGJvb2xlYW4gaWdub3JlQ29uZmxpY3RzKQogCQlib29sZWFuIGhhc0F0dHJpYnV0ZU5vZGVQcm92aWRlciA9IHRyZWVXYWxrCiAJCQkJLmdldEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIoKSAhPSBudWxsOwogCQl3aGlsZSAodHJlZVdhbGsubmV4dCgpKSB7CisJCQlBdHRyaWJ1dGVzW10gYXR0cmlidXRlcyA9IHsgTk9fQVRUUklCVVRFUywgTk9fQVRUUklCVVRFUywKKwkJCQkJTk9fQVRUUklCVVRFUyB9OworCQkJaWYgKGhhc0F0dHJpYnV0ZU5vZGVQcm92aWRlcikgeworCQkJCWF0dHJpYnV0ZXNbVF9CQVNFXSA9IHRyZWVXYWxrLmdldEF0dHJpYnV0ZXMoVF9CQVNFKTsKKwkJCQlhdHRyaWJ1dGVzW1RfT1VSU10gPSB0cmVlV2Fsay5nZXRBdHRyaWJ1dGVzKFRfT1VSUyk7CisJCQkJYXR0cmlidXRlc1tUX1RIRUlSU10gPSB0cmVlV2Fsay5nZXRBdHRyaWJ1dGVzKFRfVEhFSVJTKTsKKwkJCX0KIAkJCWlmICghcHJvY2Vzc0VudHJ5KAogCQkJCQl0cmVlV2Fsay5nZXRUcmVlKFRfQkFTRSwgQ2Fub25pY2FsVHJlZVBhcnNlci5jbGFzcyksCiAJCQkJCXRyZWVXYWxrLmdldFRyZWUoVF9PVVJTLCBDYW5vbmljYWxUcmVlUGFyc2VyLmNsYXNzKSwKQEAgLTE0MTAsOSArMTQzMyw3IEBAIHByb3RlY3RlZCBib29sZWFuIG1lcmdlVHJlZVdhbGsoVHJlZVdhbGsgdHJlZVdhbGssIGJvb2xlYW4gaWdub3JlQ29uZmxpY3RzKQogCQkJCQl0cmVlV2Fsay5nZXRUcmVlKFRfSU5ERVgsIERpckNhY2hlQnVpbGRJdGVyYXRvci5jbGFzcyksCiAJCQkJCWhhc1dvcmtpbmdUcmVlSXRlcmF0b3IgPyB0cmVlV2Fsay5nZXRUcmVlKFRfRklMRSwKIAkJCQkJCQlXb3JraW5nVHJlZUl0ZXJhdG9yLmNsYXNzKSA6IG51bGwsCi0JCQkJCWlnbm9yZUNvbmZsaWN0cywgaGFzQXR0cmlidXRlTm9kZVByb3ZpZGVyCi0JCQkJCQkJPyB0cmVlV2Fsay5nZXRBdHRyaWJ1dGVzKCkKLQkJCQkJCQk6IE5PX0FUVFJJQlVURVMpKSB7CisJCQkJCWlnbm9yZUNvbmZsaWN0cywgYXR0cmlidXRlcykpIHsKIAkJCQljbGVhblVwKCk7CiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL09iamVjdFdhbGsuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9PYmplY3RXYWxrLmphdmEKaW5kZXggZTZmOTU4MC4uNGU0OGE1YyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL09iamVjdFdhbGsuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvT2JqZWN0V2Fsay5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMjIgU2hhd24gTy4gUGVhcmNlIDxzcGVhcmNlQHNwZWFyY2Uub3JnPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xMzksNyArMTM5LDcgQEAgcHVibGljIHZvaWQgdmlzaXRlZChSZXZPYmplY3QgbykgewogCSAqICAgICAgICAgICAgdGhlIHJlcG9zaXRvcnkgdGhlIHdhbGtlciB3aWxsIG9idGFpbiBkYXRhIGZyb20uCiAJICovCiAJcHVibGljIE9iamVjdFdhbGsoUmVwb3NpdG9yeSByZXBvKSB7Ci0JCXRoaXMocmVwby5uZXdPYmplY3RSZWFkZXIoKSk7CisJCXRoaXMocmVwby5uZXdPYmplY3RSZWFkZXIoKSwgdHJ1ZSk7CiAJfQogCiAJLyoqCkBAIC0xNTEsNyArMTUxLDExIEBAIHB1YmxpYyBPYmplY3RXYWxrKFJlcG9zaXRvcnkgcmVwbykgewogCSAqICAgICAgICAgICAgcmVxdWlyZWQuCiAJICovCiAJcHVibGljIE9iamVjdFdhbGsoT2JqZWN0UmVhZGVyIG9yKSB7Ci0JCXN1cGVyKG9yKTsKKwkJdGhpcyhvciwgZmFsc2UpOworCX0KKworCXByaXZhdGUgT2JqZWN0V2FsayhPYmplY3RSZWFkZXIgb3IsIGJvb2xlYW4gY2xvc2VSZWFkZXIpIHsKKwkJc3VwZXIob3IsIGNsb3NlUmVhZGVyKTsKIAkJc2V0UmV0YWluQm9keShmYWxzZSk7CiAJCXJvb3RPYmplY3RzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAJCXBlbmRpbmdPYmplY3RzID0gbmV3IEJsb2NrT2JqUXVldWUoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3JldndhbGsvUmV2V2Fsay5qYXZhCmluZGV4IDhkNTcxZjUuLmE1MGVhZjEgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvcmV2d2Fsay9SZXZXYWxrLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC9yZXZ3YWxrL1JldldhbGsuamF2YQpAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYyBSZXZXYWxrKE9iamVjdFJlYWRlciBvcikgewogCQl0aGlzKG9yLCBmYWxzZSk7CiAJfQogCi0JcHJpdmF0ZSBSZXZXYWxrKE9iamVjdFJlYWRlciBvciwgYm9vbGVhbiBjbG9zZVJlYWRlcikgeworCVJldldhbGsoT2JqZWN0UmVhZGVyIG9yLCBib29sZWFuIGNsb3NlUmVhZGVyKSB7CiAJCXJlYWRlciA9IG9yOwogCQlpZEJ1ZmZlciA9IG5ldyBNdXRhYmxlT2JqZWN0SWQoKTsKIAkJb2JqZWN0cyA9IG5ldyBPYmplY3RJZE93bmVyTWFwPD4oKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDb25maWcuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hDb25maWcuamF2YQppbmRleCBmZGE3YTgxLi5jODc3NGQ1IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoQ29uZmlnLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaENvbmZpZy5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNywgRGF2aWQgUHVyc2Vob3VzZSA8ZGF2aWQucHVyc2Vob3VzZUBnbWFpbC5jb20+IGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAxNywgMjAyMiBEYXZpZCBQdXJzZWhvdXNlIDxkYXZpZC5wdXJzZWhvdXNlQGdtYWlsLmNvbT4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMTAsNyArMTAsMTAgQEAKIAogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDsKIAoraW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CisKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25maWc7CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uZmlnQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5TdHJpbmdVdGlsczsKIAogLyoqCkBAIC0xOSw4ICsyMiw5IEBACiAgKiBAc2luY2UgNC45CiAgKi8KIHB1YmxpYyBjbGFzcyBQdXNoQ29uZmlnIHsKKwogCS8qKgotCSAqIENvbmZpZyB2YWx1ZXMgZm9yIHB1c2gucmVjdXJzZVN1Ym1vZHVsZXMuCisJICogR2l0IGNvbmZpZyB2YWx1ZXMgZm9yIHtAY29kZSBwdXNoLnJlY3Vyc2VTdWJtb2R1bGVzfS4KIAkgKi8KIAlwdWJsaWMgZW51bSBQdXNoUmVjdXJzZVN1Ym1vZHVsZXNNb2RlIGltcGxlbWVudHMgQ29uZmlnLkNvbmZpZ0VudW0gewogCQkvKioKQEAgLTU5LDQgKzYzLDEwMCBAQCBwdWJsaWMgYm9vbGVhbiBtYXRjaENvbmZpZ1ZhbHVlKFN0cmluZyBzKSB7CiAJCQkJCXx8IGNvbmZpZ1ZhbHVlLmVxdWFsc0lnbm9yZUNhc2Uocyk7CiAJCX0KIAl9CisKKwkvKioKKwkgKiBHaXQgY29uZmlnIHZhbHVlcyBmb3Ige0Bjb2RlIHB1c2guZGVmYXVsdH0uCisJICoKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIGVudW0gUHVzaERlZmF1bHQgaW1wbGVtZW50cyBDb25maWcuQ29uZmlnRW51bSB7CisKKwkJLyoqCisJCSAqIERvIG5vdCBwdXNoIGlmIHRoZXJlIGFyZSBubyBleHBsaWNpdCByZWZzcGVjcy4KKwkJICovCisJCU5PVEhJTkcsCisKKwkJLyoqCisJCSAqIFB1c2ggdGhlIGN1cnJlbnQgYnJhbmNoIHRvIGFuIHVwc3RyZWFtIGJyYW5jaCBvZiB0aGUgc2FtZSBuYW1lLgorCQkgKi8KKwkJQ1VSUkVOVCwKKworCQkvKioKKwkJICogUHVzaCB0aGUgY3VycmVudCBicmFuY2ggdG8gYW4gdXBzdHJlYW0gYnJhbmNoIGRldGVybWluZWQgYnkgZ2l0CisJCSAqIGNvbmZpZyB7QGNvZGUgYnJhbmNoLjxjdXJyZW50QnJhbmNoPi5tZXJnZX0uCisJCSAqLworCQlVUFNUUkVBTSgidHJhY2tpbmciKSwgLy8kTk9OLU5MUy0xJAorCisJCS8qKgorCQkgKiBMaWtlIHtAbGluayAjVVBTVFJFQU19LCBidXQgb25seSBpZiB0aGUgdXBzdHJlYW0gbmFtZSBpcyB0aGUgc2FtZSBhcworCQkgKiB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBsb2NhbCBicmFuY2guCisJCSAqLworCQlTSU1QTEUsCisKKwkJLyoqCisJCSAqIFB1c2ggYWxsIGN1cnJlbnQgbG9jYWwgYnJhbmNoZXMgdGhhdCBtYXRjaCBhIGNvbmZpZ3VyZWQgcHVzaCByZWZzcGVjCisJCSAqIG9mIHRoZSByZW1vdGUgY29uZmlndXJhdGlvbi4KKwkJICovCisJCU1BVENISU5HOworCisJCXByaXZhdGUgZmluYWwgU3RyaW5nIGFsaWFzOworCisJCXByaXZhdGUgUHVzaERlZmF1bHQoKSB7CisJCQlhbGlhcyA9IG51bGw7CisJCX0KKworCQlwcml2YXRlIFB1c2hEZWZhdWx0KFN0cmluZyBhbGlhcykgeworCQkJdGhpcy5hbGlhcyA9IGFsaWFzOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBTdHJpbmcgdG9Db25maWdWYWx1ZSgpIHsKKwkJCXJldHVybiBuYW1lKCkudG9Mb3dlckNhc2UoTG9jYWxlLlJPT1QpOworCQl9CisKKwkJQE92ZXJyaWRlCisJCXB1YmxpYyBib29sZWFuIG1hdGNoQ29uZmlnVmFsdWUoU3RyaW5nIGluKSB7CisJCQlyZXR1cm4gdG9Db25maWdWYWx1ZSgpLmVxdWFsc0lnbm9yZUNhc2UoaW4pCisJCQkJCXx8IChhbGlhcyAhPSBudWxsICYmIGFsaWFzLmVxdWFsc0lnbm9yZUNhc2UoaW4pKTsKKwkJfQorCX0KKworCXByaXZhdGUgZmluYWwgUHVzaFJlY3Vyc2VTdWJtb2R1bGVzTW9kZSByZWN1cnNlU3VibW9kdWxlczsKKworCXByaXZhdGUgZmluYWwgUHVzaERlZmF1bHQgcHVzaERlZmF1bHQ7CisKKwkvKioKKwkgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlLgorCSAqCisJICogQHBhcmFtIGNvbmZpZworCSAqICAgICAgICAgICAge0BsaW5rIENvbmZpZ30gdG8gZmlsbCB0aGUge0BsaW5rIFB1c2hDb25maWd9IGZyb20KKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIFB1c2hDb25maWcoQ29uZmlnIGNvbmZpZykgeworCQlyZWN1cnNlU3VibW9kdWxlcyA9IGNvbmZpZy5nZXRFbnVtKENvbmZpZ0NvbnN0YW50cy5DT05GSUdfUFVTSF9TRUNUSU9OLAorCQkJCW51bGwsIENvbmZpZ0NvbnN0YW50cy5DT05GSUdfS0VZX1JFQ1VSU0VfU1VCTU9EVUxFUywKKwkJCQlQdXNoUmVjdXJzZVN1Ym1vZHVsZXNNb2RlLk5PKTsKKwkJcHVzaERlZmF1bHQgPSBjb25maWcuZ2V0RW51bShDb25maWdDb25zdGFudHMuQ09ORklHX1BVU0hfU0VDVElPTiwgbnVsbCwKKwkJCQlDb25maWdDb25zdGFudHMuQ09ORklHX0tFWV9ERUZBVUxULCBQdXNoRGVmYXVsdC5TSU1QTEUpOworCX0KKworCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgZ2l0IGNvbmZpZyB7QGNvZGUgcHVzaC5yZWN1cnNlU3VibW9kdWxlc30uCisJICoKKwkgKiBAcmV0dXJuIHRoZSB2YWx1ZQorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgUHVzaFJlY3Vyc2VTdWJtb2R1bGVzTW9kZSBnZXRSZWN1cnNlU3VibW9kdWxlcygpIHsKKwkJcmV0dXJuIHJlY3Vyc2VTdWJtb2R1bGVzOworCX0KKworCS8qKgorCSAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgZ2l0IGNvbmZpZyB7QGNvZGUgcHVzaC5kZWZhdWx0fS4KKwkgKgorCSAqIEByZXR1cm4gdGhlIHZhbHVlCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBQdXNoRGVmYXVsdCBnZXRQdXNoRGVmYXVsdCgpIHsKKwkJcmV0dXJuIHB1c2hEZWZhdWx0OworCX0KIH0KZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hQcm9jZXNzLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9QdXNoUHJvY2Vzcy5qYXZhCmluZGV4IGEyNDRjNTUuLjk0MmRhZDQgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1B1c2hQcm9jZXNzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUHVzaFByb2Nlc3MuamF2YQpAQCAtMTgsMTEgKzE4LDE1IEBACiBpbXBvcnQgamF2YS51dGlsLkxpbmtlZEhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLkxpc3Q7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CiAKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFwaS5lcnJvcnMuQWJvcnRlZEJ5SG9va0V4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5NaXNzaW5nT2JqZWN0RXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLk5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5UcmFuc3BvcnRFeGNlcHRpb247CitpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5ob29rcy5QcmVQdXNoSG9vazsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OworaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5PYmplY3RJZDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Qcm9ncmVzc01vbml0b3I7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmOwpAQCAtNTgsNiArNjIsOCBAQCBjbGFzcyBQdXNoUHJvY2VzcyB7CiAJLyoqIEEgbGlzdCBvZiBvcHRpb24gc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBwdXNoICovCiAJcHJpdmF0ZSBMaXN0PFN0cmluZz4gcHVzaE9wdGlvbnM7CiAKKwlwcml2YXRlIGZpbmFsIFByZVB1c2hIb29rIHByZVB1c2g7CisKIAkvKioKIAkgKiBDcmVhdGUgcHJvY2VzcyBmb3Igc3BlY2lmaWVkIHRyYW5zcG9ydCBhbmQgcmVmcyB1cGRhdGVzIHNwZWNpZmljYXRpb24uCiAJICoKQEAgLTY2LDEyICs3MiwxNCBAQCBjbGFzcyBQdXNoUHJvY2VzcyB7CiAJICogICAgICAgICAgICBjb25uZWN0aW9uLgogCSAqIEBwYXJhbSB0b1B1c2gKIAkgKiAgICAgICAgICAgIHNwZWNpZmljYXRpb24gb2YgcmVmcyB1cGRhdGVzIChhbmQgbG9jYWwgdHJhY2tpbmcgYnJhbmNoZXMpLgotCSAqCisJICogQHBhcmFtIHByZVB1c2gKKwkgKiAgICAgICAgICAgIHtAbGluayBQcmVQdXNoSG9va30gdG8gcnVuIGFmdGVyIHRoZSByZW1vdGUgYWR2ZXJ0aXNlbWVudCBoYXMKKwkgKiAgICAgICAgICAgIGJlZW4gZ290dGVuCiAJICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24KIAkgKi8KLQlQdXNoUHJvY2VzcyhmaW5hbCBUcmFuc3BvcnQgdHJhbnNwb3J0LAotCQkJZmluYWwgQ29sbGVjdGlvbjxSZW1vdGVSZWZVcGRhdGU+IHRvUHVzaCkgdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7Ci0JCXRoaXModHJhbnNwb3J0LCB0b1B1c2gsIG51bGwpOworCVB1c2hQcm9jZXNzKFRyYW5zcG9ydCB0cmFuc3BvcnQsIENvbGxlY3Rpb248UmVtb3RlUmVmVXBkYXRlPiB0b1B1c2gsCisJCQlQcmVQdXNoSG9vayBwcmVQdXNoKSB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uIHsKKwkJdGhpcyh0cmFuc3BvcnQsIHRvUHVzaCwgcHJlUHVzaCwgbnVsbCk7CiAJfQogCiAJLyoqCkBAIC04MiwxNiArOTAsMTkgQEAgY2xhc3MgUHVzaFByb2Nlc3MgewogCSAqICAgICAgICAgICAgY29ubmVjdGlvbi4KIAkgKiBAcGFyYW0gdG9QdXNoCiAJICogICAgICAgICAgICBzcGVjaWZpY2F0aW9uIG9mIHJlZnMgdXBkYXRlcyAoYW5kIGxvY2FsIHRyYWNraW5nIGJyYW5jaGVzKS4KKwkgKiBAcGFyYW0gcHJlUHVzaAorCSAqICAgICAgICAgICAge0BsaW5rIFByZVB1c2hIb29rfSB0byBydW4gYWZ0ZXIgdGhlIHJlbW90ZSBhZHZlcnRpc2VtZW50IGhhcworCSAqICAgICAgICAgICAgYmVlbiBnb3R0ZW4KIAkgKiBAcGFyYW0gb3V0CiAJICogICAgICAgICAgICBPdXRwdXRTdHJlYW0gdG8gd3JpdGUgbWVzc2FnZXMgdG8KIAkgKiBAdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbgogCSAqLwotCVB1c2hQcm9jZXNzKGZpbmFsIFRyYW5zcG9ydCB0cmFuc3BvcnQsCi0JCQlmaW5hbCBDb2xsZWN0aW9uPFJlbW90ZVJlZlVwZGF0ZT4gdG9QdXNoLCBPdXRwdXRTdHJlYW0gb3V0KQotCQkJdGhyb3dzIFRyYW5zcG9ydEV4Y2VwdGlvbiB7CisJUHVzaFByb2Nlc3MoVHJhbnNwb3J0IHRyYW5zcG9ydCwgQ29sbGVjdGlvbjxSZW1vdGVSZWZVcGRhdGU+IHRvUHVzaCwKKwkJCVByZVB1c2hIb29rIHByZVB1c2gsIE91dHB1dFN0cmVhbSBvdXQpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24gewogCQl0aGlzLndhbGtlciA9IG5ldyBSZXZXYWxrKHRyYW5zcG9ydC5sb2NhbCk7CiAJCXRoaXMudHJhbnNwb3J0ID0gdHJhbnNwb3J0OwogCQl0aGlzLnRvUHVzaCA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKwkJdGhpcy5wcmVQdXNoID0gcHJlUHVzaDsKIAkJdGhpcy5vdXQgPSBvdXQ7CiAJCXRoaXMucHVzaE9wdGlvbnMgPSB0cmFuc3BvcnQuZ2V0UHVzaE9wdGlvbnMoKTsKIAkJZm9yIChSZW1vdGVSZWZVcGRhdGUgcnJ1IDogdG9QdXNoKSB7CkBAIC0xMjksMTAgKzE0MCwzOCBAQCBQdXNoUmVzdWx0IGV4ZWN1dGUoUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpCiAJCQkJcmVzLnNldEFkdmVydGlzZWRSZWZzKHRyYW5zcG9ydC5nZXRVUkkoKSwgY29ubmVjdGlvbgogCQkJCQkJLmdldFJlZnNNYXAoKSk7CiAJCQkJcmVzLnBlZXJVc2VyQWdlbnQgPSBjb25uZWN0aW9uLmdldFBlZXJVc2VyQWdlbnQoKTsKLQkJCQlyZXMuc2V0UmVtb3RlVXBkYXRlcyh0b1B1c2gpOwogCQkJCW1vbml0b3IuZW5kVGFzaygpOwogCisJCQkJTWFwPFN0cmluZywgUmVtb3RlUmVmVXBkYXRlPiBleHBhbmRlZCA9IGV4cGFuZE1hdGNoaW5nKCk7CisJCQkJdG9QdXNoLmNsZWFyKCk7CisJCQkJdG9QdXNoLnB1dEFsbChleHBhbmRlZCk7CisKKwkJCQlyZXMuc2V0UmVtb3RlVXBkYXRlcyh0b1B1c2gpOwogCQkJCWZpbmFsIE1hcDxTdHJpbmcsIFJlbW90ZVJlZlVwZGF0ZT4gcHJlcHJvY2Vzc2VkID0gcHJlcGFyZVJlbW90ZVVwZGF0ZXMoKTsKKwkJCQlMaXN0PFJlbW90ZVJlZlVwZGF0ZT4gd2lsbEJlQXR0ZW1wdGVkID0gcHJlcHJvY2Vzc2VkLnZhbHVlcygpCisJCQkJCQkuc3RyZWFtKCkuZmlsdGVyKHUgLT4geworCQkJCQkJCXN3aXRjaCAodS5nZXRTdGF0dXMoKSkgeworCQkJCQkJCWNhc2UgTk9OX0VYSVNUSU5HOgorCQkJCQkJCWNhc2UgUkVKRUNURURfTk9ERUxFVEU6CisJCQkJCQkJY2FzZSBSRUpFQ1RFRF9OT05GQVNURk9SV0FSRDoKKwkJCQkJCQljYXNlIFJFSkVDVEVEX09USEVSX1JFQVNPTjoKKwkJCQkJCQljYXNlIFJFSkVDVEVEX1JFTU9URV9DSEFOR0VEOgorCQkJCQkJCWNhc2UgVVBfVE9fREFURToKKwkJCQkJCQkJcmV0dXJuIGZhbHNlOworCQkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJCXJldHVybiB0cnVlOworCQkJCQkJCX0KKwkJCQkJCX0pLmNvbGxlY3QoQ29sbGVjdG9ycy50b0xpc3QoKSk7CisJCQkJaWYgKCF3aWxsQmVBdHRlbXB0ZWQuaXNFbXB0eSgpKSB7CisJCQkJCWlmIChwcmVQdXNoICE9IG51bGwpIHsKKwkJCQkJCXRyeSB7CisJCQkJCQkJcHJlUHVzaC5zZXRSZWZzKHdpbGxCZUF0dGVtcHRlZCk7CisJCQkJCQkJcHJlUHVzaC5jYWxsKCk7CisJCQkJCQl9IGNhdGNoIChBYm9ydGVkQnlIb29rRXhjZXB0aW9uIHwgSU9FeGNlcHRpb24gZSkgeworCQkJCQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQogCQkJCWlmICh0cmFuc3BvcnQuaXNEcnlSdW4oKSkKIAkJCQkJbW9kaWZ5VXBkYXRlc0ZvckRyeVJ1bigpOwogCQkJCWVsc2UgaWYgKCFwcmVwcm9jZXNzZWQuaXNFbXB0eSgpKQpAQCAtMjAxLDI1ICsyNDAsOCBAQCBwcml2YXRlIE1hcDxTdHJpbmcsIFJlbW90ZVJlZlVwZGF0ZT4gcHJlcGFyZVJlbW90ZVVwZGF0ZXMoKQogCQkJCWNvbnRpbnVlOwogCQkJfQogCi0JCQkvLyBjaGVjayBmb3IgZmFzdC1mb3J3YXJkOgotCQkJLy8gLSBib3RoIG9sZCBhbmQgbmV3IHJlZiBtdXN0IHBvaW50IHRvIGNvbW1pdHMsIEFORAotCQkJLy8gLSBib3RoIG9mIHRoZW0gbXVzdCBiZSBrbm93biBmb3IgdXMsIGV4aXN0IGluIHJlcG9zaXRvcnksIEFORAotCQkJLy8gLSBvbGQgY29tbWl0IG11c3QgYmUgYW5jZXN0b3Igb2YgbmV3IGNvbW1pdAotCQkJYm9vbGVhbiBmYXN0Rm9yd2FyZCA9IHRydWU7Ci0JCQl0cnkgewotCQkJCVJldk9iamVjdCBvbGRSZXYgPSB3YWxrZXIucGFyc2VBbnkoYWR2ZXJ0aXNlZE9sZCk7Ci0JCQkJZmluYWwgUmV2T2JqZWN0IG5ld1JldiA9IHdhbGtlci5wYXJzZUFueShycnUuZ2V0TmV3T2JqZWN0SWQoKSk7Ci0JCQkJaWYgKCEob2xkUmV2IGluc3RhbmNlb2YgUmV2Q29tbWl0KQotCQkJCQkJfHwgIShuZXdSZXYgaW5zdGFuY2VvZiBSZXZDb21taXQpCi0JCQkJCQl8fCAhd2Fsa2VyLmlzTWVyZ2VkSW50bygoUmV2Q29tbWl0KSBvbGRSZXYsCi0JCQkJCQkJCShSZXZDb21taXQpIG5ld1JldikpCi0JCQkJCWZhc3RGb3J3YXJkID0gZmFsc2U7Ci0JCQl9IGNhdGNoIChNaXNzaW5nT2JqZWN0RXhjZXB0aW9uIHgpIHsKLQkJCQlmYXN0Rm9yd2FyZCA9IGZhbHNlOwotCQkJfSBjYXRjaCAoRXhjZXB0aW9uIHgpIHsKLQkJCQl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKHRyYW5zcG9ydC5nZXRVUkkoKSwgTWVzc2FnZUZvcm1hdC5mb3JtYXQoCi0JCQkJCQlKR2l0VGV4dC5nZXQoKS5yZWFkaW5nT2JqZWN0c0Zyb21Mb2NhbFJlcG9zaXRvcnlGYWlsZWQsIHguZ2V0TWVzc2FnZSgpKSwgeCk7Ci0JCQl9CisJCQlib29sZWFuIGZhc3RGb3J3YXJkID0gaXNGYXN0Rm9yd2FyZChhZHZlcnRpc2VkT2xkLAorCQkJCQlycnUuZ2V0TmV3T2JqZWN0SWQoKSk7CiAJCQlycnUuc2V0RmFzdEZvcndhcmQoZmFzdEZvcndhcmQpOwogCQkJaWYgKCFmYXN0Rm9yd2FyZCAmJiAhcnJ1LmlzRm9yY2VVcGRhdGUoKSkgewogCQkJCXJydS5zZXRTdGF0dXMoU3RhdHVzLlJFSkVDVEVEX05PTkZBU1RGT1JXQVJEKTsKQEAgLTIzMyw2ICsyNTUsMTM0IEBAIHByaXZhdGUgTWFwPFN0cmluZywgUmVtb3RlUmVmVXBkYXRlPiBwcmVwYXJlUmVtb3RlVXBkYXRlcygpCiAJCXJldHVybiByZXN1bHQ7CiAJfQogCisJLyoqCisJICogRGV0ZXJtaW5lcyB3aGV0aGVyIGFuIHVwZGF0ZSBmcm9tIHtAY29kZSBvbGRPaWR9IHRvIHtAY29kZSBuZXdPaWR9IGlzIGEKKwkgKiBmYXN0LWZvcndhcmQgdXBkYXRlOgorCSAqIDx1bD4KKwkgKiA8bGk+Ym90aCBvbGQgYW5kIG5ldyBtdXN0IGJlIGNvbW1pdHMsIEFORDwvbGk+CisJICogPGxpPmJvdGggb2YgdGhlbSBtdXN0IGJlIGtub3duIHRvIHVzIGFuZCBleGlzdCBpbiB0aGUgcmVwb3NpdG9yeSwKKwkgKiBBTkQ8L2xpPgorCSAqIDxsaT50aGUgb2xkIGNvbW1pdCBtdXN0IGJlIGFuIGFuY2VzdG9yIG9mIHRoZSBuZXcgY29tbWl0LjwvbGk+CisJICogPC91bD4KKwkgKgorCSAqIEBwYXJhbSBvbGRPaWQKKwkgKiAgICAgICAgICAgIHtAbGluayBPYmplY3RJZH3CoG9mIHRoZSBvbGQgY29tbWl0CisJICogQHBhcmFtIG5ld09pZAorCSAqICAgICAgICAgICAge0BsaW5rIE9iamVjdElkfcKgb2YgdGhlIG5ldyBjb21taXQKKwkgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgdXBkYXRlIGZhc3QtZm9yd2FyZHMsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCisJICogQHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24KKwkgKi8KKwlwcml2YXRlIGJvb2xlYW4gaXNGYXN0Rm9yd2FyZChPYmplY3RJZCBvbGRPaWQsIE9iamVjdElkIG5ld09pZCkKKwkJCXRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24geworCQl0cnkgeworCQkJUmV2T2JqZWN0IG9sZFJldiA9IHdhbGtlci5wYXJzZUFueShvbGRPaWQpOworCQkJUmV2T2JqZWN0IG5ld1JldiA9IHdhbGtlci5wYXJzZUFueShuZXdPaWQpOworCQkJaWYgKCEob2xkUmV2IGluc3RhbmNlb2YgUmV2Q29tbWl0KSB8fCAhKG5ld1JldiBpbnN0YW5jZW9mIFJldkNvbW1pdCkKKwkJCQkJfHwgIXdhbGtlci5pc01lcmdlZEludG8oKFJldkNvbW1pdCkgb2xkUmV2LAorCQkJCQkJCShSZXZDb21taXQpIG5ld1JldikpIHsKKwkJCQlyZXR1cm4gZmFsc2U7CisJCQl9CisJCX0gY2F0Y2ggKE1pc3NpbmdPYmplY3RFeGNlcHRpb24geCkgeworCQkJcmV0dXJuIGZhbHNlOworCQl9IGNhdGNoIChFeGNlcHRpb24geCkgeworCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbih0cmFuc3BvcnQuZ2V0VVJJKCksCisJCQkJCU1lc3NhZ2VGb3JtYXQuZm9ybWF0KEpHaXRUZXh0CisJCQkJCQkJLmdldCgpLnJlYWRpbmdPYmplY3RzRnJvbUxvY2FsUmVwb3NpdG9yeUZhaWxlZCwKKwkJCQkJCQl4LmdldE1lc3NhZ2UoKSksCisJCQkJCXgpOworCQl9CisJCXJldHVybiB0cnVlOworCX0KKworCS8qKgorCSAqIEV4cGFuZHMgYWxsIHBsYWNlaG9sZGVyIHtAbGluayBSZW1vdGVSZWZVcGRhdGV9cyBmb3IgIm1hdGNoaW5nIgorCSAqIHtAbGluayBSZWZTcGVjfXMgIjoiIGluIHtAbGluayAjdG9QdXNofSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG1hcCBpbgorCSAqIHdoaWNoIHRoZSBwbGFjZWhvbGRlcnMgaGF2ZSBiZWVuIHJlcGxhY2VkIGJ5IHRoZWlyIGV4cGFuc2lvbi4KKwkgKgorCSAqIEByZXR1cm4gYSBuZXcgbWFwIG9mIHtAbGluayBSZW1vdGVSZWZVcGRhdGV9cyBrZXllZCBieSByZW1vdGUgbmFtZQorCSAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlIGV4cGFuc2lvbiByZXN1bHRzIGluIGR1cGxpY2F0ZSB1cGRhdGVzCisJICovCisJcHJpdmF0ZSBNYXA8U3RyaW5nLCBSZW1vdGVSZWZVcGRhdGU+IGV4cGFuZE1hdGNoaW5nKCkKKwkJCXRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24geworCQlNYXA8U3RyaW5nLCBSZW1vdGVSZWZVcGRhdGU+IHJlc3VsdCA9IG5ldyBMaW5rZWRIYXNoTWFwPD4oKTsKKwkJYm9vbGVhbiBoYWRNYXRjaCA9IGZhbHNlOworCQlmb3IgKFJlbW90ZVJlZlVwZGF0ZSB1cGRhdGUgOiB0b1B1c2gudmFsdWVzKCkpIHsKKwkJCWlmICh1cGRhdGUuaXNNYXRjaGluZygpKSB7CisJCQkJaWYgKGhhZE1hdGNoKSB7CisJCQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJSkdpdFRleHQuZ2V0KCkuZHVwbGljYXRlUmVtb3RlUmVmVXBkYXRlSXNJbGxlZ2FsLAorCQkJCQkJCSI6IikpOyAvLyROT04tTkxTLTEkCisJCQkJfQorCQkJCWV4cGFuZE1hdGNoaW5nKHJlc3VsdCwgdXBkYXRlKTsKKwkJCQloYWRNYXRjaCA9IHRydWU7CisJCQl9IGVsc2UgaWYgKHJlc3VsdC5wdXQodXBkYXRlLmdldFJlbW90ZU5hbWUoKSwgdXBkYXRlKSAhPSBudWxsKSB7CisJCQkJdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCUpHaXRUZXh0LmdldCgpLmR1cGxpY2F0ZVJlbW90ZVJlZlVwZGF0ZUlzSWxsZWdhbCwKKwkJCQkJCXVwZGF0ZS5nZXRSZW1vdGVOYW1lKCkpKTsKKwkJCX0KKwkJfQorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCS8qKgorCSAqIEV4cGFuZHMgdGhlIHBsYWNlaG9sZGVyIHtAbGluayBSZW1vdGVSZWZVcGRhdGV9IHtAY29kZSBtYXRjaH0gZm9yIGEKKwkgKiAibWF0Y2hpbmciIHtAbGluayBSZWZTcGVjfSAiOiIgb3IgIis6IiBhbmQgcHV0cyB0aGUgZXhwYW5zaW9uIGludG8gdGhlCisJICogZ2l2ZW4gbWFwIHtAY29kZSB1cGRhdGVzfS4KKwkgKgorCSAqIEBwYXJhbSB1cGRhdGVzCisJICogICAgICAgICAgICBtYXAgdG8gcHV0IHRoZSBleHBhbnNpb24gaW4KKwkgKiBAcGFyYW0gbWF0Y2gKKwkgKiAgICAgICAgICAgIHRoZSBwbGFjZWhvbGRlciB7QGxpbmsgUmVtb3RlUmVmVXBkYXRlfSB0byBleHBhbmQKKwkgKgorCSAqIEB0aHJvd3MgVHJhbnNwb3J0RXhjZXB0aW9uCisJICogICAgICAgICAgICAgaWYgdGhlIGV4cGFuc2lvbiByZXN1bHRzIGluIGR1cGxpY2F0ZSB1cGRhdGVzLCBvciB0aGUgbG9jYWwKKwkgKiAgICAgICAgICAgICBicmFuY2hlcyBjYW5ub3QgYmUgZGV0ZXJtaW5lZAorCSAqLworCXByaXZhdGUgdm9pZCBleHBhbmRNYXRjaGluZyhNYXA8U3RyaW5nLCBSZW1vdGVSZWZVcGRhdGU+IHVwZGF0ZXMsCisJCQlSZW1vdGVSZWZVcGRhdGUgbWF0Y2gpIHRocm93cyBUcmFuc3BvcnRFeGNlcHRpb24geworCQl0cnkgeworCQkJTWFwPFN0cmluZywgUmVmPiBhZHZlcnRpc2VtZW50ID0gY29ubmVjdGlvbi5nZXRSZWZzTWFwKCk7CisJCQlDb2xsZWN0aW9uPFJlZlNwZWM+IGZldGNoU3BlY3MgPSBtYXRjaC5nZXRGZXRjaFNwZWNzKCk7CisJCQlib29sZWFuIGZvcmNlVXBkYXRlID0gbWF0Y2guaXNGb3JjZVVwZGF0ZSgpOworCQkJZm9yIChSZWYgbG9jYWwgOiB0cmFuc3BvcnQubG9jYWwuZ2V0UmVmRGF0YWJhc2UoKQorCQkJCQkuZ2V0UmVmc0J5UHJlZml4KENvbnN0YW50cy5SX0hFQURTKSkgeworCQkJCWlmIChsb2NhbC5pc1N5bWJvbGljKCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCVN0cmluZyBuYW1lID0gbG9jYWwuZ2V0TmFtZSgpOworCQkJCVJlZiBhZHZlcnRpc2VkID0gYWR2ZXJ0aXNlbWVudC5nZXQobmFtZSk7CisJCQkJaWYgKGFkdmVydGlzZWQgPT0gbnVsbCB8fCBhZHZlcnRpc2VkLmlzU3ltYm9saWMoKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJT2JqZWN0SWQgb2xkT2lkID0gYWR2ZXJ0aXNlZC5nZXRPYmplY3RJZCgpOworCQkJCWlmIChvbGRPaWQgPT0gbnVsbCB8fCBPYmplY3RJZC56ZXJvSWQoKS5lcXVhbHMob2xkT2lkKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJT2JqZWN0SWQgbmV3T2lkID0gbG9jYWwuZ2V0T2JqZWN0SWQoKTsKKwkJCQlpZiAobmV3T2lkID09IG51bGwgfHwgT2JqZWN0SWQuemVyb0lkKCkuZXF1YWxzKG5ld09pZCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJCQkJUmVtb3RlUmVmVXBkYXRlIHJydSA9IG5ldyBSZW1vdGVSZWZVcGRhdGUodHJhbnNwb3J0LmxvY2FsLCBuYW1lLAorCQkJCQkJbmV3T2lkLCBuYW1lLCBmb3JjZVVwZGF0ZSwKKwkJCQkJCVRyYW5zcG9ydC5maW5kVHJhY2tpbmdSZWZOYW1lKG5hbWUsIGZldGNoU3BlY3MpLAorCQkJCQkJb2xkT2lkKTsKKwkJCQlpZiAodXBkYXRlcy5wdXQocnJ1LmdldFJlbW90ZU5hbWUoKSwgcnJ1KSAhPSBudWxsKSB7CisJCQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdC5mb3JtYXQoCisJCQkJCQkJSkdpdFRleHQuZ2V0KCkuZHVwbGljYXRlUmVtb3RlUmVmVXBkYXRlSXNJbGxlZ2FsLAorCQkJCQkJCXJydS5nZXRSZW1vdGVOYW1lKCkpKTsKKwkJCQl9CisJCQl9CisJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIHgpIHsKKwkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24odHJhbnNwb3J0LmdldFVSSSgpLAorCQkJCQlNZXNzYWdlRm9ybWF0LmZvcm1hdChKR2l0VGV4dAorCQkJCQkJCS5nZXQoKS5yZWFkaW5nT2JqZWN0c0Zyb21Mb2NhbFJlcG9zaXRvcnlGYWlsZWQsCisJCQkJCQkJeC5nZXRNZXNzYWdlKCkpLAorCQkJCQl4KTsKKwkJfQorCX0KKwogCXByaXZhdGUgTWFwPFN0cmluZywgUmVtb3RlUmVmVXBkYXRlPiByZWplY3RBbGwoKSB7CiAJCWZvciAoUmVtb3RlUmVmVXBkYXRlIHJydSA6IHRvUHVzaC52YWx1ZXMoKSkgewogCQkJaWYgKHJydS5nZXRTdGF0dXMoKSA9PSBTdGF0dXMuTk9UX0FUVEVNUFRFRCkgewpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUmVmU3BlYy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUmVmU3BlYy5qYXZhCmluZGV4IGFjMzU3YWYuLjU2ZDAwMzYgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1JlZlNwZWMuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZWZTcGVjLmphdmEKQEAgLTEyLDExICsxMiwxMSBAQAogCiBpbXBvcnQgamF2YS5pby5TZXJpYWxpemFibGU7CiBpbXBvcnQgamF2YS50ZXh0Lk1lc3NhZ2VGb3JtYXQ7CitpbXBvcnQgamF2YS51dGlsLk9iamVjdHM7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLkNvbnN0YW50czsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5SZWY7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC51dGlsLlJlZmVyZW5jZXM7CiAKIC8qKgogICogRGVzY3JpYmVzIGhvdyByZWZzIGluIG9uZSByZXBvc2l0b3J5IGNvcHkgaW50byBhbm90aGVyIHJlcG9zaXRvcnkuCkBAIC01MCw2ICs1MCw5IEBAIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1dpbGRjYXJkKFN0cmluZyBzKSB7CiAJLyoqIElzIHRoaXMgc3BlY2lmaWNhdGlvbiBhY3R1YWxseSBhIHdpbGRjYXJkIG1hdGNoPyAqLwogCXByaXZhdGUgYm9vbGVhbiB3aWxkY2FyZDsKIAorCS8qKiBJcyB0aGlzIHRoZSBzcGVjaWFsICI6IiBSZWZTcGVjPyAqLworCXByaXZhdGUgYm9vbGVhbiBtYXRjaGluZzsKKwogCS8qKgogCSAqIEhvdyBzdHJpY3QgdG8gYmUgYWJvdXQgd2lsZGNhcmRzLgogCSAqCkBAIC03MSw2ICs3NCw3IEBAIHB1YmxpYyBlbnVtIFdpbGRjYXJkTW9kZSB7CiAJCSAqLwogCQlBTExPV19NSVNNQVRDSAogCX0KKwogCS8qKiBXaGV0aGVyIGEgd2lsZGNhcmQgaXMgYWxsb3dlZCBvbiBvbmUgc2lkZSBidXQgbm90IHRoZSBvdGhlci4gKi8KIAlwcml2YXRlIFdpbGRjYXJkTW9kZSBhbGxvd01pc21hdGNoZWRXaWxkY2FyZHM7CiAKQEAgLTg3LDYgKzkxLDcgQEAgcHVibGljIGVudW0gV2lsZGNhcmRNb2RlIHsKIAkgKiBhcHBsaWNhdGlvbnMsIGFzIGF0IGxlYXN0IG9uZSBmaWVsZCBtdXN0IGJlIHNldCB0byBtYXRjaCBhIHNvdXJjZSBuYW1lLgogCSAqLwogCXB1YmxpYyBSZWZTcGVjKCkgeworCQltYXRjaGluZyA9IGZhbHNlOwogCQlmb3JjZSA9IGZhbHNlOwogCQl3aWxkY2FyZCA9IGZhbHNlOwogCQlzcmNOYW1lID0gQ29uc3RhbnRzLkhFQUQ7CkBAIC0xMzMsMTcgKzEzOCwyNSBAQCBwdWJsaWMgUmVmU3BlYyhTdHJpbmcgc3BlYywgV2lsZGNhcmRNb2RlIG1vZGUpIHsKIAkJCXMgPSBzLnN1YnN0cmluZygxKTsKIAkJfQogCisJCWJvb2xlYW4gbWF0Y2hQdXNoU3BlYyA9IGZhbHNlOwogCQlmaW5hbCBpbnQgYyA9IHMubGFzdEluZGV4T2YoJzonKTsKIAkJaWYgKGMgPT0gMCkgewogCQkJcyA9IHMuc3Vic3RyaW5nKDEpOwotCQkJaWYgKGlzV2lsZGNhcmQocykpIHsKKwkJCWlmIChzLmlzRW1wdHkoKSkgeworCQkJCW1hdGNoUHVzaFNwZWMgPSB0cnVlOwogCQkJCXdpbGRjYXJkID0gdHJ1ZTsKLQkJCQlpZiAobW9kZSA9PSBXaWxkY2FyZE1vZGUuUkVRVUlSRV9NQVRDSCkgewotCQkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQKLQkJCQkJCQkuZm9ybWF0KEpHaXRUZXh0LmdldCgpLmludmFsaWRXaWxkY2FyZHMsIHNwZWMpKTsKKwkJCQlzcmNOYW1lID0gQ29uc3RhbnRzLlJfSEVBRFMgKyAnKic7CisJCQkJZHN0TmFtZSA9IHNyY05hbWU7CisJCQl9IGVsc2UgeworCQkJCWlmIChpc1dpbGRjYXJkKHMpKSB7CisJCQkJCXdpbGRjYXJkID0gdHJ1ZTsKKwkJCQkJaWYgKG1vZGUgPT0gV2lsZGNhcmRNb2RlLlJFUVVJUkVfTUFUQ0gpIHsKKwkJCQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oTWVzc2FnZUZvcm1hdAorCQkJCQkJCQkuZm9ybWF0KEpHaXRUZXh0LmdldCgpLmludmFsaWRXaWxkY2FyZHMsIHNwZWMpKTsKKwkJCQkJfQogCQkJCX0KKwkJCQlkc3ROYW1lID0gY2hlY2tWYWxpZChzKTsKIAkJCX0KLQkJCWRzdE5hbWUgPSBjaGVja1ZhbGlkKHMpOwogCQl9IGVsc2UgaWYgKGMgPiAwKSB7CiAJCQlTdHJpbmcgc3JjID0gcy5zdWJzdHJpbmcoMCwgYyk7CiAJCQlTdHJpbmcgZHN0ID0gcy5zdWJzdHJpbmcoYyArIDEpOwpAQCAtMTY4LDYgKzE4MSw3IEBAIHB1YmxpYyBSZWZTcGVjKFN0cmluZyBzcGVjLCBXaWxkY2FyZE1vZGUgbW9kZSkgewogCQkJfQogCQkJc3JjTmFtZSA9IGNoZWNrVmFsaWQocyk7CiAJCX0KKwkJbWF0Y2hpbmcgPSBtYXRjaFB1c2hTcGVjOwogCX0KIAogCS8qKgpAQCAtMTk1LDYgKzIwOSw3IEBAIHB1YmxpYyBSZWZTcGVjKFN0cmluZyBzcGVjKSB7CiAJfQogCiAJcHJpdmF0ZSBSZWZTcGVjKFJlZlNwZWMgcCkgeworCQltYXRjaGluZyA9IGZhbHNlOwogCQlmb3JjZSA9IHAuaXNGb3JjZVVwZGF0ZSgpOwogCQl3aWxkY2FyZCA9IHAuaXNXaWxkY2FyZCgpOwogCQlzcmNOYW1lID0gcC5nZXRTb3VyY2UoKTsKQEAgLTIwMyw2ICsyMTgsMTcgQEAgcHJpdmF0ZSBSZWZTcGVjKFJlZlNwZWMgcCkgewogCX0KIAogCS8qKgorCSAqIFRlbGxzIHdoZXRoZXIgdGhpcyB7QGxpbmsgUmVmU3BlY30gaXMgdGhlIHNwZWNpYWwgIm1hdGNoaW5nIiBSZWZTcGVjICI6IgorCSAqIGZvciBwdXNoaW5nLgorCSAqCisJICogQHJldHVybiB3aGV0aGVyIHRoaXMgaXMgYSAibWF0Y2hpbmciIFJlZlNwZWMKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIGJvb2xlYW4gaXNNYXRjaGluZygpIHsKKwkJcmV0dXJuIG1hdGNoaW5nOworCX0KKworCS8qKgogCSAqIENoZWNrIGlmIHRoaXMgc3BlY2lmaWNhdGlvbiB3YW50cyB0byBmb3JjZWZ1bGx5IHVwZGF0ZSB0aGUgZGVzdGluYXRpb24uCiAJICoKIAkgKiBAcmV0dXJuIHRydWUgaWYgdGhpcyBzcGVjaWZpY2F0aW9uIGFza3MgZm9yIHVwZGF0ZXMgd2l0aG91dCBtZXJnZSB0ZXN0cy4KQEAgLTIyMCw2ICsyNDYsNyBAQCBwdWJsaWMgYm9vbGVhbiBpc0ZvcmNlVXBkYXRlKCkgewogCSAqLwogCXB1YmxpYyBSZWZTcGVjIHNldEZvcmNlVXBkYXRlKGJvb2xlYW4gZm9yY2VVcGRhdGUpIHsKIAkJZmluYWwgUmVmU3BlYyByID0gbmV3IFJlZlNwZWModGhpcyk7CisJCXIubWF0Y2hpbmcgPSBtYXRjaGluZzsKIAkJci5mb3JjZSA9IGZvcmNlVXBkYXRlOwogCQlyZXR1cm4gcjsKIAl9CkBAIC0zMjIsOCArMzQ5LDcgQEAgcHVibGljIFJlZlNwZWMgc2V0RGVzdGluYXRpb24oU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAJICogICAgICAgICAgICAgVGhlIHdpbGRjYXJkIHN0YXR1cyBvZiB0aGUgbmV3IHNvdXJjZSBkaXNhZ3JlZXMgd2l0aCB0aGUKIAkgKiAgICAgICAgICAgICB3aWxkY2FyZCBzdGF0dXMgb2YgdGhlIG5ldyBkZXN0aW5hdGlvbi4KIAkgKi8KLQlwdWJsaWMgUmVmU3BlYyBzZXRTb3VyY2VEZXN0aW5hdGlvbihmaW5hbCBTdHJpbmcgc291cmNlLAotCQkJZmluYWwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CisJcHVibGljIFJlZlNwZWMgc2V0U291cmNlRGVzdGluYXRpb24oU3RyaW5nIHNvdXJjZSwgU3RyaW5nIGRlc3RpbmF0aW9uKSB7CiAJCWlmIChpc1dpbGRjYXJkKHNvdXJjZSkgIT0gaXNXaWxkY2FyZChkZXN0aW5hdGlvbikpCiAJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKEpHaXRUZXh0LmdldCgpLnNvdXJjZURlc3RpbmF0aW9uTXVzdE1hdGNoKTsKIAkJZmluYWwgUmVmU3BlYyByID0gbmV3IFJlZlNwZWModGhpcyk7CkBAIC01NDEsMzcgKzU2NywzNiBAQCBwdWJsaWMgYm9vbGVhbiBlcXVhbHMoT2JqZWN0IG9iaikgewogCQlpZiAoIShvYmogaW5zdGFuY2VvZiBSZWZTcGVjKSkKIAkJCXJldHVybiBmYWxzZTsKIAkJZmluYWwgUmVmU3BlYyBiID0gKFJlZlNwZWMpIG9iajsKLQkJaWYgKGlzRm9yY2VVcGRhdGUoKSAhPSBiLmlzRm9yY2VVcGRhdGUoKSkKKwkJaWYgKGlzRm9yY2VVcGRhdGUoKSAhPSBiLmlzRm9yY2VVcGRhdGUoKSkgewogCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoaXNXaWxkY2FyZCgpICE9IGIuaXNXaWxkY2FyZCgpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoIWVxKGdldFNvdXJjZSgpLCBiLmdldFNvdXJjZSgpKSkKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKCFlcShnZXREZXN0aW5hdGlvbigpLCBiLmdldERlc3RpbmF0aW9uKCkpKQotCQkJcmV0dXJuIGZhbHNlOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGVxKFN0cmluZyBhLCBTdHJpbmcgYikgewotCQlpZiAoUmVmZXJlbmNlcy5pc1NhbWVPYmplY3QoYSwgYikpIHsKLQkJCXJldHVybiB0cnVlOwogCQl9Ci0JCWlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKQorCQlpZiAoaXNNYXRjaGluZygpKSB7CisJCQlyZXR1cm4gYi5pc01hdGNoaW5nKCk7CisJCX0gZWxzZSBpZiAoYi5pc01hdGNoaW5nKCkpIHsKIAkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIGEuZXF1YWxzKGIpOworCQl9CisJCXJldHVybiBpc1dpbGRjYXJkKCkgPT0gYi5pc1dpbGRjYXJkKCkKKwkJCQkmJiBPYmplY3RzLmVxdWFscyhnZXRTb3VyY2UoKSwgYi5nZXRTb3VyY2UoKSkKKwkJCQkmJiBPYmplY3RzLmVxdWFscyhnZXREZXN0aW5hdGlvbigpLCBiLmdldERlc3RpbmF0aW9uKCkpOwogCX0KIAogCS8qKiB7QGluaGVyaXREb2N9ICovCiAJQE92ZXJyaWRlCiAJcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKIAkJZmluYWwgU3RyaW5nQnVpbGRlciByID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKLQkJaWYgKGlzRm9yY2VVcGRhdGUoKSkKKwkJaWYgKGlzRm9yY2VVcGRhdGUoKSkgewogCQkJci5hcHBlbmQoJysnKTsKLQkJaWYgKGdldFNvdXJjZSgpICE9IG51bGwpCi0JCQlyLmFwcGVuZChnZXRTb3VyY2UoKSk7Ci0JCWlmIChnZXREZXN0aW5hdGlvbigpICE9IG51bGwpIHsKKwkJfQorCQlpZiAoaXNNYXRjaGluZygpKSB7CiAJCQlyLmFwcGVuZCgnOicpOwotCQkJci5hcHBlbmQoZ2V0RGVzdGluYXRpb24oKSk7CisJCX0gZWxzZSB7CisJCQlpZiAoZ2V0U291cmNlKCkgIT0gbnVsbCkgeworCQkJCXIuYXBwZW5kKGdldFNvdXJjZSgpKTsKKwkJCX0KKwkJCWlmIChnZXREZXN0aW5hdGlvbigpICE9IG51bGwpIHsKKwkJCQlyLmFwcGVuZCgnOicpOworCQkJCXIuYXBwZW5kKGdldERlc3RpbmF0aW9uKCkpOworCQkJfQogCQl9CiAJCXJldHVybiByLnRvU3RyaW5nKCk7CiAJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvUmVtb3RlUmVmVXBkYXRlLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZW1vdGVSZWZVcGRhdGUuamF2YQppbmRleCA0M2VhYWM3Li4yMThlNjJjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZW1vdGVSZWZVcGRhdGUuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9SZW1vdGVSZWZVcGRhdGUuamF2YQpAQCAtMTIsNyArMTIsOSBAQAogCiBpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKIGltcG9ydCBqYXZhLnRleHQuTWVzc2FnZUZvcm1hdDsKK2ltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKIAoraW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTm9uTnVsbDsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmludGVybmFsLkpHaXRUZXh0OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLk9iamVjdElkOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlZjsKQEAgLTExNiw2ICsxMTgsMTIgQEAgcHVibGljIGVudW0gU3RhdHVzIHsKIAlwcml2YXRlIFJlZlVwZGF0ZSBsb2NhbFVwZGF0ZTsKIAogCS8qKgorCSAqIElmIHNldCwgdGhlIFJlbW90ZVJlZlVwZGF0ZSBpcyBhIHBsYWNlaG9sZGVyIGZvciB0aGUgIm1hdGNoaW5nIiBSZWZTcGVjCisJICogdG8gYmUgZXhwYW5kZWQgYWZ0ZXIgdGhlIGFkdmVydGlzZW1lbnRzIGhhdmUgYmVlbiByZWNlaXZlZCBpbiBhIHB1c2guCisJICovCisJcHJpdmF0ZSBDb2xsZWN0aW9uPFJlZlNwZWM+IGZldGNoU3BlY3M7CisKKwkvKioKIAkgKiBDb25zdHJ1Y3QgcmVtb3RlIHJlZiB1cGRhdGUgcmVxdWVzdCBieSBwcm92aWRpbmcgYW4gdXBkYXRlIHNwZWNpZmljYXRpb24uCiAJICogT2JqZWN0IGlzIGNyZWF0ZWQgd2l0aCBkZWZhdWx0CiAJICoge0BsaW5rIG9yZy5lY2xpcHNlLmpnaXQudHJhbnNwb3J0LlJlbW90ZVJlZlVwZGF0ZS5TdGF0dXMjTk9UX0FUVEVNUFRFRH0KQEAgLTE1Nyw5ICsxNjUsOCBAQCBwdWJsaWMgZW51bSBTdGF0dXMgewogCSAqIEB0aHJvd3MgamF2YS5sYW5nLklsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgogCSAqICAgICAgICAgICAgIGlmIHNvbWUgcmVxdWlyZWQgcGFyYW1ldGVyIHdhcyBudWxsCiAJICovCi0JcHVibGljIFJlbW90ZVJlZlVwZGF0ZShmaW5hbCBSZXBvc2l0b3J5IGxvY2FsRGIsIGZpbmFsIFN0cmluZyBzcmNSZWYsCi0JCQlmaW5hbCBTdHJpbmcgcmVtb3RlTmFtZSwgZmluYWwgYm9vbGVhbiBmb3JjZVVwZGF0ZSwKLQkJCWZpbmFsIFN0cmluZyBsb2NhbE5hbWUsIGZpbmFsIE9iamVjdElkIGV4cGVjdGVkT2xkT2JqZWN0SWQpCisJcHVibGljIFJlbW90ZVJlZlVwZGF0ZShSZXBvc2l0b3J5IGxvY2FsRGIsIFN0cmluZyBzcmNSZWYsIFN0cmluZyByZW1vdGVOYW1lLAorCQkJYm9vbGVhbiBmb3JjZVVwZGF0ZSwgU3RyaW5nIGxvY2FsTmFtZSwgT2JqZWN0SWQgZXhwZWN0ZWRPbGRPYmplY3RJZCkKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCXRoaXMobG9jYWxEYiwgc3JjUmVmLCBzcmNSZWYgIT0gbnVsbCA/IGxvY2FsRGIucmVzb2x2ZShzcmNSZWYpCiAJCQkJOiBPYmplY3RJZC56ZXJvSWQoKSwgcmVtb3RlTmFtZSwgZm9yY2VVcGRhdGUsIGxvY2FsTmFtZSwKQEAgLTIwMyw5ICsyMTAsOCBAQCBwdWJsaWMgUmVtb3RlUmVmVXBkYXRlKGZpbmFsIFJlcG9zaXRvcnkgbG9jYWxEYiwgZmluYWwgU3RyaW5nIHNyY1JlZiwKIAkgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KIAkgKiAgICAgICAgICAgICBpZiBzb21lIHJlcXVpcmVkIHBhcmFtZXRlciB3YXMgbnVsbAogCSAqLwotCXB1YmxpYyBSZW1vdGVSZWZVcGRhdGUoZmluYWwgUmVwb3NpdG9yeSBsb2NhbERiLCBmaW5hbCBSZWYgc3JjUmVmLAotCQkJZmluYWwgU3RyaW5nIHJlbW90ZU5hbWUsIGZpbmFsIGJvb2xlYW4gZm9yY2VVcGRhdGUsCi0JCQlmaW5hbCBTdHJpbmcgbG9jYWxOYW1lLCBmaW5hbCBPYmplY3RJZCBleHBlY3RlZE9sZE9iamVjdElkKQorCXB1YmxpYyBSZW1vdGVSZWZVcGRhdGUoUmVwb3NpdG9yeSBsb2NhbERiLCBSZWYgc3JjUmVmLCBTdHJpbmcgcmVtb3RlTmFtZSwKKwkJCWJvb2xlYW4gZm9yY2VVcGRhdGUsIFN0cmluZyBsb2NhbE5hbWUsIE9iamVjdElkIGV4cGVjdGVkT2xkT2JqZWN0SWQpCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewogCQl0aGlzKGxvY2FsRGIsIHNyY1JlZiAhPSBudWxsID8gc3JjUmVmLmdldE5hbWUoKSA6IG51bGwsCiAJCQkJc3JjUmVmICE9IG51bGwgPyBzcmNSZWYuZ2V0T2JqZWN0SWQoKSA6IG51bGwsIHJlbW90ZU5hbWUsCkBAIC0yNTUsMjggKzI2MSw0MSBAQCBwdWJsaWMgUmVtb3RlUmVmVXBkYXRlKGZpbmFsIFJlcG9zaXRvcnkgbG9jYWxEYiwgZmluYWwgUmVmIHNyY1JlZiwKIAkgKiBAdGhyb3dzIGphdmEubGFuZy5JbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24KIAkgKiAgICAgICAgICAgICBpZiBzb21lIHJlcXVpcmVkIHBhcmFtZXRlciB3YXMgbnVsbAogCSAqLwotCXB1YmxpYyBSZW1vdGVSZWZVcGRhdGUoZmluYWwgUmVwb3NpdG9yeSBsb2NhbERiLCBmaW5hbCBTdHJpbmcgc3JjUmVmLAotCQkJZmluYWwgT2JqZWN0SWQgc3JjSWQsIGZpbmFsIFN0cmluZyByZW1vdGVOYW1lLAotCQkJZmluYWwgYm9vbGVhbiBmb3JjZVVwZGF0ZSwgZmluYWwgU3RyaW5nIGxvY2FsTmFtZSwKLQkJCWZpbmFsIE9iamVjdElkIGV4cGVjdGVkT2xkT2JqZWN0SWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChyZW1vdGVOYW1lID09IG51bGwpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKEpHaXRUZXh0LmdldCgpLnJlbW90ZU5hbWVDYW5ub3RCZU51bGwpOwotCQlpZiAoc3JjSWQgPT0gbnVsbCAmJiBzcmNSZWYgIT0gbnVsbCkKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKLQkJCQkJSkdpdFRleHQuZ2V0KCkuc291cmNlUmVmRG9lc250UmVzb2x2ZVRvQW55T2JqZWN0LCBzcmNSZWYpKTsKKwlwdWJsaWMgUmVtb3RlUmVmVXBkYXRlKFJlcG9zaXRvcnkgbG9jYWxEYiwgU3RyaW5nIHNyY1JlZiwgT2JqZWN0SWQgc3JjSWQsCisJCQlTdHJpbmcgcmVtb3RlTmFtZSwgYm9vbGVhbiBmb3JjZVVwZGF0ZSwgU3RyaW5nIGxvY2FsTmFtZSwKKwkJCU9iamVjdElkIGV4cGVjdGVkT2xkT2JqZWN0SWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisJCXRoaXMobG9jYWxEYiwgc3JjUmVmLCBzcmNJZCwgcmVtb3RlTmFtZSwgZm9yY2VVcGRhdGUsIGxvY2FsTmFtZSwgbnVsbCwKKwkJCQlleHBlY3RlZE9sZE9iamVjdElkKTsKKwl9CiAKLQkJaWYgKHNyY1JlZiAhPSBudWxsKQorCXByaXZhdGUgUmVtb3RlUmVmVXBkYXRlKFJlcG9zaXRvcnkgbG9jYWxEYiwgU3RyaW5nIHNyY1JlZiwgT2JqZWN0SWQgc3JjSWQsCisJCQlTdHJpbmcgcmVtb3RlTmFtZSwgYm9vbGVhbiBmb3JjZVVwZGF0ZSwgU3RyaW5nIGxvY2FsTmFtZSwKKwkJCUNvbGxlY3Rpb248UmVmU3BlYz4gZmV0Y2hTcGVjcywgT2JqZWN0SWQgZXhwZWN0ZWRPbGRPYmplY3RJZCkKKwkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CisJCWlmIChmZXRjaFNwZWNzID09IG51bGwpIHsKKwkJCWlmIChyZW1vdGVOYW1lID09IG51bGwpIHsKKwkJCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKAorCQkJCQkJSkdpdFRleHQuZ2V0KCkucmVtb3RlTmFtZUNhbm5vdEJlTnVsbCk7CisJCQl9CisJCQlpZiAoc3JjSWQgPT0gbnVsbCAmJiBzcmNSZWYgIT0gbnVsbCkgeworCQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihNZXNzYWdlRm9ybWF0LmZvcm1hdCgKKwkJCQkJCUpHaXRUZXh0LmdldCgpLnNvdXJjZVJlZkRvZXNudFJlc29sdmVUb0FueU9iamVjdCwKKwkJCQkJCXNyY1JlZikpOworCQkJfQorCQl9CisJCWlmIChzcmNSZWYgIT0gbnVsbCkgewogCQkJdGhpcy5zcmNSZWYgPSBzcmNSZWY7Ci0JCWVsc2UgaWYgKHNyY0lkICE9IG51bGwgJiYgIXNyY0lkLmVxdWFscyhPYmplY3RJZC56ZXJvSWQoKSkpCisJCX0gZWxzZSBpZiAoc3JjSWQgIT0gbnVsbCAmJiAhc3JjSWQuZXF1YWxzKE9iamVjdElkLnplcm9JZCgpKSkgewogCQkJdGhpcy5zcmNSZWYgPSBzcmNJZC5uYW1lKCk7Ci0JCWVsc2UKKwkJfSBlbHNlIHsKIAkJCXRoaXMuc3JjUmVmID0gbnVsbDsKLQotCQlpZiAoc3JjSWQgIT0gbnVsbCkKKwkJfQorCQlpZiAoc3JjSWQgIT0gbnVsbCkgewogCQkJdGhpcy5uZXdPYmplY3RJZCA9IHNyY0lkOwotCQllbHNlCisJCX0gZWxzZSB7CiAJCQl0aGlzLm5ld09iamVjdElkID0gT2JqZWN0SWQuemVyb0lkKCk7Ci0KKwkJfQorCQl0aGlzLmZldGNoU3BlY3MgPSBmZXRjaFNwZWNzOwogCQl0aGlzLnJlbW90ZU5hbWUgPSByZW1vdGVOYW1lOwogCQl0aGlzLmZvcmNlVXBkYXRlID0gZm9yY2VVcGRhdGU7CiAJCWlmIChsb2NhbE5hbWUgIT0gbnVsbCAmJiBsb2NhbERiICE9IG51bGwpIHsKQEAgLTI5Miw4ICszMTEsOSBAQCBlbHNlIGlmIChzcmNJZCAhPSBudWxsICYmICFzcmNJZC5lcXVhbHMoT2JqZWN0SWQuemVyb0lkKCkpKQogCQkJCQkJPyBsb2NhbFVwZGF0ZS5nZXRPbGRPYmplY3RJZCgpCiAJCQkJCQk6IE9iamVjdElkLnplcm9JZCgpLAogCQkJCQluZXdPYmplY3RJZCk7Ci0JCX0gZWxzZQorCQl9IGVsc2UgewogCQkJdHJhY2tpbmdSZWZVcGRhdGUgPSBudWxsOworCQl9CiAJCXRoaXMubG9jYWxEYiA9IGxvY2FsRGI7CiAJCXRoaXMuZXhwZWN0ZWRPbGRPYmplY3RJZCA9IGV4cGVjdGVkT2xkT2JqZWN0SWQ7CiAJCXRoaXMuc3RhdHVzID0gU3RhdHVzLk5PVF9BVFRFTVBURUQ7CkBAIC0zMTYsMTEgKzMzNiw1NyBAQCBlbHNlIGlmIChzcmNJZCAhPSBudWxsICYmICFzcmNJZC5lcXVhbHMoT2JqZWN0SWQuemVyb0lkKCkpKQogCSAqICAgICAgICAgICAgIGxvY2FsIHRyYWNraW5nIGJyYW5jaCBvciBzcmNSZWYgb2YgYmFzZSBvYmplY3Qgbm8gbG9uZ2VyIGNhbgogCSAqICAgICAgICAgICAgIGJlIHJlc29sdmVkIHRvIGFueSBvYmplY3QuCiAJICovCi0JcHVibGljIFJlbW90ZVJlZlVwZGF0ZShmaW5hbCBSZW1vdGVSZWZVcGRhdGUgYmFzZSwKLQkJCWZpbmFsIE9iamVjdElkIG5ld0V4cGVjdGVkT2xkT2JqZWN0SWQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRoaXMoYmFzZS5sb2NhbERiLCBiYXNlLnNyY1JlZiwgYmFzZS5yZW1vdGVOYW1lLCBiYXNlLmZvcmNlVXBkYXRlLAorCXB1YmxpYyBSZW1vdGVSZWZVcGRhdGUoUmVtb3RlUmVmVXBkYXRlIGJhc2UsCisJCQlPYmplY3RJZCBuZXdFeHBlY3RlZE9sZE9iamVjdElkKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQl0aGlzKGJhc2UubG9jYWxEYiwgYmFzZS5zcmNSZWYsIGJhc2UubmV3T2JqZWN0SWQsIGJhc2UucmVtb3RlTmFtZSwKKwkJCQliYXNlLmZvcmNlVXBkYXRlLAogCQkJCShiYXNlLnRyYWNraW5nUmVmVXBkYXRlID09IG51bGwgPyBudWxsIDogYmFzZS50cmFja2luZ1JlZlVwZGF0ZQotCQkJCQkJLmdldExvY2FsTmFtZSgpKSwgbmV3RXhwZWN0ZWRPbGRPYmplY3RJZCk7CisJCQkJCQkuZ2V0TG9jYWxOYW1lKCkpLAorCQkJCWJhc2UuZmV0Y2hTcGVjcywgbmV3RXhwZWN0ZWRPbGRPYmplY3RJZCk7CisJfQorCisJLyoqCisJICogQ3JlYXRlcyBhICJwbGFjZWhvbGRlciIgdXBkYXRlIGZvciB0aGUgIm1hdGNoaW5nIiBSZWZTcGVjICI6Ii4KKwkgKgorCSAqIEBwYXJhbSBsb2NhbERiCisJICogICAgICAgICAgICBsb2NhbCByZXBvc2l0b3J5IHRvIHB1c2ggZnJvbQorCSAqIEBwYXJhbSBmb3JjZVVwZGF0ZQorCSAqICAgICAgICAgICAgd2hldGhlciBub24tZmFzdC1mb3J3YXJkIHVwZGF0ZXMgc2hhbGwgYmUgYWxsb3dlZAorCSAqIEBwYXJhbSBmZXRjaFNwZWNzCisJICogICAgICAgICAgICBUaGUgZmV0Y2gge0BsaW5rIFJlZlNwZWN9cyB0byB1c2Ugd2hlbiB0aGlzIHBsYWNlaG9sZGVyIGlzCisJICogICAgICAgICAgICBleHBhbmRlZCB0byBkZXRlcm1pbmUgcmVtb3RlIHRyYWNraW5nIGJyYW5jaCB1cGRhdGVzCisJICovCisJUmVtb3RlUmVmVXBkYXRlKFJlcG9zaXRvcnkgbG9jYWxEYiwgYm9vbGVhbiBmb3JjZVVwZGF0ZSwKKwkJCUBOb25OdWxsIENvbGxlY3Rpb248UmVmU3BlYz4gZmV0Y2hTcGVjcykgeworCQl0aGlzLmxvY2FsRGIgPSBsb2NhbERiOworCQl0aGlzLmZvcmNlVXBkYXRlID0gZm9yY2VVcGRhdGU7CisJCXRoaXMuZmV0Y2hTcGVjcyA9IGZldGNoU3BlY3M7CisJCXRoaXMudHJhY2tpbmdSZWZVcGRhdGUgPSBudWxsOworCQl0aGlzLnNyY1JlZiA9IG51bGw7CisJCXRoaXMucmVtb3RlTmFtZSA9IG51bGw7CisJCXRoaXMubmV3T2JqZWN0SWQgPSBudWxsOworCQl0aGlzLnN0YXR1cyA9IFN0YXR1cy5OT1RfQVRURU1QVEVEOworCX0KKworCS8qKgorCSAqIFRlbGxzIHdoZXRoZXIgdGhpcyB7QGxpbmsgUmVtb3RlUmVmVXBkYXRlfSBpcyBhIHBsYWNlaG9sZGVyIGZvciBhCisJICogIm1hdGNoaW5nIiB7QGxpbmsgUmVmU3BlY30uCisJICoKKwkgKiBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGlzIGlzIGEgcGxhY2Vob2xkZXIsIHtAY29kZSBmYWxzZX0gb3RoZXJ3aXNlCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBib29sZWFuIGlzTWF0Y2hpbmcoKSB7CisJCXJldHVybiBmZXRjaFNwZWNzICE9IG51bGw7CisJfQorCisJLyoqCisJICogUmV0cmlldmVzIHRoZSBmZXRjaCB7QGxpbmsgUmVmU3BlY31zIG9mIHRoaXMge0BsaW5rIFJlbW90ZVJlZlVwZGF0ZX0uCisJICoKKwkgKiBAcmV0dXJuIHRoZSBmZXRjaCB7QGxpbmsgUmVmU3BlY31zLCBvciB7QGNvZGUgbnVsbH0gaWYKKwkgKiAgICAgICAgIHtAY29kZSB0aGlzLn17QGxpbmsgI2lzTWF0Y2hpbmcoKX0ge0Bjb2RlID09IGZhbHNlfQorCSAqLworCUNvbGxlY3Rpb248UmVmU3BlYz4gZ2V0RmV0Y2hTcGVjcygpIHsKKwkJcmV0dXJuIGZldGNoU3BlY3M7CiAJfQogCiAJLyoqCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9Tc2hDb25zdGFudHMuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1NzaENvbnN0YW50cy5qYXZhCmluZGV4IDIxMmE0ZTQuLjQ4Y2FjZjAgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1NzaENvbnN0YW50cy5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1NzaENvbnN0YW50cy5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCwgMjAyMCBUaG9tYXMgV29sZiA8dGhvbWFzLndvbGZAcGFyYW5vci5jaD4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDE4LCAyMDIxIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC00NCw2ICs0NCwxNCBAQCBwcml2YXRlIFNzaENvbnN0YW50cygpIHsKIAogCS8vIENvbmZpZyBmaWxlIGtleXMKIAorCS8qKgorCSAqIFByb3BlcnR5IHRvIGNvbnRyb2wgd2hldGhlciBwcml2YXRlIGtleXMgYXJlIGFkZGVkIHRvIGFuIFNTSCBhZ2VudCwgaWYKKwkgKiBvbmUgaXMgcnVubmluZywgYWZ0ZXIgaGF2aW5nIGJlZW4gbG9hZGVkLgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEFERF9LRVlTX1RPX0FHRU5UID0gIkFkZEtleXNUb0FnZW50IjsKKwogCS8qKiBLZXkgaW4gYW4gc3NoIGNvbmZpZyBmaWxlLiAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEJBVENIX01PREUgPSAiQmF0Y2hNb2RlIjsKIApAQCAtNjIsNiArNzAsMTUgQEAgcHJpdmF0ZSBTc2hDb25zdGFudHMoKSB7CiAJLyoqIEtleSBpbiBhbiBzc2ggY29uZmlnIGZpbGUuICovCiAJcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQ09OTkVDVElPTl9BVFRFTVBUUyA9ICJDb25uZWN0aW9uQXR0ZW1wdHMiOwogCisJLyoqCisJICogQW4gT3BlblNTSCB0aW1lIHZhbHVlIGZvciB0aGUgY29ubmVjdGlvbiB0aW1lb3V0LiBJbiBPcGVuU1NILCB0aGlzCisJICogaW5jbHVkZXMgZXZlcnl0aGluZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSBpbml0aWFsIGtleSBleGNoYW5nZTsgaW4gSkdpdCBpdAorCSAqIGNvdmVycyBvbmx5IHRoZSB1bmRlcmx5aW5nIFRDUCBjb25uZWN0LgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIENPTk5FQ1RfVElNRU9VVCA9ICJDb25uZWN0VGltZW91dCI7CisKIAkvKiogS2V5IGluIGFuIHNzaCBjb25maWcgZmlsZS4gKi8KIAlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBDT05UUk9MX1BBVEggPSAiQ29udHJvbFBhdGgiOwogCkBAIC0xNTksNiArMTc2LDE0IEBAIHByaXZhdGUgU3NoQ29uc3RhbnRzKCkgewogCS8qKiBLZXkgaW4gYW4gc3NoIGNvbmZpZyBmaWxlLiAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFJFTU9URV9GT1JXQVJEID0gIlJlbW90ZUZvcndhcmQiOwogCisJLyoqCisJICogKEFic29sdXRlKSBwYXRoIHRvIGEgbWlkZGxld2FyZSBsaWJyYXJ5IHRoZSBTU0ggYWdlbnQgc2hhbGwgdXNlIHRvIGxvYWQKKwkgKiBTSyAoVTJGKSBrZXlzLgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFQ1VSSVRZX0tFWV9QUk9WSURFUiA9ICJTZWN1cml0eUtleVByb3ZpZGVyIjsKKwogCS8qKiBLZXkgaW4gYW4gc3NoIGNvbmZpZyBmaWxlLiAqLwogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIFNFTkRfRU5WID0gIlNlbmRFbnYiOwogCkBAIC0yMjksNCArMjU0LDEyIEBAIHByaXZhdGUgU3NoQ29uc3RhbnRzKCkgewogCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nW10gREVGQVVMVF9JREVOVElUSUVTID0geyAvLwogCQkJSURfUlNBLCBJRF9EU0EsIElEX0VDRFNBLCBJRF9FRDI1NTE5CiAJfTsKKworCS8qKgorCSAqIE5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGhvbGRpbmcgdGhlIFVuaXggZG9tYWluIHNvY2tldCBmb3IKKwkgKiBjb21tdW5pY2F0aW9uIHdpdGggYW4gU1NIIGFnZW50LgorCSAqCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEVOVl9TU0hfQVVUSF9TT0NLRVQgPSAiU1NIX0FVVEhfU09DSyI7CiB9CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFja2luZ1JlZlVwZGF0ZS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVHJhY2tpbmdSZWZVcGRhdGUuamF2YQppbmRleCA2OTZjYTdjLi41MWJjMDdjIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFja2luZ1JlZlVwZGF0ZS5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1RyYWNraW5nUmVmVXBkYXRlLmphdmEKQEAgLTEyLDYgKzEyLDggQEAKIAogcGFja2FnZSBvcmcuZWNsaXBzZS5qZ2l0LnRyYW5zcG9ydDsKIAoraW1wb3J0IHN0YXRpYyBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHMuT0JKRUNUX0lEX0FCQlJFVl9TVFJJTkdfTEVOR1RIOworCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQW55T2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuT2JqZWN0SWQ7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVmVXBkYXRlOwpAQCAtMTg0LDkgKzE4NiwxMyBAQCBwdWJsaWMgU3RyaW5nIHRvU3RyaW5nKCkgewogCQlpZiAoZm9yY2VVcGRhdGUpCiAJCQlzYi5hcHBlbmQoIiAoZm9yY2VkKSIpOwogCQlzYi5hcHBlbmQoIiAiKTsKLQkJc2IuYXBwZW5kKG9sZE9iamVjdElkID09IG51bGwgPyAiIiA6IG9sZE9iamVjdElkLmFiYnJldmlhdGUoNykubmFtZSgpKTsKKwkJc2IuYXBwZW5kKG9sZE9iamVjdElkID09IG51bGwgPyAiIgorCQkJCTogb2xkT2JqZWN0SWQuYWJicmV2aWF0ZShPQkpFQ1RfSURfQUJCUkVWX1NUUklOR19MRU5HVEgpCisJCQkJCQkubmFtZSgpKTsKIAkJc2IuYXBwZW5kKCIuLiIpOwotCQlzYi5hcHBlbmQobmV3T2JqZWN0SWQgPT0gbnVsbCA/ICIiIDogbmV3T2JqZWN0SWQuYWJicmV2aWF0ZSg3KS5uYW1lKCkpOworCQlzYi5hcHBlbmQobmV3T2JqZWN0SWQgPT0gbnVsbCA/ICIiCisJCQkJOiBuZXdPYmplY3RJZC5hYmJyZXZpYXRlKE9CSkVDVF9JRF9BQkJSRVZfU1RSSU5HX0xFTkdUSCkKKwkJCQkJCS5uYW1lKCkpOwogCQlzYi5hcHBlbmQoIl0iKTsKIAkJcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAJfQpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVHJhbnNwb3J0LmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnQuamF2YQppbmRleCA1Yjc4MWFjLi4wZWFiNDQzIDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnQuamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9UcmFuc3BvcnQuamF2YQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA4LCBNYXJlayBaYXdpcnNraSA8bWFyZWsuemF3aXJza2lAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4LCBSb2JpbiBSb3NlbmJlcmcgPHJvYmluLnJvc2VuYmVyZ0BkZXdpcmUuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDIwIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4gYW5kIG90aGVycworICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDIyIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtNDAsNyArNDAsNiBAQAogCiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hbm5vdGF0aW9ucy5Ob25OdWxsOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuYW5ub3RhdGlvbnMuTnVsbGFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5hcGkuZXJyb3JzLkFib3J0ZWRCeUhvb2tFeGNlcHRpb247CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5lcnJvcnMuTm90U3VwcG9ydGVkRXhjZXB0aW9uOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQuZXJyb3JzLlRyYW5zcG9ydEV4Y2VwdGlvbjsKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0Lmhvb2tzLkhvb2tzOwpAQCAtNTkwLDYgKzU4OSwxMSBAQCBwdWJsaWMgc3RhdGljIENvbGxlY3Rpb248UmVtb3RlUmVmVXBkYXRlPiBmaW5kUmVtb3RlUmVmVXBkYXRlc0ZvcigKIAkJZmluYWwgQ29sbGVjdGlvbjxSZWZTcGVjPiBwcm9jUmVmcyA9IGV4cGFuZFB1c2hXaWxkY2FyZHNGb3IoZGIsIHNwZWNzKTsKIAogCQlmb3IgKFJlZlNwZWMgc3BlYyA6IHByb2NSZWZzKSB7CisJCQlpZiAoc3BlYy5pc01hdGNoaW5nKCkpIHsKKwkJCQlyZXN1bHQuYWRkKG5ldyBSZW1vdGVSZWZVcGRhdGUoZGIsIHNwZWMuaXNGb3JjZVVwZGF0ZSgpLAorCQkJCQkJZmV0Y2hTcGVjcykpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJU3RyaW5nIHNyY1NwZWMgPSBzcGVjLmdldFNvdXJjZSgpOwogCQkJZmluYWwgUmVmIHNyY1JlZiA9IGRiLmZpbmRSZWYoc3JjU3BlYyk7CiAJCQlpZiAoc3JjUmVmICE9IG51bGwpCkBAIC02NTYsMTQgKzY2MCwxOCBAQCBwdWJsaWMgc3RhdGljIENvbGxlY3Rpb248UmVtb3RlUmVmVXBkYXRlPiBmaW5kUmVtb3RlUmVmVXBkYXRlc0ZvcigKIAlwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uPFJlZlNwZWM+IGV4cGFuZFB1c2hXaWxkY2FyZHNGb3IoCiAJCQlmaW5hbCBSZXBvc2l0b3J5IGRiLCBmaW5hbCBDb2xsZWN0aW9uPFJlZlNwZWM+IHNwZWNzKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZmluYWwgTGlzdDxSZWY+IGxvY2FsUmVmcyA9IGRiLmdldFJlZkRhdGFiYXNlKCkuZ2V0UmVmcygpOwogCQlmaW5hbCBDb2xsZWN0aW9uPFJlZlNwZWM+IHByb2NSZWZzID0gbmV3IExpbmtlZEhhc2hTZXQ8PigpOwogCisJCUxpc3Q8UmVmPiBsb2NhbFJlZnMgPSBudWxsOwogCQlmb3IgKFJlZlNwZWMgc3BlYyA6IHNwZWNzKSB7Ci0JCQlpZiAoc3BlYy5pc1dpbGRjYXJkKCkpIHsKKwkJCWlmICghc3BlYy5pc01hdGNoaW5nKCkgJiYgc3BlYy5pc1dpbGRjYXJkKCkpIHsKKwkJCQlpZiAobG9jYWxSZWZzID09IG51bGwpIHsKKwkJCQkJbG9jYWxSZWZzID0gZGIuZ2V0UmVmRGF0YWJhc2UoKS5nZXRSZWZzKCk7CisJCQkJfQogCQkJCWZvciAoUmVmIGxvY2FsUmVmIDogbG9jYWxSZWZzKSB7Ci0JCQkJCWlmIChzcGVjLm1hdGNoU291cmNlKGxvY2FsUmVmKSkKKwkJCQkJaWYgKHNwZWMubWF0Y2hTb3VyY2UobG9jYWxSZWYpKSB7CiAJCQkJCQlwcm9jUmVmcy5hZGQoc3BlYy5leHBhbmRGcm9tU291cmNlKGxvY2FsUmVmKSk7CisJCQkJCX0KIAkJCQl9CiAJCQl9IGVsc2UgewogCQkJCXByb2NSZWZzLmFkZChzcGVjKTsKQEAgLTY3Miw3ICs2ODAsNyBAQCBwcml2YXRlIHN0YXRpYyBDb2xsZWN0aW9uPFJlZlNwZWM+IGV4cGFuZFB1c2hXaWxkY2FyZHNGb3IoCiAJCXJldHVybiBwcm9jUmVmczsKIAl9CiAKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgZmluZFRyYWNraW5nUmVmTmFtZShmaW5hbCBTdHJpbmcgcmVtb3RlTmFtZSwKKwlzdGF0aWMgU3RyaW5nIGZpbmRUcmFja2luZ1JlZk5hbWUoZmluYWwgU3RyaW5nIHJlbW90ZU5hbWUsCiAJCQlmaW5hbCBDb2xsZWN0aW9uPFJlZlNwZWM+IGZldGNoU3BlY3MpIHsKIAkJLy8gdHJ5IHRvIGZpbmQgbWF0Y2hpbmcgdHJhY2tpbmcgcmVmcwogCQlmb3IgKFJlZlNwZWMgZmV0Y2hTcGVjIDogZmV0Y2hTcGVjcykgewpAQCAtMTM3MSwxNiArMTM3OSw5IEBAIHB1YmxpYyBQdXNoUmVzdWx0IHB1c2goZmluYWwgUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IsCiAJCQlpZiAodG9QdXNoLmlzRW1wdHkoKSkKIAkJCQl0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKEpHaXRUZXh0LmdldCgpLm5vdGhpbmdUb1B1c2gpOwogCQl9Ci0JCWlmIChwcmVQdXNoICE9IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJcHJlUHVzaC5zZXRSZWZzKHRvUHVzaCk7Ci0JCQkJcHJlUHVzaC5jYWxsKCk7Ci0JCQl9IGNhdGNoIChBYm9ydGVkQnlIb29rRXhjZXB0aW9uIHwgSU9FeGNlcHRpb24gZSkgewotCQkJCXRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oZS5nZXRNZXNzYWdlKCksIGUpOwotCQkJfQotCQl9CiAKLQkJZmluYWwgUHVzaFByb2Nlc3MgcHVzaFByb2Nlc3MgPSBuZXcgUHVzaFByb2Nlc3ModGhpcywgdG9QdXNoLCBvdXQpOworCQlmaW5hbCBQdXNoUHJvY2VzcyBwdXNoUHJvY2VzcyA9IG5ldyBQdXNoUHJvY2Vzcyh0aGlzLCB0b1B1c2gsIHByZVB1c2gsCisJCQkJb3V0KTsKIAkJcmV0dXJuIHB1c2hQcm9jZXNzLmV4ZWN1dGUobW9uaXRvcik7CiAJfQogCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9VcGxvYWRQYWNrLmphdmEgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9VcGxvYWRQYWNrLmphdmEKaW5kZXggNmNiOGZlNC4uMTYxN2M1MCAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmFuc3BvcnQvVXBsb2FkUGFjay5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L1VwbG9hZFBhY2suamF2YQpAQCAtMjM1OCw3ICsyMzU4LDcgQEAgZWxzZSBpZiAocmVmLmdldE5hbWUoKS5zdGFydHNXaXRoKENvbnN0YW50cy5SX0hFQURTKSkKIAkJCQkJCTogcmVxLmdldERlcHRoKCkgLSAxOwogCQkJCXB3LnNldFNoYWxsb3dQYWNrKHJlcS5nZXREZXB0aCgpLCB1bnNoYWxsb3dDb21taXRzKTsKIAotCQkJCUBTdXBwcmVzc1dhcm5pbmdzKCJyZXNvdXJjZSIpIC8vIE93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCBiZWxvdworCQkJCS8vIE93bmVyc2hpcCBpcyB0cmFuc2ZlcnJlZCBiZWxvdwogCQkJCURlcHRoV2Fsay5SZXZXYWxrIGR3ID0gbmV3IERlcHRoV2Fsay5SZXZXYWxrKAogCQkJCQkJd2Fsay5nZXRPYmplY3RSZWFkZXIoKSwgd2Fsa0RlcHRoKTsKIAkJCQlkdy5zZXREZWVwZW5TaW5jZShyZXEuZ2V0RGVlcGVuU2luY2UoKSk7CmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyYW5zcG9ydC9yZXNvbHZlci9GaWxlUmVzb2x2ZXIuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3Jlc29sdmVyL0ZpbGVSZXNvbHZlci5qYXZhCmluZGV4IDNkMTVlZjUuLjA0NmYzOTUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3Jlc29sdmVyL0ZpbGVSZXNvbHZlci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJhbnNwb3J0L3Jlc29sdmVyL0ZpbGVSZXNvbHZlci5qYXZhCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBHb29nbGUgSW5jLiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAyMiwgR29vZ2xlIEluYy4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMTgsMTEgKzE4LDExIEBACiBpbXBvcnQgamF2YS51dGlsLmNvbmN1cnJlbnQuQ29weU9uV3JpdGVBcnJheUxpc3Q7CiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmVycm9ycy5SZXBvc2l0b3J5Tm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuQ29uc3RhbnRzOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnk7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5saWIuUmVwb3NpdG9yeUNhY2hlOwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQubGliLlJlcG9zaXRvcnlDYWNoZS5GaWxlS2V5OwogaW1wb3J0IG9yZy5lY2xpcHNlLmpnaXQudXRpbC5GUzsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LnV0aWwuU3RyaW5nVXRpbHM7CiAKIC8qKgogICogRGVmYXVsdCByZXNvbHZlciBzZXJ2aW5nIGZyb20gdGhlIGxvY2FsIGZpbGVzeXN0ZW0uCkBAIC02Nyw3ICs2Nyw3IEBAIHB1YmxpYyBSZXBvc2l0b3J5IG9wZW4oQyByZXEsIFN0cmluZyBuYW1lKQogCQlpZiAoaXNVbnJlYXNvbmFibGVOYW1lKG5hbWUpKQogCQkJdGhyb3cgbmV3IFJlcG9zaXRvcnlOb3RGb3VuZEV4Y2VwdGlvbihuYW1lKTsKIAotCQlSZXBvc2l0b3J5IGRiID0gZXhwb3J0cy5nZXQobmFtZVdpdGhEb3RHaXQobmFtZSkpOworCQlSZXBvc2l0b3J5IGRiID0gZXhwb3J0cy5nZXQoU3RyaW5nVXRpbHMubmFtZVdpdGhEb3RHaXQobmFtZSkpOwogCQlpZiAoZGIgIT0gbnVsbCkgewogCQkJZGIuaW5jcmVtZW50T3BlbigpOwogCQkJcmV0dXJuIGRiOwpAQCAtMTU0LDcgKzE1NCw3IEBAIHB1YmxpYyB2b2lkIHNldEV4cG9ydEFsbChib29sZWFuIGV4cG9ydCkgewogCSAqICAgICAgICAgICAgdGhlIHJlcG9zaXRvcnkgaW5zdGFuY2UuCiAJICovCiAJcHVibGljIHZvaWQgZXhwb3J0UmVwb3NpdG9yeShTdHJpbmcgbmFtZSwgUmVwb3NpdG9yeSBkYikgewotCQlleHBvcnRzLnB1dChuYW1lV2l0aERvdEdpdChuYW1lKSwgZGIpOworCQlleHBvcnRzLnB1dChTdHJpbmdVdGlscy5uYW1lV2l0aERvdEdpdChuYW1lKSwgZGIpOwogCX0KIAogCS8qKgpAQCAtMTk3LDEyICsxOTcsNiBAQCBlbHNlIGlmIChkYi5nZXREaXJlY3RvcnkoKSAhPSBudWxsKQogCQkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXByaXZhdGUgc3RhdGljIFN0cmluZyBuYW1lV2l0aERvdEdpdChTdHJpbmcgbmFtZSkgewotCQlpZiAobmFtZS5lbmRzV2l0aChDb25zdGFudHMuRE9UX0dJVF9FWFQpKQotCQkJcmV0dXJuIG5hbWU7Ci0JCXJldHVybiBuYW1lICsgQ29uc3RhbnRzLkRPVF9HSVRfRVhUOwotCX0KLQogCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNVbnJlYXNvbmFibGVOYW1lKFN0cmluZyBuYW1lKSB7CiAJCWlmIChuYW1lLmxlbmd0aCgpID09IDApCiAJCQlyZXR1cm4gdHJ1ZTsgLy8gbm8gZW1wdHkgcGF0aHMKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvVHJlZVdhbGsuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvVHJlZVdhbGsuamF2YQppbmRleCAxZjYxNGUzLi44MjY5NjY2IDEwMDY0NAotLS0gYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL1RyZWVXYWxrLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC90cmVld2Fsay9UcmVlV2Fsay5qYXZhCkBAIC0xLDYgKzEsNiBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBHb29nbGUgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LCBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+IGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBHb29nbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDIyIFNoYXduIE8uIFBlYXJjZSA8c3BlYXJjZUBzcGVhcmNlLm9yZz4gYW5kIG90aGVycwogICoKICAqIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZQogICogdGVybXMgb2YgdGhlIEVjbGlwc2UgRGlzdHJpYnV0aW9uIExpY2Vuc2Ugdi4gMS4wIHdoaWNoIGlzIGF2YWlsYWJsZSBhdApAQCAtMTQsNiArMTQsNyBAQAogaW1wb3J0IHN0YXRpYyBqYXZhLm5pby5jaGFyc2V0LlN0YW5kYXJkQ2hhcnNldHMuVVRGXzg7CiAKIGltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheXM7CiBpbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7CiBpbXBvcnQgamF2YS51dGlsLk1hcDsKIGltcG9ydCBqYXZhLnV0aWwuU2V0OwpAQCAtNzMsNiArNzQsNyBAQAogICogdGhyZWFkcy4KICAqLwogcHVibGljIGNsYXNzIFRyZWVXYWxrIGltcGxlbWVudHMgQXV0b0Nsb3NlYWJsZSwgQXR0cmlidXRlc1Byb3ZpZGVyIHsKKwogCXByaXZhdGUgc3RhdGljIGZpbmFsIEFic3RyYWN0VHJlZUl0ZXJhdG9yW10gTk9fVFJFRVMgPSB7fTsKIAogCS8qKgpAQCAtOTIsNyArOTQsNyBAQCBwdWJsaWMgZW51bSBPcGVyYXRpb25UeXBlIHsKIAl9CiAKIAkvKioKLQkgKiAgICAgICAgICAgIFR5cGUgb2Ygb3BlcmF0aW9uIHlvdSB3YW50IHRvIHJldHJpZXZlIHRoZSBnaXQgYXR0cmlidXRlcyBmb3IuCisJICogVHlwZSBvZiBvcGVyYXRpb24geW91IHdhbnQgdG8gcmV0cmlldmUgdGhlIGdpdCBhdHRyaWJ1dGVzIGZvci4KIAkgKi8KIAlwcml2YXRlIE9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSA9IE9wZXJhdGlvblR5cGUuQ0hFQ0tPVVRfT1A7CiAKQEAgLTI4NCwxMSArMjg2LDIwIEBAIHB1YmxpYyBzdGF0aWMgVHJlZVdhbGsgZm9yUGF0aChmaW5hbCBSZXBvc2l0b3J5IGRiLCBmaW5hbCBTdHJpbmcgcGF0aCwKIAogCUFic3RyYWN0VHJlZUl0ZXJhdG9yIGN1cnJlbnRIZWFkOwogCi0JLyoqIENhY2hlZCBhdHRyaWJ1dGUgZm9yIHRoZSBjdXJyZW50IGVudHJ5ICovCi0JcHJpdmF0ZSBBdHRyaWJ1dGVzIGF0dHJzID0gbnVsbDsKKwkvKioKKwkgKiBDYWNoZWQgYXR0cmlidXRlcyBmb3IgdGhlIGN1cnJlbnQgZW50cnk7IHBlciB0cmVlLiBJbmRleCBpKzEgaXMgZm9yIHRyZWUKKwkgKiBpOyBpbmRleCAwIGlzIGZvciB0aGUgZGVwcmVjYXRlZCBsZWdhY3kgYmVoYXZpb3IuCisJICovCisJcHJpdmF0ZSBBdHRyaWJ1dGVzW10gYXR0cnM7CiAKLQkvKiogQ2FjaGVkIGF0dHJpYnV0ZXMgaGFuZGxlciAqLwotCXByaXZhdGUgQXR0cmlidXRlc0hhbmRsZXIgYXR0cmlidXRlc0hhbmRsZXI7CisJLyoqCisJICogQ2FjaGVkIGF0dHJpYnV0ZXMgaGFuZGxlcjsgcGVyIHRyZWUuIEluZGV4IGkrMSBpcyBmb3IgdHJlZSBpOyBpbmRleCAwIGlzCisJICogZm9yIHRoZSBkZXByZWNhdGVkIGxlZ2FjeSBiZWhhdmlvci4KKwkgKi8KKwlwcml2YXRlIEF0dHJpYnV0ZXNIYW5kbGVyW10gYXR0cmlidXRlc0hhbmRsZXJzOworCisJLyoqIENhbiBiZSBzZXQgdG8gaWRlbnRpZnkgdGhlIHRyZWUgdG8gdXNlIGZvciB7QGxpbmsgI2dldEF0dHJpYnV0ZXMoKX0uICovCisJcHJpdmF0ZSBpbnQgaGVhZEluZGV4ID0gLTE7CiAKIAlwcml2YXRlIENvbmZpZyBjb25maWc7CiAKQEAgLTUxNSw2ICs1MjYsMjQgQEAgcHVibGljIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgZ2V0QXR0cmlidXRlc05vZGVQcm92aWRlcigpIHsKIAl9CiAKIAkvKioKKwkgKiBJZGVudGlmaWVzIHRoZSB0cmVlIGF0IHRoZSBnaXZlbiBpbmRleCBhcyB0aGUgaGVhZCB0cmVlLiBUaGlzIGlzIHRoZSB0cmVlCisJICogdXNlIGJ5IGRlZmF1bHQgdG8gZGV0ZXJtaW5lIGF0dHJpYnV0ZXMgYW5kIEVPTCBtb2Rlcy4KKwkgKgorCSAqIEBwYXJhbSBpbmRleAorCSAqICAgICAgICAgICAgb2YgdGhlIHRyZWUgdG8gdXNlIGFzIGhlYWQKKwkgKiBAdGhyb3dzIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbgorCSAqICAgICAgICAgICAgIGlmIHRoZSBpbmRleCBpcyBvdXQgb2YgcmFuZ2UKKwkgKiBAc2luY2UgNi4xCisJICovCisJcHVibGljIHZvaWQgc2V0SGVhZChpbnQgaW5kZXgpIHsKKwkJaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0cmVlcy5sZW5ndGgpIHsKKwkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oIkhlYWQgaW5kZXggIiArIGluZGV4IC8vJE5PTi1OTFMtMSQKKwkJCQkJKyAiIG91dCBvZiByYW5nZSBbMCwiICsgdHJlZXMubGVuZ3RoICsgJyknKTsgLy8kTk9OLU5MUy0xJAorCQl9CisJCWhlYWRJbmRleCA9IGluZGV4OworCX0KKworCS8qKgogCSAqIHtAaW5oZXJpdERvY30KIAkgKiA8cD4KIAkgKiBSZXRyaWV2ZSB0aGUgZ2l0IGF0dHJpYnV0ZXMgZm9yIHRoZSBjdXJyZW50IGVudHJ5LgpAQCAtNTU2LDI1ICs1ODUsNTEgQEAgcHVibGljIEF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgZ2V0QXR0cmlidXRlc05vZGVQcm92aWRlcigpIHsKIAkgKi8KIAlAT3ZlcnJpZGUKIAlwdWJsaWMgQXR0cmlidXRlcyBnZXRBdHRyaWJ1dGVzKCkgewotCQlpZiAoYXR0cnMgIT0gbnVsbCkKLQkJCXJldHVybiBhdHRyczsKKwkJcmV0dXJuIGdldEF0dHJpYnV0ZXMoaGVhZEluZGV4KTsKKwl9CiAKKwkvKioKKwkgKiBSZXRyaWV2ZXMgdGhlIGdpdCBhdHRyaWJ1dGVzIGJhc2VkIG9uIHRoZSBnaXZlbiB0cmVlLgorCSAqCisJICogQHBhcmFtIGluZGV4CisJICogICAgICAgICAgICBvZiB0aGUgdHJlZSB0byB1c2UgYXMgYmFzZSBmb3IgdGhlIGF0dHJpYnV0ZXMKKwkgKiBAcmV0dXJuIHRoZSBhdHRyaWJ1dGVzCisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBBdHRyaWJ1dGVzIGdldEF0dHJpYnV0ZXMoaW50IGluZGV4KSB7CisJCWludCBhdHRySW5kZXggPSBpbmRleCArIDE7CisJCUF0dHJpYnV0ZXMgcmVzdWx0ID0gYXR0cnNbYXR0ckluZGV4XTsKKwkJaWYgKHJlc3VsdCAhPSBudWxsKSB7CisJCQlyZXR1cm4gcmVzdWx0OworCQl9CiAJCWlmIChhdHRyaWJ1dGVzTm9kZVByb3ZpZGVyID09IG51bGwpIHsKLQkJCS8vIFRoZSB3b3JrIHRyZWUgc2hvdWxkIGhhdmUgYSBBdHRyaWJ1dGVzTm9kZVByb3ZpZGVyIHRvIGJlIGFibGUgdG8KLQkJCS8vIHJldHJpZXZlIHRoZSBpbmZvIGFuZCBnbG9iYWwgYXR0cmlidXRlcyBub2RlCiAJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAogCQkJCQkiVGhlIHRyZWUgd2FsayBzaG91bGQgaGF2ZSBvbmUgQXR0cmlidXRlc05vZGVQcm92aWRlciBzZXQgaW4gb3JkZXIgdG8gY29tcHV0ZSB0aGUgZ2l0IGF0dHJpYnV0ZXMuIik7IC8vJE5PTi1OTFMtMSQKIAkJfQogCiAJCXRyeSB7Ci0JCQkvLyBMYXp5IGNyZWF0ZSB0aGUgYXR0cmlidXRlc0hhbmRsZXIgb24gdGhlIGZpcnN0IGFjY2VzcyBvZgotCQkJLy8gYXR0cmlidXRlcy4gVGhpcyByZXF1aXJlcyB0aGUgaW5mbywgZ2xvYmFsIGFuZCByb290Ci0JCQkvLyBhdHRyaWJ1dGVzIG5vZGVzCi0JCQlpZiAoYXR0cmlidXRlc0hhbmRsZXIgPT0gbnVsbCkgewotCQkJCWF0dHJpYnV0ZXNIYW5kbGVyID0gbmV3IEF0dHJpYnV0ZXNIYW5kbGVyKHRoaXMpOworCQkJQXR0cmlidXRlc0hhbmRsZXIgaGFuZGxlciA9IGF0dHJpYnV0ZXNIYW5kbGVyc1thdHRySW5kZXhdOworCQkJaWYgKGhhbmRsZXIgPT0gbnVsbCkgeworCQkJCWlmIChpbmRleCA8IDApIHsKKwkJCQkJLy8gTGVnYWN5IGJlaGF2aW9yIChoZWFkSW5kZXggbm90IHNldCwgZ2V0QXR0cmlidXRlcygpIGFib3ZlCisJCQkJCS8vIGNhbGxlZCkKKwkJCQkJaGFuZGxlciA9IG5ldyBBdHRyaWJ1dGVzSGFuZGxlcih0aGlzLCAoKSAtPiB7CisJCQkJCQlyZXR1cm4gZ2V0VHJlZShDYW5vbmljYWxUcmVlUGFyc2VyLmNsYXNzKTsKKwkJCQkJfSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJaGFuZGxlciA9IG5ldyBBdHRyaWJ1dGVzSGFuZGxlcih0aGlzLCAoKSAtPiB7CisJCQkJCQlBYnN0cmFjdFRyZWVJdGVyYXRvciB0cmVlID0gdHJlZXNbaW5kZXhdOworCQkJCQkJaWYgKHRyZWUgaW5zdGFuY2VvZiBDYW5vbmljYWxUcmVlUGFyc2VyKSB7CisJCQkJCQkJcmV0dXJuIChDYW5vbmljYWxUcmVlUGFyc2VyKSB0cmVlOworCQkJCQkJfQorCQkJCQkJcmV0dXJuIG51bGw7CisJCQkJCX0pOworCQkJCX0KKwkJCQlhdHRyaWJ1dGVzSGFuZGxlcnNbYXR0ckluZGV4XSA9IGhhbmRsZXI7CiAJCQl9Ci0JCQlhdHRycyA9IGF0dHJpYnV0ZXNIYW5kbGVyLmdldEF0dHJpYnV0ZXMoKTsKLQkJCXJldHVybiBhdHRyczsKKwkJCXJlc3VsdCA9IGhhbmRsZXIuZ2V0QXR0cmlidXRlcygpOworCQkJYXR0cnNbYXR0ckluZGV4XSA9IHJlc3VsdDsKKwkJCXJldHVybiByZXN1bHQ7CiAJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKIAkJCXRocm93IG5ldyBKR2l0SW50ZXJuYWxFeGNlcHRpb24oIkVycm9yIHdoaWxlIHBhcnNpbmcgYXR0cmlidXRlcyIsIC8vJE5PTi1OTFMtMSQKIAkJCQkJZSk7CkBAIC01OTUsMTEgKzY1MCwzNCBAQCBwdWJsaWMgQXR0cmlidXRlcyBnZXRBdHRyaWJ1dGVzKCkgewogCSAqLwogCUBOdWxsYWJsZQogCXB1YmxpYyBFb2xTdHJlYW1UeXBlIGdldEVvbFN0cmVhbVR5cGUoT3BlcmF0aW9uVHlwZSBvcFR5cGUpIHsKLQkJaWYgKGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgPT0gbnVsbCB8fCBjb25maWcgPT0gbnVsbCkKKwkJaWYgKGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgPT0gbnVsbCB8fCBjb25maWcgPT0gbnVsbCkgewogCQkJcmV0dXJuIG51bGw7Ci0JCXJldHVybiBFb2xTdHJlYW1UeXBlVXRpbC5kZXRlY3RTdHJlYW1UeXBlKAotCQkJCW9wVHlwZSAhPSBudWxsID8gb3BUeXBlIDogb3BlcmF0aW9uVHlwZSwKLQkJCQkJY29uZmlnLmdldChXb3JraW5nVHJlZU9wdGlvbnMuS0VZKSwgZ2V0QXR0cmlidXRlcygpKTsKKwkJfQorCQlPcGVyYXRpb25UeXBlIG9wID0gb3BUeXBlICE9IG51bGwgPyBvcFR5cGUgOiBvcGVyYXRpb25UeXBlOworCQlyZXR1cm4gRW9sU3RyZWFtVHlwZVV0aWwuZGV0ZWN0U3RyZWFtVHlwZShvcCwKKwkJCQljb25maWcuZ2V0KFdvcmtpbmdUcmVlT3B0aW9ucy5LRVkpLCBnZXRBdHRyaWJ1dGVzKCkpOworCX0KKworCS8qKgorCSAqIEdldCB0aGUgRU9MIHN0cmVhbSB0eXBlIG9mIHRoZSBjdXJyZW50IGVudHJ5IGZvciBjaGVja2luZyBvdXQgdXNpbmcgdGhlCisJICogY29uZmlnIGFuZCB7QGxpbmsgI2dldEF0dHJpYnV0ZXMoKX0uCisJICoKKwkgKiBAcGFyYW0gdHJlZQorCSAqICAgICAgICAgICAgaW5kZXggb2YgdGhlIHRyZWUgdGhlIGNoZWNrLW91dCBpcyB0byBiZSBmcm9tCisJICogQHJldHVybiB0aGUgRU9MIHN0cmVhbSB0eXBlIG9mIHRoZSBjdXJyZW50IGVudHJ5IHVzaW5nIHRoZSBjb25maWcgYW5kCisJICogICAgICAgICB7QGxpbmsgI2dldEF0dHJpYnV0ZXMoKX0uIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIG51bGwKKwkgKiAgICAgICAgIGlmIHRoZSB7QGxpbmsgb3JnLmVjbGlwc2UuamdpdC50cmVld2Fsay5UcmVlV2Fsa30gaXMgbm90IGJhc2VkIG9uCisJICogICAgICAgICBhIHdvcmtpbmcgdHJlZQorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlATnVsbGFibGUKKwlwdWJsaWMgRW9sU3RyZWFtVHlwZSBnZXRDaGVja291dEVvbFN0cmVhbVR5cGUoaW50IHRyZWUpIHsKKwkJaWYgKGF0dHJpYnV0ZXNOb2RlUHJvdmlkZXIgPT0gbnVsbCB8fCBjb25maWcgPT0gbnVsbCkgeworCQkJcmV0dXJuIG51bGw7CisJCX0KKwkJQXR0cmlidXRlcyBhdHRyID0gZ2V0QXR0cmlidXRlcyh0cmVlKTsKKwkJcmV0dXJuIEVvbFN0cmVhbVR5cGVVdGlsLmRldGVjdFN0cmVhbVR5cGUoT3BlcmF0aW9uVHlwZS5DSEVDS09VVF9PUCwKKwkJCQljb25maWcuZ2V0KFdvcmtpbmdUcmVlT3B0aW9ucy5LRVkpLCBhdHRyKTsKIAl9CiAKIAkvKioKQEAgLTYwNyw3ICs2ODUsOCBAQCBwdWJsaWMgRW9sU3RyZWFtVHlwZSBnZXRFb2xTdHJlYW1UeXBlKE9wZXJhdGlvblR5cGUgb3BUeXBlKSB7CiAJICovCiAJcHVibGljIHZvaWQgcmVzZXQoKSB7CiAJCWF0dHJzID0gbnVsbDsKLQkJYXR0cmlidXRlc0hhbmRsZXIgPSBudWxsOworCQlhdHRyaWJ1dGVzSGFuZGxlcnMgPSBudWxsOworCQloZWFkSW5kZXggPSAtMTsKIAkJdHJlZXMgPSBOT19UUkVFUzsKIAkJYWR2YW5jZSA9IGZhbHNlOwogCQlkZXB0aCA9IDA7CkBAIC02NTEsNyArNzMwLDkgQEAgcHVibGljIHZvaWQgcmVzZXQoQW55T2JqZWN0SWQgaWQpIHRocm93cyBNaXNzaW5nT2JqZWN0RXhjZXB0aW9uLAogCiAJCWFkdmFuY2UgPSBmYWxzZTsKIAkJZGVwdGggPSAwOwotCQlhdHRycyA9IG51bGw7CisJCWF0dHJzID0gbmV3IEF0dHJpYnV0ZXNbMl07CisJCWF0dHJpYnV0ZXNIYW5kbGVycyA9IG5ldyBBdHRyaWJ1dGVzSGFuZGxlclsyXTsKKwkJaGVhZEluZGV4ID0gLTE7CiAJfQogCiAJLyoqCkBAIC03MDEsNyArNzgyLDE0IEBAIHB1YmxpYyB2b2lkIHJlc2V0KEFueU9iamVjdElkLi4uIGlkcykgdGhyb3dzIE1pc3NpbmdPYmplY3RFeGNlcHRpb24sCiAJCXRyZWVzID0gcjsKIAkJYWR2YW5jZSA9IGZhbHNlOwogCQlkZXB0aCA9IDA7Ci0JCWF0dHJzID0gbnVsbDsKKwkJaWYgKG9sZExlbiA9PSBuZXdMZW4pIHsKKwkJCUFycmF5cy5maWxsKGF0dHJzLCBudWxsKTsKKwkJCUFycmF5cy5maWxsKGF0dHJpYnV0ZXNIYW5kbGVycywgbnVsbCk7CisJCX0gZWxzZSB7CisJCQlhdHRycyA9IG5ldyBBdHRyaWJ1dGVzW25ld0xlbiArIDFdOworCQkJYXR0cmlidXRlc0hhbmRsZXJzID0gbmV3IEF0dHJpYnV0ZXNIYW5kbGVyW25ld0xlbiArIDFdOworCQl9CisJCWhlYWRJbmRleCA9IC0xOwogCX0KIAogCS8qKgpAQCAtNzU4LDYgKzg0NiwxNiBAQCBwdWJsaWMgaW50IGFkZFRyZWUoQWJzdHJhY3RUcmVlSXRlcmF0b3IgcCkgewogCQlwLm1hdGNoU2hpZnQgPSAwOwogCiAJCXRyZWVzID0gbmV3VHJlZXM7CisJCWlmIChhdHRycyA9PSBudWxsKSB7CisJCQlhdHRycyA9IG5ldyBBdHRyaWJ1dGVzW24gKyAyXTsKKwkJfSBlbHNlIHsKKwkJCWF0dHJzID0gQXJyYXlzLmNvcHlPZihhdHRycywgbiArIDIpOworCQl9CisJCWlmIChhdHRyaWJ1dGVzSGFuZGxlcnMgPT0gbnVsbCkgeworCQkJYXR0cmlidXRlc0hhbmRsZXJzID0gbmV3IEF0dHJpYnV0ZXNIYW5kbGVyW24gKyAyXTsKKwkJfSBlbHNlIHsKKwkJCWF0dHJpYnV0ZXNIYW5kbGVycyA9IEFycmF5cy5jb3B5T2YoYXR0cmlidXRlc0hhbmRsZXJzLCBuICsgMik7CisJCX0KIAkJcmV0dXJuIG47CiAJfQogCkBAIC04MDAsNyArODk4LDcgQEAgcHVibGljIGJvb2xlYW4gbmV4dCgpIHRocm93cyBNaXNzaW5nT2JqZWN0RXhjZXB0aW9uLAogCQkJfQogCiAJCQlmb3IgKDs7KSB7Ci0JCQkJYXR0cnMgPSBudWxsOworCQkJCUFycmF5cy5maWxsKGF0dHJzLCBudWxsKTsKIAkJCQlmaW5hbCBBYnN0cmFjdFRyZWVJdGVyYXRvciB0ID0gbWluKCk7CiAJCQkJaWYgKHQuZW9mKCkpIHsKIAkJCQkJaWYgKGRlcHRoID4gMCkgewpAQCAtMTI1NSw3ICsxMzUzLDcgQEAgcHVibGljIGJvb2xlYW4gaXNQb3N0Q2hpbGRyZW4oKSB7CiAJICovCiAJcHVibGljIHZvaWQgZW50ZXJTdWJ0cmVlKCkgdGhyb3dzIE1pc3NpbmdPYmplY3RFeGNlcHRpb24sCiAJCQlJbmNvcnJlY3RPYmplY3RUeXBlRXhjZXB0aW9uLCBDb3JydXB0T2JqZWN0RXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWF0dHJzID0gbnVsbDsKKwkJQXJyYXlzLmZpbGwoYXR0cnMsIG51bGwpOwogCQlmaW5hbCBBYnN0cmFjdFRyZWVJdGVyYXRvciBjaCA9IGN1cnJlbnRIZWFkOwogCQlmaW5hbCBBYnN0cmFjdFRyZWVJdGVyYXRvcltdIHRtcCA9IG5ldyBBYnN0cmFjdFRyZWVJdGVyYXRvclt0cmVlcy5sZW5ndGhdOwogCQlmb3IgKGludCBpID0gMDsgaSA8IHRyZWVzLmxlbmd0aDsgaSsrKSB7CkBAIC0xMzc0LDExICsxNDcyLDEyIEBAIHB1YmxpYyA8VCBleHRlbmRzIEFic3RyYWN0VHJlZUl0ZXJhdG9yPiBUIGdldFRyZWUoQ2xhc3M8VD4gdHlwZSkgewogCiAJLyoqCiAJICogSW5zcGVjdCBjb25maWcgYW5kIGF0dHJpYnV0ZXMgdG8gcmV0dXJuIGEgZmlsdGVyY29tbWFuZCBhcHBsaWNhYmxlIGZvcgotCSAqIHRoZSBjdXJyZW50IHBhdGgsIGJ1dCB3aXRob3V0IGV4cGFuZGluZyAlZiBvY2N1cmVuY2VzCisJICogdGhlIGN1cnJlbnQgcGF0aC4KIAkgKgogCSAqIEBwYXJhbSBmaWx0ZXJDb21tYW5kVHlwZQogCSAqICAgICAgICAgICAgd2hpY2ggdHlwZSBvZiBmaWx0ZXJDb21tYW5kIHNob3VsZCBiZSBleGVjdXRlZC4gRS5nLiAiY2xlYW4iLAotCSAqICAgICAgICAgICAgInNtdWRnZSIKKwkgKiAgICAgICAgICAgICJzbXVkZ2UiLiBGb3IgInNtdWRnZSIgY29uc2lkZXIgdXNpbmcKKwkgKiAgICAgICAgICAgIHt7QGxpbmsgI2dldFNtdWRnZUNvbW1hbmQoaW50KX0gaW5zdGVhZC4KIAkgKiBAcmV0dXJuIGEgZmlsdGVyIGNvbW1hbmQKIAkgKiBAdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24KIAkgKiBAc2luY2UgNC4yCkBAIC0xNDA3LDYgKzE1MDYsNTQgQEAgcHVibGljIFN0cmluZyBnZXRGaWx0ZXJDb21tYW5kKFN0cmluZyBmaWx0ZXJDb21tYW5kVHlwZSkKIAl9CiAKIAkvKioKKwkgKiBJbnNwZWN0IGNvbmZpZyBhbmQgYXR0cmlidXRlcyB0byByZXR1cm4gYSBmaWx0ZXJjb21tYW5kIGFwcGxpY2FibGUgZm9yCisJICogdGhlIGN1cnJlbnQgcGF0aC4KKwkgKgorCSAqIEBwYXJhbSBpbmRleAorCSAqICAgICAgICAgICAgb2YgdGhlIHRyZWUgdGhlIGl0ZW0gdG8gYmUgc211ZGdlZCBpcyBpbgorCSAqIEByZXR1cm4gYSBmaWx0ZXIgY29tbWFuZAorCSAqIEB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFNtdWRnZUNvbW1hbmQoaW50IGluZGV4KQorCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKKwkJcmV0dXJuIGdldFNtdWRnZUNvbW1hbmQoZ2V0QXR0cmlidXRlcyhpbmRleCkpOworCX0KKworCS8qKgorCSAqIEluc3BlY3QgY29uZmlnIGFuZCBhdHRyaWJ1dGVzIHRvIHJldHVybiBhIGZpbHRlcmNvbW1hbmQgYXBwbGljYWJsZSBmb3IKKwkgKiB0aGUgY3VycmVudCBwYXRoLgorCSAqCisJICogQHBhcmFtIGF0dHJpYnV0ZXMKKwkgKiAgICAgICAgICAgIHRvIHVzZQorCSAqIEByZXR1cm4gYSBmaWx0ZXIgY29tbWFuZAorCSAqIEB0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbgorCSAqIEBzaW5jZSA2LjEKKwkgKi8KKwlwdWJsaWMgU3RyaW5nIGdldFNtdWRnZUNvbW1hbmQoQXR0cmlidXRlcyBhdHRyaWJ1dGVzKSB0aHJvd3MgSU9FeGNlcHRpb24geworCQlpZiAoYXR0cmlidXRlcyA9PSBudWxsKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCQlBdHRyaWJ1dGUgZiA9IGF0dHJpYnV0ZXMuZ2V0KENvbnN0YW50cy5BVFRSX0ZJTFRFUik7CisJCWlmIChmID09IG51bGwpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisJCVN0cmluZyBmaWx0ZXJWYWx1ZSA9IGYuZ2V0VmFsdWUoKTsKKwkJaWYgKGZpbHRlclZhbHVlID09IG51bGwpIHsKKwkJCXJldHVybiBudWxsOworCQl9CisKKwkJU3RyaW5nIGZpbHRlckNvbW1hbmQgPSBnZXRGaWx0ZXJDb21tYW5kRGVmaW5pdGlvbihmaWx0ZXJWYWx1ZSwKKwkJCQlDb25zdGFudHMuQVRUUl9GSUxURVJfVFlQRV9TTVVER0UpOworCQlpZiAoZmlsdGVyQ29tbWFuZCA9PSBudWxsKSB7CisJCQlyZXR1cm4gbnVsbDsKKwkJfQorCQlyZXR1cm4gZmlsdGVyQ29tbWFuZC5yZXBsYWNlQWxsKCIlZiIsIC8vJE5PTi1OTFMtMSQKKwkJCQlNYXRjaGVyLnF1b3RlUmVwbGFjZW1lbnQoCisJCQkJCQlRdW90ZWRTdHJpbmcuQk9VUk5FLnF1b3RlKChnZXRQYXRoU3RyaW5nKCkpKSkpOworCX0KKworCS8qKgogCSAqIEdldCB0aGUgZmlsdGVyIGNvbW1hbmQgaG93IGl0IGlzIGRlZmluZWQgaW4gZ2l0Y29uZmlnLiBUaGUgcmV0dXJuZWQKIAkgKiBzdHJpbmcgbWF5IGNvbnRhaW4gIiVmIiB3aGljaCBuZWVkcyB0byBiZSByZXBsYWNlZCBieSB0aGUgY3VycmVudCBwYXRoCiAJICogYmVmb3JlIGV4ZWN1dGluZyB0aGUgZmlsdGVyIGNvbW1hbmQuIFRoZXNlIGZpbHRlciBkZWZpbml0aW9ucyBhcmUgY2FjaGVkCmRpZmYgLS1naXQgYS9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3RyZWV3YWxrL1dvcmtpbmdUcmVlSXRlcmF0b3IuamF2YSBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvV29ya2luZ1RyZWVJdGVyYXRvci5qYXZhCmluZGV4IDUwY2UxNWUuLjQyN2VhYzUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvV29ya2luZ1RyZWVJdGVyYXRvci5qYXZhCisrKyBiL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdHJlZXdhbGsvV29ya2luZ1RyZWVJdGVyYXRvci5qYXZhCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4LCBTaGF3biBPLiBQZWFyY2UgPHNwZWFyY2VAc3BlYXJjZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIENocmlzdGlhbiBIYWxzdHJpY2sgPGNocmlzdGlhbi5oYWxzdHJpY2tAc2FwLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAxMCwgTWF0dGhpYXMgU29obiA8bWF0dGhpYXMuc29obkBzYXAuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMjEsIFJvYmluIFJvc2VuYmVyZyBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMjIsIFJvYmluIFJvc2VuYmVyZyBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0zODcsOCArMzg3LDggQEAgcHVibGljIGJvb2xlYW4gaXNXb3JrVHJlZSgpIHsKIAkJCQlzdGF0ZS5pbml0aWFsaXplUmVhZEJ1ZmZlcigpOwogCiAJCQkJZmluYWwgbG9uZyBsZW4gPSBlLmdldExlbmd0aCgpOwotCQkJCUlucHV0U3RyZWFtIGZpbHRlcmVkSXMgPSBwb3NzaWJseUZpbHRlcmVkSW5wdXRTdHJlYW0oZSwgaXMsIGxlbiwKLQkJCQkJCU9wZXJhdGlvblR5cGUuQ0hFQ0tJTl9PUCk7CisJCQkJSW5wdXRTdHJlYW0gZmlsdGVyZWRJcyA9IHBvc3NpYmx5RmlsdGVyZWRJbnB1dFN0cmVhbShlLCBpcywKKwkJCQkJCWxlbik7CiAJCQkJcmV0dXJuIGNvbXB1dGVIYXNoKGZpbHRlcmVkSXMsIGNhbm9uTGVuKTsKIAkJCX0gZmluYWxseSB7CiAJCQkJc2FmZUNsb3NlKGlzKTsKQEAgLTQwMCwyMyArNDAwLDE4IEBAIHB1YmxpYyBib29sZWFuIGlzV29ya1RyZWUoKSB7CiAJfQogCiAJcHJpdmF0ZSBJbnB1dFN0cmVhbSBwb3NzaWJseUZpbHRlcmVkSW5wdXRTdHJlYW0oZmluYWwgRW50cnkgZSwKLQkJCWZpbmFsIElucHV0U3RyZWFtIGlzLCBmaW5hbCBsb25nIGxlbikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIHBvc3NpYmx5RmlsdGVyZWRJbnB1dFN0cmVhbShlLCBpcywgbGVuLCBudWxsKTsKLQotCX0KLQotCXByaXZhdGUgSW5wdXRTdHJlYW0gcG9zc2libHlGaWx0ZXJlZElucHV0U3RyZWFtKGZpbmFsIEVudHJ5IGUsCi0JCQlmaW5hbCBJbnB1dFN0cmVhbSBpcywgZmluYWwgbG9uZyBsZW4sIE9wZXJhdGlvblR5cGUgb3BUeXBlKQorCQkJZmluYWwgSW5wdXRTdHJlYW0gaXMsIGZpbmFsIGxvbmcgbGVuKQogCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJaWYgKGdldENsZWFuRmlsdGVyQ29tbWFuZCgpID09IG51bGwKLQkJCQkmJiBnZXRFb2xTdHJlYW1UeXBlKG9wVHlwZSkgPT0gRW9sU3RyZWFtVHlwZS5ESVJFQ1QpIHsKKwkJCQkmJiBnZXRFb2xTdHJlYW1UeXBlKAorCQkJCQkJT3BlcmF0aW9uVHlwZS5DSEVDS0lOX09QKSA9PSBFb2xTdHJlYW1UeXBlLkRJUkVDVCkgewogCQkJY2Fub25MZW4gPSBsZW47CiAJCQlyZXR1cm4gaXM7CiAJCX0KIAogCQlpZiAobGVuIDw9IE1BWElNVU1fRklMRV9TSVpFX1RPX1JFQURfRlVMTFkpIHsKIAkJCUJ5dGVCdWZmZXIgcmF3YnVmID0gSU8ucmVhZFdob2xlU3RyZWFtKGlzLCAoaW50KSBsZW4pOwotCQkJcmF3YnVmID0gZmlsdGVyQ2xlYW4ocmF3YnVmLmFycmF5KCksIHJhd2J1Zi5saW1pdCgpLCBvcFR5cGUpOworCQkJcmF3YnVmID0gZmlsdGVyQ2xlYW4ocmF3YnVmLmFycmF5KCksIHJhd2J1Zi5saW1pdCgpKTsKIAkJCWNhbm9uTGVuID0gcmF3YnVmLmxpbWl0KCk7CiAJCQlyZXR1cm4gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHJhd2J1Zi5hcnJheSgpLCAwLCAoaW50KSBjYW5vbkxlbik7CiAJCX0KQEAgLTQyNiwxNCArNDIxLDEzIEBAICYmIGdldEVvbFN0cmVhbVR5cGUob3BUeXBlKSA9PSBFb2xTdHJlYW1UeXBlLkRJUkVDVCkgewogCQkJCXJldHVybiBpczsKIAkJCX0KIAotCQlmaW5hbCBJbnB1dFN0cmVhbSBsZW5JcyA9IGZpbHRlckNsZWFuKGUub3BlbklucHV0U3RyZWFtKCksCi0JCQkJb3BUeXBlKTsKKwkJCWZpbmFsIElucHV0U3RyZWFtIGxlbklzID0gZmlsdGVyQ2xlYW4oZS5vcGVuSW5wdXRTdHJlYW0oKSk7CiAJCXRyeSB7CiAJCQljYW5vbkxlbiA9IGNvbXB1dGVMZW5ndGgobGVuSXMpOwogCQl9IGZpbmFsbHkgewogCQkJc2FmZUNsb3NlKGxlbklzKTsKIAkJfQotCQlyZXR1cm4gZmlsdGVyQ2xlYW4oaXMsIG9wVHlwZSk7CisJCXJldHVybiBmaWx0ZXJDbGVhbihpcyk7CiAJfQogCiAJcHJpdmF0ZSBzdGF0aWMgdm9pZCBzYWZlQ2xvc2UoSW5wdXRTdHJlYW0gaW4pIHsKQEAgLTQ1NSwyMyArNDQ5LDIwIEBAIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNCaW5hcnkoRW50cnkgZW50cnkpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCX0KIAl9CiAKLQlwcml2YXRlIEJ5dGVCdWZmZXIgZmlsdGVyQ2xlYW4oYnl0ZVtdIHNyYywgaW50IG4sIE9wZXJhdGlvblR5cGUgb3BUeXBlKQorCXByaXZhdGUgQnl0ZUJ1ZmZlciBmaWx0ZXJDbGVhbihieXRlW10gc3JjLCBpbnQgbikKIAkJCXRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCUlucHV0U3RyZWFtIGluID0gbmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKHNyYyk7CiAJCXRyeSB7Ci0JCQlyZXR1cm4gSU8ucmVhZFdob2xlU3RyZWFtKGZpbHRlckNsZWFuKGluLCBvcFR5cGUpLCBuKTsKKwkJCXJldHVybiBJTy5yZWFkV2hvbGVTdHJlYW0oZmlsdGVyQ2xlYW4oaW4pLCBuKTsKIAkJfSBmaW5hbGx5IHsKIAkJCXNhZmVDbG9zZShpbik7CiAJCX0KIAl9CiAKLQlwcml2YXRlIElucHV0U3RyZWFtIGZpbHRlckNsZWFuKElucHV0U3RyZWFtIGluKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gZmlsdGVyQ2xlYW4oaW4sIG51bGwpOwotCX0KLQotCXByaXZhdGUgSW5wdXRTdHJlYW0gZmlsdGVyQ2xlYW4oSW5wdXRTdHJlYW0gaW4sIE9wZXJhdGlvblR5cGUgb3BUeXBlKQorCXByaXZhdGUgSW5wdXRTdHJlYW0gZmlsdGVyQ2xlYW4oSW5wdXRTdHJlYW0gaW4pCiAJCQl0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpbiA9IGhhbmRsZUF1dG9DUkxGKGluLCBvcFR5cGUpOworCQlpbiA9IEVvbFN0cmVhbVR5cGVVdGlsLndyYXBJbnB1dFN0cmVhbShpbiwKKwkJCQlnZXRFb2xTdHJlYW1UeXBlKE9wZXJhdGlvblR5cGUuQ0hFQ0tJTl9PUCkpOwogCQlTdHJpbmcgZmlsdGVyQ29tbWFuZCA9IGdldENsZWFuRmlsdGVyQ29tbWFuZCgpOwogCQlpZiAoZmlsdGVyQ29tbWFuZCAhPSBudWxsKSB7CiAJCQlpZiAoRmlsdGVyQ29tbWFuZFJlZ2lzdHJ5LmlzUmVnaXN0ZXJlZChmaWx0ZXJDb21tYW5kKSkgewpAQCAtNTA5LDExICs1MDAsNiBAQCBmaWx0ZXJDb21tYW5kLCBnZXRFbnRyeVBhdGhTdHJpbmcoKSwKIAkJcmV0dXJuIGluOwogCX0KIAotCXByaXZhdGUgSW5wdXRTdHJlYW0gaGFuZGxlQXV0b0NSTEYoSW5wdXRTdHJlYW0gaW4sIE9wZXJhdGlvblR5cGUgb3BUeXBlKQotCQkJdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIEVvbFN0cmVhbVR5cGVVdGlsLndyYXBJbnB1dFN0cmVhbShpbiwgZ2V0RW9sU3RyZWFtVHlwZShvcFR5cGUpKTsKLQl9Ci0KIAkvKioKIAkgKiBSZXR1cm5zIHRoZSB3b3JraW5nIHRyZWUgb3B0aW9ucyB1c2VkIGJ5IHRoaXMgaXRlcmF0b3IuCiAJICoKQEAgLTY2NCw3ICs2NTAsOCBAQCBwdWJsaWMgSW5zdGFudCBnZXRFbnRyeUxhc3RNb2RpZmllZEluc3RhbnQoKSB7CiAJcHVibGljIElucHV0U3RyZWFtIG9wZW5FbnRyeVN0cmVhbSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CiAJCUlucHV0U3RyZWFtIHJhd2lzID0gY3VycmVudCgpLm9wZW5JbnB1dFN0cmVhbSgpOwogCQlpZiAoZ2V0Q2xlYW5GaWx0ZXJDb21tYW5kKCkgPT0gbnVsbAotCQkJCSYmIGdldEVvbFN0cmVhbVR5cGUoKSA9PSBFb2xTdHJlYW1UeXBlLkRJUkVDVCkgeworCQkJCSYmIGdldEVvbFN0cmVhbVR5cGUoCisJCQkJCQlPcGVyYXRpb25UeXBlLkNIRUNLSU5fT1ApID09IEVvbFN0cmVhbVR5cGUuRElSRUNUKSB7CiAJCQlyZXR1cm4gcmF3aXM7CiAJCX0KIAkJcmV0dXJuIGZpbHRlckNsZWFuKHJhd2lzKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9GU19XaW4zMi5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZTX1dpbjMyLmphdmEKaW5kZXggZmYwOTRmNi4uYWU3M2QzZiAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZTX1dpbjMyLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL0ZTX1dpbjMyLmphdmEKQEAgLTE2LDYgKzE2LDcgQEAKIGltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVWaXNpdE9wdGlvbjsKIGltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVWaXNpdFJlc3VsdDsKIGltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworaW1wb3J0IGphdmEubmlvLmZpbGUuTGlua09wdGlvbjsKIGltcG9ydCBqYXZhLm5pby5maWxlLlBhdGg7CiBpbXBvcnQgamF2YS5uaW8uZmlsZS5TaW1wbGVGaWxlVmlzaXRvcjsKIGltcG9ydCBqYXZhLm5pby5maWxlLmF0dHJpYnV0ZS5CYXNpY0ZpbGVBdHRyaWJ1dGVzOwpAQCAtOTYsNiArOTcsOSBAQCBwdWJsaWMgYm9vbGVhbiByZXRyeUZhaWxlZExvY2tGaWxlQ29tbWl0KCkgewogCS8qKiB7QGluaGVyaXREb2N9ICovCiAJQE92ZXJyaWRlCiAJcHVibGljIEVudHJ5W10gbGlzdChGaWxlIGRpcmVjdG9yeSwgRmlsZU1vZGVTdHJhdGVneSBmaWxlTW9kZVN0cmF0ZWd5KSB7CisJCWlmICghRmlsZXMuaXNEaXJlY3RvcnkoZGlyZWN0b3J5LnRvUGF0aCgpLCBMaW5rT3B0aW9uLk5PRk9MTE9XX0xJTktTKSkgeworCQkJcmV0dXJuIE5PX0VOVFJJRVM7CisJCX0KIAkJTGlzdDxFbnRyeT4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CiAJCUZTIGZzID0gdGhpczsKIAkJYm9vbGVhbiBjaGVja0V4ZWN1dGFibGUgPSBmcy5zdXBwb3J0c0V4ZWN1dGUoKTsKZGlmZiAtLWdpdCBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9TdHJpbmdVdGlscy5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL1N0cmluZ1V0aWxzLmphdmEKaW5kZXggOGFiMTMzOC4uOTE3YWRkMyAxMDA2NDQKLS0tIGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL1N0cmluZ1V0aWxzLmphdmEKKysrIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL1N0cmluZ1V0aWxzLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAsIEdvb2dsZSBJbmMuIGFuZCBvdGhlcnMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDIyLCBHb29nbGUgSW5jLiBhbmQgb3RoZXJzCiAgKgogICogVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlCiAgKiB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBEaXN0cmlidXRpb24gTGljZW5zZSB2LiAxLjAgd2hpY2ggaXMgYXZhaWxhYmxlIGF0CkBAIC0xNSw2ICsxNSw3IEBACiAKIGltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmFubm90YXRpb25zLk5vbk51bGw7CiBpbXBvcnQgb3JnLmVjbGlwc2UuamdpdC5pbnRlcm5hbC5KR2l0VGV4dDsKK2ltcG9ydCBvcmcuZWNsaXBzZS5qZ2l0LmxpYi5Db25zdGFudHM7CiAKIC8qKgogICogTWlzY2VsbGFuZW91cyBzdHJpbmcgY29tcGFyaXNvbiB1dGlsaXR5IG1ldGhvZHMuCkBAIC0zNyw2ICszOCwxMCBAQCBwdWJsaWMgZmluYWwgY2xhc3MgU3RyaW5nVXRpbHMgewogCQkJTENbY10gPSAoY2hhcikgKCdhJyArIChjIC0gJ0EnKSk7CiAJfQogCisJcHJpdmF0ZSBTdHJpbmdVdGlscygpIHsKKwkJLy8gRG8gbm90IGNyZWF0ZSBpbnN0YW5jZXMKKwl9CisKIAkvKioKIAkgKiBDb252ZXJ0IHRoZSBpbnB1dCB0byBsb3dlcmNhc2UuCiAJICogPHA+CkBAIC0yNjksOCArMjc0LDIwIEBAIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGpvaW4oQ29sbGVjdGlvbjxTdHJpbmc+IHBhcnRzLCBTdHJpbmcgc2VwYXJhdG9yLAogCQlyZXR1cm4gc2IudG9TdHJpbmcoKTsKIAl9CiAKLQlwcml2YXRlIFN0cmluZ1V0aWxzKCkgewotCQkvLyBEbyBub3QgY3JlYXRlIGluc3RhbmNlcworCS8qKgorCSAqIEFwcGVuZHMge0BsaW5rIENvbnN0YW50cyNET1RfR0lUX0VYVH0gdW5sZXNzIHRoZSBnaXZlbiBuYW1lIGFscmVhZHkgZW5kcworCSAqIHdpdGggdGhhdCBzdWZmaXguCisJICoKKwkgKiBAcGFyYW0gbmFtZQorCSAqICAgICAgICAgICAgdG8gY29tcGxldGUKKwkgKiBAcmV0dXJuIHRoZSBuYW1lIGVuZGluZyB3aXRoIHtAbGluayBDb25zdGFudHMjRE9UX0dJVF9FWFR9CisJICogQHNpbmNlIDYuMQorCSAqLworCXB1YmxpYyBzdGF0aWMgU3RyaW5nIG5hbWVXaXRoRG90R2l0KFN0cmluZyBuYW1lKSB7CisJCWlmIChuYW1lLmVuZHNXaXRoKENvbnN0YW50cy5ET1RfR0lUX0VYVCkpIHsKKwkJCXJldHVybiBuYW1lOworCQl9CisJCXJldHVybiBuYW1lICsgQ29uc3RhbnRzLkRPVF9HSVRfRVhUOwogCX0KIAogCS8qKgpkaWZmIC0tZ2l0IGEvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtJbnB1dFN0cmVhbS5qYXZhIGIvb3JnLmVjbGlwc2UuamdpdC9zcmMvb3JnL2VjbGlwc2UvamdpdC91dGlsL2lvL0JpbmFyeUh1bmtJbnB1dFN0cmVhbS5qYXZhCmluZGV4IDRmOTQwZDcuLjJjOTcyYjUgMTAwNjQ0Ci0tLSBhL29yZy5lY2xpcHNlLmpnaXQvc3JjL29yZy9lY2xpcHNlL2pnaXQvdXRpbC9pby9CaW5hcnlIdW5rSW5wdXRTdHJlYW0uamF2YQorKysgYi9vcmcuZWNsaXBzZS5qZ2l0L3NyYy9vcmcvZWNsaXBzZS9qZ2l0L3V0aWwvaW8vQmluYXJ5SHVua0lucHV0U3RyZWFtLmphdmEKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDIxIFRob21hcyBXb2xmIDx0aG9tYXMud29sZkBwYXJhbm9yLmNoPiBhbmQgb3RoZXJzCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEsIDIwMjIgVGhvbWFzIFdvbGYgPHRob21hcy53b2xmQHBhcmFub3IuY2g+IGFuZCBvdGhlcnMKICAqCiAgKiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUKICAqIHRlcm1zIG9mIHRoZSBFY2xpcHNlIERpc3RyaWJ1dGlvbiBMaWNlbnNlIHYuIDEuMCB3aGljaCBpcyBhdmFpbGFibGUgYXQKQEAgLTkwLDcgKzkwLDcgQEAgcHJpdmF0ZSB2b2lkIGZpbGxCdWZmZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewogCQlieXRlW10gZW5jb2RlZCA9IG5ldyBieXRlW0Jhc2U4NS5lbmNvZGVkTGVuZ3RoKGxlbmd0aCldOwogCQlmb3IgKGludCBpID0gMDsgaSA8IGVuY29kZWQubGVuZ3RoOyBpKyspIHsKIAkJCWludCBiID0gaW4ucmVhZCgpOwotCQkJaWYgKGIgPCAwIHx8IGIgPT0gJ1xuJykgeworCQkJaWYgKGIgPCAwIHx8IGIgPT0gJ1xyJyB8fCBiID09ICdcbicpIHsKIAkJCQl0aHJvdyBuZXcgRU9GRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAogCQkJCQkJSkdpdFRleHQuZ2V0KCkuYmluYXJ5SHVua0ludmFsaWRMZW5ndGgsCiAJCQkJCQlJbnRlZ2VyLnZhbHVlT2YobGluZU51bWJlcikpKTsKQEAgLTk5LDYgKzk5LDEwIEBAIHByaXZhdGUgdm9pZCBmaWxsQnVmZmVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKIAkJfQogCQkvLyBNdXN0IGJlIGZvbGxvd2VkIGJ5IGEgbmV3bGluZTsgdG9sZXJhdGUgRU9GLgogCQlpbnQgYiA9IGluLnJlYWQoKTsKKwkJaWYgKGIgPT0gJ1xyJykgeworCQkJLy8gQmUgbGVuaWVudCBhbmQgYWNjZXB0IENSLUxGLCB0b28uCisJCQliID0gaW4ucmVhZCgpOworCQl9CiAJCWlmIChiID49IDAgJiYgYiAhPSAnXG4nKSB7CiAJCQl0aHJvdyBuZXcgU3RyZWFtQ29ycnVwdGVkRXhjZXB0aW9uKE1lc3NhZ2VGb3JtYXQuZm9ybWF0KAogCQkJCQlKR2l0VGV4dC5nZXQoKS5iaW5hcnlIdW5rTWlzc2luZ05ld2xpbmUsCmRpZmYgLS1naXQgYS9wb20ueG1sIGIvcG9tLnhtbAppbmRleCBjNDg2NTY5Li44MTA5M2MwIDEwMDY0NAotLS0gYS9wb20ueG1sCisrKyBiL3BvbS54bWwKQEAgLTE4LDcgKzE4LDcgQEAKICAgPGdyb3VwSWQ+b3JnLmVjbGlwc2UuamdpdDwvZ3JvdXBJZD4KICAgPGFydGlmYWN0SWQ+b3JnLmVjbGlwc2UuamdpdC1wYXJlbnQ8L2FydGlmYWN0SWQ+CiAgIDxwYWNrYWdpbmc+cG9tPC9wYWNrYWdpbmc+Ci0gIDx2ZXJzaW9uPjYuMC4xLVNOQVBTSE9UPC92ZXJzaW9uPgorICA8dmVyc2lvbj42LjEuMS1TTkFQU0hPVDwvdmVyc2lvbj4KIAogICA8bmFtZT5KR2l0IC0gUGFyZW50PC9uYW1lPgogICA8dXJsPiR7amdpdC11cmx9PC91cmw+CkBAIC0xNTAsOSArMTUwLDkgQEAKICAgICA8amF2YS52ZXJzaW9uPjExPC9qYXZhLnZlcnNpb24+CiAgICAgPGJ1bmRsZS1tYW5pZmVzdD4ke3Byb2plY3QuYnVpbGQuZGlyZWN0b3J5fS9NRVRBLUlORi9NQU5JRkVTVC5NRjwvYnVuZGxlLW1hbmlmZXN0PgogCi0gICAgPGpnaXQtbGFzdC1yZWxlYXNlLXZlcnNpb24+NS4xMy4wLjIwMjEwOTA4MDgyNy1yPC9qZ2l0LWxhc3QtcmVsZWFzZS12ZXJzaW9uPgorICAgIDxqZ2l0LWxhc3QtcmVsZWFzZS12ZXJzaW9uPjYuMC4wLjIwMjExMTI5MTAwMC1yPC9qZ2l0LWxhc3QtcmVsZWFzZS12ZXJzaW9uPgogICAgIDxhbnQtdmVyc2lvbj4xLjEwLjEyPC9hbnQtdmVyc2lvbj4KLSAgICA8YXBhY2hlLXNzaGQtdmVyc2lvbj4yLjcuMDwvYXBhY2hlLXNzaGQtdmVyc2lvbj4KKyAgICA8YXBhY2hlLXNzaGQtdmVyc2lvbj4yLjguMDwvYXBhY2hlLXNzaGQtdmVyc2lvbj4KICAgICA8anNjaC12ZXJzaW9uPjAuMS41NTwvanNjaC12ZXJzaW9uPgogICAgIDxqemxpYi12ZXJzaW9uPjEuMS4xPC9qemxpYi12ZXJzaW9uPgogICAgIDxqYXZhZXdhaC12ZXJzaW9uPjEuMS4xMzwvamF2YWV3YWgtdmVyc2lvbj4KQEAgLTE2MCw3ICsxNjAsNyBAQAogICAgIDx0ZXN0LWZvcmstY291bnQ+MUM8L3Rlc3QtZm9yay1jb3VudD4KICAgICA8YXJnczRqLXZlcnNpb24+Mi4zMzwvYXJnczRqLXZlcnNpb24+CiAgICAgPGNvbW1vbnMtY29tcHJlc3MtdmVyc2lvbj4xLjIxPC9jb21tb25zLWNvbXByZXNzLXZlcnNpb24+Ci0gICAgPG9zZ2ktY29yZS12ZXJzaW9uPjQuMy4xPC9vc2dpLWNvcmUtdmVyc2lvbj4KKyAgICA8b3NnaS1jb3JlLXZlcnNpb24+Ni4wLjA8L29zZ2ktY29yZS12ZXJzaW9uPgogICAgIDxzZXJ2bGV0LWFwaS12ZXJzaW9uPjQuMC4wPC9zZXJ2bGV0LWFwaS12ZXJzaW9uPgogICAgIDxqZXR0eS12ZXJzaW9uPjEwLjAuNjwvamV0dHktdmVyc2lvbj4KICAgICA8amFwaWNtcC12ZXJzaW9uPjAuMTUuMzwvamFwaWNtcC12ZXJzaW9uPgpAQCAtMTY5LDggKzE2OSw4IEBACiAgICAgPHNsZjRqLXZlcnNpb24+MS43LjMwPC9zbGY0ai12ZXJzaW9uPgogICAgIDxtYXZlbi1qYXZhZG9jLXBsdWdpbi12ZXJzaW9uPjMuMy4xPC9tYXZlbi1qYXZhZG9jLXBsdWdpbi12ZXJzaW9uPgogICAgIDx0eWNoby1leHRyYXMtdmVyc2lvbj4yLjUuMDwvdHljaG8tZXh0cmFzLXZlcnNpb24+Ci0gICAgPGdzb24tdmVyc2lvbj4yLjguODwvZ3Nvbi12ZXJzaW9uPgotICAgIDxib3VuY3ljYXN0bGUtdmVyc2lvbj4xLjY5PC9ib3VuY3ljYXN0bGUtdmVyc2lvbj4KKyAgICA8Z3Nvbi12ZXJzaW9uPjIuOC45PC9nc29uLXZlcnNpb24+CisgICAgPGJvdW5jeWNhc3RsZS12ZXJzaW9uPjEuNzA8L2JvdW5jeWNhc3RsZS12ZXJzaW9uPgogICAgIDxzcG90YnVncy1tYXZlbi1wbHVnaW4tdmVyc2lvbj40LjMuMDwvc3BvdGJ1Z3MtbWF2ZW4tcGx1Z2luLXZlcnNpb24+CiAgICAgPG1hdmVuLXByb2plY3QtaW5mby1yZXBvcnRzLXBsdWdpbi12ZXJzaW9uPjMuMS4yPC9tYXZlbi1wcm9qZWN0LWluZm8tcmVwb3J0cy1wbHVnaW4tdmVyc2lvbj4KICAgICA8bWF2ZW4tanhyLXBsdWdpbi12ZXJzaW9uPjMuMS4xPC9tYXZlbi1qeHItcGx1Z2luLXZlcnNpb24+CkBAIC0yMDMsNiArMjAzLDE0IEBACiAgICAgICA8aWQ+cmVwby5lY2xpcHNlLm9yZy5jYmktc25hcHNob3RzPC9pZD4KICAgICAgIDx1cmw+aHR0cHM6Ly9yZXBvLmVjbGlwc2Uub3JnL2NvbnRlbnQvcmVwb3NpdG9yaWVzL2NiaS1zbmFwc2hvdHMvPC91cmw+CiAgICAgPC9wbHVnaW5SZXBvc2l0b3J5PgorICAgIDxwbHVnaW5SZXBvc2l0b3J5PgorICAgICAgPGlkPnJlcG8uZWNsaXBzZS5vcmcuZGFzaC1yZWxlYXNlczwvaWQ+CisgICAgICA8dXJsPmh0dHBzOi8vcmVwby5lY2xpcHNlLm9yZy9jb250ZW50L3JlcG9zaXRvcmllcy9kYXNoLWxpY2Vuc2VzLXJlbGVhc2VzLzwvdXJsPgorICAgIDwvcGx1Z2luUmVwb3NpdG9yeT4KKyAgICA8cGx1Z2luUmVwb3NpdG9yeT4KKyAgICAgIDxpZD5yZXBvLmVjbGlwc2Uub3JnLmRhc2gtc25hcHNob3RzPC9pZD4KKyAgICAgIDx1cmw+aHR0cHM6Ly9yZXBvLmVjbGlwc2Uub3JnL2NvbnRlbnQvcmVwb3NpdG9yaWVzL2Rhc2gtbGljZW5zZXMtc25hcHNob3RzLzwvdXJsPgorICAgIDwvcGx1Z2luUmVwb3NpdG9yeT4KICAgPC9wbHVnaW5SZXBvc2l0b3JpZXM+CiAKICAgPGJ1aWxkPgpAQCAtMzM4LDcgKzM0Niw3IEBACiAgICAgICAgICAgICA8ZGVwZW5kZW5jeT48IS0tIGFkZCBzdXBwb3J0IGZvciBzc2gvc2NwIC0tPgogICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLndhZ29uPC9ncm91cElkPgogICAgICAgICAgICAgICA8YXJ0aWZhY3RJZD53YWdvbi1zc2g8L2FydGlmYWN0SWQ+Ci0gICAgICAgICAgICAgIDx2ZXJzaW9uPjMuNC4zPC92ZXJzaW9uPgorICAgICAgICAgICAgICA8dmVyc2lvbj4zLjUuMTwvdmVyc2lvbj4KICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICA8L2RlcGVuZGVuY2llcz4KICAgICAgICAgPC9wbHVnaW4+CkBAIC0zODIsNiArMzkwLDExIEBACiAgICAgICAgICAgPGFydGlmYWN0SWQ+c3ByaW5nLWJvb3QtbWF2ZW4tcGx1Z2luPC9hcnRpZmFjdElkPgogICAgICAgICAgIDx2ZXJzaW9uPjIuNS40PC92ZXJzaW9uPgogICAgICAgICA8L3BsdWdpbj4KKyAgICAgICAgPHBsdWdpbj4KKyAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5kYXNoPC9ncm91cElkPgorICAgICAgICAgIDxhcnRpZmFjdElkPmxpY2Vuc2UtdG9vbC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICAgICAgPHZlcnNpb24+MC4wLjEtU05BUFNIT1Q8L3ZlcnNpb24+CisgICAgICAgIDwvcGx1Z2luPgogICAgICAgPC9wbHVnaW5zPgogICAgIDwvcGx1Z2luTWFuYWdlbWVudD4KIApAQCAtNTQwLDYgKzU1MywxMCBAQAogICAgICAgICA8Z3JvdXBJZD5vcmcuYXBhY2hlLm1hdmVuLnBsdWdpbnM8L2dyb3VwSWQ+CiAgICAgICAgIDxhcnRpZmFjdElkPm1hdmVuLXN1cmVmaXJlLXJlcG9ydC1wbHVnaW48L2FydGlmYWN0SWQ+CiAgICAgICA8L3BsdWdpbj4KKyAgICAgIDxwbHVnaW4+CisgICAgICAgIDxncm91cElkPm9yZy5lY2xpcHNlLmRhc2g8L2dyb3VwSWQ+CisgICAgICAgIDxhcnRpZmFjdElkPmxpY2Vuc2UtdG9vbC1wbHVnaW48L2FydGlmYWN0SWQ+CisgICAgICA8L3BsdWdpbj4KICAgICA8L3BsdWdpbnM+CiAgIDwvYnVpbGQ+CiAKQEAgLTg1Myw3ICs4NzAsNyBAQAogICAgICAgICAgICAgICA8ZGVwZW5kZW5jeT4KICAgICAgICAgICAgICAgICA8Z3JvdXBJZD5vcmcuZWNsaXBzZS5qZHQ8L2dyb3VwSWQ+CiAgICAgICAgICAgICAgICAgPGFydGlmYWN0SWQ+ZWNqPC9hcnRpZmFjdElkPgotICAgICAgICAgICAgICAgIDx2ZXJzaW9uPjMuMjcuMDwvdmVyc2lvbj4KKyAgICAgICAgICAgICAgICA8dmVyc2lvbj4zLjI4LjA8L3ZlcnNpb24+CiAgICAgICAgICAgICAgIDwvZGVwZW5kZW5jeT4KICAgICAgICAgICAgIDwvZGVwZW5kZW5jaWVzPgogICAgICAgICAgIDwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdG9vbHMvQlVJTEQgYi90b29scy9CVUlMRAppbmRleCAwYzZiOGVjLi5hMTA5MDE5IDEwMDY0NAotLS0gYS90b29scy9CVUlMRAorKysgYi90b29scy9CVUlMRApAQCAtMSwzNCArMSwyOCBAQAogbG9hZCgKICAgICAiQGJhemVsX3Rvb2xzLy90b29scy9qZGs6ZGVmYXVsdF9qYXZhX3Rvb2xjaGFpbi5iemwiLAotICAgICJKREs5X0pWTV9PUFRTIiwKICAgICAiZGVmYXVsdF9qYXZhX3Rvb2xjaGFpbiIsCiApCiBsb2FkKCJAcnVsZXNfamF2YS8vamF2YTpkZWZzLmJ6bCIsICJqYXZhX3BhY2thZ2VfY29uZmlndXJhdGlvbiIpCiAKLUpESzExX0pWTV9PUFRTID0gWwotICAgICItLWFkZC1leHBvcnRzPWpkay5jb21waWxlci9jb20uc3VuLnRvb2xzLmphdmFjLmFwaT1BTEwtVU5OQU1FRCIsCi0gICAgIi0tYWRkLWV4cG9ydHM9amRrLmNvbXBpbGVyL2NvbS5zdW4udG9vbHMuamF2YWMuY29kZT1BTEwtVU5OQU1FRCIsCi0gICAgIi0tYWRkLWV4cG9ydHM9amRrLmNvbXBpbGVyL2NvbS5zdW4udG9vbHMuamF2YWMuY29tcD1BTEwtVU5OQU1FRCIsCi0gICAgIi0tYWRkLWV4cG9ydHM9amRrLmNvbXBpbGVyL2NvbS5zdW4udG9vbHMuamF2YWMuZmlsZT1BTEwtVU5OQU1FRCIsCi0gICAgIi0tYWRkLWV4cG9ydHM9amRrLmNvbXBpbGVyL2NvbS5zdW4udG9vbHMuamF2YWMubWFpbj1BTEwtVU5OQU1FRCIsCi0gICAgIi0tYWRkLWV4cG9ydHM9amRrLmNvbXBpbGVyL2NvbS5zdW4udG9vbHMuamF2YWMudHJlZT1BTEwtVU5OQU1FRCIsCi0gICAgIi0tYWRkLWV4cG9ydHM9amRrLmNvbXBpbGVyL2NvbS5zdW4udG9vbHMuamF2YWMudXRpbD1BTEwtVU5OQU1FRCIsCi0gICAgIi0tYWRkLW9wZW5zPWpkay5jb21waWxlci9jb20uc3VuLnRvb2xzLmphdmFjLmZpbGU9QUxMLVVOTkFNRUQiLAotICAgICItLXBhdGNoLW1vZHVsZT1qYXZhLmNvbXBpbGVyPSQobG9jYXRpb24gQGJhemVsX3Rvb2xzLy90b29scy9qZGs6amF2YV9jb21waWxlcl9qYXIpIiwKLSAgICAiLS1wYXRjaC1tb2R1bGU9amRrLmNvbXBpbGVyPSQobG9jYXRpb24gQGJhemVsX3Rvb2xzLy90b29scy9qZGs6amRrX2NvbXBpbGVyX2phcikiLAotICAgICItLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5uaW89QUxMLVVOTkFNRUQiLAotICAgICItLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nPUFMTC1VTk5BTUVEIiwKLV0KLQogZGVmYXVsdF9qYXZhX3Rvb2xjaGFpbigKLSAgICBuYW1lID0gImVycm9yX3Byb25lX3dhcm5pbmdzX3Rvb2xjaGFpbiIsCi0gICAgYm9vdGNsYXNzcGF0aCA9IFsiQGJhemVsX3Rvb2xzLy90b29scy9qZGs6cGxhdGZvcm1jbGFzc3BhdGguamFyIl0sCi0gICAganZtX29wdHMgPSBKREsxMV9KVk1fT1BUUywKLSAgICBzb3VyY2VfdmVyc2lvbiA9ICIxMSIsCi0gICAgdGFyZ2V0X3ZlcnNpb24gPSAiMTEiLAorICAgIG5hbWUgPSAiZXJyb3JfcHJvbmVfd2FybmluZ3NfdG9vbGNoYWluX2phdmExMSIsCiAgICAgcGFja2FnZV9jb25maWd1cmF0aW9uID0gWwogICAgICAgICAiOmVycm9yX3Byb25lIiwKICAgICBdLAorICAgIHNvdXJjZV92ZXJzaW9uID0gIjExIiwKKyAgICB0YXJnZXRfdmVyc2lvbiA9ICIxMSIsCisgICAgdmlzaWJpbGl0eSA9IFsiLy92aXNpYmlsaXR5OnB1YmxpYyJdLAorKQorCitkZWZhdWx0X2phdmFfdG9vbGNoYWluKAorICAgIG5hbWUgPSAiZXJyb3JfcHJvbmVfd2FybmluZ3NfdG9vbGNoYWluX2phdmExNyIsCisgICAgY29uZmlndXJhdGlvbiA9IGRpY3QoKSwKKyAgICBqYXZhX3J1bnRpbWUgPSAiQGJhemVsX3Rvb2xzLy90b29scy9qZGs6cmVtb3RlamRrXzE3IiwKKyAgICBwYWNrYWdlX2NvbmZpZ3VyYXRpb24gPSBbCisgICAgICAgICI6ZXJyb3JfcHJvbmUiLAorICAgIF0sCisgICAgc291cmNlX3ZlcnNpb24gPSAiMTciLAorICAgIHRhcmdldF92ZXJzaW9uID0gIjE3IiwKICAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCiApCiAKQEAgLTEwOCwyMCArMTAyLDI1IEBACiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuYW50LnRlc3QvLi4uIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5hbnQvLi4uIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5hcmNoaXZlLy4uLiIsCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuZ3BnLmJjLnRlc3QvLi4uIiwKKyAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5ncGcuYmMvLi4uIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5odHRwLmFwYWNoZS8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0Lmh0dHAuc2VydmVyLy4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuaHR0cC50ZXN0Ly4uLiIsCi0gICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQuaHR0cC8uLi4iLAorICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0LnNzaC8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0Lmp1bml0Ly4uLiIsCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuanVuaXQvaHR0cC8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIudGVzdC8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy5zZXJ2ZXIvLi4uIiwKICAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5sZnMudGVzdC8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0Lmxmcy8uLi4iLAotICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnBhY2thZ2luZy8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnBnbS50ZXN0Ly4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQucGdtLy4uLiIsCi0gICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuc3NoLmFwYWNoZS8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5hcGFjaGUuYWdlbnQvLi4uIiwKKyAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLnRlc3QvLi4uIiwKKyAgICAgICAgIi8vb3JnLmVjbGlwc2UuamdpdC5zc2guYXBhY2hlLy4uLiIsCisgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQuc3NoLmpzY2gudGVzdC8uLi4iLAorICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnNzaC5qc2NoLy4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQudGVzdC8uLi4iLAogICAgICAgICAiLy9vcmcuZWNsaXBzZS5qZ2l0LnVpLy4uLiIsCiAgICAgICAgICIvL29yZy5lY2xpcHNlLmpnaXQvLi4uIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2JhemVsaXNrX3ZlcnNpb24uYnpsIGIvdG9vbHMvYmF6ZWxpc2tfdmVyc2lvbi5iemwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YjNkMTAuLjAwMDAwMDAKLS0tIGEvdG9vbHMvYmF6ZWxpc2tfdmVyc2lvbi5iemwKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1fdGVtcGxhdGUgPSAiIiIKLWxvYWQoIkBiYXplbF9za3lsaWIvL2xpYjp2ZXJzaW9ucy5iemwiLCAidmVyc2lvbnMiKQotCi1kZWYgY2hlY2tfYmF6ZWxfdmVyc2lvbigpOgotICB2ZXJzaW9ucy5jaGVjayhtaW5pbXVtX2JhemVsX3ZlcnNpb24gPSAie3ZlcnNpb259IikKLSIiIi5zdHJpcCgpCi0KLWRlZiBfaW1wbChyZXBvc2l0b3J5X2N0eCk6Ci0gICAgcmVwb3NpdG9yeV9jdHguc3ltbGluayhMYWJlbCgiQC8vOi5iYXplbHZlcnNpb24iKSwgIi5iYXplbHZlcnNpb24iKQotICAgIGJhemVsdmVyc2lvbiA9IHJlcG9zaXRvcnlfY3R4LnJlYWQoIi5iYXplbHZlcnNpb24iKS5zdHJpcCgpCi0KLSAgICByZXBvc2l0b3J5X2N0eC5maWxlKCJCVUlMRCIsIGV4ZWN1dGFibGUgPSBGYWxzZSkKLQotICAgIHJlcG9zaXRvcnlfY3R4LmZpbGUoImNoZWNrLmJ6bCIsIGV4ZWN1dGFibGUgPSBGYWxzZSwgY29udGVudCA9IF90ZW1wbGF0ZS5mb3JtYXQodmVyc2lvbiA9IGJhemVsdmVyc2lvbikpCi0KLWJhemVsaXNrX3ZlcnNpb24gPSByZXBvc2l0b3J5X3J1bGUoaW1wbGVtZW50YXRpb24gPSBfaW1wbCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbW90ZS1iYXplbHJjIGIvdG9vbHMvcmVtb3RlLWJhemVscmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThmNzk0ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlbW90ZS1iYXplbHJjCkBAIC0wLDAgKzEsNjcgQEAKKyMgQ29weXJpZ2h0IDIwMjIgVGhlIEJhemVsIEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBUaGlzIGZpbGUgaXMgYXV0by1nZW5lcmF0ZWQgZnJvbSByZWxlYXNlL2JhemVscmMudHBsIGFuZCBzaG91bGQgbm90IGJlCisjIG1vZGlmaWVkIGRpcmVjdGx5LgorCisjIFRoaXMgLmJhemVscmMgZmlsZSBjb250YWlucyBhbGwgb2YgdGhlIGZsYWdzIHJlcXVpcmVkIGZvciB0aGUgcHJvdmlkZWQKKyMgdG9vbGNoYWluIHdpdGggUmVtb3RlIEJ1aWxkIEV4ZWN1dGlvbi4KKyMKKyMgVGhpcyAuYmF6ZWxyYyBmaWxlIGFsc28gY29udGFpbnMgYWxsIG9mIHRoZSBmbGFncyByZXF1aXJlZCBmb3IgdGhlIGxvY2FsCisjIGRvY2tlciBzYW5kYm94aW5nLgorCisjIERlcGVuZGluZyBvbiBob3cgbWFueSBtYWNoaW5lcyBhcmUgaW4gdGhlIHJlbW90ZSBleGVjdXRpb24gaW5zdGFuY2UsIHNldHRpbmcKKyMgdGhpcyBoaWdoZXIgY2FuIG1ha2UgYnVpbGRzIGZhc3RlciBieSBhbGxvd2luZyBtb3JlIGpvYnMgdG8gcnVuIGluIHBhcmFsbGVsLgorIyBTZXR0aW5nIGl0IHRvbyBoaWdoIGNhbiByZXN1bHQgaW4gam9icyB0aGF0IHRpbWVvdXQsIGhvd2V2ZXIsIHdoaWxlIHdhaXRpbmcKKyMgZm9yIGEgcmVtb3RlIG1hY2hpbmUgdG8gZXhlY3V0ZSB0aGVtLgorYnVpbGQ6cmVtb3RlIC0tam9icz0yMDAKK2J1aWxkOnJlbW90ZSAtLWRpc2tfY2FjaGU9CisKKyMgU2V0IHNldmVyYWwgZmxhZ3MgcmVsYXRlZCB0byBzcGVjaWZ5aW5nIHRoZSBwbGF0Zm9ybSwgdG9vbGNoYWluIGFuZCBqYXZhCisjIHByb3BlcnRpZXMuCitidWlsZDpyZW1vdGUgLS1ob3N0X2phdmFiYXNlPUByYmVfamRrMTEvL2phdmE6amRrCitidWlsZDpyZW1vdGUgLS1qYXZhYmFzZT1AcmJlX2pkazExLy9qYXZhOmpkaworYnVpbGQ6cmVtb3RlIC0tY3Jvc3N0b29sX3RvcD1AcmJlX2pkazExLy9jYzp0b29sY2hhaW4KK2J1aWxkOnJlbW90ZSAtLWV4dHJhX3Rvb2xjaGFpbnM9QHJiZV9qZGsxMS8vY29uZmlnOmNjLXRvb2xjaGFpbgorYnVpbGQ6cmVtb3RlIC0tZXh0cmFfZXhlY3V0aW9uX3BsYXRmb3Jtcz1AcmJlX2pkazExLy9jb25maWc6cGxhdGZvcm0KK2J1aWxkOnJlbW90ZSAtLWhvc3RfcGxhdGZvcm09QHJiZV9qZGsxMS8vY29uZmlnOnBsYXRmb3JtCitidWlsZDpyZW1vdGUgLS1wbGF0Zm9ybXM9QHJiZV9qZGsxMS8vY29uZmlnOnBsYXRmb3JtCitidWlsZDpyZW1vdGUgLS1hY3Rpb25fZW52PUJBWkVMX0RPX05PVF9ERVRFQ1RfQ1BQX1RPT0xDSEFJTj0xCisKKyMgU2V0IHZhcmlvdXMgc3RyYXRlZ2llcyBzbyB0aGF0IGFsbCBhY3Rpb25zIGV4ZWN1dGUgcmVtb3RlbHkuIE1peGluZyByZW1vdGUKKyMgYW5kIGxvY2FsIGV4ZWN1dGlvbiB3aWxsIGxlYWQgdG8gZXJyb3JzIHVubGVzcyB0aGUgdG9vbGNoYWluIGFuZCByZW1vdGUKKyMgbWFjaGluZSBleGFjdGx5IG1hdGNoIHRoZSBob3N0IG1hY2hpbmUuCitidWlsZDpyZW1vdGUgLS1kZWZpbmU9RVhFQ1VUT1I9cmVtb3RlCisKKyMgRW5hYmxlIHRoZSByZW1vdGUgY2FjaGUgc28gYWN0aW9uIHJlc3VsdHMgY2FuIGJlIHNoYXJlZCBhY3Jvc3MgbWFjaGluZXMsCisjIGRldmVsb3BlcnMsIGFuZCB3b3Jrc3BhY2VzLgorYnVpbGQ6cmVtb3RlIC0tcmVtb3RlX2NhY2hlPXJlbW90ZWJ1aWxkZXhlY3V0aW9uLmdvb2dsZWFwaXMuY29tCisKKyMgRW5hYmxlIHJlbW90ZSBleGVjdXRpb24gc28gYWN0aW9ucyBhcmUgcGVyZm9ybWVkIG9uIHRoZSByZW1vdGUgc3lzdGVtcy4KK2J1aWxkOnJlbW90ZSAtLXJlbW90ZV9leGVjdXRvcj1yZW1vdGVidWlsZGV4ZWN1dGlvbi5nb29nbGVhcGlzLmNvbQorCisjIFNldCBhIGhpZ2hlciB0aW1lb3V0IHZhbHVlLCBqdXN0IGluIGNhc2UuCitidWlsZDpyZW1vdGUgLS1yZW1vdGVfdGltZW91dD0zNjAwCisKKyMgRW5hYmxlIGF1dGhlbnRpY2F0aW9uLiBUaGlzIHdpbGwgcGljayB1cCBhcHBsaWNhdGlvbiBkZWZhdWx0IGNyZWRlbnRpYWxzIGJ5CisjIGRlZmF1bHQuIFlvdSBjYW4gdXNlIC0tYXV0aF9jcmVkZW50aWFscz1zb21lX2ZpbGUuanNvbiB0byB1c2UgYSBzZXJ2aWNlCisjIGFjY291bnQgY3JlZGVudGlhbCBpbnN0ZWFkLgorYnVpbGQ6cmVtb3RlIC0tZ29vZ2xlX2RlZmF1bHRfY3JlZGVudGlhbHMKKworIyBUaGUgZm9sbG93aW5nIGZsYWdzIGVuYWJsZSB0aGUgcmVtb3RlIGNhY2hlIHNvIGFjdGlvbiByZXN1bHRzIGNhbiBiZSBzaGFyZWQKKyMgYWNyb3NzIG1hY2hpbmVzLCBkZXZlbG9wZXJzLCBhbmQgd29ya3NwYWNlcy4KK2J1aWxkOnJlbW90ZS1jYWNoZSAtLXJlbW90ZV9jYWNoZT1yZW1vdGVidWlsZGV4ZWN1dGlvbi5nb29nbGVhcGlzLmNvbQorYnVpbGQ6cmVtb3RlLWNhY2hlIC0tdGxzX2VuYWJsZWQ9dHJ1ZQorYnVpbGQ6cmVtb3RlLWNhY2hlIC0tcmVtb3RlX3RpbWVvdXQ9MzYwMAorYnVpbGQ6cmVtb3RlLWNhY2hlIC0tYXV0aF9lbmFibGVkPXRydWUK